Compare commits

..

No commits in common. "867348fb8e9474d4186a7db022d406c8dfb214db" and "7b2707a5283105f7911120b283e341543bd216d2" have entirely different histories.

38 changed files with 27553 additions and 45452 deletions

View file

@ -1,5 +1,5 @@
[main] [main]
host = https://www.transifex.com host = https://app.transifex.com/
lang_map = es: es_ES, id: id_ID, uk: uk_UA, cs: cs_CZ, nl: nl_NL, fi: fi_FI lang_map = es: es_ES, id: id_ID, uk: uk_UA, cs: cs_CZ, nl: nl_NL, fi: fi_FI
[o:valentina:p:valentina-project:r:measurements_p0ts] [o:valentina:p:valentina-project:r:measurements_p0ts]

View file

@ -27,7 +27,6 @@
- Simplify number of versions for DXF AAMA/ASTM. - Simplify number of versions for DXF AAMA/ASTM.
- New notch type - Check Notch. - New notch type - Check Notch.
- Control a notch width and angle with formulas. - Control a notch width and angle with formulas.
- Independent translation for piece labels.
# Valentina 0.7.52 September 12, 2022 # Valentina 0.7.52 September 12, 2022
- Fix crash when default locale is ru. - Fix crash when default locale is ru.

View file

@ -34,10 +34,6 @@ qbs resolve -d ../../build_translations modules.i18n.update:true moduleProviders
qbs -d ../../build_translations -f ../valentina.qbs -p 'Translations' modules.i18n.update:true moduleProviders.Qt.qmakeFilePaths:$HOME/Qt6.5/6.5.0/gcc_64/bin/qmake qbs -d ../../build_translations -f ../valentina.qbs -p 'Translations' modules.i18n.update:true moduleProviders.Qt.qmakeFilePaths:$HOME/Qt6.5/6.5.0/gcc_64/bin/qmake
qbs -d ../../build_translations -f ../valentina.qbs -p 'MTranslations' modules.i18n.update:true moduleProviders.Qt.qmakeFilePaths:$HOME/Qt6.5/6.5.0/gcc_64/bin/qmake qbs -d ../../build_translations -f ../valentina.qbs -p 'MTranslations' modules.i18n.update:true moduleProviders.Qt.qmakeFilePaths:$HOME/Qt6.5/6.5.0/gcc_64/bin/qmake
# cannot fix incorrect placing for pattern making systems
cp -r ./share/translations/* ../share/translations
rm -r ./share
end=$(date +%s) end=$(date +%s)
runtime=$(python3 -c "print('Time passed %u:%02u seconds' % ((${end} - ${start})/60, (${end} - ${start})%60))") runtime=$(python3 -c "print('Time passed %u:%02u seconds' % ((${end} - ${start})/60, (${end} - ${start})%60))")
echo $runtime echo $runtime

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -27,12 +27,11 @@
*************************************************************************/ *************************************************************************/
#include "preferencesconfigurationpage.h" #include "preferencesconfigurationpage.h"
#include "../../core/vapplication.h"
#include "../vmisc/literals.h"
#include "../vmisc/vvalentinasettings.h"
#include "../vpatterndb/pmsystems.h"
#include "def.h"
#include "ui_preferencesconfigurationpage.h" #include "ui_preferencesconfigurationpage.h"
#include "../../core/vapplication.h"
#include "../vpatterndb/pmsystems.h"
#include "../vmisc/vvalentinasettings.h"
#include "../vmisc/literals.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
#include "../vmisc/backport/qoverload.h" #include "../vmisc/backport/qoverload.h"
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
@ -56,12 +55,10 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
ui->autoSaveCheck->setChecked(VAbstractValApplication::VApp()->ValentinaSettings()->GetAutosaveState()); ui->autoSaveCheck->setChecked(VAbstractValApplication::VApp()->ValentinaSettings()->GetAutosaveState());
InitLanguages(ui->langCombo); InitLanguages(ui->langCombo);
connect(ui->langCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, connect(ui->langCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]()
[this]() { m_langChanged = true; }); {
m_langChanged = true;
InitPieceLabelLanguages(ui->comboBoxPieceLbelLanguage); });
connect(ui->comboBoxPieceLbelLanguage, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
[this]() { m_pieceLabelLangChanged = true; });
//-------------------- Decimal separator setup //-------------------- Decimal separator setup
ui->osOptionCheck->setChecked(VAbstractValApplication::VApp()->ValentinaSettings()->GetOsSeparator()); ui->osOptionCheck->setChecked(VAbstractValApplication::VApp()->ValentinaSettings()->GetOsSeparator());
@ -74,8 +71,10 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
ui->unitCombo->setCurrentIndex(indexUnit); ui->unitCombo->setCurrentIndex(indexUnit);
} }
connect(ui->unitCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, connect(ui->unitCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]()
[this]() { m_unitChanged = true; }); {
m_unitChanged = true;
});
//----------------------- Label language //----------------------- Label language
SetLabelComboBox(VApplication::LabelLanguages()); SetLabelComboBox(VApplication::LabelLanguages());
@ -85,17 +84,18 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
{ {
ui->labelCombo->setCurrentIndex(index); ui->labelCombo->setCurrentIndex(index);
} }
connect(ui->labelCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, connect(ui->labelCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]()
[this]() { m_labelLangChanged = true; }); {
m_labelLangChanged = true;
});
//---------------------- Pattern making system //---------------------- Pattern making system
ui->systemBookValueLabel->setFixedHeight(4 * QFontMetrics(ui->systemBookValueLabel->font()).lineSpacing()); ui->systemBookValueLabel->setFixedHeight(4 * QFontMetrics(ui->systemBookValueLabel->font()).lineSpacing());
connect(ui->systemCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, connect(ui->systemCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]()
[this]()
{ {
m_systemChanged = true; m_systemChanged = true;
QString text = QString text = VAbstractApplication::VApp()->TrVars()
VAbstractApplication::VApp()->TrVars()->PMSystemAuthor(ui->systemCombo->currentData().toString()); ->PMSystemAuthor(ui->systemCombo->currentData().toString());
ui->systemAuthorValueLabel->setText(text); ui->systemAuthorValueLabel->setText(text);
ui->systemAuthorValueLabel->setToolTip(text); ui->systemAuthorValueLabel->setToolTip(text);
@ -111,8 +111,7 @@ PreferencesConfigurationPage::PreferencesConfigurationPage(QWidget *parent)
} }
//----------------------------- Pattern Editing //----------------------------- Pattern Editing
connect(ui->resetWarningsButton, &QPushButton::released, this, connect(ui->resetWarningsButton, &QPushButton::released, this, []()
[]()
{ {
VValentinaSettings *settings = VAbstractValApplication::VApp()->ValentinaSettings(); VValentinaSettings *settings = VAbstractValApplication::VApp()->ValentinaSettings();
@ -207,13 +206,6 @@ auto PreferencesConfigurationPage::Apply() -> QStringList
settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked()); settings->SetDoubleClickZoomFitBestCurrentPP(ui->checkBoxZoomFitBestCurrentPP->isChecked());
settings->SetInteractiveTools(ui->checkBoxInteractiveTools->isChecked()); settings->SetInteractiveTools(ui->checkBoxInteractiveTools->isChecked());
if (m_pieceLabelLangChanged)
{
const auto locale = qvariant_cast<QString>(ui->comboBoxPieceLbelLanguage->currentData());
settings->SetPieceLabelLocale(locale);
m_pieceLabelLangChanged = false;
}
if (m_langChanged || m_systemChanged) if (m_langChanged || m_systemChanged)
{ {
const auto locale = qvariant_cast<QString>(ui->langCombo->currentData()); const auto locale = qvariant_cast<QString>(ui->langCombo->currentData());
@ -310,13 +302,4 @@ void PreferencesConfigurationPage::RetranslateUi()
ui->systemCombo->blockSignals(false); ui->systemCombo->blockSignals(false);
ui->systemCombo->setCurrentIndex(ui->systemCombo->findData(code)); ui->systemCombo->setCurrentIndex(ui->systemCombo->findData(code));
} }
{
ui->comboBoxPieceLbelLanguage->blockSignals(true);
const auto code = qvariant_cast<QString>(ui->comboBoxPieceLbelLanguage->currentData());
InitPieceLabelLanguages(ui->comboBoxPieceLbelLanguage);
ui->comboBoxPieceLbelLanguage->setCurrentIndex(-1);
ui->comboBoxPieceLbelLanguage->blockSignals(false);
ui->comboBoxPieceLbelLanguage->setCurrentIndex(ui->comboBoxPieceLbelLanguage->findData(code));
}
} }

View file

@ -31,6 +31,8 @@
#include <QWidget> #include <QWidget>
#include "../vmisc/defglobal.h"
namespace Ui namespace Ui
{ {
class PreferencesConfigurationPage; class PreferencesConfigurationPage;
@ -40,20 +42,18 @@ class PreferencesConfigurationPage : public QWidget
{ {
Q_OBJECT // NOLINT Q_OBJECT // NOLINT
public : explicit PreferencesConfigurationPage(QWidget *parent = nullptr); public:
explicit PreferencesConfigurationPage(QWidget *parent = nullptr);
~PreferencesConfigurationPage() override; ~PreferencesConfigurationPage() override;
auto Apply() -> QStringList; auto Apply() -> QStringList;
protected: protected:
void changeEvent(QEvent* event) override; void changeEvent(QEvent* event) override;
private: private:
// cppcheck-suppress unknownMacro // cppcheck-suppress unknownMacro
Q_DISABLE_COPY_MOVE(PreferencesConfigurationPage) // NOLINT Q_DISABLE_COPY_MOVE(PreferencesConfigurationPage) // NOLINT
Ui::PreferencesConfigurationPage *ui; Ui::PreferencesConfigurationPage *ui;
bool m_langChanged{false}; bool m_langChanged{false};
bool m_pieceLabelLangChanged{false};
bool m_systemChanged{false}; bool m_systemChanged{false};
bool m_unitChanged{false}; bool m_unitChanged{false};
bool m_labelLangChanged{false}; bool m_labelLangChanged{false};

View file

@ -35,7 +35,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>624</width> <width>624</width>
<height>898</height> <height>867</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
@ -104,20 +104,13 @@
<widget class="QComboBox" name="langCombo"/> <widget class="QComboBox" name="langCombo"/>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Piece label language:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Decimal separator parts:</string> <string>Decimal separator parts:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="1" column="1">
<widget class="QCheckBox" name="osOptionCheck"> <widget class="QCheckBox" name="osOptionCheck">
<property name="text"> <property name="text">
<string notr="true">&lt; With OS options &gt;</string> <string notr="true">&lt; With OS options &gt;</string>
@ -127,28 +120,25 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Default unit:</string> <string>Default unit:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="0">
<widget class="QComboBox" name="unitCombo"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
<string>Label language:</string> <string>Label language:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="2" column="1">
<widget class="QComboBox" name="labelCombo"/> <widget class="QComboBox" name="unitCombo"/>
</item> </item>
<item row="1" column="1"> <item row="3" column="1">
<widget class="QComboBox" name="comboBoxPieceLbelLanguage"/> <widget class="QComboBox" name="labelCombo"/>
</item> </item>
</layout> </layout>
</widget> </widget>

View file

@ -26,28 +26,28 @@
** **
*************************************************************************/ *************************************************************************/
#include <QApplication>
#include <QDate> #include <QDate>
#include <QDebug>
#include <QFileInfo> #include <QFileInfo>
#include <QFlags> // QFlags<Qt::Alignment>
#include <QFontMetrics> #include <QFontMetrics>
#include <QGlobalStatic>
#include <QLatin1String> #include <QLatin1String>
#include <QRegularExpression> #include <QRegularExpression>
#include <QApplication>
#include <QDebug>
#include <QFlags> // QFlags<Qt::Alignment>
#include <QtMath> #include <QtMath>
#include <QGlobalStatic>
#include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vabstractpattern.h"
#include "../vmisc/vabstractvalapplication.h"
#include "../vpatterndb/floatItemData/vpiecelabeldata.h" #include "../vpatterndb/floatItemData/vpiecelabeldata.h"
#include "../vmisc/vabstractvalapplication.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 9, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 9, 0)
# include "../vmisc/vdatastreamenum.h" # include "../vmisc/vdatastreamenum.h"
#endif #endif
#include "../vpatterndb/vcontainer.h"
#include "../vpatterndb/calculator.h" #include "../vpatterndb/calculator.h"
#include "../vpatterndb/variables/vmeasurement.h" #include "../vpatterndb/variables/vmeasurement.h"
#include "../vpatterndb/vcontainer.h"
#include "vtextmanager.h" #include "vtextmanager.h"
const quint32 TextLine::streamHeader = 0xA3881E49; // CRC-32Q string "TextLine" const quint32 TextLine::streamHeader = 0xA3881E49; // CRC-32Q string "TextLine"
@ -93,8 +93,7 @@ auto operator>>(QDataStream &dataStream, TextLine &data) -> QDataStream &
{ {
QString message = QCoreApplication::tr("TextLine compatibility error: actualClassVersion = %1 and " QString message = QCoreApplication::tr("TextLine compatibility error: actualClassVersion = %1 and "
"classVersion = %2") "classVersion = %2")
.arg(actualClassVersion) .arg(actualClassVersion).arg(TextLine::classVersion);
.arg(TextLine::classVersion);
throw VException(message); throw VException(message);
} }
@ -157,8 +156,7 @@ auto operator>>(QDataStream &dataStream, VTextManager &data) -> QDataStream &
{ {
QString message = QCoreApplication::tr("VTextManager compatibility error: actualClassVersion = %1 and " QString message = QCoreApplication::tr("VTextManager compatibility error: actualClassVersion = %1 and "
"classVersion = %2") "classVersion = %2")
.arg(actualClassVersion) .arg(actualClassVersion).arg(VTextManager::classVersion);
.arg(VTextManager::classVersion);
throw VException(message); throw VException(message);
} }
@ -207,8 +205,8 @@ auto PreparePlaceholders(const VAbstractPattern *doc, const VContainer *data) ->
{ {
placeholders.insert(pl_customer, VAbstractValApplication::VApp()->GetCustomerName()); placeholders.insert(pl_customer, VAbstractValApplication::VApp()->GetCustomerName());
const QString birthDate = const QString birthDate = locale.toString(VAbstractValApplication::VApp()->GetCustomerBirthDate(),
locale.toString(VAbstractValApplication::VApp()->GetCustomerBirthDate(), doc->GetLabelDateFormat()); doc->GetLabelDateFormat());
placeholders.insert(pl_birthDate, birthDate); placeholders.insert(pl_birthDate, birthDate);
placeholders.insert(pl_email, VAbstractValApplication::VApp()->CustomerEmail()); placeholders.insert(pl_email, VAbstractValApplication::VApp()->CustomerEmail());
@ -258,8 +256,7 @@ auto PreparePlaceholders(const VAbstractPattern *doc, const VContainer *data) ->
} }
placeholders.insert(pl_mExt, VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Multisize placeholders.insert(pl_mExt, VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Multisize
? QStringLiteral("vst") ? QStringLiteral("vst") : QStringLiteral("vit"));
: QStringLiteral("vit"));
const QMap<int, QString> materials = doc->GetPatternMaterials(); const QMap<int, QString> materials = doc->GetPatternMaterials();
for (int i = 0; i < userMaterialPlaceholdersQuantity; ++i) for (int i = 0; i < userMaterialPlaceholdersQuantity; ++i)
@ -307,12 +304,9 @@ auto PreparePlaceholders(const VAbstractPattern *doc, const VContainer *data) ->
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare final measurement placeholder. Parser error at " const QString errorMsg = QObject::tr("Failed to prepare final measurement placeholder. Parser error at "
"line %1: %2.") "line %1: %2.").arg(i+1).arg(e.GetMsg());
.arg(i + 1) VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
.arg(e.GetMsg()); qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
VAbstractApplication::VApp()->IsPedantic()
? throw VException(errorMsg)
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
} }
@ -327,14 +321,11 @@ auto PreparePlaceholders(const VAbstractPattern *doc, const VContainer *data) ->
placeholders.insert(pl_pName, QString()); placeholders.insert(pl_pName, QString());
placeholders.insert(pl_pQuantity, QString()); placeholders.insert(pl_pQuantity, QString());
placeholders.insert(pl_wOnFold, QString()); placeholders.insert(pl_wOnFold, QString());
placeholders.insert(pl_mFabric, QObject::tr("Fabric"));
QSharedPointer<QTranslator> phTr = VAbstractValApplication::VApp()->GetPlaceholderTranslator(); placeholders.insert(pl_mLining, QObject::tr("Lining"));
placeholders.insert(pl_mInterfacing, QObject::tr("Interfacing"));
placeholders.insert(pl_mFabric, phTr->translate("Placeholder", "Fabric")); placeholders.insert(pl_mInterlining, QObject::tr("Interlining"));
placeholders.insert(pl_mLining, phTr->translate("Placeholder", "Lining")); placeholders.insert(pl_wCut, QObject::tr("Cut"));
placeholders.insert(pl_mInterfacing, phTr->translate("Placeholder", "Interfacing"));
placeholders.insert(pl_mInterlining, phTr->translate("Placeholder", "Interlining"));
placeholders.insert(pl_wCut, phTr->translate("Placeholder", "Cut"));
return placeholders; return placeholders;
} }
@ -354,8 +345,7 @@ void InitPiecePlaceholders(QMap<QString, QString> &placeholders, const QString &
if (data.IsOnFold()) if (data.IsOnFold())
{ {
QSharedPointer<QTranslator> phTr = VAbstractValApplication::VApp()->GetPlaceholderTranslator(); placeholders[pl_wOnFold] = QObject::tr("on fold");
placeholders[pl_wOnFold] = phTr->translate("Placeholder", "on fold");
} }
VContainer completeData = *pattern; VContainer completeData = *pattern;
@ -365,30 +355,28 @@ void InitPiecePlaceholders(QMap<QString, QString> &placeholders, const QString &
try try
{ {
const QString formula = pieceArea_ + data.GetAreaShortName(); const QString formula = pieceArea_ + data.GetAreaShartName();
const qreal result = cal->EvalFormula(completeData.DataVariables(), formula); const qreal result = cal->EvalFormula(completeData.DataVariables(), formula);
placeholders[pl_currentArea] = QString::number(result); placeholders[pl_currentArea] = QString::number(result);
} }
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare full piece area placeholder. %2.").arg(e.GetMsg()); const QString errorMsg = QObject::tr("Failed to prepare full piece area placeholder. %2.").arg(e.GetMsg());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
try try
{ {
const QString formula = pieceSeamLineArea_ + data.GetAreaShortName(); const QString formula = pieceSeamLineArea_ + data.GetAreaShartName();
const qreal result = cal->EvalFormula(completeData.DataVariables(), formula); const qreal result = cal->EvalFormula(completeData.DataVariables(), formula);
placeholders[pl_currentSeamLineArea] = QString::number(result); placeholders[pl_currentSeamLineArea] = QString::number(result);
} }
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare piece seam line area placeholder. %2.").arg(e.GetMsg()); const QString errorMsg = QObject::tr("Failed to prepare piece seam line area placeholder. %2.").arg(e.GetMsg());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
@ -401,9 +389,8 @@ auto ReplacePlaceholders(const QMap<QString, QString> &placeholders, QString lin
{ {
if (line.contains(per+placeholder+per) && placeholders.value(placeholder) == QChar('0')) if (line.contains(per+placeholder+per) && placeholders.value(placeholder) == QChar('0'))
{ {
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
}; };
@ -606,7 +593,8 @@ void VTextManager::FitFontSize(qreal fW, qreal fH)
fnt.setPixelSize(iFS + maxLine.m_iFontSize); fnt.setPixelSize(iFS + maxLine.m_iFontSize);
QFontMetrics fm(fnt); QFontMetrics fm(fnt);
lineLength = TextWidth(fm, maxLine.m_qsText); lineLength = TextWidth(fm, maxLine.m_qsText);
} while (lineLength > fW && iFS > MIN_FONT_SIZE); }
while (lineLength > fW && iFS > MIN_FONT_SIZE);
} }
SetFontSize(iFS); SetFontSize(iFS);
} }

