#ifndef GUIMENUCHECKITEM #define GUIMENUCHECKITEM 1 ///////////////////////////////////////////////////// //! docentry="GUI.Widget" //! rcsid="$Id: MenuCheck.hh,v 1.7 2000/08/17 15:24:31 ees1cg Exp $" //! file="amma/GUI/GTK/MenuCheck.hh" //! lib=GUI //! author="Charles Galambos" //! date="26/07/99" #include "amma/GUI/Menu.hh" //! userlevel=Develop //: Menu check item body class GUIMenuCheckItemBodyC : public GUIMenuItemBodyC { public: GUIMenuCheckItemBodyC(const StringC &lab,BooleanT initActive= false); //: Constructor. virtual BooleanT Create(); //: Create the widget. BooleanT IsActive() const; //: Test if toggle is active. void SetActive(BooleanT val); //: Set active. Signal1C &SelectedToggle() { return selectedToggle; } //: Toggle select signal. protected: virtual void Destroy(); //: Undo all refrences static int doSelected(GtkWidget *widget,Signal1C *data); Signal1C selectedToggle; BooleanT active; }; //! userlevel=Normal //: Menu item class GUIMenuCheckItemC : public GUIMenuItemC { public: GUIMenuCheckItemC() : DPEntityC(TRUE) {} //: Default constructor GUIMenuCheckItemC(const StringC &name,BooleanT initActive = FALSE) : DPEntityC(*new GUIMenuCheckItemBodyC(name,initActive)) {} //: Constructor GUIMenuCheckItemC(GUIMenuCheckItemBodyC &bod) : DPEntityC(bod) {} //: Body constructor protected: GUIMenuCheckItemBodyC &Body() { return dynamic_cast(DPEntityC::Body()); } //: Access body. const GUIMenuCheckItemBodyC &Body() const { return dynamic_cast(DPEntityC::Body()); } //: Access body. public: BooleanT IsActive() const { return Body().IsActive(); } //: Test if toggle is active. void SetActive(BooleanT val) { Body().SetActive(val); } //: Set active status. // Thread safe. (or will be). Signal1C &SelectedToggle() { return Body().SelectedToggle(); } //: Toggle select signal. }; namespace StdGUI { //: Call a function. template GUIMenuCheckItemC MenuCheckItem(const StringC &label,void (*func)(BooleanT &, Data1T &),const Data1T &dat1 = Data1T()) { GUIMenuCheckItemC ret(label); StdDP::Connect(ret.SelectedToggle(),func,false,dat1); return ret; } template GUIMenuCheckItemC MenuCheckItem(const StringC &label,const DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label); StdDP::Connect(ret.SelectedToggle(),obj,func); return ret; } template GUIMenuCheckItemC MenuCheckItemRef(const StringC &label,DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label); StdDP::ConnectRef(ret.SelectedToggle(),obj,func); return ret; } //: Menu check item, call refrenced class's method. // OBSOLETE: Use MenuCheckItermR. template GUIMenuCheckItemC MenuCheckItemR(const StringC &label,DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label); StdDP::ConnectRef(ret.SelectedToggle(),obj,func); return ret; } //: Menu check item, call refrenced class's method. template GUIMenuCheckItemC MenuCheckItem(const StringC &label,BooleanT initActive,const DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label,initActive); StdDP::Connect(ret.SelectedToggle(),obj,func); return ret; } template GUIMenuCheckItemC MenuCheckItemRef(const StringC &label,BooleanT initActive,DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label,initActive); StdDP::ConnectRef(ret.SelectedToggle(),obj,func); return ret; } // OBSOLETE: Use MenuCheckItermR. template GUIMenuCheckItemC MenuCheckItemR(const StringC &label,BooleanT initActive,DataT &obj,void (DataT::*func)(BooleanT &)) { GUIMenuCheckItemC ret(label,initActive); StdDP::ConnectRef(ret.SelectedToggle(),obj,func); return ret; } } #endif