summaryrefslogtreecommitdiffstats
path: root/kviewshell/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kviewshell/main.cpp')
-rw-r--r--kviewshell/main.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/kviewshell/main.cpp b/kviewshell/main.cpp
new file mode 100644
index 00000000..c87cb07e
--- /dev/null
+++ b/kviewshell/main.cpp
@@ -0,0 +1,184 @@
+#include <config.h>
+
+#include <dcopclient.h>
+#include <dcopref.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kdebug.h>
+#include <kmimetype.h>
+#include <kurl.h>
+#include <klocale.h>
+#include <kaboutdata.h>
+#include <qdir.h>
+
+#include <stdlib.h>
+
+#include "kviewshell.h"
+
+
+static KCmdLineOptions options[] =
+{
+ { "u", 0, 0},
+ { "unique", I18N_NOOP("Check if the file is loaded in another kviewshell.\nIf it is, bring up the other kviewshell. Otherwise, load the file."), 0 },
+ { "m", 0, 0},
+ { "mimetype <mimetype>", I18N_NOOP("Loads a plugin which supports files of type <mimetype>,\nif one is installed."), 0 },
+ { "g", 0, 0},
+ { "goto <pagenumber>", I18N_NOOP("Navigate to this page"), 0 },
+ { "+file(s)", I18N_NOOP("Files to load"), 0 },
+ KCmdLineLastOption
+};
+
+
+static const char description[] = I18N_NOOP("Generic framework for viewer applications");
+
+
+int main(int argc, char **argv)
+{
+ KAboutData about ("kviewshell", I18N_NOOP("KViewShell"), "0.6",
+ description, KAboutData::License_GPL,
+ "(C) 2000, Matthias Hoelzer-Kluepfel\n"
+ "(C) 2004-2005, Wilfried Huss",
+ I18N_NOOP("Displays various document formats. "
+ "Based on original code from KGhostView."));
+ about.addAuthor ("Wilfried Huss", I18N_NOOP("Current Maintainer"),
+ "Wilfried.Huss@gmx.at");
+ about.addAuthor ("Matthias Hoelzer-Kluepfel", I18N_NOOP("Framework"),
+ "mhk@caldera.de");
+ about.addAuthor ("David Sweet",
+ I18N_NOOP("KGhostView Maintainer"),
+ "dsweet@kde.org",
+ "http://www.chaos.umd.edu/~dsweet");
+ about.addAuthor ("Mark Donohoe",
+ I18N_NOOP("KGhostView Author"));
+ about.addAuthor ("Markku Hihnala",
+ I18N_NOOP("Navigation widgets"));
+ about.addAuthor ("David Faure",
+ I18N_NOOP("Basis for shell"));
+ about.addAuthor ("Daniel Duley",
+ I18N_NOOP("Port to KParts"));
+ about.addAuthor ("Espen Sand",
+ I18N_NOOP("Dialog boxes"));
+ about.addAuthor ("Stefan Kebekus",
+ I18N_NOOP("DCOP-Interface, major improvements"),
+ "kebekus@kde.org");
+
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions( options ); // Add my own options.
+ KApplication app;
+
+ // see if we are starting with session management
+ if (app.isRestored())
+ {
+ RESTORE(KViewShell);
+ }
+ else
+ {
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ if (args->isSet("unique")){
+ // With --unique, we need one argument.
+ if (args->count() < 1) {
+ args->usage();
+ exit(-1);
+ }
+
+ // Find the fully qualified file name of the file we are
+ // loading. Complain, if we are given a URL which does not point
+ // to a local file.
+ KURL url(args->url(0));
+
+ if (!args->url(0).isValid()) {
+ kdError(1223) << QString(I18N_NOOP("The URL %1 is not well-formed.")).arg(args->arg(0)) << endl;
+ return -1;
+ }
+
+ if (!args->url(0).isLocalFile()) {
+ kdError(1223) << QString(I18N_NOOP("The URL %1 does not point to a local file. You can only specify local "
+ "files if you are using the '--unique' option.")).arg(args->arg(0)) << endl;
+ return -1;
+ }
+
+ QString qualPath = QFileInfo(args->url(0).path()).absFilePath();
+
+ app.dcopClient()->attach();
+ QCString id = app.dcopClient()->registerAs("unique-kviewshell");
+ if (id.isNull())
+ kdError(1223) << "There was an error using dcopClient()->registerAs()." << endl;
+ QCStringList apps = app.dcopClient()->registeredApplications();
+ for ( QCStringList::Iterator it = apps.begin(); it != apps.end(); ++it )
+ {
+ if ((*it).find("kviewshell") == 0)
+ {
+ QByteArray data, replyData;
+ QCString replyType;
+ QDataStream arg(data, IO_WriteOnly);
+ bool result;
+ arg << qualPath.stripWhiteSpace();
+ if (!app.dcopClient()->call( *it, "kmultipage", "is_file_loaded(QString)", data, replyType, replyData))
+ kdError(1223) << "There was an error using DCOP." << endl;
+ else
+ {
+ QDataStream reply(replyData, IO_ReadOnly);
+ if (replyType == "bool")
+ {
+ reply >> result;
+ if (result == true)
+ {
+ if (app.dcopClient()->send(*it, "kmultipage", "jumpToReference(QString)", args->url(0).ref()) == true)
+ {
+ app.dcopClient()->detach();
+ return 0;
+ }
+ }
+ }
+ else
+ {
+ kdError(1223) << "The DCOP function 'doIt' returned an unexpected type of reply!";
+ }
+ }
+ }
+ }
+ }
+ app.dcopClient()->registerAs("kviewshell");
+ KViewShell* shell;
+
+ if (args->isSet("mimetype"))
+ {
+ shell = new KViewShell(args->getOption("mimetype"));
+ }
+ else if (args->count() > 0)
+ {
+ // If a url is given, we try to load a matching KViewShell plugin,
+ // so we don't have to load the empty plugin first.
+ KMimeType::Ptr mimetype = KMimeType::findByURL(args->url(0));
+ shell = new KViewShell(mimetype->name());
+ }
+ else
+ {
+ // Load the empty plugin
+ shell = new KViewShell();
+ }
+
+ // Show the main window before a file is loaded. This gives visual
+ // feedback to the user and (hopefully) reduces the perceived
+ // startup time.
+ shell->show();
+ app.processEvents();
+
+ if ( args->count() > 0 )
+ {
+ KURL url = args->url(0);
+ if (!url.hasRef() && args->isSet("goto"))
+ {
+ // If the url doesn't already has a reference part, add the
+ // argument of --goto to the url as reference, to make the
+ // KViewShell jump to this page.
+ QString reference = args->getOption("goto");
+ url.setHTMLRef(reference);
+ }
+ shell->openURL(url);
+ }
+ }
+
+ return app.exec();
+}