]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/mdi.cpp
add accessors for sockaddr to wxSockAddress (closes #10511)
[wxWidgets.git] / src / msw / mdi.cpp
index 2d6109b3db36ed209e034581874dfb6c8ca587f9..7ea3a70a66172edd62caf939ca533a0fb5a060ff 100644 (file)
@@ -55,13 +55,19 @@ extern wxMenu *wxCurrentPopupMenu;
 
 extern void wxRemoveHandleAssociation(wxWindow *win);
 
+namespace
+{
+
 // ---------------------------------------------------------------------------
 // constants
 // ---------------------------------------------------------------------------
 
 // This range gives a maximum of 500 MDI children. Should be enough :-)
-static const int wxFIRST_MDI_CHILD = 4100;
-static const int wxLAST_MDI_CHILD = 4600;
+const int wxFIRST_MDI_CHILD = 4100;
+const int wxLAST_MDI_CHILD = 4600;
+
+// The MDI "Window" menu label
+const char *WINDOW_MENU_LABEL = gettext_noop("&Window");
 
 // ---------------------------------------------------------------------------
 // private functions
@@ -69,29 +75,31 @@ static const int wxLAST_MDI_CHILD = 4600;
 
 // set the MDI menus (by sending the WM_MDISETMENU message) and update the menu
 // of the parent of win (which is supposed to be the MDI client window)
-static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow);
+void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow);
 
 // insert the window menu (subMenu) into menu just before "Help" submenu or at
 // the very end if not found
-static void MDIInsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu);
+void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU subMenu);
 
 // Remove the window menu
-static void MDIRemoveWindowMenu(wxWindow *win, WXHMENU menu);
+void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu);
 
 // unpack the parameters of WM_MDIACTIVATE message
-static void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
-                              WXWORD *activate, WXHWND *hwndAct, WXHWND *hwndDeact);
+void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
+                       WXWORD *activate, WXHWND *hwndAct, WXHWND *hwndDeact);
 
 // return the HMENU of the MDI menu
 //
 // this function works correctly even when we don't have a window menu and just
 // returns 0 then
-static inline HMENU GetMDIWindowMenu(wxMDIParentFrame *frame)
+inline HMENU GetMDIWindowMenu(wxMDIParentFrame *frame)
 {
     wxMenu *menu = frame->GetWindowMenu();
     return menu ? GetHmenuOf(menu) : 0;
 }
 
+} // anonymous namespace
+
 // ===========================================================================
 // implementation
 // ===========================================================================
@@ -398,14 +406,17 @@ void wxMDIParentFrame::DoMenuUpdates(wxMenu* menu)
     }
 }
 
-const wxMenuItem *wxMDIParentFrame::FindItemInMenuBar(int menuId) const
+wxMenuItem *wxMDIParentFrame::FindItemInMenuBar(int menuId) const
 {
-    const wxMenuItem *item = wxFrame::FindItemInMenuBar(menuId);
+    wxMenuItem *item = wxFrame::FindItemInMenuBar(menuId);
     if ( !item && GetActiveChild() )
     {
         item = GetActiveChild()->FindItemInMenuBar(menuId);
     }
 
+    if ( !item && m_windowMenu )
+        item = m_windowMenu->FindItem(menuId);
+
     return item;
 }
 
@@ -675,15 +686,6 @@ void wxMDIParentFrame::OnMDICommand(wxCommandEvent& event)
     ::SendMessage(GetWinHwnd(GetClientWindow()), msg, wParam, lParam);
 }
 
-wxMenuItem *wxMDIParentFrame::MSWFindMenuBarItem(WXWORD id)
-{
-    wxMenuItem *mitem = wxFrame::MSWFindMenuBarItem(id);
-    if ( !mitem && m_windowMenu )
-        mitem = m_windowMenu->FindItem((signed short)id);
-
-    return mitem;
-}
-
 #endif // wxUSE_MENUS
 
 bool wxMDIParentFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND hwnd)
@@ -730,7 +732,7 @@ bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg)
     // but it doesn't check for the (custom) accelerators of the window menu
     // items as it's not part of the menu bar as it's handled by Windows itself
     // so we need to do this explicitly
-    if ( m_accelWindowMenu->Translate(this, msg) )
+    if ( m_accelWindowMenu && m_accelWindowMenu->Translate(this, msg) )
         return true;
 #endif // wxUSE_MENUS && wxUSE_ACCEL
 
@@ -1406,10 +1408,13 @@ void wxMDIChildFrame::OnIdle(wxIdleEvent& event)
 }
 
 // ---------------------------------------------------------------------------
-// non member functions
+// private helper functions
 // ---------------------------------------------------------------------------
 
