Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

The current roadmap (TODO's and plans)

Development roadmap

---------------------------------
ParaGUI unstable development tree
BEWARE! MAY CONTAIN NUTS
---------------------------------

----------------------
ROADMAP LEADING TO 1.2
----------------------

1.1.5 - signals handled by libsigc++
1.1.6 - API cleanup (all binary incompatible changes allowed)
1.1.7 - Performance tuning / more API cleanups
1.1.8 - unify constructors (e.g.: PG_Widget(PG_Widget* parent, const PG_Rect& rect))
        needed for factory. redesign of event-handling.
1.1.9 - merge object factory from paragui2
1.1.10 - merge and rework XML layoutloader
1.1.? - i'll consult my magic orb

If you want to take part in the development process - drop me a few lines or
take a look into "TODO".


----------------------------
Whats new in ParaGUI 1.1.7 ?
----------------------------

- optimized (software)cursor drawing
- removed obsoleted PG_Widget::[Move|Size]Window methods
- added custom itemheight to PG_DropDown::AddItem()
- dynamic resizing of listbox height in PG_DropDown
- disabled alpha for application background
- optimized PG_RectList
- added docs
- major rewrite of PG_WidgetList (new class PG_ScrollArea)
- fixed many widget child-handling bugs
- the new design should simply do it *right*
- removed obsolete PG_WidgetListEx class
- reworked nearly all class constructors
- splitted PG_WidgetList in PG_ScrollWidget / PG_WidgetList
- PG_RichEdit is now inherited from PG_ScrollWidget
- PG_ScrollBar / PG_Slider cleanup
- applied patches from Sebastian:
  made AddWidget() / AddItem() obsolete (see roadmap for more info)
  added param 'bool bRecursive' to PG_Widget::SetTransparency (set to false by default)
  added PG_Button::SetTransparency(Uint8 t, bool bRecursive) to work properly
  when a parent widget sets transparency recursively
  improved graphical update of software cursor a bit by minimizing rect to be updated
  merged multiple calls to SDL_UpdateRects to improve performance 
  (see SDL reference for more info)
  added PG_DropDown::GetIndent()
  added PG_Label::GetIndent()
  added PG_ListBox::GetIndent()
  fixed PG_ListBox::GetSelectedItems() (sorry, my fault :))
  fixed: sometimes PG_ListBox items were drawn although parent was not visible
  removed unnecessary BringToFront() in PG_DropDown::handleButtonClick()
  improved graphical update in PG_ListBox::SelectItem()
  added 24 bpp support for fonts (thanks to Steve McCrea!)
  fixed paratest.cpp VC.NET warnings
  made some changes to paratest.cpp to make use of PG_Button::SetTransparency()
  and the new way of adding items to lists
  made some minor cleanups
  fixed VC complaint concerning PG_Application::GetScreen()
  added PG_ListBox::SetAlignment() / GetAlignment()
  added PG_DropDown::SetAlignment() / GetAlignment()
  added PG_Window::GetIcon()
  modified PG_Application::SetCaption() to use ParaGUI's SetIcon() insteadof SDL's
  fixed a potential crash occuring when having only one widget in a PG_RectList
  made PG_ListBox / PG_DropDown::SetIndent() work before adding items
  added a simple mouse wheel handling for PG_ListBox and PG_DropDown
  made PG_Widget's destructor call RemoveFromWidgetList() only if widget has no parent
  added "break"s to PG_Window::handleButtonClick()
  connected a slider's sigSlideEnd signal in paratest.cpp
  made use of new SetAlignment() method in paratest.cpp
- applied patches from Ulf Lorenz
  documented pgsurfacecache.h
  remove obsolete code from drawline.cpp


----------------------------
Whats new in ParaGUI 1.1.6 ?
----------------------------

- new PG_Color class unifying SDL_Color/Uint32/R,G,B
- added signal "sigTimer" to PG_TimerObject
- added new PG_Point class
- cleanup of PG_Button SetIcon, SetIcon2
- moved PG_CURSORMODE stuff to PG_Application
- moved KeyEvent Actions to PG_Widget
- obsoleted paragui_types.h
- move PG_TA_xxx to PG_Label::TextAlign
- removed all the SWIG crap (need to find a better way)
- moved WF_WINDOWFLAGS into PG_Window class
- moved PG_SB_xxx flags to PG_ScrollBar::ScrollDirection
- fixed SigC::Object clashes for multiple class inheritances
  (inspired by Ulf)
