< Kexi‎ | Releases

Kexi/Releases/Kexi 2.0 Alpha 12

April 9, 2009

The Kexi team is proud to announce the 12th Kexi alpha for the upcoming 2.0 release.

The main highlights behind Alpha 12 is a completely new Report Designer, and Property Editor, both based on new Qt 4's facilities. Report Designer is a creative fork of OpenRPT libraries, and already makes up a rich reporting tool that well integrates with Kexi principles. Property Editor is a component used by any designer in Kexi, i.e. currently Table, Query, Form, Report and Script Designer. The new quality of the Property Editor will hopefully improve user experience.

As a true Free and Open Source Software project, Kexi has enjoyed more new developments such as Oracle and ODBC drivers.

Detailed change log is published below (typically for this stage of development it is somewhat more technical to show scope of the works).

There is also a blog entry devoted to the features of Alpha 12: http://www.kdedevelopers.org/node/3933.


The code is tagged in the KDE Subversion repository as kexi/2.0alpha12. It is accessible e.g. via svn co svn://anonsvn.kde.org/home/kde/tags/kexi/2.0alpha12 command (there is no source code archive file).

People behind this release

  • Adam Pigg (adam at piggz.co.uk): Report Designer
  • Sharan Rao (sharanrao at gmail.com): ODBC driver/wrapper for KexiDB
  • Julia Sanchez-Simon (hithwen at gmail.com), Miguel Angel Aragüez-Rey (fizban87 at gmail.com): Oracle driver for KexiDB
  • Jaroslaw Staniek (staniek at kde.org): Main Window, Form Designer, Property Editor, Core, KexiDB


  • use global Oxygen icon: database -> server-database
  • use KoProperty2 in Kexi
  • Form Designer ported to Qt 4/KDE 4
  • mature Report Designer module


  • (minor) better sanity check: fix crash when more than one objectwith Part ID == -1 is encountered in kexi__objects table
  • (minor) show error when no KexiWindowData is returned by the current plugin
  • added KexiView::setSortedProperties(bool)
  • make default value of X-Kexi-PropertyEditorAlwaysVisibleInDesignMode flag for kexi parts == true by default
  • remove crash on creation of a new part item that is first of its class within a given project; e.g. when the first query is created (introduced after moving towards "part classes")
  • in general: we're no longer using part IDs, we have switched to Java-like part class names e.g. org.kexi-project.table; this allows for easier development of custom 3rdparty plugins
  • Plugins: removed X-Kexi-TypeMime property (of values like kexi/query) and added X-Kexi-Class, e.g. org.kexi-project.query
  • KexiPart::Manager::partForMimeType() replaced by KexiPart::Manager::partForClass()
  • KexiPart::Manager::infoForMimeType() replaced by to KexiPart::Manager::infoForClass()
  • KexiProject::itemsForMimeType() replaced by KexiProject::itemsForClass()
  • KexiProject::getSortedItemsForMimeType() replaced by KexiProject::getSortedItemsForClass()
  • KexiProject::itemForMimeType() replaced by KexiProject::itemForClass()
  • KexiProject::items(): retrieve info about all objects instead of running queries separately for each class

