2.5.3
-----

Enhancements:

  - Cocoa: Reading and writing the clipboard is now implemented.

Bug fixes:

  - Cocoa: Prevented spurious changes of input focus due to clicking
    on a view.
  
  - Cocoa: Put in fudge factor to correct text positioning when using
    Courier New.
  
  - Cocoa: Prevented burning 100% CPU time during a modal event loop.

  - Win32: Was unable to save a document over an existing file.
  
  - Win32: Reading an empty clipboard did not work.


2.5.2
-----

Bug fixes:

  - Win32: When run from a command shell, application would exit when
    focus switched to another process.


2.5.1
-----

Bug fixes:

  - The file distutils_extensions.py was missing from the distribution.


2.5
---

Modifications:

  - The old autoloading system has been removed and replaced with
    something that will hopefully be friendlier towards py2exe and
    py2app. There have been some minor changes to the API as a
    result:
    
    - Any class or function not explicitly documented as being in
      a submodule *MUST* now be imported directly from the GUI
      package, not from the submodule that it resides in.
    
    - Importing is mandatory. You must do either 'from GUI import
      Foo' or 'import GUI.Foo' for every class Foo that you use,
      not just 'import GUI' and then refer to GUI.Foo.
    
    - Some classes and functions that were previously available
      directly from the GUI package are now in submodules and must
      be imported from there:
      
      - All the alert functions are now in GUI.Alerts
      - All the file dialog functions are now in GUI.FileDialogs
      - FileType, FileRef and DirRef are now in GUI.Files
      - DefaultButton and CancelButton are now in GUI.StdButtons
    
    Note that for best results, PyGUI should be installed using
    'python setup.py install' before using it with py2exe or py2app.
    These tools will not be able to automatically find submodules of
    a PyGUI that is used directly from the source directory.

  New features:

    - Improved facilities for customising menus when building a menu bar
      with StdMenus.basic_menus().
    
    - Functions for creating PyGUI Images from PIL images and numpy arrays.
    
    - Resource cacheing (see Resources.get_resource()).
    
    - ListButton control providing a pop-up or pull-down menu of choices.
    
    - GridView - a user-defined view consisting of a regular grid of cells.
    
    - PaletteView - a GridView specialised for implementing tool palettes.
      
  Enhancements:
  
    - Added get_default_save_directory() and get_default_save_filename()
      methods to Document, and get_default_open_directory() to Application.
     
    - Setting both 'content_size' and 'scrolling' using keyword args to
      the ScrollableView constructor now works as expected.
    
    - Padding may now be specified around the contents of a Row, Column
      or Grid.
     
    - ScrollableView now has a background_color property specifying a color
      to automatically fill areas outside the extent.
    
  Bug fixes:
  
    - Cocoa: Setting the border property of a TextField did not work.
    
    - Cocoa: Setting the content_size of a ScrollableView did not work.
    
    - Cocoa: Current point was not advanced correctly when drawing text.
    
    - Cocoa: Worked around a memory leak in PyObjC 2.3 affecting
      Canvas.lines() and related methods.
    
    - Gtk: Canvas.gsave()/grestore() did not work properly.
    
    - Gtk: 'style' argument to Window constructor was not handled properly.
    
    - Gtk, Windows: The mechanism for quitting the application when there are
      no visible windows left has been made more reliable.
     
    - Windows: Application was not initially brought to the foreground when
      launched.
    
    - Windows: Initial filename argument to request_new_file did not work.
    
    - Setting the save_file_type property of an Application did not work.
    
    - Relative filenames passed as command line arguments caused problems.
    
    - Setting content_width and content_height properties did not work properly.

    - NumPy arrays did not work as parameters to Canvas methods taking
      sequences of points.
  

2.4.1
-----

Enhancements:

  - On MacOSX, the unmodified character corresponding to a key event
    with Option pressed is now put into the 'key' attribute. On all
    platforms, 'key' now mirrors 'char' if there is no other particular
    value for it to have.
  
  - Key events now have a 'unichars' attribute on all platforms.
  
  - Return key on main keyboard now sets 'key' to 'return' instead of
    an empty string.


2.4
---

