From b908d2244a4975ceda4e050744280bf07e9ff350 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 19 Jul 1999 22:17:40 +0000 Subject: [PATCH] wxMenu ctor made compatible again git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3058 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/menu.h | 31 ++++++++++++++++++++++--------- include/wx/gtk1/menu.h | 31 ++++++++++++++++++++++--------- include/wx/help.h | 2 ++ include/wx/msw/listbox.h | 2 ++ include/wx/msw/menu.h | 23 +++++++++++++++++++++-- src/gtk/menu.cpp | 19 +++++++++---------- src/gtk1/menu.cpp | 19 +++++++++---------- src/msw/listbox.cpp | 29 +++++++++++++++++++++++++++++ src/msw/menu.cpp | 8 ++++++-- 9 files changed, 122 insertions(+), 42 deletions(-) diff --git a/include/wx/gtk/menu.h b/include/wx/gtk/menu.h index 3638cee90e..78a429d065 100644 --- a/include/wx/gtk/menu.h +++ b/include/wx/gtk/menu.h @@ -92,7 +92,7 @@ public: // implementation only wxList& GetMenus() { return m_menus; } - + void SetInvokingWindow( wxWindow *win ); void UnsetInvokingWindow( wxWindow *win ); @@ -112,9 +112,17 @@ class wxMenu : public wxEvtHandler DECLARE_DYNAMIC_CLASS(wxMenu) public: - wxMenu( const wxString& title = wxEmptyString, - const wxFunction func = (wxFunction) NULL, - long style = 0); +#ifdef WXWIN_COMPATIBILITY + wxMenu( const wxString& title, const wxFunction func) + { + Init(title, 0, func); + } +#endif + wxMenu( const wxString& title = wxEmptyString, long style = 0 ) + { + Init(title, style, NULL); + } + wxMenu( long style ); ~wxMenu(); @@ -172,6 +180,8 @@ public: // compatibility: these functions are deprecated bool Enabled(int id) const { return IsEnabled(id); } bool Checked(int id) const { return IsChecked(id); } + + wxFunction m_callback; #endif // WXWIN_COMPATIBILITY // implementation @@ -186,17 +196,20 @@ public: GtkItemFactory *m_factory; // used by wxMenuBar - inline long GetStyle(void) const { return m_style; } - private: + long GetStyle(void) const { return m_style; } + +private: // common code for both constructors: void Init( const wxString& title, - const wxFunction func, - long style); + long style +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func +#endif + ); wxString m_title; wxList m_items; wxWindow *m_invokingWindow; - wxFunction m_callback; wxEvtHandler *m_eventHandler; void *m_clientData; long m_style; diff --git a/include/wx/gtk1/menu.h b/include/wx/gtk1/menu.h index 3638cee90e..78a429d065 100644 --- a/include/wx/gtk1/menu.h +++ b/include/wx/gtk1/menu.h @@ -92,7 +92,7 @@ public: // implementation only wxList& GetMenus() { return m_menus; } - + void SetInvokingWindow( wxWindow *win ); void UnsetInvokingWindow( wxWindow *win ); @@ -112,9 +112,17 @@ class wxMenu : public wxEvtHandler DECLARE_DYNAMIC_CLASS(wxMenu) public: - wxMenu( const wxString& title = wxEmptyString, - const wxFunction func = (wxFunction) NULL, - long style = 0); +#ifdef WXWIN_COMPATIBILITY + wxMenu( const wxString& title, const wxFunction func) + { + Init(title, 0, func); + } +#endif + wxMenu( const wxString& title = wxEmptyString, long style = 0 ) + { + Init(title, style, NULL); + } + wxMenu( long style ); ~wxMenu(); @@ -172,6 +180,8 @@ public: // compatibility: these functions are deprecated bool Enabled(int id) const { return IsEnabled(id); } bool Checked(int id) const { return IsChecked(id); } + + wxFunction m_callback; #endif // WXWIN_COMPATIBILITY // implementation @@ -186,17 +196,20 @@ public: GtkItemFactory *m_factory; // used by wxMenuBar - inline long GetStyle(void) const { return m_style; } - private: + long GetStyle(void) const { return m_style; } + +private: // common code for both constructors: void Init( const wxString& title, - const wxFunction func, - long style); + long style +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func +#endif + ); wxString m_title; wxList m_items; wxWindow *m_invokingWindow; - wxFunction m_callback; wxEvtHandler *m_eventHandler; void *m_clientData; long m_style; diff --git a/include/wx/help.h b/include/wx/help.h index 98f7cee571..704244ae09 100644 --- a/include/wx/help.h +++ b/include/wx/help.h @@ -6,6 +6,8 @@ #ifdef __WXMSW__ #include "wx/msw/helpwin.h" + #undef wxHelpController + #undef sm_classwxHelpController #define wxHelpController wxWinHelpController #define sm_classwxHelpController sm_classwxWinHelpController #else // !MSW diff --git a/include/wx/msw/listbox.h b/include/wx/msw/listbox.h index 03f08992db..faf42ede5f 100644 --- a/include/wx/msw/listbox.h +++ b/include/wx/msw/listbox.h @@ -129,6 +129,8 @@ protected: int m_noItems; int m_selected; + virtual wxSize DoGetBestSize(); + #if wxUSE_OWNER_DRAWN // control items wxListBoxItemsArray m_aItems; diff --git a/include/wx/msw/menu.h b/include/wx/msw/menu.h index c36a5fced2..ed9641b35b 100644 --- a/include/wx/msw/menu.h +++ b/include/wx/msw/menu.h @@ -36,8 +36,20 @@ class WXDLLEXPORT wxMenu : public wxEvtHandler DECLARE_DYNAMIC_CLASS(wxMenu) public: - // ctor & dtor - wxMenu(const wxString& title = wxEmptyString, const wxFunction func = NULL); + // ctors & dtor +#ifdef WXWIN_COMPATIBILITY + wxMenu(const wxString& title, + const wxFunction func) + { + Init(title, func); + } +#endif + + wxMenu(const wxString& title = wxEmptyString, long WXUNUSED(style) = 0) + { + Init(title); + } + virtual ~wxMenu(); // construct menu @@ -143,6 +155,13 @@ private: #endif // WXWIN_COMPATIBILITY private: + // common part of all ctors + void Init(const wxString& title +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func = NULL +#endif + ); + bool m_doBreak; // This is used when m_hMenu is NULL because we don't want to diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index e56b4632f7..34d188bfb1 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -501,15 +501,6 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu ) wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id ); event.SetEventObject( menu ); -/* wxMSW doesn't call callback here either - - if (menu->m_callback) - { - (void) (*(menu->m_callback)) (*menu, event); - return; - } -*/ - if (menu->GetEventHandler()->ProcessEvent(event)) return; @@ -646,7 +637,12 @@ wxMenu::wxMenu(long style) } void -wxMenu::Init( const wxString& title, const wxFunction func, long style ) +wxMenu::Init( const wxString& title, + long style, +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func +#endif + ) { m_title = title; m_items.DeleteContents( TRUE ); @@ -661,7 +657,10 @@ wxMenu::Init( const wxString& title, const wxFunction func, long style ) m_menu = gtk_menu_new(); // Do not show! #endif +#ifdef WXWIN_COMPATIBILITY m_callback = func; +#endif + m_eventHandler = this; m_clientData = (void*) NULL; diff --git a/src/gtk1/menu.cpp b/src/gtk1/menu.cpp index e56b4632f7..34d188bfb1 100644 --- a/src/gtk1/menu.cpp +++ b/src/gtk1/menu.cpp @@ -501,15 +501,6 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu ) wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id ); event.SetEventObject( menu ); -/* wxMSW doesn't call callback here either - - if (menu->m_callback) - { - (void) (*(menu->m_callback)) (*menu, event); - return; - } -*/ - if (menu->GetEventHandler()->ProcessEvent(event)) return; @@ -646,7 +637,12 @@ wxMenu::wxMenu(long style) } void -wxMenu::Init( const wxString& title, const wxFunction func, long style ) +wxMenu::Init( const wxString& title, + long style, +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func +#endif + ) { m_title = title; m_items.DeleteContents( TRUE ); @@ -661,7 +657,10 @@ wxMenu::Init( const wxString& title, const wxFunction func, long style ) m_menu = gtk_menu_new(); // Do not show! #endif +#ifdef WXWIN_COMPATIBILITY m_callback = func; +#endif + m_eventHandler = this; m_clientData = (void*) NULL; diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index b14384f8cf..29f900bc89 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -650,6 +650,35 @@ bool wxListBox::SetStringSelection (const wxString& s, bool flag) return FALSE; } +wxSize wxListBox::DoGetBestSize() +{ + // find the widest string + int wLine; + int wListbox = 0; + for ( int i = 0; i < m_noItems; i++ ) + { + wxString str(GetString(i)); + GetTextExtent(str, &wLine, NULL); + if ( wLine > wListbox ) + wListbox = wLine; + } + + // give it some reasonable default value if there are no strings in the + // list + if ( wListbox == 0 ) + wListbox = 100; + + // the listbox should be slightly larger than the widest string + int cx, cy; + wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); + + wListbox += 3*cx; + + int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*(wxMax(m_noItems, 7)); + + return wxSize(wListbox, hListbox); +} + // Is this the right thing? Won't setselection generate a command // event too? No! It'll just generate a setselection event. // But we still can't have this being called whenever a real command diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index ef870cc461..fee40a5cee 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -78,9 +78,13 @@ static const int idMenuTitle = -2; // --------------------------------------------------------------------------- // Construct a menu with optional title (then use append) -wxMenu::wxMenu(const wxString& title, const wxFunction func) - : m_title(title) +void wxMenu::Init(const wxString& title +#ifdef WXWIN_COMPATIBILITY + , const wxFunction func +#endif + ) { + m_title = title; m_parent = NULL; m_eventHandler = this; m_pInvokingWindow = NULL; -- 2.45.2