From 1caf9b76b4db860f2dfabaadaa06df8790db937d Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 11:50:03 -0500 Subject: [PATCH 1/6] app: set application name --- app/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/app/main.cpp b/app/main.cpp index 158c189..2a311dc 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -40,6 +40,7 @@ int main(int argc, char *argv[]) qInstallMessageHandler(DebugHandler); QApplication a(argc, argv); + a.setApplicationName(QObject::tr("SI Editor")); MainWindow w; From 45f887c201e3976a25842e3b6ba42c55d33577d0 Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 12:59:53 -0500 Subject: [PATCH 2/6] app: append open filename to window title --- app/mainwindow.cpp | 23 +++++++++++++++++------ app/mainwindow.h | 2 ++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 2fa47fc..066e0b2 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1,5 +1,6 @@ #include "mainwindow.h" +#include <QApplication> #include <QFileDialog> #include <QLineEdit> #include <QMenuBar> @@ -104,7 +105,7 @@ MainWindow::MainWindow(QWidget *parent) : splitter->setSizes({99999, 99999}); - setWindowTitle(tr("SI Editor")); + setWindowTitle(QApplication::applicationName()); } void MainWindow::OpenFilename(const QString &s) @@ -183,11 +184,7 @@ void MainWindow::ExtractObject(si::Object *obj) filename = QString::fromStdString(obj->name()); filename.append(QStringLiteral(".bin")); } else { - // Strip off directory - int index = filename.lastIndexOf('\\'); - if (index != -1) { - filename = filename.mid(index+1); - } + TrimOffDirectory(filename); } QString s = QFileDialog::getSaveFileName(this, tr("Export Object"), filename); @@ -278,6 +275,17 @@ bool MainWindow::ExtractAllRecursiveInternal(const QDir &dir, const si::Core *ob return true; } +void MainWindow::TrimOffDirectory(QString& s) +{ + int bSlashIndex = s.lastIndexOf('\\'); + int fSlashIndex = s.lastIndexOf('/'); + int lastIndex = (bSlashIndex > fSlashIndex) ? bSlashIndex : fSlashIndex; + + if (lastIndex != -1) { + s = s.mid(lastIndex + 1); + } +} + void MainWindow::NewFile() { model_.SetCore(nullptr); @@ -290,6 +298,9 @@ void MainWindow::OpenFile() QString s = GetOpenFileName(); if (!s.isEmpty()) { OpenFilename(s); + TrimOffDirectory(s); + + setWindowTitle(QStringLiteral("%1 - %2").arg(QApplication::applicationName(), s)); } } diff --git a/app/mainwindow.h b/app/mainwindow.h index cb8c99e..ee85b2b 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -39,6 +39,8 @@ private: bool ExtractAllRecursiveInternal(const QDir &dir, const si::Core *obj); + void TrimOffDirectory(QString &s); + static const QString kFileFilter; QStackedWidget *config_stack_; From 61ca9a2958f7f7a43215e2fb433eb4e64ee97445 Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 13:39:54 -0500 Subject: [PATCH 3/6] app: add unsaved file indicator to window title --- app/mainwindow.cpp | 19 +++++++++++++++++++ app/mainwindow.h | 1 + 2 files changed, 20 insertions(+) diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 066e0b2..121ba39 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -177,6 +177,23 @@ void MainWindow::SetPanel(Panel *panel, si::Object *chunk) } } +void MainWindow::UpdateWindowTitleFlag(bool isFileModified) +{ + QString title = windowTitle(); + + if (isFileModified) { + if (!title.endsWith("*")) { + title.append("*"); + setWindowTitle(title); + } + } else { + if (title.endsWith("*")) { + // trim off asterisk + setWindowTitle(title.left(title.length() - 1)); + } + } +} + void MainWindow::ExtractObject(si::Object *obj) { QString filename = QString::fromStdString(obj->filename()); @@ -213,6 +230,7 @@ void MainWindow::ReplaceObject(si::Object *obj) #endif )) { static_cast<Panel*>(config_stack_->currentWidget())->ResetData(); + UpdateWindowTitleFlag(true); } else { QMessageBox::critical(this, QString(), tr("Failed to open to file \"%1\".").arg(s)); } @@ -318,6 +336,7 @@ bool MainWindow::SaveFile() ); if (r == Interleaf::ERROR_SUCCESS) { + UpdateWindowTitleFlag(false); return true; } else { QMessageBox::critical(this, QString(), tr("Failed to write SI file: %1").arg(r)); diff --git a/app/mainwindow.h b/app/mainwindow.h index ee85b2b..2ee9da5 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -29,6 +29,7 @@ private: void InitializeMenuBar(); void SetPanel(Panel *panel, si::Object *chunk); + void UpdateWindowTitleFlag(bool isFileModified); void ExtractObject(si::Object *obj); void ReplaceObject(si::Object *obj); From f237d0e1ae744cc6a3583dac11c1cd307414d189 Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 14:10:42 -0500 Subject: [PATCH 4/6] app: greatly simplify title update logic --- app/mainwindow.cpp | 31 ++++++++++++++----------------- app/mainwindow.h | 4 +++- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 121ba39..a71d263 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -177,21 +177,18 @@ void MainWindow::SetPanel(Panel *panel, si::Object *chunk) } } -void MainWindow::UpdateWindowTitleFlag(bool isFileModified) +void MainWindow::UpdateWindowTitle(QString filename) +{ + TrimOffDirectory(filename); + setWindowTitle(QStringLiteral("%1 - %2").arg(QApplication::applicationName(), filename)); +} + +void MainWindow::AppendModifiedTitleIndicator() { QString title = windowTitle(); + title.append("*"); - if (isFileModified) { - if (!title.endsWith("*")) { - title.append("*"); - setWindowTitle(title); - } - } else { - if (title.endsWith("*")) { - // trim off asterisk - setWindowTitle(title.left(title.length() - 1)); - } - } + setWindowTitle(title); } void MainWindow::ExtractObject(si::Object *obj) @@ -230,7 +227,7 @@ void MainWindow::ReplaceObject(si::Object *obj) #endif )) { static_cast<Panel*>(config_stack_->currentWidget())->ResetData(); - UpdateWindowTitleFlag(true); + AppendModifiedTitleIndicator(); } else { QMessageBox::critical(this, QString(), tr("Failed to open to file \"%1\".").arg(s)); } @@ -309,6 +306,8 @@ void MainWindow::NewFile() model_.SetCore(nullptr); interleaf_.Clear(); model_.SetCore(&interleaf_); + + UpdateWindowTitle(tr("UNTITLED.SI")); } void MainWindow::OpenFile() @@ -316,9 +315,7 @@ void MainWindow::OpenFile() QString s = GetOpenFileName(); if (!s.isEmpty()) { OpenFilename(s); - TrimOffDirectory(s); - - setWindowTitle(QStringLiteral("%1 - %2").arg(QApplication::applicationName(), s)); + UpdateWindowTitle(s); } } @@ -336,7 +333,7 @@ bool MainWindow::SaveFile() ); if (r == Interleaf::ERROR_SUCCESS) { - UpdateWindowTitleFlag(false); + UpdateWindowTitle(current_filename_); return true; } else { QMessageBox::critical(this, QString(), tr("Failed to write SI file: %1").arg(r)); diff --git a/app/mainwindow.h b/app/mainwindow.h index 2ee9da5..08098ed 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -29,7 +29,6 @@ private: void InitializeMenuBar(); void SetPanel(Panel *panel, si::Object *chunk); - void UpdateWindowTitleFlag(bool isFileModified); void ExtractObject(si::Object *obj); void ReplaceObject(si::Object *obj); @@ -42,6 +41,9 @@ private: void TrimOffDirectory(QString &s); + void UpdateWindowTitle(QString filename); + void AppendModifiedTitleIndicator(); + static const QString kFileFilter; QStackedWidget *config_stack_; From 9c97f21e43a35d5c567e34c2b63d74ee2bfe6879 Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 14:20:39 -0500 Subject: [PATCH 5/6] app: properly clear screen on new file --- app/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index a71d263..352a1cb 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -303,6 +303,8 @@ void MainWindow::TrimOffDirectory(QString& s) void MainWindow::NewFile() { + tree_->clearSelection(); + SetPanel(panel_blank_, nullptr); model_.SetCore(nullptr); interleaf_.Clear(); model_.SetCore(&interleaf_); From 07cb8ad89b72104f99e98602dd406335d30b8461 Mon Sep 17 00:00:00 2001 From: Ramen2X <rmn@legoisland.org> Date: Fri, 13 Dec 2024 15:09:45 -0500 Subject: [PATCH 6/6] app: address review comments --- app/main.cpp | 2 +- app/mainwindow.cpp | 13 +++---------- app/mainwindow.h | 1 - 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/app/main.cpp b/app/main.cpp index 2a311dc..61bd8be 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -40,7 +40,7 @@ int main(int argc, char *argv[]) qInstallMessageHandler(DebugHandler); QApplication a(argc, argv); - a.setApplicationName(QObject::tr("SI Editor")); + a.setApplicationName(QCoreApplication::translate("main", "SI Editor")); MainWindow w; diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 352a1cb..d783532 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -180,15 +180,7 @@ void MainWindow::SetPanel(Panel *panel, si::Object *chunk) void MainWindow::UpdateWindowTitle(QString filename) { TrimOffDirectory(filename); - setWindowTitle(QStringLiteral("%1 - %2").arg(QApplication::applicationName(), filename)); -} - -void MainWindow::AppendModifiedTitleIndicator() -{ - QString title = windowTitle(); - title.append("*"); - - setWindowTitle(title); + setWindowTitle(QStringLiteral("%1 - %2[*]").arg(QApplication::applicationName(), filename)); } void MainWindow::ExtractObject(si::Object *obj) @@ -227,7 +219,8 @@ void MainWindow::ReplaceObject(si::Object *obj) #endif )) { static_cast<Panel*>(config_stack_->currentWidget())->ResetData(); - AppendModifiedTitleIndicator(); + setWindowModified(true); + } else { QMessageBox::critical(this, QString(), tr("Failed to open to file \"%1\".").arg(s)); } diff --git a/app/mainwindow.h b/app/mainwindow.h index 08098ed..ee99b52 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -42,7 +42,6 @@ private: void TrimOffDirectory(QString &s); void UpdateWindowTitle(QString filename); - void AppendModifiedTitleIndicator(); static const QString kFileFilter;