| News [Remove Frame]

November 7 - FOX STABLE 1.4.22

- Fixed bug in fxloadGIF [and thus also in FXGIFIcon and FXGIFImage; some subltety with the LZW implementation was wrong. It is very rare as we've lived with this flaw for a long time before discovering it. The symptom is that the decoder complains that the image is truncated [it isn't!].
- Bug in FXSettings causes trouble when writing large integer numbers back to the registry file.

November 2 - FOX STABLE 1.6.0 (Release Candidate 1)

This is the first release candidate for FOX 1.6. The input methods for X11 now work. The next one will implement input methods on Windows. The API's are now pretty much frozen except insofar as changes are needed for input method support. Please note, we're doing the "root" method only. On the spot and over the spot methods will be done later.

- A new class FXComposeContext manages the input context in text entry widgets.
- Small tweak to movement algorithm of docked bars:- don't add a new galley when the dock bar is about to be undocked from the dock site. However, you can still create a new galley by first undocking, and then redocking the dock bar.
- Added restore() API to FXBitmap like FXImage has.
- New API dropFinished() issues message to DND source that target has successfully acquired drop data and can proceed. This is normally done automatically when the SEL_DND_DROP message returns, but in a few cases one may want to release the DND source prior to returning from the handler, for example when the SEL_DND_DROP message handler takes a long time to process the DND data.
- Changed the way limits are handled in FXInputDialog.
- Changed some internals of FXFileList and FXDirList.
- FXTreeList, FXDirList makeItemVisible() tweaked to scroll the expand-box into view.
- Fixed some small drawing and layout issues in FXGroupBox.
- FXTopWindow HICON is deleted if FXTopWindow is.
- Obtain proper HINSTANCE on Windows; don't use GetModuleHandle(NULL) anymore; see October 29.
- Fixed FXGroupBox caption display issues. Now looks better at default size.
- Implemented extremely dumb and slow StretchBlt on X11.
- Added tooltip capability to pulldown menu items.
- New API in FXApp, getActiveWindow() returns active toplevel window; previously, this API was called getFocusWindow(). The new implementation of getFocusWindow() returns the child widget of the active window that has the focus.

October 29 - FOX STABLE 1.4.21

- The getDisplay() API now returns the proper HINSTANCE on Windows; thanks to Henrik and Claus Wann Jensen feedback on this problem. The solution fixes some instability problems in .DLL use of FOX on Windows.

October 25 - FOX STABLE 1.4.20

- Set active window to owner when dialog closes on Windows.
- Fixed Thread Local Storage handle leak on Windows.
- Fixed GDI HICON handle leak for FXTopLevel's big/small icons on Windows.

October 19

I have written a few words here about the Unicode table compression method used in the FOX Unicode implementation. The method achieves very nice compaction of the Unicode Character Properties tables by recursive partial overlapping identical property data and indirection blocks.

September 23 - FOX UNSTABLE 1.5.13

- Fixed bug in FXText for search selected option.
- Fixed X11 keysym determination code; was not observing shift state.
- Added registry setting for scrollbar width.
- Fixed some problem with FXRex encoding of characters in compiled regular expressions.
- Updated Windows keyboard handling for UTF-8.

September 15 - FOX UNSTABLE 1.5.12

- Implemented keyboard translation for X11 to unicode; the Windows keyboard translation will come in the next version, so stay tuned!.
- Moved fxparseAccel(), fxunparseAccel(), fxparseHotKey(), fxfindHotKey(), and fxstripHotKey() to FXAccelTable, and dropped the "fx" prefix. FXAccelTable is a more logical home for these functions.
- Added SEL_DOCKED and SEL_FLOATED messages to signify docking events; these are generated by FXDockBar as it is being docked or undocked.
- Updated Windows studio project files.
- Updated some documentation items in various widgets.
- Updated Watcom C++ makefiles.

September 13 - FOX UNSTABLE 1.5.11

This is the FOX 1.6 pre-release; please test! The next one [barring bugs!] is going to be FOX 1.6.0!!

- Added unicode clipboard support to FXTable.
- FXTable overlayText() and countText() can now have sets of column and row separators.
- FXTable extractText() can have separator of multiple characters.
- Updated comparecase in FXString for utf-8 awareness.
- Updated list widgets for utf-8 aware item comparison.
- Fixed FXTable overlayText(). Also fixed paste selection in FXTable.
- Fixed FXTable countText() and made it public.
- Corrected FXBZFileStream and FXGZFileStream filenames.
- Added missing getNumPatterns() API to FXFileDialog.
- Changed FXDataTarget constructors so as to avoid accidents.
- Fixed FXText upper/lower case conversion for utf-8.
- Fixed overly enthusiastic argument checking in FXText.
- Added checks against editing non-editable FXText widget.
- Fixed FXTextField against editing when non-editable.
- Fixed some minor issues with FXFont and FXApp for Windows.
- Fixed Windows VC++ studio projects for -DUNICODE.

September 7 - FOX UNSTABLE 1.5.10

- Added unicode clipboard and primary selection support to FXText.
- Added unixToDos and dosToUnix API's to FXString.
- Expunged some FXbool's in favor of bool. This is OK where serialization is not required.
- New API's to FXMatXX classes.
- New API's to FXVecXX classes.
- Fixed minor internal issues in FXText.
- Updates FXRangeXX and FXSphereXX classes.
- Added API's to FXText taking FXString.
- Switched argument order in FXText's changeStyle(); it was inconsistent.
- Safe-guarded FXOptionMenu for children it its FXMenuPane not being FXOption's.

