Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGCanvas.h
Go to the documentation of this file.
1 // @(#)root/gui:$Id$
2 // Author: Fons Rademakers 11/01/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 #ifndef ROOT_TGCanvas
13 #define ROOT_TGCanvas
14 
15 
16 //////////////////////////////////////////////////////////////////////////
17 // //
18 // TGCanvas and TGViewPort and TGContainer //
19 // //
20 // A TGCanvas is a frame containing two scrollbars (horizontal and //
21 // vertical) and a viewport. The viewport acts as the window through //
22 // which we look at the contents of the container frame. //
23 // //
24 //////////////////////////////////////////////////////////////////////////
25 
26 #include "TGFrame.h"
27 
28 class TGHScrollBar;
29 class TGVScrollBar;
30 class TGClient;
31 class TGViewPort;
32 class TGCanvas;
33 class TGFrameElement;
34 class TGContainerTimer;
35 class TGContainerKeyboardTimer;
36 class TGContainerScrollTimer;
37 class TGListView;
38 class TGPicture;
39 class TGRectangle;
40 
41 class TGContainer : public TGCompositeFrame {
42 
43 friend class TGViewPort;
44 friend class TGCanvas;
45 friend class TGContainerKeyboardTimer;
46 friend class TGContainerScrollTimer;
47 friend class TGListView;
48 
49 protected:
50  TGViewPort *fViewPort; // container viewport
51  TGCanvas *fCanvas; // pointer to canvas
52  const TGWindow *fMsgWindow; // window handling container messages
53  TGFrameElement *fLastActiveEl; // last active item
54  Int_t fXp, fYp; // previous pointer position
55  Int_t fX0, fY0; // corner of rubber band box
56  Int_t fXf, fYf; // other corner of rubber band box
57  Bool_t fDragging; // true if in dragging mode
58  Int_t fTotal; // total items
59  Int_t fSelected; // number of selected items
60  TTimer *fScrollTimer; // autoscroll timer
61  Bool_t fOnMouseOver; // kTRUE when mouse pointer is over entry
62  Bool_t fLastDir; // direction of last search
63  Bool_t fLastCase; // case sensetivity of last search
64  Bool_t fLastSubstring; // substring search option of last search
65  TString fLastName; // the name of object of last search
66  TTimer *fKeyTimer; // keyboard timer
67  TString fKeyInput; // keyboard input (buffer)
68  Bool_t fKeyTimerActive;// kTRUE - keyboard timer is active
69  Bool_t fScrolling; // kTRUE - when scrolling is ON
70  Int_t fXDND, fYDND;
71  Bool_t fBdown;
72  TGRectangle fExposedRegion; // exposed area
73 
74  static TGGC *fgLineGC;
75  static const TGGC &GetLineGC();
76 
77  virtual void DoRedraw();
78  virtual void ActivateItem(TGFrameElement* el);
79  virtual void DeActivateItem(TGFrameElement* el);
80  virtual void SearchPattern();
81  virtual void OnAutoScroll();
82  virtual void RepeatSearch();
83 
84 private:
85  TGContainer(const TGContainer&); // not implemented
86  TGContainer& operator=(const TGContainer&); // not implemented
87 
88 public:
89  TGContainer(const TGWindow *p = 0, UInt_t w = 1, UInt_t h = 1,
90  UInt_t options = kSunkenFrame,
91  Pixel_t back = GetDefaultFrameBackground());
92  TGContainer(TGCanvas *p,UInt_t options = kSunkenFrame,
93  Pixel_t back = GetDefaultFrameBackground());
94 
95  virtual ~TGContainer();
96 
97  virtual void DrawRegion(Int_t x, Int_t y, UInt_t w, UInt_t h);
98  virtual void ClearViewPort();
99  virtual void Associate(const TGWindow *w) { fMsgWindow = w; }
100  virtual void AdjustPosition();
101  virtual void SetPagePosition(const TGPosition& pos);
102  virtual void SetPagePosition(Int_t x, Int_t y);
103  virtual void SetPageDimension(const TGDimension& dim);
104  virtual void SetPageDimension(UInt_t w, UInt_t h);
105  virtual void RemoveAll();
106  virtual void RemoveItem(TGFrame *item);
107  virtual void Layout();
108 
109  TGCanvas *GetCanvas() const { return fCanvas; }
110  const TGWindow *GetMessageWindow() const { return fMsgWindow; }
111  virtual TGPosition GetPagePosition() const;
112  virtual TGDimension GetPageDimension() const;
113 
114  virtual Int_t NumSelected() const { return fSelected; }
115  virtual Int_t NumItems() const { return fTotal; }
116  virtual TGFrameElement *FindFrame(Int_t x,Int_t y,Bool_t exclude=kTRUE);
117  virtual TGFrame *FindFrameByName(const char *name);
118  virtual TGHScrollBar *GetHScrollbar() const;
119  virtual TGVScrollBar *GetVScrollbar() const;
120  virtual void SetHsbPosition(Int_t newPos);
121  virtual void SetVsbPosition(Int_t newPos);
122  virtual void LineUp(Bool_t select = kFALSE);
123  virtual void LineDown(Bool_t select = kFALSE);
124  virtual void LineLeft(Bool_t select = kFALSE);
125  virtual void LineRight(Bool_t select = kFALSE);
126  virtual void PageUp(Bool_t select = kFALSE);
127  virtual void PageDown(Bool_t select = kFALSE);
128  virtual void Home(Bool_t select = kFALSE);
129  virtual void End(Bool_t select = kFALSE);
130  virtual void Search(Bool_t close = kTRUE);
131  virtual void *FindItem(const TString& name,
132  Bool_t direction = kTRUE,
133  Bool_t caseSensitive = kTRUE,
134  Bool_t subString = kFALSE);
135 
136  virtual const TGFrame *GetNextSelected(void **current);
137  virtual TGFrame *GetLastActive() const { return fLastActiveEl ? fLastActiveEl->fFrame : 0; }
138  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
139 
140  virtual Bool_t HandleDNDFinished() { fBdown = kFALSE; return kTRUE; }
141  virtual Bool_t HandleExpose(Event_t *event);
142  virtual Bool_t HandleButton(Event_t *event);
143  virtual Bool_t HandleDoubleClick(Event_t *event);
144  virtual Bool_t HandleMotion(Event_t *event);
145  virtual Bool_t HandleKey(Event_t *event);
146 
147  const TGPicture *GetObjPicture(TGFrame *f);
148  virtual void SetDragPixmap(const TGPicture *pic);
149 
150  virtual void SelectAll(); //*SIGNAL*
151  virtual void UnSelectAll(); //*SIGNAL*
152  virtual void InvertSelection(); //*SIGNAL*
153  virtual void ReturnPressed(TGFrame*); //*SIGNAL*
154  virtual void SpacePressed(TGFrame*); //*SIGNAL*
155  virtual void KeyPressed(TGFrame*, UInt_t keysym, UInt_t mask); //*SIGNAL*
156  virtual void OnMouseOver(TGFrame*); //*SIGNAL*
157  virtual void CurrentChanged(Int_t x,Int_t y);//*SIGNAL*
158  virtual void CurrentChanged(TGFrame* f); //*SIGNAL*
159  virtual void Clicked(TGFrame *f, Int_t btn); //*SIGNAL*
160  virtual void DoubleClicked(TGFrame *f, Int_t btn); //*SIGNAL*
161  virtual void DoubleClicked(TGFrame *f, Int_t btn, Int_t x, Int_t y); //*SIGNAL*
162  virtual void Clicked(TGFrame *f, Int_t btn, Int_t x, Int_t y); //*SIGNAL*
163 
164  ClassDef(TGContainer,0) // Canvas container
165 };
166 
167 
168 class TGViewPort : public TGCompositeFrame {
169 
170 protected:
171  Int_t fX0, fY0; // position of container frame in viewport
172  TGFrame *fContainer; // container frame
173 
174 private:
175  TGViewPort(const TGViewPort&); // not implemented
176  TGViewPort& operator=(const TGViewPort&); // not implemented
177 
178 public:
179  TGViewPort(const TGWindow *p = 0, UInt_t w = 1, UInt_t h = 1,
180  UInt_t options = kChildFrame,
181  Pixel_t back = GetDefaultFrameBackground());
182 
183  TGFrame *GetContainer() const { return fContainer; }
184  void SetContainer(TGFrame *f);
185 
186  virtual void DrawBorder() { };
187  virtual void Layout() { }
188  virtual TGDimension GetDefaultSize() const { return TGDimension(fWidth, fHeight); }
189 
190  virtual void SetHPos(Int_t xpos);
191  virtual void SetVPos(Int_t ypos);
192  void SetPos(Int_t xpos, Int_t ypos);
193 
194  Int_t GetHPos() const { return fX0; }
195  Int_t GetVPos() const { return fY0; }
196  virtual Bool_t HandleConfigureNotify(Event_t *event);
197 
198  ClassDef(TGViewPort,0) // Viewport through which to look at a container frame
199 };
200 
201 
202 class TGCanvas : public TGFrame {
203 
204 protected:
205  TGViewPort *fVport; // viewport through which we look at contents
206  TGHScrollBar *fHScrollbar; // horizontal scrollbar
207  TGVScrollBar *fVScrollbar; // vertical scrollbar
208  Int_t fScrolling; // flag which scrolling modes are allowed
209 
210 private:
211  TGCanvas(const TGCanvas&); // not implemented
212  TGCanvas& operator=(const TGCanvas&); // not implemented
213 
214 public:
215  enum { kCanvasNoScroll = 0,
216  kCanvasScrollHorizontal = BIT(0),
217  kCanvasScrollVertical = BIT(1),
218  kCanvasScrollBoth = (kCanvasScrollHorizontal | kCanvasScrollVertical)
219  };
220 
221  TGCanvas(const TGWindow *p = 0, UInt_t w = 1, UInt_t h = 1,
222  UInt_t options = kSunkenFrame | kDoubleBorder,
223  Pixel_t back = GetDefaultFrameBackground());
224  virtual ~TGCanvas();
225 
226  TGFrame *GetContainer() const { return fVport->GetContainer(); }
227  TGViewPort *GetViewPort() const { return fVport; }
228  TGHScrollBar *GetHScrollbar() const { return fHScrollbar; }
229  TGVScrollBar *GetVScrollbar() const { return fVScrollbar; }
230 
231  virtual void AddFrame(TGFrame *f, TGLayoutHints *l = 0);
232  virtual void SetContainer(TGFrame *f) { fVport->SetContainer(f); }
233  virtual void MapSubwindows();
234  virtual void DrawBorder();
235  virtual void Layout();
236  virtual void ClearViewPort();
237  virtual Int_t GetHsbPosition() const;
238  virtual Int_t GetVsbPosition() const;
239  virtual void SetHsbPosition(Int_t newPos);
240  virtual void SetVsbPosition(Int_t newPos);
241  void SetScrolling(Int_t scrolling);
242  Int_t GetScrolling() const { return fScrolling; }
243 
244  virtual TGDimension GetDefaultSize() const { return TGDimension(fWidth, fHeight); }
245  virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
246 
247  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
248 
249  ClassDef(TGCanvas,0) // A canvas with two scrollbars and a viewport
250 };
251 
252 
253 #endif