00001
00051 #ifndef INC_GRE_UIVIEWTOOL_H
00052 #define INC_GRE_UIVIEWTOOL_H
00053
00054 #ifndef INC_GRE_UIVIEWCANVAS_H
00055 #include <gre/uiviewcanvas.h>
00056 #endif
00057
00058 #ifndef INC_MGUI_MENU_H
00059 #include <mgui/menu.h>
00060 #endif
00061
00062 namespace GRE {
00063 namespace UI {
00064
00065 class VIEWTOOL;
00066
00067
00068
00070 class VIEWTOOLMGR {
00071 public:
00072
00074 explicit VIEWTOOLMGR (
00075 GRE::UI::VIEW_CANVAS *view
00076 );
00077
00078 ~VIEWTOOLMGR ();
00079
00082 bool ActivateByHotKey (
00083 MGUI::KEYCODE keycode
00084 );
00085
00087 void Add (
00088 VIEWTOOL *tool
00089 );
00090
00092 void AddMenuItems (
00093 MGUI::MENU& Menu
00094 );
00095
00097 void AddToolBarItems (
00098 MGUI::CTRL_TOOLBAR& ToolBar
00099 );
00100
00102 void DeleteAllScripts (
00103 bool RemoveUI
00104 );
00105
00107 VIEWTOOL* Find (
00108 VIEWTOOLID ViewToolID
00109 ) const;
00110
00112 VIEWTOOL* FindByName (
00113 const MISTRING& name
00114 ) const;
00115
00117 VIEWTOOL* GetActive (
00118 ) const { return (m_ActiveTool); }
00119
00121 VIEWTOOL* GetDefault (
00122 ) const;
00123
00125 VIEW_CANVAS* GetView (
00126 ) const { return (m_view); }
00127
00129 bool IsActive (
00130 const VIEWTOOL* tool
00131 ) const { return (tool != 0 && tool == m_ActiveTool); }
00132
00134 void Resume (
00135 );
00136
00139 void SetActive (
00140 VIEWTOOL *tool
00141 ) { m_ActiveTool = tool; }
00142
00144 void Suspend (
00145 );
00146
00147 private:
00148 #ifndef GENERATING_DOXYGEN_OUTPUT
00149 friend class VIEWTOOL;
00150 typedef MILIST<VIEWTOOL*> TOOLLIST;
00151 VIEW_CANVAS *m_view;
00152 TOOLLIST m_ToolList;
00153 VIEWTOOL *m_ActiveTool;
00154
00155
00156 VIEWTOOLMGR (const VIEWTOOLMGR&);
00157 VIEWTOOLMGR& operator= (const VIEWTOOLMGR&);
00158 #endif
00159 };
00160
00161
00162
00164 class VIEWTOOL {
00165 public:
00166
00168 virtual ~VIEWTOOL ();
00169
00171 void Activate (
00172 );
00173
00175 void AddMenuItem (
00176 MGUI::MENU& Menu
00177 );
00178
00180 void AddToolBarItem (
00181 MGUI::CTRL_TOOLBAR& ToolBar
00182 );
00183
00185 void Deactivate (
00186 );
00187
00189 MGUI::KEYCODE GetHotKeyCode (
00190 ) const { return (m_HotKeyCode); }
00191
00193 ICONID GetIconID (
00194 ) const { return (m_iconid); }
00195
00197 const MISTRING& GetName (
00198 ) const { return (m_name); }
00199
00201 MDLGPARENT GetDlgParent (
00202 ) const { return (GetView()->GetDlgParent()); }
00203
00205 GRE::UI::VIEW_CANVAS* GetView (
00206 ) const { return (m_pMgr->GetView()); }
00207
00209 VIEWABLE* GetViewable (
00210 ) const { return (GetView()->GetViewable()); }
00211
00213 const VIEWTOOLID GetViewToolID (
00214 ) const { return (m_id); }
00215
00217 bool IsActive (
00218 ) const;
00219
00221 bool IsDisabled (
00222 ) const { return (m_IsDisabled); }
00223
00225 bool IsScript (
00226 ) const { return (m_IsScript); }
00227
00229 bool IsSuspended (
00230 ) const { return (m_SuspendCount > 0); }
00231
00233 void RemoveUI (
00234 );
00235
00237 void Resume (
00238 );
00239
00241 void SetEnabled (
00242 bool enable
00243 );
00244
00246 void Suspend (
00247 );
00248
00249 protected:
00250
00251 enum TOOLSTATE {
00252 STATE_NotInitialized = 0,
00253 STATE_Inactive,
00254 STATE_Active,
00255 STATE_NoLayers,
00256 STATE_Suspended
00257 };
00258
00259 VIEWTOOL (
00260 GRE::UI::VIEW_CANVAS& view,
00261 const MISTRING& name,
00262 ICONID iconid,
00263 ICID icidMenu,
00264 ICID icidToolBar,
00265 VIEWTOOLID toolid = VIEWTOOLID_Unspecified,
00266 char HotKey = 0
00267 );
00268
00269 VIEWTOOL (
00270 GRE::UI::VIEW_CANVAS& view,
00271 const MISTRING& name,
00272 ICONID iconid,
00273 VIEWTOOLID toolid = VIEWTOOLID_Unspecified,
00274 char HotKey = 0
00275 );
00276
00278 TOOLSTATE GetState (
00279 ) const { return (m_state); }
00280
00281 void SetIsScript (
00282 ) { m_IsScript = true; }
00283
00284 private:
00285 #ifndef GENERATING_DOXYGEN_OUTPUT
00286 typedef VIEWTOOL THISCLASS;
00287
00288 GRE::UI::VIEWTOOLMGR *m_pMgr;
00289 GRE::UI::VIEWTOOLID m_id;
00290 MISTRING m_name;
00291 ICONID m_iconid;
00292 TOOLSTATE m_state;
00293 bool m_IsDisabled;
00294 bool m_IsScript;
00295 ICID m_icidMenu;
00296 ICID m_icidToolBar;
00297 MGUI::KEYCODE m_HotKeyCode;
00298 MGUI::MENU m_Menu;
00299 MGUI::MENU::ITEMHND m_ItemHndMenu;
00300 MGUI::CTRL_TOOLBAR *m_pToolBar;
00301 UINT32 m_ItemHndToolBar;
00302 UINT32 m_SuspendCount;
00303
00304 bool CanActivate () const;
00305 void OnToggle (MGUI::ID, bool ToggleOn);
00306
00307
00308 VIEWTOOL (const VIEWTOOL&);
00309 VIEWTOOL& operator= (const VIEWTOOL&);
00310 #endif
00311
00314
00315 virtual bool v_Activate () = 0;
00316 virtual void v_Deactivate () = 0;
00317 virtual bool v_Initialize ();
00318 virtual void v_Resume ();
00319 virtual void v_Suspend ();
00320
00322 };
00323
00324
00325
00326 }
00327 }
00328
00329 #endif // INC_GRE_UIVIEWTOOL_H