ROOT logo
// @(#)root/gui:$Id: TRootCanvas.h 28464 2009-05-06 12:37:21Z brun $
// Author: Fons Rademakers   15/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_TRootCanvas
#define ROOT_TRootCanvas

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TRootCanvas                                                          //
//                                                                      //
// This class creates a main window with menubar, scrollbars and a      //
// drawing area. The widgets used are the new native ROOT GUI widgets.  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TCanvasImp
#include "TCanvasImp.h"
#endif
#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif

class TGCanvas;
class TGMenuBar;
class TGPopupMenu;
class TGLayoutHints;
class TGStatusBar;
class TRootContainer;
class TGToolBar;
class TGHorizontal3DLine;
class TGVertical3DLine;
class TVirtualPadEditor;
class TGDockableFrame;
class TGDNDManager;

class TRootCanvas : public TGMainFrame, public TCanvasImp {

friend class TRootContainer;

private:
   TGCanvas            *fCanvasWindow;       // canvas widget
   TRootContainer      *fCanvasContainer;    // container in canvas widget
   TGMenuBar           *fMenuBar;            // menubar
   TGPopupMenu         *fFileMenu;           // file menu
   TGPopupMenu         *fFileSaveMenu;       // save cascade submenu
   TGPopupMenu         *fEditMenu;           // edit menu
   TGPopupMenu         *fEditClearMenu;      // clear cascade submenu
   TGPopupMenu         *fViewMenu;           // view menu
   TGPopupMenu         *fViewWithMenu;       // view with... cascade submenu
   TGPopupMenu         *fOptionMenu;         // option menu
   TGPopupMenu         *fToolsMenu;          // tools menu
   TGPopupMenu         *fHelpMenu;           // help menu
   TGLayoutHints       *fMenuBarLayout;      // menubar layout hints
   TGLayoutHints       *fMenuBarItemLayout;  // layout hints for menu in menubar
   TGLayoutHints       *fMenuBarHelpLayout;  // layout hint for help menu in menubar
   TGLayoutHints       *fCanvasLayout;       // layout for canvas widget
   TGStatusBar         *fStatusBar;          // statusbar widget
   TGLayoutHints       *fStatusBarLayout;    // layout hints for statusbar

   TGCompositeFrame    *fEditorFrame;        // side frame for current pad editor
   TGLayoutHints       *fEditorLayout;       // layout for editor frame
   TGCompositeFrame    *fMainFrame;          // main frame containing canvas and side frame
   TGLayoutHints       *fToolBarLayout;      // layout for toolbar widget
   TGToolBar           *fToolBar;            // icon button toolbar
   TGHorizontal3DLine  *fToolBarSep;         // toolbar separator
   TGLayoutHints       *fMainFrameLayout;    // layout for main frame
   TGVertical3DLine    *fVertical1;          // toolbar vertical separator
   TGVertical3DLine    *fVertical2;          // toolbar vertical separator
   TGHorizontal3DLine  *fHorizontal1;        // toolbar sepatator
   TGLayoutHints       *fVertical1Layout;    // layout hints for separator
   TGLayoutHints       *fVertical2Layout;    // layout hints for separator
   TGLayoutHints       *fHorizontal1Layout;  // layout hints for separator
   TGDockableFrame     *fToolDock;           // dockable frame holding the toolbar
   TGLayoutHints       *fDockLayout;         // layout hints for dockable frame widget
   const TGPicture     *fIconPic;            // icon picture
   
   TVirtualPadEditor   *fEditor;     // pointer to currently loaded pad editor
   Int_t                fCanvasID;   // index in fWindows array of TGX11
   Bool_t               fAutoFit;    // when true canvas container keeps same size as canvas
   Int_t                fButton;     // currently pressed button
   
   TRootCanvas(const TRootCanvas&); // Not implemented
   TRootCanvas& operator=(const TRootCanvas&); // Not implemented
   void     CreateCanvas(const char *name);
   void     CreateEditor();

