/usr/include/root/TGMenu.h is in libroot-gui-dev 5.34.14-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | // @(#)root/gui:$Id$
// Author: Fons Rademakers 09/01/98
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TGMenu
#define ROOT_TGMenu
//////////////////////////////////////////////////////////////////////////
// //
// TGMenuBar, TGPopupMenu, TGMenuTitle and TGMenuEntry //
// //
// This header contains all different menu classes. //
// //
// Selecting a menu item will generate the event: //
// kC_COMMAND, kCM_MENU, menu id, user data. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif
#ifndef ROOT_TGString
#include "TGString.h"
#endif
#ifndef ROOT_TGPicture
#include "TGPicture.h"
#endif
#ifndef ROOT_TGWidget
#include "TGWidget.h"
#endif
//--- Menu entry status mask
enum EMenuEntryState {
kMenuActiveMask = BIT(0),
kMenuEnableMask = BIT(1),
kMenuDefaultMask = BIT(2),
kMenuCheckedMask = BIT(3),
kMenuRadioMask = BIT(4),
kMenuHideMask = BIT(5),
kMenuRadioEntryMask = BIT(6)
};
//--- Menu entry types
enum EMenuEntryType {
kMenuSeparator,
kMenuLabel,
kMenuEntry,
kMenuPopup
};
class TGPopupMenu;
class TGMenuBar;
class TGMenuTitle;
class TTimer;
class TGSplitButton;
//////////////////////////////////////////////////////////////////////////
// //
// TGMenuEntry //
// //
// This class contains all information about a menu entry. //
// It is a fully protected class used internally by TGPopupMenu. //
// //
//////////////////////////////////////////////////////////////////////////
class TGMenuEntry : public TObject {
friend class TGPopupMenu;
friend class TGMenuBar;
protected:
Int_t fEntryId; // the entry id (used for event processing)
void *fUserData; // pointer to user data structure
EMenuEntryType fType; // type of entry
Int_t fStatus; // entry status (OR of EMenuEntryState)
Int_t fEx, fEy; // position of entry
UInt_t fEw, fEh; // width and height of entry
TGHotString *fLabel; // menu entry label
TGString *fShortcut; // menu entry shortcut
const TGPicture *fPic; // menu entry icon
TGPopupMenu *fPopup; // pointer to popup menu (in case of cascading menus)
private:
TGMenuEntry(const TGMenuEntry&); // not implemented
TGMenuEntry& operator=(const TGMenuEntry&); // not implemented
public:
TGMenuEntry(): fEntryId(0), fUserData(0), fType(), fStatus(0),
fEx(0), fEy(0), fEw(0), fEh(0), fLabel(0), fShortcut(0), fPic(0), fPopup(0) { }
virtual ~TGMenuEntry() { if (fLabel) delete fLabel; if (fShortcut) delete fShortcut; }
Int_t GetEntryId() const { return fEntryId; }
const char *GetName() const { return fLabel ? fLabel->GetString() : 0; }
const char *GetShortcutText() const { return fShortcut ? fShortcut->GetString() : 0; }
virtual Int_t GetStatus() const { return fStatus; }
EMenuEntryType GetType() const { return fType; }
TGPopupMenu *GetPopup() const { return fPopup; }
TGHotString *GetLabel() const { return fLabel; }
TGString *GetShortcut() const { return fShortcut; }
Int_t GetEx() const { return fEx; }
Int_t GetEy() const { return fEy; }
UInt_t GetEw() const { return fEw; }
UInt_t GetEh() const { return fEh; }
const TGPicture *GetPic() const { return fPic; }
void *GetUserData() const { return fUserData; }
ClassDef(TGMenuEntry,0); // Menu entry class
};
//////////////////////////////////////////////////////////////////////////
// //
// TGPopupMenu //
// //
// This class creates a popup menu object. Popup menu's are attached //
// to TGMenuBar objects. //
// //
//////////////////////////////////////////////////////////////////////////
class TGPopupMenu : public TGFrame {
friend class TGMenuTitle;
friend class TGMenuBar;
friend class TGSplitButton;
protected:
TList *fEntryList; // list of menu entries
TGMenuEntry *fCurrent; // currently selected menu entry
Bool_t fStick; // stick mode (popup menu stays sticked on screen)
Bool_t fHasGrab; // true if menu has grabbed pointer
Bool_t fPoppedUp; // true if menu is currently popped up
UInt_t fXl; // Max width of all menu entries
UInt_t fMenuWidth; // width of popup menu
UInt_t fMenuHeight; // height of popup menu
TTimer *fDelay; // delay before poping up cascading menu
GContext_t fNormGC; // normal drawing graphics context
GContext_t fSelGC; // graphics context for drawing selections
GContext_t fSelbackGC; // graphics context for drawing selection background
FontStruct_t fFontStruct; // font to draw menu entries
FontStruct_t fHifontStruct; // font to draw highlighted entries
Cursor_t fDefaultCursor; // right pointing cursor
const TGWindow *fMsgWindow; // window which handles menu events
TGMenuBar *fMenuBar; // menu bar (if any)
TGSplitButton *fSplitButton; // split button (if any)
UInt_t fEntrySep; // separation distance between ebtris
static const TGFont *fgDefaultFont;
static const TGFont *fgHilightFont;
static const TGGC *fgDefaultGC;
static const TGGC *fgDefaultSelectedGC;
static const TGGC *fgDefaultSelectedBackgroundGC;
void DrawTrianglePattern(GContext_t gc, Int_t l, Int_t t, Int_t r, Int_t b);
void DrawCheckMark(GContext_t gc, Int_t l, Int_t t, Int_t r, Int_t b);
void DrawRCheckMark(GContext_t gc, Int_t l, Int_t t, Int_t r, Int_t b);
virtual void DoRedraw();
virtual void DrawEntry(TGMenuEntry *entry);
virtual void Reposition();
static FontStruct_t GetDefaultFontStruct();
static FontStruct_t GetHilightFontStruct();
static const TGGC &GetDefaultGC();
static const TGGC &GetDefaultSelectedGC();
static const TGGC &GetDefaultSelectedBackgroundGC();
private:
TGPopupMenu(const TGPopupMenu&); // not implemented
TGPopupMenu& operator=(const TGPopupMenu&); // not implemented
public:
TGPopupMenu(const TGWindow *p = 0, UInt_t w = 10, UInt_t h = 10,
UInt_t options = 0);
virtual ~TGPopupMenu();
virtual void AddEntry(TGHotString *s, Int_t id, void *ud = 0,
const TGPicture *p = 0, TGMenuEntry *before = 0);
virtual void AddEntry(const char *s, Int_t id, void *ud = 0,
const TGPicture *p = 0, TGMenuEntry *before = 0);
virtual void AddSeparator(TGMenuEntry *before = 0);
virtual void AddLabel(TGHotString *s, const TGPicture *p = 0,
TGMenuEntry *before = 0);
virtual void AddLabel(const char *s, const TGPicture *p = 0,
TGMenuEntry *before = 0);
virtual void AddPopup(TGHotString *s, TGPopupMenu *popup,
TGMenuEntry *before = 0, const TGPicture *p = 0);
virtual void AddPopup(const char *s, TGPopupMenu *popup,
TGMenuEntry *before = 0, const TGPicture *p = 0);
virtual void EnableEntry(Int_t id);
virtual void DisableEntry(Int_t id);
virtual Bool_t IsEntryEnabled(Int_t id);
virtual void HideEntry(Int_t id);
virtual Bool_t IsEntryHidden(Int_t id);
virtual void DefaultEntry(Int_t id);
virtual void CheckEntry(Int_t id);
virtual void CheckEntryByData(void *user_data);
virtual void UnCheckEntry(Int_t id);
virtual void UnCheckEntryByData(void *user_data);
virtual void UnCheckEntries();
virtual Bool_t IsEntryChecked(Int_t id);
virtual void RCheckEntry(Int_t id, Int_t IDfirst, Int_t IDlast);
virtual Bool_t IsEntryRChecked(Int_t id);
virtual void PlaceMenu(Int_t x, Int_t y, Bool_t stick_mode,
Bool_t grab_pointer);
virtual Int_t EndMenu(void *&userData);
virtual void DeleteEntry(Int_t id);
virtual void DeleteEntry(TGMenuEntry *entry);
virtual TGMenuEntry *GetEntry(Int_t id);
virtual TGMenuEntry *GetCurrent() const { return fCurrent; }
virtual TGMenuEntry *GetEntry(const char *s);
const TList *GetListOfEntries() const { return fEntryList; }
virtual void DrawBorder();
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleMotion(Event_t *event);
virtual Bool_t HandleCrossing(Event_t *event);
virtual Bool_t HandleTimer(TTimer *t);
virtual void Associate(const TGWindow *w) { fMsgWindow = w; }
virtual void SetMenuBar(TGMenuBar *bar) { fMenuBar = bar; }
TGMenuBar *GetMenuBar() const { return fMenuBar; }
virtual void Activate(Bool_t) { }
virtual void Activate(TGMenuEntry *entry);
virtual void SavePrimitive(ostream &out, Option_t *option = "");
UInt_t GetEntrySep() const { return fEntrySep; }
virtual void SetEntrySep(UInt_t sep) { fEntrySep = sep; }
virtual void PoppedUp() { Emit("PoppedUp()"); } // *SIGNAL*
virtual void PoppedDown() { Emit("PoppedDown()"); } // *SIGNAL*
virtual void Highlighted(Int_t id) { Emit("Highlighted(Int_t)", id); } // *SIGNAL*
virtual void Activated(Int_t id) { Emit("Activated(Int_t)", id); } // *SIGNAL*
ClassDef(TGPopupMenu,0) // Popup menu
};
//////////////////////////////////////////////////////////////////////////
// //
// TGMenuTitle //
// //
// This class creates a menu title. A menu title is a frame //
// to which a popup menu can be attached. Menu titles are automatically //
// created when adding a popup menu to a menubar. //
// //
//////////////////////////////////////////////////////////////////////////
class TGMenuTitle : public TGFrame {
protected:
TGPopupMenu *fMenu; // attached popup menu
TGHotString *fLabel; // menu title
Int_t fTitleId; // id of selected menu item
void *fTitleData; // user data associated with selected item
Bool_t fState; // menu title state (active/not active)
Int_t fHkeycode; // hot key code
FontStruct_t fFontStruct; // font
Pixel_t fTextColor; // text color
GContext_t fNormGC, fSelGC; // normal and selection graphics contexts
virtual void DoRedraw();
static const TGFont *fgDefaultFont;
static const TGGC *fgDefaultSelectedGC;
static const TGGC *fgDefaultGC;
private:
TGMenuTitle(const TGMenuTitle&); // not implemented
TGMenuTitle& operator=(const TGMenuTitle&); // not implemented
public:
static FontStruct_t GetDefaultFontStruct();
static const TGGC &GetDefaultSelectedGC();
static const TGGC &GetDefaultGC();
TGMenuTitle(const TGWindow *p = 0, TGHotString *s = 0, TGPopupMenu *menu = 0,
GContext_t norm = GetDefaultGC()(),
FontStruct_t font = GetDefaultFontStruct(),
UInt_t options = 0);
virtual ~TGMenuTitle() { if (fLabel) delete fLabel; }
Pixel_t GetTextColor() const { return fTextColor; }
void SetTextColor(Pixel_t col) { fTextColor = col; }
virtual void SetState(Bool_t state);
Bool_t GetState() const { return fState; }
Int_t GetHotKeyCode() const { return fHkeycode; }
TGPopupMenu *GetMenu() const { return fMenu; }
const char *GetName() const { return fLabel ? fLabel->GetString() : 0; }
virtual void DoSendMessage();
virtual void SavePrimitive(ostream &out, Option_t *option = "");
ClassDef(TGMenuTitle,0) // Menu title class
};
//////////////////////////////////////////////////////////////////////////
// //
// TGMenuBar //
// //
// This class creates a menu bar. //
// //
//////////////////////////////////////////////////////////////////////////
class TGMenuBar : public TGHorizontalFrame {
friend class TGPopupMenu;
protected:
TGMenuTitle *fCurrent; // current menu title
TList *fTitles; // list of menu titles
Cursor_t fDefaultCursor; // right pointing cursor
Bool_t fStick; // stick mode (popup menu stays sticked on screen)
TList *fTrash; // garbage
Bool_t fKeyNavigate; // kTRUE if arrow key navigation is on
TGPopupMenu *fMenuMore; // extra >> menu
TGLayoutHints *fMenuBarMoreLayout; // layout of the extra menu
Bool_t fWithExt; // indicates whether the >> menu is shown or not
TList *fOutLayouts; // keeps trace of layouts of hidden menus
TList *fNeededSpace; // keeps trace of space needed for hidden menus
virtual void AddFrameBefore(TGFrame *f, TGLayoutHints *l = 0,
TGPopupMenu *before = 0);
virtual void BindHotKey(Int_t keycode, Bool_t on = kTRUE);
virtual void BindKeys(Bool_t on = kTRUE);
void BindMenu(TGPopupMenu* subMenu, Bool_t on);
private:
TGMenuBar(const TGMenuBar&); // not implemented
TGMenuBar& operator=(const TGMenuBar&); // not implemented
public:
TGMenuBar(const TGWindow *p = 0, UInt_t w = 60, UInt_t h = 20,
UInt_t options = kHorizontalFrame | kRaisedFrame);
virtual ~TGMenuBar();
virtual void AddPopup(TGHotString *s, TGPopupMenu *menu, TGLayoutHints *l,
TGPopupMenu *before = 0);
virtual void AddPopup(const char *s, TGPopupMenu *menu, TGLayoutHints *l,
TGPopupMenu *before = 0);
virtual TGPopupMenu *AddPopup(const TString &s, Int_t padleft = 4, Int_t padright = 0,
Int_t padtop = 0, Int_t padbottom = 0);
virtual void AddTitle(TGMenuTitle *title, TGLayoutHints *l, TGPopupMenu *before = 0);
virtual TGPopupMenu *GetPopup(const char *s);
virtual TGPopupMenu *RemovePopup(const char *s);
virtual TGMenuTitle *GetCurrent() const { return fCurrent; }
virtual TList *GetTitles() const { return fTitles; }
virtual Bool_t HandleButton(Event_t *event);
virtual Bool_t HandleMotion(Event_t *event);
virtual Bool_t HandleKey(Event_t *event);
virtual void SavePrimitive(ostream &out, Option_t *option = "");
virtual void Layout();
void PopupConnection();
TGFrameElement* GetLastOnLeft();
ClassDef(TGMenuBar,0) // Menu bar class
};
#endif
|