Enhancements:

  - Classifiers for PyPi upload added to setup.py. [Vernon Cole]
  
  - Automatically detect Python 3 and convert syntax while installing.
    [Vernon Cole]
  
  - Code modifications for Python 3 compatibility. All tests now pass
    using Python 3.1 on MacOSX and Windows.


Bug fixes:

  - Win32: Invoking the last command in the last menu in the menu bar
    with the mouse did not work.
  
  - Win32: ScrollableView re-implemented without using the MFC View class.
    This eliminates several problems that were plaguing the old implementation.
   
  - Win32: Font sizes were too small when using some pywin32 builds.


2.3.3
-----

Bug fixes:

  - Previous fix for Pixmap coordinates in Cocoa did not work on
    some MacOSX versions.


2.3.2
-----

Bug fixes:

  - Canvas docs incorrectly stated that the current path was cleared after
    filling or stroking.
  
  - Cocoa: Coordinate system for drawing in a Pixmap was upside down.


2.3.1
-----

Bug fixes:

  - Win32: Fixed a bug in the previous ScrollableView fix.
  
  - Win32: If a modal dialog was dismissed by pressing the Enter key,
    the subsequent key-up event could spuriously trigger a button
    in another window.
  

2.3
---

Enhancements:

  - GLView selects modelview matrix and sets it to identity before
    calling render().
 
  - Added init_projection() method to GLView, called from default
    implementation of viewport_changed() with projection matrix
    selected and set to identity.
  
  - Texture.gl_id() method returns the texture ID for the current
    context without binding it.
  
  - Texture.gl_tex_image_2D() method loads texture data from an Image.

  - Updated to work on Snow Leopard with PyObjC 2.3.
  

Bug fixes:

  - Filename case error in setup.py causing cursor resources not to
    be installed.
   
  - Crash on closing a window containing a GLView due to attempting
    to call glViewport for an invalid GL context.
  
  - Fixed some problems with Images and Pixmaps in Cocoa.

  - Win32: Fixed crash concerning ScrollableView with pywin32 build
    213 and later.


2.2
---

New features:

  - TextEditor component with scroll bars and uniform tab stops
    for editing large amounts of text.
  
  - Row, Column and Grid layout classes.
  
  - Printing support.


Enhancements:

  - Component add() and remove() methods now accept a sequence of
    items as well as a single item.
   
  - All Controls now uniformly have a 'value' property.
  
  - RadioGroup add() and remove() methods replaced with add_item(),
    remove_item(), add_items() and remove_items() to avoid name clash
    when mixing a RadioGroup with a Component.

Bug fixes:

  - Unicode strings as menu item titles did not work properly.
  
  - Win32: Misnamed function in GDI+ interface (GdipAddPathLine2).


2.1.1
-----

Enhancements:

  - CheckBox now has a 'mixed' property that can be changed
    after creation.

Bug fixes:

  - Cocoa: Text fields had the wrong border style.
  
  - Gtk: Window show/hide was broken in 2.1.
  
  - Windows: File dialogs did not set initial directory properly.


2.1
---

Enhancements:

  - All menus can now be removed by assigning an empty list to
    the menus property of the application.
    
  - Cocoa: Hide, Hide Others and Show All now enabled in the
    application menu.
   
  - Win32: Added more standard cursors.

Bug fixes:

  - Gtk: Removed spurious 'self' in TextField.set_selection().
  
  - Win32: Can run PyGUI apps using pythonw now.
  
  - Win32: Fixed coordinate transformation problems in ScrollableView.


2.0.7
-----

Bug fixes:

  - Cocoa: Canvas.lines and Canvas.poly did not work.


2.0.6
-----

Enhancements:

  - Cocoa: Redesigned handling of standard editing commands for
    builtin components to make them overridable and to cooperate
    better with custom components.


2.0.5
-----

Bug fixes:

  - Win32: Removed experimental mouse leave event handling that
    was causing problems on some systems.
   
  - Win32: Trying native backend before gtk in case gtk is
    installed.
  
  - Cocoa: Custom view objects could not be targeted.
  
  - Cocoa: Canvas.rect() did not work.
  
  - Gtk: Mouse move events were being reported as mouse drags.

Enhancements:

  - Win32: hand and fist cursors improved.
  
  - Added selection_forecolor and selection_backcolor to the
    StdColors submodule.

API changes:

  - Removed mouse_enter and mouse_leave events from the official
    API for the time being, since they are not easy to implement
    consistently across all platforms.