   Bool_t   HandleContainerButton(Event_t *ev);
   Bool_t   HandleContainerDoubleClick(Event_t *ev);
   Bool_t   HandleContainerConfigure(Event_t *ev);
   Bool_t   HandleContainerKey(Event_t *ev);
   Bool_t   HandleContainerMotion(Event_t *ev);
   Bool_t   HandleContainerExpose(Event_t *ev);
   Bool_t   HandleContainerCrossing(Event_t *ev);

   Bool_t   HandleDNDDrop(TDNDData *data);
   Atom_t   HandleDNDPosition(Int_t x, Int_t y, Atom_t action,
                              Int_t xroot, Int_t yroot);
   Atom_t   HandleDNDEnter(Atom_t * typelist);
   Bool_t   HandleDNDLeave();

public:
   TRootCanvas(TCanvas *c = 0, const char *name = "ROOT Canvas", UInt_t width = 500, UInt_t height = 300);
   TRootCanvas(TCanvas *c, const char *name, Int_t x, Int_t y, UInt_t width, UInt_t height);
   virtual ~TRootCanvas();

   void     AdjustSize();
   void     Close();
   void     ForceUpdate() { Layout(); }
   void     FitCanvas();
   UInt_t   GetWindowGeometry(Int_t &x, Int_t &y, UInt_t &w, UInt_t &h);
   UInt_t   GetCwidth() const;
   UInt_t   GetCheight() const;
   void     Iconify() { IconifyWindow(); }
   Int_t    InitWindow();
   void     PrintCanvas();
   void     RaiseWindow();
   void     SetWindowPosition(Int_t x, Int_t y);
   void     SetWindowSize(UInt_t w, UInt_t h);
   void     SetWindowTitle(const char *newTitle);
   void     SetCanvasSize(UInt_t w, UInt_t h);
   void     SetStatusText(const char *txt = 0, Int_t partidx = 0);

   void     Show() { MapRaised(); }
   void     ShowMenuBar(Bool_t show = kTRUE);
   void     ShowStatusBar(Bool_t show = kTRUE);
   void     ShowEditor(Bool_t show = kTRUE);
   void     ShowToolBar(Bool_t show = kTRUE);

   Bool_t   HasEditor() const;
   Bool_t   HasMenuBar() const;
   Bool_t   HasStatusBar() const;
   Bool_t   HasToolBar() const;

   TGMenuBar     *GetMenuBar() const { return fMenuBar; }
   TGLayoutHints *GetMenuBarItemLayout() const { return fMenuBarItemLayout; }
   TGStatusBar   *GetStatusBar() const { return fStatusBar; }
   TGDockableFrame *GetToolDock() const { return fToolDock; }
   
   // overridden from TGMainFrame
   void     CloseWindow();
   Bool_t   ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
   void     ReallyDelete();

   ClassDef(TRootCanvas,0)  //ROOT native GUI version of main window with menubar and drawing area
};

