1 #include <QApplication>
2 #include <QtDBus/QDBusConnection>
7 #include "findwidget.h"
8 #include "findresultwidget.h"
10 #include "flagrowobj.h"
11 #include "mainwindow.h"
16 #if defined(Q_OS_WIN32)
17 #define WIN32_LEAN_AND_MEAN
21 #include <sys/types.h> // To retrieve PID for use in DBUS
25 TextEditor *textEditor; // used in Constr. of LinkableMapObj
26 // initialized in mainwindow
31 QString vymInstanceName;
33 Main *mainWindow; // used in BranchObj::select()
34 FindWidget *findWidget;
35 FindResultWidget *findResultWidget;
37 QDBusConnection dbusConnection= QDBusConnection::sessionBus();
39 QString tmpVymDir; // All temp files go there, created in mainwindow
40 QString clipboardDir; // Clipboard used in all mapEditors
41 QString clipboardFile; // Clipboard used in all mapEditors
42 QDir vymBaseDir; // Containing all styles, scripts, images, ...
45 #if defined(Q_OS_WIN32)
48 QString iconPath; // Pointing to icons used for toolbars
49 QString flagsPath; // Pointing to flags
51 bool debug; // global debugging flag
52 FlagRow *systemFlagsMaster;
53 FlagRow *standardFlagsMaster;
55 Settings settings ("InSilmaril","vym"); // Organization, Application name
60 int statusbarTime=3500;
62 int main(int argc, char* argv[])
64 //Q_INIT_RESOURCE (application);
66 QApplication app(argc,argv);
69 vymVersion=__VYM_VERSION;
70 vymBuildDate=__VYM_BUILD_DATE;
71 vymCodeName=__VYM_CODENAME;
73 // Reading and initializing options commandline options
74 options.add ("debug", Option::Switch, "d", "debug");
75 options.add ("help", Option::Switch, "h", "help");
76 options.add ("local", Option::Switch, "l", "local");
77 options.add ("name", Option::String, "n", "name");
78 options.add ("quit", Option::Switch, "q", "quit");
79 options.add ("run", Option::String, "r", "run");
80 options.add ("shortcuts", Option::Switch, "s", "shortcuts");
81 options.add ("shortcutsLaTeX", Option::Switch, "sl", "shortcutsLaTeX");
82 options.add ("version", Option::Switch, "v","version");
84 "VYM - View Your Mind\n"
85 "--------------------\n\n"
86 "Information about vym can be found in vym.pdf,\n"
87 "which should be part of the vym package.\n"
88 "It is also available at the project homepage:\n\n"
89 "http://www.InSilmaril.de/vym\n\n"
90 "Usage: vym [OPTION]... [FILE]... \n"
91 "Open FILEs with vym\n\n"
92 "-d debug Show debugging output\n"
93 "-h help Show this help text\n"
94 "-l local Run with ressources in current directory\n"
95 "-n STRING name Set name of instance for DBus access\n"
96 "-q quit Quit immediatly after start for benchmarking\n"
97 "-r FILE run Run script\n"
98 "-s shortcuts Show Keyboard shortcuts on start\n"
99 "-sl LaTeX Show Keyboard shortcuts in LaTeX format on start\n"
100 "-v version Show vym version\n"
104 cout << endl << qPrintable( options.getHelpText())<<endl;
108 debug=options.isOn ("debug");
110 if (options.isOn ("version"))
112 cout << "VYM - View Your Mind (c) 2004-2010 Uwe Drechsel " << endl
113 <<" Version: "<<__VYM_VERSION <<endl
114 <<"Build date: "<<__VYM_BUILD_DATE << endl
115 <<" "<<__VYM_CODENAME<<endl;
121 if (debug) cout << "PID="<<getpid()<<endl;
122 QString pidString=QString ("%1").arg(getpid());
123 if (!dbusConnection.registerService ("org.insilmaril.vym-"+pidString))
125 fprintf(stderr, "%s\n",
126 qPrintable(QDBusConnection::sessionBus().lastError().message()));
130 if (options.isOn ("name"))
131 vymInstanceName=options.getArg ("name");
133 vymInstanceName=pidString;
136 // Use /usr/share/vym or /usr/local/share/vym or . ?
138 if (options.isOn ("local"))
140 vymBaseDir.setPath (vymBaseDir.currentDirPath());
142 // then look for environment variable
143 if (getenv("VYMHOME")!=0)
145 vymBaseDir.setPath (getenv("VYMHOME"));
147 // ok, let's find my way on my own
149 #if defined (Q_OS_MACX)
150 vymBaseDir.setPath(vymBaseDir.currentDirPath() +"/vym.app/Contents/Resources");
152 #elif defined (Q_OS_WIN32)
156 if (GetModuleFileName(NULL, wbuf, 512))
158 QString mfn(QString::fromWCharArray(wbuf));
159 mfn.replace('\\', '/');
160 if (mfn.endsWith("/bin/vym.exe", Qt::CaseInsensitive))
167 if (basePath.isEmpty())
168 basePath = vymBaseDir.currentDirPath();
170 vymInstallDir.setPath(basePath);
171 vymBaseDir.setPath(basePath + "/share/vym");
174 vymBaseDir.setPath ("/usr/share/vym");
175 if (!vymBaseDir.exists())
177 vymBaseDir.setPath ("/usr/local/share/vym");
178 if (!vymBaseDir.exists())
179 vymBaseDir.setPath(vymBaseDir.currentDirPath() );
184 iconPath=vymBaseDir.path()+"/icons/";
185 flagsPath=vymBaseDir.path()+"/flags/";
188 lastImageDir=QDir().current();
189 lastFileDir=QDir().current();
191 if (options.isOn ("help"))
193 cout << qPrintable (options.getHelpText())<<endl;
197 // Initialize translations
198 QTranslator translator (0);
199 translator.load( QString("vym_")+QTextCodec::locale(), vymBaseDir.path() + "/lang");
200 app.installTranslator( &translator );
202 // Initializing the master rows of flags
203 systemFlagsMaster=new FlagRow;
204 systemFlagsMaster->setName ("systemFlagsMaster");
205 standardFlagsMaster=new FlagRow;
206 standardFlagsMaster->setName ("standardFlagsMaster");
209 // Initialize window of TextEditor
210 textEditor = new TextEditor();
211 textEditor->setIcon (QPixmap (iconPath+"vym-editor.png"));
213 // Initialize mainwindow
214 #if defined(Q_OS_WIN32)
215 Main m(0, 0, (Qt::Window | Qt::MSWindowsOwnDC));
220 //m.resize(m.sizeHint());
221 m.setIcon (QPixmap (iconPath+"vym.png"));
224 // Paint Mainwindow first time
225 qApp->processEvents();
230 if (options.isOn ("run"))
233 QString fn=options.getArg ("run");
237 if ( !f.open( QIODevice::ReadOnly ) )
239 QMessageBox::warning(0,
240 QObject::tr("Error"),
241 QObject::tr("Couldn't open %1.\n").arg(fn));
245 QTextStream ts( &f );
248 m.setScript (script);
249 m.runScriptEverywhere (script);
253 // For benchmarking we may want to quit instead of entering event loop
254 if (options.isOn ("quit"))
259 // Enable some last minute cleanup
260 QObject::connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) );