From 0d53d4fd7b05cb0f41382dd2ae5cb978a20b73be Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sun, 8 Dec 2024 09:39:03 +0200 Subject: [PATCH] changes in code after tests on windows --- src/qtapp/mdemList.cpp | 98 +++++++++++++++++++--------------- src/qtapp/settings.cpp | 108 ++++++++++++++++++++++---------------- src/qtapp/trainWindow.cpp | 27 +++------- src/transpiler/api.cpp | 18 +++++++ src/transpiler/lexer.cpp | 5 ++ 5 files changed, 148 insertions(+), 108 deletions(-) diff --git a/src/qtapp/mdemList.cpp b/src/qtapp/mdemList.cpp index 96a7cec..19185e5 100644 --- a/src/qtapp/mdemList.cpp +++ b/src/qtapp/mdemList.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -8,31 +8,12 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include #include #include #include #include #include +#include #include #include #include @@ -42,28 +23,18 @@ #include #include #include +#include #include #include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include #include -#include + +#include +#include +#include #include "config.h" #include "settings.h" @@ -71,7 +42,6 @@ #include "trainWindow.h" #include "api.h" #include "parser.h" -#include "qscilexer.h" // Atmiņas bāze. QString currentPath = ""; @@ -746,6 +716,32 @@ void pickDirectory(QString directory) { return; } + // Pārbauda direktorija lasāmību + try { + auto tempFile = path.concat("/.writetest.tmp").string(); + std::ofstream file(tempFile); + if (file) { + file.close(); + std::filesystem::remove(tempFile); + } else { + QMessageBox::information( + nullptr, + "Atveršanas kļūda", + "Izvēlētajā direktorijā nav iespējams rakstīt." + ); + currentPath = ""; + return; + } + } catch (const std::exception& e) { + QMessageBox::information( + nullptr, + "Atveršanas kļūda", + "Neizdevās pārbaudīt izvēlētā direktorija rakstāmību." + ); + currentPath = ""; + return; + } + currentPath = directory; // Atjauno failu sarakstu. @@ -768,6 +764,7 @@ void pickDirectory(QString directory) { } void setupEditorSave() { + const QString title = editMdem ? "Rediģēšanas kļūda" : "Pievienošanas kļūda"; debug = settings->value(SETTING_DEBUG).toBool(); showTimes = settings->value(SETTING_SHOW_TIMES).toBool(); auto res = transpile(editor->text().toStdString()); @@ -778,7 +775,7 @@ void setupEditorSave() { } QMessageBox::information( nullptr, - "Rediģēšanas kļūda", + title, QString::fromStdString(res.error) ); } else { @@ -786,7 +783,7 @@ void setupEditorSave() { if (res.value.questions.size() <= 0) { QMessageBox::information( nullptr, - "Rediģēšanas kļūda", + title, "Jūsu ievadē nav jautājumu." ); } else if (res.value.questions.size() == 1) { @@ -807,7 +804,7 @@ void setupEditorSave() { } else { QMessageBox::information( nullptr, - "Rediģēšanas kļūda", + title, "Jūsu ievadē ir vairāki jautājumi. Lūdzu ievadiet vienu!" ); } @@ -815,7 +812,7 @@ void setupEditorSave() { if (res.value.questions.size() <= 0) { QMessageBox::information( nullptr, - "Rediģēšanas kļūda", + title, "Jūsu ievadē nav jautājumu." ); } else { @@ -873,6 +870,7 @@ QMainWindow *initMdemListWindow() { // Saistīti logi. auto *settingsWindow = initSettings(); trainWindow = initTrainWindow(); + trainWindow->resize(800, 600); QMainWindow *guideWindow = new QMainWindow; { // Apmācības logs. @@ -884,6 +882,7 @@ QMainWindow *initMdemListWindow() { layout->addWidget(textBrowser); guideWidget->setLayout(layout); guideWindow->setCentralWidget(guideWidget); + guideWindow->resize(800, 600); } QAction *actionOpen; @@ -1019,14 +1018,26 @@ QMainWindow *initMdemListWindow() { // Pogu definēšana. QObject::connect(&toolbar->btnAdd, &QToolButton::clicked, []() { + if (!currentMdemBuffer) { + return; + } editMdem = nullptr; editorWindow->show(); editor->setText(""); }); QObject::connect(&toolbar->btnLoad, &QToolButton::clicked, []() { + if (!currentMdemBuffer) { + return; + } + if (!trainWindow->isHidden()) { + trainWindow->hide(); + } reloadMdem(currentMdem); }); QObject::connect(&toolbar->btnSave, &QToolButton::clicked, []() { + if (!currentMdemBuffer) { + return; + } saveMdem(); }); QObject::connect( @@ -1088,7 +1099,7 @@ QMainWindow *initMdemListWindow() { mdemList = new QTreeView(); QStringList filters; - filters << "*.mdem"; + filters << "*.mdem" << "*.txt"; model->setNameFilters(filters); model->setNameFilterDisables(false); @@ -1108,7 +1119,7 @@ QMainWindow *initMdemListWindow() { &QTreeView::doubleClicked, [](const QModelIndex &index) { auto fileInfo = model->fileInfo(index); - if (fileInfo.suffix() == "mdem") { + if (!fileInfo.isDir()) { trainWindow->close(); reloadMdem(fileInfo.filePath().toStdString()); } @@ -1271,5 +1282,6 @@ QMainWindow *initMdemListWindow() { window->setCentralWidget(wMain); window->show(); + window->resize(800, 600); return window; } diff --git a/src/qtapp/settings.cpp b/src/qtapp/settings.cpp index d662208..fdc1d90 100644 --- a/src/qtapp/settings.cpp +++ b/src/qtapp/settings.cpp @@ -1,65 +1,23 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include -#include -#include -#include -#include #include #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include #include -#include #include #include #include #include +#include #include #include #include #include "mdemList.h" -#include "qscilexer.h" QSettings *settings; @@ -72,6 +30,11 @@ QWidget *initSettings () { auto configDir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); QDir().mkpath(configDir); QString settingsFile = configDir + "/mdem.ini"; + + bool setToDefault = false; + if (!std::filesystem::exists(settingsFile.toStdString())) { + setToDefault = true; + } settings = new QSettings(settingsFile, QSettings::IniFormat); // Logs. @@ -155,9 +118,11 @@ QWidget *initSettings () { wButtons->setLayout(btnLayout); auto btnSaveSettings = new QPushButton("Saglabāt"); auto btnLoad = new QPushButton("Ielādēt"); + auto btnReset = new QPushButton("Atiestatīt"); auto mainLayout = new QVBoxLayout; btnLayout->addWidget(btnSaveSettings); btnLayout->addWidget(btnLoad); + btnLayout->addWidget(btnReset); wButtons->setStyleSheet("font-size: 15px;"); // Uzstāda lauku vērtības no uzstādījumu vērtībām. @@ -281,6 +246,46 @@ QWidget *initSettings () { updateSettingsLabel(false); }; + // Iestata uz noklusētiem iestatījumiem, ja konfigurācija neeksistēja ieptiekš. + auto resetInputsToDefault = [ + perPage, + mbaseInput, + characterWrap, + timezone, + notRemembered, + hard, + medium, + easy, + debug, + showTimes, + updateSettingsLabel + ]() { + // Noklutētā atmiņas bāze - lietotāja mājas direktorijs. + auto homeDir = QStandardPaths::writableLocation( + QStandardPaths::HomeLocation + ); + mbaseInput->setText(homeDir); + + perPage->setValue(10); + characterWrap->setValue(80); + + // Noklusētā laika zona - lokālā laika zona. + auto localTime = QDateTime::currentDateTime(); + auto utcTime = QDateTime::currentDateTimeUtc(); + qint64 offsetSeconds = localTime.offsetFromUtc(); + int offsetHours = offsetSeconds / 3600; + timezone->setValue(offsetHours); + + notRemembered->setValue(0); + hard->setValue(3); + medium->setValue(24); + easy->setValue(48); + debug->setChecked(false); + showTimes->setChecked(false); + + updateSettingsLabel(true); + }; + QObject::connect( btnSaveSettings, &QPushButton::clicked, @@ -306,7 +311,19 @@ QWidget *initSettings () { loadSettings(); } ); - loadSettings(); + QObject::connect( + btnReset, + &QPushButton::clicked, + [resetInputsToDefault]() { + resetInputsToDefault(); + } + ); + if (setToDefault) { + resetInputsToDefault(); + saveSettings(); + } else { + loadSettings(); + } // Lai pogas ir lejā. auto spacer = new QSpacerItem( @@ -323,5 +340,6 @@ QWidget *initSettings () { mainLayout->addWidget(wButtons); settingsWindow->setLayout(mainLayout); + settingsWindow->resize(800, 600); return settingsWindow; } diff --git a/src/qtapp/trainWindow.cpp b/src/qtapp/trainWindow.cpp index a2e9537..d18b730 100644 --- a/src/qtapp/trainWindow.cpp +++ b/src/qtapp/trainWindow.cpp @@ -1,33 +1,20 @@ -#include -#include -#include +#include #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + +#include #include -#include -#include +#include +#include +#include #include #include -#include #include #include #include +#include #include "settings.h" #include "mdemList.h" diff --git a/src/transpiler/api.cpp b/src/transpiler/api.cpp index 47b0ac8..a6c373f 100644 --- a/src/transpiler/api.cpp +++ b/src/transpiler/api.cpp @@ -108,6 +108,24 @@ Result transpile(std::string fileContent) { start = std::chrono::high_resolution_clock::now(); end = std::chrono::high_resolution_clock::now(); + // Apstrādā jaunas rindas simbolus gan DOS, + // gan UNIX formātā vienādi. + std::string normalized; + for (int i = 0; i < fileContent.size(); ++i) { + if (fileContent[i] == '\r') { + if ( + i + 1 < fileContent.size() && + fileContent[i + 1] == '\n' + ) { + ++i; + } + normalized.push_back('\n'); + } else { + normalized.push_back(fileContent[i]); + } + } + fileContent = normalized; + auto lexRes = tokenizeMdem(fileContent); auto tokens = lexRes.value; if (lexRes.error.length() > 0) { diff --git a/src/transpiler/lexer.cpp b/src/transpiler/lexer.cpp index f41d7aa..0cff3bf 100644 --- a/src/transpiler/lexer.cpp +++ b/src/transpiler/lexer.cpp @@ -10,6 +10,11 @@ #include "config.h" #include "result.h" +// Uz Windows sistēmās timegm funkcijai ir atšķirīgs nosaukums. +#ifdef _WIN32 +#define timegm _mkgmtime +#endif + std::vector tokens; std::vector buffer; int32_t row;