2.0.4
-----

Bug fixes:

  - BlobEdit demo: Reduced flickering on Windows.

  - Win32: Full menu list of a window sometimes not updated
    properly, leading to '_all_menus' attribute error.
  
  - Win32: Disabled customization of Control colour for now,
    since it doesn't seem to work properly on XP.
  
  - Win32: Tab key with no control focused did not tab to the
    first control.
   
  - Win32: Return/Enter now activates a focused control as
    well as space.
  
  - Win32: Error in printed instructions for test 29.
  
  - Win32: Changed the way window background colour is handled
    to prevent flickering when resizing.
  
  - Win32: Fixed problem with 'pitch_and_family' when creating
    a font.
  
  - Canvas was missing fill_frame_rect() on some platforms.
  
  - Canvas.frame_rect() was not starting a new path on some
    platforms.
   
  - Pressing Tab in a window with no subcomponents caused crash.


2.0.3
-----

Bug fixes:

  - BlobEdit demo:
    - clear background before drawing.
    - Win32 - attribute error on startup.
  


2.0.2
-----

Bug fixes:

  - Fixed problem on Windows resulting in "This module should
    not be imported" error.
  
  - Cocoa: Canvas was using fillcolor instead of textcolor
    for drawing text.


2.0.1
-----

Bug fixes:

  - Fixed problems in setup.py affecting installation on
    Linux and Windows.

2.0
---

API changes:

  - The 'extent' property of ScrollableView is now just a size
    rather than a rectangle.
   
  - By default, containers now re-layout their contents when their
    size changes for any reason, not just when the user resizes the
    window. There is a new property auto_layout controlling this
    behaviour. Conversely, the default behaviour of the resize()
    method is now *not* to re-layout the contents, with an option
    to do so.

New features:

  - Major additions made to the Canvas class. Full set of Postscript
    style path construction operators now implemented on all platforms,
    and a wide variety of new high-level functions have been added.
  
  - Added a keeps_document_open attribute to Window to allow for
    windows that do not keep their associated document open.
  
  - Added 'fullscreen' window style.
  
  - Added 'invisible' cursor to StdCursors.
  
  - Added delta attribute to mouse_move and mouse_drag events
    (currently MacOSX only).

  - Added leading, cap_height, x_height properties to Font.
  
  - Added enter-key and escape-key actions to TextField.

Enhancements:

  - Mouse and keyboard event handling can now be overridden for
    all component classes, not just user-defined views.

  - Cocoa: Change dot is set in window title bar when the
    window's associated document needs saving.
  
  - When saving a document, data is written to a temporary file
    which is then renamed, to avoid destroying the original file
    if the write fails.
  
  - Container.shrink_wrap() will figure out a reasonable padding if
    you don't specify one.
  
  - Setup script only installs relevant backend for platform.
  
Modifications:

  - Renamed 'tabbable' property to 'tab_stop'. Provided a mechanism
    for the user to express a preferences as to whether non-textfield
    controls are tabbed into, defaulting to platform conventions.
  
  - Canvas now has separate pen, fill and text colour properties. The
    'forecolor' property is write-only and sets all three to the same
    colour. Erasing operations replace image with background colour,
    other operations blend.

Bug fixes:

  - Cocoa: Default and cancel buttons in dialogs were being
    activated twice when Enter or Escape pressed.
  
  - Crash occurred when closing a Window that was not attached
    to a Document.
  
  - Exceptions.InternalError had nonexistent base class.
    

1.7.3
-----

Enhancements:

  - Cocoa: Tasks continue to run while menus and controls are
    being manipulated.
  
  - Cocoa: Using more reliable method of handling command line
    arguments in non-py2app environments. Should address
    problems with IDLE.


1.7.2
-----

New features:

  - New events and event handling facilities:

    - Support for multiple mouse buttons. The mouse_down and
      mouse_up events now have a 'button' attribute.
  
    - Views can define methods to handle mouse_drag and mouse_up
      events as an alternative to using track_mouse().
    
    - New mouse events: mouse_enter, mouse_leave.
    
    See "Mouse Events" under the "Event Handling" topic for a
    discussion of the new event features.
  
  - Improved alignment of different control types when they
    are laid out by place_row().
  
  - New file dialog functions for requesting multiple files
    and requesting old and new directories.
  
  - New Application properties: open_file_types, save_file_type,
      file_type

