]> git.saurik.com Git - wxWidgets.git/commitdiff
Added menu_highlight behaviour as in wxMSW (statusbar)
authorRobert Roebling <robert@roebling.de>
Fri, 5 Feb 1999 13:25:40 +0000 (13:25 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 5 Feb 1999 13:25:40 +0000 (13:25 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1606 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/frame.h
include/wx/gtk/menu.h
include/wx/gtk1/frame.h
include/wx/gtk1/menu.h
samples/toolbar/test.cpp
src/generic/dcpsg.cpp
src/gtk/frame.cpp
src/gtk/menu.cpp
src/gtk1/frame.cpp
src/gtk1/menu.cpp

index 0dd712f94631529847e3895586560f76cc2b8713..7fcfc639e375c539d91800f21db2028ec86a819e 100644 (file)
@@ -102,6 +102,8 @@ public:
   void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
   void OnSize( wxSizeEvent &event );
   void OnCloseWindow( wxCloseEvent& event );
+  
+  void OnMenuHighlight( wxMenuEvent& event );
 
   // implementation
   
index 860e0b8d14dcc711e1a927bb60b3585099290b7b..18844219c92eb6a0793b9bc1a1b479de570edd94 100644 (file)
@@ -49,15 +49,14 @@ public:
 
   int FindMenuItem( const wxString &menuString, const wxString &itemString ) const;
   wxMenuItem* FindMenuItemById( int id ) const;
-  inline wxMenuItem* FindItemForId( int id ) const
-    { return FindMenuItemById( id ); }
+  inline wxMenuItem* FindItemForId( int id ) const { return FindMenuItemById( id ); }
   
   void Check( int id, bool check );
   bool Checked( int id ) const;
   void Enable( int id, bool enable );
   bool Enabled( int id ) const;
-  inline bool IsEnabled(int Id) const { return Enabled(Id); }
-  inline bool IsChecked(int Id) const { return Checked(Id); }
+  inline bool IsEnabled( int id ) const { return Enabled(id); }
+  inline bool IsChecked( int id ) const { return Checked(id); }
   
   wxString GetLabel( int id ) const;
   void SetLabel( int id, const wxString &label );
@@ -66,8 +65,11 @@ public:
   void SetLabelTop( int pos, const wxString& label );
   wxString GetLabelTop( int pos ) const;
 
-  int     GetMenuCount() const { return m_menus.Number(); }
-  wxMenu *GetMenu(int n) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
+  virtual void SetHelpString( int id, const wxString& helpString );
+  virtual wxString GetHelpString( int id ) const;
+  
+  inline int GetMenuCount() const { return m_menus.Number(); }
+  inline wxMenu *GetMenu( int n ) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
 
   wxList       m_menus;
   GtkWidget   *m_menubar;
index 0dd712f94631529847e3895586560f76cc2b8713..7fcfc639e375c539d91800f21db2028ec86a819e 100644 (file)
@@ -102,6 +102,8 @@ public:
   void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
   void OnSize( wxSizeEvent &event );
   void OnCloseWindow( wxCloseEvent& event );
+  
+  void OnMenuHighlight( wxMenuEvent& event );
 
   // implementation
   
index 860e0b8d14dcc711e1a927bb60b3585099290b7b..18844219c92eb6a0793b9bc1a1b479de570edd94 100644 (file)
@@ -49,15 +49,14 @@ public:
 
   int FindMenuItem( const wxString &menuString, const wxString &itemString ) const;
   wxMenuItem* FindMenuItemById( int id ) const;
-  inline wxMenuItem* FindItemForId( int id ) const
-    { return FindMenuItemById( id ); }
+  inline wxMenuItem* FindItemForId( int id ) const { return FindMenuItemById( id ); }
   
   void Check( int id, bool check );
   bool Checked( int id ) const;
   void Enable( int id, bool enable );
   bool Enabled( int id ) const;
-  inline bool IsEnabled(int Id) const { return Enabled(Id); }
-  inline bool IsChecked(int Id) const { return Checked(Id); }
+  inline bool IsEnabled( int id ) const { return Enabled(id); }
+  inline bool IsChecked( int id ) const { return Checked(id); }
   
   wxString GetLabel( int id ) const;
   void SetLabel( int id, const wxString &label );
@@ -66,8 +65,11 @@ public:
   void SetLabelTop( int pos, const wxString& label );
   wxString GetLabelTop( int pos ) const;
 
-  int     GetMenuCount() const { return m_menus.Number(); }
-  wxMenu *GetMenu(int n) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
+  virtual void SetHelpString( int id, const wxString& helpString );
+  virtual wxString GetHelpString( int id ) const;
+  
+  inline int GetMenuCount() const { return m_menus.Number(); }
+  inline wxMenu *GetMenu( int n ) const { return (wxMenu *)m_menus.Nth(n)->Data(); }
 
   wxList       m_menus;
   GtkWidget   *m_menubar;
index cd661ac65c68320517c7a5a0d6e2329a4f22dcd3..9d6232483aaf2a8ff75eb5ca1c59a9e502558709 100644 (file)
@@ -56,10 +56,10 @@ bool MyApp::OnInit(void)
 
   // Make a menubar
   wxMenu *fileMenu = new wxMenu;
-  fileMenu->Append(wxID_EXIT, "E&xit");
+  fileMenu->Append(wxID_EXIT, "E&xit", "Quit toolbar sample" );
 
   wxMenu *helpMenu = new wxMenu;
-  helpMenu->Append(wxID_HELP, "&About");
+  helpMenu->Append(wxID_HELP, "&About", "About toolbar sample");
 
   wxMenuBar* menuBar = new wxMenuBar;
 
index 4fac5ff954b2a9abfdcaeec35a30ba5cc7b3d469..f592a769c82274f4324b9a050b8cbc5fc4f683fe 100644 (file)
 
 #endif
 
-#ifdef __WXGTK__
-#include "gtk/gtk.h"
-#include "gdk/gdk.h"
-#endif
-
 //-----------------------------------------------------------------------------
 // start and end of document/page
 //-----------------------------------------------------------------------------
@@ -1480,28 +1475,13 @@ bool wxPostScriptDC::Blit( long xdest, long ydest,
     
     wxCHECK_MSG( source, FALSE, "invalid source dc" );
     
-    wxClientDC *srcDC = (wxClientDC*)source;
+    /* blit into a bitmap */
   
     wxBitmap bitmap( fwidth, fheight );
-
-#ifdef __WXGTK__
-    /* just take any GC so we don't have to create our own. */
-
-    GtkStyle *style = gtk_widget_get_default_style ();
-    GdkGC *gc = style->white_gc;       
-
-    /* copy from either window or bitmap */
-
-    gdk_window_copy_area( bitmap.GetPixmap(), gc, 0, 0, 
-                          srcDC->GetWindow(),
-                         xsrc, ysrc, fwidth, fheight );
-#else
     wxMemoryDC memDC;
     memDC.SelectObject(bitmap);
-    // TODO: Do we want to blit transparently?
-    memDC.Blit(0, 0, fwidth, fheight, source, xsrc, ysrc, rop);
+    memDC.Blit(0, 0, fwidth, fheight, source, xsrc, ysrc, rop); /* TODO: Blit transparently? */
     memDC.SelectObject(wxNullBitmap);
-#endif
 
     /* draw bitmap. scaling and positioning is done there */
 
@@ -1518,9 +1498,9 @@ long wxPostScriptDC::GetCharHeight()
         return 12;
 }
 
-void wxPostScriptDC::GetTextExtent (const wxString& string, long *x, long *y,
-           long *descent, long *externalLeading, wxFont *theFont,
-                    bool WXUNUSED(use16))
+void wxPostScriptDC::GetTextExtentconst wxString& string, long *x, long *y,
+                                    long *descent, long *externalLeading, wxFont *theFont,
+                                    bool WXUNUSED(use16) )
 {
     wxFont *fontToUse = theFont;
   
index d809e69266c841908d757ab7eba50c5f07af6ac2..af7887cf2c00a452b956611effea1c9f4630bc51 100644 (file)
@@ -105,6 +105,7 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
 BEGIN_EVENT_TABLE(wxFrame, wxWindow)
     EVT_SIZE(wxFrame::OnSize)
     EVT_CLOSE(wxFrame::OnCloseWindow)
+    EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight)
 END_EVENT_TABLE()
 
 IMPLEMENT_DYNAMIC_CLASS(wxFrame,wxWindow)
@@ -564,6 +565,29 @@ wxMenuBar *wxFrame::GetMenuBar() const
     return m_frameMenuBar;
 }
 
