]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/motif/menu.h
Coupled some core functionality out, to allow its use outside the wxLibrary
[wxWidgets.git] / include / wx / motif / menu.h
index dd349421559b9a076d811544422c7854cd92ce5a..22ddece86e9cb293a41b024148e77774a841149d 100644 (file)
@@ -18,6 +18,8 @@
 
 #include "wx/defs.h"
 #include "wx/event.h"
+#include "wx/font.h"
+#include "wx/gdicmn.h"
 
 class WXDLLEXPORT wxMenuItem;
 class WXDLLEXPORT wxMenuBar;
@@ -62,6 +64,10 @@ public:
   bool Checked(int id) const;
   inline bool IsChecked(int id) const { return IsChecked(id); };
 
+  // Client data
+  inline void SetClientData(void* clientData) { m_clientData = clientData; }
+  inline void* GetClientData() const { return m_clientData; }
+
   // item properties
     // title
   void SetTitle(const wxString& label);
@@ -79,6 +85,12 @@ public:
     // Find wxMenuItem by ID, and item's menu too if itemMenu is !NULL.
   wxMenuItem *FindItemForId(int itemId, wxMenu **itemMenu = NULL) const;
 
+  // Updates the UI for a menu and all submenus recursively.
+  // source is the object that has the update event handlers
+  // defined for it. If NULL, the menu or associated window
+  // will be used.
+  void UpdateUI(wxEvtHandler* source = (wxEvtHandler*) NULL);
+
   void ProcessCommand(wxCommandEvent& event);
   inline void Callback(const wxFunction func) { m_callback = func; }
 
@@ -88,9 +100,41 @@ public:
 
   inline wxList& GetItems() const { return (wxList&) m_menuItems; }
 
+  void      SetInvokingWindow(wxWindow *pWin) { m_pInvokingWindow = pWin; }
+  wxWindow *GetInvokingWindow()         const { return m_pInvokingWindow; }
+
   //// Motif-specific
   inline WXWidget GetButtonWidget() const { return m_buttonWidget; }
+  inline void SetButtonWidget(WXWidget buttonWidget) { m_buttonWidget = buttonWidget; }
   inline WXWidget GetMainWidget() const { return m_menuWidget; }
+  inline wxMenu* GetParent() const { return m_menuParent; }
+  inline int GetId() const { return m_menuId; }
+  inline void SetId(int id) { m_menuId = id; }
+  inline void SetMenuBar(wxMenuBar* menuBar) { m_menuBar = menuBar; }
+  inline wxMenuBar* GetMenuBar() const { return m_menuBar; }
+
+  void CreatePopup (WXWidget logicalParent, int x, int y);
+  void DestroyPopup (void);
+  void ShowPopup (int x, int y);
+  void HidePopup (void);
+
+  WXWidget CreateMenu(wxMenuBar *menuBar, WXWidget parent, wxMenu *topMenu,
+            const wxString& title = "", bool isPulldown = FALSE);
+
+  // For popups, need to destroy, then recreate menu for a different (or
+  // possibly same) window, since the parent may change.
+  void DestroyMenu(bool full);
+  WXWidget FindMenuItem(int id, wxMenuItem **it = NULL) const;
+
+  const wxColour& GetBackgroundColour() const { return m_backgroundColour; }
+  const wxColour& GetForegroundColour() const { return m_foregroundColour; }
+  const wxFont& GetFont() const { return m_font; }
+
+  void SetBackgroundColour(const wxColour& colour);
+  void SetForegroundColour(const wxColour& colour);
+  void SetFont(const wxFont& colour);
+  void ChangeFont(bool keepOriginalSize = FALSE);
+
 public:
   wxFunction        m_callback;
 
@@ -100,6 +144,8 @@ public:
   wxList            m_menuItems;
   wxEvtHandler *    m_parent;
   wxEvtHandler *    m_eventHandler;
+  void*             m_clientData;
+  wxWindow*         m_pInvokingWindow;
 
   //// Motif-specific
   int               m_numColumns;
@@ -107,9 +153,12 @@ public:
   WXWidget          m_popupShell;   // For holding the popup shell widget
   WXWidget          m_buttonWidget; // The actual string, so we can grey it etc.
   int               m_menuId;
-  wxMenu*           m_topMenu ;
+  wxMenu*           m_topLevelMenu ;
   wxMenu*           m_menuParent;
   bool              m_ownedByMenuBar;
+  wxColour          m_foregroundColour;
+  wxColour          m_backgroundColour;
+  wxFont            m_font;
 };
 
 // ----------------------------------------------------------------------------
@@ -120,6 +169,7 @@ class WXDLLEXPORT wxMenuBar: public wxEvtHandler
 {
   DECLARE_DYNAMIC_CLASS(wxMenuBar)
 
+  wxMenuBar( long style );
   wxMenuBar();
   wxMenuBar(int n, wxMenu *menus[], const wxString titles[]);
   ~wxMenuBar();
@@ -157,14 +207,40 @@ class WXDLLEXPORT wxMenuBar: public wxEvtHandler
   inline int GetMenuCount() const { return m_menuCount; }
   inline wxMenu* GetMenu(int i) const { return m_menus[i]; }
 
+  //// Motif-specific
+  inline wxFrame* GetMenuBarFrame() const { return m_menuBarFrame; }
+  inline void SetMenuBarFrame(wxFrame* frame) { m_menuBarFrame = frame; }
+  inline WXWidget GetMainWidget() const { return m_mainWidget; }
+  inline void SetMainWidget(WXWidget widget) { m_mainWidget = widget; }
+
+  // Create menubar
+  bool CreateMenuBar(wxFrame* frame);
+
+  // Destroy menubar, but keep data structures intact so we can recreate it.
+  bool DestroyMenuBar();
+
+  const wxColour& GetBackgroundColour() const { return m_backgroundColour; }
+  const wxColour& GetForegroundColour() const { return m_foregroundColour; }
+  const wxFont& GetFont() const { return m_font; }
+
+  void SetBackgroundColour(const wxColour& colour);
+  void SetForegroundColour(const wxColour& colour);
+  void SetFont(const wxFont& colour);
+  void ChangeFont(bool keepOriginalSize = FALSE);
+
  public:
   wxEvtHandler *            m_eventHandler;
   int                       m_menuCount;
   wxMenu **                 m_menus;
   wxString *                m_titles;
   wxFrame *                 m_menuBarFrame;
-/* TODO: data that represents the actual menubar when created.
- */
+
+  //// Motif-specific
+  WXWidget                  m_mainWidget;
+
+  wxColour                  m_foregroundColour;
+  wxColour                  m_backgroundColour;
+  wxFont                    m_font;
 };
 
 #endif // _WX_MENU_H_