-static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow)
+namespace
+{
+
+void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow)
 {
     if ( hmenuFrame || hmenuWindow )
     {
@@ -1435,61 +1440,62 @@ static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow)
     ::DrawMenuBar(GetWinHwnd(parent));
 }
 
-static void MDIInsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu)
+void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
 {
-    // Try to insert Window menu in front of Help, otherwise append it.
-    HMENU hmenu = (HMENU)menu;
+    HMENU hmenu = (HMENU)hMenu;
 
-    if (subMenu)
+    if ( menuWin )
     {
+        // Try to insert Window menu in front of Help, otherwise append it.
         int N = GetMenuItemCount(hmenu);
-        bool success = false;
+        bool inserted = false;
         for ( int i = 0; i < N; i++ )
         {
             wxChar buf[256];
-            int chars = GetMenuString(hmenu, i, buf, WXSIZEOF(buf), MF_BYPOSITION);
-            if ( chars == 0 )
+            if ( !::GetMenuString(hmenu, i, buf, WXSIZEOF(buf), MF_BYPOSITION) )
             {
                 wxLogLastError(wxT("GetMenuString"));
 
                 continue;
             }
 
-            wxString strBuf(buf);
-            if ( wxStripMenuCodes(strBuf) == wxGetStockLabel(wxID_HELP,false) )
+            const wxString label = wxStripMenuCodes(buf);
+            if ( label == wxGetStockLabel(wxID_HELP, wxSTOCK_NOFLAGS) )
             {
-                success = true;
+                inserted = true;
                 ::InsertMenu(hmenu, i, MF_BYPOSITION | MF_POPUP | MF_STRING,
-                             (UINT_PTR)subMenu, _("&Window").wx_str());
+                             (UINT_PTR)menuWin,
+                             wxGetTranslation(WINDOW_MENU_LABEL).wx_str());
                 break;
             }
         }
 
-        if ( !success )
+        if ( !inserted )
         {
             ::AppendMenu(hmenu, MF_POPUP,
-                         (UINT_PTR)subMenu, _("&Window").wx_str());
+                         (UINT_PTR)menuWin,
+                         wxGetTranslation(WINDOW_MENU_LABEL).wx_str());
         }
     }
 
-    MDISetMenu(win, hmenu, subMenu);
+    MDISetMenu(win, hmenu, menuWin);
 }
 
-static void MDIRemoveWindowMenu(wxWindow *win, WXHMENU menu)
+void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu)
 {
-    HMENU hMenu = (HMENU)menu;
+    HMENU hmenu = (HMENU)hMenu;
 
-    if ( hMenu )
+    if ( hmenu )
     {
         wxChar buf[1024];
 
-        int N = ::GetMenuItemCount(hMenu);
+        int N = ::GetMenuItemCount(hmenu);
         for ( int i = 0; i < N; i++ )
         {
-            if ( !::GetMenuString(hMenu, i, buf, WXSIZEOF(buf), MF_BYPOSITION) )
+            if ( !::GetMenuString(hmenu, i, buf, WXSIZEOF(buf), MF_BYPOSITION) )
             {
                 // Ignore successful read of menu string with length 0 which
-                // occurs, for example, for a maximized MDI childs system menu
+                // occurs, for example, for a maximized MDI child system menu
                 if ( ::GetLastError() != 0 )
                 {
                     wxLogLastError(wxT("GetMenuString"));
@@ -1498,9 +1504,9 @@ static void MDIRemoveWindowMenu(wxWindow *win, WXHMENU menu)
                 continue;
             }
 
-            if ( wxStrcmp(buf, _("&Window")) == 0 )
+            if ( wxStrcmp(buf, wxGetTranslation(WINDOW_MENU_LABEL)) == 0 )
             {
-                if ( !::RemoveMenu(hMenu, i, MF_BYPOSITION) )
+                if ( !::RemoveMenu(hmenu, i, MF_BYPOSITION) )
                 {
                     wxLogLastError(wxT("RemoveMenu"));
                 }
@@ -1513,11 +1519,11 @@ static void MDIRemoveWindowMenu(wxWindow *win, WXHMENU menu)
     if ( win )
     {
         // we don't change the windows menu, but we update the main one
-        MDISetMenu(win, hMenu, NULL);
+        MDISetMenu(win, hmenu, NULL);
     }
 }
 
-static void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
+void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
                               WXWORD *activate, WXHWND *hwndAct, WXHWND *hwndDeact)
 {
     *activate = true;
@@ -1525,4 +1531,6 @@ static void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
     *hwndDeact = (WXHWND)wParam;
 }
 
+} // anonymous namespace
+
 #endif // wxUSE_MDI && !defined(__WXUNIVERSAL__)