##// END OF EJS Templates
Many synchronization fixes, most operations works, only product drag from tree is broken...
Many synchronization fixes, most operations works, only product drag from tree is broken Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1351:d755f1f0a484
r1377:0f6ffbe66d5f
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;
}