|
From: <cur...@us...> - 2011-01-06 19:00:34
|
Revision: 77
http://wxdevcenter.svn.sourceforge.net/wxdevcenter/?rev=77&view=rev
Author: cursorstar
Date: 2011-01-06 19:00:28 +0000 (Thu, 06 Jan 2011)
Log Message:
-----------
Asynchronously update UI (including ribbon) to prevent crach.
Modified Paths:
--------------
trunk/wxdevcenter/src/uistd/stdframe.cpp
trunk/wxdevcenter/src/uistd/stdframe.hpp
Modified: trunk/wxdevcenter/src/uistd/stdframe.cpp
===================================================================
--- trunk/wxdevcenter/src/uistd/stdframe.cpp 2011-01-04 20:43:12 UTC (rev 76)
+++ trunk/wxdevcenter/src/uistd/stdframe.cpp 2011-01-06 19:00:28 UTC (rev 77)
@@ -109,6 +109,31 @@
}
//==========================================================================
+// dcStandardTopFrameUpdateUIEvent
+//==========================================================================
+
+wxDECLARE_EVENT(STANDARDTOPFRAME_UPDATEUI_EVENT, dcStandardTopFrameUpdateUIEvent);
+
+class dcStandardTopFrameUpdateUIEvent: public wxEvent
+{
+private:
+ dcPerspective perspec;
+public:
+ dcStandardTopFrameUpdateUIEvent(const dcPerspective& perspec)
+ : wxEvent(wxID_ANY, STANDARDTOPFRAME_UPDATEUI_EVENT),
+ perspec(perspec)
+ {
+ }
+ virtual ~dcStandardTopFrameUpdateUIEvent(){}
+ virtual wxEvent *Clone() const { return new dcStandardTopFrameUpdateUIEvent(perspec); }
+ const dcPerspective& GetPerspective() const { return perspec; }
+};
+
+wxDEFINE_EVENT(STANDARDTOPFRAME_UPDATEUI_EVENT, dcStandardTopFrameUpdateUIEvent);
+#define dcStandardTopFrameUpdateUIEventHandler(func) (&func)
+#define EVT_STANDARDTOPFRAME_UPDATEUI(func) wx__DECLARE_EVT1(STANDARDTOPFRAME_UPDATEUI_EVENT, wxID_ANY, dcStandardTopFrameUpdateUIEventHandler(func))
+
+//==========================================================================
// dcStandardTopFrame
//==========================================================================
@@ -117,6 +142,7 @@
BEGIN_EVENT_TABLE(dcStandardTopFrame, dcTopFrame)
EVT_RIBBONBUTTONBAR_CLICKED(wxID_ANY, dcStandardTopFrame::OnRibbonButtonBar)
EVT_PERSPECTIVE_CHANGED(dcStandardTopFrame::OnPerspectiveChanged)
+ EVT_STANDARDTOPFRAME_UPDATEUI(dcStandardTopFrame::OnUpdateUi)
EVT_ACTIVATE(dcStandardTopFrame::OnWindowActivate)
EVT_AUINOTEBOOK_PAGE_CHANGED(wxID_ANY, dcStandardTopFrame::OnNotebookChanged)
EVT_AUINOTEBOOK_PAGE_CHANGING(wxID_ANY, dcStandardTopFrame::OnNotebookChanging)
@@ -125,8 +151,6 @@
EVT_ACTION(XRCID("STF_WORK_BARS"), dcStandardTopFrame::OnShowWorkBar)
END_EVENT_TABLE()
-
-
dcStandardTopFrame::dcStandardTopFrame():
dcTopFrame(),
m_isInit(false),
@@ -218,20 +242,23 @@
void dcStandardTopFrame::UpdateUI(dcPerspective perspect)
{
+ dcStandardTopFrameUpdateUIEvent event(perspect);
+ AddPendingEvent(event);
+}
+
+void dcStandardTopFrame::OnUpdateUi(dcStandardTopFrameUpdateUIEvent& event)
+{
+ dcPerspective perspec = event.GetPerspective();
+
// Freeze UI update
Freeze();
// Update the WorkBar
- UpdateWorkBars(perspect);
+ UpdateWorkBars(perspec);
// Update the RibbonBar
- UpdateRibbon(perspect);
-
- // Update action tree and UI
-/* wxMenuBar* menubar = GetMenuBar();
- if(menubar)
- dcActionManager::GetManager().GetTree().FillMenuBar(menubar, perspect);
-*/
+ UpdateRibbon(perspec);
+
m_mgr.Update();
UpdateTitle();
Modified: trunk/wxdevcenter/src/uistd/stdframe.hpp
===================================================================
--- trunk/wxdevcenter/src/uistd/stdframe.hpp 2011-01-04 20:43:12 UTC (rev 76)
+++ trunk/wxdevcenter/src/uistd/stdframe.hpp 2011-01-06 19:00:28 UTC (rev 77)
@@ -13,6 +13,8 @@
class wxRibbonBar;
class wxRibbonButtonBarEvent;
+class dcStandardTopFrameUpdateUIEvent; // Private
+
/**
* Standard top-frame implementation.
* Implementation of top frame with std mdi frame and wxAUI.
@@ -70,7 +72,7 @@
virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE);
void UpdateRibbon(dcPerspective& perspect);
-
+
private:
dcPerspective GetTabPerspective(int index);
@@ -81,6 +83,7 @@
void DoInitWorkBar();
void ShowWorkBar(dcWorkBar* bar, bool shown, bool force, dcPerspective& perspect);
+ void OnUpdateUi(dcStandardTopFrameUpdateUIEvent& event);
void OnPerspectiveChanged(dcPerspectiveEvent& event);
void OnWindowActivate(wxActivateEvent& event);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|