]> git.saurik.com Git - wxWidgets.git/commitdiff
use wxSTB_ as prefix for wxStatusBar styles; add support for wxSTB_ELLIPSIZE_* flags...
authorFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 25 Apr 2009 12:59:09 +0000 (12:59 +0000)
committerFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 25 Apr 2009 12:59:09 +0000 (12:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60337 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

20 files changed:
include/wx/cocoa/frame.h
include/wx/frame.h
include/wx/generic/statusbr.h
include/wx/gtk1/frame.h
include/wx/msw/frame.h
include/wx/msw/statusbar.h
include/wx/os2/frame.h
include/wx/osx/frame.h
include/wx/osx/statusbr.h
include/wx/palmos/statusbr.h
include/wx/statusbr.h
include/wx/univ/frame.h
include/wx/univ/statusbr.h
interface/wx/frame.h
interface/wx/statusbr.h
samples/statbar/statbar.cpp
src/generic/statusbr.cpp
src/msw/statusbar.cpp
src/univ/statusbr.cpp
src/xrc/xh_statbar.cpp

index b2b68557f33a7357b363e76c6ee0cb09c06c740b..417f57080de0f1640efbf4fc7489170beefbda5b 100644 (file)
@@ -86,7 +86,7 @@ public:
 
     // create the main status bar by calling OnCreateStatusBar()
     virtual wxStatusBar* CreateStatusBar(int number = 1,
-                                         long style = wxST_SIZEGRIP,
+                                         long style = wxSTB_DEFAULT_STYLE,
                                          wxWindowID winid = 0,
                                          const wxString& name =
                                             wxStatusLineNameStr);
index 3599be5b6660a79d9b2332ccd5d69a3ef3b89e90..1693a256efd898400da470e12b229fafc6456617 100644 (file)
@@ -104,7 +104,7 @@ public:
 #if wxUSE_STATUSBAR
     // create the main status bar by calling OnCreateStatusBar()
     virtual wxStatusBar* CreateStatusBar(int number = 1,
-                                         long style = wxST_DEFAULT_STYLE,
+                                         long style = wxSTB_DEFAULT_STYLE,
                                          wxWindowID winid = 0,
                                          const wxString& name = wxStatusLineNameStr);
     // return a new status bar
index 5f08365329dad207194f3fd0e2209543b40a1e45..8568f88cd423e4bdac65b7a97005438895fef7ba 100644 (file)
@@ -30,7 +30,7 @@ public:
     wxStatusBarGeneric() { Init(); }
     wxStatusBarGeneric(wxWindow *parent,
                        wxWindowID winid = wxID_ANY,
-                       long style = wxST_DEFAULT_STYLE,
+                       long style = wxSTB_DEFAULT_STYLE,
                        const wxString& name = wxStatusBarNameStr)
     {
         Init();
@@ -41,7 +41,7 @@ public:
     virtual ~wxStatusBarGeneric();
 
     bool Create(wxWindow *parent, wxWindowID winid = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxStatusBarNameStr);
 
     // Create status line
@@ -90,7 +90,7 @@ protected:
     virtual void InitColours();
 
     // true if the status bar shows the size grip: for this it must have
-    // wxST_SIZEGRIP style and the window it is attached to must be resizeable
+    // wxSTB_SIZEGRIP style and the window it is attached to must be resizeable
     // and not maximized
     bool ShowsSizeGrip() const;
 
index c7e14925f36b9713c0c2fafdfdbbe0a4b3cbb54a..1f7af6336be6fa405a555008e367d2fb1c080e5c 100644 (file)
@@ -57,7 +57,7 @@ public:
     virtual void PositionStatusBar();
 
     virtual wxStatusBar* CreateStatusBar(int number = 1,
-                                         long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE,
+                                         long style = wxSTB_DEFAULT_STYLE,
                                          wxWindowID id = 0,
                                          const wxString& name = wxStatusLineNameStr);
 
index 348853262afa6d1e77e50492601fe583cb4ce8bd..d528a882dd9019346664575d0a306857f3cf6cd2 100644 (file)
@@ -60,7 +60,7 @@ public:
     // Status bar
 #if wxUSE_STATUSBAR
     virtual wxStatusBar* OnCreateStatusBar(int number = 1,
-                                           long style = wxST_SIZEGRIP,
+                                           long style = wxSTB_DEFAULT_STYLE,
                                            wxWindowID id = 0,
                                            const wxString& name = wxStatusLineNameStr);
 
index 4a2218d01ac0b2e46f6652f143d458d229be89c0..8e6d7b7c0b53e9b6cede74c5ce3b3874386cca21 100644 (file)
@@ -23,7 +23,7 @@ public:
     wxStatusBar();
     wxStatusBar(wxWindow *parent,
                 wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxStatusBarNameStr)
     {
         m_pDC = NULL;
@@ -32,7 +32,7 @@ public:
 
     bool Create(wxWindow *parent,
                 wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxStatusBarNameStr);
 
     virtual ~wxStatusBar();
index 2592177c4f160970ce8a5856a61906fcb2535ebb..4b5e88ca4cac498ee3847e2be5b716019cffbb0a 100644 (file)
@@ -81,7 +81,7 @@ public:
     // Status bar
 #if wxUSE_STATUSBAR
     virtual wxStatusBar* OnCreateStatusBar( int             nNumber = 1
-                                           ,long            lStyle = wxST_SIZEGRIP
+                                           ,long            lStyle = wxSTB_DEFAULT_STYLE
                                            ,wxWindowID      vId = 0
                                            ,const wxString& rsName = wxStatusLineNameStr
                                           );
index 380fbf624e6db5cfc5c36288d529020196f75315..be5e40f6eee60c885640b3dc0fccf41640dd9ace 100644 (file)
@@ -77,7 +77,7 @@ public:
     // Status bar
 #if wxUSE_STATUSBAR
     virtual wxStatusBar* OnCreateStatusBar(int number = 1,
-                                           long style = wxST_SIZEGRIP,
+                                           long style = wxSTB_DEFAULT_STYLE,
                                            wxWindowID id = 0,
                                            const wxString& name = wxStatusLineNameStr);
 #endif // wxUSE_STATUSBAR
index 070ce3b31e4375ed11c3ee099d9a428bc476b180..f2630b862a179810191e611623a0ed48ce85bf6c 100644 (file)
@@ -19,13 +19,13 @@ class WXDLLIMPEXP_CORE wxStatusBarMac : public wxStatusBarGeneric
 
     wxStatusBarMac();
     wxStatusBarMac(wxWindow *parent, wxWindowID id = wxID_ANY,
-           long style = wxST_DEFAULT_STYLE,
+           long style = wxSTB_DEFAULT_STYLE,
            const wxString& name = wxStatusBarNameStr);
 
     virtual ~wxStatusBarMac();
 
     bool Create(wxWindow *parent, wxWindowID id = wxID_ANY,
-              long style = wxST_DEFAULT_STYLE,
+              long style = wxSTB_DEFAULT_STYLE,
               const wxString& name = wxStatusBarNameStr);
 
     virtual void DrawFieldText(wxDC& dc, const wxRect& rc, int i, int textHeight);
index 07da2297f93f583484efd194bc3032c33e9c23a4..273dbb928bccf099d56bdc80be4719c299514bef 100644 (file)
@@ -21,7 +21,7 @@ public:
     wxStatusBarPalm();
     wxStatusBarPalm(wxWindow *parent,
                     wxWindowID id = wxID_ANY,
-                    long style = wxST_DEFAULT_STYLE,
+                    long style = wxSTB_DEFAULT_STYLE,
                     const wxString& name = wxEmptyString)
     {
         (void)Create(parent, id, style, name);
@@ -29,7 +29,7 @@ public:
 
     bool Create(wxWindow *parent,
                 wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxEmptyString);
 
     virtual ~wxStatusBarPalm();
index e01cfa21b9e008d9bf547bbf290e6e4c3d0b1f4c..2a36f8b59bc62f493520b48c1c0bbf6b72eb6433 100644 (file)
@@ -27,12 +27,21 @@ extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusBarNameStr[];
 // ----------------------------------------------------------------------------
 
 // wxStatusBar styles
-#define wxST_SIZEGRIP         0x0010
-#define wxST_SHOW_TIPS        0x0020
+#define wxSTB_SIZEGRIP         0x0010
+#define wxSTB_SHOW_TIPS        0x0020
 
-#define wxST_DEFAULT_STYLE    (wxST_SIZEGRIP|wxST_SHOW_TIPS|wxFULL_REPAINT_ON_RESIZE)
+#define wxSTB_ELLIPSIZE_START   0x0040
+#define wxSTB_ELLIPSIZE_MIDDLE  0x0080
+#define wxSTB_ELLIPSIZE_END     0x0100
 
-// style flags for fields
+#define wxSTB_DEFAULT_STYLE    (wxSTB_SIZEGRIP|wxSTB_ELLIPSIZE_END|wxSTB_SHOW_TIPS|wxFULL_REPAINT_ON_RESIZE)
+
+
+// old compat style name:
+#define wxST_SIZEGRIP    wxSTB_SIZEGRIP
+
+
+// style flags for wxStatusBar fields
 #define wxSB_NORMAL    0x0000
 #define wxSB_FLAT      0x0001
 #define wxSB_RAISED    0x0002
index cd75831ca02d52c17aeb115646065d100bc1aa0a..207bf0d6b0b9b3a4c87cac82a49806147211f75b 100644 (file)
@@ -44,7 +44,7 @@ public:
 
 #if wxUSE_STATUSBAR
     virtual wxStatusBar* CreateStatusBar(int number = 1,
-                                         long style = wxST_SIZEGRIP,
+                                         long style = wxSTB_DEFAULT_STYLE,
                                          wxWindowID id = 0,
                                          const wxString& name = wxStatusLineNameStr);
 #endif // wxUSE_STATUSBAR
index e4e1cfe8a99fe035b3d9b84d649dc2b81fdbfb3e..f9ee1261b1781d39c8e6f7703c63bc2cce8b69a7 100644 (file)
 // ----------------------------------------------------------------------------
 
 class WXDLLIMPEXP_CORE wxStatusBarUniv : public wxStatusBarBase,
-                                    public wxInputConsumer
+                                         public wxInputConsumer
 {
 public:
     wxStatusBarUniv() { Init(); }
 
     wxStatusBarUniv(wxWindow *parent,
                     wxWindowID id = wxID_ANY,
-                    long style = wxST_DEFAULT_STYLE,
+                    long style = wxSTB_DEFAULT_STYLE,
                     const wxString& name = wxPanelNameStr)
     {
         Init();
@@ -37,7 +37,7 @@ public:
 
     bool Create(wxWindow *parent,
                 wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxPanelNameStr);
 
     // set field count/widths
index 826cf2fa670c08ea4592a24ff19865519d464c45..82f283a3e87ce4fe7950058788e65e1abd648bfd 100644 (file)
@@ -222,7 +222,7 @@ public:
 
         @see SetStatusText(), OnCreateStatusBar(), GetStatusBar()
     */
-    virtual wxStatusBar* CreateStatusBar(int number = 1, long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE,
+    virtual wxStatusBar* CreateStatusBar(int number = 1, long style = wxSTB_DEFAULT_STYLE,
                                          wxWindowID id = 0,
                                          const wxString& name = wxStatusLineNameStr);
 
@@ -373,6 +373,9 @@ public:
     /**
         Associates a status bar with the frame.
 
+        If @a statusBar is @NULL, then the status bar, if present, is detached from
+        the frame, but @e not deleted.
+
         @see CreateStatusBar(), wxStatusBar, GetStatusBar()
     */
     virtual void SetStatusBar(wxStatusBar* statusBar);
index 2f86d493d9affc964507574322ed997e475de157..7fef6ce07944e29c057b5a1f828cb0ef21229f3e 100644 (file)
@@ -59,15 +59,25 @@ public:
     Note that in wxStatusBar context, the terms @e pane and @e field are synonyms.
 
     @beginStyleTable
-    @style{wxST_SIZEGRIP}
+    @style{wxSTB_SIZEGRIP}
         Displays a gripper at the right-hand side of the status bar which can be used
         to resize the parent window.
-    @style{wxST_SHOW_TIPS}
-        Displays tooltips for those panes whose status text has been ellipsized because
-        the status text doesn't fit the pane width.
+    @style{wxSTB_SHOW_TIPS}
+        Displays tooltips for those panes whose status text has been ellipsized/truncated
+        because the status text doesn't fit the pane width.
         Note that this style has effect only on wxGTK (with GTK+ >= 2.12) currently.
-    @style{wxST_DEFAULT_STYLE}
-        The default style: includes @c wxST_SIZEGRIP|wxST_SHOW_TIPS|wxFULL_REPAINT_ON_RESIZE. 
+    @style{wxSTB_ELLIPSIZE_START}
+        Replace the beginning of the status texts with an ellipsis when the status text
+        widths exceed the status bar pane's widths (uses wxControl::Ellipsize).
+    @style{wxSTB_ELLIPSIZE_MIDDLE}
+        Replace the middle of the status texts with an ellipsis when the status text
+        widths exceed the status bar pane's widths (uses wxControl::Ellipsize).
+    @style{wxSTB_ELLIPSIZE_END}
+        Replace the end of the status texts with an ellipsis when the status text
+        widths exceed the status bar pane's widths (uses wxControl::Ellipsize).
+    @style{wxSTB_DEFAULT_STYLE}
+        The default style: includes 
+        @c wxSTB_SIZEGRIP|wxSTB_SHOW_TIPS|wxSTB_ELLIPSIZE_END|wxFULL_REPAINT_ON_RESIZE. 
     @endStyleTable
 
     @remarks
@@ -105,7 +115,7 @@ public:
         @see Create()
     */
     wxStatusBar(wxWindow* parent, wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxStatusBarNameStr);
 
     /**
@@ -118,7 +128,7 @@ public:
         See wxStatusBar() for details.
     */
     bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
-                long style = wxST_DEFAULT_STYLE,
+                long style = wxSTB_DEFAULT_STYLE,
                 const wxString& name = wxStatusBarNameStr);
 
     /**
@@ -233,11 +243,11 @@ public:
             The number of fields in the status bar. Must be equal to the
             number passed to SetFieldsCount() the last time it was called.
         @param styles
-            Contains an array of n integers with the styles for each field. There
-            are three possible styles:
-            - wxSB_NORMAL (default): The field appears sunken with a standard 3D border.
-            - wxSB_FLAT: No border is painted around the field so that it appears flat.
-            - wxSB_RAISED: A raised 3D border is painted around the field.
+            Contains an array of @a n integers with the styles for each field. 
+            There are three possible styles:
+            - @c wxSB_NORMAL (default): The field appears sunken with a standard 3D border.
+            - @c wxSB_FLAT: No border is painted around the field so that it appears flat.
+            - @c wxSB_RAISED: A raised 3D border is painted around the field.
     */
     virtual void SetStatusStyles(int n, const int* styles);
 
index 042bfc645a43b892790923d43b3b8ad32c1e1d55..4b705b4a01bed7f4c0094639a16c0b9ffb2e63c2 100644 (file)
@@ -98,7 +98,7 @@ public:
 class MyStatusBar : public wxStatusBar
 {
 public:
-    MyStatusBar(wxWindow *parent);
+    MyStatusBar(wxWindow *parent, long style = wxSTB_DEFAULT_STYLE);
     virtual ~MyStatusBar();
 
     void UpdateClock();
@@ -163,12 +163,12 @@ class MyFrame : public wxMDIParentFrame
     void OnSetStatusTexts(wxCommandEvent& event);
     void OnSetStatusFont(wxCommandEvent& event);
     void OnRecreateStatusBar(wxCommandEvent& event);
-    void OnSetStyleNormal(wxCommandEvent& event);
-    void OnSetStyleFlat(wxCommandEvent& event);
-    void OnSetStyleRaised(wxCommandEvent& event);
+    
+    void OnSetPaneStyle(wxCommandEvent& event);
+    void OnSetStyle(wxCommandEvent& event);
 
 private:
-    enum StatBarKind
+    enum StatusBarKind
     {
         StatBar_Default,
         StatBar_Custom,
@@ -178,17 +178,13 @@ private:
 
     void OnUpdateForDefaultStatusbar(wxUpdateUIEvent& event);
     void OnUpdateStatusBarToggle(wxUpdateUIEvent& event);
-    void OnUpdateSetStyleNormal(wxUpdateUIEvent& event);
-    void OnUpdateSetStyleFlat(wxUpdateUIEvent& event);
-    void OnUpdateSetStyleRaised(wxUpdateUIEvent& event);
+    void OnUpdateSetPaneStyle(wxUpdateUIEvent& event);
+    void OnUpdateSetStyle(wxUpdateUIEvent& event);
     void OnStatusBarToggle(wxCommandEvent& event);
-    void DoCreateStatusBar(StatBarKind kind);
-    void ApplyStyle();
+    void DoCreateStatusBar(StatusBarKind kind, long style);
+    void ApplyPaneStyle();
 
-    wxStatusBar *m_statbarDefault;
-    MyStatusBar *m_statbarCustom;
-
-    int m_statbarStyle;
+    int m_statbarPaneStyle;
 
     // any class wishing to process wxWidgets events must use this macro
     DECLARE_EVENT_TABLE()
@@ -209,21 +205,27 @@ public:
 enum
 {
     // menu items
-    StatusBar_Quit = 1,
-
-    StatusBar_SetFields,
+    StatusBar_Quit = wxID_EXIT,
+    StatusBar_About = wxID_ABOUT,
+    
+    StatusBar_SetFields = wxID_HIGHEST+1,
     StatusBar_SetTexts,
     StatusBar_SetFont,
     StatusBar_ResetFieldsWidth,
 
     StatusBar_Recreate,
-    StatusBar_About,
     StatusBar_Toggle,
-    StatusBar_Checkbox = 1000,
-    StatusBar_SetStyle,
-    StatusBar_SetStyleNormal,
-    StatusBar_SetStyleFlat,
-    StatusBar_SetStyleRaised
+    StatusBar_Checkbox,
+    StatusBar_SetPaneStyle,
+    StatusBar_SetPaneStyleNormal,
+    StatusBar_SetPaneStyleFlat,
+    StatusBar_SetPaneStyleRaised,
+    
+    StatusBar_SetStyleSizeGrip,
+    StatusBar_SetStyleEllipsizeStart,
+    StatusBar_SetStyleEllipsizeMiddle,
+    StatusBar_SetStyleEllipsizeEnd,
+    StatusBar_SetStyleShowTips
 };
 
 static const int BITMAP_SIZE_X = 32;
@@ -249,16 +251,23 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(StatusBar_Recreate, MyFrame::OnRecreateStatusBar)
     EVT_MENU(StatusBar_About, MyFrame::OnAbout)
     EVT_MENU(StatusBar_Toggle, MyFrame::OnStatusBarToggle)
-    EVT_MENU(StatusBar_SetStyleNormal, MyFrame::OnSetStyleNormal)
-    EVT_MENU(StatusBar_SetStyleFlat, MyFrame::OnSetStyleFlat)
-    EVT_MENU(StatusBar_SetStyleRaised, MyFrame::OnSetStyleRaised)
+    EVT_MENU(StatusBar_SetPaneStyleNormal, MyFrame::OnSetPaneStyle)
+    EVT_MENU(StatusBar_SetPaneStyleFlat, MyFrame::OnSetPaneStyle)
+    EVT_MENU(StatusBar_SetPaneStyleRaised, MyFrame::OnSetPaneStyle)
+    
+    EVT_MENU(StatusBar_SetStyleSizeGrip, MyFrame::OnSetStyle)
+    EVT_MENU(StatusBar_SetStyleEllipsizeStart, MyFrame::OnSetStyle)
+    EVT_MENU(StatusBar_SetStyleEllipsizeMiddle, MyFrame::OnSetStyle)
+    EVT_MENU(StatusBar_SetStyleEllipsizeEnd, MyFrame::OnSetStyle)
+    EVT_MENU(StatusBar_SetStyleShowTips, MyFrame::OnSetStyle)
 
     EVT_UPDATE_UI_RANGE(StatusBar_SetFields, StatusBar_ResetFieldsWidth,
                         MyFrame::OnUpdateForDefaultStatusbar)
     EVT_UPDATE_UI(StatusBar_Toggle, MyFrame::OnUpdateStatusBarToggle)
-    EVT_UPDATE_UI(StatusBar_SetStyleNormal, MyFrame::OnUpdateSetStyleNormal)
-    EVT_UPDATE_UI(StatusBar_SetStyleFlat, MyFrame::OnUpdateSetStyleFlat)
-    EVT_UPDATE_UI(StatusBar_SetStyleRaised, MyFrame::OnUpdateSetStyleRaised)
+    EVT_UPDATE_UI_RANGE(StatusBar_SetPaneStyleNormal, StatusBar_SetPaneStyleRaised,
+                        MyFrame::OnUpdateSetPaneStyle)
+    EVT_UPDATE_UI_RANGE(StatusBar_SetStyleSizeGrip, StatusBar_SetStyleShowTips,
+                        MyFrame::OnUpdateSetStyle)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyStatusBar, wxStatusBar)
@@ -321,10 +330,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
 {
     SetIcon(wxICON(sample));
 
-    m_statbarDefault = NULL;
-    m_statbarCustom = NULL;
-
-    m_statbarStyle = wxSB_NORMAL;
+    m_statbarPaneStyle = wxSB_NORMAL;
 
 #ifdef __WXMAC__
     // we need this in order to allow the about menu relocation, since ABOUT is
@@ -337,6 +343,17 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     menuFile->Append(StatusBar_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
 
     wxMenu *statbarMenu = new wxMenu;
+    
+    wxMenu *statbarStyleMenu = new wxMenu;
+    statbarStyleMenu->Append(StatusBar_SetStyleSizeGrip, _T("wxSTB_SIZE_GRIP"), _T("Toggles the wxSTB_SIZE_GRIP style"), true);
+    statbarStyleMenu->Append(StatusBar_SetStyleShowTips, _T("wxSTB_SHOW_TIPS"), _T("Toggles the wxSTB_SHOW_TIPS style"), true);
+    statbarStyleMenu->AppendSeparator();
+    statbarStyleMenu->Append(StatusBar_SetStyleEllipsizeStart, _T("wxSTB_ELLIPSIZE_START"), _T("Toggles the wxSTB_ELLIPSIZE_START style"), true);
+    statbarStyleMenu->Append(StatusBar_SetStyleEllipsizeMiddle, _T("wxSTB_ELLIPSIZE_MIDDLE"), _T("Toggles the wxSTB_ELLIPSIZE_MIDDLE style"), true);
+    statbarStyleMenu->Append(StatusBar_SetStyleEllipsizeEnd, _T("wxSTB_ELLIPSIZE_END"), _T("Toggles the wxSTB_ELLIPSIZE_END style"), true);
+    statbarMenu->Append(StatusBar_SetPaneStyle, _T("Status bar style"), statbarStyleMenu);
+    statbarMenu->AppendSeparator();
+
     statbarMenu->Append(StatusBar_SetFields, _T("&Set field count\tCtrl-C"),
                         _T("Set the number of status bar fields"));
     statbarMenu->Append(StatusBar_SetTexts, _T("&Set field text\tCtrl-T"),
@@ -344,12 +361,11 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     statbarMenu->Append(StatusBar_SetFont, _T("&Set field font\tCtrl-F"),
                         _T("Set the font to use for rendering status bar fields"));
 
-    wxMenu *statbarStyleMenu = new wxMenu;
-    statbarStyleMenu->Append(StatusBar_SetStyleNormal, _T("&Normal"), _T("Sets the style of the first field to normal (sunken) look"), true);
-    statbarStyleMenu->Append(StatusBar_SetStyleFlat, _T("&Flat"), _T("Sets the style of the first field to flat look"), true);
-    statbarStyleMenu->Append(StatusBar_SetStyleRaised, _T("&Raised"), _T("Sets the style of the first field to raised look"), true);
-
-    statbarMenu->Append(StatusBar_SetStyle, _T("Field style"), statbarStyleMenu);
+    wxMenu *statbarPaneStyleMenu = new wxMenu;
+    statbarPaneStyleMenu->Append(StatusBar_SetPaneStyleNormal, _T("&Normal"), _T("Sets the style of the first field to normal (sunken) look"), true);
+    statbarPaneStyleMenu->Append(StatusBar_SetPaneStyleFlat, _T("&Flat"), _T("Sets the style of the first field to flat look"), true);
+    statbarPaneStyleMenu->Append(StatusBar_SetPaneStyleRaised, _T("&Raised"), _T("Sets the style of the first field to raised look"), true);
+    statbarMenu->Append(StatusBar_SetPaneStyle, _T("Field style"), statbarPaneStyleMenu);
 
     statbarMenu->Append(StatusBar_ResetFieldsWidth, _T("Reset field widths"),
                         _T("Sets all fields to the same width"));
@@ -373,49 +389,41 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     SetMenuBar(menuBar);
 
     // create default status bar to start with
-    CreateStatusBar(2);
-    m_statbarKind = StatBar_Default;
+    DoCreateStatusBar(StatBar_Default, wxSTB_DEFAULT_STYLE);
     SetStatusText(_T("Welcome to wxWidgets!"));
-
-    m_statbarDefault = GetStatusBar();
 }
 
 MyFrame::~MyFrame()
 {
-    SetStatusBar(NULL);
-
-    delete m_statbarDefault;
-    delete m_statbarCustom;
 }
 
-void MyFrame::DoCreateStatusBar(MyFrame::StatBarKind kind)
+void MyFrame::DoCreateStatusBar(MyFrame::StatusBarKind kind, long style)
 {
     wxStatusBar *statbarOld = GetStatusBar();
     if ( statbarOld )
     {
-        statbarOld->Hide();
+        SetStatusBar(NULL);
+        delete statbarOld;
     }
 
+    wxStatusBar *statbarNew = NULL;
     switch ( kind )
     {
         case StatBar_Default:
-            SetStatusBar(m_statbarDefault);
+            statbarNew = new wxStatusBar(this, wxID_ANY, style, "wxStatusBar");
+            statbarNew->SetFieldsCount(2);
             break;
-
+        
         case StatBar_Custom:
-            if ( !m_statbarCustom )
-            {
-                m_statbarCustom = new MyStatusBar(this);
-            }
-            SetStatusBar(m_statbarCustom);
+            statbarNew = new MyStatusBar(this, style);
             break;
 
         default:
-            wxFAIL_MSG(wxT("unknown stat bar kind"));
+            wxFAIL_MSG(wxT("unknown status bar kind"));
     }
 
-    ApplyStyle();
-    GetStatusBar()->Show();
+    SetStatusBar(statbarNew);
+    ApplyPaneStyle();
     PositionStatusBar();
 
     m_statbarKind = kind;
@@ -430,12 +438,17 @@ void MyFrame::OnUpdateForDefaultStatusbar(wxUpdateUIEvent& event)
 {
     // only allow this feature for the default status bar
     wxStatusBar *sb = GetStatusBar();
-    event.Enable(sb == m_statbarDefault);
+    if (!sb)
+        return;
+    
+    event.Enable(sb->GetName() == "wxStatusBar");
 }
 
 void MyFrame::OnSetStatusTexts(wxCommandEvent& WXUNUSED(event))
 {
     wxStatusBar *sb = GetStatusBar();
+    if (!sb)
+        return;
 
     wxString txt;
     for (int i=0; i<sb->GetFieldsCount(); i++)
@@ -451,6 +464,8 @@ void MyFrame::OnSetStatusTexts(wxCommandEvent& WXUNUSED(event))
 void MyFrame::OnSetStatusFont(wxCommandEvent& WXUNUSED(event))
 {
     wxStatusBar *sb = GetStatusBar();
+    if (!sb)
+        return;
 
     wxFont fnt = wxGetFontFromUser(this, sb->GetFont(), "Choose statusbar font");
     if (fnt.IsOk())
@@ -463,6 +478,8 @@ void MyFrame::OnSetStatusFont(wxCommandEvent& WXUNUSED(event))
 void MyFrame::OnSetStatusFields(wxCommandEvent& WXUNUSED(event))
 {
     wxStatusBar *sb = GetStatusBar();
+    if (!sb)
+        return;
 
     long nFields = wxGetNumberFromUser
                 (
@@ -521,13 +538,13 @@ void MyFrame::OnSetStatusFields(wxCommandEvent& WXUNUSED(event))
 void MyFrame::OnResetFieldsWidth(wxCommandEvent& WXUNUSED(event))
 {
     wxStatusBar *pStat = GetStatusBar();
-    if (pStat)
-    {
-        int n = pStat->GetFieldsCount();
-        pStat->SetStatusWidths(n, NULL);
-        for (int i=0; i<n; i++)
-            pStat->SetStatusText("same size", i);
-    }
+    if (!pStat)
+        return;
+    
+    int n = pStat->GetFieldsCount();
+    pStat->SetStatusWidths(n, NULL);
+    for (int i=0; i<n; i++)
+        pStat->SetStatusText("same size", i);
 }
 
 void MyFrame::OnUpdateStatusBarToggle(wxUpdateUIEvent& event)
@@ -540,19 +557,20 @@ void MyFrame::OnStatusBarToggle(wxCommandEvent& WXUNUSED(event))
     wxStatusBar *statbarOld = GetStatusBar();
     if ( statbarOld )
     {
-        statbarOld->Hide();
         SetStatusBar(NULL);
+        delete statbarOld;
     }
     else
     {
-        DoCreateStatusBar(m_statbarKind);
+        DoCreateStatusBar(m_statbarKind, wxSTB_DEFAULT_STYLE);
     }
 }
 
 void MyFrame::OnRecreateStatusBar(wxCommandEvent& WXUNUSED(event))
 {
     DoCreateStatusBar(m_statbarKind == StatBar_Custom ? StatBar_Default
-                                                    : StatBar_Custom);
+                                                      : StatBar_Custom,
+                      wxSTB_DEFAULT_STYLE);
 }
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
@@ -567,55 +585,128 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
     dlg.ShowModal();
 }
 
-void MyFrame::OnUpdateSetStyleNormal(wxUpdateUIEvent &event)
-{
-    event.Check(m_statbarStyle == wxSB_NORMAL);
-}
-
-void MyFrame::OnUpdateSetStyleFlat(wxUpdateUIEvent &event)
-{
-    event.Check(m_statbarStyle == wxSB_FLAT);
-}
-
-void MyFrame::OnUpdateSetStyleRaised(wxUpdateUIEvent &event)
+void MyFrame::OnUpdateSetPaneStyle(wxUpdateUIEvent& event)
 {
-    event.Check(m_statbarStyle == wxSB_RAISED);
-}
-
-void MyFrame::OnSetStyleNormal(wxCommandEvent & WXUNUSED(event))
-{
-    m_statbarStyle = wxSB_NORMAL;
-    ApplyStyle();
-}
-
-void MyFrame::OnSetStyleFlat(wxCommandEvent & WXUNUSED(event))
-{
-    m_statbarStyle = wxSB_FLAT;
-    ApplyStyle();
+    switch (event.GetId())
+    {
+        case StatusBar_SetPaneStyleNormal:
+            event.Check(m_statbarPaneStyle == wxSB_NORMAL);
+            break;
+        case StatusBar_SetPaneStyleFlat:
+            event.Check(m_statbarPaneStyle == wxSB_FLAT);
+            break;
+        case StatusBar_SetPaneStyleRaised:
+            event.Check(m_statbarPaneStyle == wxSB_RAISED);
+            break;
+    }
 }
 
-void MyFrame::OnSetStyleRaised(wxCommandEvent & WXUNUSED(event))
+void MyFrame::OnSetPaneStyle(wxCommandEvent& event)
 {
-    m_statbarStyle = wxSB_RAISED;
-    ApplyStyle();
+    switch (event.GetId())
+    {
+        case StatusBar_SetPaneStyleNormal:
+            m_statbarPaneStyle = wxSB_NORMAL;
+            break;
+        case StatusBar_SetPaneStyleFlat:
+            m_statbarPaneStyle = wxSB_FLAT;
+            break;
+        case StatusBar_SetPaneStyleRaised:
+            m_statbarPaneStyle = wxSB_RAISED;
+            break;
+    }
+    
+    ApplyPaneStyle();
 }
 
-void MyFrame::ApplyStyle()
+void MyFrame::ApplyPaneStyle()
 {
     wxStatusBar *sb = GetStatusBar();
+    if (!sb)
+        return;
+    
     int fields = sb->GetFieldsCount();
     int *styles = new int[fields];
 
     for (int i = 1; i < fields; i++)
         styles[i] = wxSB_NORMAL;
 
-    styles[0] = m_statbarStyle;
+    styles[0] = m_statbarPaneStyle;
 
     sb->SetStatusStyles(fields, styles);
 
     delete [] styles;
 }
 
+void MyFrame::OnUpdateSetStyle(wxUpdateUIEvent& event)
+{
+    long currentStyle = wxSTB_DEFAULT_STYLE;
+    if (GetStatusBar())
+        currentStyle = GetStatusBar()->GetWindowStyle();
+
+    switch (event.GetId())
+    {
+        case StatusBar_SetStyleSizeGrip:
+            event.Check((currentStyle & wxSTB_SIZEGRIP) != 0);
+            break;
+        case StatusBar_SetStyleShowTips:
+            event.Check((currentStyle & wxSTB_SHOW_TIPS) != 0);
+            break;
+
+        case StatusBar_SetStyleEllipsizeStart:
+            event.Check((currentStyle & wxSTB_ELLIPSIZE_START) != 0);
+            break;
+        case StatusBar_SetStyleEllipsizeMiddle:
+            event.Check((currentStyle & wxSTB_ELLIPSIZE_MIDDLE) != 0);
+            break;
+        case StatusBar_SetStyleEllipsizeEnd:
+            event.Check((currentStyle & wxSTB_ELLIPSIZE_END) != 0);
+            break;
+    }
+}
+
+void MyFrame::OnSetStyle(wxCommandEvent& event)
+{
+    long oldStyle = wxSTB_DEFAULT_STYLE;
+    if (GetStatusBar())
+        oldStyle = GetStatusBar()->GetWindowStyle();
+
+#define STB_ELLIPSIZE_MASK  (wxSTB_ELLIPSIZE_START|wxSTB_ELLIPSIZE_MIDDLE|wxSTB_ELLIPSIZE_END)
+    
+    long newStyle = oldStyle;
+    long newStyleBit = 0;
+    switch (event.GetId())
+    {
+        case StatusBar_SetStyleSizeGrip:
+            newStyleBit = wxSTB_SIZEGRIP;
+            break;
+        case StatusBar_SetStyleShowTips:
+            newStyleBit = wxSTB_SHOW_TIPS;
+            break;
+
+        case StatusBar_SetStyleEllipsizeStart:
+            newStyleBit = wxSTB_ELLIPSIZE_START;
+            newStyle &= ~STB_ELLIPSIZE_MASK;
+            break;
+        case StatusBar_SetStyleEllipsizeMiddle:
+            newStyleBit = wxSTB_ELLIPSIZE_MIDDLE;
+            newStyle &= ~STB_ELLIPSIZE_MASK;
+            break;
+        case StatusBar_SetStyleEllipsizeEnd:
+            newStyleBit = wxSTB_ELLIPSIZE_END;
+            newStyle &= ~STB_ELLIPSIZE_MASK;
+            break;
+    }
+    
+    newStyle = event.IsChecked() ? (newStyle | newStyleBit) :
+                                   (newStyle & ~newStyleBit);
+    if (newStyle != oldStyle)
+    {
+        DoCreateStatusBar(m_statbarKind, newStyle);
+        SetStatusText("Status bar recreated with a new style");
+    }
+}
+
 // ----------------------------------------------------------------------------
 // MyAboutDialog
 // ----------------------------------------------------------------------------
@@ -665,8 +756,8 @@ MyAboutDialog::MyAboutDialog(wxWindow *parent)
     #pragma warning(disable: 4355)
 #endif
 
-MyStatusBar::MyStatusBar(wxWindow *parent)
-        : wxStatusBar(parent, wxID_ANY)
+MyStatusBar::MyStatusBar(wxWindow *parent, long style)
+        : wxStatusBar(parent, wxID_ANY, style, "MyStatusBar")
 #if wxUSE_TIMER
             , m_timer(this)
 #endif
index bd1f98f4b271832b8353d6a2b0e33ad475d66c3a..e1717d26db8c8057c8dd9bf753ac2b4dff6d78f8 100644 (file)
 #if GTK_CHECK_VERSION(2,12,0)
 extern "C" {
 static
-gboolean statusbar_query_tooltip(GtkWidget  *widget,
+gboolean statusbar_query_tooltip(GtkWidget*   WXUNUSED(widget),
                                  gint        x,
                                  gint        y,
-                                 gboolean    keyboard_mode,
+                                 gboolean     WXUNUSED(keyboard_mode),
                                  GtkTooltip *tooltip,
                                  wxStatusBar* statbar)
 {
@@ -72,7 +72,11 @@ gboolean statusbar_query_tooltip(GtkWidget  *widget,
     if (!statbar->GetField(n).IsEllipsized())
         return FALSE;   // no, it's not useful
 
-    gtk_tooltip_set_text(tooltip, wxGTK_CONV_SYS(statbar->GetStatusText(n)));
+    const wxString& str = statbar->GetStatusText(n);
+    if (str.empty())
+        return FALSE;
+    
+    gtk_tooltip_set_text(tooltip, wxGTK_CONV_SYS(str));
     return TRUE;
 }
 }
@@ -128,7 +132,7 @@ bool wxStatusBarGeneric::Create(wxWindow *parent,
     
 #if defined( __WXGTK20__ )
 #if GTK_CHECK_VERSION(2,12,0)
-    if (HasFlag(wxST_SHOW_TIPS) && !gtk_check_version(2,12,0))
+    if (HasFlag(wxSTB_SHOW_TIPS) && !gtk_check_version(2,12,0))
     {
         g_object_set(m_widget, "has-tooltip", TRUE, NULL); 
         g_signal_connect(m_widget, "query-tooltip",  
@@ -202,7 +206,7 @@ void wxStatusBarGeneric::SetStatusWidths(int n, const int widths_field[])
 
 bool wxStatusBarGeneric::ShowsSizeGrip() const
 {
-    if ( !HasFlag(wxST_SIZEGRIP) )
+    if ( !HasFlag(wxSTB_SIZEGRIP) )
         return false;
 
     wxTopLevelWindow * const
@@ -242,16 +246,34 @@ void wxStatusBarGeneric::DrawFieldText(wxDC& dc, const wxRect& rect, int i, int
     }
 
     // eventually ellipsize the text so that it fits the field width
-    text = wxControl::Ellipsize(
-        text, dc,
-        GetLayoutDirection() == wxLayout_RightToLeft ? wxELLIPSIZE_START : wxELLIPSIZE_END,
-        maxWidth,
-        wxELLIPSIZE_EXPAND_TAB);
-        // Ellipsize() will do something only if necessary
+    
+    wxEllipsizeMode ellmode = (wxEllipsizeMode)-1;
+    if (HasFlag(wxSTB_ELLIPSIZE_START)) ellmode = wxELLIPSIZE_START;
+    else if (HasFlag(wxSTB_ELLIPSIZE_MIDDLE)) ellmode = wxELLIPSIZE_MIDDLE;
+    else if (HasFlag(wxSTB_ELLIPSIZE_END)) ellmode = wxELLIPSIZE_END;
+
+    if (ellmode == (wxEllipsizeMode)-1)
+    {
+        // if we have the wxSTB_SHOW_TIPS we must set the ellipsized flag even if
+        // we don't ellipsize the text but just truncate it
+        if (HasFlag(wxSTB_SHOW_TIPS))
+            SetEllipsizedFlag(i, dc.GetTextExtent(text).GetWidth() > maxWidth);
 
-    // update the ellipsization status for this pane; this is used to decide
-    // whether a tooltip should be shown or not for this pane
-    SetEllipsizedFlag(i, text != GetStatusText(i));
+        dc.SetClippingRegion(rect);
+    }
+    else
+    {
+        text = wxControl::Ellipsize(text, dc,
+                                    ellmode,
+                                    maxWidth,
+                                    wxELLIPSIZE_EXPAND_TAB);
+            // Ellipsize() will do something only if necessary
+
+        // update the ellipsization status for this pane; this is used later to 
+        // decide whether a tooltip should be shown or not for this pane 
+        // (if we have wxSTB_SHOW_TIPS)
+        SetEllipsizedFlag(i, text != GetStatusText(i));
+    }
 
 #if defined( __WXGTK__ ) || defined(__WXMAC__)
     xpos++;
@@ -260,6 +282,9 @@ void wxStatusBarGeneric::DrawFieldText(wxDC& dc, const wxRect& rect, int i, int
 
     // draw the text
     dc.DrawText(text, xpos, ypos);
+    
+    if (ellmode == (wxEllipsizeMode)-1)
+        dc.DestroyClippingRegion();
 }
 
 void wxStatusBarGeneric::DrawField(wxDC& dc, int i, int textHeight)
index e2fd86ab70b53b4a48f4b206b777b51be9a5d372..c21dac1aa9edbb650d6e4274e7a91b0df30c5d8c 100644 (file)
@@ -89,9 +89,9 @@ bool wxStatusBar::Create(wxWindow *parent,
     // setting SBARS_SIZEGRIP is perfectly useless: it's always on by default
     // (at least in the version of comctl32.dll I'm using), and the only way to
     // turn it off is to use CCS_TOP style - as we position the status bar
-    // manually anyhow (see DoMoveWindow), use CCS_TOP style if wxST_SIZEGRIP
+    // manually anyhow (see DoMoveWindow), use CCS_TOP style if wxSTB_SIZEGRIP
     // is not given
-    if ( !(style & wxST_SIZEGRIP) )
+    if ( !(style & wxSTB_SIZEGRIP) )
     {
         wstyle |= CCS_TOP;
     }
index cc7a00096e405bd11b5994d38e0a8f429acd05d5..0acfa84277bfc89c2efa8c30c3c3b7a7a4f8384d 100644 (file)
@@ -127,7 +127,7 @@ void wxStatusBarUniv::DoDraw(wxControlRenderer *renderer)
             // have the corresponding style and even then only if we really can
             // resize this frame
             if ( n == (int)m_panes.GetCount() - 1 &&
-                 HasFlag(wxST_SIZEGRIP) &&
+                 HasFlag(wxSTB_SIZEGRIP) &&
                  GetParent()->HasFlag(wxRESIZE_BORDER) &&
                  parentTLW && !parentTLW->IsMaximized() )
             {
index 0df6782e19490274dabe8e2b89a49b7410b04a9e..ef0d56e3c194880bf929dc3720a8c222e104c7bd 100644 (file)
@@ -31,7 +31,16 @@ IMPLEMENT_DYNAMIC_CLASS(wxStatusBarXmlHandler, wxXmlResourceHandler)
 wxStatusBarXmlHandler::wxStatusBarXmlHandler()
                       :wxXmlResourceHandler()
 {
-    XRC_ADD_STYLE(wxST_SIZEGRIP);
+    XRC_ADD_STYLE(wxSTB_SIZEGRIP);
+    XRC_ADD_STYLE(wxSTB_SHOW_TIPS);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_START);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_MIDDLE);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_END);
+    XRC_ADD_STYLE(wxSTB_DEFAULT_STYLE);
+
+    // compat style name:
+    XRC_ADD_STYLE(wxST_SIZE_GRIP);
+
     AddWindowStyles();
 }