- moved constant widget id's into the corresponding classes
- moved PG_OPEN_MODE into PG_FileArchive (now Mode)
- fixed potential glitch in PG_SurfaceCache::Add(...)
- applied patches from Ulf Lorenz:
  added a few comments to pgapplication.h
  removed obsolete function calls from pgapplication.cpp
  added param comment for PG_Application::RedrawBackground()
  documented PG_Application::PrintVideoTest()
  in PG_Application::Shutdown calling DeleteBackground() for freeing
  PG_Application::DeleteBackground(): setting my_background to 0
  commented PG_Application::SetBulkMode()
  PG_LogConsole::LogVa(): removed useless function call
  PG_LogConsole::Done():  function now deletes PG_LogWindow
  added comments to pglog.h
- applied patches from "H. C." :))
  Win32 support. Requires VisualC.NET or GCC
  commented new background modes
  updated layout loader to handle new background modes
  changing the background results in redrawing the screen properly
  fixed disabling background
  PG_Draw::CreateRGBSurface() will check for invalid surface first before doing 
  any work on it
  replaced some Redraw()s with Update()s
  disabling PG_LineEdit removes edit cursor
  fixed handling keys like '@' in PG_LineEdit
  PG_PopupMenu::trackMenu() takes care of exceeding the screen's height
  removed unnecessary Show() in PG_PopupMenu::trackMenu()
  removed unnecessary my_has_gradient assignment in PG_ThemeWidget
  fixed PG_ThemeWidget::SetBackground(SDL_Surface*, ...)
  bring a PG_Window only to front if it isn't yet (removes an unnecessarycall to Show())
  added proper mouse wheel handling to PG_Sliders in paratest.cpp
- major performance improvements after "cachegrinding"
- more coming up


----------------------------
Whats new in ParaGUI 1.1.5 ?
----------------------------

- the version. ok it's the 1.0.4 tree with some binary incompatible
  changes. -> 1.1.5
- new background mode 9TILE
- no more SendMessage (ok. there are still 1 or 2)
  using libsigc++ instead.
- new sigXXX signal handlers
- dynamic loading of SDL_image
- performance improvements for complex layouts
- silent mode development


----------------------------
Whats new in ParaGUI 1.0.4 ?
----------------------------

- fixed a stupid PG_Window bug (buttons not shown correctly)
- made std:: the default workspace -> removed all std:: prefixes
- fixed a bug in showing "hidden" child widgets
- fixed a clipping bug in PG_ColumnItem
- Win32 (VC++) build fixes for physfs
- GNU build fixes (test dir), "make distcheck" passes now
- PG_Widget::SetSizeByText changes (Thanks H.C. <sebh@gmx.de>)
- added PG_RadioButton::SetFontColor methods (Thanks H.C. <sebh@gmx.de>)
- fixed PG_WidgetList::Remove(All) methods
  (Thanks Ivan Stankovic <pokemon@fly.srk.fer.hr>)
- new DevC++ workspaces (DevC++ >= 4.9.7.0)
- fixed a bug in PG_MessageObject::PumpIntoEventQueue(..)
  MOUSEMOTIONEVENT don't need to be passed to ALL objects
- added a method to PG_Application to clear and delete the background 
  (void DeleteBackground()) (Thanks H.C. <sebh@gmx.de>)
- fixed a potential memory leak in PG_Application resulting from changing
  non-scaled backgrounds (Thanks H.C. <sebh@gmx.de>)
- added a method to PG_RichEdit to set the default alignment (void
  SetAutoVerticalResize(...)) (Thanks H.C. <sebh@gmx.de>)
- added a method to PG_RichEdit to activate / deactivate auto vertical
  resize (void SetAlignment(...)) (Thanks H.C. <sebh@gmx.de>)
- SetIcon(const char* filename), SetIcon(SDL_Surface* icon) for 
  PG_Window's title bar (H.C. <sebh@gmx.de>)
- another wrapper function for PG_Widget::my_internaldata->quitmodal
  which allows one to set it to false (H.C. <sebh@gmx.de>)
