swift
Loading...
Searching...
No Matches
swiftdata.cpp
1// SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3
4#include "swiftdata.h"
5
6#include <QAction>
7#include <QPointer>
8#include <QString>
9#include <QStyle>
10#include <QVersionNumber>
11#include <QtGlobal>
12
13#include "ui_swiftdata.h"
14
15#include "config/buildconfig.h"
22#include "gui/guiapplication.h"
24#include "misc/loghandler.h"
25#include "misc/logmessage.h"
26#include "misc/logpattern.h"
27#include "misc/network/url.h"
31#include "misc/statusmessage.h"
32
33using namespace swift::misc;
34using namespace swift::misc::network;
35using namespace swift::misc::simulation;
36using namespace swift::core;
37using namespace swift::core::data;
38using namespace swift::core::db;
39using namespace swift::gui;
40using namespace swift::gui::components;
41using namespace swift::config;
42
44{
45
46 Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui");
47 sGui->registerMainApplicationWidget(this);
48 ui->setupUi(this);
49 this->init();
50}
51
52void CSwiftData::initStyleSheet()
53{
54 const QString s = sGui->getStyleSheetUtility().styles({ CStyleSheetUtility::fileNameFonts(),
57
58 this->setStyleSheet("");
59 this->setStyleSheet(s);
60}
61
62CSwiftData::~CSwiftData() = default;
63
65{
66 if (sGui)
67 {
68 // save settings?
69 if (sGui->showCloseDialog(this, event) == QDialog::Rejected)
70 {
71 return;
72 }
73 }
74 this->performGracefulShutdown();
75}
76
77void CSwiftData::onStyleSheetsChanged() { this->initStyleSheet(); }
78
79void CSwiftData::init()
80{
81 Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui");
83 this->initLogDisplay();
84
85 m_mwaLogComponent = ui->comp_MainInfoArea->getLogComponent();
86 m_mwaStatusBar = &m_statusBar;
87 m_mwaOverlayFrame = ui->comp_MainInfoArea->getMappingComponent();
88
89 this->initStyleSheet();
90 connect(sGui, &CGuiApplication::styleSheetsChanged, this, &CSwiftData::onStyleSheetsChanged, Qt::QueuedConnection);
91 this->initMenu();
92
93 // update title
94 const CGlobalSetup s(sApp->getGlobalSetup());
95 if (!s.getDbHomePageUrl().isEmpty())
96 {
97 this->setWindowTitle(QStringLiteral("%1 %2").arg(this->windowTitle(), s.getDbHomePageUrl().toQString(true)));
98 }
99
100 sGui->triggerNewVersionCheck(20 * 1000);
101 QPointer<CSwiftData> myself(this);
102 QTimer::singleShot(15 * 1000, this, [=, this] {
103 if (!myself || !sGui || sGui->isShuttingDown())
104 {
105 return;
106 }
107 this->checkMinimumVersion();
108 this->checkAutoPublishing();
109 });
110}
111
112void CSwiftData::initLogDisplay()
113{
114 m_statusBar.initStatusBar(ui->sb_SwiftData);
115 // m_statusBar.setSizeGripEnabled(false);
116
117 connect(&m_logHistory, &CLogHistoryReplica::elementAdded, this,
118 [this](const CStatusMessage &message) { m_statusBar.displayStatusMessage(message); });
119 m_logHistory.setFilter(CLogPattern().withSeverityAtOrAbove(CStatusMessage::SeverityInfo));
120 m_logHistory.initialize(sApp->getDataLinkDBus());
121
123 CLogHandler::instance()->enableConsoleOutput(false); // default disable
124}
125
126void CSwiftData::initMenu()
127{
128 // menu
129
130 this->initDynamicMenus();
131 ui->menu_WindowMinimize->setIcon(this->style()->standardIcon(QStyle::SP_TitleBarMinButton));
132
133 connect(ui->menu_WindowFont, &QAction::triggered, this, &CSwiftData::onMenuClicked);
134 connect(ui->menu_MappingMaxData, &QAction::triggered, this, &CSwiftData::onMenuClicked);
135 connect(ui->menu_MappingMaxMapping, &QAction::triggered, this, &CSwiftData::onMenuClicked);
136
137 sGui->addMenuFile(*ui->menu_File);
138 sGui->addMenuInternals(*ui->menu_Internals);
139 sGui->addMenuWindow(*ui->menu_Window);
140 sGui->addMenuHelp(*ui->menu_Help);
141}
142
143void CSwiftData::performGracefulShutdown()
144{
145 if (m_updater)
146 {
147 m_updater->abandonAndWait();
148 }
149}
150
151void CSwiftData::consolidationSettingChanged()
152{
153 const int consolidationSecs = m_consolidationSettings.get();
154 if (consolidationSecs < 0)
155 {
156 if (m_updater)
157 {
158 ui->comp_MainInfoArea->getDataSettingsComponent()->setBackgroundUpdater(nullptr);
159 disconnect(m_updater);
160 m_updater->abandonAndWait();
161 m_updater = nullptr;
162 }
163 }
164 else
165 {
166 if (!m_updater)
167 {
168 m_updater = new CBackgroundDataUpdater(this);
169 connect(m_updater, &CBackgroundDataUpdater::consolidating, ui->comp_InfoBar,
170 &CInfoBarWebReadersStatusComponent::consolidationRunning, Qt::QueuedConnection);
171 m_updater->start(QThread::LowestPriority);
172 ui->comp_MainInfoArea->getDataSettingsComponent()->setBackgroundUpdater(m_updater);
173 }
174 m_updater->startUpdating(std::chrono::seconds(consolidationSecs));
175 }
176}
177
178void CSwiftData::displayLog() { ui->comp_MainInfoArea->displayLog(); }
179
180void CSwiftData::checkMinimumVersion()
181{
182 if (!sApp || sApp->isShuttingDown())
183 {
184 return;
185 }
187 {
188 CLogMessage(this).info(u"Checked mapping tool version, required '%1', this version '%2'")
190 }
191 else
192 {
193 const CStatusMessage sm =
194 CStatusMessage(this, CStatusMessage::SeverityWarning,
195 u"Your are using swift version: '%1'. Creating mappings requires at least '%2'.")
198 this->displayInOverlayWindow(sm);
199 }
200}
201
202void CSwiftData::checkAutoPublishing()
203{
205 {
206 return;
207 }
208 this->showAutoPublishing();
209}
210
211void CSwiftData::showAutoPublishing()
212{
213 if (!sApp || sApp->isShuttingDown())
214 {
215 return;
216 }
217 if (!m_autoPublishDialog)
218 {
219 m_autoPublishDialog = new CAutoPublishDialog(this);
220 }
221 m_autoPublishDialog->readAndShow();
222}
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
void closeEvent(QCloseEvent *event)
Definition swiftdata.cpp:64
~CSwiftData()
Destructor.
CSwiftData(QWidget *parent=nullptr)
Constructor.
Definition swiftdata.cpp:43
static const QString & getVersionString()
Version as QVersionNumber.
swift::misc::shared_state::CDataLinkDBus * getDataLinkDBus()
Transport mechanism for sharing state between applications.
data::CGlobalSetup getGlobalSetup() const
Global setup.
bool isShuttingDown() const
Is application shutting down?
const QString & getMappingMinimumVersionString() const
Creating mappings requires at least this version or higher.
bool isSwiftVersionMinimumMappingVersion() const
Meets the minimum mapping version.
void consolidating(bool running)
Consolidation.
void triggerNewVersionCheck(int delayedMs)
Trigger new version check.
void addMenuHelp(QMenu &menu)
Help operations.
void addMenuFile(QMenu &menu)
File menu.
void addMenuInternals(QMenu &menu)
Internals menu.
void addMenuWindow(QMenu &menu)
Window operations.
void initMainApplicationWidget(QWidget *mainWidget)
Init the main application window based on information in this application.
void styleSheetsChanged()
Style sheet changed.
static const QString & fileNameSwiftData()
File name swiftcore.qss.
static const QString & fileNameStandardWidget()
File name for standard widgets.
static const QString & fileNameFonts()
File name fonts.qss.
CIdentifiable(const QString &objectName)
Use literal based object name.
void enableConsoleOutput(bool enable)
Enable or disable the default Qt handler.
static CLogHandler * instance()
Return pointer to the CLogHandler singleton.
void install(bool skipIfAlreadyInstalled=false)
Tell the CLogHandler to install itself with qInstallMessageHandler.
void elementAdded(const swift::misc::CStatusMessage &msg)
Signal emitted for each new log message.
static void preformatted(const CStatusMessage &statusMessage)
Sends a verbatim, preformatted message to the log.
static constexpr auto SeverityInfo
Status severities.
static constexpr auto SeverityWarning
Status severities.
static bool existAutoPublishFiles(const QString &dirPath=CSwiftDirectories::logDirectory())
Do any auto pubish files exist?
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Core data traits (aka cached values) and classes.
Classes interacting with the swift database (aka "datastore").
Backend services of the swift project, like dealing with the network or the simulators.
Definition actionbind.cpp:7
High level reusable GUI components.
GUI related classes.
Free functions in swift::misc.
void triggered(bool checked)
QMainWindow(QWidget *parent, Qt::WindowFlags flags)
virtual bool event(QEvent *event) override
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
QObject * parent() const const
bool isEmpty() const const
SP_TitleBarMinButton
QueuedConnection
QWidget(QWidget *parent, Qt::WindowFlags f)
QStyle * style() const const
void setStyleSheet(const QString &styleSheet)
void setWindowTitle(const QString &)