Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // 27 // 28 /* 28 /* 29 * jck 05 Feb 1997 - Initial Implementation 29 * jck 05 Feb 1997 - Initial Implementation 30 * jck 21 Apr 1997 30 * jck 21 Apr 1997 31 * Mods for SoXtHepViewer 31 * Mods for SoXtHepViewer 32 * gb : on Win32 use an SoXtExaminerViewer. 32 * gb : on Win32 use an SoXtExaminerViewer. 33 * gb 05 April 2004 : revisit to separate Wind 33 * gb 05 April 2004 : revisit to separate Windows things. 34 * gb 09 November 2004 : restore the escape bu 34 * gb 09 November 2004 : restore the escape button. 35 * gb 09 November 2004 : have a menu bar in th 35 * gb 09 November 2004 : have a menu bar in the viewer shell. 36 * gb 09 November 2004 : have gl2ps file produ 36 * gb 09 November 2004 : have gl2ps file production. 37 * gb 14 November 2004 : inherit G4OpenInvento 37 * gb 14 November 2004 : inherit G4OpenInventorViewer. 38 */ 38 */ 39 39 >> 40 #ifdef G4VIS_BUILD_OIX_DRIVER >> 41 40 // this : 42 // this : 41 #include "G4OpenInventorXtExtendedViewer.hh" 43 #include "G4OpenInventorXtExtendedViewer.hh" 42 44 43 #include <Inventor/nodes/SoSelection.h> 45 #include <Inventor/nodes/SoSelection.h> 44 46 45 #include <Inventor/Xt/SoXt.h> 47 #include <Inventor/Xt/SoXt.h> 46 48 47 //Replaces inclusion of SoXtExaminerViewer.h 49 //Replaces inclusion of SoXtExaminerViewer.h 48 #include <Inventor/Xt/viewers/SoXtFlyViewer.h> 50 #include <Inventor/Xt/viewers/SoXtFlyViewer.h> 49 51 50 #include <X11/StringDefs.h> 52 #include <X11/StringDefs.h> 51 #include <X11/Shell.h> 53 #include <X11/Shell.h> 52 54 53 #include <Xm/Xm.h> 55 #include <Xm/Xm.h> 54 #include <Xm/PushB.h> 56 #include <Xm/PushB.h> 55 #include <Xm/Form.h> 57 #include <Xm/Form.h> 56 #include <Xm/CascadeB.h> 58 #include <Xm/CascadeB.h> 57 #include <Xm/RowColumn.h> 59 #include <Xm/RowColumn.h> 58 #include <Xm/Text.h> 60 #include <Xm/Text.h> 59 61 60 #include <cstdio> 62 #include <cstdio> 61 63 62 #include "HEPVis/actions/SoGL2PSAction.h" 64 #include "HEPVis/actions/SoGL2PSAction.h" 63 65 64 #include "G4OpenInventor.hh" 66 #include "G4OpenInventor.hh" 65 #include "G4OpenInventorSceneHandler.hh" 67 #include "G4OpenInventorSceneHandler.hh" 66 #include "G4OpenInventorXtExaminerViewer.hh" 68 #include "G4OpenInventorXtExaminerViewer.hh" 67 #include "G4VInteractorManager.hh" 69 #include "G4VInteractorManager.hh" 68 #include "G4VisManager.hh" 70 #include "G4VisManager.hh" 69 #include "G4AttCheck.hh" 71 #include "G4AttCheck.hh" 70 72 71 G4OpenInventorXtExtendedViewer::G4OpenInventor 73 G4OpenInventorXtExtendedViewer::G4OpenInventorXtExtendedViewer( 72 G4OpenInventorSceneHandler& sceneHandler 74 G4OpenInventorSceneHandler& sceneHandler 73 ,const G4String& name) 75 ,const G4String& name) 74 :G4OpenInventorViewer (sceneHandler, name) 76 :G4OpenInventorViewer (sceneHandler, name) 75 ,fShell(0) 77 ,fShell(0) 76 ,fViewer(0) 78 ,fViewer(0) 77 ,fHelpForm(0) 79 ,fHelpForm(0) 78 ,fHelpText(0) 80 ,fHelpText(0) 79 { 81 { 80 if (G4VisManager::GetVerbosity() >= G4VisMan 82 if (G4VisManager::GetVerbosity() >= G4VisManager::confirmations) 81 G4cout << "Window name: " << fName << G4en 83 G4cout << "Window name: " << fName << G4endl; 82 } 84 } 83 85 84 86 85 void G4OpenInventorXtExtendedViewer::Initialis 87 void G4OpenInventorXtExtendedViewer::Initialise() { 86 88 87 G4String wName = fName; 89 G4String wName = fName; 88 90 89 Widget parent = (Widget)fInteractorManager-> 91 Widget parent = (Widget)fInteractorManager->GetParentInteractor (); 90 // G4cout << "DEBUG G4OpenInventorXtExtended 92 // G4cout << "DEBUG G4OpenInventorXtExtendedViewer: parent = " << parent << G4endl; 91 int width = 600; 93 int width = 600; 92 int height = 600; 94 int height = 600; 93 95 94 if(!parent) { 96 if(!parent) { 95 // Check if user has specified an X-Window 97 // Check if user has specified an X-Windows-type geometry string... 96 char s[32]; 98 char s[32]; 97 99 98 G4String sgeometry = fVP.GetXGeometryStrin 100 G4String sgeometry = fVP.GetXGeometryString(); 99 if(sgeometry.empty()) { 101 if(sgeometry.empty()) { 100 G4cout << "ERROR: Geometry string \"" 102 G4cout << "ERROR: Geometry string \"" 101 << sgeometry 103 << sgeometry 102 << "\" is empty. Using \"600x600 104 << "\" is empty. Using \"600x600\"." 103 << G4endl; 105 << G4endl; 104 width = 600; 106 width = 600; 105 height = 600; 107 height = 600; 106 snprintf(s,32,"%dx%d",width,height); << 108 sprintf(s,"%dx%d",width,height); 107 sgeometry = s; 109 sgeometry = s; 108 } else { 110 } else { 109 width = fVP.GetWindowSizeHintX(); 111 width = fVP.GetWindowSizeHintX(); 110 height = fVP.GetWindowSizeHintX(); 112 height = fVP.GetWindowSizeHintX(); 111 } 113 } 112 114 113 //Create a shell window : 115 //Create a shell window : 114 G4String shellName = wName; 116 G4String shellName = wName; 115 shellName += "_shell"; 117 shellName += "_shell"; 116 Arg args[10]; 118 Arg args[10]; 117 XtSetArg(args[0],XtNgeometry,XtNewString(s 119 XtSetArg(args[0],XtNgeometry,XtNewString(sgeometry.c_str())); 118 XtSetArg(args[1],XtNborderWidth,0); 120 XtSetArg(args[1],XtNborderWidth,0); 119 XtSetArg(args[2],XtNtitle,XtNewString(wNam 121 XtSetArg(args[2],XtNtitle,XtNewString(wName.c_str())); 120 fShell = XtAppCreateShell(shellName.c_str( 122 fShell = XtAppCreateShell(shellName.c_str(),"Inventor", 121 topLevelShellWidgetClass, 123 topLevelShellWidgetClass, 122 SoXt::getDisplay(), 124 SoXt::getDisplay(), 123 args,3); 125 args,3); 124 126 125 // G4cout << "DEBUG CREATING THE VIEWER WI 127 // G4cout << "DEBUG CREATING THE VIEWER WITH CREATED SHELL = " << fShell << G4endl; 126 fViewer = new G4OpenInventorXtExaminerView 128 fViewer = new G4OpenInventorXtExaminerViewer(fShell, wName.c_str(), TRUE); 127 fViewer->addEscapeCallback(EscapeFromKeybo 129 fViewer->addEscapeCallback(EscapeFromKeyboardCbk, (void *)this); 128 130 129 // FWJ (viewpoints don't work with this!) 131 // FWJ (viewpoints don't work with this!) 130 // fViewer->setAutoClipping((SbBool)0); 132 // fViewer->setAutoClipping((SbBool)0); 131 133 132 //XtSetArg(args[0],XmNtopAttachment ,XmA 134 //XtSetArg(args[0],XmNtopAttachment ,XmATTACH_FORM); 133 //XtSetArg(args[1],XmNleftAttachment ,XmA 135 //XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); 134 //XtSetArg(args[2],XmNrightAttachment ,XmA 136 //XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); 135 //XtSetArg(args[3],XmNbottomAttachment,XmA 137 //XtSetArg(args[3],XmNbottomAttachment,XmATTACH_FORM); 136 //Widget form = XmCreateForm (fShell,(char 138 //Widget form = XmCreateForm (fShell,(char*)"form",args,4); 137 //XtManageChild (form); 139 //XtManageChild (form); 138 140 139 Widget menuBar = fViewer->getMenuBar(); 141 Widget menuBar = fViewer->getMenuBar(); 140 142 141 //XtSetArg(args[0],XmNtopAttachment ,XmA 143 //XtSetArg(args[0],XmNtopAttachment ,XmATTACH_FORM); 142 //XtSetArg(args[1],XmNleftAttachment ,XmA 144 //XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); 143 //XtSetArg(args[2],XmNrightAttachment ,XmA 145 //XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); 144 //Widget menuBar = XmCreateMenuBar (form,( 146 //Widget menuBar = XmCreateMenuBar (form,(char*)"menuBar",args,3); 145 //XtManageChild(menuBar); 147 //XtManageChild(menuBar); 146 148 147 {Widget menu = fViewer->getMenu(); 149 {Widget menu = fViewer->getMenu(); 148 //{Widget menu = AddMenu(menuBar,"File","Fi 150 //{Widget menu = AddMenu(menuBar,"File","File"); 149 AddButton(menu,"Write PS (gl2ps)",PostScri 151 AddButton(menu,"Write PS (gl2ps)",PostScriptCbk); 150 AddButton(menu, "Write PDF (gl2ps)", PDFCb 152 AddButton(menu, "Write PDF (gl2ps)", PDFCbk); 151 AddButton(menu,"Write PS (pixmap)",PixmapP 153 AddButton(menu,"Write PS (pixmap)",PixmapPostScriptCbk); 152 AddButton(menu,"Write IV",WriteInventorCbk 154 AddButton(menu,"Write IV",WriteInventorCbk); 153 AddButton(menu,"Escape",EscapeCbk);} 155 AddButton(menu,"Escape",EscapeCbk);} 154 156 155 {Widget menu = AddMenu(menuBar,"Etc","Etc") 157 {Widget menu = AddMenu(menuBar,"Etc","Etc"); 156 AddButton(menu,"Erase detector",EraseDetec 158 AddButton(menu,"Erase detector",EraseDetectorCbk); 157 AddButton(menu,"Erase event",EraseEventCbk 159 AddButton(menu,"Erase event",EraseEventCbk); 158 AddButton(menu,"Set solid",SetSolidCbk); 160 AddButton(menu,"Set solid",SetSolidCbk); 159 /* AddButton(menu,"Set (G4) wire frame",Set 161 /* AddButton(menu,"Set (G4) wire frame",SetWireFrameCbk);*/ 160 AddButton(menu,"Set (G4) reduced wire fram 162 AddButton(menu,"Set (G4) reduced wire frame",SetReducedWireFrameCbk); 161 AddButton(menu,"Set (G4) full wire frame", 163 AddButton(menu,"Set (G4) full wire frame",SetFullWireFrameCbk); 162 AddButton(menu,"Visible mothers + invisibl 164 AddButton(menu,"Visible mothers + invisible daughters",SetPreviewCbk); 163 AddButton(menu,"Visible mothers + visible 165 AddButton(menu,"Visible mothers + visible daughters",SetPreviewAndFullCbk); 164 AddButton(menu,"Update scene",UpdateSceneC 166 AddButton(menu,"Update scene",UpdateSceneCbk); 165 AddButton(menu,"Scene graph stats",SceneGr 167 AddButton(menu,"Scene graph stats",SceneGraphStatisticsCbk); 166 } 168 } 167 169 168 {Widget menu = AddMenu(menuBar,"Help","Help 170 {Widget menu = AddMenu(menuBar,"Help","Help"); 169 AddButton(menu,"Controls",HelpCbk);} 171 AddButton(menu,"Controls",HelpCbk);} 170 172 171 //fViewer = new SoXtExaminerViewer(form,wN 173 //fViewer = new SoXtExaminerViewer(form,wName.c_str(),TRUE); 172 174 173 XtSetArg(args[0],XmNtopAttachment ,XmATT 175 XtSetArg(args[0],XmNtopAttachment ,XmATTACH_WIDGET); 174 XtSetArg(args[1],XmNtopWidget ,menuB 176 XtSetArg(args[1],XmNtopWidget ,menuBar); 175 XtSetArg(args[2],XmNleftAttachment ,XmATT 177 XtSetArg(args[2],XmNleftAttachment ,XmATTACH_FORM); 176 XtSetArg(args[3],XmNrightAttachment ,XmATT 178 XtSetArg(args[3],XmNrightAttachment ,XmATTACH_FORM); 177 XtSetArg(args[4],XmNbottomAttachment,XmATT 179 XtSetArg(args[4],XmNbottomAttachment,XmATTACH_FORM); 178 XtSetValues(fViewer->getWidget(),args,5); 180 XtSetValues(fViewer->getWidget(),args,5); 179 181 180 fHelpForm = XmCreateFormDialog(fShell,(cha 182 fHelpForm = XmCreateFormDialog(fShell,(char*)"help",NULL,0); 181 XtSetArg(args[0],XmNleftAttachment ,XmATT 183 XtSetArg(args[0],XmNleftAttachment ,XmATTACH_FORM); 182 XtSetArg(args[1],XmNrightAttachment ,XmATT 184 XtSetArg(args[1],XmNrightAttachment ,XmATTACH_FORM); 183 XtSetArg(args[2],XmNbottomAttachment,XmATT 185 XtSetArg(args[2],XmNbottomAttachment,XmATTACH_FORM); 184 Widget cancel = XmCreatePushButton(fHelpFo 186 Widget cancel = XmCreatePushButton(fHelpForm,(char*)"helpCancel",args,3); 185 XtAddCallback(cancel,XmNactivateCallback,H 187 XtAddCallback(cancel,XmNactivateCallback,HelpCancelCbk,(XtPointer)this); 186 XtManageChild(cancel); 188 XtManageChild(cancel); 187 XtSetArg(args[0],XmNtopAttachment ,XmATT 189 XtSetArg(args[0],XmNtopAttachment ,XmATTACH_FORM); 188 XtSetArg(args[1],XmNleftAttachment ,XmATT 190 XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); 189 XtSetArg(args[2],XmNrightAttachment ,XmATT 191 XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); 190 XtSetArg(args[3],XmNbottomAttachment,XmATT 192 XtSetArg(args[3],XmNbottomAttachment,XmATTACH_WIDGET); 191 XtSetArg(args[4],XmNbottomWidget ,cance 193 XtSetArg(args[4],XmNbottomWidget ,cancel); 192 fHelpText = XmCreateScrolledText(fHelpForm 194 fHelpText = XmCreateScrolledText(fHelpForm,(char*)"helpText",args,5); 193 XtManageChild(fHelpText); 195 XtManageChild(fHelpText); 194 196 195 fInteractorManager->AddShell(fShell); 197 fInteractorManager->AddShell(fShell); 196 198 197 } else { 199 } else { 198 char* str = fInteractorManager->GetCreatio 200 char* str = fInteractorManager->GetCreationString(); 199 if(str!=0) wName = str; 201 if(str!=0) wName = str; 200 // G4cout << "DEBUG CREATING THE VIEWER WI 202 // G4cout << "DEBUG CREATING THE VIEWER WITH parent = " << parent << G4endl; 201 fViewer = new G4OpenInventorXtExaminerView 203 fViewer = new G4OpenInventorXtExaminerViewer(parent, wName.c_str(), TRUE); 202 } 204 } 203 205 204 // Use our own SelectionCB for the Xt viewer 206 // Use our own SelectionCB for the Xt viewer to allow for abbreviated output 205 // when picking a trajectory 207 // when picking a trajectory 206 fSoSelection->removeSelectionCallback(G4Open 208 fSoSelection->removeSelectionCallback(G4OpenInventorViewer::SelectionCB, 207 this); 209 this); 208 // fSoSelection->addSelectionCallback(Selecti 210 // fSoSelection->addSelectionCallback(SelectionCB, this); 209 211 210 fViewer->setSize(SbVec2s(width,height)); 212 fViewer->setSize(SbVec2s(width,height)); 211 213 212 // Have a GL2PS render action : 214 // Have a GL2PS render action : 213 const SbViewportRegion& vpRegion = fViewer-> 215 const SbViewportRegion& vpRegion = fViewer->getViewportRegion(); 214 fGL2PSAction = new SoGL2PSAction(vpRegion); 216 fGL2PSAction = new SoGL2PSAction(vpRegion); 215 fViewer->setGLRenderAction(fGL2PSAction); 217 fViewer->setGLRenderAction(fGL2PSAction); 216 218 217 // Else : 219 // Else : 218 fViewer->setSceneGraph(fSoSelection); 220 fViewer->setSceneGraph(fSoSelection); 219 fViewer->viewAll(); 221 fViewer->viewAll(); 220 fViewer->saveHomePosition(); 222 fViewer->saveHomePosition(); 221 fViewer->setTitle(fName); 223 fViewer->setTitle(fName); 222 fViewer->show(); 224 fViewer->show(); 223 if(fShell) { 225 if(fShell) { 224 SoXt::show(fShell); 226 SoXt::show(fShell); 225 fInteractorManager->FlushAndWaitExecution 227 fInteractorManager->FlushAndWaitExecution (); 226 } 228 } 227 fInteractorManager->SetCreatedInteractor (fV 229 fInteractorManager->SetCreatedInteractor (fViewer -> getWidget()); 228 // TJR added: 230 // TJR added: 229 fViewer->setTransparencyType(SoGLRenderActio 231 fViewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_ADD); 230 } 232 } 231 233 232 G4OpenInventorXtExtendedViewer::~G4OpenInvento 234 G4OpenInventorXtExtendedViewer::~G4OpenInventorXtExtendedViewer () { 233 if(fShell) fInteractorManager->RemoveShell(f 235 if(fShell) fInteractorManager->RemoveShell(fShell); 234 if(fViewer) { 236 if(fViewer) { 235 fViewer->setSceneGraph(0); 237 fViewer->setSceneGraph(0); 236 //FIXME : SGI : the below "delete" block t 238 //FIXME : SGI : the below "delete" block things. 237 //FIXME : CoinXt : the below "delete" cras 239 //FIXME : CoinXt : the below "delete" crashe in ~SoXtRenderArea. 238 //FIXME : delete fViewer; 240 //FIXME : delete fViewer; 239 } 241 } 240 if(fShell) XtDestroyWidget(fShell); 242 if(fShell) XtDestroyWidget(fShell); 241 } 243 } 242 244 243 void G4OpenInventorXtExtendedViewer::FinishVie 245 void G4OpenInventorXtExtendedViewer::FinishView () { 244 if(!fViewer) return; 246 if(!fViewer) return; 245 fViewer->viewAll(); 247 fViewer->viewAll(); 246 fViewer->saveHomePosition(); 248 fViewer->saveHomePosition(); 247 } 249 } 248 250 249 void G4OpenInventorXtExtendedViewer::SetView ( 251 void G4OpenInventorXtExtendedViewer::SetView () { 250 G4OpenInventorViewer::SetView (); 252 G4OpenInventorViewer::SetView (); 251 if(!fViewer) return; 253 if(!fViewer) return; 252 // Background. 254 // Background. 253 G4Colour b = fVP.GetBackgroundColour (); 255 G4Colour b = fVP.GetBackgroundColour (); 254 fViewer->setBackgroundColor 256 fViewer->setBackgroundColor 255 (SbColor((float)b.GetRed(),(float)b.GetGre 257 (SbColor((float)b.GetRed(),(float)b.GetGreen(),(float)b.GetBlue())); 256 } 258 } 257 259 258 260 259 void G4OpenInventorXtExtendedViewer::ViewerRen 261 void G4OpenInventorXtExtendedViewer::ViewerRender () { 260 if(!fViewer) return; 262 if(!fViewer) return; 261 fViewer->render(); 263 fViewer->render(); 262 } 264 } 263 265 264 SoCamera* G4OpenInventorXtExtendedViewer::GetC 266 SoCamera* G4OpenInventorXtExtendedViewer::GetCamera () { 265 if(!fViewer) return 0; 267 if(!fViewer) return 0; 266 return fViewer->getCamera(); 268 return fViewer->getCamera(); 267 } 269 } 268 270 269 Widget G4OpenInventorXtExtendedViewer::AddMenu 271 Widget G4OpenInventorXtExtendedViewer::AddMenu( 270 Widget aMenuBar 272 Widget aMenuBar 271 ,const G4String& aName 273 ,const G4String& aName 272 ,const G4String& aLabel 274 ,const G4String& aLabel 273 ) 275 ) 274 { 276 { 275 // Pulldown menu : 277 // Pulldown menu : 276 Widget menu = XmCreatePulldownMenu(aMenuBar, 278 Widget menu = XmCreatePulldownMenu(aMenuBar,(char*)aName.c_str(),NULL,0); 277 // Cascade button : 279 // Cascade button : 278 Arg args[2]; 280 Arg args[2]; 279 XmString cps = 281 XmString cps = 280 XmStringLtoRCreate((char*)aLabel.c_str(),( 282 XmStringLtoRCreate((char*)aLabel.c_str(),(char*)XmSTRING_DEFAULT_CHARSET); 281 XtSetArg (args[0],XmNlabelString,cps); 283 XtSetArg (args[0],XmNlabelString,cps); 282 XtSetArg (args[1],XmNsubMenuId,menu); 284 XtSetArg (args[1],XmNsubMenuId,menu); 283 Widget widget = XmCreateCascadeButton(aMenuB 285 Widget widget = XmCreateCascadeButton(aMenuBar,(char*)aName.c_str(),args,2); 284 XmStringFree (cps); 286 XmStringFree (cps); 285 XtManageChild(widget); 287 XtManageChild(widget); 286 return menu; 288 return menu; 287 } 289 } 288 void G4OpenInventorXtExtendedViewer::AddButton 290 void G4OpenInventorXtExtendedViewer::AddButton ( 289 Widget aMenu 291 Widget aMenu 290 ,const G4String& aLabel 292 ,const G4String& aLabel 291 ,XtCallbackProc aCallback 293 ,XtCallbackProc aCallback 292 ) 294 ) 293 { 295 { 294 Widget widget = XmCreatePushButton(aMenu,(ch 296 Widget widget = XmCreatePushButton(aMenu,(char*)aLabel.c_str(),NULL,0); 295 XtManageChild(widget); 297 XtManageChild(widget); 296 XtAddCallback(widget,XmNactivateCallback,aCa 298 XtAddCallback(widget,XmNactivateCallback,aCallback,(XtPointer)this); 297 } 299 } 298 300 299 void G4OpenInventorXtExtendedViewer::HelpCance 301 void G4OpenInventorXtExtendedViewer::HelpCancelCbk( 300 Widget,XtPointer aData,XtPointer) { 302 Widget,XtPointer aData,XtPointer) { 301 G4OpenInventorXtExtendedViewer* This = (G4Op 303 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 302 XtUnmanageChild(This->fHelpForm); 304 XtUnmanageChild(This->fHelpForm); 303 } 305 } 304 306 305 307 306 ////////////////////////////////////////////// 308 ////////////////////////////////////////////////////////////////////////////// 307 ////////////////////////////////////////////// 309 ////////////////////////////////////////////////////////////////////////////// 308 ////////////////////////////////////////////// 310 ////////////////////////////////////////////////////////////////////////////// 309 311 310 void G4OpenInventorXtExtendedViewer::EscapeCbk 312 void G4OpenInventorXtExtendedViewer::EscapeCbk( 311 Widget,XtPointer aData,XtPointer) { 313 Widget,XtPointer aData,XtPointer) { 312 G4OpenInventorXtExtendedViewer* This = (G4Op 314 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 313 This->Escape(); 315 This->Escape(); 314 } 316 } 315 317 316 // Allow escape from X event loop via key 318 // Allow escape from X event loop via key 317 void G4OpenInventorXtExtendedViewer::EscapeFro 319 void G4OpenInventorXtExtendedViewer::EscapeFromKeyboardCbk(void* o) { 318 G4OpenInventorXtExtendedViewer* This = (G4Op 320 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)o; 319 This->Escape(); 321 This->Escape(); 320 } 322 } 321 323 322 void G4OpenInventorXtExtendedViewer::PostScrip 324 void G4OpenInventorXtExtendedViewer::PostScriptCbk( 323 Widget,XtPointer aData,XtPointer) { 325 Widget,XtPointer aData,XtPointer) { 324 G4OpenInventorXtExtendedViewer* This = (G4Op 326 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 325 // FWJ Workaround: avoids empty 2nd page in 327 // FWJ Workaround: avoids empty 2nd page in file 326 SbBool superimpState = 328 SbBool superimpState = 327 This->fViewer->getSuperimpositionEnabled( 329 This->fViewer->getSuperimpositionEnabled(This->fViewer->superimposition); 328 This->fViewer->setSuperimpositionEnabled(Thi 330 This->fViewer->setSuperimpositionEnabled(This->fViewer->superimposition, 329 FAL 331 FALSE); 330 This->WritePostScript(); 332 This->WritePostScript(); 331 if (superimpState) 333 if (superimpState) 332 This->fViewer->setSuperimpositionEnabled( 334 This->fViewer->setSuperimpositionEnabled(This->fViewer->superimposition, 333 335 TRUE); 334 } 336 } 335 void G4OpenInventorXtExtendedViewer::PDFCbk( 337 void G4OpenInventorXtExtendedViewer::PDFCbk( 336 Widget,XtPointer aData,XtPointer) { 338 Widget,XtPointer aData,XtPointer) { 337 G4OpenInventorXtExtendedViewer* This = (G4Op 339 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 338 // FWJ Workaround: avoids empty 2nd page in 340 // FWJ Workaround: avoids empty 2nd page in file 339 SbBool superimpState = 341 SbBool superimpState = 340 This->fViewer->getSuperimpositionEnabled( 342 This->fViewer->getSuperimpositionEnabled(This->fViewer->superimposition); 341 This->fViewer->setSuperimpositionEnabled(Thi 343 This->fViewer->setSuperimpositionEnabled(This->fViewer->superimposition, 342 FAL 344 FALSE); 343 This->WritePDF(); 345 This->WritePDF(); 344 if (superimpState) 346 if (superimpState) 345 This->fViewer->setSuperimpositionEnabled( 347 This->fViewer->setSuperimpositionEnabled(This->fViewer->superimposition, 346 348 TRUE); 347 } 349 } 348 350 349 void G4OpenInventorXtExtendedViewer::PixmapPos 351 void G4OpenInventorXtExtendedViewer::PixmapPostScriptCbk( 350 Widget,XtPointer aData,XtPointer) { 352 Widget,XtPointer aData,XtPointer) { 351 G4OpenInventorXtExtendedViewer* This = (G4Op 353 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 352 This->WritePixmapPostScript(); 354 This->WritePixmapPostScript(); 353 } 355 } 354 356 355 void G4OpenInventorXtExtendedViewer::SceneGrap 357 void G4OpenInventorXtExtendedViewer::SceneGraphStatisticsCbk( 356 Widget,XtPointer aData,XtPointer) { 358 Widget,XtPointer aData,XtPointer) { 357 G4OpenInventorXtExtendedViewer* This = (G4Op 359 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 358 This->SceneGraphStatistics(); 360 This->SceneGraphStatistics(); 359 } 361 } 360 362 361 void G4OpenInventorXtExtendedViewer::WriteInve 363 void G4OpenInventorXtExtendedViewer::WriteInventorCbk( 362 Widget,XtPointer aData,XtPointer) { 364 Widget,XtPointer aData,XtPointer) { 363 G4OpenInventorXtExtendedViewer* This = (G4Op 365 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 364 This->WriteInventor(); 366 This->WriteInventor(); 365 } 367 } 366 368 367 void G4OpenInventorXtExtendedViewer::EraseDete 369 void G4OpenInventorXtExtendedViewer::EraseDetectorCbk( 368 Widget,XtPointer aData,XtPointer) { 370 Widget,XtPointer aData,XtPointer) { 369 G4OpenInventorXtExtendedViewer* This = (G4Op 371 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 370 This->EraseDetector(); 372 This->EraseDetector(); 371 } 373 } 372 374 373 void G4OpenInventorXtExtendedViewer::EraseEven 375 void G4OpenInventorXtExtendedViewer::EraseEventCbk( 374 Widget,XtPointer aData,XtPointer) { 376 Widget,XtPointer aData,XtPointer) { 375 G4OpenInventorXtExtendedViewer* This = (G4Op 377 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 376 This->EraseEvent(); 378 This->EraseEvent(); 377 } 379 } 378 380 379 void G4OpenInventorXtExtendedViewer::SetSolidC 381 void G4OpenInventorXtExtendedViewer::SetSolidCbk( 380 Widget,XtPointer aData,XtPointer) { 382 Widget,XtPointer aData,XtPointer) { 381 G4OpenInventorXtExtendedViewer* This = (G4Op 383 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 382 This->SetSolid(); 384 This->SetSolid(); 383 } 385 } 384 386 385 void G4OpenInventorXtExtendedViewer::SetWireFr 387 void G4OpenInventorXtExtendedViewer::SetWireFrameCbk( 386 Widget,XtPointer aData,XtPointer) { 388 Widget,XtPointer aData,XtPointer) { 387 G4OpenInventorXtExtendedViewer* This = (G4Op 389 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 388 This->SetWireFrame(); 390 This->SetWireFrame(); 389 } 391 } 390 392 391 void G4OpenInventorXtExtendedViewer::SetReduce 393 void G4OpenInventorXtExtendedViewer::SetReducedWireFrameCbk( 392 Widget,XtPointer aData,XtPointer) { 394 Widget,XtPointer aData,XtPointer) { 393 G4OpenInventorXtExtendedViewer* This = (G4Op 395 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 394 This->SetReducedWireFrame(true); 396 This->SetReducedWireFrame(true); 395 } 397 } 396 398 397 void G4OpenInventorXtExtendedViewer::SetFullWi 399 void G4OpenInventorXtExtendedViewer::SetFullWireFrameCbk( 398 Widget,XtPointer aData,XtPointer) { 400 Widget,XtPointer aData,XtPointer) { 399 G4OpenInventorXtExtendedViewer* This = (G4Op 401 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 400 This->SetReducedWireFrame(false); 402 This->SetReducedWireFrame(false); 401 } 403 } 402 404 403 void G4OpenInventorXtExtendedViewer::UpdateSce 405 void G4OpenInventorXtExtendedViewer::UpdateSceneCbk( 404 Widget,XtPointer aData,XtPointer) { 406 Widget,XtPointer aData,XtPointer) { 405 G4OpenInventorXtExtendedViewer* This = (G4Op 407 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 406 This->UpdateScene(); 408 This->UpdateScene(); 407 } 409 } 408 410 409 void G4OpenInventorXtExtendedViewer::SetPrevie 411 void G4OpenInventorXtExtendedViewer::SetPreviewCbk( 410 Widget,XtPointer aData,XtPointer) { 412 Widget,XtPointer aData,XtPointer) { 411 G4OpenInventorXtExtendedViewer* This = (G4Op 413 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 412 This->SetPreview(); 414 This->SetPreview(); 413 } 415 } 414 416 415 void G4OpenInventorXtExtendedViewer::SetPrevie 417 void G4OpenInventorXtExtendedViewer::SetPreviewAndFullCbk( 416 Widget,XtPointer aData,XtPointer) { 418 Widget,XtPointer aData,XtPointer) { 417 G4OpenInventorXtExtendedViewer* This = (G4Op 419 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 418 This->SetPreviewAndFull(); 420 This->SetPreviewAndFull(); 419 } 421 } 420 422 421 void G4OpenInventorXtExtendedViewer::HelpCbk( 423 void G4OpenInventorXtExtendedViewer::HelpCbk( 422 Widget,XtPointer aData,XtPointer) { 424 Widget,XtPointer aData,XtPointer) { 423 G4OpenInventorXtExtendedViewer* This = (G4Op 425 G4OpenInventorXtExtendedViewer* This = (G4OpenInventorXtExtendedViewer*)aData; 424 XtManageChild(This->fHelpForm); 426 XtManageChild(This->fHelpForm); 425 XmTextSetString(This->fHelpText,(char*)This- 427 XmTextSetString(This->fHelpText,(char*)This->Help().c_str()); 426 } 428 } >> 429 >> 430 #endif 427 431