mgui/formobjl.h

Go to the documentation of this file.
00001 /**
00002  * \file mgui/formobjl.h
00003  * \brief MGUI::FORM_OBJECT_LIST class definitions
00004  *
00005  * \if NODOC
00006  * $Id: formobjl.h_v 1.7 2003/10/03 19:58:19 linux32build!build Exp $
00007  *
00008  * $Log: formobjl.h_v $
00009  * Revision 1.7  2003/10/03 19:58:19  linux32build!build
00010  * Doxygen
00011  *
00012  * Revision 1.6  2003/09/15 13:49:32  fileserver!dwilliss
00013  * Doxygen
00014  *
00015  * Revision 1.5  2003/05/22 20:28:34  scowan
00016  * If on object selected with two parms is null, call the one parm version.
00017  *
00018  * Revision 1.4  2003/04/24 15:49:44  scowan
00019  * Added virtual methods.
00020  *
00021  * Revision 1.3  2003/04/09 20:50:26  dwilliss
00022  * Don't use _T in templates.  Mac's ctype.h defines a global _T
00023  *
00024  * Revision 1.2  2003/02/27 15:49:50  scowan
00025  * Changed to pass all parameters in the create method.
00026  *
00027  * Revision 1.1  2003/02/27 01:24:16  scowan
00028  * Initial revision
00029  *
00030  * \endif
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 //! Form containing basic object selection list with "select", "remove", and "remove all"
00060 class FORM_OBJECT_LIST : public MGUI::FORM_COMPOSITE {
00061    public:
00062    
00063       //! Constructor.
00064       FORM_OBJECT_LIST (
00065          );
00066 
00067       //! Destructor.
00068       virtual ~FORM_OBJECT_LIST (
00069          );
00070          
00071       //! Clears out all of the selected objects
00072       void Clear (
00073          );
00074 
00075       //! Create
00076       ERRVALUE Create (
00077          MGUI::LAYOUT_PANE_BASE& ParentPane,          //!< Parent pane
00078          TEXTID TextID,                               //!< Usually in the form of TEXTID_Prompt_XXXs_Input
00079          const RVC::OBJTYPESET& ObjTypeSet,           //!< Set of objects that are selectable
00080          GETOBJFLAGS GetObjFlags = GETOBJFLAG_None,
00081          RVC::GETOBJFILTER* GetObjFilter = 0,
00082          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00083          );
00084 
00085       //! Get the current object, will return an empty OBJITEM if there is nothing in the list
00086       const RVC::OBJITEM& GetCurrentObject (
00087          ) const;
00088          
00089       //! Get the list of objects in the list         
00090       const RVC::OBJITEMLIST& GetObjectList (
00091          ) const;
00092 
00093       //! Is the list empty?        
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 //! Convenience template for OBJECT_LIST form to allow method in container class to be called.
00131 //! This template allows a method in a 'container' class to be called when the button is pressed,
00132 //! rather than requiring that a subclass be defined with the OnPressed() virtual method overridden.
00133 template <class _CT> class FORM_OBJECT_LIST_T : public MGUI::FORM_OBJECT_LIST {
00134    public:
00135 
00136       //! Constructor.
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       //! Create control with label from resource lookup.
00148       void Create (
00149          MGUI::LAYOUT_PANE_BASE& ParentPane,    //!< Parent pane
00150          _CT *pContainer,                       //!< Pointer to callback container class
00151          void (_CT::*pfOnObjectSelected)(const RVC::OBJITEM& ObjItem),        //! Callback function pointer
00152          TEXTID TextID,                               //!< Usually in the form of TEXTID_Prompt_XXXs_Input
00153          const RVC::OBJTYPESET& ObjTypeSet,           //!< Set of objects that are selectable
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       //! Set method to call when user adds an object to the list
00164       void SetObjectAdded (
00165          void (_CT::*ObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00166          ) { m_pfOnObjectAdded = ObjectAdded; };
00167 
00168       //! Set method to call when user removes an object from the list
00169       void SetObjectRemoved (
00170          void (_CT::*ObjectRemoved)(INT32 ItemNum)
00171          ) { m_pfOnObjectRemoved = ObjectRemoved; };
00172 
00173       //! Set method to call when user selects an object from the list
00174       void SetObjectSelected (
00175          void (_CT::*ObjectSelected)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00176          ) { m_pfOnObjectSelectedNum = ObjectSelected; };
00177 
00178       //! Set method to call when user removes all list items
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 }     // End of MGUI namespace
00201 
00202 #endif   // INC_MGUI_FORMOBJL_H

Generated on Thu Aug 12 06:18:28 2004 for TNTsdk by doxygen 1.3.4-20031026