September 3 - FOX UNSTABLE 1.5.9

- Updated FXBZFileStream to subclass from FXFileStream.
- Ditto updated FXGZFileStream as well.
- Updated makefiles for Watcom C++.
- FXMemMap now supports utf8 filenames on Windows as well.
- Fixed some typos in FXExtentd.
- Fixed missing operator << and >> in FXHiliteStyle for Watcom C++.

September 2 - FOX UNSTABLE 1.5.8

- Modifier keys now stick around when a normal key is pressed; thus both press and release of normal key now have same modifier set applied.
- Fixed strtoll where it is used.
- Fixed compile with Xft for Fedora Core 4; FC4 apparently ships with old version of fontconfig.
- Fixed build issues with multi-monitor stuff on MS-Windows.
- Added FXExtentf and FXExtentd classes for 2D ranges.
- Added dllName() API to FXSystem.
- Added API's to FXString: compareversion().
- Fixed Windows compile issues with Visual Studio 7.
- FXToolBarGrip no longer gets focus.
- Added some API's to FXRectangle FXSize, FXPoint, FXVec3f (etc.).

August 19 - FOX UNSTABLE 1.5.7

- Added NET_WM_PING message support for Extended Window Manager hints.
- New FXSystem namespace added to be a collection of system-interrogation functions.
- New FXIO class added which is the base class for FXFile, FXSocket, FXPipe. So far, FXFile is the most advanced in implementation; but FXPipe and FXSocket will follow...
- Added extractItem() API to the list widgets; it allows you to remove an item but not destroy it. The removed item can then be re-added to another list widget.
- Added private copy constructor and assignment operator to list items in order to prevent accidental copying.
- Added FXPath::convert() API. It will convert a path to local path separator convention.
- Added FXPath::contract() API, which will to the opposite of FXPath::expand().
- Added includeInRadius() API's to FXSphere. These include the new point or sphere without moving the center of the original FXSphere. This is often convenient when maintaining nested bounding spheres.
- Added DOCKSITE_NO_WRAP mode to FXDockSite. Passing the DOCKSITE_NO_WRAP will cause FXDockSite NOT to wrap toolbars to another galley should the amount of space be insufficient.
- Added new FXFile class which encapsulates low-level file manipulation on the system.
- Added -z option to reswrap. This new option causes reswrap to compute the size of the resource, and incorporate this into the declaration.
- FXSlider, FXRealSlider, FXDial, and FXKnob now respond to keyboard arrows as well as + and - key bindings.
- Updated FXTopWindow to allow setting unicode title string in Extended Window Manager Hints-enabled window managers.
- Split off many functions from FXFile into new namespace FXPath; FXPath is a collection of functions manipulating pathnames in a resonably system-independent way. FXPath knows about local name conventions, forward and backward slashes, and so on. FXPath knows about unicode filenames.
- Some other functions from FXFile have been split off into a new class FXStat. FXStat is a collection of file-metadata such as access time, size, and so on. It replaces the unix stat() function. FXStat also knows about unicode filenames.
- FXDir has acquired a few additional functions which were moved out of FXFile; the new static member function listFiles() now is implemented in terms of FXDir's basic capabilities. FXDir also knows about unicode filenames.
- Fixed makeItemVisible() in FXList, FXIconList, FXTreeList, and FXFoldingList when widgets aren't realized yet. We now to delayed makeItemVisible() in such cases, causing a scroll when layout() is finally done.
- More features added to FXKnob; now can operate in speedometer mode.

August 1 - FOX STABLE 1.4.17

- Fixed problem in FXMessageBox. When running MBOX_SAVE_CANCEL_DONTSAVE, a click on Save should return MBOX_CLICKED_SAVE and not MBOX_CLICKED_YES.
- Fixed problem on multi-head Windows machines in FXPopup and FXTopWindow.
- Fixed problem in FXQuatf and FXQuatd.

July 21 - FOX UNSTABLE 1.5.6

Well, after weeks of pounding the keyboard, here's a massive number of new features; first, we've got a nice set of new widgets:- the FXKnob control contributed by Leandro Nini which can be a drop-in for FXSlider or FXDial with different looks.
Next, there's FXColorList which is a flavor of FXList which can be used to select from a set of named colors. To wrap up the color selection methods, we now also have a new widget called FXColorRing, which is a hue/saturation/value control which manipulates a colors hue by means of a ring, and saturation and value by a rotating triangle centered in the hue ring. The tip of the triangle rotates to follow the hue selected in the outer ring. Its a quite intuitive way to control colors.
Then, we have a UTF-8 enabled FXTextField and FXText widget. FXTextField supports UTF-8 and UTF-16 clipboard support for interaction with other applications.
Finally, I have now embarked on the implementation of possessive match support for FXRex. The possessive match is a fairly recent addition in the world of regular expressions; what it does is to eliminate back tracking in greedy closures. For example, the pattern "a*b" is not ever going to match "aaaaaaac", so instead of performing massive numbers of vain backtracking attempts, we can now write a pattern "a*+b", which will simply give up as soon as we fail to match the "b" against the "c".
It is interesting for our purposes as it may substantially speed up the syntax coloring engine or other sophisticated pattern matching using FXRex.

A detailed list of features follows:

