00001
00036 #ifndef INC_SML_GUIGADGET_H
00037 #define INC_SML_GUIGADGET_H
00038
00039 #ifndef INC_SML_CLASS_H
00040 #include <sml/class.h>
00041 #endif
00042
00043 #ifndef INC_MGUI_TOOLBASE_H
00044 #include <mgui/toolbase.h>
00045 #endif
00046
00047 #ifndef GENERATING_DOXYGEN_OUTPUT
00048 class POLYLINE;
00049 namespace MGUI {
00050 class DLGSHELL;
00051 class TOOL_RECTANGLE;
00052 class TOOL_POINT;
00053 class TOOL_SEGMENT;
00054 class TOOL_POLYLINE;
00055 class TOOL_REGION;
00056 }
00057 namespace SML {
00058 class CONTEXT;
00059 class GRE_TOOL_GENERAL;
00060 class GRE_TOOL_POINT;
00061 }
00062 #endif
00063
00064 namespace SML {
00065
00066
00067
00068 class GUI_GADGET {
00069 public:
00070
00071 GUI_GADGET (
00072 SML::CONTEXT *pContext,
00073 MGUI::TOOL_BASE *pGadget
00074 );
00075
00076 virtual ~GUI_GADGET ();
00077
00078 MGUI::TOOL_BASE* GetGadgetPtr (
00079 ) const { return (m_pGadget); }
00080
00081 bool HasPosition (
00082 ) const;
00083
00084 #ifndef GENERATING_DOXYGEN_OUTPUT
00085 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00086 static void SetGPS (int numargs, SML::ARG *args, UINT8* , SML::CONTEXT*);
00087 #endif
00088
00089 void SetManaged(bool bManaged);
00090
00091 private:
00092 #ifndef GENERATING_DOXYGEN_OUTPUT
00093
00094 typedef GUI_GADGET THISCLASS;
00095
00096 enum CALLBACKTYPE {
00097 CALLBACKTYPE_RightButtonUp,
00098 CALLBACKTYPE_Activate,
00099 CALLBACKTYPE_Deactivate,
00100 CALLBACKTYPE_PositionSet,
00101 CALLBACKTYPE_PositionClear,
00102 CALLBACKTYPE_NUMITEMS
00103 };
00104
00105 class CALLBACKLIST;
00106
00107 SML::CONTEXT *m_pContext;
00108 MGUI::TOOL_BASE *m_pGadget;
00109 MGUI::DLGSHELL *m_pDlgShell;
00110 CALLBACKLIST *m_cblist[CALLBACKTYPE_NUMITEMS];
00111 bool m_HasForm;
00112
00113 static void GetCallbackList (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00114 static void GetHasPosition (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00115 static void GetManaged (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00116 static void GetRegion (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00117 static void GetSuspended (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00118 static void GetTrackGPS (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00119
00120 static void SetHasPosition (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00121 static void SetManaged (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00122 static void SetSuspended (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00123 static void SetTrackGPS (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00124 static void SetTransParm (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00125
00126 static void Setup();
00127
00128 bool DoCallbackList (CALLBACKTYPE cbtype);
00129 void OnGadgetChange (MGUI::TOOL_BASE::CHANGESEQ ChgSeq, MGUI::TOOL_BASE::CHANGETYPE ChgType);
00130 void OnGadgetDestroy ();
00131 bool OnRightButtonDown (MGUI::POINT point, MGUI::KEYSTATE keystate);
00132 bool OnRightButtonUp (MGUI::POINT point, MGUI::KEYSTATE keystate);
00133
00134 friend class SML::GRE_TOOL_GENERAL;
00135 #endif
00136 };
00137
00138
00139
00140 struct GUI_GADGET_POINT : public GUI_GADGET {
00141 public:
00142
00143 GUI_GADGET_POINT (
00144 SML::CONTEXT *pContext,
00145 MGUI::TOOLCANVAS& Canvas
00146 );
00147
00148 #ifndef GENERATING_DOXYGEN_OUTPUT
00149
00150 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00151
00152 private:
00153
00154 MGUI::TOOL_POINT& GetGadget ();
00155
00156 static void GetPoint (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00157 static void SetPoint (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00158
00159 static void Setup();
00160
00161 friend class SML::GRE_TOOL_POINT;
00162 #endif
00163 };
00164
00165
00166
00167 struct GUI_GADGET_POLYLINE : public GUI_GADGET {
00168 public:
00169
00170 GUI_GADGET_POLYLINE (
00171 SML::CONTEXT *pContext,
00172 MGUI::TOOLCANVAS& Canvas,
00173 bool closed
00174 );
00175
00176 #ifndef GENERATING_DOXYGEN_OUTPUT
00177
00178 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00179
00180 private:
00181
00182 MGUI::TOOL_POLYLINE& GetGadget ();
00183
00184 static void* GetPolyLine(int n, SML::ARG*, UINT8*, SML::CONTEXT*);
00185 void SetPolyLine(POLYLINE* pl);
00186 static void Setup();
00187
00188 #endif
00189 };
00190
00191
00192
00193 struct GUI_GADGET_RECTANGLE : public GUI_GADGET {
00194 public:
00195
00196 GUI_GADGET_RECTANGLE (
00197 SML::CONTEXT *pContext,
00198 MGUI::TOOLCANVAS& Canvas
00199 );
00200
00201 #ifndef GENERATING_DOXYGEN_OUTPUT
00202
00203 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00204
00205 private:
00206
00207 MGUI::TOOL_RECTANGLE& GetGadget ();
00208
00209 static void Setup();
00210
00211 #endif
00212 };
00213
00214
00215
00216 struct GUI_GADGET_REGION : public GUI_GADGET {
00217 public:
00218
00219 GUI_GADGET_REGION (
00220 SML::CONTEXT *pContext,
00221 MGUI::TOOLCANVAS& Canvas
00222 );
00223
00224 #ifndef GENERATING_DOXYGEN_OUTPUT
00225
00226 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00227
00228 private:
00229
00230 MGUI::TOOL_REGION& GetGadget ();
00231
00232 static void Setup();
00233
00234 #endif
00235 };
00236
00237
00238
00239 struct GUI_GADGET_SEGMENT : public GUI_GADGET {
00240 public:
00241
00242 GUI_GADGET_SEGMENT (
00243 SML::CONTEXT *pContext,
00244 MGUI::TOOLCANVAS& Canvas
00245 );
00246
00247 #ifndef GENERATING_DOXYGEN_OUTPUT
00248
00249 static SML::AUTOCLASS_DELETABLE_NOCOPY_T<GUI_GADGET> s_AutoClass;
00250
00251 private:
00252
00253 MGUI::TOOL_SEGMENT& GetGadget ();
00254
00255 static void GetEnd (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00256 static void GetStart (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00257 static void SetEnd (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00258 static void SetStart (SML::CONTEXT *context, SML::CLASSMEMBER *member, void *vdata, SML::ARG *ret);
00259
00260 static void Setup();
00261
00262 #endif
00263 };
00264
00265
00266
00267 void InstallGadgetItems (SML::CONTEXT *context);
00268
00269
00270
00271 }
00272
00273 #endif // INC_SML_GUIGADGET_H