##// END OF EJS Templates
Implements visit of tab and zone...
Implements visit of tab and zone When we visit a tab or a zone, we create (when entered) and close (when left) a menu (that has the name of the widget)

File last commit:

r194:7ef1d04a5917
r197:fae2d5d3e62c
Show More
VisualizationGraphWidget.cpp
105 lines | 3.3 KiB | text/x-c | CppLexer
/ gui / src / Visualization / VisualizationGraphWidget.cpp
mv visualization -> Visualization...
r93 #include "Visualization/VisualizationGraphWidget.h"
Alexandre Leroux
Uses factory in the VariableGraphWidget
r171 #include "Visualization/GraphPlottablesFactory.h"
Alexandre Leroux
Updates visitor interface...
r192 #include "Visualization/IVisualizationWidgetVisitor.h"
Creation of VisualizationWidget, VizualizationTabWidget, VisualizationZoneWidget, VisualizationGraphWidget
r58 #include "ui_VisualizationGraphWidget.h"
Add the visualization gui classes
r111 #include <Variable/Variable.h>
#include <unordered_map>
Alexandre Leroux
Handles key modifiers for zoom...
r166 namespace {
/// Key pressed to enable zoom on horizontal axis
const auto HORIZONTAL_ZOOM_MODIFIER = Qt::NoModifier;
/// Key pressed to enable zoom on vertical axis
const auto VERTICAL_ZOOM_MODIFIER = Qt::ControlModifier;
} // namespace
Add the visualization gui classes
r111 struct VisualizationGraphWidget::VisualizationGraphWidgetPrivate {
// 1 variable -> n qcpplot
Alexandre Leroux
Uses factory in the VariableGraphWidget
r171 std::unordered_map<std::shared_ptr<Variable>, QCPAbstractPlottable *> m_VariableToPlotMap;
Add the visualization gui classes
r111 };
Alexandre Leroux
Fixes reference
r191 VisualizationGraphWidget::VisualizationGraphWidget(const QString &name, QWidget *parent)
add {} missing
r113 : QWidget{parent},
ui{new Ui::VisualizationGraphWidget},
Add the visualization gui classes
r111 impl{spimpl::make_unique_impl<VisualizationGraphWidgetPrivate>()}
Creation of VisualizationWidget, VizualizationTabWidget, VisualizationZoneWidget, VisualizationGraphWidget
r58 {
ui->setupUi(this);
Alexandre Leroux
Sets plot properties in a graph
r165
Alexandre Leroux
Adds name to a graph...
r182 // qcpplot title
ui->widget->plotLayout()->insertRow(0);
ui->widget->plotLayout()->addElement(0, 0, new QCPTextElement{ui->widget, name});
Alexandre Leroux
Sets plot properties in a graph
r165 // Set qcpplot properties :
Alexandre Leroux
Enables drag only for x-axis
r167 // - Drag (on x-axis) and zoom are enabled
Alexandre Leroux
Handles key modifiers for zoom...
r166 // - Mouse wheel on qcpplot is intercepted to determine the zoom orientation
Alexandre Leroux
Sets plot properties in a graph
r165 ui->widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
Alexandre Leroux
Enables drag only for x-axis
r167 ui->widget->axisRect()->setRangeDrag(Qt::Horizontal);
Alexandre Leroux
Handles key modifiers for zoom...
r166 connect(ui->widget, &QCustomPlot::mouseWheel, this, &VisualizationGraphWidget::onMouseWheel);
Creation of VisualizationWidget, VizualizationTabWidget, VisualizationZoneWidget, VisualizationGraphWidget
r58 }
VisualizationGraphWidget::~VisualizationGraphWidget()
{
delete ui;
}
Add the visualization gui classes
r111
void VisualizationGraphWidget::addVariable(std::shared_ptr<Variable> variable)
{
Alexandre Leroux
Uses factory in the VariableGraphWidget
r171 // Uses delegate to create the qcpplot components according to the variable
Alexandre Leroux
Pass Variable as shared_ptr
r174 auto createdPlottables = GraphPlottablesFactory::create(variable, *ui->widget);
Alexandre Leroux
Uses factory in the VariableGraphWidget
r171
for (auto createdPlottable : qAsConst(createdPlottables)) {
impl->m_VariableToPlotMap.insert({variable, createdPlottable});
}
Add the visualization gui classes
r111 }
Alexandre Leroux
Updates visitor interface...
r192 void VisualizationGraphWidget::accept(IVisualizationWidgetVisitor *visitor)
Add the visualization gui classes
r111 {
Alexandre Leroux
Implements accept() method of visualization widgets
r193 if (visitor) {
visitor->visit(this);
}
Add the visualization gui classes
r111 }
Alexandre Leroux
Creates a interface that defines a variable container...
r194 bool VisualizationGraphWidget::canDrop(const Variable &variable) const
{
/// @todo : for the moment, a graph can always accomodate a variable
Q_UNUSED(variable);
return true;
}
Add the visualization gui classes
r111 void VisualizationGraphWidget::close()
{
// The main view cannot be directly closed.
return;
}
Add const and override
r112 QString VisualizationGraphWidget::name() const
Add the visualization gui classes
r111 {
Alexandre Leroux
Adds name to a graph...
r182 if (auto title = dynamic_cast<QCPTextElement *>(ui->widget->plotLayout()->elementAt(0))) {
return title->text();
}
else {
return QString{};
}
Add the visualization gui classes
r111 }
Alexandre Leroux
Handles key modifiers for zoom...
r166
void VisualizationGraphWidget::onMouseWheel(QWheelEvent *event) noexcept
{
auto zoomOrientations = QFlags<Qt::Orientation>{};
// Lambda that enables a zoom orientation if the key modifier related to this orientation has
// been pressed
auto enableOrientation
= [&zoomOrientations, event](const auto &orientation, const auto &modifier) {
auto orientationEnabled = event->modifiers().testFlag(modifier);
zoomOrientations.setFlag(orientation, orientationEnabled);
};
enableOrientation(Qt::Vertical, VERTICAL_ZOOM_MODIFIER);
enableOrientation(Qt::Horizontal, HORIZONTAL_ZOOM_MODIFIER);
ui->widget->axisRect()->setRangeZoom(zoomOrientations);
}