changes in code after tests on windows

This commit is contained in:
jorenchik
2024-12-08 09:39:03 +02:00
parent a94b01751e
commit 0d53d4fd7b
5 changed files with 148 additions and 108 deletions

View File

@@ -1,5 +1,5 @@
#include <cstdio> #include <cstdio>
#include <ctime> #include <time.h>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <map> #include <map>
@@ -8,31 +8,12 @@
#include <sstream> #include <sstream>
#include <string> #include <string>
#include <qabstractbutton.h>
#include <qapplication.h>
#include <qboxlayout.h>
#include <qcombobox.h>
#include <qdialog.h>
#include <qlabel.h>
#include <qlayoutitem.h>
#include <qmainwindow.h>
#include <qnamespace.h>
#include <qobjectdefs.h>
#include <qsettings.h>
#include <qsizepolicy.h>
#include <qt/QtWidgets/qwidget.h>
#include <qtoolbutton.h>
#include <qwidget.h>
#include <qwindow.h>
#include <qwindowdefs.h>
#include <Qsci/qsciscintilla.h>
#include <Qsci/qscilexercpp.h>
#include <QApplication> #include <QApplication>
#include <QMainWindow> #include <QMainWindow>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QHeaderView>
#include <QToolButton> #include <QToolButton>
#include <QFileSystemModel> #include <QFileSystemModel>
#include <QTreeView> #include <QTreeView>
@@ -42,28 +23,18 @@
#include <QScrollArea> #include <QScrollArea>
#include <QSpacerItem> #include <QSpacerItem>
#include <QFile> #include <QFile>
#include <QShortcut>
#include <QTime> #include <QTime>
#include <QRegularExpression> #include <QRegularExpression>
#include <QStringList> #include <QStringList>
#include <QListView>
#include <QWindow>
#include <QMenuBar> #include <QMenuBar>
#include <QMenu>
#include <QFileDialog> #include <QFileDialog>
#include <qabstractitemmodel.h>
#include <QFormLayout>
#include <QSettings>
#include <QLineEdit>
#include <QComboBox>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QCheckBox>
#include <QPushButton> #include <QPushButton>
#include <QStandardPaths>
#include <QShortcut>
#include <QWidget>
#include <QTextBrowser> #include <QTextBrowser>
#include <QHeaderView>
#include <Qsci/qscilexer.h>
#include <Qsci/qsciscintilla.h>
#include <Qsci/qscilexercpp.h>
#include "config.h" #include "config.h"
#include "settings.h" #include "settings.h"
@@ -71,7 +42,6 @@
#include "trainWindow.h" #include "trainWindow.h"
#include "api.h" #include "api.h"
#include "parser.h" #include "parser.h"
#include "qscilexer.h"
// Atmiņas bāze. // Atmiņas bāze.
QString currentPath = ""; QString currentPath = "";
@@ -746,6 +716,32 @@ void pickDirectory(QString directory) {
return; 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; currentPath = directory;
// Atjauno failu sarakstu. // Atjauno failu sarakstu.
@@ -768,6 +764,7 @@ void pickDirectory(QString directory) {
} }
void setupEditorSave() { void setupEditorSave() {
const QString title = editMdem ? "Rediģēšanas kļūda" : "Pievienošanas kļūda";
debug = settings->value(SETTING_DEBUG).toBool(); debug = settings->value(SETTING_DEBUG).toBool();
showTimes = settings->value(SETTING_SHOW_TIMES).toBool(); showTimes = settings->value(SETTING_SHOW_TIMES).toBool();
auto res = transpile(editor->text().toStdString()); auto res = transpile(editor->text().toStdString());
@@ -778,7 +775,7 @@ void setupEditorSave() {
} }
QMessageBox::information( QMessageBox::information(
nullptr, nullptr,
"Rediģēšanas kļūda", title,
QString::fromStdString(res.error) QString::fromStdString(res.error)
); );
} else { } else {
@@ -786,7 +783,7 @@ void setupEditorSave() {
if (res.value.questions.size() <= 0) { if (res.value.questions.size() <= 0) {
QMessageBox::information( QMessageBox::information(
nullptr, nullptr,
"Rediģēšanas kļūda", title,
"Jūsu ievadē nav jautājumu." "Jūsu ievadē nav jautājumu."
); );
} else if (res.value.questions.size() == 1) { } else if (res.value.questions.size() == 1) {
@@ -807,7 +804,7 @@ void setupEditorSave() {
} else { } else {
QMessageBox::information( QMessageBox::information(
nullptr, nullptr,
"Rediģēšanas kļūda", title,
"Jūsu ievadē ir vairāki jautājumi. Lūdzu ievadiet vienu!" "Jūsu ievadē ir vairāki jautājumi. Lūdzu ievadiet vienu!"
); );
} }
@@ -815,7 +812,7 @@ void setupEditorSave() {
if (res.value.questions.size() <= 0) { if (res.value.questions.size() <= 0) {
QMessageBox::information( QMessageBox::information(
nullptr, nullptr,
"Rediģēšanas kļūda", title,
"Jūsu ievadē nav jautājumu." "Jūsu ievadē nav jautājumu."
); );
} else { } else {
@@ -873,6 +870,7 @@ QMainWindow *initMdemListWindow() {
// Saistīti logi. // Saistīti logi.
auto *settingsWindow = initSettings(); auto *settingsWindow = initSettings();
trainWindow = initTrainWindow(); trainWindow = initTrainWindow();
trainWindow->resize(800, 600);
QMainWindow *guideWindow = new QMainWindow; QMainWindow *guideWindow = new QMainWindow;
{ // Apmācības logs. { // Apmācības logs.
@@ -884,6 +882,7 @@ QMainWindow *initMdemListWindow() {
layout->addWidget(textBrowser); layout->addWidget(textBrowser);
guideWidget->setLayout(layout); guideWidget->setLayout(layout);
guideWindow->setCentralWidget(guideWidget); guideWindow->setCentralWidget(guideWidget);
guideWindow->resize(800, 600);
} }
QAction *actionOpen; QAction *actionOpen;
@@ -1019,14 +1018,26 @@ QMainWindow *initMdemListWindow() {
// Pogu definēšana. // Pogu definēšana.
QObject::connect(&toolbar->btnAdd, &QToolButton::clicked, []() { QObject::connect(&toolbar->btnAdd, &QToolButton::clicked, []() {
if (!currentMdemBuffer) {
return;
}
editMdem = nullptr; editMdem = nullptr;
editorWindow->show(); editorWindow->show();
editor->setText(""); editor->setText("");
}); });
QObject::connect(&toolbar->btnLoad, &QToolButton::clicked, []() { QObject::connect(&toolbar->btnLoad, &QToolButton::clicked, []() {
if (!currentMdemBuffer) {
return;
}
if (!trainWindow->isHidden()) {
trainWindow->hide();
}
reloadMdem(currentMdem); reloadMdem(currentMdem);
}); });
QObject::connect(&toolbar->btnSave, &QToolButton::clicked, []() { QObject::connect(&toolbar->btnSave, &QToolButton::clicked, []() {
if (!currentMdemBuffer) {
return;
}
saveMdem(); saveMdem();
}); });
QObject::connect( QObject::connect(
@@ -1088,7 +1099,7 @@ QMainWindow *initMdemListWindow() {
mdemList = new QTreeView(); mdemList = new QTreeView();
QStringList filters; QStringList filters;
filters << "*.mdem"; filters << "*.mdem" << "*.txt";
model->setNameFilters(filters); model->setNameFilters(filters);
model->setNameFilterDisables(false); model->setNameFilterDisables(false);
@@ -1108,7 +1119,7 @@ QMainWindow *initMdemListWindow() {
&QTreeView::doubleClicked, &QTreeView::doubleClicked,
[](const QModelIndex &index) { [](const QModelIndex &index) {
auto fileInfo = model->fileInfo(index); auto fileInfo = model->fileInfo(index);
if (fileInfo.suffix() == "mdem") { if (!fileInfo.isDir()) {
trainWindow->close(); trainWindow->close();
reloadMdem(fileInfo.filePath().toStdString()); reloadMdem(fileInfo.filePath().toStdString());
} }
@@ -1271,5 +1282,6 @@ QMainWindow *initMdemListWindow() {
window->setCentralWidget(wMain); window->setCentralWidget(wMain);
window->show(); window->show();
window->resize(800, 600);
return window; return window;
} }

View File

@@ -1,65 +1,23 @@
#include <qabstractbutton.h> #include <filesystem>
#include <qapplication.h>
#include <qboxlayout.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qcoreevent.h>
#include <qdialog.h>
#include <qlabel.h>
#include <qlayoutitem.h>
#include <qmainwindow.h>
#include <qnamespace.h>
#include <qobject.h>
#include <qobjectdefs.h>
#include <qsettings.h>
#include <qsizepolicy.h>
#include <qspinbox.h>
#include <qt/QtWidgets/qwidget.h>
#include <qtoolbutton.h>
#include <qvalidator.h>
#include <qwidget.h>
#include <qwindow.h>
#include <qwindowdefs.h>
#include <Qsci/qsciscintilla.h>
#include <Qsci/qscilexercpp.h>
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QToolButton>
#include <QFileSystemModel>
#include <QTreeView>
#include <QSplitter>
#include <QVariant>
#include <QMessageBox>
#include <QScrollArea>
#include <QSpacerItem> #include <QSpacerItem>
#include <QFile>
#include <QTime>
#include <QRegularExpression>
#include <QStringList>
#include <QListView>
#include <QWindow>
#include <QMenuBar>
#include <QMenu>
#include <QFileDialog> #include <QFileDialog>
#include <qabstractitemmodel.h>
#include <QFormLayout> #include <QFormLayout>
#include <QSettings> #include <QSettings>
#include <QLineEdit> #include <QLineEdit>
#include <QComboBox>
#include <QSpinBox> #include <QSpinBox>
#include <QDoubleSpinBox> #include <QDoubleSpinBox>
#include <QCheckBox> #include <QCheckBox>
#include <QPushButton> #include <QPushButton>
#include <QDateTime>
#include <QStandardPaths> #include <QStandardPaths>
#include <QShortcut> #include <QShortcut>
#include <QWidget> #include <QWidget>
#include "mdemList.h" #include "mdemList.h"
#include "qscilexer.h"
QSettings *settings; QSettings *settings;
@@ -72,6 +30,11 @@ QWidget *initSettings () {
auto configDir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); auto configDir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QDir().mkpath(configDir); QDir().mkpath(configDir);
QString settingsFile = configDir + "/mdem.ini"; QString settingsFile = configDir + "/mdem.ini";
bool setToDefault = false;
if (!std::filesystem::exists(settingsFile.toStdString())) {
setToDefault = true;
}
settings = new QSettings(settingsFile, QSettings::IniFormat); settings = new QSettings(settingsFile, QSettings::IniFormat);
// Logs. // Logs.
@@ -155,9 +118,11 @@ QWidget *initSettings () {
wButtons->setLayout(btnLayout); wButtons->setLayout(btnLayout);
auto btnSaveSettings = new QPushButton("Saglabāt"); auto btnSaveSettings = new QPushButton("Saglabāt");
auto btnLoad = new QPushButton("Ielādēt"); auto btnLoad = new QPushButton("Ielādēt");
auto btnReset = new QPushButton("Atiestatīt");
auto mainLayout = new QVBoxLayout; auto mainLayout = new QVBoxLayout;
btnLayout->addWidget(btnSaveSettings); btnLayout->addWidget(btnSaveSettings);
btnLayout->addWidget(btnLoad); btnLayout->addWidget(btnLoad);
btnLayout->addWidget(btnReset);
wButtons->setStyleSheet("font-size: 15px;"); wButtons->setStyleSheet("font-size: 15px;");
// Uzstāda lauku vērtības no uzstādījumu vērtībām. // Uzstāda lauku vērtības no uzstādījumu vērtībām.
@@ -281,6 +246,46 @@ QWidget *initSettings () {
updateSettingsLabel(false); 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( QObject::connect(
btnSaveSettings, btnSaveSettings,
&QPushButton::clicked, &QPushButton::clicked,
@@ -306,7 +311,19 @@ QWidget *initSettings () {
loadSettings(); loadSettings();
} }
); );
QObject::connect(
btnReset,
&QPushButton::clicked,
[resetInputsToDefault]() {
resetInputsToDefault();
}
);
if (setToDefault) {
resetInputsToDefault();
saveSettings();
} else {
loadSettings(); loadSettings();
}
// Lai pogas ir lejā. // Lai pogas ir lejā.
auto spacer = new QSpacerItem( auto spacer = new QSpacerItem(
@@ -323,5 +340,6 @@ QWidget *initSettings () {
mainLayout->addWidget(wButtons); mainLayout->addWidget(wButtons);
settingsWindow->setLayout(mainLayout); settingsWindow->setLayout(mainLayout);
settingsWindow->resize(800, 600);
return settingsWindow; return settingsWindow;
} }

View File

@@ -1,33 +1,20 @@
#include <QMainWindow> #include <random>
#include <QWidget>
#include <QToolButton>
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
#include <ctime> #include <ctime>
#include <cstdlib> #include <cstdlib>
#include <qabstractitemview.h>
#include <qboxlayout.h> #include <QListView>
#include <qchar.h>
#include <qcoreevent.h>
#include <qlabel.h>
#include <qlayoutitem.h>
#include <qlistview.h>
#include <qmainwindow.h>
#include <qnamespace.h>
#include <qscrollarea.h>
#include <qstandarditemmodel.h>
#include <qstringalgorithms.h>
#include <qstringlistmodel.h>
#include <qtoolbutton.h>
#include <Qt> #include <Qt>
#include <random> #include <QMainWindow>
#include <qwidget.h> #include <QWidget>
#include <QToolButton>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QDropEvent> #include <QDropEvent>
#include <QDrag>
#include <QStyledItemDelegate> #include <QStyledItemDelegate>
#include <QPainter> #include <QPainter>
#include <QShortcut> #include <QShortcut>
#include <QScrollArea>
#include "settings.h" #include "settings.h"
#include "mdemList.h" #include "mdemList.h"

View File

@@ -108,6 +108,24 @@ Result<ParseInfo> transpile(std::string fileContent) {
start = std::chrono::high_resolution_clock::now(); start = std::chrono::high_resolution_clock::now();
end = 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 lexRes = tokenizeMdem(fileContent);
auto tokens = lexRes.value; auto tokens = lexRes.value;
if (lexRes.error.length() > 0) { if (lexRes.error.length() > 0) {

View File

@@ -10,6 +10,11 @@
#include "config.h" #include "config.h"
#include "result.h" #include "result.h"
// Uz Windows sistēmās timegm funkcijai ir atšķirīgs nosaukums.
#ifdef _WIN32
#define timegm _mkgmtime
#endif
std::vector<Token> tokens; std::vector<Token> tokens;
std::vector<char> buffer; std::vector<char> buffer;
int32_t row; int32_t row;