17 #include "vtkObjectFactory.h"
21 #include <vtksys/CommandLineArguments.hxx>
22 #include <vtksys/SystemTools.hxx>
26 class vtkCommandOptionsInternal
29 vtksys::CommandLineArguments CMD;
42 this->Internals =
new vtkCommandOptionsInternal();
43 this->Internals->CMD.SetUnknownArgumentCallback(vtkCommandOptions::UnknownArgumentHandler);
44 this->Internals->CMD.SetClientData(
this);
45 this->UnknownArgument = 0;
46 this->HelpSelected = 0;
48 this->ErrorMessage = 0;
51 this->ApplicationPath = 0;
53 this->XMLConfigFile = 0;
62 this->SetXMLConfigFile(
nullptr);
65 this->SetUnknownArgument(
nullptr);
66 this->SetErrorMessage(
nullptr);
68 delete this->Internals;
70 this->SetApplicationPath(
nullptr);
82 int width = vtksys::SystemTools::GetTerminalWidth();
88 this->Internals->CMD.SetLineLength(
width);
89 this->Internals->CMD.SetLineLength(300);
91 return this->Internals->CMD.GetHelp();
109 if (this->XMLConfigFile && strcmp(argument, this->XMLConfigFile) == 0)
113 if (this->UnknownArgument && (strcmp(this->UnknownArgument, this->XMLConfigFile) == 0))
115 this->SetUnknownArgument(0);
126 return this->Internals->CMD.GetArgv0();
134 this->SetXMLConfigFile(fname);
141 this->Internals->CMD.Initialize(argc, argv);
147 for (
int i = 0; i < argc; ++i)
149 std::string arg = argv[i];
150 if (arg.size() > 4 && arg.find(
".pvx") == (arg.size() - 4))
159 int res1 = this->Internals->CMD.Parse();
163 this->Internals->CMD.GetRemainingArguments(&this->Argc, &this->Argv);
175 for (cc = 0; cc < this->Argc; cc++)
177 delete[] this->Argv[cc];
185 const char* longarg,
const char* shortarg,
const char* help,
int type)
193 this->Internals->CMD.AddCallback(longarg, vtksys::CommandLineArguments::NO_ARGUMENT,
194 vtkCommandOptions::DeprecatedArgumentHandler,
this, help);
197 this->Internals->CMD.AddCallback(shortarg, vtksys::CommandLineArguments::NO_ARGUMENT,
198 vtkCommandOptions::DeprecatedArgumentHandler,
this, help);
205 std::ostringstream str;
206 str <<
" " << this->Internals->CMD.GetHelp(argument);
208 this->SetErrorMessage(str.str().c_str());
214 const char* longarg,
const char* shortarg,
int* var,
const char* help,
int type)
225 this->Internals->CMD.AddBooleanArgument(longarg, var, help);
228 this->Internals->CMD.AddBooleanArgument(shortarg, var, longarg);
235 const char* longarg,
const char* shortarg,
int* var,
const char* help,
int type)
244 typedef vtksys::CommandLineArguments argT;
245 this->Internals->CMD.AddArgument(longarg, argT::EQUAL_ARGUMENT, var, help);
248 this->Internals->CMD.AddArgument(shortarg, argT::EQUAL_ARGUMENT, var, longarg);
255 const char* longarg,
const char* shortarg,
char** var,
const char* help,
int type)
264 typedef vtksys::CommandLineArguments argT;
265 this->Internals->CMD.AddArgument(longarg, argT::EQUAL_ARGUMENT, var, help);
268 this->Internals->CMD.AddArgument(shortarg, argT::EQUAL_ARGUMENT, var, longarg);
279 vtkErrorMacro(
"Callback arguments cannot be processed through XML.");
285 typedef vtksys::CommandLineArguments argT;
286 this->Internals->CMD.AddCallback(longarg, argT::EQUAL_ARGUMENT,
callback, call_data, help);
289 this->Internals->CMD.AddCallback(
290 shortarg, argT::EQUAL_ARGUMENT,
callback, call_data, longarg);
296 int vtkCommandOptions::UnknownArgumentHandler(
const char* argument,
void* call_data)
301 self->SetUnknownArgument(argument);
308 int vtkCommandOptions::DeprecatedArgumentHandler(
const char* argument,
const char*,
void* call_data)
329 return this->Internals->CMD.GetLastArgument();
335 this->SetApplicationPath(
nullptr);
337 std::string argv0 = this->
GetArgv0();
340 if (argv0.rfind(
'/') != std::string::npos || argv0.rfind(
'\\') != std::string::npos)
343 argv0 = vtksys::SystemTools::CollapseFullPath(argv0.c_str());
348 argv0 = vtksys::SystemTools::FindProgram(argv0.c_str()).c_str();
350 this->SetApplicationPath(argv0.c_str());
357 this->Superclass::PrintSelf(os, indent);
358 os << indent <<
"XMLConfigFile: " << (this->XMLConfigFile ? this->XMLConfigFile :
"(none)")
360 os << indent <<
"UnknownArgument: " << (this->UnknownArgument ? this->UnknownArgument :
"(none)")
362 os << indent <<
"ErrorMessage: " << (this->ErrorMessage ? this->ErrorMessage :
"(none)") <<
endl;
363 os << indent <<
"HelpSelected: " << this->HelpSelected <<
endl;
364 os << indent <<
"ApplicationPath: " << (this->ApplicationPath ? this->ApplicationPath :
"(none)")
std::function< void(std::shared_ptr< core::Tensor >)> callback
void AddArgument(const char *longarg, int *var, int type=0)
void AddBooleanArgument(const char *longarg, int *var, int type=0)
void SetPVOptions(vtkCommandOptions *o)
static vtkCommandOptionsXMLParser * New()
virtual int PostProcess(int argc, const char *const *argv)
virtual int DeprecatedArgument(const char *argument)
void PrintSelf(ostream &os, vtkIndent indent) override
void AddBooleanArgument(const char *longarg, const char *shortarg, int *var, const char *help, int type=EVERYBODY)
void AddCallback(const char *longarg, const char *shortarg, CallbackType callback, void *call_data, const char *help, int type=EVERYBODY)
void AddDeprecatedArgument(const char *longarg, const char *shortarg, const char *help, int type=EVERYBODY)
int LoadXMLConfigFile(const char *)
vtkCommandOptionsXMLParser * XMLParser
~vtkCommandOptions() override
void AddArgument(const char *longarg, const char *shortarg, int *var, const char *help, int type=EVERYBODY)
void GetRemainingArguments(int *argc, char **argv[])
int(* CallbackType)(const char *argument, const char *value, void *call_data)
virtual void Initialize()
void ComputeApplicationPath()
int Parse(int argc, const char *const argv[])
virtual int WrongArgument(const char *argument)
QTextStream & endl(QTextStream &stream)
vtkStandardNewMacro(vtkCommandOptions)