##// END OF EJS Templates
Partly reimplemented Graph event handling + bugfix...
Partly reimplemented Graph event handling + bugfix - Now pure UX scroll doesn't affect variable delta T - Now all events are captured by VisualizationGraphWidget(VGW) this avoid that QCP intercept them then FW them to VGW which interact back with QCP - Non transformation events a broken for now - Added keyboard navigation Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1351:d755f1f0a484
r1362:0033c08c242f Pybind11
Show More
SqpApplication.cpp
196 lines | 6.8 KiB | text/x-c | CppLexer
/ gui / src / SqpApplication.cpp
#include "SqpApplication.h"
#include <Actions/ActionsGuiController.h>
#include <Catalogue/CatalogueController.h>
#include <Data/IDataProvider.h>
#include <DataSource/DataSourceController.h>
#include <DragAndDrop/DragDropGuiController.h>
#include <Network/NetworkController.h>
#include <QThread>
#include <Time/TimeController.h>
#include <Variable/Variable.h>
#include <Variable/VariableController2.h>
#include <Variable/VariableModel2.h>
#include <Visualization/VisualizationController.h>
Q_LOGGING_CATEGORY(LOG_SqpApplication, "SqpApplication")
class SqpApplication::SqpApplicationPrivate {
public:
SqpApplicationPrivate()
: m_VariableController{std::make_shared<VariableController2>()},
m_PlotInterractionMode(SqpApplication::PlotsInteractionMode::None),
m_PlotCursorMode(SqpApplication::PlotsCursorMode::NoCursor)
{
// /////////////////////////////// //
// Connections between controllers //
// /////////////////////////////// //
// VariableController <-> DataSourceController
connect(&m_DataSourceController,
&DataSourceController::createVariable,[](const QString &variableName,
const QVariantHash &variableMetadata,
std::shared_ptr<IDataProvider> variableProvider)
{
sqpApp->variableController().createVariable(variableName,variableMetadata,variableProvider,sqpApp->timeController().dateTime());
});
// VariableController <-> VisualizationController
// connect(m_VariableController.get(),
// SIGNAL(variableAboutToBeDeleted(std::shared_ptr<Variable>)),
// m_VisualizationController.get(),
// SIGNAL(variableAboutToBeDeleted(std::shared_ptr<Variable>)), Qt::DirectConnection);
// connect(m_VariableController.get(),
// SIGNAL(rangeChanged(std::shared_ptr<Variable>, const DateTimeRange &)),
// m_VisualizationController.get(),
// SIGNAL(rangeChanged(std::shared_ptr<Variable>, const DateTimeRange &)));
m_DataSourceController.moveToThread(&m_DataSourceControllerThread);
m_DataSourceControllerThread.setObjectName("DataSourceControllerThread");
m_NetworkController.moveToThread(&m_NetworkControllerThread);
m_NetworkControllerThread.setObjectName("NetworkControllerThread");
m_VisualizationController.moveToThread(&m_VisualizationControllerThread);
m_VisualizationControllerThread.setObjectName("VsualizationControllerThread");
// Additionnal init
//m_VariableController->setTimeController(m_TimeController.get());
}
virtual ~SqpApplicationPrivate()
{
m_DataSourceControllerThread.quit();
m_DataSourceControllerThread.wait();
m_NetworkControllerThread.quit();
m_NetworkControllerThread.wait();
m_VisualizationControllerThread.quit();
m_VisualizationControllerThread.wait();
}
DataSourceController m_DataSourceController;
std::shared_ptr<VariableController2> m_VariableController;
TimeController m_TimeController;
NetworkController m_NetworkController;
VisualizationController m_VisualizationController;
CatalogueController m_CatalogueController;
QThread m_DataSourceControllerThread;
QThread m_NetworkControllerThread;
QThread m_VisualizationControllerThread;
DragDropGuiController m_DragDropGuiController;
ActionsGuiController m_ActionsGuiController;
SqpApplication::PlotsInteractionMode m_PlotInterractionMode;
SqpApplication::PlotsCursorMode m_PlotCursorMode;
};
SqpApplication::SqpApplication(int &argc, char **argv)
: QApplication{argc, argv}, impl{spimpl::make_unique_impl<SqpApplicationPrivate>()}
{
qCDebug(LOG_SqpApplication()) << tr("SqpApplication construction") << QThread::currentThread();
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
connect(&impl->m_DataSourceControllerThread, &QThread::started,
&impl->m_DataSourceController, &DataSourceController::initialize);
connect(&impl->m_DataSourceControllerThread, &QThread::finished,
&impl->m_DataSourceController, &DataSourceController::finalize);
connect(&impl->m_NetworkControllerThread, &QThread::started, &impl->m_NetworkController,
&NetworkController::initialize);
connect(&impl->m_NetworkControllerThread, &QThread::finished, &impl->m_NetworkController,
&NetworkController::finalize);
connect(&impl->m_VisualizationControllerThread, &QThread::started,
&impl->m_VisualizationController, &VisualizationController::initialize);
connect(&impl->m_VisualizationControllerThread, &QThread::finished,
&impl->m_VisualizationController, &VisualizationController::finalize);
impl->m_DataSourceControllerThread.start();
impl->m_NetworkControllerThread.start();
impl->m_VisualizationControllerThread.start();
impl->m_CatalogueController.initialize();
}
SqpApplication::~SqpApplication()
{
}
void SqpApplication::initialize()
{
}
DataSourceController &SqpApplication::dataSourceController() noexcept
{
return impl->m_DataSourceController;
}
NetworkController &SqpApplication::networkController() noexcept
{
return impl->m_NetworkController;
}
TimeController &SqpApplication::timeController() noexcept
{
return impl->m_TimeController;
}
VariableController2 &SqpApplication::variableController() noexcept
{
return *impl->m_VariableController;
}
std::shared_ptr<VariableController2> SqpApplication::variableControllerOwner() noexcept
{
return impl->m_VariableController;
}
//VariableModel2 &SqpApplication::variableModel() noexcept
//{
// return impl->m_VariableModel;
//}
VisualizationController &SqpApplication::visualizationController() noexcept
{
return impl->m_VisualizationController;
}
CatalogueController &SqpApplication::catalogueController() noexcept
{
return impl->m_CatalogueController;
}
DragDropGuiController &SqpApplication::dragDropGuiController() noexcept
{
return impl->m_DragDropGuiController;
}
ActionsGuiController &SqpApplication::actionsGuiController() noexcept
{
return impl->m_ActionsGuiController;
}
SqpApplication::PlotsInteractionMode SqpApplication::plotsInteractionMode() const
{
return impl->m_PlotInterractionMode;
}
void SqpApplication::setPlotsInteractionMode(SqpApplication::PlotsInteractionMode mode)
{
impl->m_PlotInterractionMode = mode;
}
SqpApplication::PlotsCursorMode SqpApplication::plotsCursorMode() const
{
return impl->m_PlotCursorMode;
}
void SqpApplication::setPlotsCursorMode(SqpApplication::PlotsCursorMode mode)
{
impl->m_PlotCursorMode = mode;
}