- Unicode support added to FXText; over the next few days, FXText will go through overhaul of the internals, plus we're adding clipboard and selection support similar to what FXTextField already has.
- Unicode support added to FXTextField. FXTextField is at this point pretty complete. Note that due to multi-byte representation of unicode in UTF8, the cursor in FXTextField is constrained to character-starts, i.e. positions passed into FXTextField will be adjusted if necessary.
- Added possessive match mode in FXRex. Current implementation is still limited to possessive match of simple patterns [this will change in subsequent releases]. The syntax is similar to that of the lazy match, except a + instead of a ? is used. The possessive match is a greedy match that does not backtrack; therefore, using possessive match for syntax coloring can yield some dramatic speedups in the editor.
- Also added some [as yet internal] documentation on future syntax FXRex will support for unicode regular expressions. We stick to the standards whenever possible.
- Added FXColorRing class to edit color based on hue-ring and saturation/value triangle. This is now used in FXColorDialog in favor of FXColorWheel. The FXColorRing provides a single control that can select hue, saturation, and value using more a intuitive interface than sliders.
- Added Leandro Nini's FXKnob widget. It is a rotational valuator which can replace dial or slider if different looks are required.
- Split fxchar.h into fxascii.h and fxunicode.h.
- Added new FXColorList widget to pick from named colors; you can load your own colors in such a list.
- Added notify flag to FXTextField, FXSlider, FXRealSlider, FXDial, FXSpinner, FXRealSpinner, FXCheckButton, FXToggleButton, FXRadioButton.
- Added API to FXFileDict to change settings database being used.
- Fixed jumping mouse wheel bug in FXScrollBar.
- Fixed some subtleties in FXText w.r.t. makePositionVisible().
- Re-added getWindowCount(), to FXApp. The new implementation is more elegant in that it eliminates global variables.
- The fxgetticks() is now implemented for x86-64, IA64, PPC, HP-PA, and SPARC-V9, in addition to x86, when using GCC compiler. Please test!
- Added SSE3, HT detect to fxcpuid() [x86 only!].
- Replaced all old "ctype.h" functions with functions from fxascii.h; these don't interpret the upper 128 codes and thus are safe to call on UTF-8 encoded unicode.
- Few bug fixes in FXString as well as additonal API's.

June 29 - FOX UNSTABLE 1.5.5

- Added FXDir class for directory scanning; it scans one file at a time.
- Implemented text at an angle drawing routines.
- Added API's to FXScrollPane to get/set number of visible items.
- Fixed windows-related flaw by not disabling arrows in FXScrollPane.
- FXDragCorner now uses Extended Window Manager Hints if available.
- Implemented drawing at angles on Windows also.

June 11 - FOX STABLE 1.4.16

- Fixed bug in FXList and FXIconList: select lone item with arrow keys didn't work.
- Fixed sign error in quaternion classes in setAxes(). This only happens in one of the exceptional cases.
- Issue in FXMemoryStream fixed.

June 4 - FOX STABLE 1.4.15

- Fixed x86-64 bug with FXString::vformat().

April 14 - FOX DEVELOPMENT 1.5.4

- Added access function wc() to FXString for reading wide character at byte offset.
- Added setData() API's to FXBitmap, analoguous to FXImage.
- The setCurrentItem() function in FXComboBox now has notify parameter; it generates SEL_COMMAND when current item is programmatically changed; note that the argument passed to the SEL_COMMAND is the new text in the box.
- Added compose API to FXString.
- Added charCompose() API to FXchar to compose unicode character with diacritic marks.
- Added Hangul composition/decomposition functions.
- Added API's wide to utf and vice versa API's to fxdefs.h. A whole slew of new functions. Used internally by FXString but useful elsewhere also.
- The setCurrentItem() function in FXListBox now has notify parameter; it generates SEL_COMMAND when current item is programmatically changed. The argument passed to the SEL_COMMAND is the index of the new current item.
- FXTreeListBox was erroneously sending a SEL_CHANGED when calling setCurrentItem() with notify=TRUE; it should have sent SEL_COMMAND as it sends SEL_COMMAND whenever the current item changes by other means. It still sends SEL_CHANGED when mouse is hovering over the list when its popped up.
- FXMDIChild forwards all unhandled messages, but does not forward unhandled messages with ID's which belong to the FXMDIChild itself.
- Added some checks in FXQuat{f,d}::arc(). Floating point rounding errors could in rare cases cause trouble.
- Added Euler angles to quaternion and back API's. There are now 6 of them, one for each sequence of roll/pitch/yaw.

April 9 - FOX DEVELOPMENT 1.5.3

- Fixed loadImage() API in FXIconSource. It was returning FXIcon* instead of FXImage*.
- Added decompose API's to FXString; this returns the decomposition of a string in terms of its diacritic marks.
- Added decompose tables to fxchar.cpp.
- Added decomposeType(), charNumDecompose(), and charDecompose() API's to fxchar.h.
- Added count() API to FXString; counts number of utf8 characters.
- Added API index() to FXString, which gives utf8 character index of utf8 character at given byte offset in FXString.
- Added API offset() to FXString, which gives byte offset of utf8 character with given index.
- Added inc() and dec() API's to FXString to advance byte offset to next/previous utf8 character.
- Added Ascii-only character type functions to fxchar.h. These work when searching ascii codes in utf8. Using the ctype.h for this purpose would trigger spurious hits depending on locale settings. So use the fxchar.h versions if possible!
- Dropped fill() API's from FXString:- duplicates functionality of assign().
- Dropped count() API from FXString:- dupplicates contains() API.
- Added many API's to FXString which take wide and narrow characters; in particular, constructors, assign(), append(), prepend(), insert(), replace(), and assignment operators.
- FXwchar is now typedef-ed to wchar_t when wchar_t is 32-bits. On machines where wchar_t is 16-bits, FXnchar is typedef-ed as wchar_t. Thus, we can now populate FXString directly with wide character string constants; on Windows machines this translates to a call via the FXnchar API, while on UNIX machines this becomes a call via the FXwchar API.
  This may often be more convenient than embedding utf8 string constants into your code; however, since a translation is involved embedding utf8 character string constants is probably faster, so use this whenever possible.

