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. merge object factory from paragui2. 1.1.9 - redesign of event-handling. unify all widget constructors 1.1.10 - bug fixing and API reality check 1.1.11 - merge and rework XML layoutloader 1.1.12 - bug fixing and API freeze 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.8 ? ---------------------------- - added PG_Factory (yeah) - started PG_MessageObject cleanup (move code to PG_Application) - added GetTitlebarHeight() / SetTitlebarHeight to PG_Window - renamed SetColorTitlebar to SetTitlebarColor - marked PG_MessageBox::WaitForClick obsolete - new RunModal() / SetModalStatus(int) methods - PG_ScrollArea::ScrollToWidget(..) now honours area-bounds - removed "using namespace std;" from header files - removed "using namespace std;" from all sources - removed Get / SetApplicationPath from PG_Application - only fade-in invisible widgets - bumped version to 1.1.8 - fixed "flickering" of hidden widgets - fixed infinite loops in PG_MultiLineEdit - added PG_Button::SetIconIndent(Uint16) - fixed non-unicode rendering of german "umlaut" - fixed alignment of text (PG_Button) - removed PG_TimerID. Please use PG_TimeObject::ID now - fixed detection of libSDL_image*.so for Debian - applied patches from Sebastian: - made PG_Application::RunEventLoop() virtual to make subclassing easier - made PG_Application::my_quitEventLoop protected to make subclassing easier - made PG_LineEdit signals available to PG_DropDown - made PG_DropDown::handleButtonClick() virtual to make subclassing easier - made PG_MessageBox::handleButton() virtual to make subclassing easier - made PG_RadioButton::handleButtonClick() virtual to make subclassing easier - removed PG_Rect::PG_Rect() and added default params to PG_Rect::PG_Rect(x,y,w,h) instead - made PG_Scrollbar::handleButtonClick virtual to make subclassing easier - divided PG_ScrollWidget::IDWIDGETLIST_SCROLL into IDWIDGETLIST_VSCROLL and IDWIDGETLIST_HSCROLL - made PG_SpinnerBox::handleButtonClick() virtual to make subclassing easier - made PG_SpinnerBox::handleEditEnd() virtual to make subclassing easier - added PG_Window::GetTitlebarColor() - made PG_Window::handleButtonClick() virtual to make subclassing easier - fixed some compilation errors with VC.NET occurred due to missing namespace access - reworked PG_Button::SetSizeByText() - reworked PG_Label::SetSizeByText() - reworked PG_Button::SetSizeByText() - reworked PG_RadioButton::SetSizeByText() - made PG_RichEdit::CompleteLines() call CheckForScrollBars() only if my_AutoVerticalResize is false - added mouse wheel support for PG_RadioButton - reset PG_RichEdit's scrollarea height to 0 when adding new text - added SetSizeByText() example to paratest.cpp - a bit of cleanup - added some small doc fixes - added signals to PG_MessageObject - added PG_LogConsole::SetMaxLogLines() - PG_RichEdit: replaced SetAutoVerticalResize() with SetAutoResize(bool bHorizontal = true, bool bVertical = true) - PG_RichEdit: changed tabSize parameter to Uint16 - PG_RichEdit: fixed infinite loop bug which occured when a word was too big to be displayed in a row - PG_RichEdit: improved an algorithm by adding a 'break' - PG_RichEdit: added SetLineWidth() - PG_ScrollWidget: added SetShiftOnRemove(), GetScrollPosX() and GetScrollPosY() - added PG_Window::SetMovable() - made PG_Widget::eventMouseLeave() call its parent's eventMouseLeave() only if cursor actually leaves parent area too - PG_SpinnerBox: removed some virtual modifiers to fix a potential crash - theme_priv.h: added some namespace std references to make VC happy - removed some unnecessary code - made PG_ScrollArea::DeleteAll call area change signals - added some doc updates - PG_Image: may choose drawing mode now - PG_LineEdit: made SetCursorPos() virtual for easier subclassing (-> e. g. PG_MultiLineEdit) - PG_RadioButton: added GetFirstOfGroup() and GetNextOfGroup() - PG_RichEdit: fixed resizing - PG_ScrollArea: * added method to have parent widget resized automatically (SetResizeParent(bool bRemove, bool bAdd)) * moved bounds checking from ScrollToWidget() to ScrollTo() - PG_ScrollWidget: * added SetAutoResize(bool bRemove, bool bAdd) * made it update its scrollbars properly when calling ScrollToWidget() - PG_DropDown: resize automatically by default - PG_Widget: * added param 'bRecursive' to SetFontColor() * added EnableReceiver(bool enable, bool bRecursive) - paraconfig_win32.h: renamed macro UNICODE_ENABLED to ENABLE_UNICODE - disabled warning flood for VC++ 7.1 concerning YChar's exception implementation - added DECLSPEC to YChar's and YString's class declarations - added a fix from Jeremie (concerning an END key bug) for his PG_MultiLineEdit (thanks Jeremie!) - fixes for PG_MultiLineEdit (it no longer crashes) - added PG_DropDown::GetFirstInList() - applied patches from Ulf Lorenz: - commented PG_Draw::DrawTile - commented PG_Draw::DrawGradient - PG_Rect: simplified some if-clauses - surface.cpp: tiny check added, another one removed - surface.cpp: preserved clip rect - PG_Widget::FadeOut: lock screen-surface before blitting - PG_Widget::RestoreBackground: properly restore screen-cliprect - PG_Widget::eventBlit: proper screen locking - PG_Widget::Draw[H|V]Line: proper screen locking - PG_Widget: some small comments, removed an obsolete function - PG_Button::eventMouseLeave: fixed a critical bug where you could untoggle a button by clicking on it, moving the mouse away and releasing the mouse which would untoggle the button but not release a click event. - PG_Button::SetBorderSize: fixed a small bug where one bordersize would be set for all three cases - PG_Button::eventBlit: screen is now locked removed some obsolete lines of code, added comments - applied patches from Fred Ollinger: - many many documentation updates - added widget-screenshots - new beginners-tutorial - applied the great unicode patch from Mohammed Yousif <mhdyousif@gmx.net> ---------------------------- 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 - removed obsolete PG_MessageObject::WaitEvent() - removed obsolete PG_MessageObject::objectList (use widgetlist instead) - moved PG_MessageObject::TranslateNumPadKeys to PG_Application - removed GlMode stuff - moved PG_Application stuff from PG_MessageObject - 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
00001 --------------------------------- 00002 ParaGUI unstable development tree 00003 BEWARE! MAY CONTAIN NUTS 00004 --------------------------------- 00005 00006 ---------------------- 00007 ROADMAP LEADING TO 1.2 00008 ---------------------- 00009 00010 1.1.5 - signals handled by libsigc++ 00011 1.1.6 - API cleanup (all binary incompatible changes allowed) 00012 1.1.7 - Performance tuning / more API cleanups 00013 1.1.8 - unify constructors (e.g.: PG_Widget(PG_Widget* parent, const PG_Rect& rect)) 00014 needed for factory. merge object factory from paragui2. 00015 1.1.9 - redesign of event-handling. unify all widget constructors 00016 1.1.10 - bug fixing and API reality check 00017 1.1.11 - merge and rework XML layoutloader 00018 1.1.12 - bug fixing and API freeze 00019 1.1.? - i'll consult my magic orb 00020 00021 If you want to take part in the development process - drop me a few lines or 00022 take a look into "TODO". 00023 00024 00025 ---------------------------- 00026 Whats new in ParaGUI 1.1.8 ? 00027 ---------------------------- 00028 00029 - added PG_Factory (yeah) 00030 - started PG_MessageObject cleanup (move code to PG_Application) 00031 - added GetTitlebarHeight() / SetTitlebarHeight to PG_Window 00032 - renamed SetColorTitlebar to SetTitlebarColor 00033 - marked PG_MessageBox::WaitForClick obsolete 00034 - new RunModal() / SetModalStatus(int) methods 00035 - PG_ScrollArea::ScrollToWidget(..) now honours area-bounds 00036 - removed "using namespace std;" from header files 00037 - removed "using namespace std;" from all sources 00038 - removed Get / SetApplicationPath from PG_Application 00039 - only fade-in invisible widgets 00040 - bumped version to 1.1.8 00041 - fixed "flickering" of hidden widgets 00042 - fixed infinite loops in PG_MultiLineEdit 00043 - added PG_Button::SetIconIndent(Uint16) 00044 - fixed non-unicode rendering of german "umlaut" 00045 - fixed alignment of text (PG_Button) 00046 - removed PG_TimerID. Please use PG_TimeObject::ID now 00047 - fixed detection of libSDL_image*.so for Debian 00048 00049 - applied patches from Sebastian: 00050 - made PG_Application::RunEventLoop() virtual to make subclassing easier 00051 - made PG_Application::my_quitEventLoop protected to make subclassing easier 00052 - made PG_LineEdit signals available to PG_DropDown 00053 - made PG_DropDown::handleButtonClick() virtual to make subclassing easier 00054 - made PG_MessageBox::handleButton() virtual to make subclassing easier 00055 - made PG_RadioButton::handleButtonClick() virtual to make subclassing easier 00056 - removed PG_Rect::PG_Rect() and added default params to PG_Rect::PG_Rect(x,y,w,h) instead 00057 - made PG_Scrollbar::handleButtonClick virtual to make subclassing easier 00058 - divided PG_ScrollWidget::IDWIDGETLIST_SCROLL into IDWIDGETLIST_VSCROLL and IDWIDGETLIST_HSCROLL 00059 - made PG_SpinnerBox::handleButtonClick() virtual to make subclassing easier 00060 - made PG_SpinnerBox::handleEditEnd() virtual to make subclassing easier 00061 - added PG_Window::GetTitlebarColor() 00062 - made PG_Window::handleButtonClick() virtual to make subclassing easier 00063 - fixed some compilation errors with VC.NET occurred due to missing namespace access 00064 - reworked PG_Button::SetSizeByText() 00065 - reworked PG_Label::SetSizeByText() 00066 - reworked PG_Button::SetSizeByText() 00067 - reworked PG_RadioButton::SetSizeByText() 00068 - made PG_RichEdit::CompleteLines() call CheckForScrollBars() only if my_AutoVerticalResize is false 00069 - added mouse wheel support for PG_RadioButton 00070 - reset PG_RichEdit's scrollarea height to 0 when adding new text 00071 - added SetSizeByText() example to paratest.cpp 00072 - a bit of cleanup 00073 - added some small doc fixes 00074 - added signals to PG_MessageObject 00075 - added PG_LogConsole::SetMaxLogLines() 00076 - PG_RichEdit: replaced SetAutoVerticalResize() with SetAutoResize(bool bHorizontal = true, bool bVertical = true) 00077 - PG_RichEdit: changed tabSize parameter to Uint16 00078 - PG_RichEdit: fixed infinite loop bug which occured when a word was too big to be displayed in a row 00079 - PG_RichEdit: improved an algorithm by adding a 'break' 00080 - PG_RichEdit: added SetLineWidth() 00081 - PG_ScrollWidget: added SetShiftOnRemove(), GetScrollPosX() and GetScrollPosY() 00082 - added PG_Window::SetMovable() 00083 - made PG_Widget::eventMouseLeave() call its parent's eventMouseLeave() only if cursor actually leaves parent area too 00084 - PG_SpinnerBox: removed some virtual modifiers to fix a potential crash 00085 - theme_priv.h: added some namespace std references to make VC happy 00086 - removed some unnecessary code 00087 - made PG_ScrollArea::DeleteAll call area change signals 00088 - added some doc updates 00089 - PG_Image: may choose drawing mode now 00090 - PG_LineEdit: made SetCursorPos() virtual for easier subclassing (-> e. g. 00091 PG_MultiLineEdit) 00092 - PG_RadioButton: added GetFirstOfGroup() and GetNextOfGroup() 00093 - PG_RichEdit: fixed resizing 00094 - PG_ScrollArea: 00095 * added method to have parent widget resized automatically 00096 (SetResizeParent(bool bRemove, bool bAdd)) 00097 * moved bounds checking from ScrollToWidget() to ScrollTo() 00098 - PG_ScrollWidget: 00099 * added SetAutoResize(bool bRemove, bool bAdd) 00100 * made it update its scrollbars properly when calling ScrollToWidget() 00101 - PG_DropDown: resize automatically by default 00102 - PG_Widget: 00103 * added param 'bRecursive' to SetFontColor() 00104 * added EnableReceiver(bool enable, bool bRecursive) 00105 - paraconfig_win32.h: renamed macro UNICODE_ENABLED to ENABLE_UNICODE 00106 - disabled warning flood for VC++ 7.1 concerning YChar's exception implementation 00107 - added DECLSPEC to YChar's and YString's class declarations 00108 - added a fix from Jeremie (concerning an END key bug) for his PG_MultiLineEdit (thanks Jeremie!) 00109 - fixes for PG_MultiLineEdit (it no longer crashes) 00110 - added PG_DropDown::GetFirstInList() 00111 00112 - applied patches from Ulf Lorenz: 00113 - commented PG_Draw::DrawTile 00114 - commented PG_Draw::DrawGradient 00115 - PG_Rect: simplified some if-clauses 00116 - surface.cpp: tiny check added, another one removed 00117 - surface.cpp: preserved clip rect 00118 - PG_Widget::FadeOut: lock screen-surface before blitting 00119 - PG_Widget::RestoreBackground: properly restore screen-cliprect 00120 - PG_Widget::eventBlit: proper screen locking 00121 - PG_Widget::Draw[H|V]Line: proper screen locking 00122 - PG_Widget: some small comments, removed an obsolete function 00123 - PG_Button::eventMouseLeave: fixed a critical bug where you could untoggle a button by clicking 00124 on it, moving the mouse away and releasing the mouse which would 00125 untoggle the button but not release a click event. 00126 - PG_Button::SetBorderSize: fixed a small bug where one bordersize would be set for all three cases 00127 - PG_Button::eventBlit: screen is now locked 00128 removed some obsolete lines of code, added comments 00129 00130 - applied patches from Fred Ollinger: 00131 - many many documentation updates 00132 - added widget-screenshots 00133 - new beginners-tutorial 00134 00135 - applied the great unicode patch from Mohammed Yousif <mhdyousif@gmx.net> 00136 00137 00138 ---------------------------- 00139 Whats new in ParaGUI 1.1.7 ? 00140 ---------------------------- 00141 00142 - optimized (software)cursor drawing 00143 - removed obsoleted PG_Widget::[Move|Size]Window methods 00144 - added custom itemheight to PG_DropDown::AddItem() 00145 - dynamic resizing of listbox height in PG_DropDown 00146 - disabled alpha for application background 00147 - optimized PG_RectList 00148 - added docs 00149 - major rewrite of PG_WidgetList (new class PG_ScrollArea) 00150 - fixed many widget child-handling bugs 00151 - the new design should simply do it *right* 00152 - removed obsolete PG_WidgetListEx class 00153 - reworked nearly all class constructors 00154 - splitted PG_WidgetList in PG_ScrollWidget / PG_WidgetList 00155 - PG_RichEdit is now inherited from PG_ScrollWidget 00156 - PG_ScrollBar / PG_Slider cleanup 00157 - removed obsolete PG_MessageObject::WaitEvent() 00158 - removed obsolete PG_MessageObject::objectList (use widgetlist instead) 00159 - moved PG_MessageObject::TranslateNumPadKeys to PG_Application 00160 - removed GlMode stuff 00161 - moved PG_Application stuff from PG_MessageObject 00162 - applied patches from Sebastian: 00163 made AddWidget() / AddItem() obsolete (see roadmap for more info) 00164 added param 'bool bRecursive' to PG_Widget::SetTransparency (set to false by default) 00165 added PG_Button::SetTransparency(Uint8 t, bool bRecursive) to work properly 00166 when a parent widget sets transparency recursively 00167 improved graphical update of software cursor a bit by minimizing rect to be updated 00168 merged multiple calls to SDL_UpdateRects to improve performance 00169 (see SDL reference for more info) 00170 added PG_DropDown::GetIndent() 00171 added PG_Label::GetIndent() 00172 added PG_ListBox::GetIndent() 00173 fixed PG_ListBox::GetSelectedItems() (sorry, my fault :)) 00174 fixed: sometimes PG_ListBox items were drawn although parent was not visible 00175 removed unnecessary BringToFront() in PG_DropDown::handleButtonClick() 00176 improved graphical update in PG_ListBox::SelectItem() 00177 added 24 bpp support for fonts (thanks to Steve McCrea!) 00178 fixed paratest.cpp VC.NET warnings 00179 made some changes to paratest.cpp to make use of PG_Button::SetTransparency() 00180 and the new way of adding items to lists 00181 made some minor cleanups 00182 fixed VC complaint concerning PG_Application::GetScreen() 00183 added PG_ListBox::SetAlignment() / GetAlignment() 00184 added PG_DropDown::SetAlignment() / GetAlignment() 00185 added PG_Window::GetIcon() 00186 modified PG_Application::SetCaption() to use ParaGUI's SetIcon() insteadof SDL's 00187 fixed a potential crash occuring when having only one widget in a PG_RectList 00188 made PG_ListBox / PG_DropDown::SetIndent() work before adding items 00189 added a simple mouse wheel handling for PG_ListBox and PG_DropDown 00190 made PG_Widget's destructor call RemoveFromWidgetList() only if widget has no parent 00191 added "break"s to PG_Window::handleButtonClick() 00192 connected a slider's sigSlideEnd signal in paratest.cpp 00193 made use of new SetAlignment() method in paratest.cpp 00194 - applied patches from Ulf Lorenz 00195 documented pgsurfacecache.h 00196 remove obsolete code from drawline.cpp 00197 00198 00199 ---------------------------- 00200 Whats new in ParaGUI 1.1.6 ? 00201 ---------------------------- 00202 00203 - new PG_Color class unifying SDL_Color/Uint32/R,G,B 00204 - added signal "sigTimer" to PG_TimerObject 00205 - added new PG_Point class 00206 - cleanup of PG_Button SetIcon, SetIcon2 00207 - moved PG_CURSORMODE stuff to PG_Application 00208 - moved KeyEvent Actions to PG_Widget 00209 - obsoleted paragui_types.h 00210 - move PG_TA_xxx to PG_Label::TextAlign 00211 - removed all the SWIG crap (need to find a better way) 00212 - moved WF_WINDOWFLAGS into PG_Window class 00213 - moved PG_SB_xxx flags to PG_ScrollBar::ScrollDirection 00214 - fixed SigC::Object clashes for multiple class inheritances 00215 (inspired by Ulf) 00216 - moved constant widget id's into the corresponding classes 00217 - moved PG_OPEN_MODE into PG_FileArchive (now Mode) 00218 - fixed potential glitch in PG_SurfaceCache::Add(...) 00219 - applied patches from Ulf Lorenz: 00220 added a few comments to pgapplication.h 00221 removed obsolete function calls from pgapplication.cpp 00222 added param comment for PG_Application::RedrawBackground() 00223 documented PG_Application::PrintVideoTest() 00224 in PG_Application::Shutdown calling DeleteBackground() for freeing 00225 PG_Application::DeleteBackground(): setting my_background to 0 00226 commented PG_Application::SetBulkMode() 00227 PG_LogConsole::LogVa(): removed useless function call 00228 PG_LogConsole::Done(): function now deletes PG_LogWindow 00229 added comments to pglog.h 00230 - applied patches from "H. C." :)) 00231 Win32 support. Requires VisualC.NET or GCC 00232 commented new background modes 00233 updated layout loader to handle new background modes 00234 changing the background results in redrawing the screen properly 00235 fixed disabling background 00236 PG_Draw::CreateRGBSurface() will check for invalid surface first before doing 00237 any work on it 00238 replaced some Redraw()s with Update()s 00239 disabling PG_LineEdit removes edit cursor 00240 fixed handling keys like '@' in PG_LineEdit 00241 PG_PopupMenu::trackMenu() takes care of exceeding the screen's height 00242 removed unnecessary Show() in PG_PopupMenu::trackMenu() 00243 removed unnecessary my_has_gradient assignment in PG_ThemeWidget 00244 fixed PG_ThemeWidget::SetBackground(SDL_Surface*, ...) 00245 bring a PG_Window only to front if it isn't yet (removes an unnecessarycall to Show()) 00246 added proper mouse wheel handling to PG_Sliders in paratest.cpp 00247 - major performance improvements after "cachegrinding" 00248 - more coming up 00249 00250 00251 ---------------------------- 00252 Whats new in ParaGUI 1.1.5 ? 00253 ---------------------------- 00254 00255 - the version. ok it's the 1.0.4 tree with some binary incompatible 00256 changes. -> 1.1.5 00257 - new background mode 9TILE 00258 - no more SendMessage (ok. there are still 1 or 2) 00259 using libsigc++ instead. 00260 - new sigXXX signal handlers 00261 - dynamic loading of SDL_image 00262 - performance improvements for complex layouts 00263 - silent mode development 00264 00265 00266 ---------------------------- 00267 Whats new in ParaGUI 1.0.4 ? 00268 ---------------------------- 00269 00270 - fixed a stupid PG_Window bug (buttons not shown correctly) 00271 - made std:: the default workspace -> removed all std:: prefixes 00272 - fixed a bug in showing "hidden" child widgets 00273 - fixed a clipping bug in PG_ColumnItem 00274 - Win32 (VC++) build fixes for physfs 00275 - GNU build fixes (test dir), "make distcheck" passes now 00276 - PG_Widget::SetSizeByText changes (Thanks H.C. <sebh@gmx.de>) 00277 - added PG_RadioButton::SetFontColor methods (Thanks H.C. <sebh@gmx.de>) 00278 - fixed PG_WidgetList::Remove(All) methods 00279 (Thanks Ivan Stankovic <pokemon@fly.srk.fer.hr>) 00280 - new DevC++ workspaces (DevC++ >= 4.9.7.0) 00281 - fixed a bug in PG_MessageObject::PumpIntoEventQueue(..) 00282 MOUSEMOTIONEVENT don't need to be passed to ALL objects 00283 - added a method to PG_Application to clear and delete the background 00284 (void DeleteBackground()) (Thanks H.C. <sebh@gmx.de>) 00285 - fixed a potential memory leak in PG_Application resulting from changing 00286 non-scaled backgrounds (Thanks H.C. <sebh@gmx.de>) 00287 - added a method to PG_RichEdit to set the default alignment (void 00288 SetAutoVerticalResize(...)) (Thanks H.C. <sebh@gmx.de>) 00289 - added a method to PG_RichEdit to activate / deactivate auto vertical 00290 resize (void SetAlignment(...)) (Thanks H.C. <sebh@gmx.de>) 00291 - SetIcon(const char* filename), SetIcon(SDL_Surface* icon) for 00292 PG_Window's title bar (H.C. <sebh@gmx.de>) 00293 - another wrapper function for PG_Widget::my_internaldata->quitmodal 00294 which allows one to set it to false (H.C. <sebh@gmx.de>) 00295 - removed unnecessary Redraw() call in PG_RadioButton::SetText(...) 00296 (H.C. <sebh@gmx.de>) 00297 - fixed a bug in the message-pump caused by objects be deleted and 00298 still having pending messages for it. (Thanks Michael Bartl) 00299 - Added new fonts. Now using the open Bitstream Vera fonts. 00300 - convert theme images automatically to screen format (may break things) 00301 - added new PG_FileArchive::LoadSurface method with an option to 00302 specify the surface colorkey (Thanks Keith) 00303 - added PG_Application::FlushEventQueue method 00304 - merged patch from Steffen Blume <abszisse@web.de> 00305 Select[First,Next,Prev]Item for PG_DropDown 00306 - fixed several bug in PG_WidgetList 00307 Thanks Alexander Opitz <opitz@primacom.net> 00308 - fixed the layoutloader (child widgets are now shown properly) 00309 - fixed a bug in the PG_Application::GetWidget template 00310 - fixed userdata handling in PG_Widget 00311 Thanks Mark Junker <mjscod@gmx.de> 00312 00313 ---------------------------- 00314 Whats new in ParaGUI 1.0.3 ? 00315 ---------------------------- 00316 00317 - made PhysFS optional (like expat) 00318 - autoconf / automake fixes 00319 - fixed a problem in the destructor of PG_TimerObject 00320 - added Ruby bindings 00321 - added support for DevC++ 00322 - fixed wrong linebreaks in PG_RichEdit 00323 - added overloaded functions for PG_Application::GetWidget<WidgetType> 00324 - fixed autoconf macro to build nicely on Midori 00325 00326 ---------------------------- 00327 Whats new in ParaGUI 1.0.2 ? 00328 ---------------------------- 00329 00330 - Fixed a bug in DrawLineH, DrawLineV 00331 introduced in 1.0.1 00332 - updated PhysFS to version 0.1.5 00333 - removed unneccessary mutex locks while 00334 message processing 00335 - fixed a crash in PG_ListBox when deleting an 00336 item in the event handler 00337 - fixed Show()/Hide() on child widgets 00338 - added functions returning vectors of strings instead of 00339 char** to PG_FileArchive 00340 Thanks Andrew Ford <andrewhford@yahoo.com> 00341 - added PG_TimerObject 00342 - added a switch to disable dirty widget updates 00343 globally (PG_Application::DisableDirtyUpdates(bool)) 00344 - GCC 3.1 compilation fixes 00345 Thanks Guillaume Cottenceau <gc@mandrakesoft.com> 00346 - added functions to add callback handlers to existing menu items 00347 Thanks John Rainey <John.Rainey@symmetron.com> 00348 - added missing DECLSPEC to pgwidgetlistex.h 00349 Thanks Andrew Ford <andrewhford@yahoo.com> 00350 - added CodeWarrior and MacOS support 00351 Thanks Keith Swyer <ksswyer@adventus.com> 00352 - added wildcard matching for PG_FileArchive::GetFileList 00353 - added PG_FileArchive::OpenFileRWops 00354 - added PG_RadioButton:SetAlignment 00355 - missing DECLSPEC added to pgfont.h 00356 - added surface locking for direct pixel access rendering 00357 (text, gradient). 00358 - added new messagetype to process XML layout tags 00359 from the <head> section (MSG_XMLTAG). 00360 - fixed a clipping bug in PG_Widget::Hide() with simple backgrounds 00361 00362 00363 ---------------------------- 00364 Whats new in ParaGUI 1.0.1 ? 00365 ---------------------------- 00366 00367 - Fixed permissions on zipped theme files 00368 - 8bit surface fixes 00369 - Enabling/Disabling of symlinks 00370 - fixed a potential crash in PG_ListBox (SelectItem(NULL)) 00371 - PG_Button: Added Get/SetBlendLevel() functions 00372 - SetBackground colorkey fixes 00373 - Borland C++ Builder fixes 00374 - remerge of expat (optional) 00375 - optimized DrawHLine, DrawVLine 00376 - fixed a widgetlist scrolling bug 00377 - fixed a window-resize bug 00378 - cached surfaces are generated in the screen format 00379 00380 00381 -------------------------------------- 00382 Whats new in ParaGUI 1.0 RC1 (Beta3) ? 00383 -------------------------------------- 00384 00385 Bug fixes, bug fixes, ... :)) 00386 Cleaned up the font interface. 00387 Some performance tweaks (see PG_Widget::SetDirtyUpdate()). 00388 added PG_DataContainer to hold binary data. 00389 added Python support (./configure --enable-python, refer to 00390 the docs for a detailed description of the configuration 00391 options ) 00392 00393 00394 -------------------------------------- 00395 Whats new in ParaGUI 1.0 RC0 (Beta2) ? 00396 -------------------------------------- 00397 00398 The really last thing i had to change was the internal 00399 structure of the library. 00400 The whole arrangement was also quite a mess. 00401 00402 Now the lib is separated into these main parts: 00403 00404 draw - all drawing and surface stuff 00405 fonts - font handling and rendering 00406 core - basic things like message handling, app class, ... 00407 themes - the theme loader 00408 widgets - all widget classes 00409 00410 I also cleaned up the header files. 00411 Now there are only headers in the include dir that are 00412 needed by client applications. 00413 00414 pgdrawobject.h has been removed - use pgdraw.h 00415 00416 There are also some compatiblity macros in pgdraw.h that 00417 allow usage of some old style functions. e.g.: 00418 00419 #define PG_DrawLine PG_Draw::DrawLine 00420 00421 00422 00423 -------------------------------- 00424 Whats new in ParaGUI 1.0 Beta1 ? 00425 -------------------------------- 00426 00427 The widget system in the prior versions was quite a mess. 00428 Now i decided to clean up the whole system and make it 00429 more *defined*. 00430 00431 Due to this there are some changes in widget creation. 00432 The following rules apply: 00433 00434 Now there are 2 basic widget types: 00435 00436 PG_Widget: 00437 An unthemed widget that can have an internal drawing surface 00438 or not. 00439 00440 PG_ThemeWidget: 00441 A themed widget (loads it's style from the theme definition) 00442 that can have an internal drawing surface or not. 00443 00444 00445 Widgets with drawing surfaces: 00446 ----------------------------- 00447 00448 The content is drawn into the surface and blitted to the 00449 screen. 00450 00451 Construction with internal surface: 00452 PG_Widget(PG_Widget* parent, const PG_Rect& rect, true); 00453 PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect, true); 00454 00455 The param "true" indicates the creation of the drawing surfaces. 00456 00457 Redrawing & Blitting: 00458 00459 Redraw(bool doUpdate); 00460 This function redraws the widget (by calling eventDraw()). 00461 And calls Update(true) if doUpdate = true. 00462 00463 Update(bool doBlit); 00464 This calls Blit() and updates the screen. 00465 00466 Blit(); 00467 This function blits the widget surface to the screen and 00468 calls eventBlit() that can be used for custom blit behaviour. 00469 00470 00471 00472 Widget without drawing surfaces: 00473 -------------------------------- 00474 00475 The content of the widget is directly blitted to the screen. 00476 00477 Construction: 00478 PG_Widget(PG_Widget* parent, const PG_Rect& rect); 00479 PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect); 00480 00481 Blitting: 00482 00483 Update(bool doBlit); 00484 This calls Blit() and updates the screen. 00485 00486 Blit(); 00487 This function blits the widget content directly to the 00488 screen by calling eventBlit(). 00489 00490 00491 I hope this clarifies the widget behaviour stuff. 00492 Please contact me if you have further suggestions and 00493 additions. 00494 00495 For backward compatibility the *old* widgettypes 00496 (PG_GradientWidget, PG_StaticFrame) still can be used but 00497 I definitely wouldn't suggest this. Please try to port your 00498 application to the new widgetclasses. 00499 00500 Porting should be quite easy by replacing PG_GradientWidget, 00501 PG_StaticFrame with PG_ThemeWidget. 00502 00503 00504 I hope this clarifies the widget behaviour stuff. 00505 Please contact me if you have further suggestions and 00506 additions. 00507 00508 Alexander Pipelka 00509 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.
00001 Things anyone could adopt: 00002 00003 REDESIGN OF EVENT/MOUSE HANDLING 00004 -------------------------------- 00005 00006 There are some major problems in the event/mouse handling code. 00007 Events for eventLeaveMouse and eventEnterMouse aren't handled the 00008 right way. I think it's the oldest part in ParaGUI and it seems it 00009 needs some redesign. A code sample can be found in the "test" 00010 directory (CVS or source-tarball >= 1.1.7). Take a look at 00011 "eventleavebug.cpp". 00012 00013 00014 CLEANUP/REWRITE OF PG_COLORS 00015 ---------------------------- 00016 00017 pgcolors.[h|cpp] are autogenerated from the "make_colors.pike" script 00018 in the "bin" directory. I never really got acquainted with the pike 00019 scripting language. The script should be rewritten to use a more 00020 "common" language (e.g. Perl, Python, ...), 00021 00022 00023 CONSTRUCTOR CLEANUP 00024 ------------------- 00025 00026 I would like to make ParaGUI "object factory" compliant. To achieve this 00027 any class *must* have an identical constructor: 00028 00029 AnyPG_Class(PG_Widget* parent, const PG_Rect& r) 00030 00031 or even better: 00032 00033 AnyPG_Class(PG_Widget* parent, const PG_Rect& r = PG_Rect(0,0,0,0)) 00034 00035 it's allowed to have more params in the constructor but these also must 00036 have default values. 00037 00038 To make the change not to radical the current constructors can coexist 00039 with the *new* constructors. 00040 00041 00042 ADDING ITEMS TO (WIDGET)LISTS WITHOUT ADDWIDGET/ADDITEM 00043 ------------------------------------------------------- 00044 00045 The current WidgetList/ListBox implementation isn't very clean. 00046 It should work this way: 00047 00048 PG_ListBox mylist(NULL, PG_Rect(...)); 00049 PG_ListBoxItem item1(&mylist, ...); 00050 PG_ListBoxItem item2(&mylist, ...); 00051 PG_ListBoxItem item3(&mylist, ...); 00052 PG_ListBoxItem item4(&mylist, ...); 00053 mylist.Show(); 00054 00055 Currently you need to call mylist.AddItem(..) for any item to be 00056 added. 00057 PG_WidgetList should (must) work the same way.


The ParaGUI Project - Alexander Pipelka