Skip to content

Commit

Permalink
ScopyTitleManager: Add singleton for changing the title of Scopy
Browse files Browse the repository at this point in the history
Signed-off-by: Andrei-Fabian-Pop <[email protected]>
  • Loading branch information
Andrei-Fabian-Pop committed Feb 13, 2024
1 parent d23b5e2 commit 5df2f19
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 1 deletion.
146 changes: 146 additions & 0 deletions src/scopytitlemanager.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#include "scopytitlemanager.h"

#include <QApplication>
#include <QDebug>

#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;
}

50 changes: 50 additions & 0 deletions src/scopytitlemanager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#ifndef SCOPY_SCOPYTITLEMANAGER_H
#define SCOPY_SCOPYTITLEMANAGER_H

#include <QWidget>
#include <mutex>

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
8 changes: 7 additions & 1 deletion src/tool_launcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -549,6 +553,7 @@ void ToolLauncher::saveSession()
qDebug()<<fi.absoluteFilePath();
if (!fileName.isEmpty()) {
this->tl_api->save(fileName);
ScopyTitleManager::setIniFileName(fileName);
}
}
}
Expand Down Expand Up @@ -595,6 +600,7 @@ void ToolLauncher::loadSession()
this->tl_api->load(fileName);
updateHomepage();
setupHomepage();
ScopyTitleManager::setIniFileName(fileName);
}
}

Expand Down

0 comments on commit 5df2f19

Please sign in to comment.