00001 #include "GuiMenuThings.h"
00002
00003 #include <sigc++/sigc++.h>
00004 #include <sigc++/class_slot.h>
00005
00006 using namespace std;
00007
00008 GuiToggledMenuItem::GuiToggledMenuItem( Bool_t state ) :
00009 fState(state)
00010 {
00011 }
00012
00013 GuiMenu::GuiMenuList::iterator
00014 GuiToggledMenuItem::AddToMenu( GuiMenu* menu , const char* name)
00015 {
00016 GuiMenuItr mit = menu->Add(name);
00017 (*mit)->Connect(bind(bind(slot_class(*this,&GuiToggledMenuItem::CallBack),
00018 mit) , menu));
00019 menu->CheckEntry(mit, (fState));
00020 return mit;
00021 }
00022
00023 void GuiToggledMenuItem::CallBack(GuiMenu* menu, GuiMenu::GuiMenuList::iterator mit)
00024 {
00025 fState = !(fState);
00026 menu->CheckEntry(mit, (fState));
00027 fSig.emit();
00028 }
00029
00030 void GuiToggledMenuItem::SetState(Bool_t set)
00031 {
00032 fState = set;
00033 fSig.emit();
00034 }
00035
00036
00037
00039
00040
00041 GuiToggledSubMenu::GuiToggledSubMenu( Int_t state ) :
00042 fState(state),
00043 fMenu(0)
00044 {
00045 }
00046
00047 GuiMenu* GuiToggledSubMenu::CreateMenu(GuiMenu* parent, const char* menuname )
00048 {
00049 fMenu = manage(new GuiMenu);
00050 parent->Add(menuname,*fMenu);
00051 return fMenu.get();
00052 }
00053
00054 GuiMenuItr GuiToggledSubMenu::AddItem(const char* name, Int_t value )
00055 {
00056 GuiMenuItr mit = fMenu->Add(name);
00057 (*mit)->Connect(bind(bind(bind(slot_class(*this,&GuiToggledSubMenu::CallBack),
00058 value ) ,mit) , fMenu));
00059 fMenu->CheckEntry(mit, (value==fState));
00060
00061 return mit;
00062 }
00063
00064 void GuiToggledSubMenu::CallBack(GuiMenu* menu,
00065 GuiMenu::GuiMenuList::iterator mit,
00066 Int_t value)
00067 {
00068 fState = value;
00069
00070 GuiMenu::GuiMenuList& mlist = menu->GetMenuList();
00071 GuiMenu::GuiMenuList::iterator it, done = mlist.end();
00072 for (it = mlist.begin(); it != done; ++it)
00073 menu->CheckEntry(it,false);
00074 menu->CheckEntry(mit,true);
00075
00076
00077 fSig0.emit();
00078 fSig1.emit(fState);
00079 }