Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/medical/dna/chem4/plot/src/CanvasInTab.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 #include "CanvasInTab.hh"
 27 
 28 #include "TGFileDialog.h"
 29 #include "TGTab.h"
 30 
 31 #include <TApplication.h>
 32 #include <TCanvas.h>
 33 #include <TF1.h>
 34 #include <TGButton.h>
 35 #include <TGClient.h>
 36 #include <TRandom.h>
 37 #include <TRootEmbeddedCanvas.h>
 38 #include <iostream>
 39 #include <map>
 40 #include <vector>
 41 
 42 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 43 
 44 const char* SaveFileDialog()
 45 {
 46   // Prompt for file to be saved. Depending on navigation in
 47   // dialog the current working directory can be changed.
 48   // The returned file name is always with respect to the
 49   // current directory.
 50 
 51   const char* gSaveAsTypes[] = {"Macro files",
 52                                 "*.C",
 53                                 "ROOT files",
 54                                 "*.root",
 55                                 "PostScript",
 56                                 "*.ps",
 57                                 "Encapsulated PostScript",
 58                                 "*.eps",
 59                                 "PDF files",
 60                                 "*.pdf",
 61                                 "Gif files",
 62                                 "*.gif",
 63                                 "PNG files",
 64                                 "*.png",
 65                                 "All files",
 66                                 "*",
 67                                 0,
 68                                 0};
 69 
 70   static TGFileInfo fi;
 71   fi.fFileTypes = gSaveAsTypes;
 72 
 73   new TGFileDialog(gClient->GetRoot(), gClient->GetRoot(), kFDSave, &fi);
 74 
 75   return fi.fFilename;
 76 }
 77 
 78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 79 
 80 CanvasInTab::CanvasInTab(const TGWindow* p, UInt_t w, UInt_t h) : TGMainFrame(p, w, h)
 81 {
 82   fpTab = new TGTab(this, 200, 200);
 83 
 84   fHintPlots = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 2);
 85 
 86   AddFrame(fpTab, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 10, 10, 10, 1));
 87 
 88   fpTab->Resize();
 89 
 90   //-----
 91   TGHorizontalFrame* hframe = new TGHorizontalFrame(this, 200, 40);
 92 
 93   TGTextButton* save = new TGTextButton(hframe, "&Save as ...");
 94   save->Connect("Clicked()", "CanvasInTab", this, "SaveCanvas()");
 95   hframe->AddFrame(save, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
 96 
 97   TGTextButton* exit = new TGTextButton(hframe, "&Exit ", "gApplication->Terminate()");
 98   hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
 99 
100   AddFrame(hframe, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
101 
102   //-----
103   // Sets window name and shows the main frame
104 
105   SetWindowName("PlotG");
106   MapSubwindows();
107   Resize(GetDefaultSize());
108   MapWindow();
109 }
110 
111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
112 
113 CanvasInTab::~CanvasInTab()
114 {
115   Cleanup();
116   //  if(fpTab)
117   //  {
118   ////    fpTab->Cleanup();
119   //    delete fpTab;
120   //  }
121 
122   //  if(fHintPlots)
123   //    delete fHintPlots;
124 }
125 
126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127 
128 size_t CanvasInTab::AddCanvas(const char* name)
129 {
130   size_t output = fEcanvas.size();
131   auto compositeFrame = fpTab->AddTab(name);
132   TRootEmbeddedCanvas* embeddedCanvas = new TRootEmbeddedCanvas(name, compositeFrame, 500, 300);
133   embeddedCanvas->SetAutoFit();
134   fEcanvas.push_back(embeddedCanvas);
135   compositeFrame->AddFrame(embeddedCanvas, fHintPlots);
136   embeddedCanvas->SetContainer(compositeFrame);
137   fpTab->Resize();
138   fpTab->MapSubwindows();
139   //  fpTab->MapWindow();
140   Resize();
141   return output;
142 }
143 
144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
145 
146 TCanvas* CanvasInTab::GetCanvas(int i)
147 {
148   return fEcanvas[i]->GetCanvas();
149 }
150 
151 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
152 
153 void CanvasInTab::SaveCanvas()
154 {
155   if (fpTab->GetNumberOfTabs() == 0) return;
156 
157   const char* name = SaveFileDialog();
158 
159   if (name == 0 || strlen(name) == 0) return;
160 
161   int current = fpTab->GetCurrent();
162   TCanvas* canvas = fEcanvas[current]->GetCanvas();
163   canvas->SaveAs(name);
164 }
165