- removed unnecessary Redraw() call in PG_RadioButton::SetText(...)
  (H.C. <sebh@gmx.de>)
- fixed a bug in the message-pump caused by objects be deleted and
  still having pending messages for it. (Thanks Michael Bartl)
- Added new fonts. Now using the open Bitstream Vera fonts.
- convert theme images automatically to screen format (may break things)
- added new PG_FileArchive::LoadSurface method with an option to
  specify the surface colorkey (Thanks Keith)
- added PG_Application::FlushEventQueue method
- merged patch from Steffen Blume <abszisse@web.de>
  Select[First,Next,Prev]Item for PG_DropDown
- fixed several bug in PG_WidgetList
  Thanks Alexander Opitz <opitz@primacom.net>
- fixed the layoutloader (child widgets are now shown properly)
- fixed a bug in the PG_Application::GetWidget template
- fixed userdata handling in PG_Widget
  Thanks Mark Junker <mjscod@gmx.de>

----------------------------
Whats new in ParaGUI 1.0.3 ?
----------------------------

- made PhysFS optional (like expat)
- autoconf / automake fixes
- fixed a problem in the destructor of PG_TimerObject
- added Ruby bindings
- added support for DevC++
- fixed wrong linebreaks in PG_RichEdit
- added overloaded functions for PG_Application::GetWidget<WidgetType>
- fixed autoconf macro to build nicely on Midori

----------------------------
Whats new in ParaGUI 1.0.2 ?
----------------------------

- Fixed a bug in DrawLineH, DrawLineV
  introduced in 1.0.1
- updated PhysFS to version 0.1.5
- removed unneccessary mutex locks while
  message processing
- fixed a crash in PG_ListBox when deleting an
  item in the event handler
- fixed Show()/Hide() on child widgets
- added functions returning vectors of strings instead of
  char** to PG_FileArchive
  Thanks Andrew Ford <andrewhford@yahoo.com>
- added PG_TimerObject
- added a switch to disable dirty widget updates
  globally (PG_Application::DisableDirtyUpdates(bool))
- GCC 3.1 compilation fixes 
  Thanks Guillaume Cottenceau <gc@mandrakesoft.com>
- added functions to add callback handlers to existing menu items
  Thanks John Rainey <John.Rainey@symmetron.com>
- added missing DECLSPEC to pgwidgetlistex.h
  Thanks Andrew Ford <andrewhford@yahoo.com>
- added CodeWarrior and MacOS support
  Thanks Keith Swyer <ksswyer@adventus.com>
- added wildcard matching for PG_FileArchive::GetFileList
- added PG_FileArchive::OpenFileRWops
- added PG_RadioButton:SetAlignment
- missing DECLSPEC added to pgfont.h
- added surface locking for direct pixel access rendering
  (text, gradient).
- added new messagetype to process XML layout tags
  from the <head> section (MSG_XMLTAG).
- fixed a clipping bug in PG_Widget::Hide() with simple backgrounds


----------------------------
Whats new in ParaGUI 1.0.1 ?
----------------------------

- Fixed permissions on zipped theme files
- 8bit surface fixes
- Enabling/Disabling of symlinks
- fixed a potential crash in PG_ListBox (SelectItem(NULL))
- PG_Button: Added Get/SetBlendLevel() functions
- SetBackground colorkey fixes
- Borland C++ Builder fixes
- remerge of expat (optional)
- optimized DrawHLine, DrawVLine
- fixed a widgetlist scrolling bug
- fixed a window-resize bug
- cached surfaces are generated in the screen format


--------------------------------------
Whats new in ParaGUI 1.0 RC1 (Beta3) ?
--------------------------------------

Bug fixes, bug fixes, ... :))
Cleaned up the font interface.
Some performance tweaks (see PG_Widget::SetDirtyUpdate()).
added PG_DataContainer to hold binary data.
added Python support (./configure --enable-python, refer to
the docs for a detailed description of the configuration
options )


--------------------------------------
Whats new in ParaGUI 1.0 RC0 (Beta2) ?
--------------------------------------

The really last thing i had to change was the internal
structure of the library.
The whole arrangement was also quite a mess.

Now the lib is separated into these main parts:

draw - all drawing and surface stuff
fonts - font handling and rendering
core - basic things like message handling, app class, ...
themes - the theme loader
widgets - all widget classes

