initial import
[vym] / main.cpp
diff --git a/main.cpp b/main.cpp
new file mode 100644 (file)
index 0000000..d680ae4
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,219 @@
+#include <QApplication>
+#include <QtGlobal>
+
+#include "flagrowobj.h"
+#include "mainwindow.h"
+#include "options.h"
+#include "settings.h"
+#include "version.h"
+
+#if defined(Q_OS_WIN32)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#endif
+
+// Global variables
+TextEditor *textEditor;                        // used in Constr. of LinkableMapObj
+                                                               // initialized in mainwindow
+QString vymName;
+QString vymVersion;
+QString vymBuildDate;
+QString vymCodeName;
+
+Main *mainWindow;                              // used in BranchObj::select()                                                          
+QString tmpVymDir;                             // All temp files go there, created in mainwindow
+QString clipboardDir;                  // Clipboard used in all mapEditors
+QString clipboardFile;                 // Clipboard used in all mapEditors
+QDir vymBaseDir;                               // Containing all styles, scripts, images, ...
+QDir lastImageDir;
+QDir lastFileDir;
+#if defined(Q_OS_WIN32)
+QDir vymInstallDir;
+#endif
+QString iconPath;                              // Pointing to icons used for toolbars
+QString flagsPath;                             // Pointing to flags
+bool clipboardEmpty;                   
+bool debug;                                            // global debugging flag
+FlagRowObj *systemFlagsDefault;        // used to copy from in LinkableMapObj
+FlagRowObj *standardFlagsDefault;
+
+
+Settings settings ("InSilmaril","vym"); // Organization, Application name
+
+Options options;
+ImageIO imageIO;
+
+int statusbarTime=3500;
+
+int main(int argc, char* argv[])
+{
+       //Q_INIT_RESOURCE (application);
+
+    QApplication app(argc,argv);
+
+       vymName=__VYM_NAME;
+       vymVersion=__VYM_VERSION;
+       vymBuildDate=__VYM_BUILD_DATE;
+       vymCodeName=__VYM_CODENAME;
+
+
+       // Reading and initializing options commandline options
+       options.add ("debug", Option::Switch, "d", "debug");
+       options.add ("version", Option::Switch, "v","version");
+       options.add ("local", Option::Switch, "l", "local");
+       options.add ("help", Option::Switch, "h", "help");
+       options.add ("quit", Option::Switch, "q", "quit");
+       options.add ("run", Option::String, "r", "run");
+       options.add ("test", Option::String, "t", "test");
+       options.setHelpText (
+               "VYM - View Your Mind\n"
+               "--------------------\n\n"
+               "Information about vym can be found in vym.pdf,\n"
+               "which should be part of the vym package.\n"
+               "It is also available at the project homepage:\n\n"
+               "http://www.InSilmaril.de/vym\n");
+       if (options.parse())
+       {
+               cout << endl << qPrintable( options.getHelpText())<<endl;
+               return 1;
+       }
+
+       debug=options.isOn ("debug");
+
+       if (options.isOn ("version"))
+       {
+               cout << "VYM - View Your Mind (c) 2004-2007 Uwe Drechsel "  << endl
+                       <<"   Version: "<<__VYM_VERSION <<endl
+                       <<"Build date: "<<__VYM_BUILD_DATE << endl
+                       <<"  "<<__VYM_CODENAME<<endl;
+                       
+               return 0;       
+       }               
+       
+       // Use /usr/share/vym or /usr/local/share/vym or . ?
+       // First try options
+       if (options.isOn ("local"))
+       {
+               vymBaseDir.setPath (vymBaseDir.currentDirPath());
+       } else
+       // then look for environment variable
+       if (getenv("VYMHOME")!=0)
+       {
+               vymBaseDir.setPath (getenv("VYMHOME"));
+       } else
+       // ok, let's find my way on my own
+       {
+               #if defined (Q_OS_MACX)
+                       vymBaseDir.setPath(vymBaseDir.currentDirPath() +"/vym.app/Contents/Resources");
+
+        #elif defined (Q_OS_WIN32)
+            QString basePath;
+
+            wchar_t wbuf[512];
+            if (GetModuleFileName(NULL, wbuf, 512))
+            {
+                QString mfn(QString::fromWCharArray(wbuf));
+                mfn.replace('\\', '/');
+                if (mfn.endsWith("/bin/vym.exe", Qt::CaseInsensitive))
+                {
+                    mfn.chop(12);
+                    basePath = mfn;
+                }
+            }
+
+            if (basePath.isEmpty())
+                basePath = vymBaseDir.currentDirPath();
+
+            vymInstallDir.setPath(basePath);
+            vymBaseDir.setPath(basePath + "/share/vym");
+
+               #else
+                       vymBaseDir.setPath ("/usr/share/vym");
+                       if (!vymBaseDir.exists())
+                       {
+                               vymBaseDir.setPath ("/usr/local/share/vym");
+                               if (!vymBaseDir.exists())
+                                       vymBaseDir.setPath(vymBaseDir.currentDirPath() );
+                       }               
+               #endif
+       }
+
+#ifdef Q_OS_WIN32
+        iconPath=vymBaseDir.path()+"\\icons\\";
+        flagsPath=vymBaseDir.path()+"\\flags\\";
+#else
+        iconPath=vymBaseDir.path()+"/icons/";
+        flagsPath=vymBaseDir.path()+"/flags/";
+#endif
+       // Some directories
+       lastImageDir=QDir().current();
+       lastFileDir=QDir().current();
+
+       if (options.isOn ("help"))
+       {
+               cout << qPrintable (options.getHelpText())<<endl;
+               return 0;       
+       }       
+
+       // Initialize translations
+       QTranslator translator (0);
+       translator.load( QString("vym_")+QTextCodec::locale(), vymBaseDir.path() + "/lang");
+    app.installTranslator( &translator );
+
+       // Initializing the row of system flags
+       // is done in first call to MapEditor(),
+       // because we need at least one canvas first
+       systemFlagsDefault=NULL;
+       standardFlagsDefault=NULL;
+
+       // Initialize window of TextEditor
+       textEditor = new TextEditor();
+       textEditor->setIcon (QPixmap (iconPath+"vym-editor.png"));
+
+       // Initialize mainwindow 
+#if defined(Q_OS_WIN32)
+    Main m(0, 0, (Qt::Window | Qt::MSWindowsOwnDC));
+#else
+    Main m;
+#endif
+
+       //m.resize(m.sizeHint());
+       m.setIcon (QPixmap (iconPath+"vym-48x48.png"));
+       m.show();
+       m.fileNew();
+       m.loadCmdLine();
+
+       // Run script
+       if (options.isOn ("run"))
+       {
+               QString script;
+               QString fn=options.getArg ("run");
+               if ( !fn.isEmpty() )
+               {
+                       QFile f( fn );
+                       if ( !f.open( QIODevice::ReadOnly ) )
+                       {
+                               QMessageBox::warning(0, 
+                                       QObject::tr("Error"),
+                                       QObject::tr("Couldn't open %1.\n").arg(fn));
+                               return 0;
+                       }       
+
+                       QTextStream ts( &f );
+                       script= ts.read();
+                       f.close();
+                       m.setScript (script);
+                       m.runScriptEverywhere (script);
+               }
+       }               
+       
+       // For benchmarking we may want to quit instead of entering event loop
+       if (options.isOn ("quit"))
+       {
+               return 0;
+       }       
+
+    QObject::connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) );
+
+    return app.exec();
+}