Enhancements:

  - Changed Gtk implementation of file dialogs to use newer
    widgets, and implemented file type filtering.
  
  - Tidied up the APIs of FileRef and DirRef, and made them
    immutable.
  
  - Cocoa: Slider in discrete mode now only calls action when
    the value changes, instead of whenever the mouse is dragged.
  
  - Cocoa: Undo and Redo supported in TextFields.
  
  - Cocoa: File open requests sent to a running application
    from the Finder are handled.
  
  - Cocoa: Expanded BlobEdit example to demonstrate
      - resource handling
      - building an application using py2app, with file and
        application icons and launching from the Finder by
        opening an associated file.

API changes:

  - Application.make_new_document() and make_file_document()
    abstract methods collapsed into a single make_document()
    method.
  
  - You should no longer call new_cmd() from your application's
    __init__. Instead, do this in your implementation of
    Application.open_app() if needed.

Bug fixes:

  - Frames did not work.

  - Error in the installation instructions in the README file
    corrected.
  
  - Cocoa: Attempting to create a Font with an unsupported
    combination of attributes now results in fallback to the
    application font instead of a crash.
  
  - Cocoa, Gtk: Canvas.xxx_arc() methods did not work.
  
  - Gtk: Stroking an unclosed path did not work.
  
  - Cocoa: Return/Enter in single-line text field was not
    propagated to containing components.
  
  - Setup.py did not install the standard cursor resources.
  
  - Documentation of alert functions adjusted (caution_alert
    removed, stop_alert added).
  
  - Cocoa: Drawing text with a foreground colour other than
    black did not work.
  
  - Gtk: Fixed glitches in selection handling when switching
    focus between TextFields.
  
  - Gtk: Text can no longer be copied out of a password
    entry field.
  
  - Cocoa: Edit menu commands did not work in a Cocoa-defined
    dialog (e.g. save file dialog).
  
  - Cocoa: Custom cursor of a ScrollableView now appears only in
    the content area, instead of over the scroll bars as well.
  
  - Cocoa: Update the window change dot when document need saving.


1.7.1
-----

New features:

  - Slider control.
  
  - run() convenience function, equivalent to application().run().

  - Geometry.rects_intersect() function.

Enhancements:

  - Files given on the command line will be opened when run() is
    called.
  
  - BlobEdit example application now demonstrates use of the
    update_rect parameter to View.draw().

Bug fixes:

  - Disabled a debugging statement that was inadvertently left on
    in Cursor.__init__.

  - Changed the package name in setup.py to something more meaningful
    than 'foo'.


1.7
---

New features:

  - OpenGL: DisplayList class for managing display lists,
    analogous to the Texture class.
  
  - Cursor class and 'cursor' property of Views.
  
  - Facilities for locating resource files associated with the
    application.

Modifications:

  - Cocoa: More informative error message produced when an application
    is run with python instead of pythonw.
  
  - Cocoa: View.track_mouse() now allows Tasks to run while the mouse is
    being tracked.
  
  - Cocoa: Exceptions occurring during the firing of a Task are propagated
    to the main event loop for handling.
  
  - Documentation added for class Task.
  
  - OpenGL: API for context sharing has been changed. Instead of passing one
    GLView or GLPixmap as the 'share' argument to the constructor of another,
    there is now a class GL.ShareGroup which is passed to a GLView or GLPixmap
    constructor as 'share_group'.
  
  - GL.Texture instances now deallocate associated OpenGL resources
    when they are no longer referenced.
  
  - The 'binary' attribute of class Document now defaults to true. If false,
    the document's file is opened for reading in universal newlines mode.
  
  - Cocoa: Setting the Macintosh creator and type code of a file using a
    FileRef and FileType is now implemented.
  
  - RadioGroups are now iterable, so they can be used directly in the
    place_row() and place_column() methods of a Container.

Bug fixes:

  - Cocoa: Getting the extent property of a ScrollableView did not work.
  
  - Cocoa: Worked around a PyObjC bug that was causing Tasks to leak memory.
  
  - Cocoa: Request New File dialog with a file type having a Macintosh
    type code did not work.

1.6.1
-----