April 9 - FOX STABLE 1.4.12

- Fixed documentation bugs.
- Fixed loadImage() API in FXIconSource. It was returning FXIcon* instead of FXImage*.

March 30 - FOX DEVELOPMENT 1.5.2

- Added many text codecs; all character sets from FXFont, as well as utf8, utf16, utf16be, utf16le, utf32, utf32be, and utf32le have been implemented.
- Overhauled and fixed number of bugs with the unicode character classes; renamed some of the API's and added a few more API's to fxchar.h.
- Added narrow character (FXnchar) type to fxdefs.h. This is used to represent 16-bit unicode.
- FXTextCodec now mostly complete. Added lots of API's for moving between various unicode transformation formats, and added convenience API's for encoding and decoding multi-byte characters. Also implemented lots of error checking.
- Added some API's to FXString for utf-8 support, these API's will be used for adding many utf-8 and wide character convenience functions later.
- Fixed FXTable selection rectangle issue; selection rectangle now set before callbacks are invoked.
- Added compile #define symbol FLOAT_MATH_FUNCTIONS which can indicate that single-precision math functions are available; if not set, FOX will use the symbol __USE_ISOC99 or turn on the single-precision convenience macros.
- Fixed layout in FXListBox. Size of FXListBox should be based on width of ALL strings currently added, similar to static FXComboBox.

March 20 - FOX DEVELOPMENT 1.5.1

- Added scroll capability to FXTabBar and FXTabBook.
- Renamed remove API's in various containet classes to erase which more closely resembles STL container classes' nomenclature.

March 20 - FOX STABLE 1.4.10

- Fixed compile problem on Windows.

March 17 - FOX STABLE 1.4.9

- Added fixes to LaTeX syntax coloring (thanks to: Mikkel Kamstrup Erlandsen).
- Fixed typo in FXApp; handleTimout(), should have been handleTimeout().
- Changed some bugs in FXGZStream, FXBZStream, and FXFileStream; in some cases, the FXStreamEnd flag was set prematurely.
- More work on unicode done.

March 16 - FOX STABLE 1.4.8

- FXUndoList should account for FXCommandGroup when FXUndoList::end() is called, and not at the beginning when FXCommandGroup is still empty.
  This is useful if you subclass FXCommandGroup and add extra space when a complex undo command is completed. As an example, suppose you're disconnecting nodes from a graph. Then it is not known whether a collection of nodes becomes completely detached from the graph until the last node is cut loose.
  To properly account for space when nodes become completely detached from the graph, you can then add the extra space to the subclassed FXCommandGroup just prior to the call to FXUndoList::end(). If you merely remove some connections but the nodes are still connected by other edges then the space is not added since the data structures are not completely owned by the undo system yet.
- Also, incorrectly accounted for size changes when merging undo records.
- Adding an undo command should only change the size when its committed, i.e. either an add() of a simple command at the toplevel, or an end() of a compound command at the toplevel.

March 8 - FOX DEVELOPMENT 1.5.0

This is a development preview; it is not recommended for any development work at this time; in particular, no effort has been made to make it compile on all platforms. Some of the highlights of this release are below.

- Added fxchar.h and fxchar.cpp unicode tables. The fxchar.h header file provides functions operating on 32-bit wide unicode characters. They support the full range U+000000 to U+10FFFF. FOX will support wide characters but most functions are going to be working on UTF-8, which is a more compact and manageable representation of unicode characters.
  Some FXString API's have been added already for UTF-8. Many more will follow. FXString has API's taking strings (sequences of bytes), as well as API's taking single character parameters. The former will serve us well for UTF-8, but for the latter, equivalent API's will be added which take wide characters, allowing one to e.g. insert wide characters without explicitly converting to UTF-8.
- Added new class, FXTranslator. FXTranslator, once it is fleshed out, will be responsible for translating messages into local languages.
- Added new API, tr(), to FXWindow. This gets passed the message text and optional translation hint. It adds the name of the widget as the context and then passes these parameters to FXTranslator. Thus, three things are available to translate a message. Actually, there may be a forth (fifth) thing as well, and that is the application and vendor keys, which FXTranslator could get at if needed. Some of the mechanisms have yet to be worked out, at this time.
- Went through the entire FOX library and added a call to tr() for each and every message. Once FXTranslator is implemented, this will then instantly enable localization of FOX.
- Added mouse wheel support for FXComboBox, FXListBox, FXTreeListBox; I can't believe I didn't add this long ago; its really very convenient!
- Added utf.cpp source file containing some utf helper functions; this is an internal file.
- If you ever listen to music at your PC you've got to get the [FOX-based!] Goggles Media Manager. What I like about it is that you don't have to create play-lists like XMMS; it keeps its info in a database and can do a number of useful queries. Yet another nice program from Sander.

March 8 - FOX STABLE 1.4.7

- Removed check for used thread-id; this allows restart of a thread.

February 22 - FOX STABLE 1.4.6

