// This code implementation is the intellectual property of // the GEANT4 collaboration. // // By copying, distributing or modifying the Program (or any work // based on the Program) you indicate your acceptance of this statement, // and all its terms. // // $Id: G4oCommon.icc,v 1.2.6.1 1999/12/07 20:46:50 gunter Exp $ // GEANT4 tag $Name: geant4-01-01 $ // /* Included by G4o.cc. */ /***************************************************************************/ void SetTypes ( ) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { OType otype; /*.........................................................................*/ if(OTypeGetIdentifier("G4")!=NULL) return; /*Done*/ otype = OTypeCreate ("G4"); OTypeSetDoMethodFunction (otype,DoMethod); OTypeAddNewClassMethodProperty (otype,"getCommandGuidance" ,OPropertyString,NULL); OTypeAddNewClassMethodProperty (otype,"askListOfCommands" ,OPropertyString,NULL); OTypeAddNewClassMethodProperty (otype,"createCommandPanel" ,OPropertyVoid,NULL); } /***************************************************************************/ int Execute_G4 ( int a_argn ,char** a_args ,OProcess a_process ) /***************************************************************************/ /* osh> G4 ... */ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { int count; char* string = NULL; /*.........................................................................*/ if(a_argn<=1) { CWarnF ("At least one argument expected in:\n%s\n",OProcessGetCommand(a_process)); return EXIT_FAILURE; } for(count=1;countApplyCommand(lines[count]); } } CTextDelete (linen,lines); } /***************************************************************************/ int DoMethod ( OIdentifier This ,char* a_name ,void* a_user ,int a_argn ,char** a_args ,void* a_addr ,int* a_number ) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { /*.........................................................................*/ if(a_number!=NULL) *a_number = 0; if(a_name==NULL) return 0; if(This==NULL) { if(strcmp(a_name,"getCommandGuidance")==0) { G4UIcommand* command; char* string = NULL; int count,linen,paramn; if(a_argn!=1) { CWarnF ("One arguments expected for %s property.\n",a_name); return 0; } command = GetCommandIdentifier(a_args[0]); if(command==NULL) { CWarnF ("Unknown G4 command :\n%s\n",a_args[0]); return 0; } linen = command->GetGuidanceEntries(); for(count=0;countGetGuidanceLine(count).data()); CStringConcatenate (&string,"\n"); } paramn = command->GetParameterEntries(); for(count=0;countGetParameter(count); info = (char*)parameter->GetParameterName().data(); line = CStringCreateF(12+strlen(info)+1,"Parameter : %s\n",info); CStringConcatenate (&string,line); CStringDelete (line); if( ! parameter->GetParameterGuidance().isNull() ) { CStringConcatenate (&string,(char*)parameter->GetParameterGuidance().data()); CStringConcatenate (&string,"\n"); } line = CStringCreateF(19+1+1," Parameter type : %c\n",parameter->GetParameterType()); CStringConcatenate (&string,line); CStringDelete (line); if(parameter->IsOmittable()==TRUE) line = CStringDuplicate(" Omittable : true\n"); else line = CStringDuplicate(" Omittable : false\n"); CStringConcatenate (&string,line); CStringDelete (line); if( ! parameter->GetDefaultValue().isNull() ) { info = (char*)parameter->GetDefaultValue().data(); line = CStringCreateF(19+strlen(info)+1," Default value : %s\n",info); CStringConcatenate (&string,line); CStringDelete (line); } if( ! parameter->GetParameterRange().isNull() ) { info = (char*)parameter->GetParameterRange().data(); line = CStringCreateF(19+strlen(info)+1," Parameter range : %s\n",info); CStringConcatenate (&string,line); CStringDelete (line); } } *((char**)a_addr) = string; return FREE_BLOCK; } else if(strcmp(a_name,"askListOfCommands")==0) { G4UIcommandTree* treeTop; char* string = NULL; G4UImanager* UI; int linen = 0; char** lines = NULL; UI = G4UImanager::GetUIpointer(); if(UI==NULL) return 0; treeTop = UI->GetTree(); if(treeTop==NULL) return 0; if(a_argn==1) treeTop = treeTop->GetTree(a_args[0]); GetCommands (treeTop,&linen,&lines); string = CTextConvertToString (linen,lines,"\n"); CTextDelete (linen,lines); *((char**)a_addr) = string; return FREE_BLOCK; } else if(strcmp(a_name,"createCommandPanel")==0) { if(a_argn!=2) { CWarnF ("Two arguments expected for %s property.\n",a_name); return 0; } return ProduceODB(GetCommandIdentifier(a_args[0]),a_args[1]); } else { CInfoF ("G4_DoMethod: %s is not a class routine property.\n",a_name); return 0; } } CInfoF ("G4_DoMethod: %s is not a routine property.\n",a_name); a_user = NULL; a_argn = 0; a_args = NULL; a_addr = NULL; return 0; } /***************************************************************************/ void GetCommands ( G4UIcommandTree* a_tree ,int* a_linen ,char*** a_lines ) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { /*.........................................................................*/ if(a_tree==NULL) return; int n_commandEntry = a_tree->GetCommandEntry(); for( int i_thCommand = 1; i_thCommand <= n_commandEntry; i_thCommand++ ) { G4UIcommand* command = a_tree->GetCommand(i_thCommand); CTextAddLine (a_linen,a_lines,(char*)command->GetCommandPath().data()); } int n_treeEntry = a_tree->GetTreeEntry(); for( int i_thTree = 1; i_thTree <= n_treeEntry; i_thTree++ ) { GetCommands (a_tree->GetTree(i_thTree),a_linen,a_lines); } } /***************************************************************************/ G4UIcommand* GetCommandIdentifier ( char* a_name ) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { G4UImanager* UI; G4UIcommandTree* treeTop; /*.........................................................................*/ if(a_name==NULL) return NULL; UI = G4UImanager::GetUIpointer(); if(UI==NULL) return NULL; treeTop = UI->GetTree(); if(treeTop==NULL) return NULL; return treeTop->FindPath(a_name); } /***************************************************************************/ int ProduceODB ( G4UIcommand* a_command ,char* a_name ) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { FILE* file; int paramn,parami; char* top = NULL; /*.........................................................................*/ if(a_command==NULL) return 0; paramn = a_command->GetParameterEntries(); file = CFileOpenForWriting (a_name); if(file==NULL) return 0; fprintf (file,"\ !----------------------------\n\ begin OInterface\n\ prefix = G4Params_\n\ end\n\ !----------------------------\n\ begin OWidget\n\ name = G4Params_palette\n\ type = XmFormDialog\n\ children = G4Params_command\ "); for(parami=0;parami\\\n\ command=`getWidgetResource G4Params_command labelString`\\\n\ echo `do G4 getCommandGuidance $command`\n\ end\n\ ",a_command->GetCommandPath().data()); for(parami=0;paramiGetParameter(parami); fprintf (file,"\ !----------------------------\n\ begin OWidget\n\ name = G4Params_label_%d\n\ type = XmLabel\n\ labelString = %s\n\ createCallback = osh> setWidgetResource `thisWidget` height `getWidgetResource G4Params_text_%d height`\n\ leftAttachment = attach_form\n\ ",parami,parameter->GetParameterName().data(),parami); if(parami==0) { fprintf (file,"\ topAttachment = attach_widget\n\ topWidget = G4Params_command\n\ "); } else { fprintf (file,"\ topAttachment = attach_widget\n\ topWidget = G4Params_text_%d\n\ ",parami-1); } fprintf (file,"\ end\n\ !----------------------------\n\ begin OWidget\n\ name = G4Params_text_%d\n\ type = XmText\n\ leftAttachment = attach_widget\n\ leftWidget = G4Params_label_%d\n\ rightAttachment = attach_form\n\ ",parami,parami); if(parami==0) { fprintf (file,"\ topAttachment = attach_widget\n\ topWidget = G4Params_command\n\ "); } else { fprintf (file,"\ topAttachment = attach_widget\n\ topWidget = G4Params_text_%d\n\ ",parami-1); } if( ! parameter->GetDefaultValue().isNull() ) { fprintf (file,"\ value = %s\n\ ",parameter->GetDefaultValue().data()); } fprintf (file,"\ end\n\ "); } if(paramn>=1) { top = CStringCreateF(14+32,"G4Params_text_%d",paramn-1); } else { top = CStringDuplicate("G4Params_command"); } fprintf (file,"\ !----------------------------\n\ begin OWidget\n\ name = G4Params_ok\n\ type = XmPushButton\n\ labelString = Ok\n\ activateCallback = osh>\\\n\ command=`getWidgetResource G4Params_command labelString`\\\n\ "); for(parami=0;parami\\\n\ command=`getWidgetResource G4Params_command labelString`\\\n\ ",top); for(parami=0;parami unmanageWidget `thisWidgetParent`\n\ bottomAttachment = attach_form\n\ leftAttachment = attach_widget\n\ leftWidget = G4Params_apply\n\ rightAttachment = attach_form\n\ topAttachment = attach_widget\n\ topWidget = %s\n\ end\n\ ",top,top); CStringDelete (top); fclose(file); return 1; }