Change storage of window menu label translation
Use member variable instead of global variable
This commit is contained in:
@@ -85,6 +85,12 @@ public:
|
|||||||
virtual void RemoveMDIChild(wxMDIChildFrame *child);
|
virtual void RemoveMDIChild(wxMDIChildFrame *child);
|
||||||
#endif // wxUSE_MENUS
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
|
// called by AddWindowMenu to remember the translation of the window menu label
|
||||||
|
void SetWindowMenuLabelTranslated();
|
||||||
|
|
||||||
|
// called by AddWindowMenu and RemoveWindowMenu to get the last used translation of the window menu label
|
||||||
|
const wxString GetWindowMenuLabelTranslated() const;
|
||||||
|
|
||||||
// handlers
|
// handlers
|
||||||
// --------
|
// --------
|
||||||
|
|
||||||
@@ -150,6 +156,9 @@ private:
|
|||||||
// it was "handled", see OnActivate() and HandleActivate()
|
// it was "handled", see OnActivate() and HandleActivate()
|
||||||
bool m_activationNotHandled;
|
bool m_activationNotHandled;
|
||||||
|
|
||||||
|
// holds the current translation for the window menu label
|
||||||
|
wxString m_windowMenuLabelTranslated;
|
||||||
|
|
||||||
|
|
||||||
friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
|
friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
|
||||||
|
|
||||||
|
@@ -77,7 +77,6 @@ const int wxID_MDI_MORE_WINDOWS = wxLAST_MDI_CHILD + 1;
|
|||||||
|
|
||||||
// The MDI "Window" menu label
|
// The MDI "Window" menu label
|
||||||
const char *WINDOW_MENU_LABEL = gettext_noop("&Window");
|
const char *WINDOW_MENU_LABEL = gettext_noop("&Window");
|
||||||
wxString WINDOW_MENU_LABEL_TRANSLATED;
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// private functions
|
// private functions
|
||||||
@@ -89,10 +88,10 @@ void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow);
|
|||||||
|
|
||||||
// insert the window menu (subMenu) into menu just before "Help" submenu or at
|
// insert the window menu (subMenu) into menu just before "Help" submenu or at
|
||||||
// the very end if not found
|
// the very end if not found
|
||||||
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU subMenu);
|
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU subMenu, const wxString& windowMenuLabelTranslated);
|
||||||
|
|
||||||
// Remove the window menu
|
// Remove the window menu
|
||||||
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu);
|
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu, const wxString& windowMenuLabelTranslated);
|
||||||
|
|
||||||
// unpack the parameters of WM_MDIACTIVATE message
|
// unpack the parameters of WM_MDIACTIVATE message
|
||||||
void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
|
void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
|
||||||
@@ -278,6 +277,16 @@ int wxMDIParentFrame::GetChildFramesCount() const
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxMDIParentFrame::SetWindowMenuLabelTranslated()
|
||||||
|
{
|
||||||
|
m_windowMenuLabelTranslated = wxGetTranslation(WINDOW_MENU_LABEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxString wxMDIParentFrame::GetWindowMenuLabelTranslated() const
|
||||||
|
{
|
||||||
|
return m_windowMenuLabelTranslated;
|
||||||
|
}
|
||||||
|
|
||||||
#if wxUSE_MENUS
|
#if wxUSE_MENUS
|
||||||
|
|
||||||
void wxMDIParentFrame::AddMDIChild(wxMDIChildFrame * WXUNUSED(child))
|
void wxMDIParentFrame::AddMDIChild(wxMDIChildFrame * WXUNUSED(child))
|
||||||
@@ -335,7 +344,8 @@ void wxMDIParentFrame::AddWindowMenu()
|
|||||||
// attach it to the menu bar.
|
// attach it to the menu bar.
|
||||||
m_windowMenu->Attach(GetMenuBar());
|
m_windowMenu->Attach(GetMenuBar());
|
||||||
|
|
||||||
MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this));
|
SetWindowMenuLabelTranslated();
|
||||||
|
MDIInsertWindowMenu(GetClientWindow(), m_hMenu, GetMDIWindowMenu(this), GetWindowMenuLabelTranslated());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +353,7 @@ void wxMDIParentFrame::RemoveWindowMenu()
|
|||||||
{
|
{
|
||||||
if ( m_windowMenu )
|
if ( m_windowMenu )
|
||||||
{
|
{
|
||||||
MDIRemoveWindowMenu(GetClientWindow(), m_hMenu);
|
MDIRemoveWindowMenu(GetClientWindow(), m_hMenu, GetWindowMenuLabelTranslated());
|
||||||
|
|
||||||
m_windowMenu->Detach();
|
m_windowMenu->Detach();
|
||||||
}
|
}
|
||||||
@@ -927,7 +937,7 @@ wxMDIChildFrame::~wxMDIChildFrame()
|
|||||||
|
|
||||||
DestroyChildren();
|
DestroyChildren();
|
||||||
|
|
||||||
MDIRemoveWindowMenu(NULL, m_hMenu);
|
MDIRemoveWindowMenu(NULL, m_hMenu, parent->GetWindowMenuLabelTranslated());
|
||||||
|
|
||||||
// MDIRemoveWindowMenu() doesn't update the MDI menu when called with NULL
|
// MDIRemoveWindowMenu() doesn't update the MDI menu when called with NULL
|
||||||
// window, so do it ourselves.
|
// window, so do it ourselves.
|
||||||
@@ -1048,12 +1058,14 @@ void wxMDIChildFrame::InternalSetMenuBar()
|
|||||||
wxMDIParentFrame * const parent = GetMDIParent();
|
wxMDIParentFrame * const parent = GetMDIParent();
|
||||||
|
|
||||||
MDIInsertWindowMenu(parent->GetClientWindow(),
|
MDIInsertWindowMenu(parent->GetClientWindow(),
|
||||||
m_hMenu, GetMDIWindowMenu(parent));
|
m_hMenu, GetMDIWindowMenu(parent), parent->GetWindowMenuLabelTranslated());
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMDIChildFrame::DetachMenuBar()
|
void wxMDIChildFrame::DetachMenuBar()
|
||||||
{
|
{
|
||||||
MDIRemoveWindowMenu(NULL, m_hMenu);
|
wxMDIParentFrame * const parent = GetMDIParent();
|
||||||
|
|
||||||
|
MDIRemoveWindowMenu(NULL, m_hMenu, parent->GetWindowMenuLabelTranslated());
|
||||||
wxFrame::DetachMenuBar();
|
wxFrame::DetachMenuBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1553,7 +1565,7 @@ private:
|
|||||||
wxDECLARE_NO_COPY_CLASS(MenuIterator);
|
wxDECLARE_NO_COPY_CLASS(MenuIterator);
|
||||||
};
|
};
|
||||||
|
|
||||||
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
|
void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin, const wxString& windowMenuLabelTranslated)
|
||||||
{
|
{
|
||||||
HMENU hmenu = (HMENU)hMenu;
|
HMENU hmenu = (HMENU)hMenu;
|
||||||
|
|
||||||
@@ -1563,7 +1575,6 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
|
|||||||
bool inserted = false;
|
bool inserted = false;
|
||||||
wxString buf;
|
wxString buf;
|
||||||
MenuIterator it(hmenu);
|
MenuIterator it(hmenu);
|
||||||
WINDOW_MENU_LABEL_TRANSLATED = wxGetTranslation(WINDOW_MENU_LABEL);
|
|
||||||
while ( it.GetNext(buf) )
|
while ( it.GetNext(buf) )
|
||||||
{
|
{
|
||||||
const wxString label = wxStripMenuCodes(buf);
|
const wxString label = wxStripMenuCodes(buf);
|
||||||
@@ -1573,7 +1584,7 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
|
|||||||
::InsertMenu(hmenu, it.GetPos(),
|
::InsertMenu(hmenu, it.GetPos(),
|
||||||
MF_BYPOSITION | MF_POPUP | MF_STRING,
|
MF_BYPOSITION | MF_POPUP | MF_STRING,
|
||||||
(UINT_PTR)menuWin,
|
(UINT_PTR)menuWin,
|
||||||
WINDOW_MENU_LABEL_TRANSLATED.t_str());
|
windowMenuLabelTranslated.t_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1582,14 +1593,14 @@ void MDIInsertWindowMenu(wxWindow *win, WXHMENU hMenu, HMENU menuWin)
|
|||||||
{
|
{
|
||||||
::AppendMenu(hmenu, MF_POPUP,
|
::AppendMenu(hmenu, MF_POPUP,
|
||||||
(UINT_PTR)menuWin,
|
(UINT_PTR)menuWin,
|
||||||
WINDOW_MENU_LABEL_TRANSLATED.t_str());
|
windowMenuLabelTranslated.t_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MDISetMenu(win, hmenu, menuWin);
|
MDISetMenu(win, hmenu, menuWin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu)
|
void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu, const wxString& windowMenuLabelTranslated)
|
||||||
{
|
{
|
||||||
HMENU hmenu = (HMENU)hMenu;
|
HMENU hmenu = (HMENU)hMenu;
|
||||||
|
|
||||||
@@ -1599,7 +1610,7 @@ void MDIRemoveWindowMenu(wxWindow *win, WXHMENU hMenu)
|
|||||||
MenuIterator it(hmenu);
|
MenuIterator it(hmenu);
|
||||||
while ( it.GetNext(buf) )
|
while ( it.GetNext(buf) )
|
||||||
{
|
{
|
||||||
if ( wxStrcmp(buf, WINDOW_MENU_LABEL_TRANSLATED) == 0 )
|
if ( wxStrcmp(buf, windowMenuLabelTranslated) == 0 )
|
||||||
{
|
{
|
||||||
if ( !::RemoveMenu(hmenu, it.GetPos(), MF_BYPOSITION) )
|
if ( !::RemoveMenu(hmenu, it.GetPos(), MF_BYPOSITION) )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user