- Added missing FXAPI in FXGUISignal.
- Removed friend FXEmbeddedWindow from FXApp.
- Flags TABLE_COL_SIZABLE and TABLE_ROW_SIZABLE now cause corresponding row and column header controls to allow resizing or not.
- Flags TABLE_NO_COLSELECT and TABLE_NO_ROWSELECT disable column and row select mode for corresponding table headers.
- Fixed bug in FXHeader which caused HEADER_BUTTON to be ignored (button was always enabled).
- Added flag HEADER_RESIZE to FXHeader which enables interactive header section resizing by the user; this is now used by the FXTable as well.
- Fixed problem in FXToolBar dealing with special children FXSeparator and FXToolBarGrip which have special layout from the normal children.
- Removed #error from ControlPanel application.

February 15 - FOX STABLE 1.4.5

- Core dump with hitting select all in empty table FXTable fixed.
- Core dump with non-ascii characters in FXSettings fixed.
- Added missing FXRex.h in fx.h.

February 13 - FOX STABLE 1.4.4

- Problem in fxtargaio fixed.
- Rewrote important part of fxpcxio routine; all test images of depth 1, 4, 8, and 24 bits per pixel now pass the test.

February 12 - FOX STABLE 1.4.3

Well, here's a few other minor updates. Nothing very serious this time. Now that the worst errors have been taken care of, I'm going to hold off these rapid releases until there is something serious or after I've been able to collect a bunch of them.

- Fixed warnings and error that came up on SGI build.
- Fixed TABLE_NO_ROWSELECT and TABLE_NO_ROWSELECT not working right in FXTable.
- Suppress warning on VC++ for DLL binding templates.

February 10 - FOX STABLE 1.4.2

- Fixed FXFileSelector popup menu:- was unable to delete directory due to introduced problem.
- Updated Digital Mars C++ compiler makefiles.
- Updated Watcom C++ compiler makefiles.
- Fixed some FXCursor for Digital Mars C++.
- Added FXAPI declaration to FXObjectListOf.
- Fixed type on FXSplashWindow comment.
- Removed default parameter from non-floating bar constructors in FXMenuBar, FXToolBar, and FXDockBar. One must always pass a 2nd parameter as the two constructors can otherwise not be distinguished [GCC people: can't this be detected during compilation?].
- Fixed FXMutex reserved memory amount for HP-UX support.
- Fixed FXMemMap for Digital Mars C++ compile issue.
- Removed ControlPanel from Windows Builds; you can remove the warning message and compile it, but it wont quite work since ControlPanel doesn't change the Windows Registry but only the file-based registry [Maybe that will change in future versions; however, the FOX control panel isn't as important on Windows since FOX follows many of the standard Windows Control Panel settings].

February 8 - FOX STABLE 1.4.1

- Fixed bug in fxsaveJPG() routine; saving JPEG images didn't work properly.
- Fixed problem with ControlPanel crash. ControlPanel would crash when registry was empty.

February 7 - FOX STABLE 1.4.0

Well, after another last-minute feature got snuck in over the weekend, I'm pleased to present the new major stable release, the FOX Toolkit version 1.4!
This release is going to make a lot of people happy, since we've accomplished quite a bit of work since the 1.2 release!

- Smooth dragging and side-by-side docking of toolbars and dockable panels has been implemented.
- A new class FXIconSource facilitates loading and scaling of images or icons, from a large variety of image formats.
- The file selection widget now support thumbnail previewing mode. If a filename is recognized as an image, and the thumbnail mode is in effect, the image is loaded and scaled down to serve as the thumbnail.
- Support was added for shaped windows, allowing you to make non-rectangular windows.
- Thread support was augmented with synchronization primitives and a global application mutex was added to deconflict worker threads and GUI thread.
  Also, a new class FXGUISignal serves to wake the GUI thread from a worker thread.
- Editable cell support were added for the Table widgets.
- SUN Raster image and Amiga IFF image file formats have been added.
- Upgraded to XDND release 5, the latest specification of the XDND standard; interoperability with OpenOffice has been accomplished.
- Exception handling for common resource errors was introduced, allowing FOX programs to gracefully handle various runtime errors like running out of window handles and bitmaps and so on.
- Added alpha channel support for TGA format.
- New 7 Segment Display widget was added. It is arbitrarily scalable.
- Ruler widget was completed. This is a document ruler widget a-la MS-Word.
- New class added for support of Memory Mapped Files. This sure helps with manipulating large blocks of data in a platform-independent way.
- New class FXSplashWindow has been added. It uses the new shaped window facility to present an attractive, arbitrarily shaped introduction window for your application.

February 7 - FOX DEVELOPMENT 1.4.0

- Added thumbnail icon previewing mode to FXFileList, when set in big icon mode. This feature uses the new FXIconSource for the loading and scaling.
  It is quite fast for loading icons, but a bit tardy for directories with large collections of photographs.
- Changed setIcon API's in the various list widgets. An optional owned flag is now passed. If the old icon was owned by the list item, it is deleted, and replaced by the new icon. If the new icon is set to be owned, it will be deleted when the list item is deleted, or when it in its turn is replaced when a new icon is set. As a special case, resetting the same icon does not delete the icon but just changes the owned flag; this allows the application to "reposses" or "disown" the icon.
- Also added a new class, FXIconSource, which embodies the knowledge of various image file formats. It has three main API's: loading an icon from a file, loading an icon from a reswrapped stream, or loading an icon from an already opened FXStream.
  These API's are in turn invoked by three other API's, which can load and scale an icon down to a certain size, using either the fast image rescaler or the slower high-quality scaler.
  These six API's are duplicated for loading images instead of icons.
  Finally, the core loading API's are virtual so that the FXIconSource may be subclassed to provide additional image format support.
