]> git.saurik.com Git - wxWidgets.git/commitdiff
Implemented tearoff menus, please see my posting to wxwin-developers.
authorKarsten Ballüder <ballueder@usa.net>
Thu, 17 Jun 1999 14:08:00 +0000 (14:08 +0000)
committerKarsten Ballüder <ballueder@usa.net>
Thu, 17 Jun 1999 14:08:00 +0000 (14:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
include/wx/defs.h
include/wx/gdicmn.h
include/wx/gtk/choice.h
include/wx/gtk/menu.h
include/wx/gtk1/choice.h
include/wx/gtk1/menu.h
samples/minimal/minimal.cpp
src/gtk/app.cpp
src/gtk/cursor.cpp
src/gtk/menu.cpp
src/gtk1/app.cpp
src/gtk1/cursor.cpp
src/gtk1/menu.cpp

index ae8cc520a5aaf43adff3e52d64e82001f062f74c..1cc239db8b365464d3ed04dca932d92eda9758e4 100644 (file)
@@ -618,7 +618,13 @@ enum wxOrientation
  */
 // use native docking
 #define wxMB_DOCKABLE       0x0001
+// make all menus tearoff menus, even if not set on per-menu basis
+#define wxMB_TEAROFF        0x0002
 
+/*
+ * wxMenu style flags
+ */
+#define wxMENU_TEAROFF      0x0001
 
 /*
  * Apply to all panel items
index a3f585fd2d24f92031d0938ebaf5e5bc041df691..78d36bd9205897be89d58126f13a34a408bbb384 100644 (file)
@@ -100,6 +100,9 @@ enum wxStockCursor
     wxCURSOR_WAIT,
     wxCURSOR_WATCH,
     wxCURSOR_BLANK,
+#ifdef __WXGTK__
+    wxCURSOR_DEFAULT, // standard X11 cursor
+#endif
 #ifdef __X__
     // Not yet implemented for Windows
     wxCURSOR_CROSS_REVERSE,
index 796d625f4b9c94f6ca477a1fb3de50731947445e..acd0324c00d40bd2705e4378544f8da51b514301 100644 (file)
@@ -16,8 +16,6 @@
 
 #include "wx/defs.h"
 
-#if wxUSE_CHOICE
-
 #include "wx/object.h"
 #include "wx/list.h"
 #include "wx/control.h"
@@ -99,6 +97,5 @@ public:
     void ApplyWidgetStyle();
 };
 
-#endif
 
 #endif // __GTKCHOICEH__
index f09ee3bc04adf91d2334e6c799669dce5e43eeb2..3638cee90e4b9d99145f3e6207a0673f91354ea6 100644 (file)
@@ -100,6 +100,7 @@ public:
     GtkItemFactory  *m_factory;
     wxList           m_menus;
     GtkWidget       *m_menubar;
+    long             m_style;
 };
 
 //-----------------------------------------------------------------------------
@@ -112,7 +113,9 @@ class wxMenu : public wxEvtHandler
 
 public:
     wxMenu( const wxString& title = wxEmptyString,
-            const wxFunction func = (wxFunction) NULL );
+            const wxFunction func = (wxFunction) NULL,
+            long style = 0);
+    wxMenu( long style );
     ~wxMenu();
 
     // operations
@@ -182,7 +185,13 @@ public:
     GtkAccelGroup   *m_accel;
     GtkItemFactory  *m_factory;
 
-private:
+    // used by wxMenuBar
+    inline long GetStyle(void) const { return m_style; }
+ private:
+    // common code for both constructors:
+    void Init( const wxString& title,
+               const wxFunction func,
+               long style);
 
     wxString       m_title;
     wxList         m_items;
@@ -190,6 +199,7 @@ private:
     wxFunction     m_callback;
     wxEvtHandler  *m_eventHandler;
     void          *m_clientData;
+    long           m_style;
 };
 
 #endif // __GTKMENUH__
index 796d625f4b9c94f6ca477a1fb3de50731947445e..acd0324c00d40bd2705e4378544f8da51b514301 100644 (file)
@@ -16,8 +16,6 @@
 
 #include "wx/defs.h"
 
-#if wxUSE_CHOICE
-
 #include "wx/object.h"
 #include "wx/list.h"
 #include "wx/control.h"
@@ -99,6 +97,5 @@ public:
     void ApplyWidgetStyle();
 };
 
-#endif
 
 #endif // __GTKCHOICEH__
index f09ee3bc04adf91d2334e6c799669dce5e43eeb2..3638cee90e4b9d99145f3e6207a0673f91354ea6 100644 (file)
@@ -100,6 +100,7 @@ public:
     GtkItemFactory  *m_factory;
     wxList           m_menus;
     GtkWidget       *m_menubar;
+    long             m_style;
 };
 
 //-----------------------------------------------------------------------------
@@ -112,7 +113,9 @@ class wxMenu : public wxEvtHandler
 
 public:
     wxMenu( const wxString& title = wxEmptyString,
-            const wxFunction func = (wxFunction) NULL );
+            const wxFunction func = (wxFunction) NULL,
+            long style = 0);
+    wxMenu( long style );
     ~wxMenu();
 
     // operations
@@ -182,7 +185,13 @@ public:
     GtkAccelGroup   *m_accel;
     GtkItemFactory  *m_factory;
 
-private:
+    // used by wxMenuBar
+    inline long GetStyle(void) const { return m_style; }
+ private:
+    // common code for both constructors:
+    void Init( const wxString& title,
+               const wxFunction func,
+               long style);
 
     wxString       m_title;
     wxList         m_items;
@@ -190,6 +199,7 @@ private:
     wxFunction     m_callback;
     wxEvtHandler  *m_eventHandler;
     void          *m_clientData;
+    long           m_style;
 };
 
 #endif // __GTKMENUH__
index 8db65d0ad9fc6e52c9f96cb51439bc046e368c55..945e2d8dc899bed17f4f7017aaffee2ad7eb973b 100644 (file)
@@ -149,14 +149,14 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     SetIcon(wxICON(mondrian));
 
     // create a menu bar
-    wxMenu *menuFile = new wxMenu;
+    wxMenu *menuFile = new wxMenu("File",NULL,wxMENU_TEAROFF);
 
     menuFile->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog");
     menuFile->AppendSeparator();
     menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
 
     // now append the freshly created menu to the menu bar...
-    wxMenuBar *menuBar = new wxMenuBar;
+    wxMenuBar *menuBar = new wxMenuBar();
     menuBar->Append(menuFile, "&File");
 
     // ... and attach this menu bar to the frame
index 1dd8ad95af0b4dd9dbd6dae0139849a3eaa39597..2b96d6903305581d984629f02b4dbcc10959026d 100644 (file)
@@ -44,6 +44,8 @@
 // global data
 //-----------------------------------------------------------------------------
 
+extern wxCursor g_globalCursor;
+
 wxApp *wxTheApp = (wxApp *)  NULL;
 wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL;
 
@@ -575,8 +577,7 @@ bool wxApp::Initialize()
 
     wxImage::InitStandardHandlers();
 
-    /* no global cursor under X
-       g_globalCursor = new wxCursor; */
+    g_globalCursor = wxCursor(wxCURSOR_DEFAULT);
 
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
index 2277c0aee4670e26c16370466e272addc53c1df2..9e96423d55f80902d8dfba601b062dc4a2a4dfc0 100644 (file)
@@ -64,6 +64,7 @@ wxCursor::wxCursor( int cursorId )
     GdkCursorType gdk_cur = GDK_LEFT_PTR;
     switch (cursorId)
     {
+        case wxCURSOR_DEFAULT:          gdk_cur = GDK_X_CURSOR; break;
         case wxCURSOR_HAND:             gdk_cur = GDK_HAND1; break;
         case wxCURSOR_CROSS:            gdk_cur = GDK_CROSSHAIR; break;
         case wxCURSOR_SIZEWE:           gdk_cur = GDK_SB_H_DOUBLE_ARROW; break;
index e2b79dbf829a6a1c3f3825aa301afa71a0d562f2..a267b1bab811eef8fb74f0deeed0bb1c7fa5e0b1 100644 (file)
@@ -37,7 +37,8 @@ wxMenuBar::wxMenuBar( long style )
 {
     /* the parent window is known after wxFrame::SetMenu() */
     m_needParent = FALSE; 
-
+    m_style = style;
+    
     PreCreation( (wxWindow *) NULL, -1, wxDefaultPosition, wxDefaultSize, style, "menu" );
 
     m_menus.DeleteContents( TRUE );
@@ -69,7 +70,8 @@ wxMenuBar::wxMenuBar()
 {
     /* the parent window is known after wxFrame::SetMenu() */
     m_needParent = FALSE;
-
+    m_style = 0;
+    
     PreCreation( (wxWindow *) NULL, -1, wxDefaultPosition, wxDefaultSize, 0, "menu" );
 
     m_menus.DeleteContents( TRUE );
@@ -216,7 +218,9 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
     entry.accelerator = (gchar*) NULL;
     entry.callback = (GtkItemFactoryCallback) NULL;
     entry.callback_action = 0;
-    entry.item_type = "<Branch>";
+    entry.item_type = (m_style & wxMB_TEAROFF || menu->GetStyle() &
+                       wxMENU_TEAROFF) ?
+       "<Tearoff>" : "<Branch>";
     
     gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
     
@@ -632,11 +636,23 @@ bool wxMenuItem::IsChecked() const
 
 IMPLEMENT_DYNAMIC_CLASS(wxMenu,wxEvtHandler)
 
-wxMenu::wxMenu( const wxString& title, const wxFunction func )
+wxMenu::wxMenu( const wxString& title, const wxFunction func, long style )
+{
+   Init(title, func, style);
+}
+
+wxMenu::wxMenu(long style)
+{
+   Init(wxEmptyString, (wxFunction) NULL, style);
+}
+
+void
+wxMenu::Init( const wxString& title, const wxFunction func, long style )
 {
     m_title = title;
     m_items.DeleteContents( TRUE );
     m_invokingWindow = (wxWindow *) NULL;
+    m_style = style;
     
 #if (GTK_MINOR_VERSION > 0)
     m_accel = gtk_accel_group_new();
@@ -829,7 +845,7 @@ void wxMenu::Append( int id, const wxString &item, wxMenu *subMenu, const wxStri
     entry.path = buf;
     entry.callback = (GtkItemFactoryCallback) 0;
     entry.callback_action = 0;
-    entry.item_type = "<Branch>";
+    entry.item_type = (m_style & wxMENU_TEAROFF) ? "<Tearoff>" : "<Branch>";
     
     gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
     
index 1dd8ad95af0b4dd9dbd6dae0139849a3eaa39597..2b96d6903305581d984629f02b4dbcc10959026d 100644 (file)
@@ -44,6 +44,8 @@
 // global data
 //-----------------------------------------------------------------------------
 
+extern wxCursor g_globalCursor;
+
 wxApp *wxTheApp = (wxApp *)  NULL;
 wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL;
 
@@ -575,8 +577,7 @@ bool wxApp::Initialize()
 
     wxImage::InitStandardHandlers();
 
-    /* no global cursor under X
-       g_globalCursor = new wxCursor; */
+    g_globalCursor = wxCursor(wxCURSOR_DEFAULT);
 
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
index 2277c0aee4670e26c16370466e272addc53c1df2..9e96423d55f80902d8dfba601b062dc4a2a4dfc0 100644 (file)
@@ -64,6 +64,7 @@ wxCursor::wxCursor( int cursorId )
     GdkCursorType gdk_cur = GDK_LEFT_PTR;
     switch (cursorId)
     {
+        case wxCURSOR_DEFAULT:          gdk_cur = GDK_X_CURSOR; break;
         case wxCURSOR_HAND:             gdk_cur = GDK_HAND1; break;
         case wxCURSOR_CROSS:            gdk_cur = GDK_CROSSHAIR; break;
         case wxCURSOR_SIZEWE:           gdk_cur = GDK_SB_H_DOUBLE_ARROW; break;
index e2b79dbf829a6a1c3f3825aa301afa71a0d562f2..a267b1bab811eef8fb74f0deeed0bb1c7fa5e0b1 100644 (file)
@@ -37,7 +37,8 @@ wxMenuBar::wxMenuBar( long style )
 {
     /* the parent window is known after wxFrame::SetMenu() */
     m_needParent = FALSE; 
-
+    m_style = style;
+    
     PreCreation( (wxWindow *) NULL, -1, wxDefaultPosition, wxDefaultSize, style, "menu" );
 
     m_menus.DeleteContents( TRUE );
@@ -69,7 +70,8 @@ wxMenuBar::wxMenuBar()
 {
     /* the parent window is known after wxFrame::SetMenu() */
     m_needParent = FALSE;
-
+    m_style = 0;
+    
     PreCreation( (wxWindow *) NULL, -1, wxDefaultPosition, wxDefaultSize, 0, "menu" );
 
     m_menus.DeleteContents( TRUE );
@@ -216,7 +218,9 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
     entry.accelerator = (gchar*) NULL;
     entry.callback = (GtkItemFactoryCallback) NULL;
     entry.callback_action = 0;
-    entry.item_type = "<Branch>";
+    entry.item_type = (m_style & wxMB_TEAROFF || menu->GetStyle() &
+                       wxMENU_TEAROFF) ?
+       "<Tearoff>" : "<Branch>";
     
     gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
     
@@ -632,11 +636,23 @@ bool wxMenuItem::IsChecked() const
 
 IMPLEMENT_DYNAMIC_CLASS(wxMenu,wxEvtHandler)
 
-wxMenu::wxMenu( const wxString& title, const wxFunction func )
+wxMenu::wxMenu( const wxString& title, const wxFunction func, long style )
+{
+   Init(title, func, style);
+}
+
+wxMenu::wxMenu(long style)
+{
+   Init(wxEmptyString, (wxFunction) NULL, style);
+}
+
+void
+wxMenu::Init( const wxString& title, const wxFunction func, long style )
 {
     m_title = title;
     m_items.DeleteContents( TRUE );
     m_invokingWindow = (wxWindow *) NULL;
+    m_style = style;
     
 #if (GTK_MINOR_VERSION > 0)
     m_accel = gtk_accel_group_new();
@@ -829,7 +845,7 @@ void wxMenu::Append( int id, const wxString &item, wxMenu *subMenu, const wxStri
     entry.path = buf;
     entry.callback = (GtkItemFactoryCallback) 0;
     entry.callback_action = 0;
-    entry.item_type = "<Branch>";
+    entry.item_type = (m_style & wxMENU_TEAROFF) ? "<Tearoff>" : "<Branch>";
     
     gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */