Files
geant4/source/visualization/management/src/G4VisManMessCreateView.cc
T
2016-06-01 15:25:35 +02:00

154 lines
5.0 KiB
C++

// This code implementation is the intellectual property of
// the RD44 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: G4VisManMessCreateView.cc,v 2.4 1998/07/13 17:12:31 urbi Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
// GEANT4 Visualization Manager Messenger - John Allison 22nd July 1996.
// Create View sub-menu.
#include "G4VisManMessenger.hh"
#include "G4VisManager.hh"
#include "G4UImanager.hh"
#include "G4UIcommand.hh"
#include "G4UIparameter.hh"
#include "G4ios.hh"
#include <string.h>
void G4VisManMessenger::AddCommandCreateView () {
G4UIcommand* command;
G4UIparameter* param;
/////////////////// /vis~/create_view/new_graphics_system /////
//cr_vw \hline
//cr_vw /vis~/create\_view/ new\_graphics\_system & choice &
//cr_vw Creates a new scene and a new view of a new graphics system; all
//cr_vw become current. \\%
command = new G4UIcommand ("/vis~/create_view/new_graphics_system", this);
command -> SetGuidance
(
"Creates a new scene and a new view of a new graphics system; all "
"become current."
);
param = new G4UIparameter ("Graphics system selector", 's', true);
param -> SetDefaultValue ("none");
const G4GraphicsSystemList& gslist =
fpVMan -> GetAvailableGraphicsSystems ();
G4String candidates;
for (int igslist = 0; igslist < gslist.entries (); igslist++) {
G4String nickname = gslist (igslist) -> GetNickname ();
if (nickname . length () > 0) {
candidates += nickname;
}
else {
candidates += gslist (igslist) -> GetName ();
}
candidates += " ";
}
param -> SetParameterCandidates(candidates);
command -> SetParameter (param);
fCommandList.append (command);
}
void G4VisManMessenger::DoCommandCreateView (const G4String& commandPath,
G4String& newValues) {
/////////////////// /vis~/create_view/new_graphics_system /////
if (commandPath == "/vis~/create_view/new_graphics_system") {
G4String selector;
const char* aString = newValues;
istrstream is ((char*) aString) ; is >> selector;
const G4GraphicsSystemList& gsl = fpVMan -> GetAvailableGraphicsSystems ();
int nSystems = gsl.entries ();
if (nSystems > 0) {
int iGS; // Selector index.
for (iGS = 0; iGS < nSystems; iGS++) {
if (selector.compareTo (gsl [iGS] -> GetName (),
RWCString::ignoreCase) == 0 ||
selector.compareTo (gsl [iGS] -> GetNickname (),
RWCString::ignoreCase) == 0) {
break; // Match found.
}
}
if (iGS < 0 || iGS >= nSystems) {
// Invalid command line argument or non. Print available systems.
G4bool help;
if (selector.compareTo ("help", RWCString::ignoreCase) == 0 ||
selector.compareTo ("info", RWCString::ignoreCase) == 0)
help = true;
else help = false;
int maxNameLength = strlen ("class name");
int nameLength;
int maxNicknameLength = strlen ("nickname");
int nicknameLength;
int igs;
for (igs = 0; igs < nSystems; igs++) {
nameLength = strlen (gsl [igs] -> GetName ());
if (maxNameLength < nameLength) maxNameLength = nameLength;
nicknameLength = strlen (gsl [igs] -> GetNickname ());
if (maxNicknameLength < nicknameLength)
maxNicknameLength = nicknameLength;
}
G4String className, nickname, description;
className = "class name";
int i;
for (i = className.length (); i < maxNameLength; i++)
className = className + " ";
G4cout << "Available graphics systems:\n " << className
<< "nickname";
className = "Help";
for (i = className.length (); i < maxNameLength; i++)
className = className + " ";
if (help) G4cout << '\n';
G4cout << "\n " << className << " info for more information";
for (igs = 0; igs < nSystems; igs++) {
className = gsl [igs] -> GetName ();
for (i = className.length (); i < maxNameLength; i++)
className = className + " ";
if (help) G4cout << '\n';
G4cout << "\n " << className;
nickname = gsl [igs] -> GetNickname ();
for (i = nickname.length (); i < maxNameLength; i++)
nickname = nickname + " ";
G4cout << " " << nickname;
if (help) {
description = gsl [igs] -> GetDescription ();
if (description != "") {
size_t index = 0;
while ((index = description.index ('\n', ++index)) != RW_NPOS) {
description.replace (index, 1, "\n ");
}
G4cout << "\n " << description;
}
}
}
if (nSystems == 1) iGS = 0; // Only one system - create view anyway.
else {
G4cout <<
"\nChoose by specifying class name or nickname, if any, or help.";
}
G4cout << endl;
}
if (iGS >=0 && iGS < nSystems) {
// Valid index. Create view.
G4VGraphicsSystem* pSystem = gsl [iGS];;
fpVMan -> SetCurrentGraphicsSystemAndCreateView (pSystem);
if (fpVMan -> GetVerboseLevel () > 0) {
G4cout << "Graphics system set to " << pSystem -> GetName () << endl;
if (fpVMan -> GetVerboseLevel () > 1) {
fpVMan -> PrintCurrentSystem ();
}
}
}
}
}
}