- Split off FXIconDict into its own class, and reorganized it to use the new FXIconSource class. Consequently a set of API's has been added to FXIconDict to set/get the FXIconSource.
  FXIconDict manages the lifetime of the FXIconSource object it uses; initially, it creates its own icon source.
- Every time I explain the new toolbar system to someone, I say "dock site" when I meant FXToolBarDock. Obviously, the latter is the wrong name. As of today, there is another reason why this name is not ideal and that is that I have added another class, FXDockBar, which is basically a general- purpose FXPacker with docking capabilities. FXToolBar now derives from that, adding just the reorientation capabilities to the FXDockBar's capabilities.
  So now we have a general purpose packer that can be floated, we need a different- looking handle to move it around, and indeed, that is another class now which is another flavor of FXToolBarGrip called FXDockTitle. This serves as both decorative title as well as a grip for moving the bar.
  We reserve the toolbar grip for small handle-bars inside FXToolBars.
- FXMenuTitle now pops its FXMenuPane to the side depending on where the FXMenuBar containing the FXMenuTitle is docked. The idea is to prevent obscuring the other FXMenuTitles and to try and make sure the mouse is not over the menu pane when first popped up; the latter is potentially dangerous since the risk exists of accidentally invoking a menu option by releasing, without movement, the mouse button [under normal circumstances pressing and releasing the mouse lets the panel stay up; but if the panel appears right under the cursor, a menu option may be invoked instead].
- A few more toolbar docking issues; first, toolbars which are stretched should undock only when their default size sticks out, or oscillation will result. Next, new API's have been added to FXToolBarDock which adjust the layout options of the remaining items in the dock when toolbars are undocked or docked.
  Finally, when releasing the mouse in the toolbar grip, the toolbar was not docking at the same place as it was when the timer expired. This has now been fixed.
- Refactored the code a bit between FXToolBar and FXDockSite. Its FXDockSite's responsibility to know about the interpretation of the layout issues of the toolbar inside of itself; this means FXDockSite needs to be informed when toolbars dock and undock, or are moved around. It falls upon FXToolBar to find which dock should be attempted, and to determine based on heuristic fudge constants when something docks or undocks. We now have a single internal function which decides dock/no dock. While not perfect, it can be counted upon to give the same answer solely based on the relative relationships of toolbar and dock, regardless of whether we're docking or undocking. It is hoped that this prevents oscillation as much as possible.
- Finally, we have a new option in the right-mouse popup menu over FXToolBarGrip which gives the user the ability to flip the orientation of the toolbar without having to dock it.
- Fixed bug to allow dragging even when no alternate parent has been specified; you should be able to reorganize the layout inside a dock site even if floating is not an option.
- Hold Control key while dragging toolbars to prevent docking; this allows parking toolbars near edges of the main window where they would otherwise have docked.
- Drag and drop between FOX and OpenOffice works too!
  OpenOffice appears to be using XDND 5. also. I've managed to drag both text from Adie as well as JPEG image files via PathFinder into OpenOffice; I think I may get used to this!.
- Fixed bug in drawEllipse() on Windows; thanks to Mauro Zecchini for discovering this problem.
- FXFile::search() now expands environment variables (e.g. $HOME) and user names (e.g. ~user) in directories from the search path.

January 31 - FOX DEVELOPMENT 1.3.26

- Upgraded to XDND version 5 standard. Verified interoperation between KDE and FOX, as well as GTK and FOX. using application/x-color drag. Unfortunately, GTK does not accept color drags from FOX, but FOX does accept color drags from GTK. The problem is GTK, since it doesn't accept color drags from KDE either.
  XDND version 5 brings a final confirmation in response to endDrag(). It is possible that the drop target, in processing the drop, encounters some sort of error. The XDND 5 implementation in FOX allows the drop target to call acceptDrop(), indication which action the target DID manage to perform.
  For example, when attempting to move a file from one place to another, the drop target may accept a drop but be unable to perform it [e.g. running out of disk space]. Returning DRAG_REJECT will allow the drop target to tell the drag source it was unsuccessful, and that it should remove the original file
  Note that we used to perform such a thing by trying to obtain TWO DND data's from the source, the real data and NULL data using the "DELETE" atom.
- FXSettings, doesn't quote values unless leading and trailing spaces or special characters in it.
- Updated Control Panel with capability to set file bindings; thanks to Sander for this!
- Minor tweaks to toolbar dragging.

January 30 - FOX DEVELOPMENT 1.3.25