#endif
 TRootCanvas.h:1
 TRootCanvas.h:2
 TRootCanvas.h:3
 TRootCanvas.h:4
 TRootCanvas.h:5
 TRootCanvas.h:6
 TRootCanvas.h:7
 TRootCanvas.h:8
 TRootCanvas.h:9
 TRootCanvas.h:10
 TRootCanvas.h:11
 TRootCanvas.h:12
 TRootCanvas.h:13
 TRootCanvas.h:14
 TRootCanvas.h:15
 TRootCanvas.h:16
 TRootCanvas.h:17
 TRootCanvas.h:18
 TRootCanvas.h:19
 TRootCanvas.h:20
 TRootCanvas.h:21
 TRootCanvas.h:22
 TRootCanvas.h:23
 TRootCanvas.h:24
 TRootCanvas.h:25
 TRootCanvas.h:26
 TRootCanvas.h:27
 TRootCanvas.h:28
 TRootCanvas.h:29
 TRootCanvas.h:30
 TRootCanvas.h:31
 TRootCanvas.h:32
 TRootCanvas.h:33
 TRootCanvas.h:34
 TRootCanvas.h:35
 TRootCanvas.h:36
 TRootCanvas.h:37
 TRootCanvas.h:38
 TRootCanvas.h:39
 TRootCanvas.h:40
 TRootCanvas.h:41
 TRootCanvas.h:42
 TRootCanvas.h:43
 TRootCanvas.h:44
 TRootCanvas.h:45
 TRootCanvas.h:46
 TRootCanvas.h:47
 TRootCanvas.h:48
 TRootCanvas.h:49
 TRootCanvas.h:50
 TRootCanvas.h:51
 TRootCanvas.h:52
 TRootCanvas.h:53
 TRootCanvas.h:54
 TRootCanvas.h:55
 TRootCanvas.h:56
 TRootCanvas.h:57
 TRootCanvas.h:58
 TRootCanvas.h:59
 TRootCanvas.h:60
 TRootCanvas.h:61
 TRootCanvas.h:62
 TRootCanvas.h:63
 TRootCanvas.h:64
 TRootCanvas.h:65
 TRootCanvas.h:66
 TRootCanvas.h:67
 TRootCanvas.h:68
 TRootCanvas.h:69
 TRootCanvas.h:70
 TRootCanvas.h:71
 TRootCanvas.h:72
 TRootCanvas.h:73
 TRootCanvas.h:74
 TRootCanvas.h:75
 TRootCanvas.h:76
 TRootCanvas.h:77
 TRootCanvas.h:78
 TRootCanvas.h:79
 TRootCanvas.h:80
 TRootCanvas.h:81
 TRootCanvas.h:82
 TRootCanvas.h:83
 TRootCanvas.h:84
 TRootCanvas.h:85
 TRootCanvas.h:86
 TRootCanvas.h:87
 TRootCanvas.h:88
 TRootCanvas.h:89
 TRootCanvas.h:90
 TRootCanvas.h:91
 TRootCanvas.h:92
 TRootCanvas.h:93
 TRootCanvas.h:94
 TRootCanvas.h:95
 TRootCanvas.h:96
 TRootCanvas.h:97
 TRootCanvas.h:98
 TRootCanvas.h:99
 TRootCanvas.h:100
 TRootCanvas.h:101
 TRootCanvas.h:102
 TRootCanvas.h:103
 TRootCanvas.h:104
 TRootCanvas.h:105
 TRootCanvas.h:106
 TRootCanvas.h:107
 TRootCanvas.h:108
 TRootCanvas.h:109
 TRootCanvas.h:110
 TRootCanvas.h:111
 TRootCanvas.h:112
 TRootCanvas.h:113
 TRootCanvas.h:114
 TRootCanvas.h:115
 TRootCanvas.h:116
 TRootCanvas.h:117
 TRootCanvas.h:118
 TRootCanvas.h:119
 TRootCanvas.h:120
 TRootCanvas.h:121
 TRootCanvas.h:122
 TRootCanvas.h:123
 TRootCanvas.h:124
 TRootCanvas.h:125
 TRootCanvas.h:126
 TRootCanvas.h:127
 TRootCanvas.h:128
 TRootCanvas.h:129
 TRootCanvas.h:130
 TRootCanvas.h:131
 TRootCanvas.h:132
 TRootCanvas.h:133
 TRootCanvas.h:134
 TRootCanvas.h:135
 TRootCanvas.h:136
 TRootCanvas.h:137
 TRootCanvas.h:138
 TRootCanvas.h:139
 TRootCanvas.h:140
 TRootCanvas.h:141
 TRootCanvas.h:142
 TRootCanvas.h:143
 TRootCanvas.h:144
 TRootCanvas.h:145
 TRootCanvas.h:146
 TRootCanvas.h:147
 TRootCanvas.h:148
 TRootCanvas.h:149
 TRootCanvas.h:150
 TRootCanvas.h:151
 TRootCanvas.h:152
 TRootCanvas.h:153
 TRootCanvas.h:154
 TRootCanvas.h:155
 TRootCanvas.h:156