Simplify wxMSW wxMenuBar title management.
Store the titles of the menu bar menus in the menu objects themselves. This makes wxMenu::GetTitle() return the expected result for them (which also fixes the current unit test failures for wxMSW) and makes wxMenuBar code simpler. This removes the wxMenuInfo class which existed for XTI purposes only but as it was apparently unfinished and MSW-specific it shouldn't be a big loss. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66178 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
5d4510dc48
commit
7ee9a64bd6
@ -154,25 +154,6 @@ private:
|
||||
// Menu Bar (a la Windows)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMenuInfo : public wxObject
|
||||
{
|
||||
public :
|
||||
wxMenuInfo() { m_menu = NULL; }
|
||||
virtual ~wxMenuInfo() { }
|
||||
|
||||
void Create( wxMenu *menu , const wxString &title )
|
||||
{ m_menu = menu; m_title = title; }
|
||||
wxMenu* GetMenu() const { return m_menu; }
|
||||
wxString GetTitle() const { return m_title; }
|
||||
private :
|
||||
wxMenu *m_menu;
|
||||
wxString m_title;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxMenuInfo)
|
||||
};
|
||||
|
||||
WX_DECLARE_EXPORTED_LIST(wxMenuInfo, wxMenuInfoList );
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
|
||||
{
|
||||
public:
|
||||
@ -186,9 +167,6 @@ public:
|
||||
virtual ~wxMenuBar();
|
||||
|
||||
// menubar construction
|
||||
bool Append( wxMenuInfo *info ) { return Append( info->GetMenu() , info->GetTitle() ); }
|
||||
const wxMenuInfoList& GetMenuInfos() const;
|
||||
|
||||
virtual bool Append( wxMenu *menu, const wxString &title );
|
||||
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
|
||||
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
|
||||
@ -234,9 +212,6 @@ protected:
|
||||
// common part of all ctors
|
||||
void Init();
|
||||
|
||||
wxArrayString m_titles;
|
||||
wxMenuInfoList m_menuInfos;
|
||||
|
||||
WXHMENU m_hMenu;
|
||||
|
||||
// Return the MSW position for a wxMenu which is sometimes different from
|
||||
|
@ -163,8 +163,6 @@ inline bool IsGreaterThanStdSize(const wxBitmap& bmp)
|
||||
|
||||
#include "wx/listimpl.cpp"
|
||||
|
||||
WX_DEFINE_LIST( wxMenuInfoList )
|
||||
|
||||
#if wxUSE_EXTENDED_RTTI
|
||||
|
||||
WX_DEFINE_FLAGS( wxMenuStyle )
|
||||
@ -210,27 +208,6 @@ IMPLEMENT_DYNAMIC_CLASS_XTI_CALLBACK(wxMenuBar, wxWindow ,"wx/menu.h",wxMenuBarS
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS_XTI(wxMenuInfo, wxObject , "wx/menu.h" )
|
||||
|
||||
wxBEGIN_PROPERTIES_TABLE(wxMenuInfo)
|
||||
wxREADONLY_PROPERTY( Menu , wxMenu* , GetMenu , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
|
||||
wxREADONLY_PROPERTY( Title , wxString , GetTitle , wxString() , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
|
||||
wxEND_PROPERTIES_TABLE()
|
||||
|
||||
wxBEGIN_HANDLERS_TABLE(wxMenuInfo)
|
||||
wxEND_HANDLERS_TABLE()
|
||||
|
||||
wxCONSTRUCTOR_2( wxMenuInfo , wxMenu* , Menu , wxString , Title )
|
||||
|
||||
wxCOLLECTION_TYPE_INFO( wxMenuInfo * , wxMenuInfoList ) ;
|
||||
|
||||
template<> void wxCollectionToVariantArray( wxMenuInfoList const &theList, wxxVariantArray &value)
|
||||
{
|
||||
wxListCollectionToVariantArray<wxMenuInfoList::compatibility_iterator>( theList , value ) ;
|
||||
}
|
||||
|
||||
wxBEGIN_PROPERTIES_TABLE(wxMenuBar)
|
||||
wxPROPERTY_COLLECTION( MenuInfos , wxMenuInfoList , wxMenuInfo* , Append , GetMenuInfos , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
|
||||
wxEND_PROPERTIES_TABLE()
|
||||
|
||||
wxBEGIN_HANDLERS_TABLE(wxMenuBar)
|
||||
wxEND_HANDLERS_TABLE()
|
||||
|
||||
@ -239,22 +216,8 @@ wxCONSTRUCTOR_DUMMY( wxMenuBar )
|
||||
#else
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxWindow)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenuInfo, wxObject)
|
||||
#endif
|
||||
|
||||
const wxMenuInfoList& wxMenuBar::GetMenuInfos() const
|
||||
{
|
||||
wxMenuInfoList* list = const_cast< wxMenuInfoList* >( &m_menuInfos ) ;
|
||||
WX_CLEAR_LIST( wxMenuInfoList , *list ) ;
|
||||
for( size_t i = 0 ; i < GetMenuCount() ; ++i )
|
||||
{
|
||||
wxMenuInfo* info = new wxMenuInfo() ;
|
||||
info->Create( const_cast<wxMenuBar*>(this)->GetMenu(i) , GetMenuLabel(i) ) ;
|
||||
list->Append( info ) ;
|
||||
}
|
||||
return m_menuInfos ;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxMenu construction, adding and removing menu items
|
||||
// ---------------------------------------------------------------------------
|
||||
@ -1013,12 +976,13 @@ wxMenuBar::wxMenuBar(size_t count, wxMenu *menus[], const wxString titles[], lon
|
||||
{
|
||||
Init();
|
||||
|
||||
m_titles.Alloc(count);
|
||||
|
||||
for ( size_t i = 0; i < count; i++ )
|
||||
{
|
||||
// We just want to store the menu title in the menu itself, not to
|
||||
// show it as a dummy item in the menu itself as we do with the popup
|
||||
// menu titles in overridden wxMenu::SetTitle().
|
||||
menus[i]->wxMenuBase::SetTitle(titles[i]);
|
||||
m_menus.Append(menus[i]);
|
||||
m_titles.Add(titles[i]);
|
||||
|
||||
menus[i]->Attach(this);
|
||||
}
|
||||
@ -1131,13 +1095,13 @@ WXHMENU wxMenuBar::Create()
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t count = GetMenuCount(), i;
|
||||
wxMenuList::iterator it;
|
||||
for ( i = 0, it = m_menus.begin(); i < count; i++, it++ )
|
||||
for ( wxMenuList::iterator it = m_menus.begin();
|
||||
it != m_menus.end();
|
||||
++it )
|
||||
{
|
||||
if ( !::AppendMenu((HMENU)m_hMenu, MF_POPUP | MF_STRING,
|
||||
(UINT_PTR)(*it)->GetHMenu(),
|
||||
m_titles[i].wx_str()) )
|
||||
(*it)->GetTitle().wx_str()) )
|
||||
{
|
||||
wxLogLastError(wxT("AppendMenu"));
|
||||
}
|
||||
@ -1198,7 +1162,7 @@ void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label)
|
||||
{
|
||||
wxCHECK_RET( pos < GetMenuCount(), wxT("invalid menu index") );
|
||||
|
||||
m_titles[pos] = label;
|
||||
m_menus[pos]->wxMenuBase::SetTitle(label);
|
||||
|
||||
if ( !IsAttached() )
|
||||
{
|
||||
@ -1257,7 +1221,7 @@ wxString wxMenuBar::GetMenuLabel(size_t pos) const
|
||||
wxCHECK_MSG( pos < GetMenuCount(), wxEmptyString,
|
||||
wxT("invalid menu index in wxMenuBar::GetMenuLabel") );
|
||||
|
||||
return m_titles[pos];
|
||||
return m_menus[pos]->GetTitle();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@ -1270,7 +1234,7 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
||||
if ( !menuOld )
|
||||
return NULL;
|
||||
|
||||
m_titles[pos] = title;
|
||||
menu->wxMenuBase::SetTitle(title);
|
||||
|
||||
#if defined(WINCE_WITHOUT_COMMANDBAR)
|
||||
if (IsAttached())
|
||||
@ -1327,7 +1291,7 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
||||
if ( !wxMenuBarBase::Insert(pos, menu, title) )
|
||||
return false;
|
||||
|
||||
m_titles.Insert(title, pos);
|
||||
menu->wxMenuBase::SetTitle(title);
|
||||
|
||||
if ( isAttached )
|
||||
{
|
||||
@ -1383,7 +1347,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
|
||||
if ( !wxMenuBarBase::Append(menu, title) )
|
||||
return false;
|
||||
|
||||
m_titles.Add(title);
|
||||
menu->wxMenuBase::SetTitle(title);
|
||||
|
||||
#if defined(WINCE_WITHOUT_COMMANDBAR)
|
||||
if (IsAttached())
|
||||
@ -1474,8 +1438,6 @@ wxMenu *wxMenuBar::Remove(size_t pos)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
m_titles.RemoveAt(pos);
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user