- Changed algorithm that determines when a toolbar docks. For a horizontal dock site, the new algorithm docks the toolbar when the upper or lower edge of the bar falls inside the dock (with a slight amount of fudge since dock sites may be collapsed to 0 pixels when there's no bar inside), and when the bar doesn't stick out too much (mostly overlaps with the dock horizontally).
- Also added some small icons to the toolbar grip docking menu.
- Implemented workaround for grab-lost problems which happen under X11 when a window which is grabbed is docked or undocked. The workaround appear to really kill the issue dead and the opaque-dragging toolbars work just super now.
- LAYOUT_DOCK_NEXT and LAYOUT_DOCK_SAME options conflicted with other layout options. One of the two reserved flag bits has now been used.
- Removed the undock timer. Undocking now happens immediately, but docking is still done with a timer since we shouldn't dock just casually dragging a toolbar across a dock site by accident.
- Docking back now happens not only when hovering near a dock area, but also when you release the toolbar grip near a dock area.
- FXMenuTitle now pops its FXMenuPane besides itself instead of below, if the menubar is oriented vertically.
- Fixed SUN Solaris build issue with FXGUISignal class.

January 28 - FOX DEVELOPMENT 1.3.24

- Reintroduced FXTextCodec's. These were not be part of official 1.4 API, but apparently were being used by the FOX based SWT Widget Set for the Eclipse Project. Note that FXWString really is permanently gone:- FOX 1.5 will take a different approach to unicode support.
- Fixed Borland C++ build issues and some Borland C++ specific compiler warnings.
- Fixed Visual C++ build issues.

January 27 - FOX DEVELOPMENT 1.3.23

- Added new class, FXGUISignal, which allows an FXThread to awaken the FOX GUI and cause it to run some callback message handler. Any number of FXGUISignals may be installed.
- Changed FXToolBar class for docking/floating behaviour against FXToolBarDock.
- Added new class called FXToolBarDock. FXToolBarDock implements rearranging of FXToolBars inside of it. FXToolBarDock is meant to be placed against the sides of an FXTopWindow where docking of toolbars and menubars is to be allowed. FXToolBarDock arranges FXToolBar in multiple galleys or rows. Each galley can have one or more FXToolBar widgets parked side-by-side.
  When space runs out, FXToolBarDock adjusts the number of toolbars on each galley by placing the last bar on the galley onto the next galley down until each galley fits.
- Added new API's to FXUndoList and FXCommand to allow merging of undo records. The undo records can be made mergeable by implementing canMerge() and mergeWith() API's in your subclass of FXCommand. FXUndoList uses these to merge two records when adding a new FXCommand to the undo list.
- Added before() and after() API's to FXWindow to allow testing of order of sinbling windows.
- Changed reparent() function to have extra argument. The new reparent() API makes it possible to insert a widget at any location in the widget tree with a single call. If the widget keeps the same parent, all that happens is a layout recalculation; otherwise, the widget is reparented using a call to the native window interface. The old linkBefore() and linkAfter() API's are now obsolete.
- Added option MBOX_SAVE_CANCEL_DONTSAVE; patch contributed by Sander.
- Augmented FXStream for long file support.
- Added own replacement strtoll() and strtoull() functions in case not available in local C-library.
- 64-bit FXlong and FXulong datatypes are now ALWAYS available.
- Updated FXFile, FXFileList, FXDirList for long file support.
- Added FXLongVal, FXULongVal and signed and unsigned long FXStringVal API's for FXString.
- Dropped FXWString and old text codecs; these are obsolete now.
- Fixed bug in Windows event processing of WM_MOUSEMOVE. When mouse was grabbed, coordinates were wrong when cursor moves outside of grabbed window.
- Fixed bug in getAppName() and getVendorName() in FXApp and similar problems in FXRegistry.
- Upgraded internals of FXIconList, FXList, and FXHeader widgets to use FXObjectListOf template class instead of maintaining own array; this saves some code.
- Changed many access function to return const FXString& instead of FXString. This eliminates generating a string copy.
- Fixed FXMutex reserved memory size to be sufficient for IBM PowerPC/AIX.

X-Mas Release - FOX DEVELOPMENT 1.3.22

- Completed layout computation for FXDockSite widget.
- Fixed highlighting in FXToolBarGrip widget.
- Added API's to FXStream: setBigEndian() and isBigEndian(). These force the FXStream into a particular byte order. Byte swapping will be enabled or disabled depending on the endianness of the platform. The old API isLittleEndian() is removed: to determine byte order, just use FOX_BIGENDIAN macro directly.
- Simplify code for FXHorizontalFrame and FXVerticalFrame a little bit.

December 21 - FOX STABLE 1.2.13

- Backported fixes to 1.2 branch.

December 14 - FOX DEVELOPMENT 1.3.21

- In the FX***Image classes, loadPixels() now can be called even after the image has been created already. It'll resize the server-side pixel storage but not yet call render(), since further manipulations may be desired prior to render().
- Added new colors to FXApp for selected menu foreground and background.
- Fixed some long-standing issues with FXPopup menu handling code. It works better now...
- Added API's like fxcheckTIF(), fxcheckJPG(), etc. These API's read a portion of the image file from the stream, determine if the image format is recognized, and then rewind the stream back to the same point. Thus, you can successively try each image type, create the right FXXXXImage class, and call loadPixels().
  A few of these fxcheckXYZ() API's need some further testing [mostly, due to poorly designed image formats where it is hard to determine the correct type easily].
- Fixed issues with reswrap: first, when passing a prefix for the resource name, the resource name can start with a digit since the prefix is in front of it. Second, the prefix is now also used when using the -r altname option. Finally, filenames on windows can have mixed \ and / path separators. When turning filenames into legal identifiers, we now allow ":" in the name since one could use scope-resolution operator in icon name.
- FXFile::absolute() no longerdoes tilde or environment expansion; there were cases where this was inappropriate and unexpected. You can call FXFile::expand() explicitly where desired.
- FXFileList now shows "." instead of ".." when displaying root of a file system.
- FXFile::simplify didn't handle cases like "/." to "/", causing trouble with the change made to FXFileList; we all knew we had to do slashdot right ;-).
- FXFileDialog could not select "/" when in Directory selection mode. Adding "." in the top directory and simplifying "/." to "/" fixed this problem.
- Changed handling of default color settings; system settings now applied only to settings NOT superceded from FOX Registry. Also, added support to read a few of the most important color settings from X Defaults database, which means FOX displays in colors as set up by your local window manager.
- Updated HTML Syntax patterns from Andy Preston.
- Updated Makefile Syntax patterns.
- Fixed focus navigation code eating key/modifier combinations other than the ones its supposed to; thanks to chafar@alcances.net for pointing this out.
- Hmmm, the FLTK people seem to like my timer-handling code too ;-)

