From a950a9f59bbc68d328595247794ed9832cf360dd Mon Sep 17 00:00:00 2001 From: dismine Date: Sat, 15 Mar 2014 22:51:12 +0200 Subject: [PATCH] Choose individual measurements. --HG-- branch : feature --- .../app/dialogindividualmeasurements.cpp | 151 +++++++++++++++++- .../app/dialogindividualmeasurements.h | 7 +- .../app/dialogindividualmeasurements.ui | 3 + src/mainwindow.cpp | 2 +- 4 files changed, 158 insertions(+), 5 deletions(-) diff --git a/src/dialogs/app/dialogindividualmeasurements.cpp b/src/dialogs/app/dialogindividualmeasurements.cpp index 586d588b3..68720b6eb 100644 --- a/src/dialogs/app/dialogindividualmeasurements.cpp +++ b/src/dialogs/app/dialogindividualmeasurements.cpp @@ -29,9 +29,13 @@ #include "dialogindividualmeasurements.h" #include "ui_dialogindividualmeasurements.h" #include +#include "../../xml/vindividualmeasurements.h" +#include +#include +#include -DialogIndividualMeasurements::DialogIndividualMeasurements(QWidget *parent) : - QDialog(parent), ui(new Ui::DialogIndividualMeasurements), _name(QString()), _tablePath(QString()) +DialogIndividualMeasurements::DialogIndividualMeasurements(VContainer *data, QWidget *parent) : + QDialog(parent), ui(new Ui::DialogIndividualMeasurements), _name(QString()), _tablePath(QString()), data(data) { ui->setupUi(this); @@ -46,10 +50,14 @@ DialogIndividualMeasurements::DialogIndividualMeasurements(QWidget *parent) : connect(bCansel, &QPushButton::clicked, this, &DialogIndividualMeasurements::DialogRejected); } + LoadIndividualTables(); + CheckState(); connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogIndividualMeasurements::CheckState); connect(ui->buttonGroupPath, static_cast(&QButtonGroup::buttonClicked), this, &DialogIndividualMeasurements::CheckState); + connect(ui->toolButtonOpenExist, &QToolButton::clicked, this, &DialogIndividualMeasurements::OpenTable); + connect(ui->toolButtonOpenNew, &QToolButton::clicked, this, &DialogIndividualMeasurements::NewTable); } DialogIndividualMeasurements::~DialogIndividualMeasurements() @@ -67,6 +75,20 @@ void DialogIndividualMeasurements::DialogAccepted() else { _tablePath = ui->lineEditPathNewM->text(); + QFile table(_tablePath); + if (table.exists()) + { + table.remove(); + } + + const qint32 index = ui->comboBoxLang->currentIndex(); + QString path = ui->comboBoxLang->itemData(index).toString(); + QFile iMeasur(path); + if ( iMeasur.copy(_tablePath) == false ) + { + QMessageBox::warning(this, tr("Could not create measurements file"), tr("Please try again or change file")); + return; + } } accept(); } @@ -94,18 +116,141 @@ void DialogIndividualMeasurements::CheckState() ui->lineEditPathNewM->setEnabled(false); ui->toolButtonOpenNew->setEnabled(false); + ui->comboBoxLang->setEditable(false); + + if (ui->lineEditPathExistM->text().isEmpty() == false) + { + flagPath = true; + } } else { ui->lineEditPathNewM->setEnabled(true); ui->toolButtonOpenNew->setEnabled(true); + ui->comboBoxLang->setEditable(true); ui->toolButtonOpenExist->setEnabled(false); ui->lineEditPathExistM->setEnabled(false); + if (ui->lineEditPathNewM->text().isEmpty() == false) + { + flagPath = true; + } + } + + bool flagLang = false; + { + const QComboBox *box = ui->comboBoxLang; + Q_CHECK_PTR(box); + if (box->count() > 0 && box->currentIndex() != -1) + { + flagLang = true; + } } QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok); Q_CHECK_PTR(bOk); - bOk->setEnabled(flagName && flagPath); + bOk->setEnabled(flagName && flagPath && flagLang); +} + +void DialogIndividualMeasurements::LoadIndividualTables() +{ +#ifdef Q_OS_WIN + const QString pathToTables = QString("/tables/individual"); +#else + #ifdef QT_DEBUG + const QString pathToTables = QString("/tables/individual"); + #else + const QString pathToTables = QString("/usr/share/valentina/tables/individual"); + #endif +#endif + QStringList filters; + filters << "*.vit"; + QDir tablesDir(pathToTables); + tablesDir.setNameFilters(filters); + + const QStringList allFiles = tablesDir.entryList(QDir::NoDotAndDotDot | QDir::Files); + if (allFiles.isEmpty() == true) + { + ui->comboBoxLang->clear(); + CheckState(); + return; + } + + for (int i = 0; i < allFiles.size(); ++i) + { + QFile file(allFiles.at(i)); + if (file.open(QIODevice::ReadOnly)) + { + try + { + VDomDocument::ValidatePattern("://schema/standard_measurements.xsd", allFiles.at(i)); + } + catch(VException &e) + { + qWarning()<<"Validation file error."<comboBoxLang->addItem(lang, QVariant(allFiles.at(i))); + } + catch(VException &e) + { + qWarning()<<"Parsing pattern file error."<comboBoxLang->findData(checkedLocale); + if (index != -1) + { + ui->comboBoxLang->setCurrentIndex(index); + } +} + +void DialogIndividualMeasurements::OpenTable() +{ + const QString filter(tr("Individual measurements (*.vit)")); + const QString fileName = QFileDialog::getOpenFileName(this, tr("Open file"), QDir::homePath(), filter); + ui->lineEditPathExistM->setText(fileName); + CheckState(); +} + +void DialogIndividualMeasurements::NewTable() +{ + QString name = QFileDialog::getSaveFileName(this, tr("Where save measurements?"), QDir::homePath(), + tr("Individual measurements (*.vit)")); + + if (name.isEmpty()) + { + return; + } + + // what if the users did not specify a suffix...? + QFileInfo f( name ); + if (f.suffix().isEmpty() && f.suffix() != "vit") + { + name += ".vit"; + } + ui->lineEditPathNewM->setText(name); + CheckState(); } diff --git a/src/dialogs/app/dialogindividualmeasurements.h b/src/dialogs/app/dialogindividualmeasurements.h index 1c97d264e..296f5ccc7 100644 --- a/src/dialogs/app/dialogindividualmeasurements.h +++ b/src/dialogs/app/dialogindividualmeasurements.h @@ -30,6 +30,7 @@ #define DIALOGINDIVIDUALMEASUREMENTS_H #include +#include "../../container/vcontainer.h" namespace Ui { @@ -41,7 +42,7 @@ class DialogIndividualMeasurements : public QDialog Q_OBJECT public: - explicit DialogIndividualMeasurements(QWidget *parent = nullptr); + explicit DialogIndividualMeasurements(VContainer *data, QWidget *parent = nullptr); ~DialogIndividualMeasurements(); QString name() const; QString tablePath() const; @@ -50,9 +51,13 @@ private: Ui::DialogIndividualMeasurements *ui; QString _name; QString _tablePath; + VContainer *data; void DialogAccepted(); void DialogRejected(); void CheckState(); + void LoadIndividualTables(); + void OpenTable(); + void NewTable(); }; inline QString DialogIndividualMeasurements::name() const diff --git a/src/dialogs/app/dialogindividualmeasurements.ui b/src/dialogs/app/dialogindividualmeasurements.ui index f82c642cc..e711d4540 100644 --- a/src/dialogs/app/dialogindividualmeasurements.ui +++ b/src/dialogs/app/dialogindividualmeasurements.ui @@ -81,6 +81,9 @@ + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7aaf7cb80..3ad0cae19 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -132,7 +132,7 @@ void MainWindow::ActionNewDraw() } else { - DialogIndividualMeasurements indMeasurements(this); + DialogIndividualMeasurements indMeasurements(pattern, this); if (indMeasurements.exec() == QDialog::Accepted) { nameDraw = indMeasurements.name();