00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef INC_MGUI_FORMOBJL_H
00044 #define INC_MGUI_FORMOBJL_H
00045
00046 #ifndef INC_MGUI_CTRL_H
00047 #include <mgui/ctrl.h>
00048 #endif
00049
00050 #ifndef INC_MGUI_LISTBOX_H
00051 #include <mgui/listbox.h>
00052 #endif
00053
00054 #ifndef INC_MI32_RVCDEFNS_H
00055 #include <mi32/rvcdefns.h>
00056 #endif
00057
00058 #ifndef INC_RVC_OTYPESET_H
00059 #include <rvc/otypeset.h>
00060 #endif
00061
00062 namespace RVC {
00063 class GETOBJFILTER;
00064 }
00065
00066 namespace MGUI {
00067
00068
00069
00070 class FORM_OBJECT_LIST : public MGUI::FORM_COMPOSITE {
00071 public:
00072
00073
00074 FORM_OBJECT_LIST (
00075 );
00076
00077
00078 virtual ~FORM_OBJECT_LIST (
00079 );
00080
00081
00082 void Clear (
00083 bool notify
00084 );
00085
00086
00087 ERRVALUE Create (
00088 MGUI::LAYOUT_PANE_BASE& ParentPane,
00089 const MISTRING& promptstr,
00090 const RVC::OBJTYPESET& ObjTypeSet,
00091 GETOBJFLAGS GetObjFlags = GETOBJFLAG_None,
00092 RVC::GETOBJFILTER* GetObjFilter = 0,
00093 int ListHeight = 5,
00094 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00095 );
00096
00097
00098 const RVC::OBJITEM& GetCurrentObject (
00099 ) const;
00100
00101
00102 const RVC::OBJITEMLIST& GetObjectList (
00103 ) const { return (m_ObjItemList); }
00104
00105
00106 bool IsEmpty (
00107 ) const { return (m_ObjItemList.IsEmpty()); }
00108
00109
00110
00111 ERRVALUE Select (
00112 bool notify
00113 );
00114
00115 protected:
00116
00117
00118 virtual void v_OnListChanged ();
00119
00120
00121 virtual void v_OnObjectAdded (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00122
00123
00124 virtual void v_OnObjectRemoved (INT32 ItemNum);
00125
00126
00127 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00128
00129
00130 virtual void v_OnObjectsAdded ();
00131
00132
00133 virtual void v_OnObjectsAllRemoved ();
00134
00135 private:
00136 #ifndef GENERATING_DOXYGEN_OUTPUT
00137 static RVC::OBJITEM *s_pNullItem;
00138 MGUI::CTRL_LISTBOX_T<FORM_OBJECT_LIST> m_ListBox;
00139 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_BtnSelect;
00140 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_BtnRemove;
00141 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_BtnRemoveAll;
00142 RVC::OBJITEMLIST m_ObjItemList;
00143 MISTRING m_PromptStr;
00144 RVC::OBJTYPESET m_ObjTypeSet;
00145 GETOBJFLAGS m_GetObjFlags;
00146 RVC::GETOBJFILTER* m_GetObjFilter;
00147
00148 void OnListSelection ();
00149 void OnBtnRemove ();
00150 void OnBtnRemoveAll ();
00151 void OnBtnSelect ();
00152
00153 FORM_OBJECT_LIST (const FORM_OBJECT_LIST&);
00154 FORM_OBJECT_LIST& operator= (const FORM_OBJECT_LIST&);
00155 #endif // GENERATING_DOXYGEN_OUTPUT
00156 };
00157
00158
00159
00160
00161
00162
00163 template <class _CT> class FORM_OBJECT_LIST_T : public MGUI::FORM_OBJECT_LIST {
00164 public:
00165
00166
00167 FORM_OBJECT_LIST_T (
00168 _CT *pContainer
00169 ) :
00170 m_pContainer(pContainer),
00171 m_pfOnListChanged(0),
00172 m_pfOnObjectAdded(0),
00173 m_pfOnObjectRemoved(0),
00174 m_pfOnObjectSelected(0),
00175 m_pfOnObjectsAdded(0),
00176 m_pfOnObjectsAllRemoved(0)
00177 { }
00178
00179
00180 void SetContainer (
00181 _CT *pContainer
00182 ) { m_pContainer = pContainer; }
00183
00184
00185 void SetFuncListChanged (
00186 void (_CT::*pfListChanged)()
00187 ) { m_pfOnListChanged = pfListChanged; };
00188
00189
00190 void SetFuncObjectAdded (
00191 void (_CT::*pfObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00192 ) { m_pfOnObjectAdded = pfObjectAdded; };
00193
00194
00195 void SetFuncObjectRemoved (
00196 void (_CT::*pfObjectRemoved)(INT32 ItemNum)
00197 ) { m_pfOnObjectRemoved = pfObjectRemoved; };
00198
00199
00200 void SetFuncObjectSelected (
00201 void (_CT::*pfObjectSelected)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00202 ) { m_pfOnObjectSelected = pfObjectSelected; };
00203
00204
00205 void SetFuncObjectsAdded (
00206 void (_CT::*pfObjectsAdded)()
00207 ) { m_pfOnObjectsAdded = pfObjectsAdded; };
00208
00209
00210 void SetFuncObjectsAllRemoved (
00211 void (_CT::*pfObjectsAllRemoved)()
00212 ) { m_pfOnObjectsAllRemoved = pfObjectsAllRemoved; };
00213
00214 private:
00215 #ifndef GENERATING_DOXYGEN_OUTPUT
00216 _CT *m_pContainer;
00217 void (_CT::*m_pfOnListChanged)();
00218 void (_CT::*m_pfOnObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00219 void (_CT::*m_pfOnObjectRemoved)(INT32 ItemNum);
00220 void (_CT::*m_pfOnObjectSelected)(const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00221 void (_CT::*m_pfOnObjectsAdded)();
00222 void (_CT::*m_pfOnObjectsAllRemoved)();
00223
00224 virtual void v_OnListChanged () { if (m_pfOnListChanged != 0) (m_pContainer->*m_pfOnListChanged)(); }
00225 virtual void v_OnObjectAdded (const RVC::OBJITEM& ObjItem, INT32 ItemNum) { if (m_pfOnObjectAdded != 0) (m_pContainer->*m_pfOnObjectAdded)(ObjItem, ItemNum); }
00226 virtual void v_OnObjectRemoved (INT32 ItemNum) { if (m_pfOnObjectRemoved != 0) (m_pContainer->*m_pfOnObjectRemoved)(ItemNum); }
00227 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem, INT32 ItemNum) { if (m_pfOnObjectSelected != 0) (m_pContainer->*m_pfOnObjectSelected)(ObjItem, ItemNum); }
00228 virtual void v_OnObjectsAdded () { if (m_pfOnObjectsAdded != 0) (m_pContainer->*m_pfOnObjectsAdded)(); }
00229 virtual void v_OnObjectsAllRemoved () { if (m_pfOnObjectsAllRemoved != 0) (m_pContainer->*m_pfOnObjectsAllRemoved)(); }
00230 #endif // GENERATING_DOXYGEN_OUTPUT
00231 };
00232
00233 }
00234
00235 #endif // INC_MGUI_FORMOBJL_H