]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stubs/menu.cpp
Tried to find thread/clipboard problem cause...
[wxWidgets.git] / src / stubs / menu.cpp
index 217e6c8b888b75e3f6ba539032c76e2ff9deaebd..5880beab530c0a58cd6881c075a15719b1d56a40 100644 (file)
@@ -25,6 +25,7 @@
 #include "wx/menu.h"
 #include "wx/menuitem.h"
 #include "wx/log.h"
+#include "wx/utils.h"
 
 // other standard headers
 // ----------------------
@@ -49,6 +50,7 @@ wxMenu::wxMenu(const wxString& title, const wxFunction func)
     m_eventHandler = this;
     m_noItems = 0;
     m_menuBar = NULL;
+    m_clientData = (void*) NULL;
     if (m_title != "")
     {
         Append(-2, m_title) ;
@@ -180,7 +182,7 @@ void wxMenu::SetTitle(const wxString& label)
     // TODO
 }
 
-const wxString& wxMenu::GetTitle() const
+const wxString wxMenu::GetTitle() const
 {
     return m_title;
 }
@@ -293,15 +295,59 @@ void wxMenu::ProcessCommand(wxCommandEvent & event)
     {
             processed = GetEventHandler()->ProcessEvent(event);
     }
-
+/* TODO
     // Try the window the menu was popped up from (and up
     // through the hierarchy)
     if ( !processed && GetInvokingWindow())
         processed = GetInvokingWindow()->ProcessEvent(event);
+*/
+}
+
+// Update 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 wxMenu::UpdateUI(wxEvtHandler* source)
+{
+  if (!source && GetInvokingWindow())
+    source = GetInvokingWindow()->GetEventHandler();
+  if (!source)
+    source = GetEventHandler();
+  if (!source)
+    source = this;
+
+  wxNode* node = GetItems().First();
+  while (node)
+  {
+    wxMenuItem* item = (wxMenuItem*) node->Data();
+    if ( !item->IsSeparator() )
+    {
+      wxWindowID id = item->GetId();
+      wxUpdateUIEvent event(id);
+      event.SetEventObject( source );
+
+      if (source->ProcessEvent(event))
+      {
+        if (event.GetSetText())
+          SetLabel(id, event.GetText());
+        if (event.GetSetChecked())
+          Check(id, event.GetChecked());
+        if (event.GetSetEnabled())
+          Enable(id, event.GetEnabled());
+      }
+
+      if (item->GetSubMenu())
+        item->GetSubMenu()->UpdateUI(source);
+    }
+    node = node->Next();
+  }
 }
 
 bool wxWindow::PopupMenu(wxMenu *menu, int x, int y)
 {
+    menu->SetInvokingWindow(this);
+    menu->UpdateUI();
+
     // TODO
     return FALSE;
 }
@@ -318,7 +364,7 @@ wxMenuBar::wxMenuBar()
     // TODO
 }
 
-wxMenuBar::wxMenuBar(int n, wxMenu *Mmnus[], const wxString titles[])
+wxMenuBar::wxMenuBar(int n, wxMenu *menus[], const wxString titles[])
 {
     m_eventHandler = this;
     m_menuCount = n;
@@ -560,7 +606,7 @@ wxString wxMenuBar::GetHelpString (int Id) const
     for (i = 0; i < m_menuCount; i++)
     {
         if (m_menus[i]->FindItemForId (Id))
-            eturn wxString(m_menus[i]->GetHelpString (Id));
+            return wxString(m_menus[i]->GetHelpString (Id));
     }
     return wxString("");
 }