I also cleaned up the header files.
Now there are only headers in the include dir that are
needed by client applications.

pgdrawobject.h has been removed - use pgdraw.h

There are also some compatiblity macros in pgdraw.h that
allow usage of some old style functions. e.g.:

#define PG_DrawLine PG_Draw::DrawLine



--------------------------------
Whats new in ParaGUI 1.0 Beta1 ?
--------------------------------

The widget system in the prior versions was quite a mess.
Now i decided to clean up the whole system and make it
more *defined*.

Due to this there are some changes in widget creation.
The following rules apply:

Now there are 2 basic widget types:

PG_Widget:
An unthemed widget that can have an internal drawing surface
or not.

PG_ThemeWidget:
A themed widget (loads it's style from the theme definition)
that can have an internal drawing surface or not.


Widgets with drawing surfaces:
-----------------------------

The  content is drawn into the surface and blitted to the
screen.

Construction with internal surface:
PG_Widget(PG_Widget* parent, const PG_Rect& rect, true);
PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect, true);

The param "true" indicates the creation of the drawing surfaces.

Redrawing & Blitting:

Redraw(bool doUpdate);
This function redraws the widget (by calling eventDraw()).
And calls Update(true) if doUpdate = true.

Update(bool doBlit);
This calls Blit() and updates the screen.

Blit();
This function blits the widget surface to the screen and
calls eventBlit() that can be used for custom blit behaviour.



Widget without drawing surfaces:
--------------------------------

The content of the widget is directly blitted to the screen.

Construction:
PG_Widget(PG_Widget* parent, const PG_Rect& rect);
PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect);

Blitting:

Update(bool doBlit);
This calls Blit() and updates the screen.

Blit();
This function blits the widget content directly to the
screen by calling eventBlit().


I hope this clarifies the widget behaviour stuff.
Please contact me if you have further suggestions and
additions.

For backward compatibility the *old* widgettypes
(PG_GradientWidget, PG_StaticFrame) still can be used but
I definitely wouldn't suggest this. Please try to port your
application to the new widgetclasses.

Porting should be quite easy by replacing PG_GradientWidget,
PG_StaticFrame with PG_ThemeWidget.


I hope this clarifies the widget behaviour stuff.
Please contact me if you have further suggestions and
additions.

Alexander Pipelka
pipelka@teleweb.at

Outstanding issues

Things anyone could adopt:

REDESIGN OF EVENT/MOUSE HANDLING
--------------------------------

There are some major problems in the event/mouse handling code.
Events for eventLeaveMouse and eventEnterMouse aren't handled the
right way. I think it's the oldest part in ParaGUI and it seems it
needs some redesign. A code sample can be found in the "test" 
directory (CVS or source-tarball >= 1.1.7). Take a look at 
"eventleavebug.cpp".


CLEANUP/REWRITE OF PG_COLORS
----------------------------

pgcolors.[h|cpp] are autogenerated from the "make_colors.pike" script
in the "bin" directory. I never really got acquainted with the pike
scripting language. The script should be rewritten to use a more
"common" language (e.g. Perl, Python, ...),


CONSTRUCTOR CLEANUP
-------------------

I would like to make ParaGUI "object factory" compliant. To achieve this
any class *must* have an identical constructor:

AnyPG_Class(PG_Widget* parent, const PG_Rect& r)

or even better:

AnyPG_Class(PG_Widget* parent, const PG_Rect& r = PG_Rect(0,0,0,0))

it's allowed to have more params in the constructor but these also must
have default values.

To make the change not to radical the current constructors can coexist
with the *new* constructors.


ADDING ITEMS TO (WIDGET)LISTS WITHOUT ADDWIDGET/ADDITEM
-------------------------------------------------------

The current WidgetList/ListBox implementation isn't very clean.
It should work this way:

PG_ListBox mylist(NULL, PG_Rect(...));
PG_ListBoxItem item1(&mylist, ...);
PG_ListBoxItem item2(&mylist, ...);
PG_ListBoxItem item3(&mylist, ...);
PG_ListBoxItem item4(&mylist, ...);
mylist.Show();

Currently you need to call mylist.AddItem(..) for any item to be
added.
PG_WidgetList should (must) work the same way.


The ParaGUI Project - Alexander Pipelka