Fixed search

This commit is contained in:
Torsten Schulz
2024-04-05 13:42:10 +02:00
parent b90d26d886
commit c9bf7db38c
5 changed files with 32 additions and 52 deletions

View File

@@ -1,5 +1,6 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <utility>
#include <QFileDialog>
#include <QMessageBox>
#include <QDir>
@@ -43,15 +44,7 @@ MainWindow::MainWindow(QWidget *parent)
if (configuration.contains("last-dir") && (QDir()).exists(configuration["last-dir"].toString())) {
ui->projectDir->setText(configuration["last-dir"].toString());
crawlProject();
qDebug() << "project crawled";
qDebug() << configuration["last-language"].toString();
qDebug() << ui->languageCombo->count();
for (int i=0; i < ui->languageCombo->count(); ++i) {
qDebug() << ui->languageCombo->itemText(i);
}
qDebug() << ui->languageCombo->findText(configuration["last-language"].toString());
if (configuration.contains("last-language") && ui->languageCombo->findText(configuration["last-language"].toString()) >= 0) {
qDebug() << "language crawl";
ui->languageCombo->setCurrentText(configuration["last-language"].toString());
}
}
@@ -99,15 +92,8 @@ void MainWindow::crawlProject() {
ui->languageCombo->setCurrentIndex(-1);
}
void MainWindow::on_reloadButton_clicked()
{
crawlProject();
}
void MainWindow::on_languageCombo_currentTextChanged(const QString &selectedLanguage)
{
qDebug() << "language selected";
setConfigValue("last-language", selectedLanguage);
fileContentsMap.clear();
ui->treeWidget->clear();
@@ -138,7 +124,7 @@ void MainWindow::populateTreeWidgetFromMap() {
fileItem->setText(0, fileName);
fileItem->setData(0, Qt::UserRole, false);
auto parsedBlocks = parseTextBlock(pair.second);
for (const auto& block : qAsConst(parsedBlocks)) {
for (const auto& block : std::as_const(parsedBlocks)) {
QTreeWidgetItem *blockItem = new QTreeWidgetItem(fileItem);
blockItem->setText(0, QString::number(block.line));
blockItem->setText(1, block.oldText);
@@ -163,9 +149,10 @@ QVector<MainWindow::TranslationItem> MainWindow::parseTextBlock(const QString& i
QString identifier, originalText, translatedText;
for (const QString& line : std::as_const(lines)) {
if (line.contains("# game/")) {
QRegExp regExp("# game/.+:(\\d+)");
if (regExp.indexIn(line.trimmed()) != -1) {
lineNumber = regExp.cap(1).toInt();
QRegularExpression regExp("# game/.+:(\\d+)");
QRegularExpressionMatch match = regExp.match(line.trimmed());
if (match.hasMatch()) {
lineNumber = match.captured(1).toInt();
}
} else if (line.startsWith(" # ") || line.startsWith(" old ")) {
originalText = line.mid(line.indexOf("\"") + 1).trimmed();
@@ -565,31 +552,34 @@ void MainWindow::on_searchButton_clicked() {
searchNext();
}
}
void MainWindow::on_searchNextButton_clicked() {
if (searchQuery.isEmpty()) {
return;
}
qDebug() << "clicked";
searchNext();
}
void MainWindow::searchInTree(QTreeWidgetItem *item, const QString &query) {
for (int i = 0; i < item->childCount(); ++i) {
QTreeWidgetItem *childItem = item->child(i);
for (int column = 1; column <= 2; ++column) {
if (childItem->text(column).contains(query, Qt::CaseInsensitive)) {
ui->treeWidget->setCurrentItem(childItem);
ui->treeWidget->scrollToItem(childItem);
void MainWindow::searchNext() {
auto currentItem = ui->treeWidget->currentItem();
for (int fileItemPos = 0; fileItemPos < ui->treeWidget->invisibleRootItem()->childCount(); ++fileItemPos) {
auto fileItem {ui->treeWidget->invisibleRootItem()->child(fileItemPos)};
for (int linePos = 0; linePos < fileItem->childCount(); ++linePos) {
auto line {fileItem->child(linePos)};
if (currentItem == NULL && (line->text(1).contains(searchQuery, Qt::CaseInsensitive)
|| line->text(2).contains(searchQuery, Qt::CaseInsensitive))) {
ui->treeWidget->setCurrentItem(line);
ui->treeWidget->scrollToItem(line);
return;
}
if (currentItem == line) {
currentItem = NULL;
}
}
searchInTree(childItem, query);
}
}
void MainWindow::searchNext() {
if (searchQuery.isEmpty()) return;
QTreeWidgetItem *startItem = ui->treeWidget->currentItem();
if (!startItem) startItem = ui->treeWidget->topLevelItem(0);
searchInTree(startItem, searchQuery);
}
void MainWindow::setConfigValue(const QString &key, const QString &value) {
if (noConfigChange) {
return;