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;