[Table of Contents] [Previous Chapter] [Next Chapter] [Object Central Home]

The V C++ GUI Reference Manual - Vers. 1.20 - 6/30/98

Copyright © 1998, Bruce E. Wampler


Appendix E
Release Notes

V is usually found in one of several archives: v-1.00.tar.gz, the full distribution of all current versions of V; vx-1.00.tar.gz, the X only distribution; and vwin100.zip, the MS-Windows only distribution. Note the version (1.00) will change as V is updated.

E.1  X Window System

The current X implementation of V uses the Athena widget set with some modified versions of some widgets from the Xaw3d widget set. The code has about 95% of what is needed to work on Motif, but this effort has been largely abandoned. If someone out there really wants Motif, please work on it.

Directories

The V directory structure has been designed to allow you to either install V in a personal directory, or at a higher system level. By defining an appropriate search path in the Makefile, your applications can find the required V files.

You should download the standard distribution file vx-1.00.tar.gz1, which is a gzip GNU Zipped tar file (or the full combined version, v-1.00.tar.gz). After you unzip the file (with gunzip, or the -z switch on some versions of tar), you can extract the file to wherever you want it. It will build a /v subdirectory from the directory containing the vx-1.00.tar file. The file hierarchy is:

/v
The main V directory.

/v/appgen
V application generator program.

/v/bccide
MS-Windows build files for Borland C++. (Not included in X only distribution.)

/bmp2vbm
Source for a simple MS-Windows and OS/2 .bmp bitmap format to .vbm V bit map format converter.

/v/bin
The /bin directory is used to hold the binaries of V sample programs. No binaries are included on the distribution, but at least the subdirectories /intel for Linux and /sun4 for Suns are included. There may be other subdirectories for other architectures.

/v/doc
The V documentation. The documentation included in the distribution is in HTML and PostScript format. The LATEX source is no longer being included in the standard distribution.

/v/draw
Source for the VDraw example program. Examples that are identical across platforms use a .cpp file extension.

/v/drawex
Very simple V draw example from C/C++ Users Journal article.

/v/examp
Source for a simple V example.

/v/includex/v
Source for the X *.h V header files.

/v/includew/v
Source for the MS-Windows *.h V header files. (Not included on X only version.)

/v/lib
Compiled version of the V library will be placed under appropriate subdirectories here. No precompiled libraries are included in the standard distribution.

/v/msvc
Project and make files for Microsoft VC++.

/v/obj
Compile object code is saved under here.

/v/srcx
The full C++ source for the X V library. The files use a .cxx extension.

/v/srcwin
The full C++ source for the Ms-Windows V library. The files use a .cxx extension. (Not on X only version.)

/v/test
The test program used to test V functionality.

/v/texted
Source for a simple editor based on vTextEdit class.

/v/tutor
The source code for the tutorial example.

/v/vopengl
Source for examples for V vBaseGLCanvasPane class that interfaces to OpenGL.

/v/watcom
Project and make files for Watcom C++ compiler.

Compilers

The makefile provided with V uses the GNU C++ compiler, g++. V does not use templates or other C++ features that can cause portability problems. The current version has been built and tested using g++ Version 2.8 although it did work back to Version 2.6.3, but not earlier versions. There is no inherent reason that V should not compile with other C++ compilers.

The X Makefile

The Makefile is the main way to build X versions of V. It has comments that should help you to build the X version of V. See the file README.TXT for more instructions for installing V on a *nix platform. All of the customizations for a given platform have been isolated into the file [Config.mk].

To date, V has successfully been compiled on several platforms, including Linux, SunOS, Solaris, AIX, SGIs, and DEC Alphas. The standard distribution includes a Makefile that can be easily configured for several platforms. The makefile requires GNU make! The secret is to examine Config.mk and add and modify the definitions at the beginning as needed for your platform. (For Linux, this will usually be a no op, since Linux is the default configuration.) Examine the definitions already there, and then add a section with the locations defined as needed for your platform. Then use an ARCH= definition on the make line (or make your platform the default.)

X Resources

V makes limited used of X resources. The main use is to define the basic color schemes for controls and dialogs. The following resources are used:

vDialogBG
The color used for the background of dialogs and command bars.

vStatusBarBG
The color used for the background of the status bar.

vMenuBarBG
The background color of the menu bar and menu drop downs.

vControlBG
The background color for some controls, such as sliders and scroll bars.

