From 60a2a228c2ee4b94bbd586f831d53b785207c685 Mon Sep 17 00:00:00 2001 From: AlexeyAleksandrov Date: Fri, 29 Apr 2022 00:32:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=B2=20JSON=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mainwindow.cpp | 84 +++++++++++++++++++++++++++++++++++++++++++++++++- mainwindow.h | 14 +++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 98f2ed6..4f13e24 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -15,8 +15,10 @@ MainWindow::MainWindow(QWidget *parent) ui->setupUi(this); cryptoPro.setCryptoProDirectory(CRYPTO_PRO_DIRECTORY); ui->tableWidget_files->setColumnCount(2); + ui->radioButton_displayLabel->setChecked(true); - updateCertificatesList(); + updateCertificatesList(); // загружаем список сертификатов + loadProgramData(); // загружаем данные программы connect(ui->tableWidget_files, &my_tableWidget::dropFiles, this, &MainWindow::addFiles); connect(ui->tableWidget_files, &my_tableWidget::mouseRightClick, this, &MainWindow::filesTableMouseRightClick); @@ -29,9 +31,89 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { + saveProgramData(); delete ui; } +void MainWindow::loadProgramData() +{ + QFile saveFile("settings.json"); + bool isOpen = saveFile.open(QIODevice::ReadOnly); + if(!isOpen) + { + qDebug() << "Не удалось прочитать настройки программы. Не удалось открыть файл"; + return; + } + + QByteArray jsonText = saveFile.readAll(); // считываем текст JSON + saveFile.close(); + + QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonText); // парсим в JSON документ + QJsonObject jsonObject = jsonDocument.object(); // конвертируем в объект JSON + + QString lastCertificate = jsonObject[KEY_LAST_CERTIFICATE].toString(); // получаем последний сертификат + QString outputDir = jsonObject[KEY_OUTPUT_DIRECTORY].toString(); // получаем папку вывода + bool drawLogo = jsonObject[KEY_DRAW_LOGO].toBool(); // получаем значение отрисовки герба + bool displayName = jsonObject[KEY_DISPLAY_NAME].toBool(); // получаем состояние отображения имени владельца вместо названия сертфиката + + if(lastCertificate != "") // устанавливаем последний выбранный сертификат + { + QList listCertificates = cryptoPro.certmgr.getSertifactesList(); // получаем список сертификатов + if(listCertificates.size() > 0) + { + for(int i=0; icomboBox_certificates->setCurrentIndex(i); // устанавливаем соответсвующий индекс + break; + } + } + } + } + + ui->lineEdit_outputDir->setText(outputDir); + ui->checkBox_drawLogo->setChecked(drawLogo); + + if(displayName) + { + ui->radioButton_displayName->setChecked(true); + } + else + { + ui->radioButton_displayLabel->setChecked(true); + } +} + +void MainWindow::saveProgramData() +{ + QJsonDocument jsonDocument; + QJsonObject jsonObject; + + if(ui->comboBox_certificates->count() > 0) // если в системе есть сертификаты + { + QString currentCertificate = getCurrentSign().serial; + jsonObject.insert(KEY_LAST_CERTIFICATE, currentCertificate); // добавляем последний сертификат + } + + jsonObject.insert(KEY_DRAW_LOGO, ui->checkBox_drawLogo->isChecked()); // добавляем состояние чекбокса рисонивая герба + jsonObject.insert(KEY_OUTPUT_DIRECTORY, ui->lineEdit_outputDir->text()); // добавляем папку вывода + jsonObject.insert(KEY_DISPLAY_NAME, ui->radioButton_displayName->isChecked()); // добавляем состояние отображения имени владельца вместо названия сертфиката + + jsonDocument.setObject(jsonObject); // добавляем объект в документ + + QFile saveFile("settings.json"); + bool isOpen = saveFile.open(QIODevice::WriteOnly); + if(!isOpen) + { + qDebug() << "Не удалось сохранить настройки программы. Не удалось открыть файл"; + return; + } + + saveFile.write(jsonDocument.toJson()); + saveFile.close(); +} + void MainWindow::updateCertificatesList() { int currentIndex = ui->comboBox_certificates->currentIndex(); diff --git a/mainwindow.h b/mainwindow.h index f38e76c..a5611dd 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -6,6 +6,15 @@ #include #include #include +#include +#include +#include + +#define KEY_LAST_CERTIFICATE "lastCerificate" // последний использованный сертификат +#define KEY_MAIN_CERTIFICATE "mainCertificate" // сертификат по-умолчанию +#define KEY_DRAW_LOGO "drawLogo" // флаг рисования герба +#define KEY_OUTPUT_DIRECTORY "outputDir" // папка вывода +#define KEY_DISPLAY_NAME "displayName" // флаг отображения имени владельца, вместо названия сертификата QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -29,6 +38,11 @@ class MainWindow : public QMainWindow READY }; +private: + void loadProgramData(); + void saveProgramData(); + + private: void updateCertificatesList(); // функция обновления сертификатов CryptoPRO_CSP::CryptoSignData getCurrentSign(); // получить текущую выбранную подпись