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 #ifndef INC_MGUI_FORMOBJL_H
00034 #define INC_MGUI_FORMOBJL_H
00035
00036 #ifndef INC_MGUI_CTRL_H
00037 #include <mgui/ctrl.h>
00038 #endif
00039
00040 #ifndef INC_MGUI_LISTBOX_H
00041 #include <mgui/listbox.h>
00042 #endif
00043
00044 #ifndef INC_MI32_RVCDEFNS_H
00045 #include <mi32/rvcdefns.h>
00046 #endif
00047
00048 #ifndef INC_RVC_OTYPESET_H
00049 #include <rvc/otypeset.h>
00050 #endif
00051
00052 namespace RVC {
00053 class GETOBJFILTER;
00054 }
00055
00056 namespace MGUI {
00057
00058
00059
00060 class FORM_OBJECT_LIST : public MGUI::FORM_COMPOSITE {
00061 public:
00062
00063
00064 FORM_OBJECT_LIST (
00065 );
00066
00067
00068 virtual ~FORM_OBJECT_LIST (
00069 );
00070
00071
00072 void Clear (
00073 );
00074
00075
00076 ERRVALUE Create (
00077 MGUI::LAYOUT_PANE_BASE& ParentPane,
00078 TEXTID TextID,
00079 const RVC::OBJTYPESET& ObjTypeSet,
00080 GETOBJFLAGS GetObjFlags = GETOBJFLAG_None,
00081 RVC::GETOBJFILTER* GetObjFilter = 0,
00082 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00083 );
00084
00085
00086 const RVC::OBJITEM& GetCurrentObject (
00087 ) const;
00088
00089
00090 const RVC::OBJITEMLIST& GetObjectList (
00091 ) const;
00092
00093
00094 bool IsEmpty (
00095 ) const;
00096
00097 protected:
00098 virtual void v_OnObjectAdded (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00099 virtual void v_OnObjectRemoved (INT32 ItemNum);
00100 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem);
00101 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00102 virtual void v_OnObjectsRemoved ();
00103
00104 private:
00105 #ifndef GENERATING_DOXYGEN_OUTPUT
00106 MGUI::CTRL_LISTBOX_T<FORM_OBJECT_LIST> m_ListBox;
00107 MGUI::LAYOUT_PANE m_SelectButtons;
00108 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_Select;
00109 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_Remove;
00110 MGUI::CTRL_PUSHBUTTON_T<FORM_OBJECT_LIST> m_RemoveAll;
00111 RVC::OBJITEMLIST m_ObjItemList;
00112 RVC::OBJITEM m_NullItem;
00113 TEXTID m_TextID;
00114 RVC::OBJTYPESET m_ObjTypeSet;
00115 GETOBJFLAGS m_GetObjFlags;
00116 RVC::GETOBJFILTER* m_GetObjFilter;
00117
00118 void OnChangeSelection ();
00119 void OnRemovePressed ();
00120 void OnRemoveAllPressed ();
00121 void OnSelectPressed ();
00122
00123 FORM_OBJECT_LIST (const FORM_OBJECT_LIST&);
00124 FORM_OBJECT_LIST& operator= (const FORM_OBJECT_LIST&);
00125 #endif // GENERATING_DOXYGEN_OUTPUT
00126 };
00127
00128
00129
00130
00131
00132
00133 template <class _CT> class FORM_OBJECT_LIST_T : public MGUI::FORM_OBJECT_LIST {
00134 public:
00135
00136
00137 FORM_OBJECT_LIST_T (
00138 ) :
00139 m_pContainer(0),
00140 m_pfOnObjectAdded(0),
00141 m_pfOnObjectRemoved(0),
00142 m_pfOnObjectSelected(0),
00143 m_pfOnObjectSelectedNum(0),
00144 m_pfOnObjectsRemoved(0)
00145 {}
00146
00147
00148 void Create (
00149 MGUI::LAYOUT_PANE_BASE& ParentPane,
00150 _CT *pContainer,
00151 void (_CT::*pfOnObjectSelected)(const RVC::OBJITEM& ObjItem),
00152 TEXTID TextID,
00153 const RVC::OBJTYPESET& ObjTypeSet,
00154 GETOBJFLAGS GetObjFlags = GETOBJFLAG_None,
00155 RVC::GETOBJFILTER* GetObjFilter = 0,
00156 MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00157 ) {
00158 m_pContainer = pContainer;
00159 m_pfOnObjectSelected = pfOnObjectSelected;
00160 FORM_OBJECT_LIST::Create(ParentPane, TextID, ObjTypeSet, GetObjFlags, GetObjFilter, sizealign);
00161 }
00162
00163
00164 void SetObjectAdded (
00165 void (_CT::*ObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00166 ) { m_pfOnObjectAdded = ObjectAdded; };
00167
00168
00169 void SetObjectRemoved (
00170 void (_CT::*ObjectRemoved)(INT32 ItemNum)
00171 ) { m_pfOnObjectRemoved = ObjectRemoved; };
00172
00173
00174 void SetObjectSelected (
00175 void (_CT::*ObjectSelected)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00176 ) { m_pfOnObjectSelectedNum = ObjectSelected; };
00177
00178
00179 void SetObjectsRemoved (
00180 void (_CT::*ObjectsRemoved)()
00181 ) { m_pfOnObjectsRemoved = ObjectsRemoved; };
00182
00183 private:
00184 #ifndef GENERATING_DOXYGEN_OUTPUT
00185 _CT *m_pContainer;
00186 void (_CT::*m_pfOnObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00187 void (_CT::*m_pfOnObjectRemoved)(INT32 ItemNum);
00188 void (_CT::*m_pfOnObjectSelected)(const RVC::OBJITEM& ObjItem);
00189 void (_CT::*m_pfOnObjectSelectedNum)(const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00190 void (_CT::*m_pfOnObjectsRemoved)();
00191
00192 virtual void v_OnObjectAdded (const RVC::OBJITEM& ObjItem, INT32 ItemNum) { if (m_pfOnObjectAdded != 0) (m_pContainer->*m_pfOnObjectAdded)(ObjItem, ItemNum); }
00193 virtual void v_OnObjectRemoved (INT32 ItemNum) { if (m_pfOnObjectRemoved != 0) (m_pContainer->*m_pfOnObjectRemoved)(ItemNum); }
00194 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem) { (m_pContainer->*m_pfOnObjectSelected)(ObjItem); }
00195 virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem, INT32 ItemNum) { if (m_pfOnObjectSelectedNum != 0) {(m_pContainer->*m_pfOnObjectSelectedNum)(ObjItem, ItemNum);} else { (m_pContainer->*m_pfOnObjectSelected)(ObjItem); }}
00196 virtual void v_OnObjectsRemoved () { if (m_pfOnObjectsRemoved != 0) (m_pContainer->*m_pfOnObjectsRemoved)(); }
00197 #endif // GENERATING_DOXYGEN_OUTPUT
00198 };
00199
00200 }
00201
00202 #endif // INC_MGUI_FORMOBJL_H