Logo ROOT  
Reference Guide
TGToolBar.cxx
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Fons Rademakers 25/02/98
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11/**************************************************************************
12
13 This source is based on Xclass95, a Win95-looking GUI toolkit.
14 Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.
15
16 Xclass95 is free software; you can redistribute it and/or
17 modify it under the terms of the GNU Library General Public
18 License as published by the Free Software Foundation; either
19 version 2 of the License, or (at your option) any later version.
20
21**************************************************************************/
22
23//////////////////////////////////////////////////////////////////////////
24// //
25// TGToolBar //
26// //
27// A toolbar is a composite frame that contains TGPictureButtons. //
28// Often used in combination with a TGHorizontal3DLine. //
29// //
30//////////////////////////////////////////////////////////////////////////
31
32#include "TGToolBar.h"
33#include "TList.h"
34#include "TGButton.h"
35#include "TGPicture.h"
36#include "TGToolTip.h"
37#include "TSystem.h"
38#include "TROOT.h"
39#include "Riostream.h"
40#include "TMap.h"
41
42
44
45////////////////////////////////////////////////////////////////////////////////
46
48 UInt_t options, ULong_t back) :
49 TGCompositeFrame(p, w, h, options, back)
50
51{
52 // Create toolbar widget.
53
54 fPictures = new TList;
55 fTrash = new TList;
56 fMapOfButtons = new TMap(); // map of button/id pairs
57
59}
60
61////////////////////////////////////////////////////////////////////////////////
62/// Delete toolbar and its buttons and layout hints.
63
65{
66 if (!MustCleanup()) {
67 if (fTrash) fTrash->Clear("nodelete");
68 }
69 delete fTrash;
70 fTrash = 0;
71
72 TIter next(fPictures);
73 const TGPicture *p;
74 while ((p = (const TGPicture *) next()))
76
77 // pictures might already have been deleted above, so avoid access
78 // to these objects
79 fPictures->Clear("nodelete");
80
81 delete fPictures;
82 delete fMapOfButtons;
83}
84
85////////////////////////////////////////////////////////////////////////////////
86/// Add button to toolbar. All buttons added via this method will be
87/// deleted by the toolbar. On return the TGButton field of the
88/// ToolBarData_t struct is filled in (if fPixmap was valid).
89/// Window w is the window to which the button messages will be send.
90
92{
93 const TGPicture *pic = fClient->GetPicture(button->fPixmap);
94 if (!pic) {
95 Error("AddButton", "pixmap not found: %s", button->fPixmap);
96 return 0;
97 }
98 fPictures->Add((TObject*)pic);
99
100 TGPictureButton *pbut;
101 TGLayoutHints *layout;
102
103 pbut = new TGPictureButton(this, pic, button->fId);
104 pbut->SetStyle(gClient->GetStyle());
105 pbut->SetToolTipText(button->fTipText);
106
107 layout = new TGLayoutHints(kLHintsTop | kLHintsLeft, spacing, 0, 2, 2);
108 AddFrame(pbut, layout);
109 pbut->AllowStayDown(button->fStayDown);
110 pbut->Associate(w);
111 button->fButton = pbut;
112
113 fTrash->Add(pbut);
114 fTrash->Add(layout);
115
116 fMapOfButtons->Add(pbut, (TObject*)((Long_t)button->fId));
117
118 Connect(pbut, "Pressed()" , "TGToolBar", this, "ButtonPressed()");
119 Connect(pbut, "Released()", "TGToolBar", this, "ButtonReleased()");
120 Connect(pbut, "Clicked()" , "TGToolBar", this, "ButtonClicked()");
121
122 return pbut;
123}
124
125////////////////////////////////////////////////////////////////////////////////
126/// Add button to toolbar. All buttons added via this method will be deleted
127/// by the toolbar, w is the window to which the button messages will be send.
128
130{
131 const TGPicture *pic = pbut->GetPicture();
132 fPictures->Add((TObject*)pic);
133
134 TGLayoutHints *layout;
135 layout = new TGLayoutHints(kLHintsTop | kLHintsLeft, spacing, 0, 2, 2);
136 pbut->SetStyle(gClient->GetStyle());
137 AddFrame(pbut, layout);
138 pbut->Associate(w);
139
140 fTrash->Add(pbut);
141 fTrash->Add(layout);
142
143 fMapOfButtons->Add(pbut, (TObject*)((Long_t)pbut->WidgetId()));
144
145 Connect(pbut, "Pressed()" , "TGToolBar", this, "ButtonPressed()");
146 Connect(pbut, "Released()", "TGToolBar", this, "ButtonReleased()");
147 Connect(pbut, "Clicked()" , "TGToolBar", this, "ButtonClicked()");
148
149 return pbut;
150}
151
152////////////////////////////////////////////////////////////////////////////////
153/// Finds and returns a pointer to the button with the specified
154/// identifier id. Returns null if the button was not found.
155
157{
158 TIter next(fMapOfButtons);
159 TGButton *item = 0;
160
161 while ((item = (TGButton*)next())) {
162 if ((Long_t)fMapOfButtons->GetValue(item) == id) break; // found
163 }
164
165 return item;
166}
167
168////////////////////////////////////////////////////////////////////////////////
169/// changes id for button.
170
172{
173 TPair *a = (TPair*) fMapOfButtons->FindObject(button);
174 if (a) {
175 a->SetValue((TObject*)id);
176 }
177}
178
179////////////////////////////////////////////////////////////////////////////////
180/// Finds and returns the id of the button.
181/// Returns -1 if the button is not a member of this group.
182
184{
185 TPair *a = (TPair*) fMapOfButtons->FindObject(button);
186 if (a)
187 return Long_t(a->Value());
188 else
189 return Long_t(-1);
190}
191
192////////////////////////////////////////////////////////////////////////////////
193/// Change the icon of a toolbar button.
194
195void TGToolBar::ChangeIcon(ToolBarData_t *button, const char *new_icon)
196{
197 const TGPicture *pic = fClient->GetPicture(new_icon);
198 if (!pic) {
199 Error("ChangeIcon", "pixmap not found: %s", new_icon);
200 return;
201 }
202 fPictures->Add((TObject*)pic);
203
204 ((TGPictureButton *)button->fButton)->SetPicture(pic);
205}
206
207////////////////////////////////////////////////////////////////////////////////
208/// Cleanup and delete all objects contained in this composite frame.
209/// This will delete all objects added via AddFrame().
210/// CAUTION: all objects (frames and layout hints) must be unique, i.e.
211/// cannot be shared.
212
214{
215 // avoid double deletion of objects in trash
216 delete fTrash;
217 fTrash = 0;
218
220}
221
222////////////////////////////////////////////////////////////////////////////////
223/// This slot is activated when one of the buttons in the group emits the
224/// Pressed() signal.
225
227{
228 TGButton *btn = (TGButton*)gTQSender;
229
231 if (a) {
232 Int_t id = (Int_t)Long_t(a->Value());
233 Pressed(id);
234 }
235}
236
237////////////////////////////////////////////////////////////////////////////////
238/// This slot is activated when one of the buttons in the group emits the
239/// Released() signal.
240
242{
243 TGButton *btn = (TGButton*)gTQSender;
244
246 if (a) {
247 Int_t id = (Int_t)Long_t(a->Value());
248 Released(id);
249 }
250}
251
252////////////////////////////////////////////////////////////////////////////////
253/// This slot is activated when one of the buttons in the group emits the
254/// Clicked() signal.
255
257{
258 TGButton *btn = (TGButton*)gTQSender;
259
261 if (a) {
262 Int_t id = (Int_t)Long_t(a->Value());
263 Clicked(id);
264 }
265}
266
267////////////////////////////////////////////////////////////////////////////////
268/// Save an horizontal slider as a C++ statement(s) on output stream out.
269
270void TGToolBar::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
271{
273
274 out << std::endl;
275 out << " // tool bar" << std::endl;
276
277 out << " TGToolBar *";
278 out << GetName() << " = new TGToolBar(" << fParent->GetName()
279 << "," << GetWidth() << "," << GetHeight();
280
282 if (!GetOptions()) {
283 out <<");" << std::endl;
284 } else {
285 out << "," << GetOptionString() <<");" << std::endl;
286 }
287 } else {
288 out << "," << GetOptionString() << ",ucolor);" << std::endl;
289 }
290 if (option && strstr(option, "keep_names"))
291 out << " " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;
292
293 char quote = '"';
294
295 int i = 0;
296
298 TIter next(GetList());
299
300 while ((f = (TGFrameElement *) next())) {
301 if (f->fFrame->InheritsFrom(TGPictureButton::Class())) {
302 if (!gROOT->ClassSaved(TGPictureButton::Class())) {
303 // declare a structure used for pictute buttons
304 out << std::endl << " ToolBarData_t t;" << std::endl;
305 }
306
307 TGPictureButton *pb = (TGPictureButton *)f->fFrame;
308 TString picname = gSystem->UnixPathName(pb->GetPicture()->GetName());
309 gSystem->ExpandPathName(picname);
310
311 out << " t.fPixmap = " << quote << picname << quote << ";" << std::endl;
312 out << " t.fTipText = " << quote
313 << pb->GetToolTip()->GetText()->GetString() << quote << ";" << std::endl;
314 if (pb->GetState() == kButtonDown) {
315 out << " t.fStayDown = kTRUE;" << std::endl;
316 } else {
317 out << " t.fStayDown = kFALSE;" << std::endl;
318 }
319 out << " t.fId = " << i+1 << ";" << std::endl;
320 out << " t.fButton = 0;" << std::endl;
321 out << " " << GetName() << "->AddButton(" << GetParent()->GetName()
322 << ",&t," << f->fLayout->GetPadLeft() << ");" << std::endl;
323 if (pb->GetState() == kButtonDown) {
324 out << " TGButton *" << pb->GetName() << " = t.fButton;" << std::endl;
325 out << " " << pb->GetName() << "->SetState(kButtonDown);" << std::endl;
326 }
327 if (pb->GetState() == kButtonDisabled) {
328 out << " TGButton *" << pb->GetName() << " = t.fButton;" << std::endl;
329 out << " " << pb->GetName() << "->SetState(kButtonDisabled);" << std::endl;
330 }
331 if (pb->GetState() == kButtonEngaged) {
332 out << " TGButton *" << pb->GetName() << " = t.fButton;" << std::endl;
333 out << " " << pb->GetName() << "->SetState(kButtonEngaged);" << std::endl;
334 }
335 i++;
336 } else {
337 f->fFrame->SavePrimitive(out, option);
338 out << " " << GetName()<<"->AddFrame(" << f->fFrame->GetName();
339 f->fLayout->SavePrimitive(out, option);
340 out << ");"<< std::endl;
341 }
342 }
343}
void Class()
Definition: Class.C:29
#define f(i)
Definition: RSha256.hxx:104
#define h(i)
Definition: RSha256.hxx:106
int Int_t
Definition: RtypesCore.h:43
unsigned long ULong_t
Definition: RtypesCore.h:53
long Long_t
Definition: RtypesCore.h:52
const char Option_t
Definition: RtypesCore.h:64
#define ClassImp(name)
Definition: Rtypes.h:361
@ kButtonDown
Definition: TGButton.h:54
@ kButtonDisabled
Definition: TGButton.h:56
@ kButtonEngaged
Definition: TGButton.h:55
#define gClient
Definition: TGClient.h:166
@ kLHintsLeft
Definition: TGLayout.h:31
@ kLHintsTop
Definition: TGLayout.h:34
XFontStruct * id
Definition: TGX11.cxx:108
R__EXTERN void * gTQSender
Definition: TQObject.h:44
#define gROOT
Definition: TROOT.h:406
R__EXTERN TSystem * gSystem
Definition: TSystem.h:556
virtual void SetToolTipText(const char *text, Long_t delayms=400)
Set tool tip text associated with this button.
Definition: TGButton.cxx:397
virtual EButtonState GetState() const
Definition: TGButton.h:112
virtual void AllowStayDown(Bool_t a)
Definition: TGButton.h:113
virtual void SetStyle(UInt_t newstyle)
Set the button style (modern or classic).
Definition: TGButton.cxx:223
virtual TGToolTip * GetToolTip() const
Definition: TGButton.h:110
const TGPicture * GetPicture(const char *name)
Get picture from the picture pool.
Definition: TGClient.cxx:289
void FreePicture(const TGPicture *pic)
Free picture resource.
Definition: TGClient.cxx:308
virtual TList * GetList() const
Definition: TGFrame.h:347
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1101
virtual void Cleanup()
Cleanup and delete all objects contained in this composite frame.
Definition: TGFrame.cxx:951
virtual Int_t MustCleanup() const
Definition: TGFrame.h:398
static Pixel_t GetDefaultFrameBackground()
Get default frame background.
Definition: TGFrame.cxx:667
virtual UInt_t GetOptions() const
Definition: TGFrame.h:222
TString GetOptionString() const
Returns a frame option string - used in SavePrimitive().
Definition: TGFrame.cxx:2464
UInt_t GetHeight() const
Definition: TGFrame.h:250
UInt_t GetWidth() const
Definition: TGFrame.h:249
void SaveUserColor(std::ostream &out, Option_t *)
Save a user color in a C++ macro file - used in SavePrimitive().
Definition: TGFrame.cxx:2437
Pixel_t fBackground
Definition: TGFrame.h:120
TGClient * fClient
Definition: TGObject.h:37
Handle_t GetId() const
Definition: TGObject.h:47
const TGPicture * GetPicture() const
Definition: TGButton.h:256
const char * GetName() const
Returns name of object.
Definition: TGPicture.h:62
const char * GetString() const
Definition: TGString.h:40
virtual TGButton * AddButton(const TGWindow *w, ToolBarData_t *button, Int_t spacing=0)
Add button to toolbar.
Definition: TGToolBar.cxx:91
TList * fTrash
Definition: TGToolBar.h:46
virtual void Cleanup()
Cleanup and delete all objects contained in this composite frame.
Definition: TGToolBar.cxx:213
virtual void SetId(TGButton *button, Long_t id)
changes id for button.
Definition: TGToolBar.cxx:171
virtual void Pressed(Int_t id)
Definition: TGToolBar.h:72
virtual void ButtonPressed()
This slot is activated when one of the buttons in the group emits the Pressed() signal.
Definition: TGToolBar.cxx:226
virtual void Clicked(Int_t id)
Definition: TGToolBar.h:74
virtual void ButtonClicked()
This slot is activated when one of the buttons in the group emits the Clicked() signal.
Definition: TGToolBar.cxx:256
virtual ~TGToolBar()
Delete toolbar and its buttons and layout hints.
Definition: TGToolBar.cxx:64
virtual void ButtonReleased()
This slot is activated when one of the buttons in the group emits the Released() signal.
Definition: TGToolBar.cxx:241
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save an horizontal slider as a C++ statement(s) on output stream out.
Definition: TGToolBar.cxx:270
TList * fPictures
Definition: TGToolBar.h:45
virtual void ChangeIcon(ToolBarData_t *button, const char *new_icon)
Change the icon of a toolbar button.
Definition: TGToolBar.cxx:195
virtual TGButton * GetButton(Int_t id) const
Finds and returns a pointer to the button with the specified identifier id.
Definition: TGToolBar.cxx:156
TGToolBar(const TGToolBar &)
virtual void Released(Int_t id)
Definition: TGToolBar.h:73
TMap * fMapOfButtons
Definition: TGToolBar.h:47
const TGString * GetText() const
Get the tool tip text.
Definition: TGToolTip.cxx:427
virtual void Associate(const TGWindow *w)
Definition: TGWidget.h:84
Int_t WidgetId() const
Definition: TGWidget.h:80
virtual void SetWindowName(const char *name=0)
Set window name.
Definition: TGWindow.cxx:119
virtual const char * GetName() const
Return unique name, used in SavePrimitive methods.
Definition: TGWindow.cxx:326
const TGWindow * fParent
Definition: TGWindow.h:36
const TGWindow * GetParent() const
Definition: TGWindow.h:84
A doubly linked list.
Definition: TList.h:44
virtual void Add(TObject *obj)
Definition: TList.h:87
virtual void Clear(Option_t *option="")
Remove all objects from the list.
Definition: TList.cxx:401
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:40
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
Definition: TMap.cxx:54
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Definition: TMap.cxx:236
TObject * FindObject(const char *keyname) const
Check if a (key,value) pair exists with keyname as name of the key.
Definition: TMap.cxx:215
Mother of all ROOT objects.
Definition: TObject.h:37
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:891
Class used by TMap to store (key,value) pairs.
Definition: TMap.h:102
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Definition: TQObject.cxx:866
Basic string class.
Definition: TString.h:131
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
Definition: TSystem.cxx:1269
virtual const char * UnixPathName(const char *unixpathname)
Convert from a local pathname to a Unix pathname.
Definition: TSystem.cxx:1058
const char * fTipText
Definition: TGToolBar.h:34
TGButton * fButton
Definition: TGToolBar.h:37
Bool_t fStayDown
Definition: TGToolBar.h:35
const char * fPixmap
Definition: TGToolBar.h:33
auto * a
Definition: textangle.C:12