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.9 2005/06/22 14:31:45 mju Exp $
00007  *
00008  * $Log: formobjl.h_v $
00009  * Revision 1.9  2005/06/22 14:31:45  mju
00010  * Use ptr for null item to avoid static constructor.
00011  *
00012  * Revision 1.8  2005/03/08 14:31:16  mju
00013  * Standardize template to specify container in ctor, remove Create method, rename setFunc methods.
00014  * Use MISTRING for create method.
00015  * Add Select method and notify request to clear().
00016  * Add onListChanged.
00017  * Remove redundant onObjectSelected.
00018  *
00019  * Revision 1.7  2003/10/03 19:58:19  linux32build!build
00020  * Doxygen
00021  *
00022  * Revision 1.6  2003/09/15 13:49:32  fileserver!dwilliss
00023  * Doxygen
00024  *
00025  * Revision 1.5  2003/05/22 20:28:34  scowan
00026  * If on object selected with two parms is null, call the one parm version.
00027  *
00028  * Revision 1.4  2003/04/24 15:49:44  scowan
00029  * Added virtual methods.
00030  *
00031  * Revision 1.3  2003/04/09 20:50:26  dwilliss
00032  * Don't use _T in templates.  Mac's ctype.h defines a global _T
00033  *
00034  * Revision 1.2  2003/02/27 15:49:50  scowan
00035  * Changed to pass all parameters in the create method.
00036  *
00037  * Revision 1.1  2003/02/27 01:24:16  scowan
00038  * Initial revision
00039  *
00040  * \endif
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 //! Form containing basic object selection list with "select", "remove", and "remove all" buttons.
00070 class FORM_OBJECT_LIST : public MGUI::FORM_COMPOSITE {
00071    public:
00072    
00073       //! Constructor.
00074       FORM_OBJECT_LIST (
00075          );
00076 
00077       //! Destructor.
00078       virtual ~FORM_OBJECT_LIST (
00079          );
00080          
00081       //! Clears out all of the selected objects
00082       void Clear (
00083          bool notify                   //!< Send notifications via virtual methods
00084          );
00085 
00086       //! Create object list form.
00087       ERRVALUE Create (
00088          MGUI::LAYOUT_PANE_BASE& ParentPane,          //!< Parent pane
00089          const MISTRING& promptstr,                   //!< Prompt string to use with DlgGetObjects
00090          const RVC::OBJTYPESET& ObjTypeSet,           //!< Set of object types that are selectable
00091          GETOBJFLAGS GetObjFlags = GETOBJFLAG_None,   //!< Flags for DlgGetObjects
00092          RVC::GETOBJFILTER* GetObjFilter = 0,         //!< Filter for DlgGetObjects
00093          int ListHeight = 5,                          //!< Initial list box height
00094          MGUI::LAYOUT_SIZEALIGN sizealign = MGUI::LAYOUT_SIZEALIGN_Expand
00095          );
00096 
00097       //! Get the current object, will return an empty OBJITEM if there is nothing in the list
00098       const RVC::OBJITEM& GetCurrentObject (
00099          ) const;
00100          
00101       //! Get the list of objects in the list         
00102       const RVC::OBJITEMLIST& GetObjectList (
00103          ) const { return (m_ObjItemList); }
00104 
00105       //! Is the list empty?        
00106       bool IsEmpty (
00107          ) const { return (m_ObjItemList.IsEmpty()); }
00108 
00109       //! Select objects via form.
00110       //! Behaves same as when 'Select' button pressed.
00111       ERRVALUE Select (
00112          bool notify                   //!< Send notifications via virtual methods
00113          );
00114          
00115    protected:
00116 
00117       //! Called for any change to objects in list.
00118       virtual void v_OnListChanged ();
00119 
00120       //! Called for each object added to list.
00121       virtual void v_OnObjectAdded (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00122 
00123       //! Called when single object removed from list.
00124       virtual void v_OnObjectRemoved (INT32 ItemNum);
00125 
00126       //! Called when object selected (highlighted) from list.
00127       virtual void v_OnObjectSelected (const RVC::OBJITEM& ObjItem, INT32 ItemNum);
00128 
00129       //! Called when objects added to list.
00130       virtual void v_OnObjectsAdded ();
00131 
00132       //! Called when all objects removed from list.
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 //! Convenience template for FORM_OBJECT_LIST to allow method in container class to be called.
00161 //! This template allows a method in a 'container' class to be called
00162 //! rather than requiring that a subclass be defined with virtual method overridden.
00163 template <class _CT> class FORM_OBJECT_LIST_T : public MGUI::FORM_OBJECT_LIST {
00164    public:
00165 
00166       //! Constructor.
00167       FORM_OBJECT_LIST_T (
00168          _CT *pContainer               //!< Pointer to container
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       //! Set container when not convenient to do in constructor.
00180       void SetContainer (
00181          _CT *pContainer
00182          ) { m_pContainer = pContainer; }
00183 
00184       //! Set method to call when user makes any change to list items.
00185       void SetFuncListChanged (
00186          void (_CT::*pfListChanged)()
00187          ) { m_pfOnListChanged = pfListChanged; };
00188 
00189       //! Set method to call when user adds an object to the list
00190       void SetFuncObjectAdded (
00191          void (_CT::*pfObjectAdded)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00192          ) { m_pfOnObjectAdded = pfObjectAdded; };
00193 
00194       //! Set method to call when user removes an object from the list
00195       void SetFuncObjectRemoved (
00196          void (_CT::*pfObjectRemoved)(INT32 ItemNum)
00197          ) { m_pfOnObjectRemoved = pfObjectRemoved; };
00198 
00199       //! Set method to call when user selects an object from the list
00200       void SetFuncObjectSelected (
00201          void (_CT::*pfObjectSelected)(const RVC::OBJITEM& ObjItem, INT32 ItemNum)
00202          ) { m_pfOnObjectSelected = pfObjectSelected; };
00203 
00204       //! Set method to call when user adds list items
00205       void SetFuncObjectsAdded (
00206          void (_CT::*pfObjectsAdded)()
00207          ) { m_pfOnObjectsAdded = pfObjectsAdded; };
00208 
00209       //! Set method to call when user removes all list items
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 }     // End of MGUI namespace
00234 
00235 #endif   // INC_MGUI_FORMOBJL_H

Generated on Wed May 31 15:26:45 2006 for TNTsdk by  doxygen 1.3.8-20040913