/*************************************************************************** * 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 "UiGuiIndentServer.h" // -- #include "debugging/TSLogger.h" // -- #include "UiGuiIniFileParser.h" // -- #include "UiGuiSettings.h" // -- #include "UiGuiVersion.h" // -- #include "UiGuiSystemInfo.h" // -- #include "IndentHandler.h" // -- #include "SettingsPaths.h" // -- // -- #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[]) { return 0; // -- 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.\nGiving 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() ); // -- // -- // Set default values for all by UniversalIndentGUI used settings objects. // -- TQCoreApplication::setOrganizationName("UniversalIndentGUI"); // -- TQCoreApplication::setOrganizationDomain("universalindent.sf.net"); // -- TQCoreApplication::setApplicationName("UniversalIndentGUI"); // -- // -- // 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 { // -- returnValue = app.exec(); // -- } // -- catch (std::exception &ex) { // -- qCritical() << __LINE__ << " " << __FUNCTION__ << ": Something went terribly wrong:" // << ex.what(); // -- } // -- // -- if ( startAsPlugin || startAsServer ) // -- server.stopServer(); // -- // -- delete indentHandler; // -- delete mainWindow; // -- // -- SettingsPaths::cleanAndRemoveTempDir(); // -- TSLogger::deleteInstance(); // -- // -- return returnValue; }