summaryrefslogtreecommitdiffstats
path: root/cervisia/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cervisia/main.cpp')
-rw-r--r--cervisia/main.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/cervisia/main.cpp b/cervisia/main.cpp
new file mode 100644
index 00000000..e8e6a505
--- /dev/null
+++ b/cervisia/main.cpp
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 1999-2002 Bernd Gehrmann
+ * bernd@mail.berlios.de
+ * Copyright (c) 2003-2004 Christian Loose <christian.loose@hamburg.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.
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <iostream>
+
+#include <qfileinfo.h>
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kurl.h>
+
+#include "misc.h"
+#include "cervisiashell.h"
+#include "cvsservice_stub.h"
+#include "annotatedlg.h"
+#include "annotatectl.h"
+#include "logdlg.h"
+#include "resolvedlg.h"
+#include "version.h"
+
+
+static CvsService_stub* StartDCOPService(const QString& directory)
+{
+ // start the cvs DCOP service
+ QString error;
+ QCString appId;
+ if( KApplication::startServiceByDesktopName("cvsservice", QStringList(),
+ &error, &appId) )
+ {
+ std::cerr << "Starting cvsservice failed with message: "
+ << error.latin1() << std::endl;
+ exit(1);
+ }
+
+ DCOPRef repository(appId, "CvsRepository");
+
+ repository.call("setWorkingCopy(QString)", directory);
+
+ // create a reference to the service
+ return new CvsService_stub(appId, "CvsService");
+}
+
+
+static int ShowResolveDialog(const QString& fileName)
+{
+ KConfig* config = new KConfig("cervisiapartrc");
+
+ ResolveDialog* dlg = new ResolveDialog(*config);
+ kapp->setMainWidget(dlg);
+ if( dlg->parseFile(fileName) )
+ dlg->show();
+ else
+ delete dlg;
+
+ int result = kapp->exec();
+
+ delete config;
+
+ return result;
+}
+
+
+static int ShowLogDialog(const QString& fileName)
+{
+ KConfig* config = new KConfig("cervisiapartrc");
+ LogDialog* dlg = new LogDialog(*config);
+ kapp->setMainWidget(dlg);
+
+ // get directory for file
+ const QFileInfo fi(fileName);
+ QString directory = fi.dirPath(true);
+
+ // start the cvs DCOP service
+ CvsService_stub* cvsService = StartDCOPService(directory);
+
+ if( dlg->parseCvsLog(cvsService, fi.fileName()) )
+ dlg->show();
+ else
+ delete dlg;
+
+ int result = kapp->exec();
+
+ // stop the cvs DCOP service
+ cvsService->quit();
+ delete cvsService;
+
+ delete config;
+
+ return result;
+}
+
+
+static int ShowAnnotateDialog(const QString& fileName)
+{
+ KConfig* config = new KConfig("cervisiapartrc");
+ AnnotateDialog* dlg = new AnnotateDialog(*config);
+ kapp->setMainWidget(dlg);
+
+ // get directory for file
+ const QFileInfo fi(fileName);
+ QString directory = fi.dirPath(true);
+
+ // start the cvs DCOP service
+ CvsService_stub* cvsService = StartDCOPService(directory);
+
+ AnnotateController ctl(dlg, cvsService);
+ ctl.showDialog(fi.fileName());
+
+ int result = kapp->exec();
+
+ // stop the cvs DCOP service
+ cvsService->quit();
+ delete cvsService;
+
+ delete config;
+
+ return result;
+}
+
+
+extern "C" KDE_EXPORT int kdemain(int argc, char **argv)
+{
+ static KCmdLineOptions options[] = {
+ { "+[directory]", I18N_NOOP("The sandbox to be loaded"), 0 },
+ { "resolve <file>", I18N_NOOP("Show resolve dialog for the given file"), 0 },
+ { "log <file>", I18N_NOOP("Show log dialog for the given file"), 0 },
+ { "annotate <file>", I18N_NOOP("Show annotation dialog for the given file"), 0 },
+ KCmdLineLastOption
+ };
+ KAboutData about("cervisia", I18N_NOOP("Cervisia"), CERVISIA_VERSION,
+ I18N_NOOP("A CVS frontend"), KAboutData::License_GPL,
+ I18N_NOOP("Copyright (c) 1999-2002 Bernd Gehrmann\n"
+ "Copyright (c) 2002-2007 the Cervisia authors"), 0,
+ "http://www.kde.org/apps/cervisia");
+
+ about.addAuthor("Bernd Gehrmann", I18N_NOOP("Original author and former "
+ "maintainer"), "bernd@mail.berlios.de", 0);
+ about.addAuthor("Christian Loose", I18N_NOOP("Maintainer"),
+ "christian.loose@kdemail.net", 0);
+ about.addAuthor("Andr\303\251 W\303\266bbeking", I18N_NOOP("Developer"),
+ "woebbeking@kde.org", 0);
+ about.addAuthor("Carlos Woelz", I18N_NOOP("Documentation"),
+ "carloswoelz@imap-mail.com", 0);
+
+ about.addCredit("Richard Moore", I18N_NOOP("Conversion to KPart"),
+ "rich@kde.org", 0);
+
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions(options);
+
+ KApplication app;
+
+ QString resolvefile = KCmdLineArgs::parsedArgs()->getOption("resolve");
+ if (!resolvefile.isEmpty())
+ return ShowResolveDialog(resolvefile);
+
+ // is command line option 'show log dialog' specified?
+ QString logFile = KCmdLineArgs::parsedArgs()->getOption("log");
+ if( !logFile.isEmpty() )
+ return ShowLogDialog(logFile);
+
+ // is command line option 'show annotation dialog' specified?
+ QString annotateFile = KCmdLineArgs::parsedArgs()->getOption("annotate");
+ if( !annotateFile.isEmpty() )
+ return ShowAnnotateDialog(annotateFile);
+
+ if ( app.isRestored() ) {
+ RESTORE(CervisiaShell);
+ } else {
+ CervisiaShell* shell = new CervisiaShell();
+
+ const KCmdLineArgs* args = KCmdLineArgs::parsedArgs();
+ if( args->count() )
+ {
+ KURL directory = args->url(0);
+ shell->openURL(directory);
+ }
+ else
+ shell->openURL();
+
+ shell->setIcon(app.icon());
+ app.setMainWidget(shell);
+ shell->show();
+ }
+
+ int res = app.exec();
+ cleanupTempFiles();
+ return res;
+}
+
+
+// Local Variables:
+// c-basic-offset: 4
+// End: