/************************************************************************ ** ** @file vcommonsettings.cpp ** @author Roman Telezhynskyi ** @date 15 7, 2015 ** ** @brief ** @copyright ** This source code is part of the Valentine project, a pattern making ** program, whose allow create and modeling patterns of clothing. ** Copyright (C) 2015 Valentina project ** All Rights Reserved. ** ** Valentina 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. ** ** Valentina 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 Valentina. If not, see . ** *************************************************************************/ #include "vcommonsettings.h" #include #include #include #include #include #include #include #include #include #include #include "../vmisc/def.h" #include "../vmisc/vmath.h" class QDate; const QString VCommonSettings::SettingPathsIndividualMeasurements = QStringLiteral("paths/individual_measurements"); const QString VCommonSettings::SettingPathsStandardMeasurements = QStringLiteral("paths/standard_measurements"); const QString VCommonSettings::SettingPathsTemplates = QStringLiteral("paths/templates"); const QString VCommonSettings::SettingConfigurationOsSeparator = QStringLiteral("configuration/osSeparator"); const QString VCommonSettings::SettingConfigurationAutosaveState = QStringLiteral("configuration/autosave/state"); const QString VCommonSettings::SettingConfigurationAutosaveTime = QStringLiteral("configuration/autosave/time"); const QString VCommonSettings::SettingConfigurationSendReportState = QStringLiteral("configuration/send_report/state"); const QString VCommonSettings::SettingConfigurationLocale = QStringLiteral("configuration/locale"); const QString VCommonSettings::SettingPMSystemCode = QStringLiteral("configuration/pmscode"); const QString VCommonSettings::SettingConfigurationUnit = QStringLiteral("configuration/unit"); const QString VCommonSettings::SettingConfigurationConfirmItemDeletion = QStringLiteral("configuration/confirm_item_deletion"); const QString VCommonSettings::SettingConfigurationToolBarStyle = QStringLiteral("configuration/tool_bar_style"); const QString VCommonSettings::SettingPatternUser = QStringLiteral("pattern/user"); const QString VCommonSettings::SettingPatternUndo = QStringLiteral("pattern/undo"); const QString VCommonSettings::SettingPatternForbidFlipping = QStringLiteral("pattern/forbidFlipping"); const QString VCommonSettings::SettingGeneralRecentFileList = QStringLiteral("recentFileList"); const QString VCommonSettings::SettingGeneralRestoreFileList = QStringLiteral("restoreFileList"); const QString VCommonSettings::SettingGeneralGeometry = QStringLiteral("geometry"); const QString VCommonSettings::SettingGeneralWindowState = QStringLiteral("windowState"); const QString VCommonSettings::SettingGeneralToolbarsState = QStringLiteral("toolbarsState"); const QString VCommonSettings::SettingPreferenceDialogSize = QStringLiteral("preferenceDialogSize"); const QString VCommonSettings::SettingLatestSkippedVersion = QStringLiteral("lastestSkippedVersion"); const QString VCommonSettings::SettingDateOfLastRemind = QStringLiteral("dateOfLastRemind"); const QString VCommonSettings::SettingUserDefinedMaterials = QStringLiteral("configuration/userDefinedMaterials"); static const QString commonIniFilename = QStringLiteral("common"); namespace { //--------------------------------------------------------------------------------------------------------------------- bool SymlinkCopyDirRecursive(const QString &fromDir, const QString &toDir, bool replaceOnConflit) { QDir dir; dir.setPath(fromDir); foreach (QString copyFile, dir.entryList(QDir::Files)) { const QString from = fromDir + QDir::separator() + copyFile; const QString to = toDir + QDir::separator() + copyFile; if (QFile::exists(to)) { if (replaceOnConflit) { if (QFile::remove(to) == false) { return false; } } else { continue; } } if (QFile::link(from, to) == false) { return false; } } foreach (QString copyDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { const QString from = fromDir + QDir::separator() + copyDir; const QString to = toDir + QDir::separator() + copyDir; if (dir.mkpath(to) == false) { return false; } if (SymlinkCopyDirRecursive(from, to, replaceOnConflit) == false) { return false; } } return true; } } //--------------------------------------------------------------------------------------------------------------------- VCommonSettings::VCommonSettings(Format format, Scope scope, const QString &organization, const QString &application, QObject *parent) :QSettings(format, scope, organization, application, parent) {} //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::SharePath(const QString &shareItem) { #ifdef Q_OS_WIN return QApplication::applicationDirPath() + shareItem; #elif defined(Q_OS_MAC) QDir dirBundle(QApplication::applicationDirPath() + QStringLiteral("/../Resources") + shareItem); if (dirBundle.exists()) { return dirBundle.absolutePath(); } else { QDir appDir = QDir(qApp->applicationDirPath()); appDir.cdUp(); appDir.cdUp(); appDir.cdUp(); QDir dir(appDir.absolutePath() + shareItem); if (dir.exists()) { return dir.absolutePath(); } else { return VCommonSettings::unixStandardSharePath + shareItem; } } #else // Unix #ifdef QT_DEBUG return QApplication::applicationDirPath() + shareItem; #else QDir dir(QApplication::applicationDirPath() + shareItem); if (dir.exists()) { return dir.absolutePath(); } else { return VCommonSettings::unixStandardSharePath + shareItem; } #endif #endif } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::StandardTablesPath() { return SharePath(QStringLiteral("/tables/standard")); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::StandardTemplatesPath() { return SharePath(QStringLiteral("/tables/templates")); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::PrepareStandardTemplates(const QString & currentPath) { QDir standardPath(VCommonSettings::StandardTemplatesPath()); const QDir localdata (VCommonSettings::GetDefPathTemplate()); if (currentPath == VCommonSettings::GetDefPathTemplate() && standardPath.exists() && not localdata.exists()) { if (localdata.mkpath(".")) { SymlinkCopyDirRecursive(VCommonSettings::StandardTemplatesPath(), VCommonSettings::GetDefPathTemplate(), false); } } } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::PrepareStandardTables(const QString ¤tPath) { QDir standardPath(VCommonSettings::StandardTablesPath()); const QDir localdata (VCommonSettings::GetDefPathStandardMeasurements()); if (currentPath == VCommonSettings::GetDefPathStandardMeasurements() && standardPath.exists() && not localdata.exists()) { if (localdata.mkpath(".")) { SymlinkCopyDirRecursive(VCommonSettings::StandardTablesPath(), VCommonSettings::GetDefPathStandardMeasurements(), false); } } } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetDefPathIndividualMeasurements() { return QDir::homePath() + QLatin1String("/valentina/") + tr("measurements") + QLatin1String("/") + tr("individual"); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetPathIndividualMeasurements() const { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); return settings.value(SettingPathsIndividualMeasurements, GetDefPathIndividualMeasurements()).toString(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetPathIndividualMeasurements(const QString &value) { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); settings.setValue(SettingPathsIndividualMeasurements, value); settings.sync(); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetDefPathStandardMeasurements() { return QDir::homePath() + QLatin1String("/valentina/") + tr("measurements") + QLatin1String("/") + tr("multisize"); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetPathStandardMeasurements() const { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); return settings.value(SettingPathsStandardMeasurements, GetDefPathStandardMeasurements()).toString(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetPathStandardMeasurements(const QString &value) { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); settings.setValue(SettingPathsStandardMeasurements, value); settings.sync(); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetDefPathTemplate() { return QDir::homePath() + QLatin1String("/valentina/") + tr("templates"); } //--------------------------------------------------------------------------------------------------------------------- QString VCommonSettings::GetPathTemplate() const { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); return settings.value(SettingPathsTemplates, GetDefPathTemplate()).toString(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetPathTemplate(const QString &value) { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); settings.setValue(SettingPathsTemplates, value); settings.sync(); } //--------------------------------------------------------------------------------------------------------------------- bool VCommonSettings::GetOsSeparator() const { return value(SettingConfigurationOsSeparator, 1).toBool(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetOsSeparator(const bool &value) { setValue(SettingConfigurationOsSeparator, value); } //--------------------------------------------------------------------------------------------------------------------- bool VCommonSettings::GetAutosaveState() const { return value(SettingConfigurationAutosaveState, 1).toBool(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetAutosaveState(const bool &value) { setValue(SettingConfigurationAutosaveState, value); } //--------------------------------------------------------------------------------------------------------------------- int VCommonSettings::GetAutosaveTime() const { bool ok = false; int val = value(SettingConfigurationAutosaveTime, 1).toInt(&ok); if (ok == false) { qDebug()<<"Could not convert value"<format(), this->scope(), this->organizationName(), commonIniFilename); return settings.value(SettingLatestSkippedVersion, 0x0).toInt(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetLatestSkippedVersion(int value) { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); settings.setValue(SettingLatestSkippedVersion, value); settings.sync(); } //--------------------------------------------------------------------------------------------------------------------- QDate VCommonSettings::GetDateOfLastRemind() const { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); return settings.value(SettingDateOfLastRemind, QDate(1900, 1, 1)).toDate(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetDateOfLastRemind(const QDate &date) { QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); settings.setValue(SettingDateOfLastRemind, date); settings.sync(); } //--------------------------------------------------------------------------------------------------------------------- QStringList VCommonSettings::GetUserDefinedMaterials() const { return value(SettingUserDefinedMaterials).toStringList(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::AddUserDefinedMaterial(QString qsMaterial) { QStringList qsl = GetUserDefinedMaterials(); qsl << qsMaterial; setValue(SettingUserDefinedMaterials, qsl); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::ClearUserDefinedMaterial() { QStringList qsl; setValue(SettingUserDefinedMaterials, qsl); } //--------------------------------------------------------------------------------------------------------------------- bool VCommonSettings::GetForbidWorkpieceFlipping() const { return value(SettingPatternForbidFlipping, false).toBool(); } //--------------------------------------------------------------------------------------------------------------------- void VCommonSettings::SetForbidWorkpieceFlipping(bool value) { setValue(SettingPatternForbidFlipping, value); }