FOX Toolkit
 
News
 
     
  Home
News
Download
License
Goals & Approach
Documentation
FAQ
FXRex
Screenshots

Adie
PathFinder
FOX Calculator

Projects

FXPy
FXRuby
EiffelFox
Japanese Docs

 

January 15, 2003 - New drop: DEVELOPMENT FOX 1.1.22


Updated FXDirList for unlimited path lengths. We found MAXPATHLEN to be exceeded in some case, just like FXFileList. Also, FXDirList now properly lists drives under Windows. Periodic scanning now happens non-recursively.

Renamed FXTreeList::sortItems() to FXTreeList::sortRootItems().

Added API's to move items around in FXTreeList.

Added API's to move items around in FXList and FXIconList.

Added API's to FXSpinner to set arrow colors.

Added new API's for loading DLL's or dynamic libraries:

  • fxdllOpen(). Opens a DLL with given name, returning a handle.
  • fxdllClose(). Closes DLL with the given handle.
  • fxdllSymbol(). Returns symbol in the DLL with the given handle.
This has only been coded for Linux and Windows. Other platforms will still need some work. Note that fxdllOpen() may be called multiple times on the same library name. We're counting on the underlying O.S. to reference count (Linux and Windows both do!).

Added API to FXApp to return drag window. This may be useful to determine which window is currently a drag source. Also added API to FXApp to see if FXApp was already initialized.

Added API to FXFile to return root of a path. On UNIX, this is only "/" but on Windows this may be something like "c:" or "\\".

Fixed FXString::vformat().

In a few days, fox-toolkit.org may go down for an unspecified amount of time as my DSL provider has gone under. Grab it while you can. Otherwise, visit the mirror site:

FTP:     ftp://fifthplanet.net/pub
HTTP:  http://www.fifthplanet.net/fox/fox.html

January 9, 2003 - New drop: STABLE FOX 1.0.30


Minor bug fix:- fixed FXString::vformat(); vformat() uses vsnprintf() if available, vsprintf() otherwise. The former is buffer-overrun safe. Some systems have different symantics for vsnprintf(), and FOX now compensates for this.

December 29, 2002 - ANNOUNCEMENT


Due to my ISP (directvdsl) going belly-up, the FOX web-site may be temporarily unavailable sometimes.
If this happens, point your browser to the mirror site:

FTP:     ftp://fifthplanet.net/pub
HTTP:  http://www.fifthplanet.net/fox/fox.html

December 23, 2002 - New drop: STABLE FOX 1.0.29

Fixed drawing bug in FXTreeList. Drawing with TREELIST_SHOWS_BOXES but no TREELIST_SHOWS_LINES was all messed up.

December 5, 2002 - New drop: DEVELOPMENT FOX 1.1.21


Added new API's to FXString:
  • substitute() substitute one substring by another.
  • contains() count possibly overlapping occurences of a substring in the string.
There are several overloads for these functions.

Clarified some documentation in FXApp, FXWindow.

Updated FXFileList to allow it to work with arbitrarily long file names, user names, group names, and directory names. Some people had paths longer than MAXPATHLEN and this caused problems.

Moved JUSTIFY_XXX options from FXLabel to FXFrame; various subclasses of FXFrame use these flags (but FXFrame itself does not, as it has no contents!).

Added support for JUSTIFY_XXX in FXImageFrame.

Added API FXFile::linkinfo(), which stats the link and not the file the link refers to.

Added flags TEXTFIELD_AUTOGRAY and TEXTFIELD_AUTOHIDE to FXTextField, enabling it to automatically gray (or hide) when its target does not respond to SEL_UPDATE messages. This is very useful when messages are routed around, e.g. via MDI widgets.

Added new widget, FXTriStateButton, which can assume three states (false, true, and maybe), where the maybe state is usually only reached programmatically or by means of SEL_UPDATE handlers. You can use this widget whenever your application calls for a toggle type button which may have indeterminate state.

Fixed small buglet in FXTextField; in rare cases, cursor position was outside of text.

Fixed bug in fxcpuid() implementation:- according to SYSV x86 ABI, EBX is used when compiling PIC for shared libraries; the initial implementation of fxcpuid() was usurping EBX for other uses. The x86/Linux-only API fxcpuid() returns some flags which detect various interesting features of your x86 CPU, such as SSE, SSE2, MMX, MMXEX, 3DNOW, 3DNOWEXT, and TSC presence.


November 20, 2002 - New drop: STABLE FOX 1.0.28


A few very minor bug fixes:

  • A minor bug has been discovered in the BMP reader; sanity checking code erroneously rejected 4 bit/pixel RLE compressed bitmaps; apparently, these are pretty rare :-).
  • Fixed small buglet in FXOptionMenu:- GUI Update becomes disabled after manipulation of the option menu in some scenarios.
  • FXSettings had spelling error in warning message.
  • Small bug in FXFile::simplify(); simplify("c:\..\") became "c\" instead of "c:\".

November 13, 2002 - New drop: DEVELOPMENT FOX 1.1.20


Added nifty API's to FXImage:
  • fill() fill image with a constant color.
  • hgradient() fill image with a horizontal gradient using two colors.
  • vgradient() fill image with a vertical gradient using two colors.
  • gradient() fill image with a bi-linear gradient using four different colors.
  • fade() fade an image to a given color by a certain factor.
  • blend() blend (transparent) image over a given color.
Stay tuned for more image manipulation API's!

Added performance (LINUX/GCC/GAS/x86 only) API's:

  • FXlong fxgetticks() reads Pentium/Athlon time stamp counter register. This register increments one unit each single clock (for example on my Athlon 1600+ this means 1,400,000,000 ticks/second!). Very useful to settle heated arguments about whose code is faster :-)
  • FXuint fxcpuid() determines presence of "interesting" CPU features such as MMX, MMXEX, 3DNOW, 3DNOWEXT, SSE, SSE2, and presence of Time Stamp Counter register. You can use this function if:
    • You're using GCC/GAS/x86.
    • You want to whip up some cool inline MMX, 3DNOW, or SSE(2) code.
    If you're not using GCC and GAS, you'll have to do without!

