AlbumShaper
1.0a3
|
#include <qapplication.h>
#include <qlayout.h>
#include <qtranslator.h>
#include <qtextcodec.h>
#include <qdir.h>
#include <iostream>
#include "gui/cursors.h"
#include "gui/window.h"
#include "gui/dialogs/alertDialog.h"
#include "gui/welcomeWindow/welcomeWindow.h"
#include "backend/tools/guiTools.h"
#include "config.h"
#include "configuration/configuration.h"
#include "configuration/layoutSettingsWidget.h"
#include "backend/tools/fileTools.h"
Go to the source code of this file.
Functions | |
int | main (int argc, char **argv) |
int main | ( | int | argc, |
char ** | argv | ||
) |
Definition at line 50 of file main.cpp.
References BOTTOM_LEFT, BOTTOM_RIGHT, centerWindow(), Configuration::constructSettingsDirectory(), Configuration::getBool(), Window::getConfig(), Configuration::getInt(), HANDBOOK_PATH, height, IMAGE_PATH, loadCursors(), MATERIAL_DIR, Configuration::setBool(), TEMP_DIR, TEXT_PATH, THEMES_PATH, TOP_LEFT, TOP_RIGHT, width, and XMLCONVERSION_PATH.
{ //create app QApplication a(argc, argv); //---------------------------------------------- //set material path //PLATFORM_SPECIFIC_CODE //if using mac os x material dir in bundle #if defined(Q_OS_MACX) CFURLRef pluginRef = CFBundleCopyBundleURL(CFBundleGetMainBundle()); CFStringRef macPath = CFURLCopyFileSystemPath(pluginRef, kCFURLPOSIXPathStyle); MATERIAL_DIR = QString( CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding())) + "/Contents/Resources"; //Windows #elif defined(Q_OS_WIN) MATERIAL_DIR = a.applicationDirPath(); //Linux/FreeBSD - material path may be passed in or assumed to be the local path #else if( argc > 1 ) { //user is running program from installed location (e.g. /usr/bin) //in which case we must assume material files are installed in the defined location if( QString(argv[1]).contains(QString(BIN_DIR)) != 0 ) { MATERIAL_DIR = DATA_DIR; } //if the above is not the case assume the user is running a non-installed copy of Album Shaper // (say right after compiling it, in which case the materials should be in the same location so //use application dir path directly else { MATERIAL_DIR = QString(argv[1]); } } //if the binary is run directly assume we're in the same directory as it and use the //current directory to load materials from else MATERIAL_DIR = "./"; #endif //---------------------------------------------- //set image path IMAGE_PATH = MATERIAL_DIR + "/images/"; //---------------------------------------------- //set handbook path, attempt to use locale specific directory, otherwise fall back on english default HANDBOOK_PATH = MATERIAL_DIR + "/handbook_" + QTextCodec::locale() + "/"; QDir handbookDir( HANDBOOK_PATH ); if(!handbookDir.exists()) HANDBOOK_PATH = MATERIAL_DIR + "/handbook/"; //---------------------------------------------- //set text path, attempt to use locale specific directory, otherwise fall back on english default TEXT_PATH = MATERIAL_DIR + "/text_" + QTextCodec::locale() + "/"; QDir textDir( TEXT_PATH ); if(!textDir.exists()) TEXT_PATH = MATERIAL_DIR + "/text/"; //---------------------------------------------- //set themes path THEMES_PATH = MATERIAL_DIR + "/themes/"; //---------------------------------------------- //set xml conversion path XMLCONVERSION_PATH = MATERIAL_DIR + "/xmlConversion/"; //---------------------------------------------- //check that directory where user settings is stored exists, if not create //that directory at this time. if( !Configuration::constructSettingsDirectory() ) { std::cout << "Error! Unable to make configurations directory!\n"; return -1; } //---------------------------------------------- //where temporary files can be placed //PLATFORM_SPECIFIC_CODE bool tempDirMade = true; QDir homeDir; //Mac OS X #if defined(Q_OS_MACX) homeDir = QDir::homeDirPath(); homeDir.cd("Library"); homeDir.cd("Application Support"); if(!homeDir.exists("Album Shaper")) { tempDirMade = homeDir.mkdir("Album Shaper"); } TEMP_DIR = QDir::convertSeparators( QDir::homeDirPath() + QString("/Library/Application Support/Album Shaper") ); //Windows #elif defined(Q_OS_WIN) QString folderLoc; if( !getWindowsFolderLocation(APPLICATION_DATA, folderLoc) ) { std::cout << "Error! Unable to identify Application Data folder!\n"; return -1; } QDir applicationDataDir( folderLoc ); if(!applicationDataDir.exists("Album Shaper")) { tempDirMade = applicationDataDir.mkdir("Album Shaper"); } TEMP_DIR = QDir::convertSeparators ( folderLoc + QString("/Album Shaper") ); //Unix/Linux/BSD #else homeDir = QDir::homeDirPath(); if(!homeDir.exists(".albumShaper")) { tempDirMade = homeDir.mkdir(".albumShaper"); } TEMP_DIR = QDir::homeDirPath() + QString("/.albumShaper"); #endif //if unable to make configuration directory then abort if(!tempDirMade) { std::cout << "Error! Unable to make temp files directory!\n"; return -1; } //---------------------------------------------- //create translator for current locale and attempt to install QTranslator translator( 0 ); translator.load( QString("AlbumShaper_") + // "sv", QTextCodec::locale(), MATERIAL_DIR + "/translations"); a.installTranslator( &translator ); //create main window and show Window window; a.setMainWidget( &window ); //---------------------------------------------- //set window size and position Configuration* config = window.getConfig(); if( config->getBool( "layout", "restoreWindowPlacementSize") ) { window.resize( config->getInt( "layout", "windowWidth" ), config->getInt( "layout", "windowHeight" ) ); window.move( config->getInt( "layout", "windowPosX" ), config->getInt( "layout", "windowPosY" ) ); } else { QDesktopWidget *desktop = QApplication::desktop(); int size = config->getInt( "layout", "defaultWindowSize" ); int placement = config->getInt( "layout", "defaultWindowPlacement" ); QRect availRect = desktop->availableGeometry(); int width = (size*availRect.width()) / 100; int height = (size*availRect.height()) / 100; window.resize( width, height ); width = window.frameGeometry().width(); height = window.frameGeometry().height(); int x, y; //top left if(placement == TOP_LEFT) { x = availRect.left(); y = availRect.top(); } //top right else if(placement == TOP_RIGHT) { x = availRect.right() - width; y = availRect.top(); } //bottom left else if(placement == BOTTOM_LEFT) { x = availRect.left(); y = availRect.bottom() - height; } //bottom right else if(placement == BOTTOM_RIGHT) { x = availRect.right() - width; y = availRect.bottom() - height; } //center else { x = availRect.left() + (availRect.width() - width) / 2; y = availRect.top() + (availRect.height() - height) / 2; } //place window window.move( x, y ); } window.show(); //load cursors loadCursors(); //----------------------------------- //if this is a CVS build and cvsWarn set warn //user that application is potentially unstable! #ifdef CVS_CODE if( config->getBool ( "misc", "cvsWarn" ) ) { AlertDialog alert( "Warning! Unstable build!", QString("Warning! You are running a potentially unstable (CVS) build of Album Shaper! It is strongly suggested you only use this copy for testing and evaluation purposes. Data loss may occur!"), "alertIcons/warning.png", &window ); alert.exec(); } #endif //----------------------------------- //if this is the first time the program is being run then show welcome screen WelcomeWindow* welcome; if(config->getBool( "misc", "firstRun" ) ) { welcome = new WelcomeWindow(); welcome->show(); centerWindow(welcome); config->setBool( "misc", "firstRun", false ); } //----------------------------------- return a.exec(); }