Version 0.2 - released 10 Feb 2002 - minor fix in VxStaticText::Draw() to use dialog text colours, instead of dialog frame/fg/bg colors - minor change in VxApplication::paletteSelectDialog(), now items are in alphabetical order instead of in logical groupings/clusters - made a VxLib shared library, libVxLib.so, and update all the makefiles to reflect this. Now the shared library is used by default, because it gives a smaller executable size. The static library will still be provided. - minor fix for VxInterior, whereby now the scrollbar keeps its position when the window redraws (for example, when X window is resized) - minor addition to VxScrollpane::Prompt() and VxInterior::handleEvent() so that now the Home/End keys can make the view go to the first/last items respectively - minor fix in VxItemlist::scrollLeft(), scollRight() and VxScrollpane::scrollRight(), scrollLeft() so that when giving a parameter howMuch outside actual bounds the scroll variables are set to max/min - additions to VxItemlist, VxScrollpane and VxInterior to allow Ctrl+Left and Ctrl+Right to scroll left/right n intervals - changed VxItemlist and VxScrollpane to scroll variable interval depending on the number of items or the amount text present when using page up/down or Ctrl+left/right, and made minor fix in VxItemlist::initList() to handle cases where there is no need for horizontal scrolling - updated VxInterior::handleEvent() to reflect changes made in VxScrollpane in this and previous versions - minor fix in VxItemlist for scrollbar when selection nears first/last item - made minor update to documentation Version 0.1 - released 4 Jan 2002 - fixed bug where dialogs were improperly destroyed when X window was made smaller. Changed VxWindow::checkBounds() to only return true when resizing occurs - minor fix for X window resize checking, changed from Bounds.getHeight() - 1 to Bounds.getHeight() - 2 to accomodate for the menu bar also, which caused problems with overlapping VxWindows. Resizing, maximizing, restoring X window should now cause absolutely no problems. - minor fix in VxItemlist::Prompt() and VxScrollpane::Prompt(); now clicking on the scrollbar to do page up/down/left/right happens when the click is ON the scrollbar, not just the correct x or y coord (column or row) - fixed VxList::deleteItem( int n ) and VxList::insertItem( T *item, int n ) which used currentMoveToFirst() when they should have used moveFirst(), and thus VxScrollpane and VxInterior::insertText( char *, int n ) now work properly both when used before and after interiors/scrollpane inserted in windows/dialogs - removed VxApplication::maximizeWindow() and VxApplication::restoreWindow(), useless because one can call activeWindow() -> maximizeWin() if needed - implemented window restoring, and hence cmdRestoreWindow now works - fixed problem with VxLibIO::getEvent(), where due to better Alt/Control/Shift key masks in vxinput.h the respective key modifiers can now be detected correctly. This means that the macros keyShift_and() and keyCtrl_and() now work. - implemented text field highlighting/selections in VxTextfield. Now text can be selected with the keyboard (shift + arrows/home/end) and mouse drag. The text is deleted using VxTextfield::deleteHLText(). The highlight currently comes out in reverse colours. - fixed minor bug in VxRadioButtonlist::Prompt(), now if the current highlighted item is selected with the mouse the first time, it would check on - changed wOptions from char to unsigned long, so that more default and custom options can be defined - made wConstOptions in VxWindow, which are the options that always persist, even when new ones are set with setOptions() - made optIsWindow, optIsDialog and optIsMenu, and by doing so altered many functions/methods in VxWindow, most significantly draw(), which now checks for derivatives by using wOptions instead of typeid( *this ). This means much cleaner code, and much better derivation, so that new derivatives, say, of VxMenu, can take advantage of VxWindow functions better, and while not being of typeid( VxMenu ), they will be recognize as menus due to VxMenu's setting of wConstOptions to optIsMenu. Thus there are now generic types, being menu, window and dialog, which apply to derivatives, and are not only limited to VxMenu, VxDialog etc. as before. - removed all typeid( activeWindow() ) checks in VxApplication methods, and replaced them with getOptions() & optIsXYZ, which again makes for cleaner derivation and better code. - changed VxWindow::Draw() to allow dialog boxes to be resized if needed when the X window is made smaller, or if they are larger than the X window, instead of throwing an exception - made simple fix in VxMenu::setDimensions(), gotoNextItem() and gotoPrevItem() so that two or more seperators in a row now causes an exception to be thrown - changed X colours for Purple and DarkPurple in VxLibIO::initColours() - minor modifications made to example application "myapp" - made some modifications and additions to documentation Version 0.1 beta - released 1 Jan 2002 - VxLib now does not require or use the GNU memcheck library - memory corruption now no longer occurs. This is due to GCC 2.95.3. GCC 2.91.66 (egc 1.1.2) didn't like VxBuffer's methods of allocating memory (malloc!), nor VxPrintf, and corrupted the memory it allocated. This problem used to be resolved with GNU memcheck lib (how??). Error was "memory clobbered past end of allocated block". - fixed up + added more code comments, and fixed some exception messages (is this a change :-)?) - implemented VxList::deleteItem( int n ) and VxList::insertItem( T *item, int n ) to delete and insert, respectively, an item at position n after the first/HEAD item. - made VxInterior::insertText -> VxInterior::appendText, and made very minor changes for exception handling fir it. - made VxInterior::insertText( char *, int n ), to insert text in the interior at a position (relative to the window) n after the first line at 0. - made many small methods in VxWindow, VxMenu, VxDialog and VxApplication inline, changed location of command definitions and added several new commands - added support for window IDs, so that the application can now choose a specific window, say "sys_output", and make it active for writing, deleting etc. - added VxWindow::get/setID(), to set and get window IDs - made VxApplication::gotoWindowID( const char *id ) to jump to the window ID 'id' and bool VxApplication::hasWindowID() to check for a window with certain ID - extended this functionality to dialogs - implemented VxLib's resource managment - can now use VxResourceFile to stream in (<<) and out (>>) dialog and any other derivative of VxResource via the overloaded operators - this works for dialogs, and currently for VxCheckbox, VxTextfield and VxRadioButtonlist, which are really the only widgets which need to remember their values for now - this means that data/options etc. can be saved to and restored from a specified file (see myapp.cc, TestDialog3()) - implemeted a palette selection dialog, and a colour selection dialog, as VxApplication::paletteSelectDialog() and VxApplication::colourSelectDialog() - this means that the application's global palette VxPalette can be changed dynamically by the user at will - improved VxApplication::redrawAll so that it properly redraws everything - added a new widget, VxStaticText. It's just text inside a dialog, but it doesn't get deleted when the dialog redraws. - modified VxDialog::insertText() to create a new VxStaticText widget, instead of just using text with VxPrintf (which gets deleted when dialog redraws). VxStaticText can also be used stand alone, it's just that this is perhaps an easier method. If the text has to modified, however, then VxStaticText needs to be used instead, inserting it as normal with VxDialog::insertWidget() and then chaning the text with VxStaticText::changeText(); - modified VxDialog's gotoNextWidget(), gotoPrevWidget(), staticPrompt() and setCurrentWidget() to ignore VxStaticText widgets, because they really aren't "promptable" components. - made the window and dialog menu VxTab to become highlighted like a menu, so it looks more "graphical" :-) - slightly improved mouse handling of scrollbars in VxItemlist and VxScrollpane (and hence VxInterior), by adding page up/down capability when clicking the scrollbar itself - fixed memory leak in VxItemlist, Destroy() did not free iHScrollbar - made VxDialog::updateWidget to "reinsert" changed widgets (content/dimensions etc.) by redrawing them - made VxItemlist::resetList( VxList *, VxRect ) to change the text list and dimensions - made VxItemlist::updateList( void ) to update the variables of the list if the text/string list has been changed - fixed minor colour problem in VxMnuitem::drawSeperator, whereby the seperator would be drawn in the wrong colours - fixed handling of Enter/Space keys in VxDialog::getDefaultCmd(), whereby the widget list position is restored, so that the widget that caused the default command to be selected can later be found using getCurrentWidget() - implemented a file selection dialog, char *VxApplication::fileSelectDialog(), which can browse through directory trees and select files (with absolute paths). - fixed serious memory corruption bug in VxWindow, whereby isAllChanged(), setAllChanged(), isAllUnchaged(), and setAllChanged() wrote beyond the end of the wChanged buffer, causing segmentation faults when freeing memory. This used to work before because there was 32 * sizeof( wTextLine ) more memory allocated to wChanged. - implemented window maximizing, in VxWindow::maximizeWin() and application wide accessible in VxApplication::maximizeWindow() - modified VxWindow::handleEvent() to accomodate this, and made mouseHitTab(), to generically check for any VxTab, as long as it's not NULL - made a wMaximized flag, and slightly modified resizeWin() - modified VxWindow::drawTabs() to handle wTabXYZ == NULL just in case - heavily modified VxWindow::drawTitle() to handle larger titles, and subsequently modified keyboardResizeWin() and mouseResizeWin() to reflect this - fixed introduced bug, dialogs can no longer be maximized :-) - added VxScrollbar::Destroy() to draw off the scrollbar - fixed VxItemlist::updateList() so that the scrollbars will be drawn-off before any changes, then recreated if needed. - fixed introduced bugs in VxApplication::fileSelectDialog(), whereby if any file is selected on the root dir "/", it was given as "//file". Also, selecting a file using the "select" button now works for the current item in the file list. - made VxItemlist::scrollAllUp() and scrollAllDown(), so now the Home/End keys can make the list go to the first/last items respectively. - implemented window options, as optWindowXYZ, whereby a window can be chose not to be resizable and/or maximizable via VxWindow::setOptions( char ). In doing this slight modifications were made to many VxWindow methods. - slightly changed the way VxScrollbar handles scrolling internally, and fixed the way it redraws itself. Also added VxScrollbar::Redraw() and changed VxItemlist and VxScrollpane to redraw the scrollbar(s) after every (forced) Draw(). - changed the way windows and dialogs are added to the application, via VxApplication. Now openWindow( ... ) -> insertWindow( VxWindow * ) and openDialog( ... ) -> insertDialog( VxDialog * ). This was doe to accomodate the programmer changing the window/dialog options, variables etc. before actually drawing/inserting the window into the stack. - added VxWindow and VxDialog constructors to have old VxApplication::openWindow/ openDialog() args. - made optRectCentered, and changed VxWindow::Draw() to handle centering of windows, so that now an option to center a window can be passed with any coords, and it will resize them to fit the screen and/or center the rectangle. - fixed critical bug/problem with X window resizing, whereby VxLib would cause a crash when the X window is made smaller with VxLib windows/dialogs overlaping it. This no longer occurs, due to a change in VxWindow::Draw() which can now handle out of bounds coords and reconvert them to within-screen ones. - to handle X window resizes, VxLibIO::restoreBuf() needed to be changed to resize the area/VxRect of the buffer which was restored to within the new screen (X window) bounds. - also added bool VxWindow::checkBounds(), which checks whether the bounds of a window (and any derivative) are outside "screen" bounds, and resizes them appropriately so they fit within the new "screen" (X window). Also altered VxWindow::setBounds() to use checkBounds() instead of throwing an exception. - fixed scrollbar and Bounds handling in VxRadioButtonlist::Draw(), so that now vertical and horizontal scrollbars are correctly generated, and are be properly prompted. - fixed vertical scrollbar handling in VxScrollpane, now they scroll all the way - changed handling of commands, now cmdCloseWindow, cmdNextWindow and cmdMaximizeWindow are handled in VxApplication::handleCmd(), so that the derived application does not need to handle them - greatly improved commenting in example application, and also to made it to reflect changes - updated and expanded documentation. Now has more info and examples, and includes new section on window IDs and resource management, as well as new sub-sections, reflecting above changes. Version 0.1 alpha 2 (update release) - released 17 Dec 2001 - Nothing done to source code, only updated e-mail, TODO, added new Makefile, minor internel comments added Version 0.1 alpha 1 - finished 18 Jan 2000 - Added all features, first release