+void wxFrame::OnMenuHighlight(wxMenuEvent& event)
+{
+    if (GetStatusBar())
+    {
+        if (event.GetMenuId() == -1)
+       {
+            SetStatusText("");
+       }
+        else
+        {
+            wxMenuBar *menuBar = GetMenuBar();
+            if (menuBar)
+            {
+                int menuId = event.GetMenuId();
+                wxString helpString;
+                helpString = menuBar->GetHelpString(menuId);
+                if (helpString != "")
+                    SetStatusText(helpString);
+            }
+        }
+    }
+}
+
 wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
 {
     wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
index 27173bba72aa076026e03ede4fb502f4af362789..110c8f958f4a634dadd92713e2398abd43453911 100644 (file)
@@ -152,6 +152,7 @@ bool wxMenuBar::Enabled( int id ) const
 {
     wxMenuItem* item = FindMenuItemById( id );
     if (item) return item->IsEnabled();
+    
     return FALSE;
 }
 
@@ -161,7 +162,7 @@ wxString wxMenuBar::GetLabel( int id ) const
     
     if (item) return item->GetText();
     
-    return "";
+    return wxString("");
 }
 
 void wxMenuBar::SetLabel( int id, const wxString &label )
@@ -204,6 +205,23 @@ void wxMenuBar::SetLabelTop( int pos, const wxString& label )
     menu->SetTitle( label );
 }
 