Main Window

  • make complex properties (e.g. QRect) expanded by default
  • fix forced property set reloading
  • properly hide the property editor pane when switching between views and tabs
  • delayed loading of the "create" toolbar
  • possibility of adding actions to toolbars e.g. by kexi parts
  • do not query again about closing unsaved window when cancel was pressed
  • do not display property editor for !design mode even if part's X-Kexi-PropertyEditorAlwaysVisibleInDesignMode property is true
  • property editor pane now is displayed when user clicks "new table" action (there's no property set yet, but we want to display the pane in advance)
  • display property editor after entering into the design view directly
  • tabbar: "Project" tab is active by default
  • fix placement of the statusbar

Table View

  • fixed offset while painting after horizontal scrolling
  • fixed possible crash when scrolling vertically within a limited viewport
  • delay the 1st call to 'ensure cell visible' routine to avoid invalid vertical scroll position on table view creation
  • use QRubberBand instead of painting with XOR in the drag indication
  • fixed drag&drop items as table rows for Qt 4 (used e.g. in the Query Designer)
  • fixed crash on mouse move in "what's this mode" over the table view: when "column under mouse" is -1
  • clicking vertical header changes current row
  • mouse move over vertival header updates table view row highlighting
  • fixed the table view's vertical header paint routine; moreover, the icons are now displayed using the current foreground color
  • Use QToolTip for displaying tooltip with "Row: ..." information for the vertical slider


  • ported Kexi*Formatter classes, reenabled their use in KexiTableView and forms; this fixes entering of the first character in table view cells
  • set "word wrap" by default in kexi editors (e.g. used in the SQL editor)
  • Property Pane: fixed layout, refactored object info label as KexiPropertyPaneViewBase for use in custom tabs: KexiPropertyEditorView, KexiDataSourcePage
  • small tool button: fix width for the Windows style and substyles
  • Project Navigator: add a popup menu to the group items, with "Create new" action
  • KexiCustomPropertyFactory ported to KoProperty2

Database Support Library (KexiDB)

  • Oracle driver (functional, alpha stage)
  • ODBC driver/wrapper (basic functionality, alpha stage)
  • Connection::objectIds() and Connection::objectNames() now return results sorted by IDs
  • Connection::objectIds() now works as expected for object type == KexiDB::AnyObjectType
  • MySQL driver: fixed problem with creating a new database when the name contains uppercase characters (MySQL's "SHOW DATABASES LIKE .." does not work unless we convert the argument to lowecase.
  • use QString::arg() and escapeIdentifier() for building statements (security..)

Property Editor

  • completely rewritten as KoProperty2, uses Qt 4's model/view framework
  • added kDebug() stream operators for Property and Set
  • added Set::AlphabeticalByName option for Set::Iterator::setOrder()
  • removed error-prone Property::operator bool() const
  • added ExpandChildItems option added to EditorView::SetOptions, if true, child property items are expanded
  • added Set::PropertySelector::clone() so PropertySelectors can be used via const reference
  • added uint Set::count(const PropertySelector& selector) const
  • added bool Set::hasVisibleProperties() const
  • added bool Set::hasProperties(const PropertySelector& selector) const
  • paint background and alter pen color for selected items before ValuePainterInterface is used for painting
  • better handling of mouse clicks on items
  • font editor now displays font sample and font name
  • simpified code of font and pixmap editors
  • fix style of up/down buttons of spin boxes
  • added subproperties for QSizePolicy editor
  • no need to update subproperty values in *ComposedProperty ctors, because Property::setValue() is called in Property ctor anyway what in turn calls ComposedProperty::setValue()
  • improved boolean editor's painting
  • improved position of spin box arrows and style
  • font face/size now follows the view's font in editors
  • added convenient method QVariant Set::propertyValue(const QByteArray &name, const QVariant& defaultValue = QVariant())
  • properties are kept in order of insertion
  • made one or two methods const, and inline
  • added Set::Iterator::setOrder(Order order) so alphabetical order is also available
  • 'sorting key' attribute removed from Property
  • unset the current property set (that is about to be deleted) from the editor (fixes possible crash)
  • do not display invisible properties (Property::isVisible()==false)
  • removed obsolete widget.{h|cpp}
  • added overloaded ctor of Set::Iterator accepting functor
  • removed unnecessary koproperty{warn|dbg} macros as we use own KDE_DEFAULT_DEBUG_AREA
  • added Set::PropertySelector for easy iterating over selected properties
  • Set is now based on QHash<QByteArray, Property*>
  • Set::Iterator is now based on QHash<QByteArray, Property*>::ConstIterator, not on an ascii dict iterator from Qt3
  • optimized removing properties from the set and thus destructing sets
  • pixmap editor ported
  • int spin box editor now handles uint type as well
  • rect and size types: width and height properties are now of type uint
  • custom property API replaced with 'composed'; implementation of subproperties moved to factory itself (size/rect/point types already ported to this API)
  • propertytest app: added '-property' option for testing of a single property type
  • drawing gray grid lines and altering style sheets for grids moved to a common routine
  • 3-state bool editor properly works and is painted
  • fixed painting recently implemented editors for composed types (rect, point, size)
  • editor widgets ported to the new API: point, int, double, cursor
  • combo editor: added possibility of displaying icons
  • cursor editor displays icons
  • factories refactored using convenient interfaces
  • editor widgets ported to the new API: string, rect, size, combo, bool
  • improvements in the model and view classes
  • 'revert to defaults' works
  • line edit now uses KLineEdit and has clear button enabled
  • added tooltip for 'revert to defaults' button
    • EditorDataModel: use buddy() so we can show editor widget even when 1st column's cell was clicked
    • EditorView: test StringEdit editor and a test factory created
    • ItemDelegate: paint full-line borders, like in Designer and many other propeditors (there's no way to paint [+] without branch lines in Qt4's QStyle anyway);
  • modified properties are displayed in bold
  • 'revert to defaults' button reintroduced
  • parts of Editor class API ported to EditorView
  • libkoproperty 1 & 2 moved to kexi source code directory

Form Designer

  • widget resizing now creates undoable command
  • property values (x, y, w, h) are visually updated on widget resizing using handles
    • even if the properties are sorted alphabetically
  • make some more methods const
  • Property Editor: do not show properties that are nonreadable or nonwritable
  • Property Editor: do not even create advanced properties
  • Property Editor: do not create top-level properties that are displayed as subproperties, e.g. "x" which is already available as "geometry.x" (this is performed by skipping nonwritable properties)
  • "name" property replaced with compatible with Qt 4 "objectName"
  • "objectName" is still stored/loaded as "name" for backward compatibility
  • advanced properties renamed in Qt 4: "accel" -> "shortcut", "icon" -> "windowIcon", "iconText" -> "windowIconText", "caption" -> "windowTitle"
  • new advanced properties in Qt 4: "accessibleDescription", "accessibleName", "autoFillBackground", "contextMenuPolicy", "locale", "statusTip", "windowModality", "documentTitle"
  • line edit's "echoMode" property replaced with KDE's "passwordMode"
  • translations for new properties, e.g. "squeezedTextEnabled"
  • new properties of QWidgets: "styleSheet", "whatsThis", "toolTip", "layoutDirection", "iconSize"
  • widgets: replace Q_OVERRIDE with Q_PROPERTY, plus appropriate changes in signatures;leave DESIGNABLE only if it is false bacuse DESIGNABLE is true by default
  • fix initialization of forms in data view (possible crash)
  • fixed misbehaviour when clicking another widget item on the widget toolbar
  • properties are sorted alphabetically, at least for now
  • right-click cancels widget inserting mode
  • fixed tab/backtab handling
  • highlighting icons on mouse-over or on focusing (e.g. for buttons in Oxygen style) has been disabled in design mode (by adjusting QStyleOptions)
  • data view mode started to work
  • don't select already selected widget again
  • disable resizing resize handles using anything but left mouse button
  • activating "edit_pointer" action aborts "widget inserting" mode
  • fix selecting multiple using rectangular areas
  • fix positions of multiple widgets pasted from clipboard position: subtracting the original offset and adding the new one
  • show properties for form widgets (that was broken by mistake)
  • we are sharing the same KoProperty::Set object so use propertySetReloaded() instead of propertySetSwitched(), otherwise the property editor would not refresh
  • context menu appears at proper position also when executed for child widgets
  • resize handles are properly displayed again
  • widgets inserted with single click have size aligned to grid if necessary
  • fixed inserting widgets by specifying the geometry using mouse
  • fix drawing rectangle while inserting widgets by specifying the geometry
  • selection rectangle is now painted over widgets too
  • only minimal needed region is repainted when selection/insertion rectangle changes
  • do not align selection rectangle to grid
  • the above allows to switch back to the edit_pointer toggle action after inserting a new widget
  • fixed copy/paste for widgets, including position of the duplicated widget
  • fixed painting of the grid when scrolling vertically
  • optimized painting grid: only required rectangle is painted; this makes moving or resizing widgets smoother
  • tab widgets can be dragged by clicking on the container
  • QStackedWidget replaces QWidgetStack in a few more places in the code
  • added temporarily hardcoded "Form Design" tab in the main toolbar
  • inserting, selecting, moving andresizing form widets works
  • now at least empty form appears again
  • context menu: avoid displaying it twice; fix crash
  • Form Designer's source code refactoring
    • First phase of Kexi Forms Module refactoring. The main reason is to simplify the codebase and prepare it to future enchancements like subforms, reports integration, and tabbed main window design.
    • Detailed reasons for refactoring:
      • The process of instantiating a form (the Form class) is very complicated now what makes it very hard to properly implement subforms
      • The code full of interdependencies and thus is fragile when adding new functionality or fixing bugs
      • The FormManager class centralizes a number of operations that shall belong to Form itself
      • The naming of methods and classes can be improved, e.g. Form -> FormController
      • The ObjectTree* classes introduce redundancy as we already have QWidget hierarchy, and extensible property system; this complicates the code
      • See Also: http://wiki.koffice.org/index.php?title=Kexi/Porting#Forms_Refactoring
  • removed most of Qt 3 deps
  • paint grid and selection rectangle using alpha blending
  • use QRubberBand for displaying selection (and soon: insertion?) rectangles

Report Designer

  • Graphical Report designer introduced
  • Scripting support for JavaScript, Python, Ruby any other language supported by Kross
    • Events
      • For Reports: OnOpen, OnNewPage, OnComplete
      • For Sections: OnRender
  • Widgets: Label, Field, Text, Line, Images (static, dynamic), Checkbox, Barcode (3of9, 3of9+, 128, upc-a, upc-e, ean13, ean8 type), Charts with linked child/master fields

This page was last edited on 15 December 2010, at 18:48. Content is available under Creative Commons License SA 4.0 unless otherwise noted.