/*************************************************************************** main.cpp - Where everything starts. ------------------- begin : Don Jul 11 12:31:29 CEST 2002 copyright : (C) 2002-2007 by Joachim Eibl email : joachim.eibl at gmx.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include "kdiff3_shell.h" #include #include "version.h" #include #include #include #include #ifdef KREPLACEMENTS_H #include "optiondialog.h" #endif #include "common.h" static const char *description = I18N_NOOP("Tool for Comparison and Merge of Files and Directories"); static TDECmdLineOptions options[] = { { "m", 0, 0 }, { "merge", I18N_NOOP("Merge the input."), 0 }, { "b", 0, 0 }, { "base file", I18N_NOOP("Explicit base file. For compatibility with certain tools."), 0 }, { "o", 0, 0 }, { "output file", I18N_NOOP("Output file. Implies -m. E.g.: -o newfile.txt"), 0 }, { "out file", I18N_NOOP("Output file, again. (For compatibility with certain tools.)"), 0 }, { "auto", I18N_NOOP("No GUI if all conflicts are auto-solvable. (Needs -o file)"), 0 }, { "qall", I18N_NOOP("Don't solve conflicts automatically. (For compatibility...)"), 0 }, { "L1 alias1", I18N_NOOP("Visible name replacement for input file 1 (base)."), 0 }, { "L2 alias2", I18N_NOOP("Visible name replacement for input file 2."), 0 }, { "L3 alias3", I18N_NOOP("Visible name replacement for input file 3."), 0 }, { "L", 0, 0 }, { "fname alias", I18N_NOOP("Alternative visible name replacement. Supply this once for every input."), 0 }, { "cs string", I18N_NOOP("Override a config setting. Use once for every setting. E.g.: --cs \"AutoAdvance=1\""), 0 }, { "confighelp", I18N_NOOP("Show list of config settings and current values."), 0 }, { "config file", I18N_NOOP("Use a different config file."), 0 } }; static TDECmdLineOptions options2[] = { { "+[File1]", I18N_NOOP("file1 to open (base, if not specified via --base)"), 0 }, { "+[File2]", I18N_NOOP("file2 to open"), 0 }, { "+[File3]", I18N_NOOP("file3 to open"), 0 } }; void initialiseCmdLineArgs(std::vector& vOptions, TQStringList& ignorableOptions) { vOptions.insert( vOptions.end(), options, (TDECmdLineOptions*)((char*)options+sizeof(options))); TQString configFileName = TDEStandardDirs().findResource("config","kdiff3rc"); TQFile configFile( configFileName ); if ( configFile.open( IO_ReadOnly ) ) { TQTextStream ts( &configFile ); while(!ts.atEnd()) { TQString line = ts.readLine(); if ( line.startsWith("IgnorableCmdLineOptions=") ) { int pos = line.find('='); if (pos>=0) { TQString s = line.mid(pos+1); TQStringList sl = TQStringList::split( '|', s ); if (!sl.isEmpty()) { ignorableOptions = TQStringList::split( ';', sl.front() ); for (TQStringList::iterator i=ignorableOptions.begin(); i!=ignorableOptions.end(); ++i) { TDECmdLineOptions ignoreOption; (*i).remove('-'); if (!(*i).isEmpty()) { ignoreOption.name = (*i).latin1(); ignoreOption.description = I18N_NOOP("Ignored. (User defined.)"); ignoreOption.def = 0; vOptions.push_back(ignoreOption); } } } } break; } } } vOptions.insert(vOptions.end(),options2,(TDECmdLineOptions*)((char*)options2+sizeof(options2))); TDECmdLineOptions last = TDECmdLineLastOption; vOptions.push_back(last); TDECmdLineArgs::addCmdLineOptions( &vOptions[0] ); // Add our own options. } #ifdef _WIN32 #include // This command checks the comm static bool isOptionUsed(const TQString& s, int argc, char* argv[]) { for(int j=0; j vOptions; TQStringList ignorableOptions; initialiseCmdLineArgs(vOptions, ignorableOptions); TDEApplication app; #ifdef KREPLACEMENTS_H TQString locale; locale = app.config()->readEntry("Language", "Auto"); int spacePos = locale.find(' '); if (spacePos>0) locale = locale.left(spacePos); TQTranslator kdiff3Translator( 0 ); TQTranslator qtTranslator( 0 ); if (locale != "en_orig") { if ( locale == "Auto" || locale.isEmpty() ) locale = TQTextCodec::locale(); TQString translationDir = getTranslationDir(); kdiff3Translator.load( TQString("kdiff3_")+locale, translationDir ); app.installTranslator( &kdiff3Translator ); qtTranslator.load( TQString("qt_")+locale, translationDir ); app.installTranslator( &qtTranslator ); } #endif if (app.isRestored()) { RESTORE(KDiff3Shell); } else { new KDiff3Shell(); } int retVal = app.exec(); return retVal; } // Suppress warning with --enable-final #undef VERSION