Fixed small introduced bug in FXTextField:- when replacing selection, old cursor position was sometimes out of range.

Fixed small problem in FXFile. FXFile::absolute("c:\..\") was yielding "c\" instead of "c:\".

Added feature to FXHeader:- when clicking on split between captions, a SEL_CLICKED message is sent to the target.

Added feature to FXIconList. When receiving a SEL_CLICKED message from FXHeader, FXIconList recomputes the minimal required space for the caption, given the current list of items in it.

Made slight change to behaviour of FXTextField. When replacing selection by another string, only a single callback message now results.

Added getNumOptions() API to FXOptionMenu. FXOptionMenu also sends a SEL_COMMAND message now after completion of the interaction. Also fixed GUI updating of FXOptionMenu.

October 30, 2002 - New drop: DEVELOPMENT FOX 1.1.19


Bug fixes: Changed workings of FXMALLOC() and co. again; the initial theory, I have to admit, was flawed and impractical; the new workings however are far more practical:

FXMALLOC(ptr,type,no)
Allocate no elements of type to the specified pointer. Return FALSE if size!=0 and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

FXCALLOC(ptr,type,no)
Allocate no elements of type to the specified pointer, and clear this memory to zero. Return FALSE if size!=0 and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

FXRESIZE(ptr,type,no)
Resize a previously allocated block of memory. Returns FALSE if size!=0 and reallocation fails, TRUE otherwise. If reallocation fails, pointer is left to point to old block; a reallocation to a zero size block has the effect of freeing it.

FXMEMDUP(ptr,type,src,no)
Allocate and initialize memory from another block. Return FALSE if size!=0 and source!=NULL and allocation fails, TRUE otherwise. An allocation of a zero size block returns a NULL pointer.

FXFREE(ptr)
Free a block of memory allocated with either FXMALLOC, FXCALLOC, FXRESIZE, or FXMEMDUP. It is OK to call free a NULL pointer.

Fixed harmless bug in FXTable.

Removed radio and check behavior from FXMenuCommand; this functionality is now assumed by FXMenuRadio and FXMenuCheck.


October 26, 2002 - New drop: DEVELOPMENT FOX 1.1.18


Bug fixes:

Fixed argument test in FXText:- NULL text argument is allowed if size is zero.

Fixed drawing bug on MS-Windows in FXMenuRadio.

Fixed potential buffer overrun in FXFont.


October 25, 2002 - New drop: DEVELOPMENT FOX 1.1.17


New in this release:

Changed FXMALLOC(), FXRESIZE(), FXCALLOC() macros very slightly; FXCALLOC() and FXMALLOC() new always return a NULL pointer and a FALSE return value when a zero size is passed; previously, this depended on the underlying malloc() implementation of the operating system, and operating systems varied in this behaviour. Also, FXRESIZE() returns a NULL pointer and FALSE return value when resizing to zero size; again, operating systems varied in this behaviour. With these changes, it works the same on all operating systems.

FXIconList, FXList, FXTreeList was trapping KEY_Delete; this prevented a KEY_Delete from being used as an accelerator.

FXTable was not compiling with Borland C++ builder. Fixed.

FXMetaClass destructor was not releasing hash table properly; moreover, was causing divide by zero in a few cases. The new implementation releases all memory and can't possibly divide by zero, because the modulo operator has been replaced by bit-wise and; this is possible because the hash table is always a power of two.

FXFile Dialog has accelerator for delete file.

All messages should now use the new FXSEL, FXSELTYPE, and FXSELID macros. Note FXSEL has the arguments reversed, and the argument order is now the same as the one used in FXMAPFUNC and FXMAPFUNCS; hopefully, this is easy to remember.


October 8, 2002 - New drop: DEVELOPMENT FOX 1.1.16


New in this release:

  • Regressed API's to return FXString rather than const FXString&, for the following reasons:
    • Not consistent. Some API's *compute* their returned FXStrings, so you're always going to have some API's which can never return const FXString& anyway; but conversely ALL API's can return FXString no matter what, so if its consistency we want then the old way is the only way!
    • I don't want to encourage people hanging on to pointers into the private member data of classes; see previous mail on this topic; this reduces my ability to change internal representations of widgets.
    • Its not as painful (in terms of run time) as it looks:- many access functions are inlines, and the compiler can decide to eliminate a few copy constructors (if not automatically, then at least with some encouragement like the option "-felide-constructors" for GCC ).
    • Once all widgets store FXWString internally, you will really thank me for this:- because if we do it the old way, your software can remain unmodified (thanks to conversion operators between FXString and FXWString), but if we go the via the "const FXString& " route then all the software which tries to take advantage of your trick would have to be rewritten!
  • Added API's to FXTable to control item appearance:
    • setItemJustify() changes justification
    • setItemIconPosition() changes icon position relative to the text
    • setItemBorders() changes item's border style
    • setItemStipple() changes item's stippling
  • Added patch from Petri Hodju for FXToggleButton's TOGGLEBUTTON_KEEPSTATE implementation. When this flag is passed to FXToggleButton, the button stays pressed if the state is TRUE.
  • Removed __FXMETACLASSINITIALIZER__ from FXObject.h. FXMetaClass is now made into a proper class instead of a struct. At startup time, the FXMetaClass's constructor adds the class to the hash table of meta classes, and at termination time the FXMetaClass's destructor takes the class back out.
    This means if you build DLL's with FOX classes in them loading and unloading the DLL will properly add or remove the class names from the hash table.
    This will allow objects to be serialized/deserialized even if they're in a DLL! The only thing left to do is to use the escape code in FXStream to actually load the DLL and we have a proper Plug-In architecture.
  • Fixed fxmalloc(), fxcalloc(), and fxresize() so that they return NULL when the desired size is zero; straight malloc() will not do that on all systems.


October 3, 2002 - New drop: STABLE FOX 1.0.26


A few very minor bug fixes:

  • Janusz Ganczarski found a very minor bug in the PCX loader code; some PCS images failed to load because of this.
  • Fixed bug in FXFile (MS-Windows) in recursive copy routine (see previous announcement).
  • Bug in FXToolbar getDockingSide().
  • Fixed some stuff in FXTable w.r.t. spanning cells.
  • Fixed some stuff related to file time in FXDirList; also, handle was not being closed at the right time, preventing timely directory refreshing; finally fixed sporadic crash.
  • Window coordinates and size not updated at the right time (MS-Windows) relative to the SEL_CONFIGURE message being issued.


October 2, 2002 - New drop: DEVELOPMENT FOX 1.1.15


Changed internal representation of FXString; the end-of-string character ('\0') is no longer special and all possible bytes are now allowed.

Added new API's to FXString:

  • length(int) changes the length of the string buffer to the given size.
  • section() extracts num segments starting from start from a string delimited by delim.
  • simplify() simplifies white-space in string.
  • before() returns characters before n-th occurrence of ch, starting from begin.
  • rbefore() returns characters before n-th occurrence of ch, starting from end.
  • after() returns characters after n-th occurrence of ch, starting from begin.
  • rafter() returns characters after n-th occurrence of ch, starting from end.
  • find() searches for character, starting from begin.
  • rfind() searches for character, starting from end.
  • find() searches for n-th occurrence of character, starting from begin.
  • rfind() searches for n-th occurrence of character, starting from end.
  • find_first_of() searches for first character in a set, starting from begin.
  • find_last_of() searches for first character in a set, starting from end.
  • find_first_not_of() searches for first character NOT in a set, starting from begin.
  • find_last_not_of() searches for first character NOT in a set, starting from end.
  • escape() returns a string where all special characters are escaped.
  • unescape() returns a string where all escaped characters are turned back into special characters.
Some API's of FXString are now removed:
  • extract() is replaced by the much more flexible section().
  • findf() is replaced by find().
  • findb() is replaced by rfind().
  • size() no longer exists.
  • size(int) no longer exists.
Note that these changes give FXString an API more consistent with the standard std::string class.

New API's to replace some old ones:

  • fxparseAccel() replaces the old fxparseaccel(). The new flavor takes an FXString parameter.
  • fxparseHotKey() replaces the old fxparsehotkey(). The new flavor takes an FXString parameter.
  • fxfindHotKey() replaces the old fxfindhotkeyoffset(). The new flavor takes an FXString parameter. Also, the new version correctly counts when && occurs in the string.
  • fxstripHotKey() replaces the old FXString::extract().

Added a new type FXwchar. This is a wide character for UNICODE.

Added a new class FXWString. This is currently under development, and should NOT be used at this time.

Added a new class FXTextCodec. FXTextCodec's subclasses will provide (state-less) conversions between UNICODE and other character sets.

Made further improvements to FXTable widget.

Changed many API's in FOX to return const FXString& instead of FXString. This will eliminate a copy constructor in many cases, and thus speed things up a lot.

Added option MBOX_SKIP_SKIPALL_CANCEL to FXMessageBox. Handy if the same dialog can appear for multiple errors.

Fixed core dump bug in PathFinder. Destructor was deleting uninitialized data.

Added help-tag to FXWindow. Each widget may now have a help tag, which is intended to be a URL for context-sensitive help for widgets and controls. Utilization of this info is currently up to the programmer.

Reformatted some web pages for Mozilla.

Updated some API's to FXArray and FXObjectList.

Added more error checking into PNG and JPEG loader; a bad image file should not cause an application error anymore, but a simple error code will be returned. Also, the FXImage will be set to empty when a bad file format did not read.

Fixed bug in FXFile (MS-Windows) in recursive copy routine.

FXImage, FXIcon, FXBitmap have been made a bit more forgiving when size is 0x0; it no longer terminates the application but creates a 1x1 image instead.

Changed API's loadPixels() and savePixels() of the various FXImage-derived types to return a boolean which indicates success or failure.

FXMenuCheck widget added which will draw a check box beside the caption.

FXWindow::destroy() and FXWindow::detach() will reset FXApp::focusWindow and FXApp::cursorWindow.

FXDirList bug fixes:- currentitem and anchoritem were left pointing to deleted items in some cases. Also, directory scanner caused some problems in some cases due to CreateFile() holding handle while FindFirstFile() was trying to open directory for scanning.

Sublte bug with SEL_CONFIGURE fixed:- on Windows v.s. Unix, the width and height of the widget were different while in the callback.

Added to FAQ.


August 29, 2002 - New drop: DEVELOPMENT FOX 1.1.14


Of course, all bugs found so far in the stable releases have been fixed in the development release.

Some API's renamed in FXList, FXIconList, FXHeader, FXComboBox and FXListBox:- retrieveItem() has been renamed to getItem(), and replaceItem() has been renamed to setItem(). Its much easier to remember this way.

FXTable button mode cells now get pressed (thanks to Alastair Growcott for the patch).

Added assign() API's to FXString. Makes it easier to fill FXString with some text.

Added FXMenuCheck, FXMenuRadio classes. These will subsume the FXMenuCommand for checked menus and radio menus; FXMenuCommand will just be a command.

FXMDIClient no longer derived from FXScrollWindow. This will entail fewer problems.

FXSeparator class added. It automatically flips based on width:height ratio.

Added tag string to FXWindow for on-line help tagging of widgets; help systems may use this to provide context sensitive help for controls or dialogs.


August 29, 2002 - New drop: STABLE FOX 1.0.22


A slight tweak has been implemented in FXFileList's collating functions:- instead of just sorting based on type, size, etc. it now also sorts on the name if the type, size, etc. are the same. So if you sort based on e.g. file type, then within each file type, the list is now lexicographically sorted.

Minor bug with FXShutter widget fixed. This one shouldn't really have affected anyone.


August 22, 2002 - New drop: STABLE FOX 1.0.21


Finally, hardware problems over here at fox-toolkit.org seem to have been resolved! Funny thing is, we're not even overclocking! But nevertheless an Athlon in Alabama in summer on a sunward-facing room has appeared to be a real challenge!

As of this week, there has been an addendum to the Lesser General Public License governing the distribution of FOX. The intent of the change is to make it more practical for applications to link statically against FOX; please refer to the license statement for the details.

Minor bug in FXGLViewer fixed related to image printing.

Minor buglet in FXTopWindow::setDecorations() fixed.

FXDriveBox, FXDirBox suffered from uninitialized memory reads:- thanks to valgrind, we found out about this and fixed it.

Fixed a few bugs in removeRows() and removeColumns() were inconsistent and did not properly deal with with spanning cells. Also setTableSize was fixed and now initializes cells to be empty, i.e. NULL.

FXList, FXIconList delete items in reversed order, i.e. starting with the last item. This makes maintaining your own parallel list much easier.

Fixed problem in FXSpinner.

Esoteric FXFileList bug fixed (Windows) certain programs (e.g. older version of ws_ftp) set bogus file time on files, this caused FOX to crash.


July 25, 2002 - New drop: STABLE FOX 1.0.17


Fixed FXList, FXIconList, FXTable callback. When current item or current row/column is removed, SEL_CHANGED callback is generated.

Fixed FXPopup menu behavior under Windows.

Added preliminary support for Digital Mars C++ compiler.

FXFileList sort by modification date bug was fixed.


July 1, 2002 - New drop: DEVELOPMENT FOX 1.1.13


Patch from Janusz Ganczarski to add support for 16bpp BMP format files.

Another patch from Janusz to add support for 32 bit BMP format, as well as some bug fixes to the TARGA image format support.

Made FXMDIChild draw nicer, by adding interior sunken border.

Added API's to FXMDIClient for various window placement manipulations.

Fixed FXMDIClient no loner derives from FXScrollArea. This allows opaque dragging of FXMDIChild windows.

Adding a FXRuler widget. Ruler widget may be used to place tickmarks and numbers around another widget, for example drawing document; this one will still need lots of work.


July 1, 2002 - New drop: STABLE FOX 1.0.14


BMP i/o support for 16, and 32 bit, in addition to already implemented 1, 4, 8, and 24 bit BMP images was added.

Bug in TARGA I/O was fixed.

Potential infinite loop in FXImage::restore() was fixed.

In FXMatrix, getNumRows() and getNumColumns() should not depend on child's visibility.

FXTable: colors should default to normal back color.


June 19, 2002 - New drop: DEVELOPMENT FOX 1.1.12


Added FXWizard class, and new wizard demo application.

Added fxparsegeometry() function to parse string of the form:

"[=][<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>]"

Into a width, height, x, and y value.

Fixed FXProgressBar to be flicker-free when setProgress() is called repeatedly; this is done by directly drawing it in the setProgress() call.

Added a new widget, FXImageFrame, which may be used for simple rendering of images.

Split the Adie text editor into multiple top-level windows. This allows a single editor to open any number of documents at the same time. Adie is UNDER CONSTRUCTION right now and NOT FULLY FUNCTIONAL!!

Added setCancelled() API to FXProgressDialog.

Added maximize(), minimize(), restore() API's to FXTopWindow. Also added isMaximized(), and isMinimized() API's. The old iconify() and deiconify() has been superceeded by these new API's. The new API's are implemented in terms of the new Extended Window Manager Hints standard.

New API close() added to FXTopWindow added to close a top level window. The close() API will only close the window after consulting the FXTopWindow's target, if any, whether it is OK to do so. When there is no objection, the FXTopWindow will be deleted.
When the last FXMainWindow is closed, the application will receive an ID_QUIT message.

Polarity of SEL_CLOSED message return value has changed; returning 0 means "no objection" i.e. proceed with the closing. Rationale:- when there is no target, or when the widget's target does not respond, closing the window should proceeed.

Added drawing a chord arc fill drawing method to FXDCWindow. This augments the pie sector method already present.

Added polygon region constructor to FXRegion.

Fixed some idiosyncracies in FXText. When typing to replace a selection with new text, two callbacks, instead of one, were being generated. This implied that a single action needed two undo's to undo it.
Also fixed was a little quirk that happened when a paste was being performed inside an existing selection. This is now blocked.

FXTopWindow's now appear where they're supposed to, at least on ICCCM compliant Window Managers; borders are discounted as far as placement of window is concerned.

A new API isOwnerOf() added to FXWindow which is used inside FXApp to determine whether events are passed to a window or not. The upshot is that modal dialogs can now create non-modal subwindows, and thus events are passed to all windows owned (and ownership is transitive!!) by the modal window, and blocked elsewhere.

Fixed various focus sublteties, and simplified focus assignment code. The subtleties are for example the assignment of the focus to a child window of a composite, when the focus were to move to the composite. This is useful for mega widgets which need to force the focus on a specific child window when they get the focus.

Added golden ratio constant in FOX Calculator.


May 12, 2002 - New drop: DEVELOPMENT FOX 1.1.9


New FXGradientBar widget is now ready for business! Allows for drag and drop of colors, various color blending features ranging from linear to quadratic, and furthermore horizonal or vertical orientation.

FXDict, FXMetaClass now deploy a faster, in-lined hashing function. This should translate into slightly faster application startup times.

Various API's to FXWindow turned into "const" members.

New API getTempDirectory() added to FXFile.

FXFileList worked oddly if weird file mod time was found.

Memory leaks fixed, thanks to valgrind.

Tentatively added FXGzStream and FXBzStream classes for gzip and bzip2 compressed I/O streaming support.

FXApp now remembers original display variable passed in. This can be used for later opening of display.


April 5, 2002 - New drop: DEVELOPMENT FOX 1.1.8


New widget, FXGradientBar, which is used to build color gradient ramps (e.g. for OpenGL texturing...).

Removed limitation of single FXMainWindow; this means the API FXApp::getMainWindow() has now disappeared. When the last FXMainWindow is closed, the application ID_QUIT is invoked, terminatin the application.

Behaviour of middle mouse paste in FXText was simplified; this makes a paste of a selection work properly, even if the paste occurs in or near the current selection!

Introduced name spaces. All FOX API's are now in the namespace "FX", thus the vast number of possible identifier clashes are now avoided; note that a great number of #define's have now been replaced by enum's.

Renamed FXApp::getRoot() to FXApp::getRootWindow() for consistency.

Renamed a number of widgets. Various widgets have over the course of time gotten names which did not adhered to the current nomenclature; this made them more difficult to memorize. These widgets have now been renamed for greater consistency:

  • FXTooltip becomes FXToolTip
  • FXToolbar becomes FXToolBar
  • FXScrollbar becomes FXScrollBar
  • FXMenubar becomes FXMenuBar
  • FXStatusbar becomes FXStatusBar
  • FXStatusline becomes FXStatusLine
  • FXToolbarShell becomes FXToolBarShell
  • FXToolbarGrip becomes FXToolBarGrip
  • FXProgressBar becomes FXProgressBar


February 26, 2002 - New drop: STABLE FOX 1.0.0


Yes, I went to 1.0!!! Why not? The code has been *very* stable for a while, and its time we called it what it is:- the 1.0 release!

New API's to FXString. FXString::vscan() and FXString::scan() are API's to parse a string via sscanf-style format conventions. This is very useful in many cases, and obviates the need for some complex coding in the past.

New API's to FXRegistry (actually, FXSettings). FXSettings::readFormatEntry() and FXSettings::writeFormatEntry() perform sscanf- and sprintf-style access to registry database strings. As with FXString, this obviates the need for complex coding and is very compact and convenient.

Removed deprecated functions from fxdefs.h. The following functions have been removed: fxprefix(), fxsuffix(), fxexpand(), fxpathname(), fxdirpart(), fxfiletitle(), fxfilepart(), fxfileext(), fxexists(), fxisdir(), fxisfile(), fxbakname(), fxidentical(), fxsplit(), fxshortestpath(), fxupdir(), fxabspath(), fxistopdir(), fxgetcurrentdir(), fxmkdir(), fxgethomedir(), fxsearchpath(). These functions have been moved to the file:

fxdeprecated.h
and
fxdeprecated.cpp

Should your application need them, simply include these two files into your project.
Note, the functions above have better maintained, and easier-to-use equivalents in the FXFile namespace.

A new file, vsscanf.cpp, was added for those systems where vsscanf() and its ilk are not available. Under Linux, and other C99 standard compliant C Libraries, this file is not used.

Added some missing API's to FXListBox, FXComboBox, and FXTreeListBox; simplified internals of these widgets a bit.

Fixed some FXDirBox problems; removed reliance on deprecated API's.

Added a SELECTFILE_MULTIPLE_ALL to FXFileSelector (and FXFileDialog). This mode allows selection of a mix of files and directories. The mode SELECTFILE_MULTIPLE works as before, and selects only multiple, existing filename names (and no directories).

Fixed FXPopup focus navigation:- hidden menu items should not be focused upon.

Fixed little biddy problem in FXText and style settings.

Fixed text in FXReplaceDialog and FXSearchDialog; was not proper.

Fixed little problem in FXRex::substitute().

Fixed some minor configure issues. You can pass overrides for JPEGLIB, PNGLIB, TIFFLIB, ZLIB, and MATHLIB. This is useful if you want to force a different library than the one found in the usual places (for example if you loaded a newer version than your system came with, or want to force static linking, etc.).
Also added a test to search for vsscanf() function in your C library.

Added quick-and-dirty, ad-hoc, "hack" to Adie for syntax coloring. It still piggy-backs on the timer. However, the dialogs to set up highlight styles, language recognition, and syntax patterns is essentially complete.
You can now add and remove, and edit syntax patterns fairly reliably. I added a sample C++ and C syntax file you can drop into your .foxrc/Adie registry (or in any of the usual global registry places /usr/lib/foxrc/Adie, /usr/local/lib/foxrc/Adie, etc.) to kick-start some patterns to get you started.
The stylizer can now also use patterns with back-references, or capturing parentheses; I will still figure some way to color captured parentheses some day as well.

WANTED: syntax patterns for various languages: PERL, RUBY, PYTHON, HTML, XML, Pascal, Eiffel, and whatever else you can think of. I will collect these patterns and distribute them in future versions of Adie.


February 5, 2002 - New drop: FOX 0.99.193


Added new mode SWITCHER_HCOLLAPSE and SWITCHER_VCOLLAPSE to FXSwitcher; these will cause the FXSwitcher to collapse its default height or width to the currently active child's height or width, respectively.

Fixed bug in FXDriveBox. The option to report errors went away as FXDriveBox does not set the current drive anymore:- it just sends a message.

Fixed declaration in FXStringDict API: API's yield const strings.

Added support for SGI IRIS RGB Image input and output, as well as corresponding image and icon classes.

Completed editing of style-entries in Adie (language mode and pattern panels not complete yet). Minor style-coloring engine improvements.

Incorporated documentation man-page for Adie, PathFinder, and Calculator.

Fixed bug in FXText::changeStyle.

Added missing API's to FXListBox, FXTreeListBox, FXComboBox.

Fixed grooved border drawing.

Relaxed syntax of section and group name in FXSettings database [was too strict earlier for no good reason].

FXWindow issues SEL_MOTION events.

FXRex properly observes REX_NEWLINE for \D, \s, \W, and so on.


January 8, 2002 - New drop: FOX 0.99.189


Optional style buffer was added. FXText takes roughly same amount of memory/text, unless style buffer is turned on in which case memory usage doubles to store the style information.

Style table support was added. You can specify up to 127 different styles, where a style is a combination of fg/bg colors for normal, selected, or highlighted display, i.e. 6 different colors.

Line number display. The colors of the line numbers may be set. The number of columns reserved for the numbers be be set as well. Setting the number of columns to zero turns line numbers off.

Active line background coloring. The line containing the cursor can be given a different background.

New API's added to manipulate contents of the style buffer. First, normal API's like appendText() and so on now have an equivalent appendStyledText(). The style is a single value 0-127 indexing into style table, to which 128 may be added to achieve underlining. This makes it very easy to add colorful text....

Its still possible I will add flags to the style table for underlining instead of use a bit in the style buffer; I don't know yet...

changeStyle() changes the style w/o affecting the text.

Despite the style additions, drawing has actually been speeded up quite a bit, as some old crap has been removed:

  • drawing is split into painting the background and painting the text over it. This may alleviate some problems on SGI with XDrawImageString.
  • drawing no longer loops over virtual characters, it just rect-fills the tail-end of a line; this is of course much faster.
  • even better, drawing also accumulates runs of spaces and tabs into a single rect-fill; needless to say that is also much faster.

FXText now maintains a cursor column in terms of the indent offset from the row start, rather than byte offset. This means that while moving up/down in the buffer the preferred column is much better observed when tabs are around (it can't be perfect as we can not move the cursor in the middle of a tab!).

incremental movement of the selection/highlight is now much better optimized:- special cases for when the highlight overlaps (e.g. extended by being dragged), v.s. disjunct is now taken care off.

also minor buglet caused tail-end of line to be exposed when the last character was highlighted, this was fixed also.

FXText no longer sends SEL_REPLACED. instead, it sends SEL_DELETED followed by SEL_INSERTED. obviously, this is better as it allows for inspection of the new buffer contents in SEL_INSERTED. [You need to be able to inspect the buffer after a change so you can update the style info......].

Slight optimization in setCursorPos(). Don't recompute start/end unless changing to another line.

When using style tables, if a style color is set to "clear" i.e. FXRGBA(0,0,0,0) or simply 0, then the color used will automatically fallback to the regular build-in color. Thus, you can specify colors with a minimum amount of work.


December 31, 2001 - New drop: FOX 0.99.188


Made some minor API changes to FXRex::match. It can now scan not ony forward and backward in a smaller subrange of the entire string; it can also perform just a single match attempt when the subrange is empty. Scanning a subrange of the string is useful, as its not the same as just passing in a smaller string!

A new flag REX_VERBATIM was added to FXRex. This compiles a pattern with no interpretation of magic characters or escape codes. Useful to apply the FXRex machinery to literal strings. Note that case-insensitive flag may still be used!

Added REX_SYNTAX mode to FXRex also. This causes FXRex to perform only a syntax check; compiling the pattern takes roughly twice the time as just syntax checking it.

Added REX_NOT_EMPTY. This causes match to fail when matching empty string. Changed MATCH_FORWARD to REX_FORWARD for consistency. Added more documentation for FXRex as well.

Added regular expression search and replace capability to FXText; FXText::findText() API may still need some minor revision, however!

Found & fixed nasty little bug in FXFileDict. Was never noticed on UNIX systems by pure chance.

Dropped fxregex.h. It is obsoleted by FXRex. FXRex is a more powerful matcher, and is easier to use to as well. If you still need the old files, they're available as fxregex.h and fxregex.cpp should you need them; I recommend however to switch to FXRex so as to be able take advantage of PERL-compatible syntax.

FXList now allows arbitrary icon sizes to be mixed. This also means when using subclasses items, they don't have to be all the same size!

Added facility in FXScrollArea for subclasses to easily map the mouse wheel to horizontal scrolling instead of the default vertical scrolling (when wheeling inside the widget).

Fixed drawIconShaded for WIN32; the pattern offset must be adjusted when scrolling.

Added API drawFocusRectangle to FXDC. This is now used everywhere to draw a dotted rectangle. Hopefully this fixes bad-looking focus rectangle under Windows. The drawFocusRectangle() API was removed from FXFrame as it is now part of FXDC.

Fixed a few warnings, and one uninitialized memory read in FXTable.

Completed FXSlider tickmark drawing. If tickmark delta set to 0 (zero), the ticks will be placed at each position in the logical range; otherwise, they're placed every delta units in the logical range.

Fixed FXFile::isExecutable() API (and similar ones like isOwnerExecutable()). The POSIX function access() was not working as advertised under Windows.

FXMessageBox buttons rearranged in the order according to FOX style guidelines.

FXLabel::onHotKeyPress() was not moving the focus to the following widget if the widget was a composite, only if the sibling was a simple control. This caused label-mnemonics not to move the focus correctly when the next focusable control was in a composite.

FXReplaceDialog. Small accelerator conflict fixed.

Warnings in fxpcxio.cpp fixed.


December 19, 2001 - New drop: FOX 0.99.187


The new class FXRex for regular expressions is now finished.
FXRex is a more modern matching engine, adding back-references, lazy or greedy matches, counted repeats, PERL-compatible character classes, escape codes for control-codes, hexadecimal or octal character entry, zero-width assertions, positive or negative look ahead, non-capturing and capturing parentheses, "cloistered" modes, and more.
FXRex is also thread-safe: not only are no global variables used, but also can one FXRex-variable be used by multiple threads.
FXRex allows unlimited pattern sizes, can search forward and backward through a subject string, returns proper syntax error codes, allows for multi-line and case-insensitive matching.
FXRex is 8-bit safe (including end-of-strinf character), so you can use it on binary data.
You can enter control-characters, octal or hexadecimal characters in the pattern.

Added documentation to FXRex class.

More small additions to FXFileDialog.

FXText much improved brace matching technique. Also added highlight capability, i.e. a new text style. This also has its own colors. It is currently used for the new brace matching method.

Added support in Adie for the above. Note brace match time must now be set in milliseconds, not microseconds.

Added method to FXInputDialog to set text field width.

Bullet-proofed FXString::left(), FXString::right(), FXString::mid(), and FXString::trunc() against bad arguments.

Fixed bug in FXTable drawing loops; references were made outside the cell array.

Fixed potential bug in ICO loader.

Added argument to FXApp::init() to suppress opening display. You can open display later using FXApp::openDisplay(). This allows FOX GUI's to start in non-GUI mode.


December 10, 2001 - FOX 0.99.182


FXFileDialog supports context popup menu, adds copy, move, delete capability.

FXFile::concatenate bug fixed.

FXImage::getChannels() API added.

FXImage::setPixel(), FXImage::getPixel() API's added.

Small fixes to FXTGAImage, etc.

FXFileDict.  Compile-time option to enable all available image formats; see INSTALL file.

FXGLCanvas swapbuffers bug fix for Windows 2000/NT (in) compatibility.

Other stuff that has been reported in the past couple of weeks.


November 27, 2001 - FOX 0.99.181


Widgets like FXText, FXTextField, and so on which absorb the Return key now make the default button loose the fat border.

The Return key is now reported to the default widget as ordinary SEL_KEYPRESS or SEL_KEYRELEASE messages.

The ID_INSERT_CHAR message in FXText and FXTextField has been deleted; a new message ID_OVERST_STRING has been added to implement overstrike mode capability. The overstrike mode in FXText is now more sophisticated about spaces and tabs.

Added API's to FXImage: setPixel() and getPixel() to access image buffer on pixel by pixel basis.

Corrected API's to FXGLSphere.

Made ctx member of FXGLCanvas and FXGLContext protected.

Added some screen shots.

Made data() public in FXSettings; this is needed to write iterations over all sections.


November 22, 2001 - FOX 0.99.180


Janusz Ganczarski has donated support for the TARGA image file format; this brings FOX's image support up to the following list:

BMP, GIF, XPM, PCX, JPG, PNG, ICO, TIFF, and TARGA.

Note to MS-Windows users: FOX supports not only BMP images and icons, but also ICO format. This means you can design icons directly with VC++ built-in icon editor.

FXJPEGImage, FXJPEGIcon renamed to FXJPGImage, FXJPGIcon [but a typedef should keep your app compiling].

FOX now properly handles default buttons. The default button is the one responding to the Return key in a dialog. You can designate any number of buttons to become the default button when the focus moves into it. One special button is called the initial default button; the initial default button is the button that will initially be the default button. It is also the button to which the default returns when the keyboard focus moves to another control.
For this purpose, the meaning of the old BUTTON_DEFAULT flag has been changed to mean that the button MAY become the default button. A new flag BUTTON_INITIAL means the button is the INITIAL default button.

New API's are available to set initial default widgets:

setInitial(enable)

This makes the window the initial default window, i.e. the target for the Return key.

isInitial()

This determines if the widget is the initial default window.

setDefault(enable)

This sets the widget to the default widget if enable is TRUE; if enable is FALSE, it makes the widget normal again; if enable is MAYBE, the default returns to the initial default window.

isDefault()

This returns true if the window is the default, i.e. the window which will get the Return key even if the focus is on another control. Of course it will not get the Return key if the other control handles the Return key.

Only one window can be the initial default, and only one window can be the default.

FXGLObject now starts counting at message ID=10000, this means you can make your FXGLViewer subclass start counting from FXGLViewer::ID_LAST, just as you would with any other subclassed widget.

FXStatusline and FXProgressBar now automatically call repaint() and flush() so you won't have to. This is useful to update these widgets while performing a long callback routine [e.g. reading a file].

FXSectionDict has disappeared. Basically, its only use was in FXSettings; what has happened is that FXSettings now derives from FXDict directly, and takes over all of FXSectionDict's functionality.

Fixed focus navigation in FXTopWindow.

Focus navigation in FXMatrix was moving to incorrect widget.

FXText could read out-of-bounds when searching.

Note, I did not implement Daniel Gehriger's menu patch yet; still looking at that issue some more.


November 13, 2001 - FOX 0.99.179


Integrated Daniel Gehriger's keyboard patches. The fxkeyval API has now been removed:- instead, a new member "text" was added to FXEvent which contains the translated keyboard symbol(s).

The header file organization has been changed to allow programs to include only those widgets which are needed.

A resource leak in OpenGL context has been removed (under Windows).

The style BUTTON_DEFAULT causes a button to have the focus first time around; buttons which have the focus are drawn with a FAT border and respond to the Enter key.

The flag MENU_DEFAULT, and the setDefault() and setOther() API's have been removed.

The new API FXWindow::isDefault() returns TRUE if the widget is in the focus chain.

Updated project files for VC++.

Added stub-icon/images to be shown when JPEG, PNG, or TIFF libraries are not available; the stub images allow programs which use FXJPEGImage, FXPNGImage, and FXTIFImage to work with reduced functionality when the necessary libraries are not available.


October 19, 2001 - FOX 0.99.177


Some minor bugfixes. Visual Studio Project files were broken and now fixed.


October 16, 2001 - New drop: FOX 0.99.176


Due to the amount of time elapsed since last drop, there have been a lot of new things; for starters, we have some new widgets:

  • FXColorBar. This widget controls the brightness of a certain color in the hue, saturation, value system of color specification.
  • FXColorWheel. This widget controls the hue and saturation of a color in the hue, saturation, value system of color specification.
  • FXPicker. FXPicker is used to select stuff anywhere on the screen. Basically, you click once to activate it, and move to a location you want to identify, then click again.

    FXPicker reports the identified location using SEL_COMMAND, and updates while moving with SEL_CHANGED.

Janusz Ganczarski donated support for Windows ICO format support; we have both an FXICOIcon and FXICOImage classes.
This is an important contribution because now you can create your icons simply from within VC++ or so without any other conversion step (other than the usual reswrap).

A huge amount of improvement to FXTable has been performed; we have more to do, but here's what's been done that you can now start to play with:

  • Table items support multiple-line text.
  • Items can contain icons.
  • Items can have all the usual internal layout, i.e. left,right,top,bottom, icon and text relative to each other BEFORE, AFTER, ABOVE, BELOW.
  • Items can have button appearance.
  • Items can have borders (each side is individually selectable).
  • Icons may be owned by the item or shared.
  • Items may have many different hatch-pattern backgrounds.

For the table itself:

  • Rows and columns may be resized interactively.
  • Even/odd cells background coloring.
  • Leading/trailing fixed rows and/or columns.
  • Empty (NULL) cells are now possible; a new item will be automatically created when you fill it with text/icon.
  • Budding support for so-called spanning cells; that is to say, a single item may span multiple rows and/or columns.

Popup menus improved under Windows, thanks to Daniel Gehriger.

FXFile::listFiles now has many matching modes.

FXFile::simplify() was much improved now; it was not entirely working correctly in all cases.

FXColorSelector has been augmented with a hue/saturation dial, a value bar, and a color picker.

Off-by-one error fixed in FXDCWindow::drawArc under MS-Windows.

FXDCWindow::drawIcon() FXDCWindow::drawIconShader(), FXDCWindow::drawIconSunken() have been fixed to take into account the clipping rectangle of the FXDCWindow. This may in some cases result in slightly faster/more flicker-free drawing, and of course it now clips correctly!!

Added another ctor to FXMessageBox in case there's no owner widget.

FXWindow::hide did not ungrab under Windows.

Fixed compile bug for Borland C++.

Fixed GUI updating problem in FXListBox, FXComboBox, FXTreeListBox.

Fixed problems which occurred when FXIcon, FXImage, FXFont, FXCursor resources were being deleted AFTER closing the display; now the destroy() function for all resources becomes a NO-OP after the display is closed; everything is assumed to be already gone!

FXDCPrint::drawImage now implemented for PostScript.

Sublt layout bug fixed in FXTabBook:- calculated size was a bit too wide given the content size.

FXSpinner was sending wrong parameter in message.

Extremely subtle buglet in FXSlider fixed.

API added to FXGLCanvas to return GL context.

FXPacker focus movement had potential infinite loop in it due to typo.

FXProgressBar dial mode drawing improved.

Drag and drop enabling was in wrong place.

Keyboard handling slightly changed; FXComposite now dispatches to accel table first before trying focus child.

Calculator does keypad now...

Adie updates.


August 30, 2001 - FOX 0.99.175


Many new features were added. FXSearchDialog and FXReplaceDialog now maintain a history of previous searches. TextEdit has been renamed to Adie (Advanced Interactive Editor). FXText serialization was added. Additions were made to the XWindow API to grab the keyboard to a window. A new repaint function was added, which forces painting of part of a window before returning. FXFile and FXURL were turned into name spaces. Popups were improved. FXCalculator now has its own Web page. Lots of bugfixes were made in FXArrowButton, FXScrollbar,FXMDIChild, FXTextField, FXStream, FXFrame, FXPacker, FXTopWindow/FXShell,and FXApp.


July 19, 2001 - FOX 0.99.174


FOX has a dedicated web site. CUPS Printing support has been added. PCX, TIFF, JPEG, XPM Image I/O support has been added. FXProgressBar has a dial mode. New Standard dialogs: FXProgressDialog, Search and Replace dialogs, Input dialog, Directory Selection Dialog have been added. Dockable toolbar support ihas been added. Socket and signal callback message support have been added. Listing files, drive letters, and network neighborhood (Windows) have been added, and there have been many bug fixes.
   
     
 
Copyright 1997-2002 Jeroen van der Zijp