Change History
Changes Since Version 0.99.141
-
Added support for multithreaded FXPy applications.
-
Reinstated the pre-built binaries on Windows for Python 1.5.2. Now you
can download binaries for either Python 1.5.2 or Python 2.0 on Windows.
-
Added the support code necessary for overriding virtual functions from
the FXMDIChild and FXToolbar classes in Python subclasses.
-
Corrected the functionality of the setData() and getData()
functions for FXListItem, FXHeaderItem, FXIconItem,
FXTableItem
and FXTreeItem. You should now be able to associate any object
with these items as with their C++ equivalents. Thanks to Bastian Kleineidam
(calvin@cs.uni-sb.de) for pointing out this bug.
-
The message data for SEL_COMMAND and SEL_CHANGED messages
from FXTreeList should be a reference to the affected tree item
instance, but it was erroneously sending a reference to a new (different)
tree item. This bug has been fixed; thanks to Bastian Kleineidam (calvin@cs.uni-sb.de)
for pointing it out.
-
Fixed a bug in the textedit.py test program as noted by Bastian
Kleineidam (calvin@cs.uni-sb.de).
-
Fixed several bugs in the imagetest.py test program as noted by
Bastian Kleineidam (calvin@cs.uni-sb.de).
-
Fixed a bug for the overloaded FXWindow.update() function as noted
by Bastian Kleineidam (calvin@cs.uni-sb.de).
-
Updated all APIs for consistency with FOX 0.99.143.
Changes Since Version 0.99.135
-
Added a demo browser which lets you view the source code and comments about
the various test programs while running the selected test program(s). To
try it out, change to the tests subdirectory and run the demo.py
script. Note: This one requires the new XML classes in Python 2.0 and won't
work with earlier versions. Consider this an incentive to upgrade to Python
2.0.
-
Corrected a bug related to downcasting pointers to regular FOX class instances
to pointers to FXPy class instances. This particular bug has not caused
any problems yet but it could easily have led to some mysterious compiler-dependent
problems downstream. Many thanks to Bob Unnold for pointing out the problem
and offering the solution.
-
Added the previously missing overloaded constructors for FXFont,
FXGLContext,
FXGLCanvas,
FXGLViewer,
FXRecentFiles
and FXToolbar .
-
Added the support code necessary for overriding virtual functions from
the FXImage and FXScrollArea classes in Python subclasses.
-
Updated all APIs for consistency with FOX 0.99.141.
Changes Since Version 0.99.131
-
Added the previously missing overloaded constructors for FXCursor,
FXDialogBox,
and FXMenubar.
-
Added the previously missing overloaded versions of addItemFirst(),
addItemLast(),
addItemBefore()
and addItemAfter() for FXTreeList and FXTreeListBox.
For an example, see the splitter.py test program, where two different
forms of the addItemLast() function are used to add tree items
to the tree list.
-
Added the previously missing overloaded versions of insertItem(),
replaceItem()
and appendItem() for FXList and FXIconList,
plus the overloaded version of appendItem() for FXHeader.
-
Added a little more support for the FXStream and FXFileStream
classes, mainly in support of the imageviewer test program.
-
Completed the imageviewer test program, a demonstration of the FXImageViewer
widget. Try out imageviewer.py in the tests subdirectory.
-
Now that Python 2.0 final has been released, I'm dropping the pre-built
binaries on Windows for Python versions 1.5.2 and 1.6. The FXPy binary
installer for Windows is for use with Python 2.0 only. Note that FXPy doesn't
use any of the newer Python features and so it can be built from the sources
to work with any of the earlier Python versions if you so desire.
-
Updated all APIs for consistency with FOX 0.99.135. This includes support
for the new FXGIFCursor class.
Changes Since Version 0.99.128
-
Modified how message handling is performed, to account for the FOX library
changes in support of multiple inheritance. These changes should not require
any changes to existing FXPy scripts, but a side effect is that all of
the standard message-mapping macros (FXMAPFUNC, FXMAPFUNCS,
FXMAPTYPE
and
FXMAPTYPES) are now supported.
-
The build and installation process has now officially moved to a Distutils-based
process. Hopefully this will cut down on the previous process which was
error-prone, and furthermore was different for Windows and Unix platforms.
-
On Windows, added binary installers for Python 1.6 and Python 2.0b2.
-
Updated all APIs for consistency with FOX 0.99.131.
Changes Since Version 0.99.121
-
Fixed a little bug related to the message data sent from FXHeader widgets
to their message targets. When the message data (an integer) was equal
to zero FXPy was sending Python's "None" object instead of zero as the
data. This bug showed up, for example, in the header.py test program
when you clicked on the first column in the header.
-
Updated the textedit example to more closely resemble the latest C++ version
of this program (i.e. the one distributed with fox-0.99.128). It's closer
but still missing some of the functionality of the C++ version. Maybe next
time ;)
-
Updated all APIs for consistency with FOX 0.99.128.
Changes Since Version 0.99.119
-
Fixed a big bug, probably introduced at FXPy version 0.99.118, which sometimes
caused FXPy programs to shut down with the message "SystemError: NULL result
without error in call_object". Many, many thanks to Pedro Proenca (proenca@hks.com)
for recognizing and diagnosing this problem!
-
The wrapper source code file for the controls module (src/controls.cpp)
was getting ridiculously big and time-consuming to compile, so I've broken
that one down a but further. Although this increases the number of source
files it will probably actually cut down the compile time a bit.
-
Updated all APIs for consistency with FOX 0.99.121.
Changes Since Version 0.99.118
-
Corrected a little bug for FXTreeList items all appearing at the "root"
level.
-
Updated all APIs for consistency with FOX 0.99.119. This includes the addition
of the getWidthForHeight() and getHeightForWidth() member functions of
FXWindow.
-
Completed support for all of the virtual functions exposed by FXWindow.
Changes Since Version 0.99.87
-
Updated all APIs for consistency with FOX 0.99.118; this includes the addition
of the new FXImageView, FXPNGIcon, FXPNGImage, FXXPMIcon and FXXPMImage
classes.
-
The binaries for the Windows version now have JPEG and PNG support built-in,
so that you can use the FXJPEGIcon, FXJPEGImage, FXPNGIcon and FXPNGImage
classes.
-
The instructions about the OpenGL requirements for the Windows 95/98 have
been clarified. You must have the OpenGL runtime libraries (opengl32.dll
and glu32.dll) installed on your PC even if you don't intend to use the
OpenGL features of FXPy. If you do want to use FXPy's OpenGL-related classes
you would additionally need to obtain & install PyOpenGL. See the comments
near the top of this page, under "What about OpenGL?", for more details.
-
I've started updating the data which gets passed along as the last argument
of the message handler functions so that it is easier to use. But this
is still in the works, and so the previous recommendation of just going
back to the sender object for the data still applies.
-
Corrected several small problems which caused compile-time errors for gcc-2.95.1
and SGI's Irix 6.5 C++ compiler.
-
Added a new example program, neko.py, which is an FXPy port of one
of my favorite time-wasting games for X. You'll recognize it once you see
it.
-
Implemented the readPixels() and readFeedback() methods
for class FXGLViewer.
-
Implemented the inquireDNDTypes(), getDNDData(), acquireSelection(),
acquireClipboard()
and beginDrag() methods for class FXWindow.
-
The constructors for icons and images now take a string as their input
instead of a list of integers (as they did previously). This is a more
natural way to do things and makes it much more convenient to load icon
and image resources directly from disk files. All of the test programs
which used icons have been updated accordingly; see textedit.py
for a good example of how straightforward it is now.
-
Cleaned up a lot of memory leaks due to my badly implemented SWIG typemaps
for converting FXStrings to Python strings and vice-versa.
Changes Since Version 0.99.79
-
Updated all APIs for consistency with FOX 0.99.87.
Changes Since Version 0.99.65
-
Updated all APIs for consistency with FOX 0.99.79.
-
Fixed the FXDial.getRange() function. It now returns a tuple containing
the low and high values for the dial.
-
A significant change was made in the FOX API so that modal dialogs are
now constructed by passing in an "owner" window, above which the dialog
should always appear. Any dialogs which used to take an FXApp as their
first argument should now (probably) take an owner window instead.
-
The showModalErrorBox(), showModalInformationBox(), showModalWarningBox()
and showModalQuestionBox() member functions were removed from
FXApp and now they are just regular (non-member functions) which take an
owner window as their first argument. See any of the test programs for
an example of how this works; it's a fairly minor change.
-
Fixed the FXText.extractText() function. This function now takes
the starting position and number of characters to extract from the text,
and returns the result as a string.
-
The error handling situation has been improved a little bit. Previously,
Python exceptions raised in your message handler functions got lost in
the guts of FXPy and you would only see the useless error message "Message
handler returned NULL". Now, if a runtime error occurs in one of your message
handler functions, FXPy should correct pass the Python exception
back up to the interpreter so that you get a useful error message. There
are other kinds of runtime errors which we cannot yet trap; especially
problematic are those errors which cause the (C++) library to call fxerror()
and exit immediately. This problem will probably not be addressed until
FOX 2.0 when Jeroen plans to throw C++ exceptions in the event of such
runtime errors.
-
FXPy is also a little more friendly to those who would like to experiment
with it interactively (i.e. from a Python shell). In previous versions,
as soon as you quit an FXPy program it called the system exit()
function and actually dropped you out of the Python interpreter completely
(a very antisocial thing to do!) To get around this problem, I've changed
the implementation of the FXApp::exit() function so that it doesn't call
the system exit() function. You can now run FXPy programs from a Python
interpreter and return safely to the interpreter when those programs shut
down.
Changes Since Version 0.99.63
-
Minor updates for consistency with FOX 0.99.65. This includes among other
things the additions of the setPatternText() and getPatternText()
member functions for FXFileSelector and FXFileDialog and the LIST_AUTOSELECT
option for FXList.
-
Fixed a bug in the compile.py script (for the Windows build) which
led it to use debug versions of the object files for both the debug and
release builds of FXPy. The result was that the release build's DLL (foxc.pyd)
depended on both MSVCRT.DLL and MSVCRTD.DLL. Now, the two different configurations
use different object files and so all is well. (Thanks to Robin Becker
for pointing out this problem.)
-
Fixed bugs in the dialog.py and weather.py test scripts
related to the API changes for FXDialogBox and FXPopup.
The constructors for these classes should now take an owner FXWindow
instead of an FXApp (as they did previously). (Thanks again
to Robin Becker for pointing out these bugs!)
Changes Since Version 0.99.55
-
Updated all APIs to be consistent with FOX 0.99.63.
-
Thanks to updates in SWIG, the tool which generates the interface wrapper
code, FXPy now supports keyword arguments for all functions. This is especially
useful in constructors, which typically have numerous arguments with default
values; you can now specify different values for, say, the main window
width and height, without providing all of the intermediate constructor
arguments as "placeholders". See the test programs in the tests
subdirectories for numerous examples.
-
Added some error checking to the weather.py test program.
-
Fixed things so that Python classes which derive from FXGLObject
can override the virtual draw(), hit(), canDrag(),
canDelete()
and drag() functions.
-
Fixed things so that Python classes which derive from FXHeaderItem,
FXIconItem,
FXListItem
or FXTreeItem can override their virtual getWidth(),
getHeight(),
create(),
detach()
and destroy() functions.
-
Added wrappers for all of the standard message handler functions (e.g.
onPaint, onKeyPress, ...) so that derived classes can call on them as needed.
-
Updated to the latest version of David Ascher's compile.py script.
Among other things, this version will now automatically launch Visual C++
and begin the compile if it detects that the Python COM extensions and
Visual C++ 6.0 are installed.
Changes Since Version 0.99.46
-
Updated all APIs to be consistent with FOX 0.99.55.
-
Added the tabbook.py and weather.py test programs. The
former is just a port of FOX's tabbook example program, while the latter
is a new example inspired by pyWeather.
-
Corrected a typo in FXPy.h for the declaration of class FXPyProgressBar
(thanks to Scott Wolford).
-
Completed implementation of handle() functions for all the objects.
This means that new Python classes derived from FXPy classes should handle
messages properly.
-
Improved SWIG typemaps so that for most C++ member functions which take
inputs of type FXWindow*, FXIcon*, FXObject*
and FXTreeItem*, and which accept NULL pointers as valid inputs
(e.g. passing NULL as the icon for an FXLabel, or NULL as the target object),
the equivalent Python class method will accept "None" as an input. All
of the test scripts were modified to reflect this change.
-
Clarified the license for FXPy (using the GNU Lesser General Public License).
See the LICENSE file in the top-level directory for the details.
Changes Since Version 0.99.42
-
Updated APIs for all objects to be consistent with FOX 0.99.46. This included
changes to existing APIs as well as support for the new classes FXGLShape,
FXGLCylinder, and FXGLCone.
-
Added some missing layout hint flag definitions (LAYOUT_FILL_ROW)
-
Added some missing APIs for FXWindow and FXPacker
-
Modified SWIG typemaps for FXStrings so that anywhere an FXString is expected
you can now pass None; this translates to an empty string. You can also
still pass "" for empty strings as before.
-
Modified SWIG typemaps for functions which return pointers to FXWindows;
now, when those functions return NULL pointers it gets returned as None
to the Python code. (Still need to check for other similar situations where
a NULL pointer might be returned!)
-
Fixed all of the test scripts to use the "pound-bang hack" for Unix (some
of them had it, some didn't)
-
Modified textedit.py to just import the os module instead
of os.path (which I guess didn't show up until Python 1.5.2).
Now it works properly with Python 1.5.1.
-
Modified the gltest.py and glviewer.py programs to gracefully
exit if the PyOpenGL extensions are not available.
-
Updated the glviewer.py test program to include new GL objects
(cones and cylinders)
-
Added the groupbox.py, iconlist.py and shutter.py
test programs
Changes Since Version 0.99.41
-
Updated APIs for FXIconList to be consistent with FOX 0.99.42
-
Corrected interface for FXTreeList.getSelectedItems()
-
Corrected interfaces for FXFont.getFontDesc(), FXFontSelector.getFontSelection(),
and FXFontDialog.getFontSelection()
-
Corrected interfaces for FXGLViewer::lasso(), FXGLViewer::select(),
FXGLViewer::getViewport(), FXGLViewer::eyeToScreen(),
FXGLViewer::getBoreVector(), FXGLViewer::getLight(), and
FXGLObject::bounds().
-
Fixed bugs in the textedit.py test program
-
Added alternate constructors for FXFont
-
Removed interfaces to message handler functions (e.g. onPaint)
to reduce the overall size of the interface. Some of these may be reintroduced
as needed.
-
Added new tests glviewer.py and dirlist.py to the tests
subdirectory.
Last Update: $Date: 2000/11/10 22:44:38 $