src/main.cc

changeset 557
04e140bdeb0b
child 564
79b23e02dcf1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.cc	Fri Dec 13 20:01:49 2013 +0200
@@ -0,0 +1,141 @@
+/*
+ *  LDForge: LDraw parts authoring CAD
+ *  Copyright (C) 2013 Santeri Piippo
+ *
+ *  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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QApplication>
+#include <QMessageBox>
+#include <QAbstractButton>
+#include <QFile>
+#include <QTextStream>
+#include "gui.h"
+#include "document.h"
+#include "misc.h"
+#include "config.h"
+#include "colors.h"
+#include "types.h"
+#include "primitives.h"
+#include "gldraw.h"
+#include "configDialog.h"
+#include "dialogs.h"
+#include "crashcatcher.h"
+
+QList<LDDocument*> g_loadedFiles;
+ForgeWindow* g_win = null;
+const QApplication* g_app = null;
+File g_file_stdout (stdout, File::Write);
+File g_file_stderr (stderr, File::Write);
+static str g_versionString, g_fullVersionString;
+
+const vertex g_origin (0.0f, 0.0f, 0.0f);
+const matrix g_identity ( {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f});
+
+cfg (Bool, firststart, true);
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+int main (int argc, char* argv[])
+{	QApplication app (argc, argv);
+	app.setOrganizationName (APPNAME);
+	app.setApplicationName (APPNAME);
+	g_app = &app;
+
+	initCrashCatcher();
+	LDDocument::setCurrent (null);
+
+	// Load or create the configuration
+	if (!Config::load())
+	{	log ("Creating configuration file...\n");
+
+		if (Config::save())
+			log ("Configuration file successfully created.\n");
+		else
+			log ("failed to create configuration file!\n");
+	}
+
+	LDPaths::initPaths();
+	initColors();
+	loadLogoedStuds();
+
+	ForgeWindow* win = new ForgeWindow;
+	newFile();
+	win->show();
+
+	// If this is the first start, get the user to configuration. Especially point
+	// them to the profile tab, it's the most important form to fill in.
+	if (firststart)
+	{	(new ConfigDialog (ConfigDialog::ProfileTab))->exec();
+		firststart = false;
+		Config::save();
+	}
+
+	loadPrimitives();
+	return app.exec();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void doPrint (File& f, initlist<StringFormatArg> args)
+{	str msg = DoFormat (args);
+	f.write (msg.toUtf8());
+	f.flush();
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+void doPrint (FILE* fp, initlist<StringFormatArg> args)
+{	str msg = DoFormat (args);
+	fwrite (msg.toStdString().c_str(), 1, msg.length(), fp);
+	fflush (fp);
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+QString versionString()
+{	if (g_versionString.length() == 0)
+	{
+#if VERSION_PATCH == 0
+		g_versionString = fmt ("%1.%2", VERSION_MAJOR, VERSION_MINOR);
+#else
+		g_versionString = fmt ("%1.%2.%3", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
+#endif // VERSION_PATCH
+	}
+
+	return g_versionString;
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+QString versionMoniker()
+{
+#if BUILD_ID == BUILD_INTERNAL
+	return "Internal";
+#elif BUILD_ID == BUILD_ALPHA
+	return "Alpha";
+#elif BUILD_ID == BUILD_BETA
+	return "Beta";
+#elif BUILD_ID == BUILD_RC
+	return fmt ("RC %1", RC_NUMBER);
+#else
+	return "";
+#endif // BUILD_ID
+}
+
+// =============================================================================
+// -----------------------------------------------------------------------------
+QString fullVersionString()
+{	return fmt ("v%1 %2", versionString(), versionMoniker());
+}
\ No newline at end of file

mercurial