]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/frame.cpp
New PyCrust files
[wxWidgets.git] / src / os2 / frame.cpp
index 838197f4d40cb3df3eb1d6b03c085c9500d8782a..e948ffeaf380a95d3fa49487f6241623f55163f7 100644 (file)
 extern wxWindowList wxModelessWindows;
 extern wxList WXDLLEXPORT wxPendingDelete;
 extern wxChar wxFrameClassName[];
+
+#if wxUSE_MENUS_NATIVE
 extern wxMenu *wxCurrentPopupMenu;
+#endif
 
-extern void  wxAssociateWinWithHandle( HWND      hWnd
-                                      ,wxWindow* pWin
+extern void  wxAssociateWinWithHandle( HWND         hWnd
+                                      ,wxWindowOS2* pWin
                                      );
 
 // ----------------------------------------------------------------------------
@@ -551,6 +554,7 @@ void wxFrame::PositionStatusBar()
 } // end of wxFrame::PositionStatusBar
 #endif // wxUSE_STATUSBAR
 
+#if wxUSE_MENUS_NATIVE
 void wxFrame::DetachMenuBar()
 {
     if (m_frameMenuBar)
@@ -609,10 +613,49 @@ void wxFrame::SetMenuBar(
         }
         InternalSetMenuBar();
         m_frameMenuBar = pMenuBar;
-        pMenuBar->Attach(this);
+        pMenuBar->Attach((wxFrame*)this);
     }
 } // end of wxFrame::SetMenuBar
 
+void wxFrame::AttachMenuBar(
+  wxMenuBar*                        pMenubar
+)
+{
+    wxFrameBase::AttachMenuBar(pMenubar);
+
+    m_frameMenuBar = pMenubar;
+
+    if (!pMenubar)
+    {
+        //
+        // Actually remove the menu from the frame
+        //
+        m_hMenu = (WXHMENU)0;
+        InternalSetMenuBar();
+    }
+    else // Set new non NULL menu bar
+    {
+        //
+        // Can set a menubar several times.
+        //
+        if (pMenubar->GetHMenu())
+        {
+            m_hMenu = pMenubar->GetHMenu();
+        }
+        else
+        {
+            if (pMenubar->IsAttached())
+                pMenubar->Detach();
+
+            m_hMenu = pMenubar->Create();
+
+            if (!m_hMenu)
+                return;
+        }
+        InternalSetMenuBar();
+    }
+} // end of wxFrame::AttachMenuBar
+
 void wxFrame::InternalSetMenuBar()
 {
     ERRORID                         vError;
@@ -635,6 +678,7 @@ void wxFrame::InternalSetMenuBar()
     }
     ::WinSendMsg(m_hFrame, WM_UPDATEFRAME, (MPARAM)FCF_MENU, (MPARAM)0);
 } // end of wxFrame::InternalSetMenuBar
+#endif // wxUSE_MENUS_NATIVE
 
 //
 // Responds to colour changes, and passes event on to children
@@ -677,11 +721,11 @@ bool wxFrame::ShowFullScreen(
         m_lFsStyle = lStyle;
 
 #if wxUSE_TOOLBAR
-           wxToolBar*                  pTheToolBar = GetToolBar();
+        wxToolBar*                  pTheToolBar = GetToolBar();
 #endif //wxUSE_TOOLBAR
 
 #if wxUSE_STATUSBAR
-           wxStatusBar*                pTheStatusBar = GetStatusBar();
+        wxStatusBar*                pTheStatusBar = GetStatusBar();
 #endif //wxUSE_STATUSBAR
 
         int                         nDummyWidth;
@@ -1254,10 +1298,10 @@ bool wxFrame::OS2TranslateMessage(
     //
     wxMenuBar*                      pMenuBar = GetMenuBar();
 
-    if (!pMenuBar )
+    if (!pMenuBar)
         return FALSE;
 
-#if wxUSE_ACCEL
+#if wxUSE_ACCEL && wxUSE_MENUS_NATIVE
     const wxAcceleratorTable&       rAcceleratorTable = pMenuBar->GetAccelTable();
     return rAcceleratorTable.Translate(GetHWND(), pMsg);
 #else
@@ -1430,6 +1474,7 @@ bool wxFrame::HandleCommand(
     //
     if (nCmd == CMDSRC_MENU || nCmd == CMDSRC_ACCELERATOR)
     {
+#if wxUSE_MENUS_NATIVE
         if (wxCurrentPopupMenu)
         {
             wxMenu*                 pPopupMenu = wxCurrentPopupMenu;
@@ -1439,7 +1484,9 @@ bool wxFrame::HandleCommand(
             return pPopupMenu->OS2Command( nCmd
                                           ,nId
                                          );
+            return TRUE;
         }
+#endif
 
         if (ProcessCommand(nId))
         {