##// END OF EJS Templates
Updates model after an event has been created through the colored zone
Updates model after an event has been created through the colored zone

File last commit:

r1169:6897882500e5
r1262:99c1ba5e139b
Show More
MainWindow.cpp
366 lines | 14.8 KiB | text/x-c | CppLexer
Initialisation de l'application multithread avec le spimpl....
r21 /*------------------------------------------------------------------------------
Refactoring of app module to avoir vera++ warning and to dispatch sources files in the corrects paths
r54 -- This file is a part of the SciQLop Software
-- Copyright (C) 2017, Plasma Physics Laboratory - CNRS
Initialisation de l'application multithread avec le spimpl....
r21 --
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-------------------------------------------------------------------------------*/
/*-- Author : Alexis Jeandet
-- Mail : alexis.jeandet@member.fsf.org
----------------------------------------------------------------------------*/
Refactoring of app module to avoir vera++ warning and to dispatch sources files in the corrects paths
r54 #include "MainWindow.h"
#include "ui_MainWindow.h"
Alexandre Leroux
Connects data source widget to data source controller
r84
Add a button in the application toolbar to open the catalogues
r1129 #include <Catalogue/CatalogueExplorer.h>
Alexandre Leroux
Connects data source widget to data source controller
r84 #include <DataSource/DataSourceController.h>
#include <DataSource/DataSourceWidget.h>
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 #include <Settings/SqpSettingsDialog.h>
Alexandre Leroux
Creates widget for "general settings" and registers it to the dialog
r465 #include <Settings/SqpSettingsGeneralWidget.h>
Add button on the SidePane widgets to open left or right inspectors
r101 #include <SidePane/SqpSidePane.h>
Alexandre Leroux
Connects data source widget to data source controller
r84 #include <SqpApplication.h>
add TimeWidget connection
r192 #include <Time/TimeController.h>
Modificaiton of the sidepane :...
r133 #include <TimeWidget/TimeWidget.h>
Alexandre Leroux
Creates the slot to display the created variable in the Visualization widget...
r175 #include <Variable/Variable.h>
Temporal parameters of the selected variables can be updated using the...
r304 #include <Variable/VariableController.h>
Alexandre Leroux
Creates the slot to display the created variable in the Visualization widget...
r175 #include <Visualization/VisualizationController.h>
Alexandre Leroux
Connects data source widget to data source controller
r84
Initialisation de l'application multithread avec le spimpl....
r21 #include <QAction>
#include <QDate>
#include <QDir>
#include <QFileDialog>
Add button on the SidePane widgets to open left or right inspectors
r101 #include <QToolBar>
Factorisation of the lambda connected to the side pane button
r138 #include <QToolButton>
Add button on the SidePane widgets to open left or right inspectors
r101 #include <memory.h>
#include "iostream"
Q_LOGGING_CATEGORY(LOG_MainWindow, "MainWindow")
PRC: add tr on text...
r102 namespace {
const auto LEFTMAININSPECTORWIDGETSPLITTERINDEX = 0;
const auto LEFTINSPECTORSIDEPANESPLITTERINDEX = 1;
const auto VIEWPLITTERINDEX = 2;
const auto RIGHTINSPECTORSIDEPANESPLITTERINDEX = 3;
const auto RIGHTMAININSPECTORWIDGETSPLITTERINDEX = 4;
}
Add button on the SidePane widgets to open left or right inspectors
r101 class MainWindow::MainWindowPrivate {
public:
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 explicit MainWindowPrivate(MainWindow *mainWindow)
: m_LastOpenLeftInspectorSize{},
m_LastOpenRightInspectorSize{},
Alexandre Leroux
Creates widget for "general settings" and registers it to the dialog
r465 m_GeneralSettingsWidget{new SqpSettingsGeneralWidget{mainWindow}},
Add a button in the application toolbar to open the catalogues
r1129 m_SettingsDialog{new SqpSettingsDialog{mainWindow}},
m_CatalogExplorer{new CatalogueExplorer{mainWindow}}
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 {
}
Add button on the SidePane widgets to open left or right inspectors
r101 QSize m_LastOpenLeftInspectorSize;
QSize m_LastOpenRightInspectorSize;
Alexandre Leroux
Creates widget for "general settings" and registers it to the dialog
r465 /// General settings widget. MainWindow has the ownership
SqpSettingsGeneralWidget *m_GeneralSettingsWidget;
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 /// Settings dialog. MainWindow has the ownership
SqpSettingsDialog *m_SettingsDialog;
Add a button in the application toolbar to open the catalogues
r1129 /// Catalogue dialog. MainWindow has the ownership
CatalogueExplorer *m_CatalogExplorer;
Add button on the SidePane widgets to open left or right inspectors
r101 };
MainWindow::MainWindow(QWidget *parent)
: QMainWindow{parent},
m_Ui{new Ui::MainWindow},
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 impl{spimpl::make_unique_impl<MainWindowPrivate>(this)}
Initialisation de l'application multithread avec le spimpl....
r21 {
Refactoring of app module to avoir vera++ warning and to dispatch sources files in the corrects paths
r54 m_Ui->setupUi(this);
Add skelleton of the gui
r56
PRC: add tr on text...
r102 m_Ui->splitter->setCollapsible(LEFTINSPECTORSIDEPANESPLITTERINDEX, false);
m_Ui->splitter->setCollapsible(RIGHTINSPECTORSIDEPANESPLITTERINDEX, false);
Add button on the SidePane widgets to open left or right inspectors
r101
Retrieves zone names from the visualization
r1169 impl->m_CatalogExplorer->setVisualizationWidget(m_Ui->view);
Modificaiton of the sidepane :...
r133
auto leftSidePane = m_Ui->leftInspectorSidePane->sidePane();
Correction MR
r139 auto openLeftInspectorAction = new QAction{QIcon{
":/icones/previous.png",
},
tr("Show/hide the left inspector"), this};
Modificaiton of the sidepane :...
r133
Correction MR
r139 auto spacerLeftTop = new QWidget{};
Modificaiton of the sidepane :...
r133 spacerLeftTop->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
Correction MR
r139 auto spacerLeftBottom = new QWidget{};
Modificaiton of the sidepane :...
r133 spacerLeftBottom->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
leftSidePane->addWidget(spacerLeftTop);
leftSidePane->addAction(openLeftInspectorAction);
leftSidePane->addWidget(spacerLeftBottom);
auto rightSidePane = m_Ui->rightInspectorSidePane->sidePane();
Correction MR
r139 auto openRightInspectorAction = new QAction{QIcon{
":/icones/next.png",
},
tr("Show/hide the right inspector"), this};
Modificaiton of the sidepane :...
r133
Correction MR
r139 auto spacerRightTop = new QWidget{};
Modificaiton of the sidepane :...
r133 spacerRightTop->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
Correction MR
r139 auto spacerRightBottom = new QWidget{};
Modificaiton of the sidepane :...
r133 spacerRightBottom->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
rightSidePane->addWidget(spacerRightTop);
rightSidePane->addAction(openRightInspectorAction);
rightSidePane->addWidget(spacerRightBottom);
openLeftInspectorAction->setCheckable(true);
openRightInspectorAction->setCheckable(true);
Factorisation of the lambda connected to the side pane button
r138 auto openInspector = [this](bool checked, bool right, auto action) {
Modificaiton of the sidepane :...
r133
Factorisation of the lambda connected to the side pane button
r138 action->setIcon(QIcon{(checked xor right) ? ":/icones/next.png" : ":/icones/previous.png"});
Modificaiton of the sidepane :...
r133
Factorisation of the lambda connected to the side pane button
r138 auto &lastInspectorSize
= right ? impl->m_LastOpenRightInspectorSize : impl->m_LastOpenLeftInspectorSize;
auto nextInspectorSize = right ? m_Ui->rightMainInspectorWidget->size()
: m_Ui->leftMainInspectorWidget->size();
Add button on the SidePane widgets to open left or right inspectors
r101
// Update of the last opened geometry
if (checked) {
Factorisation of the lambda connected to the side pane button
r138 lastInspectorSize = nextInspectorSize;
Add button on the SidePane widgets to open left or right inspectors
r101 }
Factorisation of the lambda connected to the side pane button
r138 auto startSize = lastInspectorSize;
Add button on the SidePane widgets to open left or right inspectors
r101 auto endSize = startSize;
endSize.setWidth(0);
Factorisation of the lambda connected to the side pane button
r138 auto splitterInspectorIndex
= right ? RIGHTMAININSPECTORWIDGETSPLITTERINDEX : LEFTMAININSPECTORWIDGETSPLITTERINDEX;
PRC: add tr on text...
r102 auto currentSizes = m_Ui->splitter->sizes();
Add button on the SidePane widgets to open left or right inspectors
r101 if (checked) {
// adjust sizes individually here, e.g.
Factorisation of the lambda connected to the side pane button
r138 currentSizes[splitterInspectorIndex] -= lastInspectorSize.width();
currentSizes[VIEWPLITTERINDEX] += lastInspectorSize.width();
Add button on the SidePane widgets to open left or right inspectors
r101 m_Ui->splitter->setSizes(currentSizes);
}
else {
// adjust sizes individually here, e.g.
Factorisation of the lambda connected to the side pane button
r138 currentSizes[splitterInspectorIndex] += lastInspectorSize.width();
currentSizes[VIEWPLITTERINDEX] -= lastInspectorSize.width();
Add button on the SidePane widgets to open left or right inspectors
r101 m_Ui->splitter->setSizes(currentSizes);
}
};
Modificaiton of the sidepane :...
r133
Factorisation of the lambda connected to the side pane button
r138 connect(openLeftInspectorAction, &QAction::triggered,
[openInspector, openLeftInspectorAction](bool checked) {
openInspector(checked, false, openLeftInspectorAction);
Modificaiton of the sidepane :...
r133 });
Factorisation of the lambda connected to the side pane button
r138 connect(openRightInspectorAction, &QAction::triggered,
[openInspector, openRightInspectorAction](bool checked) {
openInspector(checked, true, openRightInspectorAction);
Modificaiton of the sidepane :...
r133 });
Add button on the SidePane widgets to open left or right inspectors
r101
Toolbar for interactions modes
r1000 // //////////////// //
// Menu and Toolbar //
// //////////////// //
PRC: add tr on text...
r102 this->menuBar()->addAction(tr("File"));
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 auto toolsMenu = this->menuBar()->addMenu(tr("Tools"));
toolsMenu->addAction(tr("Settings..."), [this]() {
Alexandre Leroux
Settings binding (4)...
r469 // Loads settings
impl->m_SettingsDialog->loadSettings();
// Open settings dialog and save settings if the dialog is accepted
if (impl->m_SettingsDialog->exec() == QDialog::Accepted) {
impl->m_SettingsDialog->saveSettings();
}
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 });
PRC: add tr on text...
r102 auto mainToolBar = this->addToolBar(QStringLiteral("MainToolBar"));
Modificaiton of the sidepane :...
r133
add TimeWidget connection
r192 auto timeWidget = new TimeWidget{};
mainToolBar->addWidget(timeWidget);
Alexandre Leroux
Connects data source widget to data source controller
r84
Add a button in the application toolbar to open the catalogues
r1129 // Interaction modes
Fix the close button on the graphs
r1093 auto actionPointerMode = new QAction{QIcon(":/icones/pointer.png"), "Move", this};
Toolbar for interactions modes
r1000 actionPointerMode->setCheckable(true);
actionPointerMode->setChecked(sqpApp->plotsInteractionMode()
== SqpApplication::PlotsInteractionMode::None);
connect(actionPointerMode, &QAction::triggered,
[]() { sqpApp->setPlotsInteractionMode(SqpApplication::PlotsInteractionMode::None); });
auto actionZoomMode = new QAction{QIcon(":/icones/zoom.png"), "Zoom", this};
actionZoomMode->setCheckable(true);
actionZoomMode->setChecked(sqpApp->plotsInteractionMode()
== SqpApplication::PlotsInteractionMode::ZoomBox);
connect(actionZoomMode, &QAction::triggered, []() {
sqpApp->setPlotsInteractionMode(SqpApplication::PlotsInteractionMode::ZoomBox);
});
auto actionOrganisationMode = new QAction{QIcon(":/icones/drag.png"), "Organize", this};
actionOrganisationMode->setCheckable(true);
actionOrganisationMode->setChecked(sqpApp->plotsInteractionMode()
== SqpApplication::PlotsInteractionMode::DragAndDrop);
connect(actionOrganisationMode, &QAction::triggered, []() {
sqpApp->setPlotsInteractionMode(SqpApplication::PlotsInteractionMode::DragAndDrop);
});
auto actionZonesMode = new QAction{QIcon(":/icones/rectangle.png"), "Zones", this};
actionZonesMode->setCheckable(true);
actionZonesMode->setChecked(sqpApp->plotsInteractionMode()
== SqpApplication::PlotsInteractionMode::SelectionZones);
connect(actionZonesMode, &QAction::triggered, []() {
sqpApp->setPlotsInteractionMode(SqpApplication::PlotsInteractionMode::SelectionZones);
});
auto modeActionGroup = new QActionGroup{this};
modeActionGroup->addAction(actionZoomMode);
modeActionGroup->addAction(actionZonesMode);
modeActionGroup->addAction(actionOrganisationMode);
modeActionGroup->addAction(actionPointerMode);
modeActionGroup->setExclusive(true);
mainToolBar->addSeparator();
mainToolBar->addAction(actionPointerMode);
mainToolBar->addAction(actionZoomMode);
mainToolBar->addAction(actionOrganisationMode);
mainToolBar->addAction(actionZonesMode);
mainToolBar->addSeparator();
Add a button in the application toolbar to open the catalogues
r1129 // Cursors
Toolbar for interactions modes
r1000 auto btnCursor = new QToolButton{this};
btnCursor->setIcon(QIcon(":/icones/cursor.png"));
btnCursor->setText("Cursor");
btnCursor->setToolTip("Cursor");
btnCursor->setPopupMode(QToolButton::InstantPopup);
auto cursorMenu = new QMenu("CursorMenu", this);
btnCursor->setMenu(cursorMenu);
auto noCursorAction = cursorMenu->addAction("No Cursor");
noCursorAction->setCheckable(true);
noCursorAction->setChecked(sqpApp->plotsCursorMode()
== SqpApplication::PlotsCursorMode::NoCursor);
connect(noCursorAction, &QAction::triggered,
[]() { sqpApp->setPlotsCursorMode(SqpApplication::PlotsCursorMode::NoCursor); });
cursorMenu->addSeparator();
auto verticalCursorAction = cursorMenu->addAction("Vertical Cursor");
verticalCursorAction->setCheckable(true);
verticalCursorAction->setChecked(sqpApp->plotsCursorMode()
== SqpApplication::PlotsCursorMode::Vertical);
connect(verticalCursorAction, &QAction::triggered,
[]() { sqpApp->setPlotsCursorMode(SqpApplication::PlotsCursorMode::Vertical); });
auto temporalCursorAction = cursorMenu->addAction("Temporal Cursor");
temporalCursorAction->setCheckable(true);
temporalCursorAction->setChecked(sqpApp->plotsCursorMode()
== SqpApplication::PlotsCursorMode::Temporal);
connect(temporalCursorAction, &QAction::triggered,
[]() { sqpApp->setPlotsCursorMode(SqpApplication::PlotsCursorMode::Temporal); });
auto horizontalCursorAction = cursorMenu->addAction("Horizontal Cursor");
horizontalCursorAction->setCheckable(true);
horizontalCursorAction->setChecked(sqpApp->plotsCursorMode()
== SqpApplication::PlotsCursorMode::Horizontal);
connect(horizontalCursorAction, &QAction::triggered,
[]() { sqpApp->setPlotsCursorMode(SqpApplication::PlotsCursorMode::Horizontal); });
auto crossCursorAction = cursorMenu->addAction("Cross Cursor");
crossCursorAction->setCheckable(true);
crossCursorAction->setChecked(sqpApp->plotsCursorMode()
== SqpApplication::PlotsCursorMode::Cross);
connect(crossCursorAction, &QAction::triggered,
[]() { sqpApp->setPlotsCursorMode(SqpApplication::PlotsCursorMode::Cross); });
mainToolBar->addWidget(btnCursor);
auto cursorModeActionGroup = new QActionGroup{this};
cursorModeActionGroup->setExclusive(true);
cursorModeActionGroup->addAction(noCursorAction);
cursorModeActionGroup->addAction(verticalCursorAction);
cursorModeActionGroup->addAction(temporalCursorAction);
cursorModeActionGroup->addAction(horizontalCursorAction);
cursorModeActionGroup->addAction(crossCursorAction);
Add a button in the application toolbar to open the catalogues
r1129 // Catalog
mainToolBar->addSeparator();
mainToolBar->addAction(QIcon(":/icones/catalogue.png"), "Catalogues",
[this]() { impl->m_CatalogExplorer->show(); });
Alexandre Leroux
Creates widget for "general settings" and registers it to the dialog
r465 // //////// //
// Settings //
// //////// //
// Registers "general settings" widget to the settings dialog
impl->m_SettingsDialog->registerWidget(QStringLiteral("General"),
impl->m_GeneralSettingsWidget);
Alexandre Leroux
Creates settings dialog and adds it to a new menu in MainWindow...
r463 // /////////// //
// Connections //
// /////////// //
Alexandre Leroux
Variable deletion (7)...
r336 // Controllers / controllers connections
Change SqpRange for SqpDateTime
r512 connect(&sqpApp->timeController(), SIGNAL(timeUpdated(SqpRange)), &sqpApp->variableController(),
SLOT(onDateTimeOnSelection(SqpRange)));
Alexandre Leroux
Variable deletion (7)...
r336
Alexandre Leroux
Connects data source widget to data source controller
r84 // Widgets / controllers connections
add TimeWidget connection
r192
// DataSource
Alexandre Leroux
Change signal/slot signature for data source
r92 connect(&sqpApp->dataSourceController(), SIGNAL(dataSourceItemSet(DataSourceItem *)),
m_Ui->dataSourceWidget, SLOT(addDataSource(DataSourceItem *)));
Alexandre Leroux
Connects data source widget to data source controller
r84
add TimeWidget connection
r192 // Time
Change SqpRange for SqpDateTime
r512 connect(timeWidget, SIGNAL(timeUpdated(SqpRange)), &sqpApp->timeController(),
SLOT(onTimeToUpdate(SqpRange)));
add TimeWidget connection
r192
Alexandre Leroux
Variable deletion (7)...
r336 // Visualization
connect(&sqpApp->visualizationController(),
SIGNAL(variableAboutToBeDeleted(std::shared_ptr<Variable>)), m_Ui->view,
SLOT(onVariableAboutToBeDeleted(std::shared_ptr<Variable>)));
Temporal parameters of the selected variables can be updated using the...
r304
Add connection logical for the rescale operation
r437 connect(&sqpApp->visualizationController(),
Change SqpRange for SqpDateTime
r512 SIGNAL(rangeChanged(std::shared_ptr<Variable>, const SqpRange &)), m_Ui->view,
SLOT(onRangeChanged(std::shared_ptr<Variable>, const SqpRange &)));
Add connection logical for the rescale operation
r437
Alexandre Leroux
Connects variable widget to visualization widget...
r249 // Widgets / widgets connections
// For the following connections, we use DirectConnection to allow each widget that can
// potentially attach a menu to the variable's menu to do so before this menu is displayed.
// The order of connections is also important, since it determines the order in which each
// widget will attach its menu
Alexandre Leroux
Changes signal to pass a list of variables...
r288 connect(
m_Ui->variableInspectorWidget,
SIGNAL(tableMenuAboutToBeDisplayed(QMenu *, const QVector<std::shared_ptr<Variable> > &)),
m_Ui->view, SLOT(attachVariableMenu(QMenu *, const QVector<std::shared_ptr<Variable> > &)),
Qt::DirectConnection);
Initialisation de l'application multithread avec le spimpl....
r21 }
MainWindow::~MainWindow()
{
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
Refactoring of app module to avoir vera++ warning and to dispatch sources files in the corrects paths
r54 m_Ui->retranslateUi(this);
Initialisation de l'application multithread avec le spimpl....
r21 break;
default:
break;
}
}