Ann: New Axis ( Gtk2::Ex::DBI, Gtk2::Ex::Datasheet::DBI, PDF::ReportWriter ) release



Greetings.

After a very, very long time ( 18 months ), I've finally released new versions of my Axis modules.

The Axis project aims to provide open-source, cross-platform modules for quickly creating database applications with gtk2-perl. It includes:

Gtk2::Ex::DBI - a DBI recordset manager that binds to a Gtk2::GladeXML form. This gives you 'forms' functionality. Gtk2::Ex::Datasheet::DBI - a DBI recordset manager that binds to a Gtk2::TreeView. This gives you 'datasheets' functionality.
PDF::ReportWriter - a  reporting module that exports directly to PDF.

You can download all 3 modules either from my website ( http://entropy.homelinux.org/axis ... which has some screenshots of production systems in action ), or from cpan. Frankly, I'd prefer people download from my website, because it gives me some idea of how many people are using things. cpan offers absolutely no information on downloads to account holders ... but people have requested that I put my stuff on cpan, so the option's there ...

Please email me with bug reports, suggestions, feature requests, etc. Also note that I'm currently building a GUI to futher automate the construction of Axis objects - see the 'future' link on my website, and contact me if you're interested in helping ( I'm having one or two problems ... )

As you can imagine, I've done quite a bit in 18 months. Here are the respective changelogs:

Gtk2::Ex::Datasheet::DBI

Version 2.1, released 01-Jul-2007
Added debugging messages for signal connection / disconnection
   Fixed bug in disconnecting signal from a textview's buffer
   Check if a combo has a model before trying to get an iter; warn if no model present
   Optimisation: don't keep calling $widget->get_model ... keep model around for re-use
   Add primary key detection for SQL Server ( and re-enables SQL Server support which was completely broken )
   Fixed bug in disconnecting signal from a ComboBoxEntry's child entry widget
   Added setup_combo() for creating / refreshing combo models & setting up autocompletion
   Added 'Find' right-click menu item for ComboBoxEntry's children
   Added 'Refresh Combo' right-click menu item for ComboBoxEntry's children we have setup definitions for
   Added get_widget_value method and use it in apply method ( remove code duplication )
   Added set_widget_value method and use it in paint method ( remove code duplication )
   Renamed 'readonly' option to 'read_only' ( and added legacy support with warning )
   Added data-driven record locking ( via data_lock_field ), lock() and unlock() methods
   'tab-forward' when an Enter key is pressed instead of leaving the focus in the current field
   Fixed rare off-by-one error in fetch_new_slice() that was creating invalid SQL
   Added record_status_label_set() to handle setting the record status label, and added some more colour
   Fixed nuking of where object in constructor
   Added reset_record_status() to reset 'changed' flag ( so Gtk2::Ex::DBI considers the record synchronised )
   Added more error handling in constructor ( die with a descriptive error if we're missing something )
   Removed duplicate set_record_spinner_range() in query()
   Added support for pass_through queries that return a recordset ( including stored procedures ) - read_only
   Added 'status_label' key to allow you to specify a label ( by name ) to use to indicate the record status
   Don't include identity columns in insert / update SQL ( fixes SQL Server updates )
   Added 'record_spinner' key to allow you to specify a SpinButton ( by name ) to use as the record spinner
   Added ability to pass a new where object to setup_combo
   Added 'widgets' hash, to store metadata about fields
   Added support for using SQL aliases ( select field as alternative_field ) and binding to the alias
   Suppress more non-fatal warnings when quiet mode is activated
   Added support for custom 'before_apply' function, which can block the apply method
   Dump $local_sql to console via warn() if query() fails and debug is set
   Added support for using a set of SpinButtons to create 1 TimeSpinner ( experimental )
   Replaced padding code with sprintf()
   Added friendly_table_name key to override $self->{sql}->{from} in GUI errors
   Added date_only input formatter
   Added currency input formatter
   Added date_dd-mm-yyyy input formatter
   Added parser for SQL Server default definitions
   INCOMPATIBLE CHANGE:
      get_column_value() now returns an ARRAY if multi_select is turned on
   Populate the widgets hash and the sql_to_widget_map hash with details of the primary key after detection
   Added date_dd-mm-yyyy output formatter
   Disable 'find' menu item in right-click menu of widgets for pass-through queries
   Don't require a formname - if one isn't passed, get the 1st window title from the Glade XML object
   Added currency output_formatter
   Imported more robust primary key detection from Gtk2::Ex::Datasheet::DBI
   Don't set the changed flag if we're in read_only mode
   Added 'type' key to widgets hash and automatically set up input / output formatters based on type
   Added sum_widgets()
   Fixed bug in inserting a record when we're at the end of the keyset
   Simplified apply() and improved debugging output
   Strip dollar signs from values in formatter_number() - we add our own if requested
   Added DBD::SQLite support
   Added original_value()
Patches from DLB:
       Add support for Postgres:
           Set search path in constructor when Postgres driver detected
           Add support for Postgres in last_insert_id()


Gtk2::Ex::Datasheet::DBI

Version 2.1, released 01-Jul-2007
Fixed blocking of insert / delete / apply operations when open in read_only mode
   Imported setup_combo() from Gtk2::Ex::DBI - setup & requery a combo
   Added on_row_select key to run external code when a row is selected
   Fixed text of error message when closing a windows that had an 'un-applied' datasheet
   Don't include identity columns in insert / update SQL ( fixes SQL Server updates )
   Added support for setting individual fields read_only
   Renamed column_value() to get_column_value() and added alias
   Added set_column_value()
   Renamed column_from_name() to column_from_sql_name ( and add legacy support )
   Don't append a primary key column if one is already defined
   Fixed warnings when hiding the status column ( don't set width to 0 )
   Fixed warnings when searching for a primary key ( uninitialised value )
   Renamed packages for custom cell renderers from MOFO:: to Gtk2::Ex::Datasheet::DBI::
       - even though the MOFOs still don't work :)
   Queue iter deletion until the end of the apply() method ( otherwise can't move to next )
   Added before_apply key to object constructor, to run external function before applying
       - return 1 to allow update, return 0 to abort update ( and continue with next record )
   Added 'no warnings' directive and commented out 'use warnings'. Switch around if you want warnings
   Added 'align' key to field hash - use either a string or a decimal from 0 to 1
   Default to right alignment for number fields
   Added DOUBLE to the list of numeric fields
   Added 'access_time' renderer to deal with weird MS Access formatted time values
       ( 1899-12-30 hh:mm:ss ) format - ie ALL times have 1899-12-30 prepended to them
   Allow setup_treeview() to continue without a primary key, but force to READ-ONLY
   More verbose and prettier warnings
   Added missing documentation for foreground_colour key in fields hash
   Fixed warnings when rendering a date cell with a NULL date
   Added support for pass_through queries that return a recordset ( including stored procedures ) - read_only
   Better detection of DATE column types from column_info ( use regex instead of exact match )
   Optimisation: Use stock gtk2 text renderers where possible ( ie when read-only )
   Added support for hard-coding a cell's background colour ( ie a field's background_colour key )
   Added sum_column() function, which returns the total off all values in the given column
   Added support for custom_cell_data_func - a user-defined function for formatting cell data
   Added 'quiet' flag to supress non-fatal warnings
   Added parser for SQL Server default definitions
   Allow 'faked' column_info hash to be passed into constructor
   Exclude the primary key column in updates for ALL databases
   ( also just use our $self->{primary_key} field to detect the primary key column )
   Fixed failure in setup_treeview() when column_info() fails
   Don't worry about detecting more than 1 primary key from column_info()
       - it doesn't work on multi-table queries anyway
   Added friendly_table_name key to constructor for use in dialogs ( imported from Gtk2::Ex::DBI )
   Added support for setting up chains of functions to be attached to a cell's custom_cell_data_func
   Added dd-mm-yyyy support to CellRendererDate
   Fixed incompatibility between us, CellRendererDate and gtk+-2.8.18+
   Re-implemented date_only renderer with a builtin_render_function
       - this is to deal with SQL Server's combination datetime fields when we only want a date
   Mark columns with a currency builtin render function
   Strip out dollar signs and commas from currency columns when applying, in get_column_value, and in 
sum_column
   Attached $self->{columns} ( Gtk2::TreeViewColumns ) to $self->{fields} ( and removed $self->{columns} )
   Store width of each column whatever in 'current_width' ( ie $self->{fields}[_field_no_]->{current_width} )
   Rename size_allocate() to on_size_allocate()
   Added support for using pango markup in the column heading, via a field's header_markup key
   Store column name in the treeview_column hash so we can easily figure what what column someone's clicked in
   Major reorganisation of $self->{fieldlist}, $self->{fields} and column handling to avoid off-by-one BS 
with status column
   Work-around for http://bugzilla.gnome.org/show_bug.cgi?id=317387! Woot!
   Removed Number::Format dependancy - doesn't install well under Windows
   Added count() function, with optional conditions ( similar to sum_column() )
   Optimised column_from_column_name and setup_treeview
   Fixed focus-out-event in custem CellRendererText not triggering the 'edited' signal. Finally. Thanks 
Muppet :)
   Fixed cell editable height problem in gtk-2.10.x. Thanks Torsten :)
   Fixed setting up primary_key_column and primary key in field list if a primary key is passed ( ie if 
column_info fails - very rare )
   Ported data lock functionality from Gtk2::Ex::DBI, adding functions:
       lock()
       unlock()
   Automatically scroll the treeview as the cursor changes
   Copy a cell's font size to the editable when editing ( currently fixed at Arial though )
   Update CellRendererDate to accept font sizes
   Imported calculator from Gtk2::Ex::DBI ( and added ->calculator( column_name ) method )
   Added GST removal and rounding to calculator
   Added on_changed functionality ( gets passed { treepath => $treepath, iter => $iter } )
   Pass model and iter to before_apply() and on_apply() functions
   Added DBD::SQLite support
   Added ( slightly buggy for some data, but hey ... ) initial column sorting support. Double-click in column 
headers to sort
   Fixed duplicate execution of validation code
   Added support for ticking over gtk2 main loop while populating a treeview ( good for slow networks )
   Fixed header alignment for datasheets that aren't visible when being constructed
   Added support for custom dialogs when datasheets need applying
   Added icons to all dialogs
   Added footer support, with sum, max, average
   Better currency formatting
   Added max_column() function
   Added average_column() function
Documentation updates Patches from DLB:
       Add support for Postgres:
           Set search path in constructor when Postgres driver detected
           Added support for Postgres in last_insert_id()
       Added detection of primary key columns
   Other patches and suggestions merged
       Simplified primary key detection
       Allow 'faked' column_info hash to be passed into constructor


PDF::ReportWriter

Version 1.4, released 01-Jul-2007

   Patches from Cosimo Streppone <cosimo cpan org>:
       Improved management of image files according to underlying PDF::API2
           installed version. If you specify an image type that PDF::API2
           can't handle, the image is skipped and a warning is produced.
       Fixed and documented custom cell type mechanism, and added automatic
           require of formatter classes.
Patches Patrik Eschle <patrik eschle spectraseis com>:
       Added support for code39 barcodes
Fixed rendering of the character 0 by itself
   Fixed setup of group footer definition if aggregate source is cell 0
   Fixed bad calling of calculate_y_needed
       ( was passing 'fields' in the options hash instead of 'cells' )
   Added support for multi-line text in data ( ie cells can expand vertically )
   Fixed printing of data headers if there are no groups defined
   Fixed x_pos of text in render_cell_text() for multiline text
   Moved execution of custom render functions to happen before rendering all other cell types
   Added return hash for custom render functions, with support for passing stuff back for traditional 
rendering
   Added fetch_group_results() function ( use this with custom_render_func )
   Fixed splitting of columns inside a delimited group value for group headers ( sorry Bill )
   Fixed printing of group headers if we have to reset them while we're calculating whether we need a new page
   INCOMPATIBLE CHANGE:
       colour_func() functions now get passed ( $value, $row ) instead of just $row
   Removed dependancy on Number::Format
   Fixed rendering of footers if reprinting_header is on
   Fixed corruption of group aggregate values in some cases
   Added text wrapping option to cells for text that is wider than the current width
   Added option to cells to strip line breaks from text
   Fixed bug in calculate_y_space for non-data cells ( eg where $cell->{text} is rendered )
   Create a new page before the 1st invocation of calculate_y_space so we have a text object
   Improved numeric and currency formatting - see the cell's new 'format' key
   Fixed rendering of cell where text begins with a space ( bad optimisation )


Dan



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]