Change History
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/09/27 17:53:12 $