vControlFace
The color used for the faces of various controls such as buttons.

vLightControlShadow
The color used for the light shadow on 3D controls.

vDarkControlShadow
The color used for the dark shadow on 3D controls.

By varying just the above X resources, you can really change the visual look of your V app. The /v/srcx directory contains several files of the form vRes* that contain various color schemes. The default color scheme is contained in vResDefault (but you don't need to load it - it is the default). The file vResBlueMtf contains the color scheme similar to Motif. This is the contents of vResDefault:

*vDialogBG: gray75
*vStatusBarBG: gray80
*vMenuBarBG: gray70
*vControlBG: gray80
*vControlFace: gray70
*vLightControlShadow: gray87
*vDarkControlShadow: gray50
To use one of these, or your own, resource files, you can use the command xrdb -merge vResColorscheme. You can also add the lines to your .Xresources file.

The X program name is the name you supply to the vApp constructor.

X Bugs

The PostScript print driver does not draw shapes with hatched brushes.

The PostScript drawing canvas does not support CopyFromMemoryDC.

Source code uses two naming conventions - .cxx and .cpp. Gnu g++ version 2.6 and later support both file extensions. G++ version 2.5 doesn't like .cpp, so you might have to rename those files to .cxx,

There seems to be problems with colors on X Pseudocolor systems.

E.2  Microsoft Windows

The current implementation of V for MS-Windows is for Windows 3.1 and WIN32 (Windows 95 and NT). We will refer to this version as Vwin in this description. The Windows version of V is available at as [vwin100.zip] (a MS-Windows Zip format file) on the V ftp site. You will need a version of ZIP or gunzip and tar to extract V.

Directories

The directory structure of V under MS-Windows is similar to the X version. On the distribution, the MS-Windows hierarchy is found under the /v directory. (We will use Unix / notation for files instead of the usual MS-Windows backslash notation. Most MS-Windows compilers handle the / correctly, and / is used throughout the V source files.) When you unzip the archive, a subdirectory /v will be built.

Under /v are /bin/win for the example V MS-Windows binaries, /draw for the VDraw example program, /examp for a simple example program, /includew/v for the V\ .h header files, /lib/win for the MS-Windows compiled library, /obj/win* for the object files, /srcwin for the MS-Windows version of the source code, /test for the test driver program, and /tutor for the source code to the tutorial included in this reference manual.

For MS-Windows, the V library source files use a .cpp extension. The example programs also use .cpp. The source for most of the example programs is identical for the MS-Windows and X versions! However, the source for the library .cpp and .h files are different for each platform, so you must be careful not to mix the X and MS-Windows versions of source code and header files.

Compilers

Vhas been successfully been compiled using Borland C++ 4.5 for Win3.1 and WIN32; Borland C++ 5.02 for WIN32; Watcom 10.6 for Win3.1 and WIN32; the GNU-WIN32 gnu g++ compiler (both with Cygwin and mingw32); and Microsoft VisualC++ under several versions.

Several Borland .ide files are included on the directory /vwin/bccide. The .ide files assume V is built on drive C:, so you may have to modify it if you want to build V\ on your own system. If you are using another compiler, then you need to compile every .cpp file found on the /srcwin directory.

Project files for compiling with Watcom C++ are included in the directory v/watcom. Unlike the Borland versions, the object code and libraries are built directly on these watcom directories.

The required changes and makefiles required for the mingw32 compiler will be made available on the Vweb site.

MDI/SDI Models

V for MS-Windows supports both the MS-Windows MDI and SDI models. By default, V uses MDI, and will bring up the main MDI window, and open the first MDI child window. There currently is no way to have a main MDI window with no active MDI child windows - when you exit the last window, the application closes. The menu, command bar, and status bars will change to the ones defined by each child window as each child window is activated.

V will automatically append a Window menu item to the main menu. The built in Window menu supports the standard cascade and tile MDI operations, as well as showing a list of MDI children.

You can also get MS-Windows applications to look like the standard SDI model. If you want an SDI app, you control this in the static declaration of the vApp object:

  static testApp* tApp = new testApp("Vtest",1);
The second parameter controls MDI or SDI. A default parameter is defined by Vas 0 to indicate the MDI model. If you specify a 1, then Vwill take an SDI look. It actually does this by using the MDI code, but maximizing the canvas window, removing the extra buttons from the menu bar, and not adding the Window menu. It is impossible for the user to tell that this is really an MDI application, but Vdoes not strictly enforce this. If you create more than a single vCmdWindow object, unpredictable things will happen under the SDI simulation. It is up to you to not do that.

Since X doesn't have an MDI/SDI equivalent, it is harmless to specify SDI to an X version of your app.

Icons

As stated in the main part of this manual, V does not use resource files. This is true for the MS-Windows versions. However, there is one reason you might want to include a .RC file with a V MS-Windows application, and that is to allow you to define the icons used with the application. (These are MS-Windows icons, and are not the same things as vIcons.)

Typical MS-Windows MDI applications use two icons - one for when the whole application is iconized, and one when each child window is iconized. If you don't supply a .RC file, you will get the default MS-Windows icons. The V distribution supplies two default icons of its own, called vapp.ico and vwindow.ico. By including the definitions vAppIcon ICON vapp.ico and vWindowIcon ICON vwindow.ico in the .RC file, V will load and use those icons for the application and each child window respectively. You can substitute whatever two icons you want for your application by specifying different .ico files for the vAppIcon and vWindowIcon names in the .RC file.

DEF File

MS-Windows applications are typically compiled using a .DEF file. You can modify any of the .DEF files included with V sample programs.

Bugs on MS-Windows

E.3  V Versions

Version 1.00
This version was local to the University of New Mexico on January 10, 1996. Versions 1.01, 1.02, and 1.03 were local maintenance releases.

Version 1.04
This was the first major public release of V, and was announced to the world on February 14, 1996.

Version 1.05
This version had several bug fixes obtained from feedback of the public release.

Version 1.06

This was an X only release, and added 3D controls.

Version 1.07

This release was never formally announced, and included some of the changes listed for version 1.07.

Version 1.08

The 4/15/96 release added several significant features to V:

  • The vMemoryDC drawing canvas, including new methods CopyFromMemoryDC and DrawColorPoints.

  • Internal revisions for handling of color, including adding vColor::ResetColor to allow reuse of color maps, and vColor::BitsOfColor to get color capability. These revisions allow Vapps to make more effective use of default color maps.

  • vPen::SetColor(r,g,b) and vBrush::SetColor(r,g,b) are being dropped in favor of the vColor forms. These calls break the hidden management of color maps, and while still included in the code, should not be used. Support for the (r,g,b) form will be dropped entirely in future versions of V.

  • C_ToggleIconButton was added to allow a pressed in button interface look in place of check boxes and radio buttons.

  • Documentation for ChangeColor and C_ColorLabel was added, although the functionality has been there for a while.

  • The WIN32 port was finished, and the X and MS-Windows versions are now in sync.

Version 1.09
Added C_ToggleButton and C_ToggleFrame controls. It also includes a large number of Vicons suitable for building command pane tool bars.

Version 1.10
The 5/29/96 release of V includes the following enhancements and changes:

  • The V Icon Editor - an icon editor to create icons for various V controls.

  • Inclusion of accelerator key support in menus.

  • Addition of the ChangeListPtr set type to allow completely dynamic lists, combo boxes, and spinners.

  • Addition of DrawLines, DrawPoints, and DrawRectangles to vCanvas.

  • Several bug fixes for both MS-Windows and X, some relatively major.

  • The canvas page scroll messages were changed on the X version to correspond to the behavior of the MS-Windows version. A page scroll message is sent only at the completion of a scroll, not continuously as before. It is usually rather difficult to implement nice continuous scrolling, so this approach seems more useful to more people. This is the only known change that might affect compatibility with previous Vapplications.

  • Addition of a directory for outside contributions.

Version 1.11

The 7/4/96 release of V has several minor bug fixes for the MS-Windows and X versions. It also adds the WorkSlice methods to support applications that require computations to continue even if the user is not entering commands to the application.

Version 1.12

This was a bug fix release for MS-Windows. The X version was unchanged, but renumbered for consistency.

Version 1.13

This 8/24/1996 release of V is a major release with several new features, and some significant bug fixes that can change the behavior of existing Vapplications. The following includes a list of changes:

  • The V Application Generator, vgen is now included with the standard distribution. It will generate a simple V application as a starting skeleton for new apps.

  • The values being passed by V to vCanvasPane::VPage and HPage were incorrect on the X version. The documentation states that the values for Top should be in the range 0 to 100. The MS-Windows version worked correctly, but the X version was passing a range of 0 to (100-Shown). This bug actually has been in the X version since the switch to 3D Controls. With version 1.13, both MS-Windows and X work the same.

  • The MS-Windows version of vDC::DrawText was fixed to work according to the documentation. It had been drawing text with the x,y as the upper left corner of the text. Beginning with 1.13, it now draws at the lower left corner as specified in the documentation.

  • Two functions, GetHScroll and GetVScroll, were added to vCanvasPane to make dealing with scroll bars easier.

  • A new standard using enums for generating IDs for controls has been adopted beginning with 1.13.

  • C_TextIn controls now allow you to specify the width of the control in characters using the size field. This is described in Chapter 6.

  • In vCanvasPane, new parameters (with default values for backward compatibility) were added to CopyFromMemoryDC to allow subregions to be copied.

  • Using a vTransparent pen when drawing text now results in leaving the existing background when drawing, and a vSolid pen overwrites with the current background color.

  • There was a conflict on MS-Windows with using VK_ for key names. The MS-Windows version was changed long ago, and now the X version also uses lower case letters (e.g., vk_Tab).

Version 1.14

The major addition to 10/6/96 VRelease 1.14 is the addition of the vTextEditor class, which is a very good first pass at a complete editing canvas. The editor is complete, can be extended to support custom command sets or file management. It is missing cut, copy, and paste, which will be implemented as general support for these is added to V. The code for vTextEditor is based on vTextCanvasPane, and is identical for the X and MS-Windows versions.

Also, for the X Version, support for OpenGL has been added. This support is found in the distribution directory v/vxgl. While the VOpenGL canvas pane seems very robust, it is still somewhat experimental. I would like any feedback on its use and design.

Other changes, mostly bug fixes, include:

  • X version: The little close button on the left of the menu bar has been dropped by popular request. It seems most people didn't like it. If you do, you can still get it by defining the symbol USE_CLOSE_BUTTON. Instead, Vnow supports the X WM_DELETE_WINDOW protocol. This protocol is supported slightly differently by different window managers, but accomplishes the same thing as the old close button.

  • X version: There was a minor bug in how the scroll bars worked when top == 0.

  • X version: The method used to get the size of a window was changed, and should now give correct values.

  • X version: There was a bug in drawing radio buttons that only showed up on some systems.

  • X version: There was a bug in changing the current selection in combo boxes.

  • X version: There was a bug in setting colors for the PostScript DC.

  • X and MS-Windows: There were several bugs in vTextCanvasPane exposed by the implementation of vTextEditor.

  • X version: There was a bug in the key mapping that would cause a program to terminate if an unrecognized key was pressed.

  • MS-Windows: The method to determine the size of the MDI frame and client windows was improved (I hope!).

  • MS-Windows: A bug with the work timer was fixed. The interaction between the work timer, check events, and the MS-Windows message loop was changed to work better.

  • MS-Windows: The argument order of ClearRect was fixed to correspond to X and the documentation.

  • MS-Windows: There was a bug that didn't allow SetValue to work correctly for some controls.

  • MS-Windows: A bug in handling the MS-Windows caret in text canvases was fixed. This one was a bit subtle, but nasty in possible side effects. Also, EnterFocus and LeaveFocus did not work correctly.

  • MS-Windows: A bug in setting text colors on NT and Windows 3.1 was fixed. The bug did not manifest itself on Windows 95.

Version 1.15

Release of V Version 1.15 has some non-backward compatible changes. In previous versions of V, there were inconsistencies in the order of width and height parameters. These have all been now changed to consistently use a width/height order. (Except for vIcon, which still use height/width.) The decision to fix this order came from a general consensus of the V mail list.

You will need to change your code to reflect the new changes. The following things must be changed:

1. Any calls to the constructor of a base or derived vCmdWindow will need the width and height order swapped.

2. Calls or overrides of vApp::NewAppWin need the order of width and height swapped.

3. Calls to vCanvasPane::SetHeightWidth(h,w) need to be changed to vCanvasPane::SetWidthHeight(w,h).

4. Calls or overrides of all versions of Redraw(x,y,h,w) need to be changed to Redraw(x,y,w,h).

5. Calls or overrides of all versions of Resize(h,w) need to be changed to Resize(w,h). (The vTextCanvas row/column versions retain their row/column order.)

Also, the makefiles have been revised for more flexible building on different *nix platforms.

A new method, vDialog::DialogDisplayed has been added to allow dynamic setting of dialog control values.

Version 1.16

Version 1.16 has no significant changes in V functionality. It mostly has some bug fixes. The only major change is the release of a completely new set of Makefiles for the Unix version. These new makefiles were contributed by a V user, and are much cleaner than the old versions.

A summary of the changes:

  • A small change to the code generated by vAppGen.
  • A fix to scrolling in the V Icon Editor.
  • Some changes to the v_defs.h file for MS-Windows, including compatibility changes needed for Microsoft VC++. Project files were added for MSVC++.
  • The == and != operators for brushes, fonts, pens, and colors were changed to use reference parameters consistently.
  • Various minor changes to enhance compiler compatibility, both on MS-Windows and X.
  • VReply was fixed to work over multiple shows.
  • A void* was added to vAppWinfo.
  • Vmemdc had height and width switched.
  • Sizing of buttons on MS-Windows was fixed for Windows 95.
  • A resource leak was fixed for MS-Windows.
  • A major bug that showed up only under Microsoft VC++ was fixed.
  • Initialization of text in strings was fixed for MS-Windows.
  • Changing the values of radio buttons on MS-Windows now works.
  • Spinners now honor the size specification.
  • A tab keystroke now works correctly on MS-Windows.
  • A bug in
  • Various new tests were added to the test program.
  • A couple of bugs were fixed in the X OpenGL V interface.

Version 1.17

Version 1.16 has proven to be remarkably stable. A few minor bugs have been reported and corrected for Version 1.17. Some enhancements have been added, the most significant allows you to specify the number of rows displayed in a list box.

A summary of the changes:

  • Lists by default display 8 rows, buy you can now specify and size between 1 and 32 rows.
  • A bug in Windows when closing multiple windows was fixed.
  • The vReply dialog has been changed to allow a default string in the input field.
  • Direct printing to lpr has been added to the X version.
  • The PostScript driver was modified to print better lines.

Version 1.18

Release 1.18 has a major enhancements to V. The main addition is support for Tool Tips - little boxes with text info that are automatically displayed when the user holds the mouse over a control. Tool Tip support is very trivial to add to your programs, and greatly enhances the user interface.

There are some minor enhancements, and a few bug fixes. Beginning with the 1.18 release, there will be a separate document that summarizes the changes for that version. This will simplify the upgrade path for past users.

Version 1.19

Release 1.19 has some minor enhancements, and a few bug fixes. The main enhancement is the addition of password support for text in controls. There have also been some improvements to vgen, especially for support for the mingw32 MS-Windows compiler. The support for the mingw32 compiler has been improved.

Version 1.20

Release 1.20 is has some major new features.

  • Support for OpenGL. OpenGL is now supported on both X and MS-Windows. While the interface to the vBaseGLCanvasPane class has not changed, the X version was revised to be properly derived from vCanvasPane, and is now included as a standard class in the library.

  • The clipboard is finally supported - at least for text.

  • The text editor class has been improved. The included text editor based on the class now supports C++ syntax highlighting.

  • The first version of the V Integrated Development Environment for the GNU g++ compiler has been included. It currently works with makefiles you generate. It will be improved to include full project management, a class browser, a dialog builder, and other neat features.

  • Vgen, the Vshell application generator, has been improved, and also includes support for generating OpenGL app shells.

  • There has been a serious bug ever since version 1.00 when closing multiple windows. The void vApp::CloseAppWin class did not properly allow the user to cancel the close sequence by the app. This class has been changed to int vApp::CloseAppWin, and if your override returns 0, the exit process will now be properly aborted. Unfortunately, this means you must change all of you apps to conform to the new int type.

  • The vApp::xxAll methods were broken on the X version.

  • A problem with tool tips on MS-Windows with multiple opens and closes on dialogs has been fixed.

  • The startup code has been separated to allow easier building of DLLs.

  • On MS-Windows, the Esc key is now the same as clicking the Cancel button. This has not been implemented on X yet. This change potentially causes a problem with MS-Windows apps. MS-Windows handles the Esc key by reserving the value 2. Unfortunately, there is no way to tell if the 2 is from the Esc key or from a menu or dialog command item you've defined with the value 2. So, you must change the value of any button or command object you have with the id value of 2 to something else. Sorry.

E.4  Future Plans


[Table of Contents] [Previous Chapter] [Next Chapter] [Object Central Home]


Footnotes:

1 Or whatever the latest version is...