]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stubs/menu.cpp
another GetInt/GetId bug fix
[wxWidgets.git] / src / stubs / menu.cpp
index 1fc7c4a22941326f98c5bf900b6c9a354c2200d9..32188c4b4a26c7bc0ed32b1f86bda2aa3467e11f 100644 (file)
 // ----------------------
 #include <string.h>
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler)
 IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
-#endif
 
 // ============================================================================
 // implementation
@@ -303,8 +301,51 @@ void wxMenu::ProcessCommand(wxCommandEvent & 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;
 }