00001
00033 #ifndef INC_MGUI_GADGET_H
00034 #define INC_MGUI_GADGET_H
00035
00036 #ifndef INC_MGUI_TOOLCANVAS_H
00037 #include <mgui/toolcanvas.h>
00038 #endif
00039
00040
00041 namespace MGUI {
00042
00043
00044
00048 class GADGET {
00049 public:
00050
00052 enum PLACEMENT {
00053 PLACEMENT_Center = 0x001,
00054 PLACEMENT_CenterLeft = 0x002,
00055 PLACEMENT_CenterRight = 0x004,
00056 PLACEMENT_BottomCenter = 0x008,
00057 PLACEMENT_BottomLeft = 0x010,
00058 PLACEMENT_BottomRight = 0x020,
00059 PLACEMENT_TopCenter = 0x040,
00060 PLACEMENT_TopLeft = 0x080,
00061 PLACEMENT_TopRight = 0x100,
00062
00063 PLACEMENT_AnyLeft = PLACEMENT_CenterLeft | PLACEMENT_BottomLeft | PLACEMENT_TopLeft,
00064 PLACEMENT_AnyRight = PLACEMENT_CenterRight | PLACEMENT_BottomRight | PLACEMENT_TopRight,
00065 PLACEMENT_AnyBottom = PLACEMENT_BottomCenter | PLACEMENT_BottomLeft | PLACEMENT_BottomRight,
00066 PLACEMENT_AnyTop = PLACEMENT_TopCenter | PLACEMENT_TopLeft | PLACEMENT_TopRight,
00067 PLACEMENT_AnyCorner = PLACEMENT_BottomLeft | PLACEMENT_BottomRight | PLACEMENT_TopLeft | PLACEMENT_TopRight,
00068 PLACEMENT_Any = 0x1FF
00069 };
00070
00071 enum CANVASDEVICES {
00072 CANVASDEVICE_Memory = 0x01,
00073 CANVASDEVICE_Pixmap = 0x02,
00074 CANVASDEVICE_ScreenIfActive = 0x04,
00075 CANVASDEVICE_ScreenAlways = 0x08,
00076 CANVASDEVICE_Stereo = 0x10,
00077 };
00078
00080 enum FLAGS {
00081 FLAG_None = 0,
00082 FLAG_AllowUserHide = 0x01,
00083 FLAG_HasDlgSettings = 0x02,
00084 };
00085
00087 virtual ~GADGET () = 0;
00088
00090 bool operator< (const GADGET& rhs) const
00091 { return (m_priority < rhs.m_priority); }
00092
00094 bool CanDrawOnDeviceType (
00095 CANVAS::DEVICETYPE DeviceType
00096 ) const;
00097
00100 bool DlgEditSettings (
00101 MDLGPARENT dlgparent
00102 );
00103
00105 void Draw (
00106 CANVAS::DEVICETYPE DeviceType
00107 );
00108
00110 PLACEMENT GetPlacement () const
00111 { return (m_Placement); }
00112
00114 const MGUI::POINT& GetPosition () const
00115 { return (m_pos); }
00116
00118 INT16 GetPriority () const
00119 { return (m_priority); }
00120
00122 const MGUI::POINT& GetSize () const
00123 { return (m_size); }
00124
00126 bool HasPosition () const
00127 { return (m_hasposition); }
00128
00130 bool IsVisible () const
00131 { return (m_visible); }
00132
00134 bool OnToolTipRequest (CTRL_TOOLTIP& tooltip, MGUI::POINT ptCanvas)
00135 { return (v_OnToolTipRequest(tooltip,ptCanvas)); }
00136
00138 void SetDelegateOnChangePlacement (
00139 DELEGATE_VOID_NOPARMS delegate
00140 ) { m_DelegateOnChangePlacement = delegate; }
00141
00143 void SetDelegateOnChangeSettings (
00144 DELEGATE_VOID_NOPARMS delegate
00145 ) { m_DelegateOnChangeSettings = delegate; }
00146
00148 void SetDelegateOnChangeVisible (
00149 DELEGATE_VOID_NOPARMS delegate
00150 ) { m_DelegateOnChangeVisible = delegate; }
00151
00153 void SetPlacement (
00154 PLACEMENT Placement,
00155 bool notify = true
00156 );
00157
00159 void SetPlacementsAllowed (
00160 PLACEMENT PlacementsAllowed
00161 ) { m_PlacementsAllowed = PlacementsAllowed; }
00162
00164 void SetPriority (
00165 INT16 priority
00166 ) { m_priority = priority; }
00167
00171 void SetVisible (
00172 bool visible,
00173 bool notify = true
00174 );
00175
00176 protected:
00177
00179 explicit GADGET (
00180 TOOLCANVAS *pCanvas,
00181 PLACEMENT PlacementsAllowed,
00182 FLAGS flags = FLAG_None,
00183 CANVASDEVICES CanvasDevices = CANVASDEVICE_Memory
00184 );
00185
00187 void Draw (MGD::CONTEXT *gc, CANVAS::DEVICETYPE DeviceType);
00188
00190 TOOLCANVAS* GetCanvas () const
00191 { return (m_pCanvas); }
00192
00194 bool IsPointerCaptured () const;
00195
00197 void SetCursor (
00198 CURSORID cursorid
00199 ) const { m_pCanvas->SetCursor(cursorid); }
00200
00202 MGUI::POINT TransCanvasToGadget (
00203 MGUI::POINT ptCanvas
00204 ) const { return (MGUI::POINT(ptCanvas.m_x-m_pos.m_x,ptCanvas.m_y-m_pos.m_y)); }
00205
00207 MGUI::POINT TransGadgetToCanvas (
00208 MGUI::POINT ptGadget
00209 ) const { return (MGUI::POINT(ptGadget.m_x+m_pos.m_x,ptGadget.m_y+m_pos.m_y)); }
00210
00211 private:
00212 #ifndef GENERATING_DOXYGEN_OUTPUT
00213
00214 TOOLCANVAS *m_pCanvas;
00215 FLAGS m_flags;
00216 CANVASDEVICES m_CanvasDevices;
00217 PLACEMENT m_PlacementsAllowed;
00218 PLACEMENT m_Placement;
00219 bool m_visible;
00220 bool m_hasposition;
00221 INT16 m_priority;
00222 MGUI::POINT m_pos;
00223 MGUI::POINT m_size;
00224 DELEGATE_VOID_NOPARMS m_DelegateOnChangePlacement;
00225 DELEGATE_VOID_NOPARMS m_DelegateOnChangeSettings;
00226 DELEGATE_VOID_NOPARMS m_DelegateOnChangeVisible;
00227
00228 void ClearPosition ()
00229 { m_hasposition = false; }
00230 void ComputeSize ()
00231 { m_size = v_ComputeSize(); }
00232 bool ContainsPoint (MGUI::POINT ptCanvas) const
00233 { return (m_hasposition && ptCanvas.m_x >= m_pos.m_x && ptCanvas.m_y >= m_pos.m_y && ptCanvas.m_x < m_pos.m_x + m_size.m_x && ptCanvas.m_y < m_pos.m_y + m_size.m_y); }
00234 void DetachCanvas ()
00235 { m_pCanvas = 0; }
00236 bool OnKey (MGUI::POINT ptCanvas, MGUI::KEYCODE keycode, KEYSTATE keystate)
00237 { return (v_OnKey(ptCanvas,keycode,keystate)); }
00238 bool OnPointerButtonDown (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate);
00239 bool OnPointerButtonUp (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate);
00240 void OnPointerEnter ()
00241 { v_OnPointerEnter(); }
00242 void OnPointerLeave ()
00243 { v_OnPointerLeave(); }
00244 void OnPointerMove (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate)
00245 { v_OnPointerMove(ptCanvas,button,keystate); }
00246 void SetPosition (MGUI::POINT topleft)
00247 { m_pos = topleft; m_hasposition = m_visible; }
00248 void SetPosition (INT16 x, INT16 y)
00249 { m_pos.Set(x,y); m_hasposition = m_visible; }
00250 void ValidatePlacement ();
00251
00252 #endif // GENERATING_DOXYGEN_OUTPUT
00253
00254
00255
00258 virtual MGUI::POINT v_ComputeSize () = 0;
00259
00262 virtual int v_DlgEditSettings (MDLGPARENT dlgparent);
00263
00266 virtual void v_Draw (MGD::CONTEXT *gc, CANVAS::DEVICETYPE DeviceType) = 0;
00267
00271 virtual bool v_OnKey (MGUI::POINT ptCanvas, MGUI::KEYCODE keycode, KEYSTATE keystate);
00272
00277 virtual bool v_OnPointerButtonDown (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate);
00278
00282 virtual bool v_OnPointerButtonUp (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate);
00283
00286 virtual void v_OnPointerEnter ();
00287
00290 virtual void v_OnPointerLeave ();
00291
00294 virtual void v_OnPointerMove (MGUI::POINT ptCanvas, POINTERBUTTON button, KEYSTATE keystate);
00295
00298 virtual bool v_OnToolTipRequest (CTRL_TOOLTIP& tooltip, MGUI::POINT& ptCanvas);
00299
00300 friend class TOOLCANVAS;
00301 friend class TOOLCANVAS::PRIV;
00302 };
00303
00304 #ifndef GENERATING_DOXYGEN_OUTPUT
00305 DEFINE_ENUM_OP_BITWISE(GADGET::CANVASDEVICES)
00306 DEFINE_ENUM_OP_BITWISE(GADGET::FLAGS)
00307 DEFINE_ENUM_OP_BITWISE(GADGET::PLACEMENT)
00308 #endif
00309
00310
00311
00312 }
00313
00314 #endif // INC_MGUI_GADGET_H