Logo ROOT  
Reference Guide
TGSplitFrame.h
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Bertrand Bellenot 23/01/2008
3
4/*************************************************************************
5 * Copyright (C) 1995-2021, 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#ifndef ROOT_TGSplitFrame
13#define ROOT_TGSplitFrame
14
15#include "TGFrame.h"
16
17#include "TMap.h"
18
19class TGSplitter;
20class TContextMenu;
21
22class TGRectMap : public TObject {
23
24private:
25 TGRectMap(const TGRectMap&) = delete;
26 TGRectMap& operator=(const TGRectMap&) = delete;
27
28public:
29 Int_t fX; ///< x position
30 Int_t fY; ///< y position
31 UInt_t fW; ///< width
32 UInt_t fH; ///< height
33
34 // constructors
36 fX(rx), fY(ry), fW(rw), fH(rh) {}
37 virtual ~TGRectMap() {}
38
39 // methods
40 Bool_t Contains(Int_t px, Int_t py) const
41 { return ((px >= fX) && (px < fX + (Int_t) fW) &&
42 (py >= fY) && (py < fY + (Int_t) fH)); }
43
44 ClassDefOverride(TGRectMap, 0) // Rectangle used in TMap
45};
46
48
49private:
50 const TGFrame *fWindow; ///< frame to which tool tip is associated
51 TGGC fRectGC; ///< rectangles drawing context
52 TMap fMap; ///< map of rectangles/subframes
53 TContextMenu *fContextMenu; ///< Context menu for the splitter
54 Int_t fX; ///< X position in fWindow where to popup
55 Int_t fY; ///< Y position in fWindow where to popup
56
57 TGSplitTool(const TGSplitTool&) = delete;
59
60public:
61 TGSplitTool(const TGWindow *p = nullptr, const TGFrame *f = nullptr);
62 virtual ~TGSplitTool();
63
64 void AddRectangle(TGFrame *frm, Int_t x, Int_t y, Int_t w, Int_t h);
65 void DoRedraw() override;
66 void DrawBorder() override;
69 void Show(Int_t x, Int_t y);
70 void Hide();
71 void Reset();
72 void SetPosition(Int_t x, Int_t y);
73
74 ClassDefOverride(TGSplitTool, 0) // Split frame tool utility
75};
76
78
79private:
80 TGSplitFrame(const TGSplitFrame&) = delete;
82
83protected:
84 TGFrame *fFrame; ///< Pointer to the embedded frame (if any)
85 TGTransientFrame *fUndocked; ///< Main frame used when "undocking" frame
86 TGSplitter *fSplitter; ///< Pointer to the (H/V) Splitter (if any)
87 TGSplitFrame *fFirst; ///< Pointer to the first child (if any)
88 TGSplitFrame *fSecond; ///< Pointer to the second child (if any)
89 TGSplitTool *fSplitTool; ///< SplitFrame Tool
90 Float_t fWRatio; ///< Width ratio between the first child and this
91 Float_t fHRatio; ///< Height ratio between the first child and this
92
93public:
94 TGSplitFrame(const TGWindow *p = nullptr, UInt_t w = 1, UInt_t h = 1,
95 UInt_t options = 0);
96 virtual ~TGSplitFrame();
97
98 void AddFrame(TGFrame *f, TGLayoutHints *l = nullptr) override;
99 void Cleanup() override;
101 virtual void HSplit(UInt_t h = 0);
102 virtual void VSplit(UInt_t w = 0);
103 void RemoveFrame(TGFrame *f) override;
104
105 TGSplitFrame *GetFirst() const { return fFirst; }
106 TGFrame *GetFrame() const { return fFrame; }
107 TGSplitFrame *GetSecond() const { return fSecond; }
108 TGSplitter *GetSplitter() const { return fSplitter; }
111 TGFrame *GetUndocked() const { return fUndocked; }
112 Float_t GetHRatio() const { return fHRatio; }
113 Float_t GetWRatio() const { return fWRatio; }
114 void MapToSPlitTool(TGSplitFrame *top);
118 void SplitHorizontal(const char *side = "top");
119 void SplitVertical(const char *side = "left");
120 void UnSplit(const char *which);
121
122 // methods accessible via context menu
123
124 void Close(); // *MENU*
125 void CloseAndCollapse(); // *MENU*
126 void ExtractFrame(); // *MENU*
127 void SwallowBack(); // *MENU*
128 void SwitchToMain(); // *MENU*
129 void SplitHor(); // *MENU*
130 void SplitVer(); // *MENU*
131
132 void Docked(TGFrame* frame); //*SIGNAL*
133 void Undocked(TGFrame* frame); //*SIGNAL*
134
135 static void SwitchFrames(TGFrame *frame, TGCompositeFrame *dest,
136 TGFrame *prev);
137 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
138
139 ClassDefOverride(TGSplitFrame, 0) // Splittable composite frame
140};
141
142#endif
#define f(i)
Definition: RSha256.hxx:104
#define h(i)
Definition: RSha256.hxx:106
float Float_t
Definition: RtypesCore.h:57
const char Option_t
Definition: RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition: Rtypes.h:339
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
This class provides an interface to context sensitive popup menus.
Definition: TContextMenu.h:44
The base class for composite widgets (menu bars, list boxes, etc.).
Definition: TGFrame.h:287
A subclasses of TGWindow, and is used as base class for some simple widgets (buttons,...
Definition: TGFrame.h:80
Encapsulate a graphics context used in the low level graphics.
Definition: TGGC.h:22
This class describes layout hints used by the layout classes.
Definition: TGLayout.h:50
TGRectMap(const TGRectMap &)=delete
TGRectMap & operator=(const TGRectMap &)=delete
UInt_t fH
height
Definition: TGSplitFrame.h:32
Int_t fX
x position
Definition: TGSplitFrame.h:29
virtual ~TGRectMap()
Definition: TGSplitFrame.h:37
Bool_t Contains(Int_t px, Int_t py) const
Definition: TGSplitFrame.h:40
UInt_t fW
width
Definition: TGSplitFrame.h:31
TGRectMap(Int_t rx, Int_t ry, UInt_t rw, UInt_t rh)
Definition: TGSplitFrame.h:35
Int_t fY
y position
Definition: TGSplitFrame.h:30
A split frame.
Definition: TGSplitFrame.h:77
void MapToSPlitTool(TGSplitFrame *top)
Map this split frame in the small overview tooltip.
Bool_t HandleConfigureNotify(Event_t *) override
Handles resize events for this frame.
virtual void VSplit(UInt_t w=0)
Vertically split the frame.
void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr) override
Add a frame in the split frame using layout hints l.
TGSplitFrame * GetFirst() const
Definition: TGSplitFrame.h:105
void Cleanup() override
Recursively cleanup child frames.
void OnSplitterClicked(Event_t *event)
Handle mouse click events on the splitter.
virtual ~TGSplitFrame()
Destructor. Make cleanup.
void SplitVertical(const char *side="left")
Vertically split the frame, and if it contains a child frame, ask the user where to keep it (left or ...
void SwitchToMain()
Switch the actual embedded frame to the main (first) split frame.
void SetHRatio(Float_t r)
Definition: TGSplitFrame.h:116
TGSplitFrame * fSecond
Pointer to the second child (if any)
Definition: TGSplitFrame.h:88
TGSplitTool * GetSplitTool() const
Definition: TGSplitFrame.h:109
virtual void HSplit(UInt_t h=0)
Horizontally split the frame.
TGSplitFrame * GetTopFrame()
Return the top level split frame.
void SetWRatio(Float_t r)
Definition: TGSplitFrame.h:117
TGSplitFrame(const TGSplitFrame &)=delete
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a splittable frame as a C++ statement(s) on output stream out.
void SwallowBack()
Swallow back the child frame previously extracted, and close its parent (transient frame).
TGFrame * GetFrame() const
Definition: TGSplitFrame.h:106
TGSplitTool * fSplitTool
SplitFrame Tool.
Definition: TGSplitFrame.h:89
void RemoveFrame(TGFrame *f) override
Add a frame in the split frame using layout hints l.
TGTransientFrame * fUndocked
Main frame used when "undocking" frame.
Definition: TGSplitFrame.h:85
TGSplitter * fSplitter
Pointer to the (H/V) Splitter (if any)
Definition: TGSplitFrame.h:86
void Docked(TGFrame *frame)
Emit Undocked() signal.
TGSplitFrame & operator=(const TGSplitFrame &)=delete
TGSplitter * GetSplitter() const
Definition: TGSplitFrame.h:108
Float_t GetWRatio() const
Definition: TGSplitFrame.h:113
void Undocked(TGFrame *frame)
Emit Undocked() signal.
TGFrame * fFrame
Pointer to the embedded frame (if any)
Definition: TGSplitFrame.h:84
static void SwitchFrames(TGFrame *frame, TGCompositeFrame *dest, TGFrame *prev)
Switch (exchange) two frames.
void Close()
Close (unmap and remove from the list of frames) the frame contained in this split frame.
TGSplitFrame * fFirst
Pointer to the first child (if any)
Definition: TGSplitFrame.h:87
Float_t GetHRatio() const
Definition: TGSplitFrame.h:112
Float_t fHRatio
Height ratio between the first child and this.
Definition: TGSplitFrame.h:91
void SplitHorizontal(const char *side="top")
Horizontally split the frame, and if it contains a child frame, ask the user where to keep it (top or...
Float_t fWRatio
Width ratio between the first child and this.
Definition: TGSplitFrame.h:90
TGSplitFrame * GetSecond() const
Definition: TGSplitFrame.h:107
TGFrame * GetUndocked() const
Definition: TGSplitFrame.h:111
void ExtractFrame()
Extract the frame contained in this split frame an reparent it in a transient frame.
void SplitVer()
Vertically split the frame, and if it contains a child frame, ask the user where to keep it (left or ...
void UnSplit(const char *which)
Close (unmap and remove from the list of frames) the frame contained in this split frame.
void CloseAndCollapse()
Close (unmap, remove from the list of frames and destroy) the frame contained in this split frame.
void SplitHor()
Horizontally split the frame, and if it contains a child frame, ask the user where to keep it (top or...
A split frame tool tip.
Definition: TGSplitFrame.h:47
void DoRedraw() override
Redraw split frame tool.
Int_t fX
X position in fWindow where to popup.
Definition: TGSplitFrame.h:54
Bool_t HandleMotion(Event_t *event) override
handle mouse motion events
Int_t fY
Y position in fWindow where to popup.
Definition: TGSplitFrame.h:55
void Show(Int_t x, Int_t y)
Show tool window.
TGGC fRectGC
rectangles drawing context
Definition: TGSplitFrame.h:51
virtual ~TGSplitTool()
TGSplitTool destructor.
TGSplitTool(const TGSplitTool &)=delete
void DrawBorder() override
Draw border of tool window.
void AddRectangle(TGFrame *frm, Int_t x, Int_t y, Int_t w, Int_t h)
Add a rectangle representation of a split frame in the map, together with the frame itself.
void SetPosition(Int_t x, Int_t y)
Set popup position within specified frame (as specified in the ctor).
void Reset()
Reset tool tip popup delay timer.
const TGFrame * fWindow
frame to which tool tip is associated
Definition: TGSplitFrame.h:50
TMap fMap
map of rectangles/subframes
Definition: TGSplitFrame.h:52
void Hide()
Hide tool window. Use this method to hide the tool in a client class.
TGSplitTool & operator=(const TGSplitTool &)=delete
Bool_t HandleButton(Event_t *event) override
Handle mouse click events in the tool.
TContextMenu * fContextMenu
Context menu for the splitter.
Definition: TGSplitFrame.h:53
A splitter allows the frames left and right or above and below of it to be resized.
Definition: TGSplitter.h:19
Defines transient windows that typically are used for dialogs windows.
Definition: TGFrame.h:498
ROOT GUI Window base class.
Definition: TGWindow.h:23
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:40
Mother of all ROOT objects.
Definition: TObject.h:37
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
Event structure.
Definition: GuiTypes.h:174
TLine l
Definition: textangle.C:4