| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/osx/menu.h
- // Purpose: wxMenu, wxMenuBar classes
- // Author: Stefan Csomor
- // Modified by:
- // Created: 1998-01-01
- // Copyright: (c) Stefan Csomor
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_MENU_H_
- #define _WX_MENU_H_
- class WXDLLIMPEXP_FWD_CORE wxFrame;
- #include "wx/arrstr.h"
- // ----------------------------------------------------------------------------
- // Menu
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxMenuImpl ;
- class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
- {
- public:
- // ctors & dtor
- wxMenu(const wxString& title, long style = 0)
- : wxMenuBase(title, style) { Init(); }
- wxMenu(long style = 0) : wxMenuBase(style) { Init(); }
- virtual ~wxMenu();
- virtual void Break();
- virtual void SetTitle(const wxString& title);
- bool ProcessCommand(wxCommandEvent& event);
- // get the menu handle
- WXHMENU GetHMenu() const ;
- // implementation only from now on
- // -------------------------------
- bool HandleCommandUpdateStatus( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
- bool HandleCommandProcess( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
- void HandleMenuItemHighlighted( wxMenuItem* menuItem );
- void HandleMenuOpened();
- void HandleMenuClosed();
- wxMenuImpl* GetPeer() { return m_peer; }
- // make sure we can veto
- void SetAllowRearrange( bool allow );
- bool AllowRearrange() const { return m_allowRearrange; }
- // if a menu is used purely for internal implementation reasons (eg wxChoice)
- // we don't want native menu events being triggered
- void SetNoEventsMode( bool noEvents );
- bool GetNoEventsMode() const { return m_noEventsMode; }
- protected:
- // hide special menu items like exit, preferences etc
- // that are expected in the app menu
- void DoRearrange() ;
- bool DoHandleMenuEvent( wxEvent& evt );
- virtual wxMenuItem* DoAppend(wxMenuItem *item);
- virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
- virtual wxMenuItem* DoRemove(wxMenuItem *item);
- private:
- // common part of all ctors
- void Init();
- // common part of Do{Append,Insert}(): behaves as Append if pos == -1
- bool DoInsertOrAppend(wxMenuItem *item, size_t pos = (size_t)-1);
- // Common part of HandleMenu{Opened,Closed}().
- void DoHandleMenuOpenedOrClosed(wxEventType evtType);
- // if TRUE, insert a break before appending the next item
- bool m_doBreak;
- // in this menu rearranging of menu items (esp hiding) is allowed
- bool m_allowRearrange;
- // don't trigger native events
- bool m_noEventsMode;
- wxMenuImpl* m_peer;
- DECLARE_DYNAMIC_CLASS(wxMenu)
- };
- #if wxOSX_USE_COCOA_OR_CARBON
- // the iphone only has popup-menus
- // ----------------------------------------------------------------------------
- // Menu Bar (a la Windows)
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
- {
- public:
- // ctors & dtor
- // default constructor
- wxMenuBar();
- // unused under MSW
- wxMenuBar(long style);
- // menubar takes ownership of the menus arrays but copies the titles
- wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
- virtual ~wxMenuBar();
- // menubar construction
- 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);
- virtual wxMenu *Remove(size_t pos);
- virtual void EnableTop( size_t pos, bool flag );
- virtual bool IsEnabledTop(size_t pos) const;
- virtual void SetMenuLabel( size_t pos, const wxString& label );
- virtual wxString GetMenuLabel( size_t pos ) const;
- virtual bool Enable( bool enable = true );
- // for virtual function hiding
- virtual void Enable( int itemid, bool enable )
- {
- wxMenuBarBase::Enable( itemid, enable );
- }
- // implementation from now on
- void Detach();
- // returns TRUE if we're attached to a frame
- bool IsAttached() const { return m_menuBarFrame != NULL; }
- // get the frame we live in
- wxFrame *GetFrame() const { return m_menuBarFrame; }
- // attach to a frame
- void Attach(wxFrame *frame);
- // if the menubar is modified, the display is not updated automatically,
- // call this function to update it (m_menuBarFrame should be !NULL)
- void Refresh(bool eraseBackground = true, const wxRect *rect = NULL);
- #if wxABI_VERSION >= 30001
- wxMenu *OSXGetAppleMenu() const { return m_appleMenu; }
- #endif
- static void SetAutoWindowMenu( bool enable ) { s_macAutoWindowMenu = enable ; }
- static bool GetAutoWindowMenu() { return s_macAutoWindowMenu ; }
- void MacInstallMenuBar() ;
- static wxMenuBar* MacGetInstalledMenuBar() { return s_macInstalledMenuBar ; }
- static void MacSetCommonMenuBar(wxMenuBar* menubar) { s_macCommonMenuBar=menubar; }
- static wxMenuBar* MacGetCommonMenuBar() { return s_macCommonMenuBar; }
- static WXHMENU MacGetWindowMenuHMenu() { return s_macWindowMenuHandle ; }
- protected:
- // common part of all ctors
- void Init();
- static bool s_macAutoWindowMenu ;
- static WXHMENU s_macWindowMenuHandle ;
- private:
- static wxMenuBar* s_macInstalledMenuBar ;
- static wxMenuBar* s_macCommonMenuBar ;
- wxMenu* m_rootMenu;
- wxMenu* m_appleMenu;
- DECLARE_DYNAMIC_CLASS(wxMenuBar)
- };
- #endif
- #endif // _WX_MENU_H_
|