CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSGAction.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Core
4 // Class : CSGAction
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Thu May 29 20:58:11 CDT 2008
11 // $Id: CSGAction.cc,v 1.27 2009/12/08 01:43:11 chrjones Exp $
12 //
13 
14 // system include files
15 #include <TString.h>
16 #include <TGResourcePool.h>
17 #include <TQObject.h>
18 #include <KeySymbols.h>
19 #include <TGMenu.h>
20 
21 // user include files
26 
27 //
28 // constants, enums and typedefs
29 //
30 
31 //
32 // static data member definitions
33 //
34 
35 //
36 // constructors and destructor
37 //
38 CSGAction::CSGAction(CSGActionSupervisor *supervisor, const char *name) :
39  m_connector(0)
40  {
41  m_enabled = true;
42  m_globalEnabled = true;
43  m_supervisor = supervisor;
44  m_name = name;
45  m_toolTip = "";
46  m_menu = 0;
47  m_toolBar = 0;
48  m_tools = 0;
52  m_keycode = 0;
53  m_modcode = 0;
54  m_windowID = -1;
55 }
56 // CSGAction::CSGAction(const CSGAction& rhs)
57 // {
58 // // do actual copying here;
59 // }
60 
62 {
63  delete m_connector;
64  //Don't delete GUI parts since they are owned by their GUI parent
65 }
66 
67 //
68 // assignment operators
69 //
70 // const CSGAction& CSGAction::operator=(const CSGAction& rhs)
71 // {
72 // //An exception safe implementation is
73 // CSGAction temp(rhs);
74 // swap(rhs);
75 //
76 // return *this;
77 // }
78 
79 //
80 // member functions
81 //
82 const std::string& CSGAction::getName() const {
83  return m_name;
84 }
85 
86 const std::string& CSGAction::getToolTip() const {
87  return m_toolTip;
88 }
89 
90 TString CSGAction::getSCCombo() const {
91  return m_scCombo;
92 }
93 
94 void CSGAction::setName(const std::string& name) {
95  // Does not update menu yet
96  m_name = name;
97 }
98 
99 void
100 CSGAction::setMenuLabel(const std::string& label) {
101  if(m_menu) {
102  m_menu->GetEntry(m_entry)->GetLabel()->SetString(label.c_str());
103  }
104 }
105 
106 void CSGAction::setToolTip(const std::string& tip) {
107  m_toolTip = tip;
108  for(std::vector<TGButton*>::iterator it = m_buttons.begin(), itEnd = m_buttons.end();
109  it != itEnd;
110  ++it) {
111  (*it)->SetToolTipText(tip.c_str(), m_supervisor->getToolTipDelay());
112  }
113  if (m_tools != 0) m_tools->fTipText = tip.c_str();
114 }
115 
116 void CSGAction::createTextButton(TGCompositeFrame* p, TGLayoutHints* l, Int_t id, GContext_t norm, FontStruct_t font, UInt_t option) {
117  TGTextButton* textButton = new TGTextButton(p, m_name.c_str(), id, norm, font, option);
118  if (m_toolTip != "") textButton->SetToolTipText(m_toolTip.c_str(), m_supervisor->getToolTipDelay());
119  p->AddFrame(textButton, l);
120  TQObject::Connect(textButton, "Clicked()", "CSGAction", this, "activate()");
121  m_buttons.push_back(textButton);
122  if(!isEnabled()) {
123  textButton->SetEnabled(kFALSE);
124  }
125 }
126 
127 void CSGAction::createCheckButton(TGCompositeFrame* p, TGLayoutHints* l, Bool_t state, Int_t id, GContext_t norm, FontStruct_t font) {
128  TGCheckButton* checkButton = new TGCheckButton(p, m_name.c_str(), id, norm, font);
129  if (m_toolTip != "") checkButton->SetToolTipText(m_toolTip.c_str(), m_supervisor->getToolTipDelay());
130  p->AddFrame(checkButton, l);
131 
132  if (state) checkButton->SetState(kButtonDown, false);
133  TQObject::Connect(checkButton, "Clicked()", "CSGAction", this, "activate()");
134  m_buttons.push_back(checkButton);
135  if(!isEnabled()) {
136  checkButton->SetEnabled(kFALSE);
137  }
138 }
139 
140 void CSGAction::createPictureButton(TGCompositeFrame* p, const TGPicture* pic, TGLayoutHints* l, Int_t id, GContext_t norm, UInt_t option) {
141  TGPictureButton* picButton = new TGPictureButton(p, pic, id, norm, option);
142  if (m_toolTip != "") picButton->SetToolTipText(m_toolTip.c_str(), m_supervisor->getToolTipDelay());
143  p->AddFrame(picButton, l);
144  TQObject::Connect(picButton, "Clicked()", "CSGAction", this, "activate()");
145  m_buttons.push_back(picButton);
146  if(!isEnabled()) {
147  picButton->SetEnabled(kFALSE);
148  }
149 }
150 
153  const TGPicture* upPic,
154  const TGPicture* downPic,
155  const TGPicture* disabledPic,
156  TGLayoutHints* l,
157  Int_t id,
158  GContext_t norm,
159  UInt_t option)
160 {
161  FWCustomIconsButton* picButton = new FWCustomIconsButton(p, upPic, downPic, disabledPic, 0, id, norm, option);
162  if (m_toolTip != "") picButton->SetToolTipText(m_toolTip.c_str(), m_supervisor->getToolTipDelay());
163  p->AddFrame(picButton, l);
164  TQObject::Connect(picButton, "Clicked()", "CSGAction", this, "activate()");
165  m_buttons.push_back(picButton);
166  if(!isEnabled()) {
167  picButton->SetEnabled(kFALSE);
168  }
169  return picButton;
170 }
171 
172 void CSGAction::createShortcut(UInt_t key, const char *mod, int windowID) {
173  Int_t keycode = gVirtualX->KeysymToKeycode((int)key);
174  m_windowID = windowID;
175  Int_t modcode;
176  TString scText;
177  if (strcmp(mod, "CTRL") == 0) {
178  modcode = kKeyControlMask;
179  scText = "<ctrl> ";
180  }
181  else if (strcmp(mod, "CTRL+SHIFT") == 0) {
182  modcode = kKeyControlMask | kKeyShiftMask;
183  scText = "<ctrl> <shift> ";
184  }
185  else {
186  // Default to ALT for now
187  modcode = kKeyMod1Mask;
188  scText = "<alt> ";
189  }
190  scText += keycodeToString(keycode);
191  m_scCombo = scText;
192 
193  gVirtualX->GrabKey(m_windowID, keycode, modcode, kTRUE);
194  gVirtualX->GrabKey(m_windowID, keycode, modcode | kKeyMod2Mask, kTRUE);
195  gVirtualX->GrabKey(m_windowID, keycode, modcode | kKeyLockMask, kTRUE);
196  gVirtualX->GrabKey(m_windowID, keycode, modcode | kKeyMod2Mask | kKeyLockMask, kTRUE);
197 
198  m_keycode = keycode;
199  m_modcode = modcode;
200  if (m_menu != 0) addSCToMenu();
201 }
202 
203 void CSGAction::createMenuEntry(TGPopupMenu *menu) {
204  m_menu = menu;
205  if (!(menu->HasConnection("Activated(Int_t)"))) TQObject::Connect(menu, "Activated(Int_t)", "CSGConnector", m_connector, "handleMenu(Int_t)");
206  menu->AddEntry(m_name.c_str(), m_entry);
207  if (m_keycode != 0) addSCToMenu();
208  if(!isEnabled()) {
209  m_menu->DisableEntry(m_entry);
210  }
211 }
212 
214  Bool_t widthChanged = resizeMenuEntry();
215  if (widthChanged) m_supervisor->resizeMenu(m_menu);
216 }
217 
219  FontStruct_t font = gClient->GetResourcePool()->GetMenuHiliteFont()->GetFontStruct();
220  Bool_t widthChanged = kTRUE;
221  UInt_t width = m_menu->GetWidth();
222  TString realName(m_name);
223  if (realName.Contains("->")) {
224  // Should make function to do this and store in member data...
225  while (!(realName.BeginsWith("->")) && realName.Length() > 0) {
226  realName.Replace(0,1,0,0);
227  }
228  realName.Replace(0,2,0,0);
229  }
230  TString scText = m_scCombo;
231  while (gVirtualX->TextWidth(font, realName.Data(), realName.Length()) + gVirtualX->TextWidth(font, scText.Data(), scText.Length()) + 53 < (Int_t)width) {
232  widthChanged = kFALSE;
233  realName += " ";
234  }
235  realName += "\t";
236  realName += scText;
237  TIter next(m_menu->GetListOfEntries());
238  TGMenuEntry *current;
239  while (0 != (current = (TGMenuEntry *)next())) {
240  if (current == m_menu->GetEntry(m_entry)) {
241  break;
242  }
243  }
244  current = (TGMenuEntry *)next();
245  m_menu->DeleteEntry(m_entry);
246  m_menu->AddEntry(realName, m_entry, 0, 0, current);
247  return widthChanged;
248 }
249 
250 TGPopupMenu* CSGAction::getMenu() const {
251  return m_menu;
252 }
253 
255  return m_entry;
256 }
257 
258 Int_t CSGAction::getKeycode() const {
259  return m_keycode;
260 }
261 
262 Int_t CSGAction::getModcode() const {
263  return m_modcode;
264 }
265 
266 ToolBarData_t* CSGAction::getToolBarData() const {
267  return m_tools;
268 }
269 
270 TGToolBar* CSGAction::getToolBar() const {
271  return m_toolBar;
272 }
273 
275  m_enabled = true;
276  enableImp();
277 }
278 
280  m_enabled = false;
281  disableImp();
282 }
283 
284 void
286 {
287  m_globalEnabled=true;
288  enableImp();
289 }
290 
291 void
293 {
294  m_globalEnabled=false;
295  disableImp();
296 }
297 
298 Bool_t CSGAction::isEnabled() const {
299  return m_enabled && m_globalEnabled;
300 }
301 
303  if(isEnabled()) {
304  if (m_menu != 0) m_menu->EnableEntry(m_entry);
305  for(std::vector<TGButton*>::iterator it = m_buttons.begin(), itEnd = m_buttons.end();
306  it != itEnd;
307  ++it) {
308  (*it)->SetEnabled(kTRUE);
309  }
310 
311  if (m_toolBar != 0) m_toolBar->GetButton(m_entry)->SetEnabled(kTRUE);
312  if (m_keycode != 0) {
313  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode, kTRUE);
314  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyMod2Mask, kTRUE);
315  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyLockMask, kTRUE);
316  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyMod2Mask | kKeyLockMask, kTRUE);
317  }
318  }
319 }
320 
322  if(!isEnabled()) {
323  if (m_menu != 0) m_menu->DisableEntry(m_entry);
324  for(std::vector<TGButton*>::iterator it = m_buttons.begin(), itEnd = m_buttons.end();
325  it != itEnd;
326  ++it) {
327  (*it)->SetEnabled(kFALSE);
328  }
329  if (m_toolBar != 0) m_toolBar->GetButton(m_entry)->SetEnabled(kFALSE);
330  if (m_keycode != 0) {
331  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode, kFALSE);
332  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyMod2Mask, kFALSE);
333  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyLockMask, kFALSE);
334  gVirtualX->GrabKey(m_windowID, m_keycode, m_modcode | kKeyMod2Mask | kKeyLockMask, kFALSE);
335  }
336  }
337 }
338 
339 
340 //
341 // static member functions
342 //
343 
344 TString
346  int i;
347  char letter;
348  TString rep;
349  for (i = kKey_a; i < kKey_a + 26; i++) {
350  if (gVirtualX->KeysymToKeycode(i) == keycode) {
351  letter = (char)(i - kKey_a + 'a');
352  rep = TString(letter);
353  return rep;
354  }
355  }
356  for (i = kKey_A; i < kKey_A + 26; i++) {
357  if(gVirtualX->KeysymToKeycode(i) == keycode) {
358  letter = (char)(i - kKey_A + 'a');
359  rep = TString(letter);
360  return rep;
361  }
362  }
363  if (keycode == gVirtualX->KeysymToKeycode(kKey_Left)) {
364  rep = TString("<-");
365  return rep;
366  }
367  if (keycode == gVirtualX->KeysymToKeycode(kKey_Right)) {
368  rep = TString("->");
369  return rep;
370  }
371  rep = TString("");
372  return rep;
373 }
374 
const std::string & getName() const
Definition: CSGAction.cc:82
int i
Definition: DBlmapReader.cc:9
int m_entry
Definition: CSGAction.h:107
Int_t m_modcode
Definition: CSGAction.h:105
TString m_scCombo
Definition: CSGAction.h:102
ToolBarData_t * getToolBarData() const
Definition: CSGAction.cc:266
const std::string & label
Definition: MVAComputer.cc:186
virtual ~CSGAction()
Definition: CSGAction.cc:61
ToolBarData_t * m_tools
Definition: CSGAction.h:109
void setMenuLabel(const std::string &label)
Definition: CSGAction.cc:100
void enable()
Definition: CSGAction.cc:274
void disableImp()
Definition: CSGAction.cc:321
TGPopupMenu * getMenu() const
Definition: CSGAction.cc:250
void addSCToMenu()
Definition: CSGAction.cc:213
void createCheckButton(TGCompositeFrame *p, TGLayoutHints *l=0, Bool_t state=true, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), FontStruct_t font=TGTextButton::GetDefaultFontStruct())
Definition: CSGAction.cc:127
CSGConnector * m_connector
Definition: CSGAction.h:110
void resizeMenu(TGPopupMenu *menu)
TGToolBar * m_toolBar
Definition: CSGAction.h:108
TGPopupMenu * m_menu
Definition: CSGAction.h:106
int m_windowID
Definition: CSGAction.h:113
void disable()
Definition: CSGAction.cc:279
void createPictureButton(TGCompositeFrame *p, const TGPicture *pic, TGLayoutHints *l=0, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), UInt_t option=kRaisedFrame|kDoubleBorder)
Definition: CSGAction.cc:140
Bool_t m_enabled
Definition: CSGAction.h:111
virtual void globalDisable()
Definition: CSGAction.cc:292
void addToActionMap(CSGAction *action)
TGToolBar * getToolBar() const
Definition: CSGAction.cc:270
void setToolTip(const std::string &tip)
Definition: CSGAction.cc:106
virtual Bool_t isEnabled() const
Definition: CSGAction.cc:298
Long_t getToolTipDelay() const
static TString keycodeToString(Int_t keycode)
Definition: CSGAction.cc:345
tuple norm
Definition: lumiNorm.py:78
Bool_t m_globalEnabled
Definition: CSGAction.h:112
TString getSCCombo() const
Definition: CSGAction.cc:90
int getMenuEntry() const
Definition: CSGAction.cc:254
CSGActionSupervisor * m_supervisor
Definition: CSGAction.h:99
void setName(const std::string &name)
Definition: CSGAction.cc:94
void enableImp()
Definition: CSGAction.cc:302
void createMenuEntry(TGPopupMenu *menu)
Definition: CSGAction.cc:203
Int_t getKeycode() const
Definition: CSGAction.cc:258
CSGAction(CSGActionSupervisor *supervisor, const char *name)
Definition: CSGAction.cc:38
unsigned int UInt_t
Definition: FUTypes.h:12
virtual void globalEnable()
Definition: CSGAction.cc:285
std::vector< TGButton * > m_buttons
Definition: CSGAction.h:103
FWCustomIconsButton * createCustomIconsButton(TGCompositeFrame *p, const TGPicture *upPic, const TGPicture *downPic, const TGPicture *disabledPic, TGLayoutHints *l=0, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), UInt_t option=0)
Definition: CSGAction.cc:152
void createTextButton(TGCompositeFrame *p, TGLayoutHints *l=0, Int_t id=-1, GContext_t norm=TGButton::GetDefaultGC()(), FontStruct_t font=TGTextButton::GetDefaultFontStruct(), UInt_t option=kRaisedFrame|kDoubleBorder)
Definition: CSGAction.cc:116
char state
Definition: procUtils.cc:75
list key
Definition: combine.py:13
const std::vector< CSGAction * > & getListOfActions() const
std::string m_toolTip
Definition: CSGAction.h:101
void createShortcut(UInt_t key, const char *mod, int windowID)
Definition: CSGAction.cc:172
Int_t getModcode() const
Definition: CSGAction.cc:262
std::string m_name
Definition: CSGAction.h:100
Bool_t resizeMenuEntry()
Definition: CSGAction.cc:218
const std::string & getToolTip() const
Definition: CSGAction.cc:86
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
Int_t m_keycode
Definition: CSGAction.h:104