Logo ROOT  
Reference Guide
TStylePreview.cxx
Go to the documentation of this file.
1// @(#)root/ged:$Id$
2// Author: Denis Favre-Miville 08/09/05
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, 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/** \class TStylePreview
14\ingroup ged
15
16This class may be used to preview the result of applying a style
17 to a canvas. The result is shown on a clone of the object,
18 in a different shown over the initial canvas.
19
20*/
21
22
23#include "TStylePreview.h"
24#include "TStyleManager.h"
25
26#include <TCanvas.h>
27#include <TRootEmbeddedCanvas.h>
28#include <TStyle.h>
29#include <TROOT.h>
30
32
33////////////////////////////////////////////////////////////////////////////////
34/// Constructor. Create a new window and draw a clone of
35/// currentPad->GetCanvas() in it, using the style 'style'.
36/// Thanks to that method, one can have a preview of any
37/// style with any object.
38
40 TVirtualPad *currentPad)
41 : TGTransientFrame(0, p)
42{
43 fPad = 0;
44
45 // Create the main window.
46 SetWindowName("Style Manager's Preview");
49
50 // Create the trash lists to have an effective deletion of every object.
51 fTrashListLayout = new TList();
52
53 // Create the layouts and add them to the layout trash list.
55 fTrashListLayout->Add(layoutXY);
56
57 // Create a canvas for the preview.
58 fEcan = new TRootEmbeddedCanvas("TSMPreviewCanvas", this, 10, 10);
59 AddFrame(fEcan, layoutXY);
60
61 // Draw the preview.
62 Update(style, currentPad);
63
64 // Map main frame.
66
67 // No modifications allowed in the preview.
70}
71
72////////////////////////////////////////////////////////////////////////////////
73/// Destructor.
74
76{
77 // Delete all the widgets created in this class.
78 delete fEcan;
79
80 // Delete all the layouts.
81 TObject *obj1;
82 TObject *obj2;
83 obj1 = fTrashListLayout->First();
84 while (obj1) {
85 obj2 = fTrashListLayout->After(obj1);
87 delete obj1;
88 obj1 = obj2;
89 }
90 delete fTrashListLayout;
91}
92
93////////////////////////////////////////////////////////////////////////////////
94/// Update the preview with possibly another style and
95/// another object than previously.
96
98{
99 TCanvas *c;
100 if (pad != fPad) {
101 delete fEcan->GetCanvas();
102 fEcan->AdoptCanvas(new TCanvas("TSMPreviewCanvas", 10, 10,
104 c = fEcan->GetCanvas();
105 gROOT->SetSelectedPad(c);
106 if (pad->GetCanvas())
107 pad->GetCanvas()->DrawClonePad();
108 gROOT->SetSelectedPad(pad);
109 fPad = pad;
110 }
111
112 // Apply the 'style' to the clone of 'pad'.
113 c = fEcan->GetCanvas();
114 TStyle *tmpStyle = gStyle;
115 gStyle = style;
116 c->UseCurrentStyle();
117 gStyle = tmpStyle;
118 c->Modified();
119 c->Update();
120}
121
122////////////////////////////////////////////////////////////////////////////////
123/// Initialize the layout algorithm.
124
126{
128 TCanvas *c = fPad->GetCanvas();
129 if (c) {
130 UInt_t w = c->GetWw() + 4; //4 pixels of borders
131 UInt_t h = c->GetWh() + 4; //4 pixels of borders
132 UInt_t x = (UInt_t) c->GetWindowTopX() + 60;
133 UInt_t y = (UInt_t) c->GetWindowTopY() + 100;
134
135 MoveResize(x, y, w, h);
136 SetWMPosition(x, y);
137 }
138 MapWindow();
139}
140
141////////////////////////////////////////////////////////////////////////////////
142/// Return pointer to the selected canvas.
143
145{
146 return fEcan->GetCanvas();
147}
#define c(i)
Definition: RSha256.hxx:101
#define h(i)
Definition: RSha256.hxx:106
unsigned int UInt_t
Definition: RtypesCore.h:46
const Bool_t kFALSE
Definition: RtypesCore.h:101
#define ClassImp(name)
Definition: Rtypes.h:364
@ kNoCleanup
Definition: TGFrame.h:40
@ kLHintsExpandY
Definition: TGLayout.h:31
@ kLHintsExpandX
Definition: TGLayout.h:30
#define gROOT
Definition: TROOT.h:404
R__EXTERN TStyle * gStyle
Definition: TStyle.h:413
The Canvas class.
Definition: TCanvas.h:23
virtual TObject * DrawClonePad()
Draw a clone of this canvas into the current pad In an interactive session, select the destination/cu...
Definition: TCanvas.cxx:907
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1117
virtual void SetCleanup(Int_t mode=kLocalCleanup)
Turn on automatic cleanup of child frames in dtor.
Definition: TGFrame.cxx:1072
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
Definition: TGFrame.cxx:1164
virtual void MoveResize(Int_t x, Int_t y, UInt_t w=0, UInt_t h=0)
Move and/or resize the frame.
Definition: TGFrame.cxx:629
virtual void MapWindow()
map window
Definition: TGFrame.h:204
This class describes layout hints used by the layout classes.
Definition: TGLayout.h:50
void DontCallClose()
Typically call this method in the slot connected to the CloseWindow() signal to prevent the calling o...
Definition: TGFrame.cxx:1780
void SetWMPosition(Int_t x, Int_t y)
Give the window manager a window position hint.
Definition: TGFrame.cxx:1879
void SetWindowName(const char *name=0)
Set window name. This is typically done via the window manager.
Definition: TGFrame.cxx:1788
Defines transient windows that typically are used for dialogs windows.
Definition: TGFrame.h:499
ROOT GUI Window base class.
Definition: TGWindow.h:23
A doubly linked list.
Definition: TList.h:44
virtual void Add(TObject *obj)
Definition: TList.h:87
virtual TObject * After(const TObject *obj) const
Returns the object after object obj.
Definition: TList.cxx:330
virtual TObject * Remove(TObject *obj)
Remove object from the list.
Definition: TList.cxx:822
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
Definition: TList.cxx:659
Mother of all ROOT objects.
Definition: TObject.h:37
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:696
@ kNoContextMenu
if object does not want context menu
Definition: TObject.h:65
void SetEditable(Bool_t mode=kTRUE) override
Set pad editable yes/no If a pad is not editable:
Definition: TPad.cxx:5916
This class creates a TGCanvas in which a TCanvas is created.
void AdoptCanvas(TCanvas *c)
Canvas c is adopted from this embedded canvas.
TCanvas * GetCanvas() const
Int_t GetCanvasWindowId() const
This class may be used to preview the result of applying a style to a canvas.
Definition: TStylePreview.h:23
TStylePreview(const TGWindow *p, TStyle *style, TVirtualPad *currentPad)
Constructor.
TCanvas * GetMainCanvas()
Return pointer to the selected canvas.
void MapTheWindow()
Initialize the layout algorithm.
TVirtualPad * fPad
original pad previewed
Definition: TStylePreview.h:27
void Update(TStyle *style, TVirtualPad *pad)
Update the preview with possibly another style and another object than previously.
TList * fTrashListLayout
to avoid memory leak
Definition: TStylePreview.h:28
virtual ~TStylePreview()
Destructor.
TRootEmbeddedCanvas * fEcan
canvas for preview
Definition: TStylePreview.h:26
TStyle objects may be created to define special styles.
Definition: TStyle.h:29
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition: TVirtualPad.h:51
virtual TCanvas * GetCanvas() const =0
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
TCanvas * style()
Definition: style.C:1