40 const char gHelpDND[] =
"\ 42 Drag and Drop support is implemented on Linux via Xdnd, the\n\ 43 drag and drop protocol for X window system, and on Windows\n\ 45 Users can selects something in ROOT with a mouse press, drags\n\ 46 it (moves the mouse while keeping the mouse button pressed) and\n\ 47 releases the mouse button somewhere else. When the button is\n\ 48 released the selected data is \"dropped\" at that location. This\n\ 49 way, a histogram from an opened ROOT file in the browser can be\n\ 50 dragged to any TCanvas. A script file from the browser can be\n\ 51 dropped to a TGTextView or TGTextEdit widget in TGTextEditor.\n\ 52 On Linux, it is possible to drag objects between ROOT and an\n\ 53 external application. For example to drag a macro file from the\n\ 54 ROOT browser to the Kate editor. On Windows, drag and drop works\n\ 55 only within a single ROOT application, but it is possible to drag\n\ 56 from the Windows Explorer to ROOT (e.g. a picture file to a canvas\n\ 57 or a text file to a text editor).\n\ 60 const char gReadyMsg[] =
"Ready. You can drag list tree items to any \ 61 pad in the canvas, or to the \"Base\" folder of the list tree itself...";
82 DNDMainFrame(
const TGWindow *p,
int w,
int h);
83 virtual ~DNDMainFrame();
86 void HandleMenu(
Int_t);
87 TObject *GetObject(
const char *obj);
103 const char *dnd_types[] = {
104 "ROOT files",
"*.root",
105 "ROOT macros",
"*.C",
113 DNDMainFrame::DNDMainFrame(
const TGWindow *p,
int w,
int h) :
114 TGMainFrame(p, w, h), fGraph(0), fHist1D(0), fHist2D(0)
125 fMenuFile->
AddEntry(
" &Open...\tCtrl+O", M_FILE_OPEN, 0,
126 gClient->GetPicture(
"bld_open.png"));
127 fMenuFile->AddEntry(
" &Browse...\tCtrl+B", M_FILE_BROWSE);
128 fMenuFile->AddEntry(
" &New Canvas\tCtrl+N", M_FILE_NEWCANVAS);
129 fMenuFile->AddEntry(
" &Close Window\tCtrl+W", M_FILE_CLOSEWIN);
130 fMenuFile->AddSeparator();
131 fMenuFile->AddEntry(
" E&xit\tCtrl+Q", M_FILE_EXIT, 0,
132 gClient->GetPicture(
"bld_exit.png"));
133 fMenuFile->Connect(
"Activated(Int_t)",
"DNDMainFrame",
this,
134 "HandleMenu(Int_t)");
137 fMenuHelp->
AddEntry(
" &About...", M_HELP_ABOUT, 0,
138 gClient->GetPicture(
"about.xpm"));
139 fMenuHelp->Connect(
"Activated(Int_t)",
"DNDMainFrame",
this,
140 "HandleMenu(Int_t)");
152 fListTree->Associate(
this);
157 fEc->SetDNDTarget(
kTRUE);
158 fCanvas = fEc->GetCanvas();
159 fCanvas->Divide(3, 2);
160 fCanvas->SetBorderMode(0);
161 fBaseLTI = fListTree->AddItem(0,
"Base");
167 fStatus->SetTextColor(0x0000ff);
172 fButtonExit->Resize(fButtonExit->GetDefaultSize());
173 fButtonExit->SetToolTipText(
"Exit Application (ROOT)");
174 fButtonExit->Connect(
"Clicked()" ,
"TApplication",
gApplication,
184 pic =
gClient->GetPicture(
"f1_t.xpm");
185 item = fListTree->AddItem(fBaseLTI, gr->
GetName(),
gr, pic, pic);
186 fListTree->SetToolTipItem(item,
"Simple Graph");
189 TH1F *hpx = (
TH1F *)GetObject(
"1D Hist");
190 pic =
gClient->GetPicture(
"h1_t.xpm");
191 item = fListTree->AddItem(fBaseLTI, hpx->
GetName(), hpx, pic, pic);
192 fListTree->SetToolTipItem(item,
"1D Histogram");
195 TH2F *h2 = (
TH2F *)GetObject(
"2D Hist");
196 pic =
gClient->GetPicture(
"h2_t.xpm");
197 item = fListTree->AddItem(fBaseLTI, h2->
GetName(), h2, pic, pic);
198 fListTree->SetToolTipItem(item,
"2D Histogram");
204 if (rootsys[1] ==
':' && rootsys[2] ==
'/')
205 rootsys.Remove(0, 3);
218 else pic =
gClient->GetPicture(
"psp_t.xpm");
221 item = fListTree->AddItem(fBaseLTI,
"Rose", ostr, pic, pic);
222 fListTree->SetToolTipItem(item, link.
Data());
223 item->SetDNDSource(
kTRUE);
227 fListTree->OpenItem(fBaseLTI);
228 fListTree->GetFirstItem()->SetDNDTarget(
kTRUE);
231 fListTree->Connect(
"DataDropped(TGListTreeItem*, TDNDData*)",
"DNDMainFrame",
232 this,
"DataDropped(TGListTreeItem*,TDNDData*)");
234 SetWindowName(
"ROOT DND Demo Application");
236 Resize(GetDefaultSize());
237 Connect(
"CloseWindow()",
"DNDMainFrame",
this,
"DoCloseWindow()");
242 DNDMainFrame::~DNDMainFrame()
248 void DNDMainFrame::DoCloseWindow()
252 if (fGraph) {
delete fGraph; fGraph = 0; }
253 if (fHist1D) {
delete fHist1D; fHist1D = 0; }
254 if (fHist2D) {
delete fHist2D; fHist2D = 0; }
255 fMenuFile->Disconnect(
"Activated(Int_t)",
this,
"HandleMenu(Int_t)");
256 fMenuHelp->Disconnect(
"Activated(Int_t)",
this,
"HandleMenu(Int_t)");
257 fButtonExit->Disconnect(
"Clicked()" ,
this,
"CloseWindow()");
258 fListTree->Disconnect(
"DataDropped(TGListTreeItem*, TDNDData*)",
this,
259 "DataDropped(TGListTreeItem*,TDNDData*)");
270 fStatus->SetTextColor(0xff0000);
271 fStatus->ChangeText(
"I received data!!!");
280 sprintf(tmp,
"Received DND data : Type = \"%s\"; Length = %d bytes;",
283 pic =
gClient->GetPicture(
"f1_t.xpm");
285 pic =
gClient->GetPicture(
"h2_t.xpm");
287 pic =
gClient->GetPicture(
"h1_t.xpm");
288 itm = fListTree->AddItem(fBaseLTI, obj->
GetName(), obj, pic, pic);
289 fListTree->SetToolTipItem(itm, obj->
GetName());
292 sprintf(tmp,
"Received DND data: \"%s\"", (
char *)data->
fData);
303 else pic =
gClient->GetPicture(
"doc_t.xpm");
304 itm = fListTree->AddItem(fBaseLTI,
"Link...", ostr, pic, pic);
305 fListTree->SetToolTipItem(itm, (
const char *)data->
fData);
308 fStatus->ChangeText(tmp);
314 TObject *DNDMainFrame::GetObject(
const char *obj)
319 if (!strcmp(obj,
"Graph")) {
325 y[i] = 10*
sin(x[i]+0.2);
327 fGraph =
new TGraph(n, x, y);
331 else if (!strcmp(obj,
"1D Hist")) {
333 fHist1D =
new TH1F(
"1D Hist",
"This is the px distribution",100,-4,4);
335 for (
Int_t i=0; i<10000; i++) {
342 else if (!strcmp(obj,
"2D Hist")) {
345 130,-1.4,1.8,1.5,1, 150,2,0.5,-2,0.5, 3600,-2,0.7,-3,0.3
347 TF2 *f2 =
new TF2(
"f2",
"xygaus + xygaus(5) + xylandau(10)",
350 fHist2D =
new TH2F(
"2D Hist",
"xygaus+xygaus(5)+xylandau(10)",
351 20, -4, 4, 20, -4, 4);
352 fHist2D->FillRandom(
"f2",40000);
360 void DNDMainFrame::HandleMenu(
Int_t menu_id)
385 case M_FILE_NEWCANVAS:
387 gROOT->MakeDefCanvas();
389 case M_FILE_CLOSEWIN:
401 void DNDMainFrame::ResetStatus()
405 fStatus->SetTextColor(0x0000ff);
406 fStatus->ChangeText(gReadyMsg);
414 DNDMainFrame *mainWindow =
new DNDMainFrame(
gClient->GetRoot(), 700, 400);
415 mainWindow->MapWindow();
virtual const char * GetName() const
Returns name of object.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual void SetParameters(const Double_t *params)
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket...
Collectable string class.
THist< 1, float, THistStatContent, THistStatUncertainty > TH1F
1-D histogram with a float per channel (see TH1 documentation)}
static void SingleShot(Int_t milliSec, const char *receiver_class, void *receiver, const char *method)
This static function calls a slot after a given time interval.
An abstract interface to image processing library.
virtual void Terminate(Int_t status=0)
Terminate the application by call TSystem::Exit() unless application has been told to return from Run...
virtual void Merge(const TImage *, const char *="alphablend", Int_t=0, Int_t=0)
TString & Prepend(const char *cs)
R__EXTERN TApplication * gApplication
virtual Pixmap_t GetPixmap()
virtual const char * UnixPathName(const char *unixpathname)
Convert from a Unix pathname to a local pathname.
virtual void Scale(UInt_t, UInt_t)
void SetText(const char *helpText)
Set help text from helpText buffer in TGTextView.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
virtual const char * Getenv(const char *env)
Get environment variable.
Using a TBrowser one can browse all ROOT objects.
R__EXTERN TSystem * gSystem
void Popup()
Show help dialog.
2-D histogram with a float per channel (see TH1 documentation)}
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
A 2-Dim function with parameters.
R__EXTERN TRandom * gRandom
char * StrDup(const char *str)
Duplicate the string str.
virtual Pixmap_t GetMask()
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Mother of all ROOT objects.
A Graph is a graphics object made of two arrays X and Y with npoints each.
void SetDNDSource(Bool_t onoff)
static TImage * Open(const char *file, EImageFileTypes type=kUnknown)
Open a specified image file.
virtual const char * GetName() const
Returns name of object.
THist< 2, float, THistStatContent, THistStatUncertainty > TH2F
const char * Data() const