November 29 - FOX DEVELOPMENT 1.3.20

- Fixed problems with FXFileSelector/FXFileDialog; right-mouse popup menu functions Move/Copy/Link/Delete were not quite working right when multiple files were selected.
- Added overloaded setData() to FXImage which changes shape as well as contents of client-side pixel buffer from given pixel array.
- Updated FXDockSite.
- FXFile::getUserDirectory() now uses %USERPROFILE%.
- Added Python and Makefile patterns to Adie.stx syntax coloring file.

November 24 - FOX DEVELOPMENT 1.3.19

- New program, fxdesktop control panel, allows you to set FOX colors and other settings interactively.
- The quaternion function arc() now returns the quaternion representing the rotation of the two vectors, instead of double the angle of rotation about the same axis.
- More new functions for manipulation of quaternions.
- Ascii mode FXRegistry now uses %USERPROFILE% as default location for registry subdirectory. This affects few FOX programs since on Windows, the normal Windows Registry is used by default.
- Added support for Xft in glUseFXFont(). It now properly generates OpenGL display list bitmaps for FreeType fonts.
- Further work in FXFont support for Xft:- now properly fill in properties of the font that matched the desired font.
- Made some API's in FXGLViewer virtual upon request from ESI-Group.
- Fixed some HTML highlight pattern for Adie.
- Read/write ascii based registry from %USERPROFILE%/foxrc on Windows; this is a more logical choice on Windows that %HOME%/.foxrc, which was the old choice. Note, this only affects programs which use the ascii-based registry on Windows. Most FOX programs use the Windows Registry and are thus not affected by this change.
- Fixed problem with FXMessageBox ID_CLICKED_SKIP and ID_CLICKED_SKIPALL.
- Fixed bug in FXStream usage of FXHash.

Halloween Release - FOX DEVELOPMENT 1.3.18

- Important change: consolidated reparentItem(), moveItemBefore(), and moveItemAfter() in FXFoldingList and FXTreeList into a single new API called moveItem(). This is much easier to remember and also allows one to move an item into the right place in the tree in a single call.
- Another important change: harmonized and simplified item addition API's in FXTreeList, FXFoldingList, and FXTreeListBox. The new API's are simpler to use, and easier to remember due to more similar naming to similar API's in the other list widgets.
- Added setHeaders() API's to FXIconList and FXFoldingList. setHeaders() allows you to populate the entire header control of the list widget with a single call.
- Fixed slight offset in editable cell text v.s. non-edited cell in FXTable.
- Added new API's to list widgets. The new API's fillItems() can be used to populate a list widget with a number of items in one fell swoop. The new items are appended to the already existing ones.
- Updated FXSpheref and FXSphered. including one point at a time now produces smaller bounding spheres. Also, empty sphere cases are now handled properly.
- Fixed FXTreeListBox. When adding or removing items, the field was not updated properly.

October 28, 2004 - FOX DEVELOPMENT 1.3.17

- Added editability to FXTable. You can edit cells in the table. From a user's perspective, editing a cell in FXTable is initiated in a number of different ways:

  - Double-click. This will create an input control in the cell and allow you to type.
  - Hit F2 function key, or RETURN key.
  - Start typing any printable character. This works if the input control is a text field; other input controls may drop the input.
  - Send an ID_START_INPUT message to the table.
  The editing ends in one of two ways. If the input is to be discarded, you can hit the ESC key. If the input is to be accepted, you can hit RETURN or nativage to the next cell using arrows or TAB keys.
- Added API's startInput(), cancelInput(), acceptInput() to FXTable. These API's introduce sub-classable input editing for table items to the FXTable class.
- Added setEditable() and isEditable() API's to FXTable.
- getColumnX() and getRowY() in FXTable now return proper scrolled x and y positions of the start of a column (row).
- Removed setColumnX() and setRowY() API's. Functionality of these API's is more intelligibly supported by calling setColumnWidth() and setColumnHeight().
- Added new API's to FXTableItem. The getControlFor() creates and populates a editor control to be used to edit the item. It is used by FXTable to determine what type of control to use to edit a cell. By making this virtual, you can make custom FXTableItems which are edited by a control of your choice.
  The FXTableItem setFromControl() API is used to populate the item from the control. Its function is to read the control and extract the data into the item. In typical usage, it is envisioned that getControlFor() and setFromControl() are both reimplemented for subclassed FXTableItems.
- Added more extensive documentation for FXRegistry.
- Added center-justification mode to FXTextField. In addition to right- and left-justified text in the text field, you can now also have centered text. Centered text larger than the text field can scroll both ways. For backward compatibility reasons, the centered mode is only enabled when explicitly passing JUSTIFY_CENTER_X in the setJustify() API [otherwise, all text fields would end up being centered!].
- Added API changeFocus() to FXWindow; it lets a parent widget know when the focus child is changed.
- Added new API changeFocus() to FXWindow. It can be used by a composite widget to know when the focus changes to another child.
- Added _POSIX_PTHREAD_SEMANTICS for older SUN Solaris thread support.
- Added some API's in FXXYZStream classes.
- Defaulted the normal FOX font to "helvetica,90" normally and "Sans,90" when XFT is enabled.
- Removed deprecated timer and chore API's from FXApp.

Older News

Older news...

Copyright © 1997-2005 Jeroen van der Zijp