+void wxMenuBar::SetHelpString( int id, const wxString& helpString )
+{
+    wxMenuItem* item = FindMenuItemById( id );
+    
+    if (item) item->SetHelp( helpString );
+}
+
+wxString wxMenuBar::GetHelpString( int id ) const
+{
+    wxMenuItem* item = FindMenuItemById( id );
+    
+    if (item) 
+        return item->GetHelp();
+    else
+        return wxString("");
+}
+
 //-----------------------------------------------------------------------------
 // "activate"
 //-----------------------------------------------------------------------------
@@ -262,9 +280,8 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu )
 
     if (!menu->IsEnabled(id)) return;
 
-    wxCommandEvent event( wxEVT_MENU_HIGHLIGHT, id );
+    wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id );
     event.SetEventObject( menu );
-    event.SetInt(id );
 
 /*   wxMSW doesn't call callback here either
 
index d809e69266c841908d757ab7eba50c5f07af6ac2..af7887cf2c00a452b956611effea1c9f4630bc51 100644 (file)
@@ -105,6 +105,7 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
 BEGIN_EVENT_TABLE(wxFrame, wxWindow)
     EVT_SIZE(wxFrame::OnSize)
     EVT_CLOSE(wxFrame::OnCloseWindow)
+    EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight)
 END_EVENT_TABLE()
 
 IMPLEMENT_DYNAMIC_CLASS(wxFrame,wxWindow)
@@ -564,6 +565,29 @@ wxMenuBar *wxFrame::GetMenuBar() const
     return m_frameMenuBar;
 }
 
+void wxFrame::OnMenuHighlight(wxMenuEvent& event)
+{
+    if (GetStatusBar())
+    {
+        if (event.GetMenuId() == -1)
+       {
+            SetStatusText("");
+       }
+        else
+        {
+            wxMenuBar *menuBar = GetMenuBar();
+            if (menuBar)
+            {
+                int menuId = event.GetMenuId();
+                wxString helpString;
+                helpString = menuBar->GetHelpString(menuId);
+                if (helpString != "")
+                    SetStatusText(helpString);
+            }
+        }
+    }
+}
+
 wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
 {
     wxASSERT_MSG( (m_widget != NULL), "invalid frame" );
index 27173bba72aa076026e03ede4fb502f4af362789..110c8f958f4a634dadd92713e2398abd43453911 100644 (file)
@@ -152,6 +152,7 @@ bool wxMenuBar::Enabled( int id ) const
 {
     wxMenuItem* item = FindMenuItemById( id );
     if (item) return item->IsEnabled();
+    
     return FALSE;
 }
 
@@ -161,7 +162,7 @@ wxString wxMenuBar::GetLabel( int id ) const
     
     if (item) return item->GetText();
     
-    return "";
+    return wxString("");
 }
 
 void wxMenuBar::SetLabel( int id, const wxString &label )
@@ -204,6 +205,23 @@ void wxMenuBar::SetLabelTop( int pos, const wxString& label )
     menu->SetTitle( label );
 }
 
+void wxMenuBar::SetHelpString( int id, const wxString& helpString )
+{
+    wxMenuItem* item = FindMenuItemById( id );
+    
+    if (item) item->SetHelp( helpString );
+}
+
+wxString wxMenuBar::GetHelpString( int id ) const
+{
+    wxMenuItem* item = FindMenuItemById( id );
+    
+    if (item) 
+        return item->GetHelp();
+    else
+        return wxString("");
+}
+
 //-----------------------------------------------------------------------------
 // "activate"
 //-----------------------------------------------------------------------------
@@ -262,9 +280,8 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu )
 
     if (!menu->IsEnabled(id)) return;
 
-    wxCommandEvent event( wxEVT_MENU_HIGHLIGHT, id );
+    wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id );
     event.SetEventObject( menu );
-    event.SetInt(id );
 
 /*   wxMSW doesn't call callback here either