summaryrefslogtreecommitdiffstats
path: root/kompare/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kompare/main.cpp')
-rw-r--r--kompare/main.cpp217
1 files changed, 217 insertions, 0 deletions
diff --git a/kompare/main.cpp b/kompare/main.cpp
new file mode 100644
index 00000000..00827c4d
--- /dev/null
+++ b/kompare/main.cpp
@@ -0,0 +1,217 @@
+/***************************************************************************
+ main.cpp - description
+ -------------------
+ begin : Sun Mar 4 2001
+ copyright : (C) 2001-2004 Otto Bruggeman
+ (C) 2001-2003 John Firebaugh
+****************************************************************************/
+
+/***************************************************************************
+**
+** 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 <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kdebug.h>
+#include <kfile.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+#include "kompare_part.h"
+#include "kompare_shell.h"
+#include "kompareurldialog.h"
+
+static const char description[] =
+ I18N_NOOP("A program to view the differences between files and optionally generate a diff" );
+
+static const char version[] = "3.4";
+
+static KCmdLineOptions options[] =
+{
+ { "c", I18N_NOOP( "This will compare URL1 with URL2" ), 0 },
+ { "o", I18N_NOOP( "This will open URL1 and expect it to be diff output. URL1 can also be a '-' and then it will read from standard input. Can be used for instance for cvs diff | kompare -o -. Kompare will do a check to see if it can find the original file(s) and then blend the original file(s) into the diffoutput and show that in the viewer. -n disables the check." ), 0 },
+ { "b", I18N_NOOP( "This will blend URL2 into URL1, URL2 is expected to be diff output and URL1 the file or folder that the diffoutput needs to be blended into. " ), 0 },
+ { "n", I18N_NOOP( "Disables the check for automatically finding the original file(s) when using '-' as URL with the -o option." ), 0 },
+ { "e <encoding>", I18N_NOOP( "Use this to specify the encoding when calling it from the command line. It will default to the local encoding if not specified." ), 0 },
+ { "+[URL1 [URL2]]",0 , 0 },
+ { "+-", 0, 0 },
+// { "", I18N_NOOP( "" ), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+ KAboutData aboutData( "kompare", I18N_NOOP("Kompare"), version, description,
+ KAboutData::License_GPL,
+ I18N_NOOP("(c) 2001-2004, John Firebaugh and Otto Bruggeman"), 0, "http://bruggie.dnsalias.org/kompare/" );
+ aboutData.addAuthor( "John Firebaugh", I18N_NOOP("Author"), "[email protected]" );
+ aboutData.addAuthor( "Otto Bruggeman", I18N_NOOP("Author"), "[email protected]" );
+ aboutData.addCredit( "Chris Luetchford", I18N_NOOP("Kompare icon artist"), "[email protected]" );
+ aboutData.addCredit( "Malte Starostik", I18N_NOOP("A lot of good advice"), "[email protected]" );
+ aboutData.addCredit( "Bernd Gehrmann", I18N_NOOP("Cervisia diff viewer"), "[email protected]" );
+
+ KCmdLineArgs::init(argc, argv, &aboutData);
+ KCmdLineArgs::addCmdLineOptions( options );
+ KApplication app;
+ bool difault = false;
+
+ // see if we are starting with session management
+ if (app.isRestored())
+ {
+ RESTORE(KompareShell)
+ }
+ else
+ {
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ KompareShell* ks;
+
+ kdDebug( 8100 ) << "Arg Count = " << args->count() << endl;
+ for ( int i=0; i < args->count(); i++ )
+ {
+ kdDebug( 8100 ) << "Argument " << (i+1) << ": " << args->arg( i ) << endl;
+ }
+
+ if ( args->isSet( "e" ) )
+ {
+ // Encoding given...
+ // FIXME: Need to implement this...
+ }
+
+ if ( args->isSet( "o" ) )
+ {
+ kdDebug( 8100 ) << "Option -o is set" << endl;
+ if ( args->count() != 1 )
+ {
+ difault = true;
+ }
+ else
+ {
+ ks = new KompareShell();
+ ks->show();
+ kdDebug( 8100 ) << "OpenDiff..." << endl;
+ if ( ( strlen( args->arg(0) ) == 1 ) && ( *(args->arg(0)) == '-' ) )
+ ks->openStdin();
+ else
+ ks->openDiff( args->url( 0 ) );
+ difault = false;
+ }
+ }
+ else if ( args->isSet( "c" ) )
+ {
+ kdDebug( 8100 ) << "Option -c is set" << endl;
+ if ( args->count() != 2 )
+ {
+ KCmdLineArgs::usage( "kompare" );
+ difault = true;
+ }
+ else
+ {
+ ks = new KompareShell();
+ ks->show();
+ KURL url0 = args->url( 0 );
+ kdDebug( 8100 ) << "URL0 = " << url0.url() << endl;
+ KURL url1 = args->url( 1 );
+ kdDebug( 8100 ) << "URL1 = " << url1.url() << endl;
+ ks->compare( url0, url1 );
+ difault = false;
+ }
+ }
+ else if ( args->isSet( "b" ) )
+ {
+ kdDebug( 8100 ) << "Option -b is set" << endl;
+ if ( args->count() != 2 )
+ {
+ KCmdLineArgs::usage( "kompare" );
+ difault = true;
+ }
+ else
+ {
+ ks = new KompareShell();
+ ks->show();
+ kdDebug( 8100 ) << "blend..." << endl;
+ KURL url0 = args->url( 0 );
+ kdDebug( 8100 ) << "URL0 = " << url0.url() << endl;
+ KURL url1 = args->url( 1 );
+ kdDebug( 8100 ) << "URL1 = " << url1.url() << endl;
+ ks->blend( url0, url1 );
+ difault = false;
+ }
+ }
+ else if ( args->count() == 1 )
+ {
+ ks = new KompareShell();
+ ks->show();
+
+ kdDebug( 8100 ) << "Single file. so openDiff/openStdin is only possible..." << endl;
+ if ( ( strlen( args->arg(0) ) == 1 && *(args->arg(0)) == '-' ) )
+ ks->openStdin();
+ else
+ ks->openDiff( args->url( 0 ) );
+
+ difault = false;
+ }
+ else if ( args->count() == 2 )
+ {
+ // In this case we are assuming you want to compare files/dirs
+ // and not blending because that is almost impossible to detect
+ ks = new KompareShell();
+ ks->show();
+ kdDebug( 8100 ) << "Dunno, we'll have to figure it out later, trying compare for now..." << endl;
+ KURL url0 = args->url( 0 );
+ kdDebug( 8100 ) << "URL0 = " << url0.url() << endl;
+ KURL url1 = args->url( 1 );
+ kdDebug( 8100 ) << "URL1 = " << url1.url() << endl;
+ ks->compare( url0, url1 );
+ difault = false;
+ }
+ else if ( args->count() == 0 ) // no options and no args
+ {
+ difault = true;
+ }
+
+ if ( difault )
+ {
+ KompareURLDialog* dialog = new KompareURLDialog();
+
+ dialog->setCaption( i18n("Compare Files or Folders") );
+ dialog->setFirstGroupBoxTitle( i18n( "Source" ) );
+ dialog->setSecondGroupBoxTitle( i18n( "Destination" ) );
+
+ KGuiItem compareGuiItem( i18n( "Compare" ), QString::null, i18n( "Compare these files or folder" ), i18n( "If you have entered 2 filenames or 2 folders in the fields in this dialog then this button will be enabled and pressing it will start a comparison of the entered files or folders. " ) );
+ dialog->setButtonOK( compareGuiItem );
+
+ dialog->setGroup( "Recent Compare Files" );
+
+ dialog->setFirstURLRequesterMode( KFile::File|KFile::Directory|KFile::ExistingOnly );
+ dialog->setSecondURLRequesterMode( KFile::File|KFile::Directory|KFile::ExistingOnly );
+
+ if( dialog->exec() == QDialog::Accepted )
+ {
+ ks = new KompareShell();
+ ks->show();
+ ks->viewPart()->setEncoding( dialog->encoding() );
+ ks->compare( dialog->getFirstURL(), dialog->getSecondURL() );
+ }
+ else
+ return -1;
+
+ delete dialog;
+ }
+
+ args->clear();
+ }
+
+ return kapp->exec();
+}
+
+/* vim: set ts=4 sw=4 noet: */
+