From 5df2f19b645818623b0397201d2ba8e3510700f3 Mon Sep 17 00:00:00 2001 From: Andrei-Fabian-Pop Date: Mon, 12 Feb 2024 11:25:58 +0200 Subject: [PATCH] ScopyTitleManager: Add singleton for changing the title of Scopy Signed-off-by: Andrei-Fabian-Pop --- src/scopytitlemanager.cpp | 146 ++++++++++++++++++++++++++++++++++++++ src/scopytitlemanager.h | 50 +++++++++++++ src/tool_launcher.cpp | 8 ++- 3 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 src/scopytitlemanager.cpp create mode 100644 src/scopytitlemanager.h diff --git a/src/scopytitlemanager.cpp b/src/scopytitlemanager.cpp new file mode 100644 index 000000000..104f6755d --- /dev/null +++ b/src/scopytitlemanager.cpp @@ -0,0 +1,146 @@ +#include "scopytitlemanager.h" + +#include +#include + +#define TITLE_SEPARATOR " - " + +using namespace adiscope; + +ScopyTitleManager *ScopyTitleManager::pinstance_{nullptr}; + +ScopyTitleManager::ScopyTitleManager(QObject *parent) : QObject(parent) { + qDebug() << "ctor"; +} + +ScopyTitleManager::~ScopyTitleManager() { qDebug() << "dtor"; } + +void ScopyTitleManager::buildTitle() +{ + QString result; + bool addSeparator = false; + + if (!m_title.isEmpty()) { + result = m_title; + addSeparator = true; + } + + if (!m_version.isEmpty()) { + if (addSeparator) { + result += TITLE_SEPARATOR; + } + + result += m_version; + addSeparator = true; + } + + if (!m_hash.isEmpty()) { + if (addSeparator) { + result += TITLE_SEPARATOR; + } + + result += m_hash; + addSeparator = true; + } + + if (!m_filename.isEmpty()) { + if (addSeparator) { + result += TITLE_SEPARATOR; + } + + result += m_filename; + addSeparator = true; + } + + m_currentTitle = result; + auto instance = ScopyTitleManager::GetInstance(); + if (instance->m_mainWindow) { + instance->m_mainWindow->setWindowTitle(instance->m_currentTitle); + } else { + qWarning() << "Cannot set title, no mainWidget was specified"; + } +} + +ScopyTitleManager *ScopyTitleManager::GetInstance() { + if (pinstance_ == nullptr) { + pinstance_ = new ScopyTitleManager( + QApplication::instance()); // singleton has the app as parent + } else { + qDebug() << "Singleton instance already created."; + } + return pinstance_; +} + +void ScopyTitleManager::setApplicationName(QString title) { + auto instance = ScopyTitleManager::GetInstance(); + instance->m_title = title; + instance->buildTitle(); +} + +void ScopyTitleManager::clearApplicationName() +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_title.clear(); + instance->buildTitle(); +} + +void ScopyTitleManager::setScopyVersion(QString version) +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_version = version; + instance->buildTitle(); +} + +void ScopyTitleManager::clearScopyVersion() +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_version.clear(); + instance->buildTitle(); +} + +void ScopyTitleManager::setGitHash(QString hash) { + auto instance = ScopyTitleManager::GetInstance(); + instance->m_hash = hash; + instance->buildTitle(); +} + +void ScopyTitleManager::clearGitHash() +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_hash.clear(); + instance->buildTitle(); +} + +void ScopyTitleManager::setIniFileName(QString filename) +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_filename = filename; + instance->buildTitle(); +} + +void ScopyTitleManager::clearIniFileName() +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_filename.clear(); + instance->buildTitle(); +} + +void ScopyTitleManager::clearAll() +{ + auto instance = ScopyTitleManager::GetInstance(); + instance->m_title.clear(); + instance->m_version.clear(); + instance->m_hash.clear(); + instance->m_filename.clear(); +} + +QString ScopyTitleManager::getCurrentTitle() +{ + return ScopyTitleManager::GetInstance()->m_currentTitle; +} + +void ScopyTitleManager::setMainWindow(QWidget *window) +{ + ScopyTitleManager::GetInstance()->m_mainWindow = window; +} + diff --git a/src/scopytitlemanager.h b/src/scopytitlemanager.h new file mode 100644 index 000000000..862f85973 --- /dev/null +++ b/src/scopytitlemanager.h @@ -0,0 +1,50 @@ +#ifndef SCOPY_SCOPYTITLEMANAGER_H +#define SCOPY_SCOPYTITLEMANAGER_H + +#include +#include + +namespace adiscope { +class ScopyTitleManager : public QObject { + Q_OBJECT +protected: + ScopyTitleManager(QObject *parent = nullptr); + ~ScopyTitleManager(); + + void buildTitle(); + +public: + ScopyTitleManager(ScopyTitleManager &other) = delete; + void operator=(const ScopyTitleManager &other) = delete; + + static ScopyTitleManager *GetInstance(); + + static void setApplicationName(QString title); + static void clearApplicationName(); + + static void setScopyVersion(QString version); + static void clearScopyVersion(); + + static void setGitHash(QString hash); + static void clearGitHash(); + + static void setIniFileName(QString filename); + static void clearIniFileName(); + + static void clearAll(); + static QString getCurrentTitle(); + + static void setMainWindow(QWidget *window); + +private: + static ScopyTitleManager *pinstance_; + QString m_title; + QString m_version; + QString m_hash; + QString m_filename; + QString m_currentTitle; + QWidget *m_mainWindow; +}; +} // namespace scopy + +#endif // SCOPY_SCOPYTITLEMANAGER_H diff --git a/src/tool_launcher.cpp b/src/tool_launcher.cpp index 3b16bf425..e32d5ea9c 100644 --- a/src/tool_launcher.cpp +++ b/src/tool_launcher.cpp @@ -37,6 +37,7 @@ #include "gui/animationmanager.h" #include "singletone_wrapper.h" #include "phonehome.h" +#include "scopytitlemanager.h" #include "ui_device.h" #include "ui_tool_launcher.h" @@ -143,7 +144,10 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : #endif // TO DO: remove this when the About menu becomes available - setWindowTitle(QString("Scopy - ") + QString("v"+QString(PROJECT_VERSION)) + " - " + QString(SCOPY_VERSION_GIT)); + ScopyTitleManager::setMainWindow(this); + ScopyTitleManager::setApplicationName("Scopy"); + ScopyTitleManager::setScopyVersion("v" + QString(PROJECT_VERSION)); + ScopyTitleManager::setGitHash(QString(SCOPY_VERSION_GIT)); prefPanel = new Preferences(this); prefPanel->setVisible(false); @@ -549,6 +553,7 @@ void ToolLauncher::saveSession() qDebug()<tl_api->save(fileName); + ScopyTitleManager::setIniFileName(fileName); } } } @@ -595,6 +600,7 @@ void ToolLauncher::loadSession() this->tl_api->load(fileName); updateHomepage(); setupHomepage(); + ScopyTitleManager::setIniFileName(fileName); } }