]> git.saurik.com Git - wxWidgets.git/commitdiff
Generate the button clicks in GTK version of wxInfoBar.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 5 Oct 2009 22:55:32 +0000 (22:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 5 Oct 2009 22:55:32 +0000 (22:55 +0000)
Also add an example of handling info bar buttons events to the sample and
mention that this must be done using Connect() or by deriving from wxInfoBar
in the documentation.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62279 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/infobar.h
samples/dialogs/dialogs.cpp
samples/dialogs/dialogs.h
src/gtk/infobar.cpp

index 9f57867d3cf5450a89017251080af68dcffaa9d9..a59e1edea7d92072186b42adb7e10bddc9bfbcc4 100644 (file)
@@ -116,10 +116,20 @@ public:
         (in LTR layout), with each successive button being added to the right
         of the previous one.
 
-        Clicking the button will generate a normal event which can be handled
-        as usual. Notice that if you wish the info bar to be hidden when the
-        button is clicked, simply call @c event.Skip() in the button handler to
-        let the base class handler do it.
+        Clicking the button will generate a normal EVT_COMMAND_BUTTON_CLICKED
+        event which can be handled as usual. The default handler in wxInfoBar
+        itself closes the window whenever a button in it is clicked so if you
+        wish the info bar to be hidden when the button is clicked, simply call
+        @c event.Skip() in the button handler to let the base class handler do
+        it. On the other hand, if you don't skip the event, the info bar will
+        remain opened so make sure to do it for at least some buttons to allow
+        the user to close it.
+
+        Notice that the generic wxInfoBar implementation handles the button
+        events itself and so they are not propagated to the info bar parent and
+        you need to either inherit from wxInfoBar and handle them in your
+        derived class or use wxEvtHandler::Connect(), as is done in the dialogs
+        sample, to handle the button events in the parent frame.
 
         @param btnid
             Id of the button. It will be used in the button message clicking
index 1558b54a25ca999318a00981b66162a3d5ef7d1a..0319bb454172be7fc0d1ea671569860b8252c12f 100644 (file)
@@ -528,21 +528,33 @@ MyFrame::MyFrame(const wxString& title)
     // an info bar can be created very simply and used without any extra effort
     m_infoBarSimple = new wxInfoBar(this);
 
-    // or it can also be customized
+    // or it can also be customized by
     m_infoBarAdvanced = new wxInfoBar(this);
+
+    // ... adding extra buttons (but more than two will usually be too many)
     m_infoBarAdvanced->AddButton(wxID_UNDO);
     m_infoBarAdvanced->AddButton(wxID_REDO);
 
+    m_infoBarAdvanced->Connect(wxID_REDO, wxEVT_COMMAND_BUTTON_CLICKED,
+                                wxCommandEventHandler(MyFrame::OnInfoBarRedo),
+                                NULL,
+                                this);
+
     // adding and removing a button immediately doesn't make sense here, of
     // course, it's done just to show that it is possible
     m_infoBarAdvanced->AddButton(wxID_EXIT);
     m_infoBarAdvanced->RemoveButton(wxID_EXIT);
 
+    // ... changing the colours and/or fonts
     m_infoBarAdvanced->SetOwnBackgroundColour(0xc8ffff);
+    m_infoBarAdvanced->SetFont(GetFont().Bold().Larger());
+
+    // ... and changing the effect (only does anything under MSW currently)
     m_infoBarAdvanced->SetShowHideEffects(wxSHOW_EFFECT_EXPAND,
                                           wxSHOW_EFFECT_EXPAND);
     m_infoBarAdvanced->SetEffectDuration(1500);
 
+
     // to use the info bars we need to use sizer for the window layout
     wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
     sizer->Add(m_infoBarSimple, wxSizerFlags().Expand());
@@ -709,6 +721,11 @@ void MyFrame::InfoBarAdvanced(wxCommandEvent& WXUNUSED(event))
     m_infoBarAdvanced->ShowMessage("Sorry, it didn't work out.", wxICON_WARNING);
 }
 
+void MyFrame::OnInfoBarRedo(wxCommandEvent& WXUNUSED(event))
+{
+    m_infoBarAdvanced->ShowMessage("Still no, sorry again.", wxICON_ERROR);
+}
+
 #endif // wxUSE_INFOBAR
 
 
index 57a7105b4392cbb5a049f79c5140ec364e472d4d..fc11ed657a6378371301b1eaa83391e0ace5bc19 100644 (file)
@@ -429,6 +429,8 @@ private:
     wxWindow *m_canvas;
 
 #if wxUSE_INFOBAR
+    void OnInfoBarRedo(wxCommandEvent& event);
+
     wxInfoBar *m_infoBarSimple,
               *m_infoBarAdvanced;
 #endif // wxUSE_INFOBAR
index 53d075d04b2b07502092450661f158978c866aca..237b99a9f0d13787e916b9522be0d5cfe449f024 100644 (file)
@@ -163,11 +163,17 @@ void wxInfoBar::ShowMessage(const wxString& msg, int flags)
     UpdateParent();
 }
 
-void wxInfoBar::GTKResponse(int WXUNUSED(btnid))
+void wxInfoBar::GTKResponse(int btnid)
 {
-    Hide();
+    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, btnid);
+    event.SetEventObject(this);
 
-    UpdateParent();
+    if ( !HandleWindowEvent(event) )
+    {
+        Hide();
+
+        UpdateParent();
+    }
 }
 
 void wxInfoBar::AddButton(wxWindowID btnid, const wxString& label)