View file

@ -33,12 +33,9 @@
#include <QColor> #include <QColor>
#include <QComboBox> #include <QComboBox>
#include <QCursor> #include <QCursor>
#include <QDesktopServices>
#include <QDir> #include <QDir>
#include <QDirIterator> #include <QDirIterator>
#include <QFileInfo> #include <QFileInfo>
#include <QGlobalStatic>
#include <QGraphicsItem>
#include <QGuiApplication> #include <QGuiApplication>
#include <QImage> #include <QImage>
#include <QLatin1Char> #include <QLatin1Char>
@ -47,12 +44,15 @@
#include <QMessageLogger> #include <QMessageLogger>
#include <QObject> #include <QObject>
#include <QPixmap> #include <QPixmap>
#include <QPixmapCache>
#include <QPrinterInfo> #include <QPrinterInfo>
#include <QProcess> #include <QProcess>
#include <QRgb> #include <QRgb>
#include <QUrl>
#include <QtDebug> #include <QtDebug>
#include <QPixmapCache>
#include <QGraphicsItem>
#include <QGlobalStatic>
#include <QDesktopServices>
#include <QUrl>
#include "vabstractapplication.h" #include "vabstractapplication.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
@ -65,79 +65,6 @@
#include "../vmisc/diagnostic.h" #include "../vmisc/diagnostic.h"
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0) #endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
namespace
{
//---------------------------------------------------------------------------------------------------------------------
auto LocalList() -> QStringList
{
static QStringList fileNames;
// Check if file names have already been cached
if (!fileNames.isEmpty())
{
return fileNames;
}
QDirIterator it(VAbstractApplication::translationsPath(), QStringList("valentina_*.qm"), QDir::Files,
QDirIterator::Subdirectories);
while (it.hasNext())
{
it.next();
fileNames.append(it.fileName());
}
return fileNames;
}
//---------------------------------------------------------------------------------------------------------------------
void InitLanguageList(QComboBox *combobox)
{
SCASSERT(combobox != nullptr)
combobox->clear();
const QStringList fileNames = LocalList();
bool englishUS = false;
const QString en_US = QStringLiteral("en_US");
for (auto locale : fileNames)
{
// get locale extracted by filename "valentina_de_De.qm"
locale.truncate(locale.lastIndexOf('.')); // "valentina_de_De"
locale.remove(0, locale.indexOf('_') + 1); // "de_De"
if (locale.startsWith(QLatin1String("ru")))
{
continue;
}
if (not englishUS)
{
englishUS = (en_US == locale);
}
QLocale loc = QLocale(locale);
QString lang = loc.nativeLanguageName();
// Since Qt 5.12 country names have spaces
QString country = QLocale::countryToString(loc.country()).remove(' ');
if (country == QLatin1String("Czechia"))
{
country = QLatin1String("CzechRepublic");
}
QIcon ico(QString("://flags/%1.png").arg(country));
combobox->addItem(ico, lang, locale);
}
if (combobox->count() == 0 || not englishUS)
{
// English language is internal and doens't have own *.qm file.
// Since Qt 5.12 country names have spaces
QIcon ico(QString("://flags/%1.png").arg(QLocale::countryToString(QLocale::UnitedStates).remove(' ')));
QString lang = QLocale(en_US).nativeLanguageName();
combobox->addItem(ico, lang, en_US);
}
}
} // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto QPixmapFromCache(const QString &pixmapPath) -> QPixmap auto QPixmapFromCache(const QString &pixmapPath) -> QPixmap
{ {
@ -168,8 +95,27 @@ void SetItemOverrideCursor(QGraphicsItem *item, const QString &pixmapPath, int h
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto SupportedLocales() -> QStringList auto SupportedLocales() -> QStringList
{ {
return QStringList{"uk_UA", "de_DE", "cs_CZ", "he_IL", "fr_FR", "it_IT", "nl_NL", "id_ID", "es_ES", return QStringList
"fi_FI", "en_US", "en_CA", "en_IN", "ro_RO", "zh_CN", "pt_BR", "el_GR", "pl_PL"}; {
"uk_UA",
"de_DE",
"cs_CZ",
"he_IL",
"fr_FR",
"it_IT",
"nl_NL",
"id_ID",
"es_ES",
"fi_FI",
"en_US",
"en_CA",
"en_IN",
"ro_RO",
"zh_CN",
"pt_BR",
"el_GR",
"pl_PL"
};
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -278,10 +224,12 @@ auto darkenPixmap(const QPixmap &pixmap) -> QPixmap
void ShowInGraphicalShell(const QString &filePath) void ShowInGraphicalShell(const QString &filePath)
{ {
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
QStringList args{"-e", "tell application \"Finder\"", QStringList args{
"-e", "tell application \"Finder\"",
"-e", "activate", "-e", "activate",
"-e", "select POSIX file \""+filePath+"\"", "-e", "select POSIX file \""+filePath+"\"",
"-e", "end tell"}; "-e", "end tell"
};
QProcess::startDetached(QStringLiteral("osascript"), args); QProcess::startDetached(QStringLiteral("osascript"), args);
#elif defined(Q_OS_WIN) #elif defined(Q_OS_WIN)
QProcess::startDetached(QStringLiteral("explorer"), QStringList{"/select", QDir::toNativeSeparators(filePath)}); QProcess::startDetached(QStringLiteral("explorer"), QStringList{"/select", QDir::toNativeSeparators(filePath)});
@ -290,8 +238,7 @@ void ShowInGraphicalShell(const QString &filePath)
QString command = QStringLiteral("dbus-send --reply-timeout=%1 --session --dest=org.freedesktop.FileManager1 " QString command = QStringLiteral("dbus-send --reply-timeout=%1 --session --dest=org.freedesktop.FileManager1 "
"--type=method_call /org/freedesktop/FileManager1 " "--type=method_call /org/freedesktop/FileManager1 "
"org.freedesktop.FileManager1.ShowItems array:string:\"%2\" string:\"\"") "org.freedesktop.FileManager1.ShowItems array:string:\"%2\" string:\"\"")
.arg(timeout) .arg(timeout).arg(QUrl::fromLocalFile(filePath).toString());
.arg(QUrl::fromLocalFile(filePath).toString());
// Sending message through dbus will highlighting file // Sending message through dbus will highlighting file
QProcess dbus; QProcess dbus;
@ -502,6 +449,7 @@ auto StringToPassmarkAngleType(const QString &value) -> PassmarkAngleType
return PassmarkAngleType::Straightforward; return PassmarkAngleType::Straightforward;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto StrToUnits(const QString &unit) -> Unit auto StrToUnits(const QString &unit) -> Unit
{ {
@ -551,7 +499,58 @@ auto UnitsToStr(const Unit &unit, const bool translate) -> QString
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void InitLanguages(QComboBox *combobox) void InitLanguages(QComboBox *combobox)
{ {
InitLanguageList(combobox); SCASSERT(combobox != nullptr)
combobox->clear();
QStringList fileNames;
QDirIterator it(VAbstractApplication::translationsPath(), QStringList("valentina_*.qm"), QDir::Files,
QDirIterator::Subdirectories);
while (it.hasNext())
{
it.next();
fileNames.append(it.fileName());
}
bool englishUS = false;
const QString en_US = QStringLiteral("en_US");
for (auto locale : fileNames)
{
// get locale extracted by filename "valentina_de_De.qm"
locale.truncate(locale.lastIndexOf('.')); // "valentina_de_De"
locale.remove(0, locale.indexOf('_') + 1); // "de_De"
if (locale.startsWith(QLatin1String("ru")))
{
continue;
}
if (not englishUS)
{
englishUS = (en_US == locale);
}
QLocale loc = QLocale(locale);
QString lang = loc.nativeLanguageName();
// Since Qt 5.12 country names have spaces
QString country = QLocale::countryToString(loc.country()).remove(' ');
if (country == QLatin1String("Czechia"))
{
country = QLatin1String("CzechRepublic");
}
QIcon ico(QString("://flags/%1.png").arg(country));
combobox->addItem(ico, lang, locale);
}
if (combobox->count() == 0 || not englishUS)
{
// English language is internal and doens't have own *.qm file.
// Since Qt 5.12 country names have spaces
QIcon ico(QString("://flags/%1.png").arg(QLocale::countryToString(QLocale::UnitedStates).remove(' ')));
QString lang = QLocale(en_US).nativeLanguageName();
combobox->addItem(ico, lang, en_US);
}
// set default translators and language checked // set default translators and language checked
qint32 index = combobox->findData(VAbstractApplication::VApp()->Settings()->GetLocale()); qint32 index = combobox->findData(VAbstractApplication::VApp()->Settings()->GetLocale());
@ -561,21 +560,6 @@ void InitLanguages(QComboBox *combobox)
} }
} }
//---------------------------------------------------------------------------------------------------------------------
void InitPieceLabelLanguages(QComboBox *combobox)
{
InitLanguageList(combobox);
combobox->addItem(QApplication::translate("InitPieceLabelLanguages", "Default"),
VCommonSettings::defaultPieceLabelLocale);
qint32 index = combobox->findData(VAbstractApplication::VApp()->Settings()->GetPieceLabelLocale());
if (index != -1)
{
combobox->setCurrentIndex(index);
}
}
const quint32 CustomSARecord::streamHeader = 0xEBFF7586; // CRC-32Q string "CustomSARecord" const quint32 CustomSARecord::streamHeader = 0xEBFF7586; // CRC-32Q string "CustomSARecord"
const quint16 CustomSARecord::classVersion = 1; const quint16 CustomSARecord::classVersion = 1;
@ -619,8 +603,7 @@ auto operator>>(QDataStream &in, CustomSARecord &record) -> QDataStream &
{ {
QString message = QCoreApplication::tr("CustomSARecord compatibility error: actualClassVersion = %1 and " QString message = QCoreApplication::tr("CustomSARecord compatibility error: actualClassVersion = %1 and "
"classVersion = %2") "classVersion = %2")
.arg(actualClassVersion) .arg(actualClassVersion).arg(CustomSARecord::classVersion);
.arg(CustomSARecord::classVersion);
throw VException(message); throw VException(message);
} }
@ -720,7 +703,8 @@ auto SplitFilePaths(const QString &path) -> QStringList
result.prepend(lastFileName); result.prepend(lastFileName);
subPath = fileInfo.path(); subPath = fileInfo.path();
} }
} while (not lastFileName.isEmpty()); }
while(not lastFileName.isEmpty());
return result; return result;
} }

View file

@ -34,14 +34,14 @@
# include <qt_windows.h> # include <qt_windows.h>
#endif /*Q_OS_WIN*/ #endif /*Q_OS_WIN*/
#include <QLineF> #include <qcompilerdetection.h>
#include <QMargins>
#include <QPrinter> #include <QPrinter>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <Qt> #include <Qt>
#include <csignal> #include <csignal>
#include <qcompilerdetection.h> #include <QMargins>
#include <QLineF>
#include "debugbreak.h" #include "debugbreak.h"
#include "defglobal.h" #include "defglobal.h"
@ -83,63 +83,15 @@ constexpr qreal maxCurveApproximationScale = 10.0;
constexpr int minLabelFontSize = 5; constexpr int minLabelFontSize = 5;
constexpr int maxLabelFontSize = 100; constexpr int maxLabelFontSize = 100;
enum class NodeDetail : qint8 enum class NodeDetail : qint8 { Contour, Modeling };
{ enum class SceneObject : qint8 { Point, Line, Spline, Arc, ElArc, SplinePath, Detail, Unknown };
Contour, enum class MeasurementsType : qint8 { Multisize, Individual, Unknown};
Modeling enum class Unit : qint8 { Mm = 0, Cm, Inch, Px, LAST_UNIT_DO_NOT_USE};
}; enum class Source : qint8 { FromGui, FromFile, FromTool };
enum class SceneObject : qint8 enum class NodeUsage : bool {NotInUse = false, InUse = true};
{ enum class SelectionType : bool {ByMousePress, ByMouseRelease};
Point, enum class PageOrientation : bool {Portrait = true, Landscape = false};
Line, enum class Draw : qint8 { Calculation, Modeling, Layout };
Spline,
Arc,
ElArc,
SplinePath,
Detail,
Unknown
};
enum class MeasurementsType : qint8
{
Multisize,
Individual,
Unknown
};
enum class Unit : qint8
{
Mm = 0,
Cm,
Inch,
Px,
LAST_UNIT_DO_NOT_USE
};
enum class Source : qint8
{
FromGui,
FromFile,
FromTool
};
enum class NodeUsage : bool
{
NotInUse = false,
InUse = true
};
enum class SelectionType : bool
{
ByMousePress,
ByMouseRelease
};
enum class PageOrientation : bool
{
Portrait = true,
Landscape = false
};
enum class Draw : qint8
{
Calculation,
Modeling,
Layout
};
enum class PieceNodeAngle : quint8 enum class PieceNodeAngle : quint8
{ {
@ -195,13 +147,7 @@ enum class PiecePathIncludeType : quint8
AsCustomSA = 1 AsCustomSA = 1
}; };
enum class PiecePathType : quint8 enum class PiecePathType : quint8 {PiecePath = 0, CustomSeamAllowance = 1, InternalPath = 2, Unknown = 3};
{
PiecePath = 0,
CustomSeamAllowance = 1,
InternalPath = 2,
Unknown = 3
};
typedef int ToolVisHolderType; typedef int ToolVisHolderType;
enum class Tool : ToolVisHolderType enum class Tool : ToolVisHolderType
@ -333,37 +279,16 @@ enum class Layout : ToolVisHolderType
LAST_ONE_DO_NOT_USE //add new stuffs above this, this constant must be last and never used LAST_ONE_DO_NOT_USE //add new stuffs above this, this constant must be last and never used
}; };
enum class VarType : qint8 enum class VarType : qint8 { Measurement, MeasurementSeparator, Increment, IncrementSeparator, LineLength, CurveLength,
{ CurveCLength, LineAngle, CurveAngle, ArcRadius, PieceExternalArea, PieceSeamLineArea,
Measurement, Unknown };
MeasurementSeparator,
Increment,
IncrementSeparator,
LineLength,
CurveLength,
CurveCLength,
LineAngle,
CurveAngle,
ArcRadius,
PieceExternalArea,
PieceSeamLineArea,
Unknown
};
enum class IncrementType : qint8 enum class IncrementType : qint8 { Increment, Separator };
{
Increment,
Separator
};
auto IncrementTypeToString(IncrementType type) -> QString; auto IncrementTypeToString(IncrementType type) -> QString;
auto StringToIncrementType(const QString &value) -> IncrementType; auto StringToIncrementType(const QString &value) -> IncrementType;
enum class MeasurementType : qint8 enum class MeasurementType : qint8 { Measurement, Separator };
{
Measurement,
Separator
};
auto MeasurementTypeToString(MeasurementType type) -> QString; auto MeasurementTypeToString(MeasurementType type) -> QString;
auto StringToMeasurementType(const QString &value) -> MeasurementType; auto StringToMeasurementType(const QString &value) -> MeasurementType;
@ -405,7 +330,8 @@ enum class IMD : qint8 // Individual measurement dimension
#define SCASSERT(cond) \ #define SCASSERT(cond) \
if (!(cond)) \ if (!(cond)) \
{ \ { \
qCritical("ASSERT: %s in %s (%s:%u)", #cond, Q_FUNC_INFO, __FILE__, __LINE__); \ qCritical("ASSERT: %s in %s (%s:%u)", \
#cond, Q_FUNC_INFO , __FILE__, __LINE__); \
debug_break(); \ debug_break(); \
abort(); \ abort(); \
} }
@ -467,9 +393,10 @@ void InitHighDpiScaling(int argc, char *argv[]);
// We'll assume that it will be fixed in 5.12.11, 5.15.3, and 6.0.1. // We'll assume that it will be fixed in 5.12.11, 5.15.3, and 6.0.1.
// Feel free to add other versions if needed. // Feel free to add other versions if needed.
#define MACOS_LAYER_BACKING_AFFECTED \ #define MACOS_LAYER_BACKING_AFFECTED \
(QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) && QT_VERSION < QT_VERSION_CHECK(5, 12, 11) || \ (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) && QT_VERSION < QT_VERSION_CHECK(5, 12, 11) \
(QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) && QT_VERSION < QT_VERSION_CHECK(5, 15, 3)) || \ || (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) && QT_VERSION < QT_VERSION_CHECK(5, 15, 3)) \
(QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 1))) || (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_VERSION < QT_VERSION_CHECK(6, 0, 1)) \
)
#if MACOS_LAYER_BACKING_AFFECTED #if MACOS_LAYER_BACKING_AFFECTED
#include <QOperatingSystemVersion> #include <QOperatingSystemVersion>
@ -515,18 +442,9 @@ Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel(double val, const Unit &unit) -> do
return 0; return 0;
} }
template <typename T> constexpr inline auto PixelToInch(T pix) -> T template<typename T> constexpr inline auto PixelToInch(T pix) -> T {return pix / PrintDPI;}
{ template<typename T> constexpr inline auto PixelToMm(T pix) -> T {return PixelToInch(pix) * 25.4;}
return pix / PrintDPI; template<typename T> constexpr inline auto PixelToCm(T pix) -> T {return PixelToInch(pix) * 2.54;}
}
template <typename T> constexpr inline auto PixelToMm(T pix) -> T
{
return PixelToInch(pix) * 25.4;
}
template <typename T> constexpr inline auto PixelToCm(T pix) -> T
{
return PixelToInch(pix) * 2.54;
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel(double pix, const Unit &unit) -> double Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel(double pix, const Unit &unit) -> double
@ -547,18 +465,9 @@ Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel(double pix, const Unit &unit) ->
return 0; return 0;
} }
template <typename T> constexpr inline auto Inch2ToPixel2(T val) -> T template<typename T> constexpr inline auto Inch2ToPixel2(T val) -> T {return val * (PrintDPI * PrintDPI);}
{ template<typename T> constexpr inline auto Mm2ToPixel2(T val) -> T {return Inch2ToPixel2(val * 0.001550031);}
return val * (PrintDPI * PrintDPI); template<typename T> constexpr inline auto Cm2ToPixel2(T val) -> T {return Inch2ToPixel2(val * 0.15500031);}
}
template <typename T> constexpr inline auto Mm2ToPixel2(T val) -> T
{
return Inch2ToPixel2(val * 0.001550031);
}
template <typename T> constexpr inline auto Cm2ToPixel2(T val) -> T
{
return Inch2ToPixel2(val * 0.15500031);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel2(double val, const Unit &unit) -> double Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel2(double val, const Unit &unit) -> double
@ -579,18 +488,9 @@ Q_DECL_RELAXED_CONSTEXPR inline auto ToPixel2(double val, const Unit &unit) -> d
return 0; return 0;
} }
template <typename T> constexpr inline auto Pixel2ToInch2(T pix) -> T template<typename T> constexpr inline auto Pixel2ToInch2(T pix) -> T { return pix / (PrintDPI * PrintDPI);}
{ template<typename T> constexpr inline auto Pixel2ToMm2(T pix) -> T { return Pixel2ToInch2(pix) / 0.001550031;}
return pix / (PrintDPI * PrintDPI); template<typename T> constexpr inline auto Pixel2ToCm2(T pix) -> T { return Pixel2ToInch2(pix) / 0.15500031;}
}
template <typename T> constexpr inline auto Pixel2ToMm2(T pix) -> T
{
return Pixel2ToInch2(pix) / 0.001550031;
}
template <typename T> constexpr inline auto Pixel2ToCm2(T pix) -> T
{
return Pixel2ToInch2(pix) / 0.15500031;
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel2(double pix, const Unit &unit) -> double Q_DECL_RELAXED_CONSTEXPR inline auto FromPixel2(double pix, const Unit &unit) -> double
@ -687,8 +587,8 @@ Q_DECL_RELAXED_CONSTEXPR inline auto UnitConvertor(qreal value, const Unit &from
* @brief UnitConvertor Converts the values of the given margin from given unit to the new unit. * @brief UnitConvertor Converts the values of the given margin from given unit to the new unit.
* returns a new instand of QMarginsF. * returns a new instand of QMarginsF.
*/ */
Q_DECL_RELAXED_CONSTEXPR inline auto UnitConvertor(const QMarginsF &margins, const Unit &from, const Unit &to) Q_DECL_RELAXED_CONSTEXPR inline auto UnitConvertor(const QMarginsF &margins, const Unit &from,
-> QMarginsF const Unit &to) -> QMarginsF
{ {
const qreal left = UnitConvertor(margins.left(), from, to); const qreal left = UnitConvertor(margins.left(), from, to);
const qreal top = UnitConvertor(margins.top(), from, to); const qreal top = UnitConvertor(margins.top(), from, to);
@ -699,7 +599,6 @@ Q_DECL_RELAXED_CONSTEXPR inline auto UnitConvertor(const QMarginsF &margins, con
} }
void InitLanguages(QComboBox *combobox); void InitLanguages(QComboBox *combobox);
void InitPieceLabelLanguages(QComboBox *combobox);
Q_REQUIRED_RESULT auto SupportedLocales() -> QStringList; Q_REQUIRED_RESULT auto SupportedLocales() -> QStringList;
Q_REQUIRED_RESULT auto StrippedName(const QString &fullFileName) -> QString; Q_REQUIRED_RESULT auto StrippedName(const QString &fullFileName) -> QString;
@ -743,8 +642,7 @@ struct CustomSARecord
endPoint(0), endPoint(0),
reverse(false), reverse(false),
includeType(PiecePathIncludeType::AsCustomSA) includeType(PiecePathIncludeType::AsCustomSA)
{ {}
}
friend auto operator<<(QDataStream &out, const CustomSARecord &record) -> QDataStream &; friend auto operator<<(QDataStream &out, const CustomSARecord &record) -> QDataStream &;
friend auto operator>>(QDataStream &in, CustomSARecord &record) -> QDataStream &; friend auto operator>>(QDataStream &in, CustomSARecord &record) -> QDataStream &;
@ -774,9 +672,7 @@ Q_DECLARE_TYPEINFO(CustomSARecord, Q_MOVABLE_TYPE); // NOLINT
** this file shall be copyright (C) 2006-2008 by Adam Higerd. ** this file shall be copyright (C) 2006-2008 by Adam Higerd.
****************************************************************************/ ****************************************************************************/
#define QXT_DECLARE_PRIVATE(PUB) \ #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface<PUB, PUB##Private> qxt_d;
friend class PUB##Private; \
QxtPrivateInterface<PUB, PUB##Private> qxt_d;
#define QXT_DECLARE_PUBLIC(PUB) friend class PUB; #define QXT_DECLARE_PUBLIC(PUB) friend class PUB;
#define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this); #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this);
#define QXT_D(PUB) PUB##Private& d = qxt_d() #define QXT_D(PUB) PUB##Private& d = qxt_d()
@ -786,15 +682,18 @@ QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wsuggest-final-types") QT_WARNING_DISABLE_GCC("-Wsuggest-final-types")
QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods") QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods")
template <typename PUB> class QxtPrivate template <typename PUB>
class QxtPrivate
{ {
public: public:
QxtPrivate() QxtPrivate(): qxt_p_ptr(nullptr)
: qxt_p_ptr(nullptr) {}
virtual ~QxtPrivate()
{}
inline void QXT_setPublic(PUB* pub)
{ {
qxt_p_ptr = pub;
} }
virtual ~QxtPrivate() {}
inline void QXT_setPublic(PUB *pub) { qxt_p_ptr = pub; }
protected: protected:
inline auto qxt_p() -> PUB & { return *qxt_p_ptr; } inline auto qxt_p() -> PUB & { return *qxt_p_ptr; }
@ -810,18 +709,22 @@ private:
// cppcheck-suppress unknownMacro // cppcheck-suppress unknownMacro
QT_WARNING_POP QT_WARNING_POP
template <typename PUB, typename PVT> class QxtPrivateInterface template <typename PUB, typename PVT>
class QxtPrivateInterface
{ {
friend class QxtPrivate<PUB>; friend class QxtPrivate<PUB>;
public: public:
QxtPrivateInterface() QxtPrivateInterface() : pvt(new PVT)
: pvt(new PVT) {}
~QxtPrivateInterface()
{ {
delete pvt;
} }
~QxtPrivateInterface() { delete pvt; }
inline void setPublic(PUB *pub) { pvt->QXT_setPublic(pub); } inline void setPublic(PUB* pub)
{
pvt->QXT_setPublic(pub);
}
inline auto operator()() -> PVT & { return *static_cast<PVT *>(pvt); } inline auto operator()() -> PVT & { return *static_cast<PVT *>(pvt); }
inline auto operator()() const -> const PVT & { return *static_cast<PVT *>(pvt); } inline auto operator()() const -> const PVT & { return *static_cast<PVT *>(pvt); }
inline auto operator->() -> PVT * { return static_cast<PVT *>(pvt); } inline auto operator->() -> PVT * { return static_cast<PVT *>(pvt); }

View file

@ -29,14 +29,12 @@
#include "customevents.h" #include "customevents.h"
#include "vvalentinasettings.h" #include "vvalentinasettings.h"
#include <QTranslator>
#include <QWidget> #include <QWidget>
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VAbstractValApplication::VAbstractValApplication(int &argc, char **argv) VAbstractValApplication::VAbstractValApplication(int &argc, char **argv)
: VAbstractApplication(argc, argv) : VAbstractApplication(argc, argv)
{ {}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VAbstractValApplication::toPixel(double val) const -> double auto VAbstractValApplication::toPixel(double val) const -> double
@ -73,7 +71,6 @@ void VAbstractValApplication::OpenSettings()
auto VAbstractValApplication::ValentinaSettings() -> VValentinaSettings * auto VAbstractValApplication::ValentinaSettings() -> VValentinaSettings *
{ {
SCASSERT(settings != nullptr) SCASSERT(settings != nullptr)
return qobject_cast<VValentinaSettings *>(settings); return qobject_cast<VValentinaSettings *>(settings);
} }
@ -82,29 +79,3 @@ auto VAbstractValApplication::VApp() -> VAbstractValApplication *
{ {
return qobject_cast<VAbstractValApplication*>(QCoreApplication::instance()); return qobject_cast<VAbstractValApplication*>(QCoreApplication::instance());
} }
//---------------------------------------------------------------------------------------------------------------------
auto VAbstractValApplication::GetPlaceholderTranslator() -> QSharedPointer<QTranslator>
{
VValentinaSettings *settings = ValentinaSettings();
QString pieceLabelLocale = settings->GetPieceLabelLocale();
if (pieceLabelLocale == VCommonSettings::defaultPieceLabelLocale)
{
pieceLabelLocale = settings->GetLocale();
}
if (pieceLabelLocale.startsWith(QLatin1String("ru")))
{
return QSharedPointer<QTranslator>(new QTranslator);
}
QSharedPointer<QTranslator> translator = QSharedPointer<QTranslator>(new QTranslator);
const QString appQmDir = VAbstractApplication::translationsPath(settings->GetLocale());
if (translator->load(QStringLiteral("valentina_") + pieceLabelLocale, appQmDir))
{
return translator;
}
return QSharedPointer<QTranslator>(new QTranslator);
}

View file

@ -37,13 +37,12 @@ class VAbstractPattern;
class VMainGraphicsView; class VMainGraphicsView;
class QGraphicsScene; class QGraphicsScene;
class VValentinaSettings; class VValentinaSettings;
class QTranslator;
class VAbstractValApplication : public VAbstractApplication class VAbstractValApplication : public VAbstractApplication
{ {
Q_OBJECT // NOLINT Q_OBJECT // NOLINT
public:
public : VAbstractValApplication(int &argc, char **argv); VAbstractValApplication(int &argc, char **argv);
virtual ~VAbstractValApplication() =default; virtual ~VAbstractValApplication() =default;
auto GetCustomerName() const -> QString; auto GetCustomerName() const -> QString;
@ -126,8 +125,6 @@ class VAbstractValApplication : public VAbstractApplication
static auto VApp() -> VAbstractValApplication *; static auto VApp() -> VAbstractValApplication *;
auto GetPlaceholderTranslator() -> QSharedPointer<QTranslator>;
protected: protected:
QString m_customerName{}; QString m_customerName{};
QDate m_customerBirthDate{}; QDate m_customerBirthDate{};

View file

@ -29,17 +29,16 @@
#include "vcommonsettings.h" #include "vcommonsettings.h"
#include <QApplication> #include <QApplication>
#include <QColor>
#include <QDate> #include <QDate>
#include <QDir> #include <QDir>
#include <QFont>
#include <QGlobalStatic>
#include <QLocale> #include <QLocale>
#include <QMarginsF>
#include <QMessageLogger> #include <QMessageLogger>
#include <QStringLiteral>
#include <QVariant> #include <QVariant>
#include <QtDebug> #include <QtDebug>
#include <QFont>
#include <QGlobalStatic>
#include <QMarginsF>
#include <QColor>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include "vtextcodec.h" #include "vtextcodec.h"
@ -47,9 +46,9 @@
#include <QTextCodec> #include <QTextCodec>
#endif #endif
#include "compatibility.h"
#include "def.h" #include "def.h"
#include "defglobal.h" #include "defglobal.h"
#include "compatibility.h"
#include "literals.h" #include "literals.h"
const int VCommonSettings::defaultScrollingDuration = 300; const int VCommonSettings::defaultScrollingDuration = 300;
@ -72,102 +71,66 @@ const qreal VCommonSettings::defaultScrollingAcceleration = 1.3;
const qreal VCommonSettings::scrollingAccelerationMin = 1.0; const qreal VCommonSettings::scrollingAccelerationMin = 1.0;
const qreal VCommonSettings::scrollingAccelerationMax = 10.0; const qreal VCommonSettings::scrollingAccelerationMax = 10.0;
const QString VCommonSettings::defaultPieceLabelLocale = QStringLiteral("default");
#ifndef QPRINTENGINE_H #ifndef QPRINTENGINE_H
Q_DECLARE_METATYPE(QMarginsF) // NOLINT Q_DECLARE_METATYPE(QMarginsF) // NOLINT
#endif #endif
namespace namespace
{ {
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsIndividualMeasurements, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsIndividualMeasurements, (QLatin1String("paths/individual_measurements"))) // NOLINT
(QLatin1String("paths/individual_measurements"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsMultisizeMeasurements, (QLatin1String("paths/standard_measurements"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsMultisizeMeasurements,
(QLatin1String("paths/standard_measurements"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsPattern, (QLatin1String("paths/pattern"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsPattern, (QLatin1String("paths/pattern"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsTemplates, (QLatin1String("paths/templates"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsTemplates, (QLatin1String("paths/templates"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsLabelTemplate, (QLatin1String("paths/labels"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsLabelTemplate, (QLatin1String("paths/labels"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsManualLayouts, (QLatin1String("paths/manualLayouts"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPathsManualLayouts, (QLatin1String("paths/manualLayouts"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationOsSeparator, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationOsSeparator, (QLatin1String("configuration/osSeparator"))) // NOLINT
(QLatin1String("configuration/osSeparator"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAutosaveState, (QLatin1String("configuration/autosave/state"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAutosaveState, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAutosaveTime , (QLatin1String("configuration/autosave/time"))) // NOLINT
(QLatin1String("configuration/autosave/state"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAutosaveTime,
(QLatin1String("configuration/autosave/time"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationLocale, (QLatin1String("configuration/locale"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationLocale, (QLatin1String("configuration/locale"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationPieceLabelLocale, // NOLINT
(QLatin1String("configuration/pieceLabelLocale")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPMSystemCode, (QLatin1String("configuration/pmscode"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPMSystemCode, (QLatin1String("configuration/pmscode"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationUnit, (QLatin1String("configuration/unit"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationUnit, (QLatin1String("configuration/unit"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationConfirmItemDeletion, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationConfirmItemDeletion, (QLatin1String("configuration/confirm_item_deletion"))) // NOLINT
(QLatin1String("configuration/confirm_item_deletion"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationConfirmFormatRewriting, (QLatin1String("configuration/confirm_format_rewriting"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationConfirmFormatRewriting, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAskContinueIfLayoutStale, (QLatin1String("configuration/askContinueIfLayoutStale"))) // NOLINT
(QLatin1String("configuration/confirm_format_rewriting"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationToolBarStyle, (QLatin1String("configuration/tool_bar_style"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationAskContinueIfLayoutStale, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationFreeCurveMode, (QLatin1String("configuration/freeCurveMode"))) // NOLINT
(QLatin1String("configuration/askContinueIfLayoutStale"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDoubleClickZoomFitBestCurrentPP, (QLatin1String("configuration/doubleClickZoomFitBestCurrentPP"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationToolBarStyle, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationInteractiveTools, (QLatin1String("configuration/interactiveTools"))) // NOLINT
(QLatin1String("configuration/tool_bar_style"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDontUseNativeDialog, (QLatin1String("configuration/dontUseNativeDialog"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationFreeCurveMode,
(QLatin1String("configuration/freeCurveMode"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDoubleClickZoomFitBestCurrentPP,
(QLatin1String("configuration/doubleClickZoomFitBestCurrentPP"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationInteractiveTools,
(QLatin1String("configuration/interactiveTools"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDontUseNativeDialog,
(QLatin1String("configuration/dontUseNativeDialog"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUndo, (QLatin1String("pattern/undo"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUndo, (QLatin1String("pattern/undo"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternForbidFlipping, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternForbidFlipping, (QLatin1String("pattern/forbidFlipping"))) // NOLINT
(QLatin1String("pattern/forbidFlipping"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternForceFlipping, (QLatin1String("pattern/forceFlipping"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternForceFlipping, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternSewLineOnDrawing, (QLatin1String("pattern/sewLineOnDrawing"))) // NOLINT
(QLatin1String("pattern/forceFlipping"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternSewLineOnDrawing,
(QLatin1String("pattern/sewLineOnDrawing"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternHideMainPath, (QLatin1String("pattern/hideMainPath"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternHideMainPath, (QLatin1String("pattern/hideMainPath"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDoublePassmark, (QLatin1String("pattern/doublePassmark"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDoublePassmark, (QLatin1String("pattern/doublePassmark"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternDefaultSeamAllowance, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternDefaultSeamAllowance, (QLatin1String("pattern/defaultSeamAllowance"))) // NOLINT
(QLatin1String("pattern/defaultSeamAllowance"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLabelFont, (QLatin1String("pattern/labelFont"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLabelFont, (QLatin1String("pattern/labelFont"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLineWidth, (QLatin1String("pattern/lineWidth"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLineWidth, (QLatin1String("pattern/lineWidth"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternCurveApproximationScale, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternCurveApproximationScale, (QLatin1String("pattern/curveApproximationScale"))) // NOLINT
(QLatin1String("pattern/curveApproximationScale"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternShowCurveDetails, (QLatin1String("pattern/showCurveDetails"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternShowCurveDetails, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternPieceShowMainPath, (QLatin1String("pattern/pieceShowMainPath"))) // NOLINT
(QLatin1String("pattern/showCurveDetails"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLabelFontSize, (QLatin1String("pattern/labelFontSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternPieceShowMainPath,
(QLatin1String("pattern/pieceShowMainPath"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternLabelFontSize,
(QLatin1String("pattern/labelFontSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternHideLabels, (QLatin1String("pattern/hideLabels"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternHideLabels, (QLatin1String("pattern/hideLabels"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternShowAccuracyRadius, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternShowAccuracyRadius, (QLatin1String("pattern/showAccuracyRadius"))) // NOLINT
(QLatin1String("pattern/showAccuracyRadius"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUseOpenGLRender, (QLatin1String("pattern/useOpenGLRender"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternUseOpenGLRender, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternGraphicalOutput, (QLatin1String("pattern/graphicalOutput"))) // NOLINT
(QLatin1String("pattern/useOpenGLRender"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPatternGraphicalOutput,
(QLatin1String("pattern/graphicalOutput"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRecentFileList, (QLatin1String("recentFileList"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRecentFileList, (QLatin1String("recentFileList"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRestoreFileList, (QLatin1String("restoreFileList"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralRestoreFileList, (QLatin1String("restoreFileList"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralGeometry, (QLatin1String("geometry"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralGeometry, (QLatin1String("geometry"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralToolbarsState, (QLatin1String("toolbarsState"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingGeneralToolbarsState, (QLatin1String("toolbarsState"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDarkMode, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingConfigurationDarkMode, (QLatin1String("configuration/dark_mode"))) // NOLINT
(QLatin1String("configuration/dark_mode"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPreferenceDialogSize, (QLatin1String("preferenceDialogSize"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingPreferenceDialogSize, (QLatin1String("preferenceDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingToolSeamAllowanceDialogSize, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingToolSeamAllowanceDialogSize, (QLatin1String("toolSeamAllowanceDialogSize"))) // NOLINT
(QLatin1String("toolSeamAllowanceDialogSize"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingIncrementsDialogSize, (QLatin1String("toolIncrementsDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingIncrementsDialogSize, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingFormulaWizardDialogSize, (QLatin1String("formulaWizardDialogSize"))) // NOLINT
(QLatin1String("toolIncrementsDialogSize"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingFinalMeasurementsDialogSize, (QLatin1String("finalMeasurementsDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingFormulaWizardDialogSize, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutSettingsDialogSize, (QLatin1String("layoutSettingsDialogSize"))) // NOLINT
(QLatin1String("formulaWizardDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingFinalMeasurementsDialogSize,
(QLatin1String("finalMeasurementsDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLayoutSettingsDialogSize,
(QLatin1String("layoutSettingsDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDialogSplinePathSize, (QLatin1String("splinePathDialogSize"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDialogSplinePathSize, (QLatin1String("splinePathDialogSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingAutomaticallyCheckUpdates, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingAutomaticallyCheckUpdates, (QLatin1String("automaticallyCheckUpdates"))) // NOLINT
(QLatin1String("automaticallyCheckUpdates"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLatestSkippedVersion, (QLatin1String("lastestSkippedVersion"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLatestSkippedVersion,
(QLatin1String("lastestSkippedVersion"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDateOfLastRemind, (QLatin1String("dateOfLastRemind"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDateOfLastRemind, (QLatin1String("dateOfLastRemind"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingCSVWithHeader, (QLatin1String("csv/withHeader"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingCSVWithHeader, (QLatin1String("csv/withHeader"))) // NOLINT
@ -175,28 +138,21 @@ Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingCSVCodec, (QLatin1String("csv/wi
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingCSVSeparator, (QLatin1String("csv/withSeparator"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingCSVSeparator, (QLatin1String("csv/withSeparator"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelDateFormat, (QLatin1String("label/dateFormat"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelDateFormat, (QLatin1String("label/dateFormat"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelUserDateFormats, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelUserDateFormats, (QLatin1String("label/userDateFormats"))) // NOLINT
(QLatin1String("label/userDateFormats"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelTimeFormat, (QLatin1String("label/timeFormat"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelTimeFormat, (QLatin1String("label/timeFormat"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelUserTimeFormats, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingLabelUserTimeFormats, (QLatin1String("label/userTimeFormats"))) // NOLINT
(QLatin1String("label/userTimeFormats"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingDuration, (QLatin1String("scrolling/duration"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingDuration, (QLatin1String("scrolling/duration"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingUpdateInterval, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingUpdateInterval, (QLatin1String("scrolling/updateInterval"))) // NOLINT
(QLatin1String("scrolling/updateInterval"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingSensorMouseScale, (QLatin1String("scrolling/sensorMouseScale"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingSensorMouseScale, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingWheelMouseScale, (QLatin1String("scrolling/wheelMouseScale"))) // NOLINT
(QLatin1String("scrolling/sensorMouseScale"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingAcceleration, (QLatin1String("scrolling/acceleration"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingWheelMouseScale,
(QLatin1String("scrolling/wheelMouseScale"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingScrollingAcceleration,
(QLatin1String("scrolling/acceleration"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFMargins, (QLatin1String("tiledPDF/margins"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFMargins, (QLatin1String("tiledPDF/margins"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFOrientation, (QLatin1String("tiledPDF/orientation"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingTiledPDFOrientation, (QLatin1String("tiledPDF/orientation"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingWatermarkEditorSize, (QLatin1String("watermarkEditorSize"))) // NOLINT Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingWatermarkEditorSize, (QLatin1String("watermarkEditorSize"))) // NOLINT
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingWatermarkCustomColors, Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingWatermarkCustomColors, (QLatin1String("watermarkCustomColors"))) // NOLINT
(QLatin1String("watermarkCustomColors"))) // NOLINT
// Reading settings file is very expensive, cache curve approximation to speed up getting value // Reading settings file is very expensive, cache curve approximation to speed up getting value
qreal curveApproximationCached = -1; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) qreal curveApproximationCached = -1; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
@ -328,17 +284,15 @@ auto PrepareStandardFiles(const QString &currentPath, const QString &standardPat
} // namespace } // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VCommonSettings::VCommonSettings(Format format, Scope scope, const QString &organization, const QString &application, VCommonSettings::VCommonSettings(Format format, Scope scope, const QString &organization,
QObject *parent) const QString &application, QObject *parent)
:QSettings(format, scope, organization, application, parent) :QSettings(format, scope, organization, application, parent)
{ {}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VCommonSettings::VCommonSettings(const QString &fileName, QSettings::Format format, QObject *parent) VCommonSettings::VCommonSettings(const QString &fileName, QSettings::Format format, QObject *parent)
:QSettings(fileName, format, parent) :QSettings(fileName, format, parent)
{ {}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::SharePath(const QString &shareItem) -> QString auto VCommonSettings::SharePath(const QString &shareItem) -> QString
@ -627,18 +581,6 @@ void VCommonSettings::SetLocale(const QString &value)
*localeCached = value; *localeCached = value;
} }
//---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::GetPieceLabelLocale() const -> QString
{
return value(*settingConfigurationPieceLabelLocale, VCommonSettings::defaultPieceLabelLocale).toString();
}
//---------------------------------------------------------------------------------------------------------------------
void VCommonSettings::SetPieceLabelLocale(const QString &value)
{
setValue(*settingConfigurationPieceLabelLocale, value);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::GetPMSystemCode() const -> QString auto VCommonSettings::GetPMSystemCode() const -> QString
{ {
@ -654,8 +596,8 @@ void VCommonSettings::SetPMSystemCode(const QString &value)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::GetUnit() const -> QString auto VCommonSettings::GetUnit() const -> QString
{ {
return value(*settingConfigurationUnit, QLocale().measurementSystem() == QLocale::MetricSystem ? unitCM : unitINCH) return value(*settingConfigurationUnit,
.toString(); QLocale().measurementSystem() == QLocale::MetricSystem ? unitCM : unitINCH).toString();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -724,6 +666,7 @@ void VCommonSettings::SetDarkMode(const bool &value)
setValue(*settingConfigurationDarkMode, value); setValue(*settingConfigurationDarkMode, value);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::IsFreeCurveMode() const -> bool auto VCommonSettings::IsFreeCurveMode() const -> bool
{ {
@ -1159,7 +1102,8 @@ auto VCommonSettings::GetDefaultSeamAllowance() -> double
if (not ok) if (not ok)
{ {
qDebug()<< "Could not convert value"<<value(*settingPatternDefaultSeamAllowance, 0) qDebug()<< "Could not convert value"<<value(*settingPatternDefaultSeamAllowance, 0)
<< "to real. Return default value for default seam allowance is " << defaultValue << QChar('.'); << "to real. Return default value for default seam allowance is "
<< defaultValue << QChar('.');
val = defaultValue; val = defaultValue;
} }
@ -1244,8 +1188,8 @@ void VCommonSettings::SetShowAccuracyRadius(bool value)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::GetLabelDateFormat() const -> QString auto VCommonSettings::GetLabelDateFormat() const -> QString
{ {
const QString format = const QString format = value(*settingLabelDateFormat,
value(*settingLabelDateFormat, ConstFirst<QString>(VCommonSettings::PredefinedDateFormats())).toString(); ConstFirst<QString> (VCommonSettings::PredefinedDateFormats())).toString();
const QStringList allFormats = VCommonSettings::PredefinedDateFormats() + GetUserDefinedDateFormats(); const QStringList allFormats = VCommonSettings::PredefinedDateFormats() + GetUserDefinedDateFormats();
return allFormats.contains(format) ? format : ConstFirst<QString> (VCommonSettings::PredefinedDateFormats()); return allFormats.contains(format) ? format : ConstFirst<QString> (VCommonSettings::PredefinedDateFormats());
@ -1260,7 +1204,9 @@ void VCommonSettings::SetLabelDateFormat(const QString &format)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::PredefinedDateFormats() -> QStringList auto VCommonSettings::PredefinedDateFormats() -> QStringList
{ {
return QStringList{"MM-dd-yyyy", return QStringList
{
"MM-dd-yyyy",
"d/M/yy", "d/M/yy",
"ddddMMMM dd, yyyy", "ddddMMMM dd, yyyy",
"dd/MM/yy", "dd/MM/yy",
@ -1279,7 +1225,8 @@ auto VCommonSettings::PredefinedDateFormats() -> QStringList
"yyyy-MM-dd", "yyyy-MM-dd",
"MM/yy", "MM/yy",
"MMM dd", "MMM dd",
"MMMM"}; "MMMM"
};
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1297,8 +1244,8 @@ void VCommonSettings::SetUserDefinedDateFormats(const QStringList &formats)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::GetLabelTimeFormat() const -> QString auto VCommonSettings::GetLabelTimeFormat() const -> QString
{ {
const QString format = const QString format = value(*settingLabelTimeFormat,
value(*settingLabelTimeFormat, ConstFirst<QString>(VCommonSettings::PredefinedTimeFormats())).toString(); ConstFirst<QString> (VCommonSettings::PredefinedTimeFormats())).toString();
const QStringList allFormats = VCommonSettings::PredefinedTimeFormats() + GetUserDefinedTimeFormats(); const QStringList allFormats = VCommonSettings::PredefinedTimeFormats() + GetUserDefinedTimeFormats();
return allFormats.contains(format) ? format : ConstFirst<QString> (VCommonSettings::PredefinedTimeFormats()); return allFormats.contains(format) ? format : ConstFirst<QString> (VCommonSettings::PredefinedTimeFormats());
@ -1313,7 +1260,13 @@ void VCommonSettings::SetLabelTimeFormat(const QString &format)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VCommonSettings::PredefinedTimeFormats() -> QStringList auto VCommonSettings::PredefinedTimeFormats() -> QStringList
{ {
return QStringList{"hh:mm:ss", "hh:mm:ss AP", "hh:mm", "hh:mm AP"}; return QStringList
{
"hh:mm:ss",
"hh:mm:ss AP",
"hh:mm",
"hh:mm AP"
};
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1559,8 +1512,8 @@ void VCommonSettings::SetGraphicalOutput(const bool &value)
auto VCommonSettings::GetTiledPDFMargins(const Unit &unit) const -> QMarginsF auto VCommonSettings::GetTiledPDFMargins(const Unit &unit) const -> QMarginsF
{ {
// default value is 10mm. We save the margins in mm in the setting. // default value is 10mm. We save the margins in mm in the setting.
return UnitConvertor(ValueOrDef<QMarginsF>(*this, *settingTiledPDFMargins, QMarginsF(10, 10, 10, 10)), Unit::Mm, return UnitConvertor(
unit); ValueOrDef<QMarginsF>(*this, *settingTiledPDFMargins, QMarginsF(10, 10, 10, 10)), Unit::Mm, unit);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View file

@ -38,16 +38,17 @@
#include <QStringList> #include <QStringList>
#include <QtGlobal> #include <QtGlobal>
#include "../vlayout/vlayoutdef.h"
#include "../vmisc/def.h" #include "../vmisc/def.h"
#include "../vlayout/vlayoutdef.h"
class QMarginsF; class QMarginsF;
class VCommonSettings : public QSettings class VCommonSettings : public QSettings
{ {
Q_OBJECT // NOLINT Q_OBJECT // NOLINT
public : VCommonSettings(Format format, Scope scope, const QString &organization, public:
const QString &application = QString(), QObject *parent = nullptr); VCommonSettings(Format format, Scope scope, const QString &organization, const QString &application = QString(),
QObject *parent = nullptr);
VCommonSettings(const QString &fileName, Format format, QObject *parent = nullptr); VCommonSettings(const QString &fileName, Format format, QObject *parent = nullptr);
~VCommonSettings() override =default; ~VCommonSettings() override =default;
@ -99,10 +100,6 @@ class VCommonSettings : public QSettings
auto GetLocale() const -> QString; auto GetLocale() const -> QString;
void SetLocale(const QString &value); void SetLocale(const QString &value);
static const QString defaultPieceLabelLocale;
auto GetPieceLabelLocale() const -> QString;
void SetPieceLabelLocale(const QString &value);
auto GetPMSystemCode() const -> QString; auto GetPMSystemCode() const -> QString;
void SetPMSystemCode(const QString &value); void SetPMSystemCode(const QString &value);
@ -309,6 +306,7 @@ class VCommonSettings : public QSettings
void SetWatermarkCustomColors(QVector<QColor> colors); void SetWatermarkCustomColors(QVector<QColor> colors);
protected: protected:
template <typename T> template <typename T>
static auto GetCachedValue(const QSettings &settings, T &cache, const QString &setting, T defValue, T valueMin, static auto GetCachedValue(const QSettings &settings, T &cache, const QString &setting, T defValue, T valueMin,
T valueMax) -> T; T valueMax) -> T;
@ -361,8 +359,8 @@ inline auto VCommonSettings::ValueOrDef(const QSettings &settings, const QString
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
template <> template <>
inline auto VCommonSettings::ValueOrDef<Cases>(const QSettings &settings, const QString &setting, const Cases &defValue) inline auto VCommonSettings::ValueOrDef<Cases>(const QSettings &settings, const QString &setting,
-> Cases const Cases &defValue) -> Cases
{ {
const QVariant val = settings.value(setting, QVariant::fromValue(static_cast<int>(defValue))); const QVariant val = settings.value(setting, QVariant::fromValue(static_cast<int>(defValue)));
const int g = val.canConvert<int>() ? val.toInt() : static_cast<int>(defValue); const int g = val.canConvert<int>() ? val.toInt() : static_cast<int>(defValue);

View file

@ -178,13 +178,13 @@ void VPieceLabelData::SetOnFold(bool onFold)
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VPieceLabelData::GetAreaShortName() const -> QString auto VPieceLabelData::GetAreaShartName() const -> QString
{ {
return d->m_areaShortName; return d->m_areaShortName;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VPieceLabelData::SetAreaShortName(const QString &val) void VPieceLabelData::SetAreaShartName(const QString &val)
{ {
d->m_areaShortName = val; d->m_areaShortName = val;
} }

View file

@ -81,8 +81,8 @@ public:
auto IsOnFold() const -> bool; auto IsOnFold() const -> bool;
void SetOnFold(bool onFold); void SetOnFold(bool onFold);
auto GetAreaShortName() const -> QString; auto GetAreaShartName() const -> QString;
void SetAreaShortName(const QString &val); void SetAreaShartName(const QString &val);
auto GetLabelTemplate() const -> QVector<VLabelTemplateLine>; auto GetLabelTemplate() const -> QVector<VLabelTemplateLine>;
void SetLabelTemplate(const QVector<VLabelTemplateLine> &lines); void SetLabelTemplate(const QVector<VLabelTemplateLine> &lines);

View file

@ -28,26 +28,26 @@
#include "vcontainer.h" #include "vcontainer.h"
#include <QLoggingCategory> #include <climits>
#include <QUuid>
#include <QVector> #include <QVector>
#include <QtDebug> #include <QtDebug>
#include <climits> #include <QUuid>
#include <QLoggingCategory>
#include "../ifc/exception/vexception.h" #include "../ifc/exception/vexception.h"
#include "../vgeometry/vabstractcubicbezierpath.h" #include "../vgeometry/vabstractcubicbezierpath.h"
#include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vabstractcurve.h"
#include "../vgeometry/varc.h"
#include "../vgeometry/vellipticalarc.h"
#include "../vgeometry/vgeometrydef.h" #include "../vgeometry/vgeometrydef.h"
#include "../vgeometry/vgobject.h" #include "../vgeometry/vgobject.h"
#include "../vgeometry/vpointf.h" #include "../vgeometry/vpointf.h"
#include "../vgeometry/vspline.h" #include "../vgeometry/vspline.h"
#include "../vgeometry/varc.h"
#include "../vgeometry/vellipticalarc.h"
#include "../vmisc/literals.h" #include "../vmisc/literals.h"
#include "variables/varcradius.h" #include "variables/varcradius.h"
#include "variables/vcurveangle.h" #include "variables/vcurveangle.h"
#include "variables/vcurveclength.h"
#include "variables/vcurvelength.h" #include "variables/vcurvelength.h"
#include "variables/vcurveclength.h"
#include "variables/vincrement.h" #include "variables/vincrement.h"
#include "variables/vlineangle.h" #include "variables/vlineangle.h"
#include "variables/vlinelength.h" #include "variables/vlinelength.h"
@ -119,9 +119,9 @@ auto VContainer::operator=(const VContainer &data) -> VContainer &
#ifdef Q_COMPILER_RVALUE_REFS #ifdef Q_COMPILER_RVALUE_REFS
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VContainer::VContainer(VContainer &&data) Q_DECL_NOTHROW : d(std::move(data.d)) VContainer::VContainer(VContainer &&data) Q_DECL_NOTHROW
{ :d(std::move(data.d))
} {}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VContainer::operator=(VContainer &&data) Q_DECL_NOTHROW->VContainer & auto VContainer::operator=(VContainer &&data) Q_DECL_NOTHROW->VContainer &
@ -144,8 +144,7 @@ VContainer::VContainer(const VContainer &data)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
VContainer::~VContainer() VContainer::~VContainer()
{ {}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VContainer::UniqueNamespace() -> QString auto VContainer::UniqueNamespace() -> QString
@ -154,7 +153,8 @@ auto VContainer::UniqueNamespace() -> QString
do do
{ {
candidate = QUuid::createUuid().toString(); candidate = QUuid::createUuid().toString();
} while (_id.contains(candidate)); }
while(_id.contains(candidate));
return candidate; return candidate;
} }
@ -204,9 +204,11 @@ auto VContainer::GetPiece(quint32 id) const -> VPiece
{ {
return d->pieces->value(id); return d->pieces->value(id);
} }
else
{
throw VExceptionBadId(tr("Can't find object"), id); throw VExceptionBadId(tr("Can't find object"), id);
} }
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VContainer::GetPiecePath(quint32 id) const -> VPiecePath auto VContainer::GetPiecePath(quint32 id) const -> VPiecePath
@ -390,9 +392,15 @@ void VContainer::ClearForFullParse()
d->pieces->clear(); d->pieces->clear();
d->piecePaths->clear(); d->piecePaths->clear();
Q_STATIC_ASSERT_X(static_cast<int>(VarType::Unknown) == 12, "Check that you used all types"); Q_STATIC_ASSERT_X(static_cast<int>(VarType::Unknown) == 12, "Check that you used all types");
ClearVariables(QVector<VarType>{VarType::Increment, VarType::IncrementSeparator, VarType::LineAngle, ClearVariables(QVector<VarType>{VarType::Increment,
VarType::LineLength, VarType::CurveLength, VarType::CurveCLength, VarType::IncrementSeparator,
VarType::ArcRadius, VarType::CurveAngle, VarType::PieceExternalArea, VarType::LineAngle,
VarType::LineLength,
VarType::CurveLength,
VarType::CurveCLength,
VarType::ArcRadius,
VarType::CurveAngle,
VarType::PieceExternalArea,
VarType::PieceSeamLineArea}); VarType::PieceSeamLineArea});
ClearGObjects(); ClearGObjects();
ClearUniqueNames(); ClearUniqueNames();
@ -487,8 +495,9 @@ void VContainer::AddArc(const QSharedPointer<VAbstractCurve> &arc, const quint32
void VContainer::AddCurve(const QSharedPointer<VAbstractCurve> &curve, const quint32 &id, quint32 parentId) void VContainer::AddCurve(const QSharedPointer<VAbstractCurve> &curve, const quint32 &id, quint32 parentId)
{ {
const GOType curveType = curve->getType(); const GOType curveType = curve->getType();
if (curveType != GOType::Spline && curveType != GOType::SplinePath && curveType != GOType::CubicBezier && if (curveType != GOType::Spline && curveType != GOType::SplinePath &&
curveType != GOType::CubicBezierPath && curveType != GOType::Arc && curveType != GOType::EllipticalArc) curveType != GOType::CubicBezier && curveType != GOType::CubicBezierPath &&
curveType != GOType::Arc && curveType != GOType::EllipticalArc)
{ {
throw VException(tr("Can't create a curve with type '%1'").arg(static_cast<int>(curveType))); throw VException(tr("Can't create a curve with type '%1'").arg(static_cast<int>(curveType)));
} }

View file

@ -573,7 +573,7 @@ auto VPiece::MissingPlaceLabels(const VPiece &det) const -> QVector<quint32>
void VPiece::SetPieceLabelData(const VPieceLabelData &data) void VPiece::SetPieceLabelData(const VPieceLabelData &data)
{ {
d->m_ppData = data; d->m_ppData = data;
d->m_ppData.SetAreaShortName(VPieceArea::PieceShortName(*this)); d->m_ppData.SetAreaShartName(VPieceArea::PieceShortName(*this));
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View file

@ -27,28 +27,28 @@
*************************************************************************/ *************************************************************************/
#include "dialogeditlabel.h" #include "dialogeditlabel.h"
#include "../vmisc/vabstractapplication.h"
#include "ui_dialogeditlabel.h" #include "ui_dialogeditlabel.h"
#include "../vmisc/vabstractapplication.h"
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
#include "../vmisc/backport/qoverload.h" #include "../vmisc/backport/qoverload.h"
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0) #endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
#include "../ifc/exception/vexception.h"
#include "../ifc/xml/vabstractpattern.h"
#include "../ifc/xml/vlabeltemplateconverter.h"
#include "../tools/dialogtool.h"
#include "../vformat/vlabeltemplate.h" #include "../vformat/vlabeltemplate.h"
#include "../vpatterndb/calculator.h" #include "../ifc/xml/vlabeltemplateconverter.h"
#include "../vpatterndb/floatItemData/vpiecelabeldata.h" #include "../ifc/xml/vabstractpattern.h"
#include "../vpatterndb/variables/vmeasurement.h" #include "../ifc/exception/vexception.h"
#include "../vpatterndb/variables/vpiecearea.h"
#include "../vpatterndb/vcontainer.h" #include "../vpatterndb/vcontainer.h"
#include "../vpatterndb/vpiece.h" #include "../vpatterndb/vpiece.h"
#include "../vpatterndb/floatItemData/vpiecelabeldata.h"
#include "../vpatterndb/calculator.h"
#include "../vpatterndb/variables/vmeasurement.h"
#include "../vpatterndb/variables/vpiecearea.h"
#include "../tools/dialogtool.h"
#include <QDate>
#include <QDir> #include <QDir>
#include <QMessageBox>
#include <QFileDialog> #include <QFileDialog>
#include <QMenu> #include <QMenu>
#include <QMessageBox> #include <QDate>
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
DialogEditLabel::DialogEditLabel(const VAbstractPattern *doc, const VContainer *data, QWidget *parent) DialogEditLabel::DialogEditLabel(const VAbstractPattern *doc, const VContainer *data, QWidget *parent)
@ -77,8 +77,7 @@ DialogEditLabel::DialogEditLabel(const VAbstractPattern *doc, const VContainer *
connect(ui->toolButtonImportLabel, &QToolButton::clicked, this, &DialogEditLabel::ImportTemplate); connect(ui->toolButtonImportLabel, &QToolButton::clicked, this, &DialogEditLabel::ImportTemplate);
connect(ui->spinBoxFontSize, QOverload<int>::of(&QSpinBox::valueChanged), this, connect(ui->spinBoxFontSize, QOverload<int>::of(&QSpinBox::valueChanged), this,
&DialogEditLabel::SaveAdditionalFontSize); &DialogEditLabel::SaveAdditionalFontSize);
connect(ui->toolButtonTop, &QToolButton::clicked, this, connect(ui->toolButtonTop, &QToolButton::clicked, this, [this](){DialogTool::MoveListRowTop(ui->listWidgetEdit);});
[this]() { DialogTool::MoveListRowTop(ui->listWidgetEdit); });
connect(ui->toolButtonUp, &QToolButton::clicked, this, [this](){DialogTool::MoveListRowUp(ui->listWidgetEdit);}); connect(ui->toolButtonUp, &QToolButton::clicked, this, [this](){DialogTool::MoveListRowUp(ui->listWidgetEdit);});
connect(ui->toolButtonDown, &QToolButton::clicked, this, connect(ui->toolButtonDown, &QToolButton::clicked, this,
[this](){DialogTool::MoveListRowDown(ui->listWidgetEdit);}); [this](){DialogTool::MoveListRowDown(ui->listWidgetEdit);});
@ -280,8 +279,7 @@ void DialogEditLabel::NewTemplate()
{ {
if (ui->listWidgetEdit->count() > 0) if (ui->listWidgetEdit->count() > 0)
{ {
const QMessageBox::StandardButton answer = const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Create new template"),
QMessageBox::question(this, tr("Create new template"),
tr("Creating new template will overwrite the current, do " tr("Creating new template will overwrite the current, do "
"you want to continue?"), "you want to continue?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
@ -342,8 +340,7 @@ void DialogEditLabel::ImportTemplate()
{ {
if (ui->listWidgetEdit->count() > 0) if (ui->listWidgetEdit->count() > 0)
{ {
const QMessageBox::StandardButton answer = const QMessageBox::StandardButton answer = QMessageBox::question(this, tr("Import template"),
QMessageBox::question(this, tr("Import template"),
tr("Import template will overwrite the current, do " tr("Import template will overwrite the current, do "
"you want to continue?"), "you want to continue?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
@ -521,22 +518,22 @@ void DialogEditLabel::InitPlaceholders()
const QString pUnits = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true); const QString pUnits = UnitsToStr(VAbstractValApplication::VApp()->patternUnits(), true);
m_placeholders.insert(pl_pUnits, qMakePair(tr("Pattern units"), pUnits)); m_placeholders.insert(pl_pUnits, qMakePair(tr("Pattern units"), pUnits));
m_placeholders.insert( m_placeholders.insert(pl_mSizeUnits, qMakePair(tr("Size units"),
pl_mSizeUnits, UnitsToStr(VAbstractValApplication::VApp()->DimensionSizeUnits(),
qMakePair(tr("Size units"), UnitsToStr(VAbstractValApplication::VApp()->DimensionSizeUnits(), true))); true)));
m_placeholders.insert(pl_areaUnits, qMakePair(tr("Area units"), pUnits + QStringLiteral("²"))); m_placeholders.insert(pl_areaUnits, qMakePair(tr("Area units"), pUnits + QStringLiteral("²")));
if (VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Individual) if (VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Individual)
{ {
m_placeholders.insert(pl_customer, m_placeholders.insert(pl_customer, qMakePair(tr("Customer name"),
qMakePair(tr("Customer name"), VAbstractValApplication::VApp()->GetCustomerName())); VAbstractValApplication::VApp()->GetCustomerName()));
const QString birthDate = const QString birthDate = locale.toString(VAbstractValApplication::VApp()->GetCustomerBirthDate(),
locale.toString(VAbstractValApplication::VApp()->GetCustomerBirthDate(), m_doc->GetLabelDateFormat()); m_doc->GetLabelDateFormat());
m_placeholders.insert(pl_birthDate, qMakePair(tr("Customer birth date"), birthDate)); m_placeholders.insert(pl_birthDate, qMakePair(tr("Customer birth date"), birthDate));
m_placeholders.insert(pl_email, m_placeholders.insert(pl_email, qMakePair(tr("Customer email"),
qMakePair(tr("Customer email"), VAbstractValApplication::VApp()->CustomerEmail())); VAbstractValApplication::VApp()->CustomerEmail()));
} }
else else
{ {
@ -574,35 +571,35 @@ void DialogEditLabel::InitPlaceholders()
{ {
QString label = VAbstractValApplication::VApp()->GetDimensionHeightLabel(); QString label = VAbstractValApplication::VApp()->GetDimensionHeightLabel();
m_placeholders.insert(pl_heightLabel, m_placeholders.insert(pl_heightLabel, qMakePair(tr("Height label", "dimension"),
qMakePair(tr("Height label", "dimension"), not label.isEmpty() ? label : heightValue)); not label.isEmpty() ? label : heightValue));
m_placeholders.insert( m_placeholders.insert(pl_dimensionX, qMakePair(tr("Dimension X label", "dimension"),
pl_dimensionX, qMakePair(tr("Dimension X label", "dimension"), not label.isEmpty() ? label : heightValue)); not label.isEmpty() ? label : heightValue));
label = VAbstractValApplication::VApp()->GetDimensionSizeLabel(); label = VAbstractValApplication::VApp()->GetDimensionSizeLabel();
m_placeholders.insert(pl_sizeLabel, m_placeholders.insert(pl_sizeLabel, qMakePair(tr("Size label", "dimension"),
qMakePair(tr("Size label", "dimension"), not label.isEmpty() ? label : sizeValue)); not label.isEmpty() ? label : sizeValue));
m_placeholders.insert(pl_dimensionY, m_placeholders.insert(pl_dimensionY, qMakePair(tr("Dimension Y label", "dimension"),
qMakePair(tr("Dimension Y label", "dimension"), not label.isEmpty() ? label : sizeValue)); not label.isEmpty() ? label : sizeValue));
label = VAbstractValApplication::VApp()->GetDimensionHipLabel(); label = VAbstractValApplication::VApp()->GetDimensionHipLabel();
m_placeholders.insert(pl_hipLabel, m_placeholders.insert(pl_hipLabel, qMakePair(tr("Hip label", "dimension"),
qMakePair(tr("Hip label", "dimension"), not label.isEmpty() ? label : hipValue)); not label.isEmpty() ? label : hipValue));
m_placeholders.insert(pl_dimensionZ, m_placeholders.insert(pl_dimensionZ, qMakePair(tr("Dimension Z label", "dimension"),
qMakePair(tr("Dimension Z label", "dimension"), not label.isEmpty() ? label : hipValue)); not label.isEmpty() ? label : hipValue));
label = VAbstractValApplication::VApp()->GetDimensionWaistLabel(); label = VAbstractValApplication::VApp()->GetDimensionWaistLabel();
m_placeholders.insert(pl_waistLabel, m_placeholders.insert(pl_waistLabel, qMakePair(tr("Waist label", "dimension"),
qMakePair(tr("Waist label", "dimension"), not label.isEmpty() ? label : waistValue)); not label.isEmpty() ? label : waistValue));
m_placeholders.insert( m_placeholders.insert(pl_dimensionW, qMakePair(tr("Dimension W label", "dimension"),
pl_dimensionW, qMakePair(tr("Dimension W label", "dimension"), not label.isEmpty() ? label : waistValue)); not label.isEmpty() ? label : waistValue));
} }
m_placeholders.insert(
pl_mExt, qMakePair(tr("Measurments extension"), m_placeholders.insert(pl_mExt,
qMakePair(tr("Measurments extension"),
VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Multisize VAbstractValApplication::VApp()->GetMeasurementsType() == MeasurementsType::Multisize
? QStringLiteral("vst") ? QStringLiteral("vst") : QStringLiteral("vit")));
: QStringLiteral("vit")));
const QString userMaterialStr = tr("User material"); const QString userMaterialStr = tr("User material");
const QMap<int, QString> materials = m_doc->GetPatternMaterials(); const QMap<int, QString> materials = m_doc->GetPatternMaterials();
@ -654,24 +651,19 @@ void DialogEditLabel::InitPlaceholders()
QScopedPointer<Calculator> cal(new Calculator()); QScopedPointer<Calculator> cal(new Calculator());
const qreal result = cal->EvalFormula(completeData.DataVariables(), m.formula); const qreal result = cal->EvalFormula(completeData.DataVariables(), m.formula);
m_placeholders.insert(pl_finalMeasurement + m.name, m_placeholders.insert(pl_finalMeasurement + m.name, qMakePair(tr("Final measurement: %1").arg(m.name),
qMakePair(tr("Final measurement: %1").arg(m.name), QString::number(result))); QString::number(result)));
} }
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare final measurement placeholder. Parser error at " const QString errorMsg = QObject::tr("Failed to prepare final measurement placeholder. Parser error at "
"line %1: %2.") "line %1: %2.").arg(i+1).arg(e.GetMsg());
.arg(i + 1) VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
.arg(e.GetMsg()); qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
VAbstractApplication::VApp()->IsPedantic()
? throw VException(errorMsg)
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
} }
QSharedPointer<QTranslator> phTr = VAbstractValApplication::VApp()->GetPlaceholderTranslator();
// Piece tags // Piece tags
m_placeholders.insert(pl_pLetter, qMakePair(tr("Piece letter"), QString())); m_placeholders.insert(pl_pLetter, qMakePair(tr("Piece letter"), QString()));
m_placeholders.insert(pl_pAnnotation, qMakePair(tr("Piece annotation"), QString())); m_placeholders.insert(pl_pAnnotation, qMakePair(tr("Piece annotation"), QString()));
@ -681,13 +673,11 @@ void DialogEditLabel::InitPlaceholders()
m_placeholders.insert(pl_pFoldPosition, qMakePair(tr("Piece fold position"), QString())); m_placeholders.insert(pl_pFoldPosition, qMakePair(tr("Piece fold position"), QString()));
m_placeholders.insert(pl_pName, qMakePair(tr("Piece name"), QString())); m_placeholders.insert(pl_pName, qMakePair(tr("Piece name"), QString()));
m_placeholders.insert(pl_pQuantity, qMakePair(tr("Quantity"), QString())); m_placeholders.insert(pl_pQuantity, qMakePair(tr("Quantity"), QString()));
m_placeholders.insert(pl_mFabric, qMakePair(tr("Material: Fabric"), phTr->translate("Placeholder", "Fabric"))); m_placeholders.insert(pl_mFabric, qMakePair(tr("Material: Fabric"), tr("Fabric")));
m_placeholders.insert(pl_mLining, qMakePair(tr("Material: Lining"), phTr->translate("Placeholder", "Lining"))); m_placeholders.insert(pl_mLining, qMakePair(tr("Material: Lining"), tr("Lining")));
m_placeholders.insert(pl_mInterfacing, m_placeholders.insert(pl_mInterfacing, qMakePair(tr("Material: Interfacing"), tr("Interfacing")));
qMakePair(tr("Material: Interfacing"), phTr->translate("Placeholder", "Interfacing"))); m_placeholders.insert(pl_mInterlining, qMakePair(tr("Material: Interlining"), tr("Interlining")));
m_placeholders.insert(pl_mInterlining, m_placeholders.insert(pl_wCut, qMakePair(tr("Word: Cut"), tr("Cut")));
qMakePair(tr("Material: Interlining"), phTr->translate("Placeholder", "Interlining")));
m_placeholders.insert(pl_wCut, qMakePair(tr("Word: Cut"), phTr->translate("Placeholder", "Cut")));
m_placeholders.insert(pl_wOnFold, qMakePair(tr("Word: on fold"), QString()));// By default should be empty m_placeholders.insert(pl_wOnFold, qMakePair(tr("Word: on fold"), QString()));// By default should be empty
} }
@ -700,9 +690,8 @@ auto DialogEditLabel::ReplacePlaceholders(QString line) const -> QString
{ {
if (line.contains(per+placeholder+per) && m_placeholders.value(placeholder).second == QChar('0')) if (line.contains(per+placeholder+per) && m_placeholders.value(placeholder).second == QChar('0'))
{ {
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
}; };
@ -797,8 +786,7 @@ void DialogEditLabel::SetPiece(const VPiece &piece)
m_placeholders[pl_pQuantity].second = QString::number(pieceData.GetQuantity()); m_placeholders[pl_pQuantity].second = QString::number(pieceData.GetQuantity());
if (pieceData.IsOnFold()) if (pieceData.IsOnFold())
{ {
QSharedPointer<QTranslator> phTr = VAbstractValApplication::VApp()->GetPlaceholderTranslator(); m_placeholders[pl_wOnFold].second = tr("on fold");
m_placeholders[pl_wOnFold].second = phTr->translate("Placeholder", "on fold");
} }
VContainer completeData = m_doc->GetCompleteData(); VContainer completeData = m_doc->GetCompleteData();
@ -815,9 +803,8 @@ void DialogEditLabel::SetPiece(const VPiece &piece)
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare full piece area placeholder. %2.").arg(e.GetMsg()); const QString errorMsg = QObject::tr("Failed to prepare full piece area placeholder. %2.").arg(e.GetMsg());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
try try
@ -829,9 +816,8 @@ void DialogEditLabel::SetPiece(const VPiece &piece)
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
const QString errorMsg = QObject::tr("Failed to prepare piece seam line area placeholder. %2.").arg(e.GetMsg()); const QString errorMsg = QObject::tr("Failed to prepare piece seam line area placeholder. %2.").arg(e.GetMsg());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }

View file

@ -70,6 +70,7 @@
#include "nodeDetails/vtoolplacelabel.h" #include "nodeDetails/vtoolplacelabel.h"
#include <QFuture> #include <QFuture>
#include <QtConcurrent/QtConcurrentRun>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QGraphicsView> #include <QGraphicsView>
#include <QKeyEvent> #include <QKeyEvent>
@ -77,7 +78,6 @@
#include <QMessageBox> #include <QMessageBox>
#include <QTimer> #include <QTimer>
#include <QUuid> #include <QUuid>
#include <QtConcurrent/QtConcurrentRun>
#include <QtMath> #include <QtMath>
#include <chrono> #include <chrono>
#include <memory> #include <memory>
@ -118,7 +118,8 @@ const QString VToolSeamAllowance::AttrPiecePriority = QStringLiteral("priority")
namespace namespace
{ {
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
template <typename T> auto FixLabelPins(T itemData, const QMap<quint32, quint32> &mappedPins) -> T template <typename T>
auto FixLabelPins(T itemData, const QMap<quint32, quint32> &mappedPins) -> T
{ {
itemData.SetCenterPin(mappedPins.value(itemData.CenterPin(), NULL_ID)); itemData.SetCenterPin(mappedPins.value(itemData.CenterPin(), NULL_ID));
itemData.SetTopLeftPin(mappedPins.value(itemData.TopLeftPin(), NULL_ID)); itemData.SetTopLeftPin(mappedPins.value(itemData.TopLeftPin(), NULL_ID));
@ -127,7 +128,8 @@ template <typename T> auto FixLabelPins(T itemData, const QMap<quint32, quint32>
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
template <typename T> auto FixGrainlinePins(T itemData, const QMap<quint32, quint32> &mappedPins) -> T template <typename T>
auto FixGrainlinePins(T itemData, const QMap<quint32, quint32> &mappedPins) -> T
{ {
itemData.SetCenterPin(mappedPins.value(itemData.CenterPin(), NULL_ID)); itemData.SetCenterPin(mappedPins.value(itemData.CenterPin(), NULL_ID));
itemData.SetTopPin(mappedPins.value(itemData.TopPin(), NULL_ID)); itemData.SetTopPin(mappedPins.value(itemData.TopPin(), NULL_ID));
@ -188,7 +190,9 @@ void UpdateLabelItem(VTextGraphicsItem *labelItem, QPointF pos, qreal labelAngle
} // namespace } // namespace
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VToolSeamAllowance::Create(const QPointer<DialogTool> &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc, auto VToolSeamAllowance::Create(const QPointer<DialogTool> &dialog,
VMainGraphicsScene *scene,
VAbstractPattern *doc,
VContainer *data) -> VToolSeamAllowance * VContainer *data) -> VToolSeamAllowance *
{ {
SCASSERT(not dialog.isNull()); SCASSERT(not dialog.isNull());
@ -218,9 +222,8 @@ auto VToolSeamAllowance::Create(const QPointer<DialogTool> &dialog, VMainGraphic
{ {
const QString errorMsg = QObject::tr("Piece '%1'. Unable to load default piece label template.\n%2\n%3") const QString errorMsg = QObject::tr("Piece '%1'. Unable to load default piece label template.\n%2\n%3")
.arg(initData.detail.GetName(), e.ErrorMessage(), e.DetailedInformation()); .arg(initData.detail.GetName(), e.ErrorMessage(), e.DetailedInformation());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
@ -285,8 +288,9 @@ auto VToolSeamAllowance::Create(VToolSeamAllowanceInitData &initData) -> VToolSe
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VToolSeamAllowance::Duplicate(const QPointer<DialogTool> &dialog, VMainGraphicsScene *scene, VAbstractPattern *doc) auto VToolSeamAllowance::Duplicate(const QPointer<DialogTool> &dialog,
-> VToolSeamAllowance * VMainGraphicsScene *scene,
VAbstractPattern *doc) -> VToolSeamAllowance *
{ {
SCASSERT(not dialog.isNull()); SCASSERT(not dialog.isNull());
const QPointer<DialogDuplicateDetail> dialogTool = qobject_cast<DialogDuplicateDetail*>(dialog); const QPointer<DialogDuplicateDetail> dialogTool = qobject_cast<DialogDuplicateDetail*>(dialog);
@ -323,8 +327,8 @@ auto VToolSeamAllowance::Duplicate(VToolSeamAllowanceInitData &initData) -> VToo
QMap<quint32, quint32> replacements; QMap<quint32, quint32> replacements;
dupDetail.GetPath().SetNodes(DuplicateNodes(initData.detail.GetPath(), initData, replacements)); dupDetail.GetPath().SetNodes(DuplicateNodes(initData.detail.GetPath(), initData, replacements));
dupDetail.SetCustomSARecords( dupDetail.SetCustomSARecords(DuplicateCustomSARecords(initData.detail.GetCustomSARecords(), initData,
DuplicateCustomSARecords(initData.detail.GetCustomSARecords(), initData, replacements)); replacements));
dupDetail.SetInternalPaths(DuplicateInternalPaths(initData.detail.GetInternalPaths(), initData)); dupDetail.SetInternalPaths(DuplicateInternalPaths(initData.detail.GetInternalPaths(), initData));
dupDetail.SetPlaceLabels(DuplicatePlaceLabels(initData.detail.GetPlaceLabels(), initData)); dupDetail.SetPlaceLabels(DuplicatePlaceLabels(initData.detail.GetPlaceLabels(), initData));
dupDetail.SetUUID(QUuid::createUuid()); dupDetail.SetUUID(QUuid::createUuid());
@ -645,10 +649,7 @@ void VToolSeamAllowance::ReinitInternals(const VPiece &detail, VMainGraphicsScen
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VToolSeamAllowance::getTagName() const -> QString auto VToolSeamAllowance::getTagName() const -> QString { return VAbstractPattern::TagDetail; }
{
return VAbstractPattern::TagDetail;
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::ShowVisualization(bool show) void VToolSeamAllowance::ShowVisualization(bool show)
@ -755,8 +756,7 @@ void VToolSeamAllowance::Highlight(quint32 id)
*/ */
void VToolSeamAllowance::UpdateDetailLabel() void VToolSeamAllowance::UpdateDetailLabel()
{ {
VPiece detail = VAbstractTool::data.GetPiece(m_id); const VPiece detail = VAbstractTool::data.GetPiece(m_id);
detail.SetPieceLabelData(detail.GetPieceLabelData()); // Refresh translation
const VPieceLabelData& labelData = detail.GetPieceLabelData(); const VPieceLabelData& labelData = detail.GetPieceLabelData();
const QVector<quint32> &pins = detail.GetPins(); const QVector<quint32> &pins = detail.GetPins();
@ -841,10 +841,10 @@ void VToolSeamAllowance::UpdateGrainline()
if (m_geometryIsReady && not IsGrainlinePositionValid()) if (m_geometryIsReady && not IsGrainlinePositionValid())
{ {
const QString errorMsg = QObject::tr("Piece '%1'. Grainline is not valid.").arg(detail.GetName()); const QString errorMsg = QObject::tr("Piece '%1'. Grainline is not valid.")
VAbstractApplication::VApp()->IsPedantic() .arg(detail.GetName());
? throw VException(errorMsg) VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
else else
@ -909,6 +909,7 @@ void VToolSeamAllowance::SaveRotationDetail(qreal dRot)
VAbstractApplication::VApp()->getUndoStack()->push(rotateCommand); VAbstractApplication::VApp()->getUndoStack()->push(rotateCommand);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief SaveMovePattern saves the pattern label position * @brief SaveMovePattern saves the pattern label position
@ -963,6 +964,7 @@ void VToolSeamAllowance::SaveRotationPattern(qreal dRot)
VAbstractApplication::VApp()->getUndoStack()->push(rotateCommand); VAbstractApplication::VApp()->getUndoStack()->push(rotateCommand);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::SaveMoveGrainline(const QPointF& ptPos) void VToolSeamAllowance::SaveMoveGrainline(const QPointF& ptPos)
{ {
@ -1080,8 +1082,8 @@ void VToolSeamAllowance::AddToFile()
AddPins(doc, domElement, piece.GetPins()); AddPins(doc, domElement, piece.GetPins());
AddPlaceLabels(doc, domElement, piece.GetPlaceLabels()); AddPlaceLabels(doc, domElement, piece.GetPlaceLabels());
VAbstractApplication::VApp()->getUndoStack()->push( VAbstractApplication::VApp()->getUndoStack()->push(new AddPiece(domElement, doc, VAbstractTool::data,
new AddPiece(domElement, doc, VAbstractTool::data, m_sceneDetails, m_drawName)); m_sceneDetails, m_drawName));
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1093,7 +1095,8 @@ void VToolSeamAllowance::RefreshDataInFile()
// Refresh only parts that we possibly need to update // Refresh only parts that we possibly need to update
{ {
// TODO. Delete if minimal supported version is 0.4.0 // TODO. Delete if minimal supported version is 0.4.0
Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < FormatVersion(0, 4, 0), "Time to refactor the code."); Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < FormatVersion(0, 4, 0),
"Time to refactor the code.");
const uint version = VAbstractPattern::GetParametrUInt(domElement, AttrVersion, QChar('1')); const uint version = VAbstractPattern::GetParametrUInt(domElement, AttrVersion, QChar('1'));
if (version == 1) if (version == 1)
@ -1130,8 +1133,8 @@ auto VToolSeamAllowance::itemChange(QGraphicsItem::GraphicsItemChange change, co
// value - this is new position. // value - this is new position.
const QPointF newPos = value.toPointF(); const QPointF newPos = value.toPointF();
VAbstractApplication::VApp()->getUndoStack()->push( VAbstractApplication::VApp()->getUndoStack()->push(new MovePiece(doc, newPos.x(), newPos.y(), m_id,
new MovePiece(doc, newPos.x(), newPos.y(), m_id, scene())); scene()));
const QList<QGraphicsView *> viewList = scene()->views(); const QList<QGraphicsView *> viewList = scene()->views();
if (not viewList.isEmpty()) if (not viewList.isEmpty())
@ -1184,8 +1187,7 @@ void VToolSeamAllowance::mousePressEvent(QGraphicsSceneMouseEvent *event)
if (selectionType == SelectionType::ByMouseRelease) if (selectionType == SelectionType::ByMouseRelease)
{ {
event event->accept();// Special for not selectable item first need to call standard mousePressEvent then accept event
->accept(); // Special for not selectable item first need to call standard mousePressEvent then accept event
} }
else else
{ {
@ -1456,16 +1458,15 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
if (detail.IsSeamAllowance()) if (detail.IsSeamAllowance())
{ {
futureSeamAllowance = QtConcurrent::run([this, detail](){return detail.SeamAllowancePoints(getData());}); futureSeamAllowance = QtConcurrent::run([this, detail](){return detail.SeamAllowancePoints(getData());});
futureSeamAllowanceValid = futureSeamAllowanceValid = QtConcurrent::run([this, detail](){return detail.IsSeamAllowanceValid(getData());});
QtConcurrent::run([this, detail]() { return detail.IsSeamAllowanceValid(getData()); });
} }
this->setPos(detail.GetMx(), detail.GetMy()); this->setPos(detail.GetMx(), detail.GetMy());
QPainterPath path; QPainterPath path;
if (VAbstractApplication::VApp()->Settings()->IsPieceShowMainPath() || not detail.IsHideMainPath() || if (VAbstractApplication::VApp()->Settings()->IsPieceShowMainPath() || not detail.IsHideMainPath()
not detail.IsSeamAllowance() || detail.IsSeamAllowanceBuiltIn()) || not detail.IsSeamAllowance() || detail.IsSeamAllowanceBuiltIn())
{ {
m_mainPath = QPainterPath(); m_mainPath = QPainterPath();
m_seamAllowance->setBrush(QBrush(Qt::Dense7Pattern)); m_seamAllowance->setBrush(QBrush(Qt::Dense7Pattern));
@ -1487,10 +1488,10 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
{ {
if (not futureSeamAllowanceValid.result()) if (not futureSeamAllowanceValid.result())
{ {
const QString errorMsg = QObject::tr("Piece '%1'. Seam allowance is not valid.").arg(detail.GetName()); const QString errorMsg = QObject::tr("Piece '%1'. Seam allowance is not valid.")
VAbstractApplication::VApp()->IsPedantic() .arg(detail.GetName());
? throw VException(errorMsg) VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
path.addPath(detail.SeamAllowancePath(futureSeamAllowance.result())); path.addPath(detail.SeamAllowancePath(futureSeamAllowance.result()));
path.setFillRule(Qt::OddEvenFill); path.setFillRule(Qt::OddEvenFill);
@ -1507,8 +1508,7 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
if (VAbstractApplication::VApp()->IsAppInGUIMode()) if (VAbstractApplication::VApp()->IsAppInGUIMode())
{ {
QTimer::singleShot(V_MSECONDS(100), Qt::CoarseTimer, this, QTimer::singleShot(V_MSECONDS(100), Qt::CoarseTimer, this, [this, updateChildren]()
[this, updateChildren]()
{ {
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
UpdateDetailLabel(); UpdateDetailLabel();
@ -1583,8 +1583,8 @@ void VToolSeamAllowance::SaveDialogChange(const QString &undoText)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::ShowOptions() void VToolSeamAllowance::ShowOptions()
{ {
QPointer<DialogSeamAllowance> dialog = QPointer<DialogSeamAllowance> dialog = new DialogSeamAllowance(getData(), doc, m_id,
new DialogSeamAllowance(getData(), doc, m_id, VAbstractValApplication::VApp()->getMainWindow()); VAbstractValApplication::VApp()->getMainWindow());
dialog->EnableApply(true); dialog->EnableApply(true);
m_dialog = dialog; m_dialog = dialog;
m_dialog->setModal(true); m_dialog->setModal(true);
@ -1605,15 +1605,17 @@ void VToolSeamAllowance::ToggleInLayout(bool checked)
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::ToggleForbidFlipping(bool checked) void VToolSeamAllowance::ToggleForbidFlipping(bool checked)
{ {
VAbstractApplication::VApp()->getUndoStack()->push(new TogglePieceForceForbidFlipping( VAbstractApplication::VApp()->getUndoStack()->push(
m_id, checked, ForceForbidFlippingType::ForbidFlipping, &(VAbstractTool::data), doc)); new TogglePieceForceForbidFlipping(m_id, checked, ForceForbidFlippingType::ForbidFlipping,
&(VAbstractTool::data), doc));
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VToolSeamAllowance::ToggleForceFlipping(bool checked) void VToolSeamAllowance::ToggleForceFlipping(bool checked)
{ {
VAbstractApplication::VApp()->getUndoStack()->push(new TogglePieceForceForbidFlipping( VAbstractApplication::VApp()->getUndoStack()->push(
m_id, checked, ForceForbidFlippingType::ForceFlipping, &(VAbstractTool::data), doc)); new TogglePieceForceForbidFlipping(m_id, checked, ForceForbidFlippingType::ForceFlipping,
&(VAbstractTool::data), doc));
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -1764,17 +1766,19 @@ void VToolSeamAllowance::ResetPieceLabelTemplate()
{ {
const QString errorMsg = QObject::tr("Piece '%1'. Unable to load default piece label template.\n%2\n%3") const QString errorMsg = QObject::tr("Piece '%1'. Unable to load default piece label template.\n%2\n%3")
.arg(newDet.GetName(), e.ErrorMessage(), e.DetailedInformation()); .arg(newDet.GetName(), e.ErrorMessage(), e.DetailedInformation());
VAbstractApplication::VApp()->IsPedantic() VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
? throw VException(errorMsg) qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
: qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
} }
} }
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VToolSeamAllowance::FindLabelGeometry(const VPatternLabelData &labelData, const QVector<quint32> &pins, auto VToolSeamAllowance::FindLabelGeometry(const VPatternLabelData &labelData,
qreal &rotationAngle, qreal &labelWidth, qreal &labelHeight, QPointF &pos) const QVector<quint32> &pins,
-> VPieceItem::MoveTypes qreal &rotationAngle,
qreal &labelWidth,
qreal &labelHeight,
QPointF &pos) -> VPieceItem::MoveTypes
{ {
VPieceItem::MoveTypes restrictions = VPieceItem::AllModifications; VPieceItem::MoveTypes restrictions = VPieceItem::AllModifications;
@ -1797,16 +1801,16 @@ auto VToolSeamAllowance::FindLabelGeometry(const VPatternLabelData &labelData, c
const quint32 topLeftPin = labelData.TopLeftPin(); const quint32 topLeftPin = labelData.TopLeftPin();
const quint32 bottomRightPin = labelData.BottomRightPin(); const quint32 bottomRightPin = labelData.BottomRightPin();
if (topLeftPin != NULL_ID && pins.contains(topLeftPin) && bottomRightPin != NULL_ID && if (topLeftPin != NULL_ID && pins.contains(topLeftPin) && bottomRightPin != NULL_ID
pins.contains(bottomRightPin)) && pins.contains(bottomRightPin))
{ {
try try
{ {
const auto topLeftPinPoint = VAbstractTool::data.GeometricObject<VPointF>(topLeftPin); const auto topLeftPinPoint = VAbstractTool::data.GeometricObject<VPointF>(topLeftPin);
const auto bottomRightPinPoint = VAbstractTool::data.GeometricObject<VPointF>(bottomRightPin); const auto bottomRightPinPoint = VAbstractTool::data.GeometricObject<VPointF>(bottomRightPin);
const QRectF labelRect = const QRectF labelRect = QRectF(static_cast<QPointF>(*topLeftPinPoint),
QRectF(static_cast<QPointF>(*topLeftPinPoint), static_cast<QPointF>(*bottomRightPinPoint)); static_cast<QPointF>(*bottomRightPinPoint));
labelWidth = FromPixel(qAbs(labelRect.width()), *VDataTool::data.GetPatternUnit()); labelWidth = FromPixel(qAbs(labelRect.width()), *VDataTool::data.GetPatternUnit());
labelHeight = FromPixel(qAbs(labelRect.height()), *VDataTool::data.GetPatternUnit()); labelHeight = FromPixel(qAbs(labelRect.height()), *VDataTool::data.GetPatternUnit());
@ -1873,8 +1877,11 @@ auto VToolSeamAllowance::FindLabelGeometry(const VPatternLabelData &labelData, c
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
auto VToolSeamAllowance::FindGrainlineGeometry(const VGrainlineData &geom, const QVector<quint32> &pins, qreal &length, auto VToolSeamAllowance::FindGrainlineGeometry(const VGrainlineData &geom,
qreal &rotationAngle, QPointF &pos) -> VPieceItem::MoveTypes const QVector<quint32> &pins,
qreal &length,
qreal &rotationAngle,
QPointF &pos) -> VPieceItem::MoveTypes
{ {
const quint32 topPin = geom.TopPin(); const quint32 topPin = geom.TopPin();
const quint32 bottomPin = geom.BottomPin(); const quint32 bottomPin = geom.BottomPin();
@ -1938,8 +1945,8 @@ auto VToolSeamAllowance::FindGrainlineGeometry(const VGrainlineData &geom, const
const auto centerPinPoint = VAbstractTool::data.GeometricObject<VPointF>(centerPin); const auto centerPinPoint = VAbstractTool::data.GeometricObject<VPointF>(centerPin);
const qreal cLength = ToPixel(length, *VDataTool::data.GetPatternUnit()); const qreal cLength = ToPixel(length, *VDataTool::data.GetPatternUnit());
QLineF grainline(centerPinPoint->x(), centerPinPoint->y(), centerPinPoint->x() + cLength / 2.0, QLineF grainline(centerPinPoint->x(), centerPinPoint->y(),
centerPinPoint->y()); centerPinPoint->x() + cLength / 2.0, centerPinPoint->y());
grainline.setAngle(rotationAngle); grainline.setAngle(rotationAngle);
grainline = QLineF(grainline.p2(), grainline.p1()); grainline = QLineF(grainline.p2(), grainline.p1());
@ -2007,8 +2014,8 @@ void VToolSeamAllowance::InitNode(const VPieceNode &node, VMainGraphicsScene *sc
connect(tool, &VNodePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem, Qt::UniqueConnection); connect(tool, &VNodePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem, Qt::UniqueConnection);
connect(tool, &VNodePoint::TogglePassmarkAngleType, parent, connect(tool, &VNodePoint::TogglePassmarkAngleType, parent,
&VToolSeamAllowance::TogglePassmarkAngleType, Qt::UniqueConnection); &VToolSeamAllowance::TogglePassmarkAngleType, Qt::UniqueConnection);
connect(tool, &VNodePoint::TogglePassmarkLineType, parent, &VToolSeamAllowance::TogglePassmarkLineType, connect(tool, &VNodePoint::TogglePassmarkLineType, parent,
Qt::UniqueConnection); &VToolSeamAllowance::TogglePassmarkLineType, Qt::UniqueConnection);
connect(tool, &VNodePoint::ResetPieceLabelTemplate, parent, connect(tool, &VNodePoint::ResetPieceLabelTemplate, parent,
&VToolSeamAllowance::ResetPieceLabelTemplate, Qt::UniqueConnection); &VToolSeamAllowance::ResetPieceLabelTemplate, Qt::UniqueConnection);
tool->setParentItem(parent); tool->setParentItem(parent);
@ -2107,8 +2114,8 @@ auto VToolSeamAllowance::PrepareLabelData(const VPatternLabelData &labelData, co
qreal labelWidth = 0; qreal labelWidth = 0;
qreal labelHeight = 0; qreal labelHeight = 0;
const VTextGraphicsItem::MoveTypes type = const VTextGraphicsItem::MoveTypes type = FindLabelGeometry(labelData, pins, labelAngle, labelWidth, labelHeight,
FindLabelGeometry(labelData, pins, labelAngle, labelWidth, labelHeight, pos); pos);
if (type & VGrainlineItem::Error) if (type & VGrainlineItem::Error)
{ {
labelItem->hide(); labelItem->hide();
@ -2175,8 +2182,8 @@ void VToolSeamAllowance::AddPointRecords(VAbstractPattern *doc, QDomElement &dom
QDomElement pinsElement = doc->createElement(tag); QDomElement pinsElement = doc->createElement(tag);
for (auto record : records) for (auto record : records)
{ {
pinsElement.appendChild( pinsElement.appendChild(doc->CreateElementWithText(VToolSeamAllowance::TagRecord,
doc->CreateElementWithText(VToolSeamAllowance::TagRecord, QString().setNum(record))); QString().setNum(record)));
} }
domElement.appendChild(pinsElement); domElement.appendChild(pinsElement);
} }