32#include <tools/tokenize>
35 static G4PlotterManager s_instance;
39G4PlotterManager::G4PlotterManager():fMessenger(0) {
40 fMessenger =
new Messenger(*
this);
43G4PlotterManager::~G4PlotterManager() {
48 for(
auto& plotter : fPlotters) {
49 if(plotter.first == a_name) {
50 return plotter.second;
53 fPlotters.push_back(NamedPlotter(a_name,
G4Plotter()));
54 return fPlotters.back().second;
58 for(
const auto& plotter : fPlotters) {
67void G4PlotterManager::ListStyles()
const {
68 for(
const auto& style : fStyles) {
74 for(
auto& style : fStyles) {
75 if(
style.first == a_name)
return &
style.second;
80void G4PlotterManager::SelectStyle(
const G4String& a_name) {
81 if(!FindStyle(a_name)) {
84 fCurrentStyle = a_name;
87void G4PlotterManager::RemoveStyle(
const G4String& a_name) {
88 for (
auto it = fStyles.begin(); it != fStyles.end(); ++it) {
89 if (it->first == a_name) {
91 if (fCurrentStyle == a_name) fCurrentStyle.clear();
97void G4PlotterManager::PrintStyle(
const G4String& a_name)
const {
98 for(
const auto& style : fStyles) {
99 if(
style.first == a_name) {
101 for(
const auto& item :
style.second) {
102 G4cout <<
" " << item.first <<
" " << item.second <<
G4endl;
108void G4PlotterManager::AddStyleParameter(
const G4String& a_parameter,
const G4String& a_value) {
109 Style* _style = FindStyle(fCurrentStyle);
111 G4cout <<
"G4PlotterManager::AddStyleParameter: style " << fCurrentStyle <<
" not found." <<
G4endl;
114 for(
auto& item : *_style) {
115 if(item.first == a_parameter) {
116 item.second = a_value;
120 _style->push_back(
StyleItem(a_parameter,a_value));
124 std::vector<std::string> args;
125 tools::double_quotes_tokenize(a_value,args);
127 if(a_cmd==select_style) {
128 fPlotterManager.SelectStyle(args[0]);
129 }
else if(a_cmd==add_style_parameter) {
130 fPlotterManager.AddStyleParameter(args[0],args[1]);
131 }
else if(a_cmd==remove_style) {
132 fPlotterManager.RemoveStyle(args[0]);
133 }
else if(a_cmd==list_styles) {
137 fPlotterManager.ListStyles();
138 }
else if(a_cmd==print_style) {
139 fPlotterManager.PrintStyle(args[0]);
G4GLOB_DLL std::ostream G4cout
G4Plotter & GetPlotter(const G4String &a_name)
std::pair< G4String, Style > NamedStyle
std::vector< StyleItem > Style
std::pair< G4String, G4String > StyleItem
static G4PlotterManager & GetInstance()
std::size_t GetParameterEntries() const