From 4aa690d55de813ab4a55fa3ffb56b193ec6523b5 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 18 Jul 2015 15:39:33 +0300 Subject: [PATCH] Save and Save as. --HG-- branch : feature --- src/app/tape/tmainwindow.cpp | 135 +++++++++++++++++- src/app/tape/tmainwindow.h | 5 + src/app/tape/tmainwindow.ui | 2 +- .../dialogs/configpages/pathpage.cpp | 4 +- src/app/valentina/mainwindow.cpp | 2 +- src/libs/vformat/vmeasurements.cpp | 4 +- src/libs/vmisc/vcommonsettings.cpp | 27 ++++ src/libs/vmisc/vcommonsettings.h | 11 ++ src/libs/vmisc/vsettings.cpp | 28 +--- src/libs/vmisc/vsettings.h | 10 +- src/libs/vmisc/vtapesettings.cpp | 72 ++++++++++ src/libs/vmisc/vtapesettings.h | 5 + 12 files changed, 261 insertions(+), 44 deletions(-) diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index c8b44eda7..ce2a88f56 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -32,6 +32,10 @@ #include "dialogs/dialogabouttape.h" #include "dialogs/dialognewmeasurements.h" +#include +#include +#include + //--------------------------------------------------------------------------------------------------------------------- TMainWindow::TMainWindow(QWidget *parent) :QMainWindow(parent), @@ -39,7 +43,8 @@ TMainWindow::TMainWindow(QWidget *parent) m(nullptr), data(nullptr), mUnit(Unit::Cm), - mType(MeasurementsType::Individual) + mType(MeasurementsType::Individual), + curFile() { ui->setupUi(this); ui->tabWidget->setVisible(false); @@ -87,6 +92,9 @@ void TMainWindow::FileNew() m = new VMeasurements(mUnit, data); } + SetCurrentFile(""); + MeasurementsWasSaved(false); + InitWindow(); } else @@ -113,13 +121,88 @@ void TMainWindow::FileOpen() //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::FileSave() { - + if (curFile.isEmpty()) + { + return FileSaveAs(); + } + else + { + QString error; + bool result = SaveMeasurements(curFile, error); + if (not result) + { + QMessageBox messageBox; + messageBox.setIcon(QMessageBox::Warning); + messageBox.setInformativeText(tr("Could not save file")); + messageBox.setDefaultButton(QMessageBox::Ok); + messageBox.setDetailedText(error); + messageBox.setStandardButtons(QMessageBox::Ok); + messageBox.exec(); + } + } } //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::FileSaveAs() { + QString filters; + QString fName = tr("measurements"); + QString suffix; + if (mType == MeasurementsType::Individual) + { + filters = tr("Standard measurements (*.vst)"); + suffix = "vst"; + fName += "." + suffix; + } + else + { + filters = tr("Individual measurements (*.vit)"); + suffix = "vit"; + fName += "." + suffix; + } + QString dir; + if (curFile.isEmpty()) + { + if (mType == MeasurementsType::Individual) + { + dir = qApp->Settings()->GetPathStandardMeasurements() + "/" + fName; + } + else + { + dir = qApp->Settings()->GetPathIndividualMeasurements() + "/" + fName; + } + + } + else + { + dir = QFileInfo(curFile).absolutePath() + "/" + fName; + } + + QString fileName = QFileDialog::getSaveFileName(this, tr("Save as"), dir, filters); + + if (fileName.isEmpty()) + { + return; + } + + QFileInfo f( fileName ); + if (f.suffix().isEmpty() && f.suffix() != suffix) + { + fileName += "." + suffix; + } + QString error; + bool result = SaveMeasurements(fileName, error); + if (result == false) + { + QMessageBox messageBox; + messageBox.setIcon(QMessageBox::Warning); + messageBox.setInformativeText(tr("Could not save file")); + messageBox.setDefaultButton(QMessageBox::Ok); + messageBox.setDetailedText(error); + messageBox.setStandardButtons(QMessageBox::Ok); + messageBox.exec(); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -330,6 +413,7 @@ void TMainWindow::InitWindow() ui->actionAddCustom->setEnabled(true); ui->actionAddKnown->setEnabled(true); ui->actionReadOnly->setEnabled(true); + ui->actionSaveAs->setEnabled(true); InitTable(); } @@ -348,3 +432,50 @@ void TMainWindow::InitTable() ui->tableWidget->setColumnHidden( 4, true );// in heights } } + +//--------------------------------------------------------------------------------------------------------------------- +void TMainWindow::MeasurementsWasSaved(bool saved) +{ + setWindowModified(!saved); + ui->actionSave->setEnabled(!saved); +} + +//--------------------------------------------------------------------------------------------------------------------- +void TMainWindow::SetCurrentFile(const QString &fileName) +{ + curFile = fileName; + QString shownName = QFileInfo(curFile).fileName(); + if (curFile.isEmpty()) + { + shownName = tr("untitled"); + if (mType == MeasurementsType::Standard) + { + shownName += ".vst"; + } + else + { + shownName += ".vit"; + } + ui->labelPathToFile->setText(tr("")); + ui->pushButtonShowInFolder->setEnabled(false); + } + else + { + ui->labelPathToFile->setText(curFile); + ui->pushButtonShowInFolder->setEnabled(true); + } + shownName += "[*]"; + setWindowTitle(shownName); +} + +//--------------------------------------------------------------------------------------------------------------------- +bool TMainWindow::SaveMeasurements(const QString &fileName, QString &error) +{ + const bool result = m->SaveDocument(fileName, error); + if (result) + { + SetCurrentFile(fileName); + MeasurementsWasSaved(result); + } + return result; +} diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h index 4f362dfbb..c11e0b754 100644 --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -73,10 +73,15 @@ private: VContainer *data; Unit mUnit; MeasurementsType mType; + QString curFile; void SetupMenu(); void InitWindow(); void InitTable(); + + void MeasurementsWasSaved(bool saved); + void SetCurrentFile(const QString &fileName); + bool SaveMeasurements(const QString &fileName, QString &error); }; #endif // TMAINWINDOW_H diff --git a/src/app/tape/tmainwindow.ui b/src/app/tape/tmainwindow.ui index ed0a05f8a..ac009af45 100644 --- a/src/app/tape/tmainwindow.ui +++ b/src/app/tape/tmainwindow.ui @@ -423,7 +423,7 @@ - + Path to file diff --git a/src/app/valentina/dialogs/configpages/pathpage.cpp b/src/app/valentina/dialogs/configpages/pathpage.cpp index e244ef747..bebabc3e1 100644 --- a/src/app/valentina/dialogs/configpages/pathpage.cpp +++ b/src/app/valentina/dialogs/configpages/pathpage.cpp @@ -88,8 +88,8 @@ void PathPage::DefaultPath() switch (row) { case 1: // standard measurements - item->setText(VSettings::StandardTablesPath()); - item->setToolTip(VSettings::StandardTablesPath()); + item->setText(qApp->Settings()->StandardTablesPath()); + item->setToolTip(qApp->Settings()->StandardTablesPath()); break; case 0: // individual measurements case 2: // pattern path diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 17965b55d..2670b2f35 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -1543,7 +1543,7 @@ bool MainWindow::SaveAs() } else { - dir = QFileInfo(curFile).absolutePath() + tr("/pattern.val"); + dir = QFileInfo(curFile).absolutePath() + "/" + tr("pattern") + ".val"; } QString fileName = QFileDialog::getSaveFileName(this, tr("Save as"), dir, filters); diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp index aee1fd0f0..d13a4b5f9 100644 --- a/src/libs/vformat/vmeasurements.cpp +++ b/src/libs/vformat/vmeasurements.cpp @@ -272,7 +272,7 @@ void VMeasurements::CreateEmptyStandardFile(Unit unit, int baseSize, int baseHei mElement.appendChild(version); QDomElement ro = createElement(TagReadOnly); - const QDomText roNodeText = createTextNode(false); + const QDomText roNodeText = createTextNode("false"); ro.appendChild(roNodeText); mElement.appendChild(ro); @@ -311,7 +311,7 @@ void VMeasurements::CreateEmptyIndividualFile(Unit unit) mElement.appendChild(version); QDomElement ro = createElement(TagReadOnly); - const QDomText roNodeText = createTextNode(false); + const QDomText roNodeText = createTextNode("false"); ro.appendChild(roNodeText); mElement.appendChild(ro); diff --git a/src/libs/vmisc/vcommonsettings.cpp b/src/libs/vmisc/vcommonsettings.cpp index 90f877ba0..890f98f69 100644 --- a/src/libs/vmisc/vcommonsettings.cpp +++ b/src/libs/vmisc/vcommonsettings.cpp @@ -41,6 +41,9 @@ # include #endif +const QString VCommonSettings::SettingPathsIndividualMeasurements = QStringLiteral("paths/individual_measurements"); +const QString VCommonSettings::SettingPathsStandardMeasurements = QStringLiteral("paths/standard_measurements"); + const QString VCommonSettings::SettingConfigurationOsSeparator = QStringLiteral("configuration/osSeparator"); const QString VCommonSettings::SettingConfigurationAutosaveState = QStringLiteral("configuration/autosave/state"); const QString VCommonSettings::SettingConfigurationAutosaveTime = QStringLiteral("configuration/autosave/time"); @@ -66,6 +69,30 @@ VCommonSettings::VCommonSettings(Format format, Scope scope, const QString &orga :QSettings(format, scope, organization, application, parent) {} +//--------------------------------------------------------------------------------------------------------------------- +QString VCommonSettings::GetPathIndividualMeasurements() const +{ + return value(SettingPathsIndividualMeasurements, QDir::homePath()).toString(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VCommonSettings::SetPathIndividualMeasurements(const QString &value) +{ + setValue(SettingPathsIndividualMeasurements, value); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VCommonSettings::GetPathStandardMeasurements() const +{ + return value(SettingPathsStandardMeasurements, StandardTablesPath()).toString(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VCommonSettings::SetPathStandardMeasurements(const QString &value) +{ + setValue(SettingPathsStandardMeasurements, value); +} + //--------------------------------------------------------------------------------------------------------------------- bool VCommonSettings::GetOsSeparator() const { diff --git a/src/libs/vmisc/vcommonsettings.h b/src/libs/vmisc/vcommonsettings.h index 79eb5c452..630e21b21 100644 --- a/src/libs/vmisc/vcommonsettings.h +++ b/src/libs/vmisc/vcommonsettings.h @@ -39,6 +39,14 @@ public: VCommonSettings(Format format, Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = 0); + virtual QString StandardTablesPath()const=0 ; + + QString GetPathIndividualMeasurements() const; + void SetPathIndividualMeasurements(const QString &value); + + QString GetPathStandardMeasurements() const; + void SetPathStandardMeasurements(const QString &value); + bool GetOsSeparator() const; void SetOsSeparator(const bool &value); @@ -86,6 +94,9 @@ public: private: Q_DISABLE_COPY(VCommonSettings) + static const QString SettingPathsIndividualMeasurements; + static const QString SettingPathsStandardMeasurements; + static const QString SettingConfigurationOsSeparator; static const QString SettingConfigurationAutosaveState; static const QString SettingConfigurationAutosaveTime; diff --git a/src/libs/vmisc/vsettings.cpp b/src/libs/vmisc/vsettings.cpp index 632572841..7cca84af8 100644 --- a/src/libs/vmisc/vsettings.cpp +++ b/src/libs/vmisc/vsettings.cpp @@ -43,8 +43,6 @@ const QString VSettings::SettingConfigurationLabelLanguage = QStringLiteral("configuration/label_language"); -const QString VSettings::SettingPathsIndividualMeasurements = QStringLiteral("paths/individual_measurements"); -const QString VSettings::SettingPathsStandardMeasurements = QStringLiteral("paths/standard_measurements"); const QString VSettings::SettingPathsPattern = QStringLiteral("paths/pattern"); const QString VSettings::SettingPathsLayout = QStringLiteral("paths/layout"); @@ -90,30 +88,6 @@ void VSettings::SetLabelLanguage(const QString &value) setValue(SettingConfigurationLabelLanguage, value); } -//--------------------------------------------------------------------------------------------------------------------- -QString VSettings::GetPathIndividualMeasurements() const -{ - return value(SettingPathsIndividualMeasurements, QDir::homePath()).toString(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void VSettings::SetPathIndividualMeasurements(const QString &value) -{ - setValue(SettingPathsIndividualMeasurements, value); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VSettings::GetPathStandardMeasurements() const -{ - return value(SettingPathsStandardMeasurements, StandardTablesPath()).toString(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void VSettings::SetPathStandardMeasurements(const QString &value) -{ - setValue(SettingPathsStandardMeasurements, value); -} - //--------------------------------------------------------------------------------------------------------------------- QString VSettings::GetPathPattern() const { @@ -495,7 +469,7 @@ void VSettings::SetLayoutUnitePages(bool value) } //--------------------------------------------------------------------------------------------------------------------- -QString VSettings::StandardTablesPath() +QString VSettings::StandardTablesPath() const { const QString stPath = QStringLiteral("/tables/standard"); #ifdef Q_OS_WIN diff --git a/src/libs/vmisc/vsettings.h b/src/libs/vmisc/vsettings.h index d12977f61..9a6f38913 100644 --- a/src/libs/vmisc/vsettings.h +++ b/src/libs/vmisc/vsettings.h @@ -39,17 +39,11 @@ public: VSettings(Format format, Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = 0); - static QString StandardTablesPath(); + virtual QString StandardTablesPath() const Q_DECL_OVERRIDE; QString GetLabelLanguage() const; void SetLabelLanguage(const QString &value); - QString GetPathIndividualMeasurements() const; - void SetPathIndividualMeasurements(const QString &value); - - QString GetPathStandardMeasurements() const; - void SetPathStandardMeasurements(const QString &value); - QString GetPathPattern() const; void SetPathPattern(const QString &value); @@ -128,8 +122,6 @@ private: Q_DISABLE_COPY(VSettings) static const QString SettingConfigurationLabelLanguage; - static const QString SettingPathsIndividualMeasurements; - static const QString SettingPathsStandardMeasurements; static const QString SettingPathsPattern; static const QString SettingPathsLayout; diff --git a/src/libs/vmisc/vtapesettings.cpp b/src/libs/vmisc/vtapesettings.cpp index ee114a541..cf5de9470 100644 --- a/src/libs/vmisc/vtapesettings.cpp +++ b/src/libs/vmisc/vtapesettings.cpp @@ -28,9 +28,81 @@ #include "vtapesettings.h" +#include +#include + //--------------------------------------------------------------------------------------------------------------------- VTapeSettings::VTapeSettings(Format format, Scope scope, const QString &organization, const QString &application, QObject *parent) :VCommonSettings(format, scope, organization, application, parent) { } + +//--------------------------------------------------------------------------------------------------------------------- +QString VTapeSettings::StandardTablesPath() const +{ + const QString stPath = QStringLiteral("/tables/standard"); +#ifdef Q_OS_WIN + QDir dir(QApplication::applicationDirPath() + stPath); + if (dir.exists()) + { + return dir.absolutePath(); + } + else + { + return QApplication::applicationDirPath() + "../../valentina/bin" + stPath; + } +#elif defined(Q_OS_MAC) + QDir dirBundle(QApplication::applicationDirPath() + QStringLiteral("/../Resources") + stPath); + if (dirBundle.exists()) + { + return dirBundle.absolutePath(); + } + else + { + QDir dir1(QApplication::applicationDirPath() + stPath); + if (dir1.exists()) + { + return dir1.absolutePath(); + } + + QDir dir2(QApplication::applicationDirPath() + "../../valentina/bin" + stPath); + if (dir2.exists()) + { + return dir2.absolutePath(); + } + else + { + return QStringLiteral("/usr/share/valentina/tables/standard"); + } + } +#else // Unix + #ifdef QT_DEBUG + QDir dir(QApplication::applicationDirPath() + stPath); + if (dir.exists()) + { + return dir.absolutePath(); + } + else + { + return QApplication::applicationDirPath() + "../../valentina/bin" + stPath; + } + #else + QDir dir1(QApplication::applicationDirPath() + stPath); + if (dir1.exists()) + { + return dir1.absolutePath(); + } + + QDir dir2(QApplication::applicationDirPath() + "../../valentina/bin" + stPath); + if (dir2.exists()) + { + return dir2.absolutePath(); + } + else + { + return QStringLiteral("/usr/share/valentina/tables/standard"); + } + #endif +#endif +} diff --git a/src/libs/vmisc/vtapesettings.h b/src/libs/vmisc/vtapesettings.h index 898c87ff0..da35b6d77 100644 --- a/src/libs/vmisc/vtapesettings.h +++ b/src/libs/vmisc/vtapesettings.h @@ -37,6 +37,11 @@ class VTapeSettings : public VCommonSettings public: VTapeSettings(Format format, Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = 0); + + virtual QString StandardTablesPath()const Q_DECL_OVERRIDE; + +private: + Q_DISABLE_COPY(VTapeSettings) }; #endif // VTAPESETTINGS_H