update settings to use new model

This commit is contained in:
leca 2025-05-17 16:02:10 +03:00
parent b67d575645
commit d10dfc07b6
8 changed files with 132 additions and 299 deletions

View File

@ -22,7 +22,7 @@ OutputDialog::OutputDialog(QWidget *parent, std::vector<Check> *checks)
columns = new std::vector<OutputColumn>;
OutputColumnModel *model = new OutputColumnModel(&(*columns), this);
OutputColumnModel *model = new OutputColumnModel(columns, this);
ui->listView->setModel(model);

View File

@ -19,15 +19,6 @@ class OutputDialog : public QDialog {
std::vector<OutputColumn> *columns;
Settings *settings;
const std::map<std::string, ColumnType> column_names = {
{"date", ColumnType::date},
{"goods_name", ColumnType::goods_name},
{"goods_price_per_unit", ColumnType::goods_price_per_unit},
{"goods_quantity", ColumnType::goods_quantity},
{"goods_net_weight", ColumnType::goods_net_weight},
{"goods_total", ColumnType::goods_total}
};
public:
explicit OutputDialog(QWidget *parent = nullptr, std::vector<Check> *checks = nullptr);
~OutputDialog();

View File

@ -16,6 +16,12 @@
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
@ -24,14 +30,28 @@
<rect>
<x>0</x>
<y>0</y>
<width>659</width>
<height>634</height>
<width>673</width>
<height>554</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="14" column="1">
<item row="1" column="1">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="print_total_label">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="languageComboBox">
<item>
<property name="text">
@ -45,161 +65,52 @@
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Goods quantity alias</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="goodsQuantityAliasEdit"/>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="goodsPricePerUnitPositionSpin"/>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="goodsNamePositionSpin"/>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="goodsNetWeightPositionSpin"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Goods price per unit alias</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="goodsTotalAliasEdit"/>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_2">
<item row="1" column="0">
<widget class="QLabel" name="print_header_label">
<property name="text">
<string>Print header</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Goods quantity position</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="goodsTotalPositionSpin"/>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Goods net weight position</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="dateNamePositionSpin"/>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="goodsPricePerUnitAliasEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Goods name position</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Date name position</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Goods price per unit position</string>
</property>
</widget>
</item>
<item row="13" column="1">
<item row="2" column="1">
<widget class="QCheckBox" name="printTotalCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Goods total position</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="goodsQuantityPositionSpin"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Goods name alias</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="goodsNetWeightAliasEdit"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Goods total alias</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="goodsNameAliasEdit"/>
</item>
<item row="12" column="1">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="language_label">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Goods net weight alias</string>
<item row="0" column="0" colspan="2">
<widget class="QListView" name="outputOptionsListView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDropMode::InternalMove</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::DropAction::TargetMoveAction</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Date name alias</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="dateNameAliasEdit"/>
</item>
</layout>
</item>
</layout>

View File

@ -7,6 +7,7 @@
#include <iostream>
#include <QMessageBox>
#include <outputcolumnmodel.h>
SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent), ui(new Ui::settingsdialog),
@ -15,23 +16,24 @@ SettingsDialog::SettingsDialog(QWidget *parent)
ui->setupUi(this);
ui->goodsNamePositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_name"]["position"]);
ui->goodsNameAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_name"]["name"]));
columns = new std::vector<OutputColumn>;
ui->goodsPricePerUnitPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["position"]);
ui->goodsPricePerUnitAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"]));
OutputColumnModel *model = new OutputColumnModel(columns, this);
ui->goodsQuantityPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_quantity"]["position"]);
ui->goodsQuantityAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_quantity"]["name"]));
ui->outputOptionsListView->setModel(model);
ui->goodsNetWeightPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_net_weight"]["position"]);
ui->goodsNetWeightAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_net_weight"]["name"]));
for (unsigned short i = 0; i < 6; i ++)
columns->push_back(OutputColumn(tr("Кто здесь?"), ColumnType::date));
ui->goodsTotalPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_total"]["position"]);
ui->goodsTotalAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_total"]["name"]));
for (auto &column : column_names) {
std::string name = settings.get_all_settings()["output_order"][column.first]["name"];
unsigned short position = settings.get_all_settings()["output_order"][column.first]["position"];
ColumnType type = column.second;
columns->at(position - 1) = (OutputColumn(QString::fromStdString(name), type));
}
ui->printHeaderCheckBox->setChecked(this->settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(this->settings.get_all_settings()["print_total"]);
ui->printHeaderCheckBox->setChecked(settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(settings.get_all_settings()["print_total"]);
int currentLanguageIndex = 0;
bool languageSettingPresent = false;
@ -51,59 +53,6 @@ SettingsDialog::SettingsDialog(QWidget *parent)
}
void SettingsDialog::on_goodsNamePositionSpin_valueChanged(int value) {
this->settings.get_all_settings()["output_order"]["goods_name"]["position"] =
value;
}
void SettingsDialog::on_goodsNameAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_name"]["name"] =
ui->goodsNameAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsPricePerUnitPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_price_per_unit"]["position"] =
value;
}
void SettingsDialog::on_goodsPricePerUnitAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"] =
ui->goodsPricePerUnitAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsQuantityPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_quantity"]["position"] = value;
}
void SettingsDialog::on_goodsQuantityAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_quantity"]["name"] =
ui->goodsQuantityAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsNetWeightPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_net_weight"]["position"] =
value;
}
void SettingsDialog::on_goodsNetWeightAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_net_weight"]["name"] =
ui->goodsNetWeightAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsTotalPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_total"]["position"] =
value;
}
void SettingsDialog::on_goodsTotalAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_total"]["name"] =
ui->goodsTotalAliasEdit->text().toStdString();
}
void SettingsDialog::on_printHeaderCheckBox_stateChanged(int value) {
this->settings.get_all_settings()["print_header"] = (value? true : false);
}
@ -112,7 +61,16 @@ void SettingsDialog::on_printTotalCheckBox_stateChanged(int value) {
this->settings.get_all_settings()["print_total"] = (value? true : false);
}
void SettingsDialog::on_buttonBox_accepted() { this->settings.flush(); }
void SettingsDialog::on_buttonBox_accepted() {
for (int i = 0; i < columns->size(); i ++) {
OutputColumn &column = columns->at(i);
std::string key = find_key_by_value(column_names, column.get_column_type());
settings.get_all_settings()["output_order"][key]["name"] = column.get_text().toStdString();
settings.get_all_settings()["output_order"][key]["position"] = i + 1;
}
this->settings.flush();
}
void SettingsDialog::on_buttonBox_rejected() { this->close(); }

