summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/main.cpp')
-rw-r--r--umbrello/umbrello/main.cpp208
1 files changed, 208 insertions, 0 deletions
diff --git a/umbrello/umbrello/main.cpp b/umbrello/umbrello/main.cpp
new file mode 100644
index 00000000..faba82d3
--- /dev/null
+++ b/umbrello/umbrello/main.cpp
@@ -0,0 +1,208 @@
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ * copyright (C) 2002-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+#include <unistd.h>
+
+// kde includes
+#include <kaboutdata.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <ktip.h>
+#include <kdebug.h>
+#include <kwin.h>
+
+// app includes
+#include "uml.h"
+#include "version.h"
+#include "umldoc.h"
+#include "cmdlineexportallviewsevent.h"
+#include "kstartuplogo.h"
+
+static const char description[] =
+ I18N_NOOP("Umbrello UML Modeller");
+// INSERT A DESCRIPTION FOR YOUR APPLICATION HERE
+
+/**
+ * @todo Add options to use the documentation generators from command line.
+ */
+static KCmdLineOptions options[] =
+ {
+ { "+[File]", I18N_NOOP("File to open"), 0 },
+ { "export <extension>", I18N_NOOP("export diagrams to extension and exit"), 0},
+ { "directory <url>", I18N_NOOP("the local directory to save the exported diagrams in"), I18N_NOOP("the directory of the file")},
+ { "use-folders", I18N_NOOP("keep the tree structure used to store the views in the document in the target directory"), 0},
+ // INSERT YOUR COMMANDLINE OPTIONS HERE
+ KCmdLineLastOption
+ };
+
+/**
+ * Determines if the application GUI should be shown based on command line arguments.
+ *
+ * @param args The command line arguments given.
+ * @return True if the GUI should be shown, false otherwise.
+ */
+bool getShowGUI(KCmdLineArgs *args);
+
+/**
+ * Creates, shows and returns the startup logo for the application if it should be shown,
+ * else returns null pointer.
+ * The startup logo is shown if it is configured to be shown and also the GUI must be shown.
+ *
+ * @param cfg The application configuration.
+ * @param showGUI If the GUI should be shown.
+ * @return The startup logo for the application, or a null pointer if it shouldn't be shown.
+ */
+KStartupLogo* showStartupLogo(KConfig* cfg, bool showGUI);
+
+/**
+ * Initializes the document used by the application.
+ * If a file was specified in command line arguments, opens that file. Else, it
+ * opens the last opened file, or a new file if there isn't any "last file used"
+ * in the configuration.
+ *
+ * @param args The command line arguments given.
+ * @param cfg The application configuration.
+ */
+void initDocument(KCmdLineArgs *args, KConfig* cfg);
+
+/**
+ * Export all the views in the document using the command line args set by the user.
+ * Errors that occurred while exporting, if any, are shown using kError().
+ *
+ * @param args The command line arguments given.
+ * @param exportOpt A list containing all the "export" arguments given.
+ */
+void exportAllViews(KCmdLineArgs *args, const QCStringList &exportOpt);
+
+extern "C" int flushEvents() {
+ kapp->processEvents();
+ return 0;
+}
+
+int main(int argc, char *argv[]) {
+ KAboutData aboutData( "umbrello", I18N_NOOP("Umbrello UML Modeller"),
+ UMBRELLO_VERSION, description, KAboutData::License_GPL,
+ I18N_NOOP("(c) 2001 Paul Hensgen, (c) 2002-2006 Umbrello UML Modeller Authors"), 0,
+ "http://uml.sf.net/");
+ aboutData.addAuthor("Paul Hensgen",0, "phensgen@users.sourceforge.net");
+ aboutData.addAuthor(I18N_NOOP("Umbrello UML Modeller Authors"), 0, "uml-devel@lists.sourceforge.net");
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+
+ KApplication app;
+ if( app.isRestored() ) {
+ RESTORE( UMLApp );
+ } else {
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ bool showGUI = getShowGUI(args);
+
+ UMLApp *uml = new UMLApp();
+ flushEvents();
+ KConfig * cfg = app.config();
+
+ KStartupLogo* startLogo = showStartupLogo(cfg, showGUI);
+
+ if (showGUI) {
+ uml->show();
+ }
+ uml->initGenerator();
+
+ //show tips if wanted
+ if (showGUI) {
+ KTipDialog::showTip();
+ }
+
+ initDocument(args, cfg);
+
+ // export option
+ QCStringList exportOpt = args->getOptionList("export");
+ if (exportOpt.size() > 0) {
+ exportAllViews(args, exportOpt);
+ }
+
+ if ( showGUI && (startLogo != 0L) && !startLogo->isHidden() ) {
+ startLogo->raise();
+ }
+ }
+ return app.exec();
+}
+
+bool getShowGUI(KCmdLineArgs *args) {
+ if (args->getOptionList("export").size() > 0) {
+ return false;
+ }
+
+ return true;
+}
+
+KStartupLogo* showStartupLogo(KConfig* cfg, bool showGUI) {
+ KStartupLogo* startLogo = 0L;
+
+ cfg->setGroup( "General Options" );
+ bool showLogo = cfg->readBoolEntry( "logo", true );
+ if (showGUI && showLogo) {
+#if KDE_IS_VERSION(3,3,90)
+ startLogo = new KStartupLogo(0);
+ startLogo->setHideEnabled(true);
+ KWin::setMainWindow(startLogo, UMLApp::app()->winId());
+#else
+ startLogo = new KStartupLogo(UMLApp::app());
+ startLogo->setHideEnabled(true);
+#endif
+ KWin::setState(startLogo->winId(), NET::KeepAbove);
+ startLogo->show();
+ QApplication::flushX();
+ }
+
+ return startLogo;
+}
+
+void initDocument(KCmdLineArgs *args, KConfig* cfg) {
+ if ( args -> count() ) {
+ UMLApp::app()->openDocumentFile( args->url( 0 ) );
+ } else {
+ cfg->setGroup( "General Options" );
+ bool last = cfg->readBoolEntry( "loadlast", false );
+ QString file = cfg->readPathEntry( "lastFile" );
+ if( last && !file.isEmpty() ) {
+ UMLApp::app()->openDocumentFile( KURL( file ) );
+ } else {
+ UMLApp::app()->newDocument();
+ }
+ }
+}
+
+void exportAllViews(KCmdLineArgs *args, const QCStringList &exportOpt) {
+ QString extension(exportOpt.last());
+ kDebug() << "extension: " << extension << endl;
+
+ // export to the specified directory, or the directory where the file is saved
+ // if no directory was specified
+ KURL directory;
+ QCStringList directoryOpt = args->getOptionList("directory");
+ if (directoryOpt.size() > 0) {
+ directory = KCmdLineArgs::makeURL(directoryOpt.last());
+ } else {
+ directory = KURL(UMLApp::app()->getDocument()->URL().directory());
+ }
+
+ bool useFolders = args->isSet("use-folders");
+
+ kDebug() << "directory: " << directory.prettyURL() << endl;
+
+ // the event is posted so when the QT loop begins it's processed. UMLApp process this event executing
+ // the method it provides for exporting the views. Once all the views were exported, a quit event
+ // is sent and the app finishes without user interaction
+ kapp->postEvent(UMLApp::app(), new CmdLineExportAllViewsEvent(extension, directory, useFolders));
+}
+