/*************************************************************************** * Copyright (C) 2006-2012 by Thomas Schweitzer * * thomas-schweitzer(at)arcor.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License version 2.0 as * * published by the Free Software Foundation. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program in the file LICENSE.GPL; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "MainWindow.h" // -- #include "debugging/TSLogger.h" // -- #include "IndentHandler.h" #include "SettingsPaths.h" // -- #include "UiGuiIndentServer.h" // -- #include "UiGuiIniFileParser.h" #include "UiGuiSettings.h" // -- #include "UiGuiSystemInfo.h" #include "UiGuiVersion.h" #include #include #include #include // -- #include #include // -- #include #include // -- using namespace tschweitzer::debugging; /*! /brief Entry point to UniversalIndentGUI application. Evaluates the following parameters: No parameters starts without server and full gui. A string without any parameter prefix will be loaded as file on start. -p --plugin : Run as plugin. Server will be started with a simplified gui. -s --server : Run as server only, without gui. If -p and -s are set, -p will be used. -v --verbose needs a following parameter defining the verbose level as a number from 0 to 3. */ int main(int argc, char *argv[]) { TQString file2OpenOnStart = ""; int verboseLevel = 1; bool startAsPlugin = false; bool startAsServer = false; bool tclapExitExceptionThrown = false; int returnValue = 0; // Wrap everything in a try block. Do this every time, // because exceptions will be thrown for problems. try { // Define the command line object. TCLAP::CmdLine cmd("If -p and -s are set, -p will be used.\n" "Giving no parameters starts full gui without server.", ' ', "UiGUI version " PROGRAM_VERSION_STRING " " PROGRAM_REVISION); cmd.setExceptionHandling(false); // Define a value argument and add it to the command line. TCLAP::UnlabeledValueArg filenameArg("file", "Opens the by filename defined file on start" , false, "", "filename"); cmd.add(filenameArg); // Define a switch and add it to the command line. TCLAP::SwitchArg pluginSwitch("p", "plugin", "Run as plugin. Server will be started with a simplified gui", false); cmd.add(pluginSwitch); // Define a switch and add it to the command line. TCLAP::SwitchArg serverSwitch("s", "server", "Run as server only without gui", false); cmd.add(serverSwitch); // Define a value argument and add it to the command line. TCLAP::ValueArg verboselevelArg("v", "verbose", "Sets how many info is written to the log. 0 means with debug info, " "3 means critical messages only" , false, 1, "int"); cmd.add(verboselevelArg); // Parse the args. cmd.parse(argc, argv); // Get the value parsed by each arg. file2OpenOnStart = filenameArg.getValue().c_str(); startAsPlugin = pluginSwitch.getValue(); startAsServer = serverSwitch.getValue(); verboseLevel = verboselevelArg.getValue(); } catch (TCLAP::ArgException &e) { // catch arg exceptions std::cerr << std::endl << "error: " << e.error() << ". " << e.argId() << std::endl; returnValue = 1; } catch (TCLAP::ExitException &e) { // catch exit exceptions tclapExitExceptionThrown = true; returnValue = e.getExitStatus(); } catch (...) { // catch any exceptions std::cerr << std::endl << "There was an error! Maybe faulty " "command line arguments set. See --help." << std::endl; returnValue = 1; } if (returnValue != 0 || tclapExitExceptionThrown) { return returnValue; } TQApplication app(argc, argv); // -- UiGuiIndentServer server; MainWindow *mainWindow = NULL; // -- IndentHandler *indentHandler = NULL; // -- // Init and install the logger function. // Setting UTF-8 as default 8-Bit encoding to ensure that tqDebug does no false string conversion. TQTextCodec::setCodecForCStrings(TQTextCodec::codecForName("UTF-8")); TQTextCodec::setCodecForLocale(TQTextCodec::codecForName("UTF-8")); // -- // Force creation of an TSLogger instance here, to avoid recursion with SettingsPaths init function. // -- #ifdef _DEBUG // -- TSLogger::getInstance(0); // -- #else // -- TSLogger::getInstance(verboseLevel); // -- #endif // -- qInstallMsgHandler(TSLogger::messageHandler); // -- TSLogger::messageHandler(TSLoggerInfoMsg, TQString("Starting UiGUI Version %1 %2").arg(PROGRAM_VERSION_STRING).arg(PROGRAM_REVISION).toAscii()); // -- TSLogger::messageHandler(TSLoggerInfoMsg, TQString("Running on %1").arg(UiGuiSystemInfo::getOperatingSystem()).toAscii()); // -- // Start normal with full gui and without server. if (!startAsPlugin && !startAsServer) { mainWindow = new MainWindow(file2OpenOnStart); mainWindow->show(); } // -- // Start as plugin with server. // -- else if (startAsPlugin) { // -- server.startServer(); // -- indentHandler = new IndentHandler(0); // -- indentHandler->show(); // -- } // -- // Start as server only without any gui. // -- else if (startAsServer) { // -- server.startServer(); // -- } try { app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); // TODO: remove when no longer needed returnValue = app.exec(); } catch (std::exception &ex) { tqDebug(TQString() + __LINE__ + " " + __FUNCTION__ + ": Something went terribly wrong: " + ex.what()); } // -- // -- if (startAsPlugin || startAsServer) // -- server.stopServer(); // -- // -- delete indentHandler; delete mainWindow; UiGuiSettings::deleteInstance(); // -- TSLogger::deleteInstance(); return returnValue; }