diff --git a/CMakeLists.txt b/CMakeLists.txt index 49fef5ea..a9a4c3e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ PROJECT( FindObject ) SET(PROJECT_PREFIX find_object) ADD_DEFINITIONS(-DPROJECT_PREFIX="${PROJECT_PREFIX}") +ADD_DEFINITIONS(-DPROJECT_NAME="${PROJECT_NAME}") ####################### # VERSION diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2d73fd11..e93d2418 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -32,12 +32,7 @@ MainWindow::MainWindow(QWidget * parent) : connect(&cameraTimer_, SIGNAL(timeout()), this, SLOT(update())); QByteArray geometry; -#ifdef WIN32 - //TODO Maybe use the Documents and Settings - Settings::loadSettings(Settings::iniDefaultFileName, &geometry); -#else - Settings::loadSettings(QString("%1/.%2/%3").arg(QDir::homePath()).arg(PROJECT_PREFIX).arg(Settings::iniDefaultFileName), &geometry); -#endif + Settings::loadSettings(Settings::iniDefaultPath(), &geometry); this->restoreGeometry(geometry); ui_->toolBox->setupUi(); @@ -78,18 +73,13 @@ MainWindow::~MainWindow() void MainWindow::closeEvent(QCloseEvent * event) { -#ifdef WIN32 - //TODO Maybe use the Documents and Settings - Settings::saveSettings(Settings::iniDefaultFileName, this->saveGeometry()); -#else - Settings::saveSettings(QString("%1/.%2/%3").arg(QDir::homePath()).arg(PROJECT_PREFIX).arg(Settings::iniDefaultFileName), this->saveGeometry()); -#endif + Settings::saveSettings(Settings::iniDefaultPath(), this->saveGeometry()); QMainWindow::closeEvent(event); } void MainWindow::loadObjects() { - QString fileName = QFileDialog::getOpenFileName(this, tr("Load objects..."), QDir::homePath(), "*.obj"); + QString fileName = QFileDialog::getOpenFileName(this, tr("Load objects..."), Settings::workingDirectory(), "*.obj"); if(!fileName.isEmpty()) { QFile file(fileName); @@ -123,7 +113,7 @@ void MainWindow::loadObjects() } void MainWindow::saveObjects() { - QString fileName = QFileDialog::getSaveFileName(this, tr("Save objects..."), (QDir::homePath() + "/") +Settings::currentDetectorType()+Settings::currentDescriptorType()+QString("%1.obj").arg(objects_.size()), "*.obj"); + QString fileName = QFileDialog::getSaveFileName(this, tr("Save objects..."), (Settings::workingDirectory() + "/") +Settings::currentDetectorType()+Settings::currentDescriptorType()+QString("%1.obj").arg(objects_.size()), "*.obj"); if(!fileName.isEmpty()) { if(!fileName.endsWith(".obj")) diff --git a/src/Object.cpp b/src/Object.cpp index d8c90fcf..607f45a7 100644 --- a/src/Object.cpp +++ b/src/Object.cpp @@ -16,6 +16,7 @@ #include "Object.h" #include "KeypointItem.h" #include "qtipl.h" +#include "Settings.h" #include @@ -383,7 +384,7 @@ void Object::contextMenuEvent(QContextMenuEvent * event) QString text; if(_savedFileName.isEmpty()) { - _savedFileName=QDir::homePath()+"/figure.png"; + _savedFileName=Settings::workingDirectory()+"/figure.png"; } text = QFileDialog::getSaveFileName(this, tr("Save figure to ..."), _savedFileName, "*.png *.xpm *.jpg *.pdf"); if(!text.isEmpty()) diff --git a/src/Settings.cpp b/src/Settings.cpp index aa015b8e..908a2420 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -10,17 +10,40 @@ #include "Camera.h" #include #include +#include #include ParametersMap Settings::defaultParameters_; ParametersMap Settings::parameters_; ParametersType Settings::parametersType_; Settings Settings::dummyInit_; -const char * Settings::iniDefaultFileName = "config.ini"; + +QString Settings::workingDirectory() +{ +#ifdef WIN32 + return QString("%1/Documents/%2").arg(QDir::homePath()).arg(PROJECT_NAME); +#else + return QString("%1").arg(QDir::homePath()); +#endif +} + +QString Settings::iniDefaultPath() +{ +#ifdef WIN32 + return QString("%1/Documents/%2/%3").arg(QDir::homePath()).arg(PROJECT_NAME).arg(Settings::iniDefaultFileName()); +#else + return QString("%1/.%2/%3").arg(QDir::homePath()).arg(PROJECT_PREFIX).arg(Settings::iniDefaultFileName()); +#endif +} void Settings::loadSettings(const QString & fileName, QByteArray * windowGeometry) { - QSettings ini(fileName, QSettings::IniFormat); + QString path = fileName; + if(fileName.isEmpty()) + { + path = iniDefaultPath(); + } + QSettings ini(path, QSettings::IniFormat); for(ParametersMap::const_iterator iter = defaultParameters_.begin(); iter!=defaultParameters_.end(); ++iter) { const QString & key = iter.key(); @@ -40,12 +63,17 @@ void Settings::loadSettings(const QString & fileName, QByteArray * windowGeometr } } - printf("Settings loaded from %s\n", fileName.toStdString().c_str()); + printf("Settings loaded from %s\n", path.toStdString().c_str()); } void Settings::saveSettings(const QString & fileName, const QByteArray & windowGeometry) { - QSettings ini(fileName, QSettings::IniFormat); + QString path = fileName; + if(fileName.isEmpty()) + { + path = iniDefaultPath(); + } + QSettings ini(path, QSettings::IniFormat); for(ParametersMap::const_iterator iter = parameters_.begin(); iter!=parameters_.end(); ++iter) { QString type = Settings::getParametersType().value(iter.key()); @@ -62,7 +90,7 @@ void Settings::saveSettings(const QString & fileName, const QByteArray & windowG { ini.setValue("windowGeometry", windowGeometry); } - printf("Settings saved to %s\n", fileName.toStdString().c_str()); + printf("Settings saved to %s\n", path.toStdString().c_str()); } cv::FeatureDetector * Settings::createFeaturesDetector() diff --git a/src/Settings.h b/src/Settings.h index 27b2bc31..503b7b02 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -116,10 +116,12 @@ class Settings public: virtual ~Settings(){} - static const char * iniDefaultFileName; // "config.ini" + static QString workingDirectory(); + static QString iniDefaultPath(); + static QString iniDefaultFileName() {return "config.ini";} - static void loadSettings(const QString & fileName = iniDefaultFileName, QByteArray * windowGeometry = 0); - static void saveSettings(const QString & fileName = iniDefaultFileName, const QByteArray & windowGeometry = QByteArray()); + static void loadSettings(const QString & fileName = QString(), QByteArray * windowGeometry = 0); + static void saveSettings(const QString & fileName = QString(), const QByteArray & windowGeometry = QByteArray()); static const ParametersMap & getDefaultParameters() {return defaultParameters_;} static const ParametersMap & getParameters() {return parameters_;}