From b56b819c35843db0d135a5bbbee5fc9916bd06df Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 25 Feb 2013 13:39:07 -0600 Subject: [PATCH] Fixed some formatting. --- libutil/include/cmdutils.h | 326 +++++++++++++++++------------------ libutil/include/userutils.h | 12 +- main.cpp | 335 ++++++++++++++++++------------------ 3 files changed, 339 insertions(+), 334 deletions(-) diff --git a/libutil/include/cmdutils.h b/libutil/include/cmdutils.h index fc1162d9..d75a1773 100644 --- a/libutil/include/cmdutils.h +++ b/libutil/include/cmdutils.h @@ -38,13 +38,13 @@ namespace Commandline { * Specifies how flags are decorated */ enum class FlagStyle { - GNU, /**< --option and -o (GNU Style) */ - Unix, /**< -option and -o (Unix Style) */ - Windows, /**< /option and /o (Windows Style) */ + GNU, /**< --option and -o (GNU Style) */ + Unix, /**< -option and -o (Unix Style) */ + Windows, /**< /option and /o (Windows Style) */ #ifdef Q_OS_WIN32 - Default = Windows + Default = Windows #else - Default = GNU + Default = GNU #endif }; @@ -52,13 +52,13 @@ enum class FlagStyle { * @brief The ArgumentStyle enum */ enum class ArgumentStyle { - Space, /**< --option=value */ - Equals, /**< --option value */ - SpaceAndEquals, /**< --option[= ]value */ + Space, /**< --option=value */ + Equals, /**< --option value */ + SpaceAndEquals, /**< --option[= ]value */ #ifdef Q_OS_WIN32 - Default = Equals + Default = Equals #else - Default = SpaceAndEquals + Default = SpaceAndEquals #endif }; @@ -68,13 +68,13 @@ enum class ArgumentStyle { class ParsingError : public std::exception { public: - ParsingError(const QString &what); - ParsingError(const ParsingError &e); - ~ParsingError() throw() {} - const char *what() const throw(); - QString qwhat() const; + ParsingError(const QString &what); + ParsingError(const ParsingError &e); + ~ParsingError() throw() {} + const char *what() const throw(); + QString qwhat() const; private: - QString m_what; + QString m_what; }; /** @@ -83,154 +83,154 @@ private: class Parser { public: - /** - * @brief Parser constructor - * @param flagStyle the FlagStyle to use in this Parser - * @param argStyle the ArgumentStyle to use in this Parser - */ - Parser(FlagStyle flagStyle=FlagStyle::Default, ArgumentStyle argStyle=ArgumentStyle::Default); - - /** - * @brief set the flag style - * @param style - */ - void setFlagStyle(FlagStyle style); - - /** - * @brief get the flag style - * @return - */ - FlagStyle flagStyle(); - - /** - * @brief set the argument style - * @param style - */ - void setArgumentStyle(ArgumentStyle style); - - /** - * @brief get the argument style - * @return - */ - ArgumentStyle argumentStyle(); - - /** - * @brief define a boolean switch - * @param name the parameter name - * @param def the default value - */ - void addSwitch(QString name, bool def=false); - - /** - * @brief define an option that takes an additional argument - * @param name the parameter name - * @param def the default value - */ - void addOption(QString name, QVariant def=QVariant()); - - /** - * @brief define a positional argument - * @param name the parameter name - * @param required wether this argument is required - * @param def the default value - */ - void addArgument(QString name, bool required=true, QVariant def=QVariant()); - - /** - * @brief adds a flag to an existing parameter - * @param name the (existing) parameter name - * @param flag the flag character - * @see addSwitch addArgument addOption - * Note: any one parameter can only have one flag - */ - void addShortOpt(QString name, QChar flag); - - /** - * @brief adds documentation to a Parameter - * @param name the parameter name - * @param metavar a string to be displayed as placeholder for the value - * @param doc a QString containing the documentation - * Note: on positional arguments, metavar replaces the name as displayed. - * on options , metavar replaces the value placeholder - */ - void addDocumentation(QString name, QString doc, QString metavar=QString()); - - /** - * @brief generate a help message - * @param progName the program name to use in the help message - * @param helpIndent how much the parameter documentation should be indented - * @param flagsInUsage whether we should use flags instead of options in the usage - * @return a help message - */ - QString compileHelp(QString progName, int helpIndent=22, bool flagsInUsage=true); - - /** - * @brief generate a short usage message - * @param progName the program name to use in the usage message - * @param useFlags whether we should use flags instead of options - * @return a usage message - */ - QString compileUsage(QString progName, bool useFlags=true); - - /** - * @brief parse - * @param argv a QStringList containing the program ARGV - * @return a QHash mapping argument names to their values - */ - QHash parse(QStringList argv); - - /** - * @brief clear all definitions - */ - void clear(); - - ~Parser(); - + /** + * @brief Parser constructor + * @param flagStyle the FlagStyle to use in this Parser + * @param argStyle the ArgumentStyle to use in this Parser + */ + Parser(FlagStyle flagStyle=FlagStyle::Default, ArgumentStyle argStyle=ArgumentStyle::Default); + + /** + * @brief set the flag style + * @param style + */ + void setFlagStyle(FlagStyle style); + + /** + * @brief get the flag style + * @return + */ + FlagStyle flagStyle(); + + /** + * @brief set the argument style + * @param style + */ + void setArgumentStyle(ArgumentStyle style); + + /** + * @brief get the argument style + * @return + */ + ArgumentStyle argumentStyle(); + + /** + * @brief define a boolean switch + * @param name the parameter name + * @param def the default value + */ + void addSwitch(QString name, bool def=false); + + /** + * @brief define an option that takes an additional argument + * @param name the parameter name + * @param def the default value + */ + void addOption(QString name, QVariant def=QVariant()); + + /** + * @brief define a positional argument + * @param name the parameter name + * @param required wether this argument is required + * @param def the default value + */ + void addArgument(QString name, bool required=true, QVariant def=QVariant()); + + /** + * @brief adds a flag to an existing parameter + * @param name the (existing) parameter name + * @param flag the flag character + * @see addSwitch addArgument addOption + * Note: any one parameter can only have one flag + */ + void addShortOpt(QString name, QChar flag); + + /** + * @brief adds documentation to a Parameter + * @param name the parameter name + * @param metavar a string to be displayed as placeholder for the value + * @param doc a QString containing the documentation + * Note: on positional arguments, metavar replaces the name as displayed. + * on options , metavar replaces the value placeholder + */ + void addDocumentation(QString name, QString doc, QString metavar=QString()); + + /** + * @brief generate a help message + * @param progName the program name to use in the help message + * @param helpIndent how much the parameter documentation should be indented + * @param flagsInUsage whether we should use flags instead of options in the usage + * @return a help message + */ + QString compileHelp(QString progName, int helpIndent=22, bool flagsInUsage=true); + + /** + * @brief generate a short usage message + * @param progName the program name to use in the usage message + * @param useFlags whether we should use flags instead of options + * @return a usage message + */ + QString compileUsage(QString progName, bool useFlags=true); + + /** + * @brief parse + * @param argv a QStringList containing the program ARGV + * @return a QHash mapping argument names to their values + */ + QHash parse(QStringList argv); + + /** + * @brief clear all definitions + */ + void clear(); + + ~Parser(); + private: - FlagStyle m_flagStyle; - ArgumentStyle m_argStyle; - - enum class OptionType { - Switch, - Option - }; - - // Important: the common part MUST BE COMMON ON ALL THREE structs - struct CommonDef { - QString name; - QString doc; - QString metavar; - QVariant def; - }; - - struct OptionDef { - // common - QString name; - QString doc; - QString metavar; - QVariant def; - // option - OptionType type; - QChar flag; - }; - - struct PositionalDef { - // common - QString name; - QString doc; - QString metavar; - QVariant def; - // positional - bool required; - }; - - QHash m_options; - QHash m_flags; - QHash m_params; - QList m_positionals; - QList m_optionList; - - void getPrefix(QString &opt, QString &flag); + FlagStyle m_flagStyle; + ArgumentStyle m_argStyle; + + enum class OptionType { + Switch, + Option + }; + + // Important: the common part MUST BE COMMON ON ALL THREE structs + struct CommonDef { + QString name; + QString doc; + QString metavar; + QVariant def; + }; + + struct OptionDef { + // common + QString name; + QString doc; + QString metavar; + QVariant def; + // option + OptionType type; + QChar flag; + }; + + struct PositionalDef { + // common + QString name; + QString doc; + QString metavar; + QVariant def; + // positional + bool required; + }; + + QHash m_options; + QHash m_flags; + QHash m_params; + QList m_positionals; + QList m_optionList; + + void getPrefix(QString &opt, QString &flag); }; } diff --git a/libutil/include/userutils.h b/libutil/include/userutils.h index c99e758e..2ea1d457 100644 --- a/libutil/include/userutils.h +++ b/libutil/include/userutils.h @@ -5,13 +5,13 @@ namespace Util { - // Get the Directory representing the User's Desktop - QString getDesktopDir(); +// Get the Directory representing the User's Desktop +QString getDesktopDir(); - // Create a shortcut at *location*, pointing to *dest* called with the arguments *args* - // call it *name* and assign it the icon *icon* - // return true if operation succeeded - bool createShortCut(QString location, QString dest, QStringList args, QString name, QString iconLocation); +// Create a shortcut at *location*, pointing to *dest* called with the arguments *args* +// call it *name* and assign it the icon *icon* +// return true if operation succeeded +bool createShortCut(QString location, QString dest, QStringList args, QString name, QString iconLocation); } #endif // USERUTILS_H diff --git a/main.cpp b/main.cpp index a115b67d..27e86d5f 100644 --- a/main.cpp +++ b/main.cpp @@ -44,192 +44,197 @@ using namespace Util::Commandline; // Commandline instance launcher class InstanceLauncher : public QObject { - Q_OBJECT + Q_OBJECT private: - InstanceList instances; - QString instId; - InstancePtr instance; - MinecraftProcess *proc; - ConsoleWindow *console; + InstanceList instances; + QString instId; + InstancePtr instance; + MinecraftProcess *proc; + ConsoleWindow *console; public: - InstanceLauncher(QString instId) : QObject(), instances(settings->getInstanceDir()) - { - this->instId = instId; - } - + InstanceLauncher(QString instId) : QObject(), instances(settings->get("InstanceDir").toString()) + { + this->instId = instId; + } + private: - InstancePtr findInstance(QString instId) - { - QListIterator iter(instances); - InstancePtr inst; - while(iter.hasNext()) - { - inst = iter.next(); - if (inst->id() == instId) - break; - } - if (inst->id() != instId) - return InstancePtr(); - else - return iter.peekPrevious(); - } - + InstancePtr findInstance(QString instId) + { + QListIterator iter(instances); + InstancePtr inst; + while(iter.hasNext()) + { + inst = iter.next(); + if (inst->id() == instId) + break; + } + if (inst->id() != instId) + return InstancePtr(); + else + return iter.peekPrevious(); + } + private slots: - void onTerminated() - { - std::cout << "Minecraft exited" << std::endl; - QApplication::instance()->quit(); - } - - void onLoginComplete(LoginResponse response) - { - // TODO: console - console = new ConsoleWindow(); - proc = new MinecraftProcess(instance, response.getUsername(), response.getSessionID(), console); - //if (instance->getShowConsole()) - console->show(); - connect(proc, SIGNAL(ended()), SLOT(onTerminated())); - proc->launch(); - } - - void doLogin(const QString &errorMsg) - { - LoginDialog* loginDlg = new LoginDialog(nullptr, errorMsg); - if (loginDlg->exec()) - { - UserInfo uInfo(loginDlg->getUsername(), loginDlg->getPassword()); - - TaskDialog* tDialog = new TaskDialog(nullptr); - LoginTask* loginTask = new LoginTask(uInfo, tDialog); - connect(loginTask, SIGNAL(loginComplete(LoginResponse)), - SLOT(onLoginComplete(LoginResponse)), Qt::QueuedConnection); - connect(loginTask, SIGNAL(loginFailed(QString)), - SLOT(doLogin(QString)), Qt::QueuedConnection); - tDialog->exec(loginTask); - } - //onLoginComplete(LoginResponse("Offline","Offline", 1)); - } - + void onTerminated() + { + std::cout << "Minecraft exited" << std::endl; + QApplication::instance()->quit(); + } + + void onLoginComplete(LoginResponse response) + { + // TODO: console + console = new ConsoleWindow(); + proc = new MinecraftProcess(instance, response.getUsername(), response.getSessionID(), console); + //if (instance->getShowConsole()) + console->show(); + connect(proc, SIGNAL(ended()), SLOT(onTerminated())); + proc->launch(); + } + + void doLogin(const QString &errorMsg) + { + LoginDialog* loginDlg = new LoginDialog(nullptr, errorMsg); + if (loginDlg->exec()) + { + UserInfo uInfo(loginDlg->getUsername(), loginDlg->getPassword()); + + TaskDialog* tDialog = new TaskDialog(nullptr); + LoginTask* loginTask = new LoginTask(uInfo, tDialog); + connect(loginTask, SIGNAL(loginComplete(LoginResponse)), + SLOT(onLoginComplete(LoginResponse)), Qt::QueuedConnection); + connect(loginTask, SIGNAL(loginFailed(QString)), + SLOT(doLogin(QString)), Qt::QueuedConnection); + tDialog->exec(loginTask); + } + //onLoginComplete(LoginResponse("Offline","Offline", 1)); + } + public: - int launch() - { - std::cout << "Loading Instances..." << std::endl; - instances.loadList(); - - std::cout << "Launching Instance '" << qPrintable(instId) << "'" << std::endl; - instance = findInstance(instId); - if (instance.isNull()) - { - std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl; - return 1; - } - - std::cout << "Logging in..." << std::endl; - doLogin(""); - - return QApplication::instance()->exec(); - } + int launch() + { + std::cout << "Loading Instances..." << std::endl; + instances.loadList(); + + std::cout << "Launching Instance '" << qPrintable(instId) << "'" << std::endl; + instance = findInstance(instId); + if (instance.isNull()) + { + std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl; + return 1; + } + + std::cout << "Logging in..." << std::endl; + doLogin(""); + + return QApplication::instance()->exec(); + } }; int main(int argc, char *argv[]) { - // initialize Qt + // initialize Qt QApplication app(argc, argv); app.setOrganizationName("Forkk"); app.setApplicationName("MultiMC 5"); - - // Print app header - std::cout << "MultiMC 5" << std::endl; - std::cout << "(c) 2013 MultiMC Contributors" << std::endl << std::endl; - - // Commandline parsing - Parser parser(FlagStyle::GNU, ArgumentStyle::SpaceAndEquals); - - // --help - parser.addSwitch("help"); - parser.addShortOpt("help", 'h'); - parser.addDocumentation("help", "display this help and exit."); - // --version - parser.addSwitch("version"); - parser.addShortOpt("version", 'V'); - parser.addDocumentation("version", "display program version and exit."); - // --dir - parser.addOption("dir", app.applicationDirPath()); - parser.addShortOpt("dir", 'd'); - parser.addDocumentation("dir", "use the supplied directory as MultiMC root instead of the binary location (use '.' for current)"); - // --update - parser.addOption("update"); - parser.addShortOpt("update", 'u'); - parser.addDocumentation("update", "replaces the given file with the running executable", ""); - // --quietupdate - parser.addSwitch("quietupdate"); - parser.addShortOpt("quietupdate", 'U'); - parser.addDocumentation("quietupdate", "doesn't restart MultiMC after installing updates"); - // --launch - parser.addOption("launch"); - parser.addShortOpt("launch", 'l'); - parser.addDocumentation("launch", "tries to launch the given instance", ""); - - // parse the arguments - QHash args; - try { - args = parser.parse(app.arguments()); - } catch(ParsingError e) { - std::cerr << "CommandLineError: " << e.what() << std::endl; - std::cerr << "Try '%1 -h' to get help on MultiMC's command line parameters." << std::endl; - return 1; - } - - // display help and exit - if (args["help"].toBool()) { - std::cout << qPrintable(parser.compileHelp(app.arguments()[0])); - return 0; - } - - // display version and exit - if (args["version"].toBool()) { - std::cout << "Version " << VERSION_STR << std::endl; - std::cout << "Git " << GIT_COMMIT << std::endl; - std::cout << "Tag: " << JENKINS_BUILD_TAG << " " << (ARCH==x64?"x86_64":"x86") << std::endl; - return 0; - } - - // update - // Note: cwd is always the current executable path! - if (!args["update"].isNull()) - { - std::cout << "Performing MultiMC update: " << qPrintable(args["update"].toString()) << std::endl; - QString cwd = QDir::currentPath(); - QDir::setCurrent(app.applicationDirPath()); - QFile file(app.applicationFilePath()); - file.copy(args["update"].toString()); - if(args["quietupdate"].toBool()) - return 0; - QDir::setCurrent(cwd); - } - - // change directory - QDir::setCurrent(args["dir"].toString()); - - // load settings + + // Print app header + std::cout << "MultiMC 5" << std::endl; + std::cout << "(c) 2013 MultiMC Contributors" << std::endl << std::endl; + + // Commandline parsing + Parser parser(FlagStyle::GNU, ArgumentStyle::SpaceAndEquals); + + // --help + parser.addSwitch("help"); + parser.addShortOpt("help", 'h'); + parser.addDocumentation("help", "display this help and exit."); + // --version + parser.addSwitch("version"); + parser.addShortOpt("version", 'V'); + parser.addDocumentation("version", "display program version and exit."); + // --dir + parser.addOption("dir", app.applicationDirPath()); + parser.addShortOpt("dir", 'd'); + parser.addDocumentation("dir", "use the supplied directory as MultiMC root instead of the binary location (use '.' for current)"); + // --update + parser.addOption("update"); + parser.addShortOpt("update", 'u'); + parser.addDocumentation("update", "replaces the given file with the running executable", ""); + // --quietupdate + parser.addSwitch("quietupdate"); + parser.addShortOpt("quietupdate", 'U'); + parser.addDocumentation("quietupdate", "doesn't restart MultiMC after installing updates"); + // --launch + parser.addOption("launch"); + parser.addShortOpt("launch", 'l'); + parser.addDocumentation("launch", "tries to launch the given instance", ""); + + // parse the arguments + QHash args; + try + { + args = parser.parse(app.arguments()); + } + catch(ParsingError e) + { + std::cerr << "CommandLineError: " << e.what() << std::endl; + std::cerr << "Try '%1 -h' to get help on MultiMC's command line parameters." << std::endl; + return 1; + } + + // display help and exit + if (args["help"].toBool()) + { + std::cout << qPrintable(parser.compileHelp(app.arguments()[0])); + return 0; + } + + // display version and exit + if (args["version"].toBool()) + { + std::cout << "Version " << VERSION_STR << std::endl; + std::cout << "Git " << GIT_COMMIT << std::endl; + std::cout << "Tag: " << JENKINS_BUILD_TAG << " " << (ARCH==x64?"x86_64":"x86") << std::endl; + return 0; + } + + // update + // Note: cwd is always the current executable path! + if (!args["update"].isNull()) + { + std::cout << "Performing MultiMC update: " << qPrintable(args["update"].toString()) << std::endl; + QString cwd = QDir::currentPath(); + QDir::setCurrent(app.applicationDirPath()); + QFile file(app.applicationFilePath()); + file.copy(args["update"].toString()); + if(args["quietupdate"].toBool()) + return 0; + QDir::setCurrent(cwd); + } + + // change directory + QDir::setCurrent(args["dir"].toString()); + + // load settings settings = new AppSettings(&app); - + // Register meta types. qRegisterMetaType("LoginResponse"); - + // Initialize plugins. PluginManager::get().loadPlugins(PathCombine(qApp->applicationDirPath(), "plugins")); PluginManager::get().initInstanceTypes(); - - // launch instance. - if (!args["launch"].isNull()) - return InstanceLauncher(args["launch"].toString()).launch(); - - // show main window + + // launch instance. + if (!args["launch"].isNull()) + return InstanceLauncher(args["launch"].toString()).launch(); + + // show main window MainWindow mainWin; mainWin.show(); - // loop + // loop return app.exec(); }