Logo ROOT   6.16/01
Reference Guide
TGApplication.cxx
Go to the documentation of this file.
1// @(#)root/gui:$Id$
2// Author: Guy Barrand 30/05/2001
3
4/*************************************************************************
5 * Copyright (C) 2001, Guy Barrand. *
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// //
14// TGApplication //
15// //
16// This class initialize the ROOT GUI toolkit. //
17// This class must be instantiated exactly once in any given //
18// application. //
19// //
20//////////////////////////////////////////////////////////////////////////
21
22#include "RConfigure.h"
23
24#include "TGApplication.h"
25#include "TROOT.h"
26#include "TSystem.h"
27#include "TGClient.h"
28#include "TPluginManager.h"
29#include "TError.h"
30#include "TEnv.h"
31#include "TVirtualX.h"
32#include "TStyle.h"
33#include "TInterpreter.h"
34#include "TColor.h"
35
37
38////////////////////////////////////////////////////////////////////////////////
39/// Create a GUI application environment. Use this class if you only
40/// want to use the ROOT GUI and no other services. In all other cases
41/// use either TApplication or TRint.
42
43TGApplication::TGApplication(const char *appClassName,
44 int *argc, char **argv, void*, int)
45 : TApplication(), fDisplay(0), fClient(0)
46{
47 if (gApplication) {
48 Error("TGApplication", "only one instance of TGApplication allowed");
49 return;
50 }
51
52 if (!gROOT)
53 ::Fatal("TGApplication::TGApplication", "ROOT system not initialized");
54
55 if (!gSystem)
56 ::Fatal("TGApplication::TGApplication", "gSystem not initialized");
57
58 gApplication = this;
59 gROOT->SetApplication(this);
60 gROOT->SetName(appClassName);
61
62 GetOptions(argc, argv);
63 if (argv && argv[0])
64 gSystem->SetProgname(argv[0]);
65
66 // Tell TSystem the TApplication has been created
68
69 // Enable autoloading
70 gInterpreter->EnableAutoLoading();
71
73
76
77 if (fClient->IsZombie()) {
78 Error("TGApplication", "cannot switch to batch mode, exiting...");
79 gSystem->Exit(1);
80 }
81
82 // a GUI application is never run in batch mode
83 gROOT->SetBatch(kFALSE);
84
85 if (strcmp(appClassName, "proofserv")) {
86 const char *ttpath = gEnv->GetValue("Root.TTFontPath",
88 char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission);
89 // Added by cholm for use of DFSG - fonts - based on fix by Kevin
90 if (!ttfont)
91 ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission);
92 if (ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) {
94 if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", "x11ttf")))
95 if (h->LoadPlugin() == -1)
96 Info("TGApplication", "no TTF support");
97 }
98
99 delete [] ttfont;
100 }
101
102 // Create the canvas colors early so they are allocated before
103 // any color table expensive bitmaps get allocated in GUI routines (like
104 // creation of XPM bitmaps).
106
107 // Set default screen factor (if not disabled in rc file)
108 if (gEnv->GetValue("Canvas.UseScreenFactor", 1)) {
109 Int_t x, y;
110 UInt_t w, h;
111 if (gVirtualX) {
112 gVirtualX->GetGeometry(-1, x, y, w, h);
113 if (h > 0 && h < 1000) gStyle->SetScreenFactor(0.0011*h);
114 }
115 }
116
117 // Save current interpreter context
118 gInterpreter->SaveContext();
119 gInterpreter->SaveGlobalsContext();
120
121 // to allow user to interact with TCanvas's under WIN32
122 gROOT->SetLineHasBeenProcessed();
123}
124
125////////////////////////////////////////////////////////////////////////////////
126/// TGApplication dtor.
127
129{
130 delete fDisplay;
131 delete fClient;
132}
133
134////////////////////////////////////////////////////////////////////////////////
135/// Load shared libs necessary for GUI.
136
138{
140 TString title1 = "ROOT interface to ";
141 TString nativex, title;
142#ifndef R__WIN32
143 nativex = "x11";
144 name = "X11";
145 title = title1 + "X11";
146#else
147 nativex = "win32gdk";
148 name = "Win32gdk";
149 title = title1 + "Win32gdk";
150#endif
151
152 TString guiBackend(gEnv->GetValue("Gui.Backend", "native"));
153 guiBackend.ToLower();
154 if (guiBackend == "native") {
155 guiBackend = nativex;
156 } else {
157 name = guiBackend;
158 title = title1 + guiBackend;
159 }
160
162 if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", guiBackend))) {
163 if (h->LoadPlugin() == -1)
164 return;
165 gVirtualX = (TVirtualX *) h->ExecPlugin(2, name.Data(), title.Data());
166 }
167}
168
169////////////////////////////////////////////////////////////////////////////////
170/// Handle command line arguments. Arguments handled are removed from the
171/// argument array. Currently only option "-display xserver" is considered.
172
173void TGApplication::GetOptions(Int_t *argc, char **argv)
174{
175 if (!argc) return;
176
177 int i, j;
178 for (i = 0; i < *argc; i++) {
179 if (!strcmp(argv[i], "-display")) {
180 if (argv[i+1] && strlen(argv[i+1]) && argv[i+1][0] != '-') {
181 fDisplay = StrDup(argv[i+1]);
182 argv[i] = 0;
183 argv[i+1] = 0;
184 i++;
185 }
186 }
187 }
188
189 j = 0;
190 for (i = 0; i < *argc; i++) {
191 if (argv[i]) {
192 argv[j] = argv[i];
193 j++;
194 }
195 }
196
197 *argc = j;
198}
199
#define h(i)
Definition: RSha256.hxx:106
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
const Bool_t kFALSE
Definition: RtypesCore.h:88
#define ClassImp(name)
Definition: Rtypes.h:363
R__EXTERN TApplication * gApplication
Definition: TApplication.h:165
R__EXTERN TEnv * gEnv
Definition: TEnv.h:171
#define gInterpreter
Definition: TInterpreter.h:538
#define gROOT
Definition: TROOT.h:410
char * StrDup(const char *str)
Duplicate the string str.
Definition: TString.cxx:2465
R__EXTERN TStyle * gStyle
Definition: TStyle.h:406
@ kReadPermission
Definition: TSystem.h:48
R__EXTERN TSystem * gSystem
Definition: TSystem.h:540
#define gVirtualX
Definition: TVirtualX.h:345
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
Definition: TApplication.h:39
static void InitializeColors()
Initialize colors used by the TCanvas based graphics (via TColor objects).
Definition: TColor.cxx:1077
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition: TEnv.cxx:491
virtual void LoadGraphicsLibs()
Load shared libs necessary for GUI.
virtual void GetOptions(Int_t *argc, char **argv)
Handle command line arguments.
TGClient * fClient
Definition: TGApplication.h:35
virtual ~TGApplication()
TGApplication dtor.
R__ALWAYS_INLINE Bool_t IsZombie() const
Definition: TObject.h:134
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:880
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
Definition: TObject.cxx:908
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition: TObject.cxx:854
static const TString & GetTTFFontDir()
Get the fonts directory in the installation. Static utility function.
Definition: TROOT.cxx:3147
Basic string class.
Definition: TString.h:131
void ToLower()
Change string to lower-case.
Definition: TString.cxx:1100
const char * Data() const
Definition: TString.h:364
void SetScreenFactor(Float_t factor=1)
Definition: TStyle.h:297
virtual void NotifyApplicationCreated()
Hook to tell TSystem that the TApplication object has been created.
Definition: TSystem.cxx:320
virtual void SetDisplay()
Set DISPLAY environment variable based on utmp entry. Only for UNIX.
Definition: TSystem.cxx:240
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
Definition: TSystem.cxx:725
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
Definition: TSystem.cxx:1536
virtual void SetProgname(const char *name)
Set the application name (from command line, argv[0]) and copy it in gProgName.
Definition: TSystem.cxx:232
Semi-Abstract base class defining a generic interface to the underlying, low level,...
Definition: TVirtualX.h:53
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17