Bug fixes:

  - Mouse down event in a GLView caused a crash.
  
  - Canvas methods fill_poly() and stroke_poly() didn't work. Added
    a test for these.


1.6
---

Implementation changes:

  - The Macintosh implementation has been completely rewritten to
    use Cocoa instead of Carbon. The Carbon version is no longer
    supported.

API changes:

  There are some backward-incompatible changes to the API in this
  version. Apologies if this causes inconvenience, but I feel it's
  important to get the API right while there's still a chance.

  - A ScrollableView class has been introduced which encapsulates all
    details of scrolling. The View class is no longer scrollable.
    The ScrollFrame class has been removed.
  
  - View.draw() is now passed a second parameter indicating the
    rectangle needing to be drawn.
  
  - Canvas.frame_arc() and Canvas.fill_arc() only support circular
    arcs, and take a centre and radius instead of a rectangle.
  
  - Menu constructor now takes a single parameter containing a list
    of item descriptors, instead of taking each descriptor as a
    separate argument.
  
  - The Application.std_menu_bar property has been removed. Use the new
    StdMenus.basic_menus() function instead.
  
  - The visible property and the show() and hide() methods are now
    only defined for Windows, not Components in general.

Behaviour changes:

  - ModalDialog.dismiss() also hides the dialog.
  
  - Setting TextField.selection also makes the text field the target.
  
  - TextField.select_all() also makes the text field the target.

New features:

  - FileType class for platform-specific file type metadata
  
  - Window.auto_position property
  
  - Alpha channel support added to API (not fully implemented
    on all platforms yet).
  
  - New Canvas methods: stroke_rect(), stroke_arc(), stroke_oval(),
    stroke_poly()
  
  - New OpenGL-related classes: GLConfig, GLPixmap, Texture
  
  - Key names for function keys added
  
  - Frame class (general-purpose plain vanilla Container)
  
  - Enhanced facilities for creating and modifying menus (still under
    development):
  
    - StdMenus module to hold stuff related to standard menus
    
    - MenuList class with facilities for finding menus by command
    
    - Menu class can have items added to it after construction
    
    See the new doc section "Customising the Standard Menu Bar" for
    more information.
  
  - The BlobEdit example application has been improved. You can now
    get rid of unwanted blobs by shift-clicking on them.


1.5.3 (not released)
-----

Bug fixes:

  - Modal dialogs can now be dismissed with None as the return value.
  
  - Mouse events in a GLView were being reported in the coordinate
    system of the view's container rather than the view itself.
  
  - Menu items were not being disabled and unchecked before menu
    setup.
   
  - The list of objects observing a Model is now kept outside of
    the model object, to make pickling of models easier.
  
  - Mac: Shift & option menu command key modifiers did not work.
  
  - Mac: Setting the width or height of a view's extent to zero caused a
    crash when calculating scroll bar values.
  
  - Mac: Reading the font property of a Canvas did not work.
  
  - Mac: Setting the selection of a TextField did not work.
  
  - Mac: Font, colour and justification settings of controls interacted
    in strange ways.

Enhancements:

  - update() method added to View and GLView for immediate redrawing.
  
  - ModalDialog.dismiss() now hides the dialog.


1.5.2 (not released)
-----

Modifications:

  - GLView.with_context() now returns the return value of the supplied
    function.
  
  - Application.quit_cmd() now destroys all windows before exiting
    the event loop (previously only those belonging to a document
    were destroyed).


1.5.1
-----

Bug fixes:

  - Menu item groups did not work.
  
  - Mac: Labels were not updated properly on changing the text property.
  
  - Mac: Setup script failed when Pyrex was not available.

New examples:

  - Tests/08-menu.py now includes an example of using a menu item group.

1.5
---

New features:

  - OpenGL view component added.


1.4
---

New features:

  - Image class for loading and drawing RGB images.
  
  - Pixmap class for offscreen drawing.
  
  - Containers now have a shrink_wrap() method to facilitate
    bottom-up component layout strategies. See class Frame.

Bug fixes:

  - Access to 'text' property of TextField in password mode didn't work.
  
  - TextField not refreshed properly when 'text' property changed.
  
  - Distutils script did not install subdirectories of the GUI package.

API changes:

  - 'password' property of TextField is now initialize-only.