View File

@ -2,6 +2,7 @@
#define SETTINGSDIALOG_H
#include <QDialog>
#include <outputcolumn.h>
#include <settings/settings.h>
namespace Ui {
@ -11,28 +12,13 @@ class settingsdialog;
class SettingsDialog : public QDialog {
Q_OBJECT
Settings settings;
std::vector<OutputColumn> *columns;
public:
explicit SettingsDialog(QWidget *parent = nullptr);
~SettingsDialog();
private slots:
void on_goodsNamePositionSpin_valueChanged(int arg1);
void on_goodsNameAliasEdit_editingFinished();
void on_goodsPricePerUnitPositionSpin_valueChanged(int arg1);
void on_goodsPricePerUnitAliasEdit_editingFinished();
void on_goodsQuantityPositionSpin_valueChanged(int arg1);
void on_goodsQuantityAliasEdit_editingFinished();
void on_goodsNetWeightPositionSpin_valueChanged(int arg1);
void on_goodsNetWeightAliasEdit_editingFinished();
void on_goodsTotalPositionSpin_valueChanged(int arg1);
void on_goodsTotalAliasEdit_editingFinished();
void on_printTotalCheckBox_stateChanged(int arg1);
void on_printHeaderCheckBox_stateChanged(int arg1);

View File

@ -634,12 +634,17 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="133"/>
<location filename="../settingsdialog.cpp" line="26"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="91"/>
<source>You need to restart program to apply language changes</source>
<translation>You need to restart program to apply language changes</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="135"/>
<location filename="../settingsdialog.cpp" line="93"/>
<source>Restart required</source>
<translation>Restart required</translation>
</message>
@ -670,41 +675,37 @@
<translation>Dialog</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="110"/>
<source>Goods name position</source>
<translation>Goods name position</translation>
<translation type="vanished">Goods name position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="70"/>
<source>Goods price per unit alias</source>
<translation>Goods price per unit alias</translation>
<translation type="vanished">Goods price per unit alias</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="124"/>
<source>Date name position</source>
<translation>Date name position</translation>
<translation type="vanished">Date name position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="182"/>
<location filename="../scenes/settingsdialog.ui" line="85"/>
<source>Language</source>
<translation>Language</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="196"/>
<source>Date name alias</source>
<translation>Date name alias</translation>
<translation type="vanished">Date name alias</translation>
</message>
<message>
<source>TextLabel</source>
<translation type="vanished">Language</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="38"/>
<location filename="../scenes/settingsdialog.ui" line="58"/>
<source>en_US</source>
<translation>en_US</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="43"/>
<location filename="../scenes/settingsdialog.ui" line="63"/>
<source>ru_RU</source>
<translation>ru_RU</translation>
</message>
@ -713,33 +714,29 @@
<translation type="vanished">Choose</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="80"/>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>Print header</source>
<translation>Print header</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="189"/>
<source>Goods net weight alias</source>
<translation>Goods net weight alias</translation>
<translation type="vanished">Goods net weight alias</translation>
</message>
<message>
<source>Stores modules url</source>
<translation type="vanished">Stores modules url</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="165"/>
<source>Goods total alias</source>
<translation>Goods total alias</translation>
<translation type="vanished">Goods total alias</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="155"/>
<source>Goods name alias</source>
<translation>Goods name alias</translation>
<translation type="vanished">Goods name alias</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="51"/>
<source>Goods quantity alias</source>
<translation>Goods quantity alias</translation>
<translation type="vanished">Goods quantity alias</translation>
</message>
<message>
<source>Stores modules directory</source>
@ -750,31 +747,27 @@
<translation type="vanished">OFD modules directory</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="131"/>
<source>Goods price per unit position</source>
<translation>Goods price per unit position</translation>
<translation type="vanished">Goods price per unit position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="97"/>
<source>Goods net weight position</source>
<translation>Goods net weight position</translation>
<translation type="vanished">Goods net weight position</translation>
</message>
<message>
<source>OFD modules url</source>
<translation type="vanished">OFD modules url</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="145"/>
<source>Goods total position</source>
<translation>Goods total position</translation>
<translation type="vanished">Goods total position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="87"/>
<source>Goods quantity position</source>
<translation>Goods quantity position</translation>
<translation type="vanished">Goods quantity position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="117"/>
<location filename="../scenes/settingsdialog.ui" line="50"/>
<source>Print total</source>
<translation>Print total</translation>
</message>

View File

@ -618,12 +618,17 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="133"/>
<location filename="../settingsdialog.cpp" line="26"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="91"/>
<source>You need to restart program to apply language changes</source>
<translation>Требуется перезагрузить программу, чтобы применить изменения языка</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="135"/>
<location filename="../settingsdialog.cpp" line="93"/>
<source>Restart required</source>
<translation>Требуется перезагрузка</translation>
</message>
@ -654,41 +659,29 @@
<translation>Диалог</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="110"/>
<source>Goods name position</source>
<translation>Позиция имени товара</translation>
<translation type="vanished">Позиция имени товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="70"/>
<source>Goods price per unit alias</source>
<translation>Алиас цены товара</translation>
<translation type="vanished">Алиас цены товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="124"/>
<source>Date name position</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="182"/>
<location filename="../scenes/settingsdialog.ui" line="85"/>
<source>Language</source>
<translation>Язык</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="196"/>
<source>Date name alias</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TextLabel</source>
<translation type="vanished">Язык</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="38"/>
<location filename="../scenes/settingsdialog.ui" line="58"/>
<source>en_US</source>
<translation>en_US</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="43"/>
<location filename="../scenes/settingsdialog.ui" line="63"/>
<source>ru_RU</source>
<translation>ru_RU</translation>
</message>
@ -697,33 +690,29 @@
<translation type="vanished">Выбрать</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="80"/>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>Print header</source>
<translation>Печатать заголовок</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="189"/>
<source>Goods net weight alias</source>
<translation>Алиас массы нетто товара</translation>
<translation type="vanished">Алиас массы нетто товара</translation>
</message>
<message>
<source>Stores modules url</source>
<translation type="vanished">URL модулей магазина</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="165"/>
<source>Goods total alias</source>
<translation>Алиас всего за продукт</translation>
<translation type="vanished">Алиас всего за продукт</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="155"/>
<source>Goods name alias</source>
<translation>Алиас имени товара</translation>
<translation type="vanished">Алиас имени товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="51"/>
<source>Goods quantity alias</source>
<translation>Алиас количества товара</translation>
<translation type="vanished">Алиас количества товара</translation>
</message>
<message>
<source>Stores modules directory</source>
@ -734,31 +723,27 @@
<translation type="vanished">Директория модулей ОФД</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="131"/>
<source>Goods price per unit position</source>
<translation>Позиция центы товара</translation>
<translation type="vanished">Позиция центы товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="97"/>
<source>Goods net weight position</source>
<translation>Позиция массы нетто товара</translation>
<translation type="vanished">Позиция массы нетто товара</translation>
</message>
<message>
<source>OFD modules url</source>
<translation type="vanished">URL модулей ОФД</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="145"/>
<source>Goods total position</source>
<translation>Позиция всего за товар</translation>
<translation type="vanished">Позиция всего за товар</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="87"/>
<source>Goods quantity position</source>
<translation>Позиция количества товара</translation>
<translation type="vanished">Позиция количества товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="117"/>
<location filename="../scenes/settingsdialog.ui" line="50"/>
<source>Print total</source>
<translation>Печатать Итого</translation>
</message>

View File

@ -12,6 +12,15 @@ std::wstring from_utf8(std::string string);
std::string get_path_relative_to_home(std::string path);
const std::map<std::string, ColumnType> column_names = {
{"date", ColumnType::date},
{"goods_name", ColumnType::goods_name},
{"goods_price_per_unit", ColumnType::goods_price_per_unit},
{"goods_quantity", ColumnType::goods_quantity},
{"goods_net_weight", ColumnType::goods_net_weight},
{"goods_total", ColumnType::goods_total}
};
// template <typename K, typename V>
// K find_key_by_value(std::map<K, V> &m, V value);
std::string find_key_by_value(const std::map<std::string, ColumnType> &m, ColumnType value);