diff --git a/outputdialog.cpp b/outputdialog.cpp index f6bede7..217c494 100644 --- a/outputdialog.cpp +++ b/outputdialog.cpp @@ -16,7 +16,7 @@ OutputDialog::OutputDialog(QWidget *parent, std::vector *checks) : QDialog(parent), ui(new Ui::OutputDialog), checks(checks), options(OutputOptions()) { - Settings settings(get_path_relative_to_home(".local/share/checks_parser/settings.json")); + settings = new Settings(get_path_relative_to_home(".local/share/checks_parser/settings.json")); ui->setupUi(this); @@ -26,29 +26,24 @@ OutputDialog::OutputDialog(QWidget *parent, std::vector *checks) ui->listView->setModel(model); - const std::map 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} - }; for (unsigned short i = 0; i < 6; i ++) columns->push_back(OutputColumn(tr("Кто здесь?"), ColumnType::date)); 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"]; + 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(settings.get_all_settings()["print_header"]); - ui->printTotalCheckBox->setChecked(settings.get_all_settings()["print_total"]); + ui->printHeaderCheckBox->setChecked(settings->get_all_settings()["print_header"]); + ui->printTotalCheckBox->setChecked(settings->get_all_settings()["print_total"]); } -OutputDialog::~OutputDialog() { delete ui; } +OutputDialog::~OutputDialog() { + delete settings; + delete ui; +} void OutputDialog::on_buttonBox_accepted() { std::ofstream output_file(this->options.get_path()); @@ -94,22 +89,9 @@ void OutputDialog::on_buttonBox_accepted() { } } output_file.close(); + save_settings(); } -// void update_settings(OutputOptions &options, ColumnType t, std::string name, -// int value) { -// Column column; -// column.type = t; -// column.name = name; -// column.position = value; - -// if (value) { -// options.add_or_update_column(column); -// } else { -// options.remove_column(t); -// } -// } - void OutputDialog::on_chooseFileButton_clicked() { QString filename = QFileDialog::getSaveFileName(); this->options.set_path(filename.toStdString()); @@ -136,3 +118,13 @@ void OutputDialog::print_header(std::ofstream *output_file) { *output_file << std::endl; } } + +void OutputDialog::save_settings() { + 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; + } + settings->flush(); +} diff --git a/outputdialog.h b/outputdialog.h index 4a32ea5..2380acc 100644 --- a/outputdialog.h +++ b/outputdialog.h @@ -17,6 +17,16 @@ class OutputDialog : public QDialog { OutputOptions options; std::vector *checks; std::vector *columns; + Settings *settings; + + const std::map 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 *checks = nullptr); @@ -35,6 +45,8 @@ private: Ui::OutputDialog *ui; void print_header(std::ofstream *output_file); + + void save_settings(); }; #endif // OUTPUTDIALOG_H diff --git a/translations/en_US.ts b/translations/en_US.ts index 4e36341..50c90fe 100644 --- a/translations/en_US.ts +++ b/translations/en_US.ts @@ -618,7 +618,7 @@ Print total - + Кто здесь? diff --git a/translations/ru_RU.ts b/translations/ru_RU.ts index 1ad25de..9b6112c 100644 --- a/translations/ru_RU.ts +++ b/translations/ru_RU.ts @@ -602,7 +602,7 @@ Печатать Итого - + Кто здесь? diff --git a/utils/utils.cpp b/utils/utils.cpp index e64343f..b460367 100644 --- a/utils/utils.cpp +++ b/utils/utils.cpp @@ -1,3 +1,4 @@ +#include "output/output_options.h" #include #ifdef BUILD_OFD_BINARYEYE_SCAN # include @@ -80,11 +81,31 @@ bool areAllSizesEqual(const std::vector& v1, const std::vector& v2, return (v1.size() == v2.size() && v2.size() == v3.size() && v3.size() == v4.size()); } +// template +// K find_key_by_value(std::map &m, V value) { +// for (auto& entry : m) { +// if (value == entry.second) { +// return entry.first; +// } +// } +// return K(); +// } + +std::string find_key_by_value(const std::map &m, ColumnType value) { + for (auto& entry : m) { + if (value == entry.second) { + return entry.first; + } + } + return ""; +} //ужас template bool vector_contains_element(const std::vector& vector, const std::string& to_find); template bool areAllSizesEqual(const std::vector& v1, const std::vector& v2, const std::vector& v3, const std::vector& v4); +// template std::string find_key_by_value(std::map &, ColumnType); + std::vector split(std::string s, std::string delimiter) { std::vector result; size_t pos = 0; @@ -321,3 +342,4 @@ std::vector read_file(std::string path) { return lines; } #endif // ifdef BUILD_EMAIL_MODE + diff --git a/utils/utils.h b/utils/utils.h index 6638e20..c26b8a6 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -3,13 +3,19 @@ #include #include +#include #include "../check/check.h" +#include "output/output_options.h" std::string to_utf8(std::wstring wide_string); std::wstring from_utf8(std::string string); std::string get_path_relative_to_home(std::string path); +// template +// K find_key_by_value(std::map &m, V value); +std::string find_key_by_value(const std::map &m, ColumnType value); + template bool vector_contains_element(const std::vector &vector, const T &to_find); template diff --git a/widgets/outputcolumnmodel.cpp b/widgets/outputcolumnmodel.cpp index 0afc80e..bbf84d6 100644 --- a/widgets/outputcolumnmodel.cpp +++ b/widgets/outputcolumnmodel.cpp @@ -1,10 +1,9 @@ #include "outputcolumnmodel.h" #include -#include -#include #include #include +#include OutputColumnModel::OutputColumnModel(std::vector *columns, QObject *parent) : columns(columns), QAbstractListModel{parent} { }