diff --git a/GUI/Model/Data/DataProperties.cpp b/GUI/Model/Data/DataProperties.cpp index 9c01da9a692c0025dae3e86abf0cf6de34999c49..593c3608fe921dadbf47e163945e0771e85d56ec 100644 --- a/GUI/Model/Data/DataProperties.cpp +++ b/GUI/Model/Data/DataProperties.cpp @@ -31,9 +31,9 @@ const std::vector<std::pair<QString, Qt::GlobalColor>> color_queue = { {"Red", Qt::GlobalColor::darkRed}, {"Cyan", Qt::GlobalColor::darkCyan}, {"Gray", Qt::GlobalColor::darkGray}, {"Magenta", Qt::GlobalColor::darkMagenta}}; -// some scatters for representation of 1D graphs +// scatters for representation of 1D graphs const QMap<QString, QCPScatterStyle::ScatterShape> scatter_map = { - {"None", QCPScatterStyle::ScatterShape::ssNone}, + {"None", QCPScatterStyle::ScatterShape::ssNone}, {"Disc", QCPScatterStyle::ScatterShape::ssDisc}, {"Circle", QCPScatterStyle::ScatterShape::ssCircle}, {"Cross", QCPScatterStyle::ScatterShape::ssCross}, @@ -41,6 +41,16 @@ const QMap<QString, QCPScatterStyle::ScatterShape> scatter_map = { {"Star", QCPScatterStyle::ScatterShape::ssStar} }; +// connection lines for representation of 1D graphs +const QMap<QString, QCPGraph::LineStyle> line_map = { + {"None", QCPGraph::LineStyle::lsNone}, + {"Line", QCPGraph::LineStyle::lsLine}, + {"StepLeft", QCPGraph::LineStyle::lsStepLeft}, + {"StepRight", QCPGraph::LineStyle::lsStepRight}, + {"StepCenter", QCPGraph::LineStyle::lsStepCenter}, + {"Impulse", QCPGraph::LineStyle::lsImpulse} +}; + struct ColorNameComparator { ColorNameComparator(QString value_to_comp) : m_value_to_comp(std::move(value_to_comp)) @@ -72,6 +82,15 @@ ComboProperty defaultScatterCombo() return result; } +ComboProperty defaultLineCombo() +{ + ComboProperty result; + for (const auto& line : line_map.keys()) + result << line; + result.setValue(line_map.keys().first()); + return result; +} + // TODO cover with unit tests and simplify QModelIndex getIndexFromPath(const SessionModel* model, const QString& path) @@ -122,6 +141,7 @@ Data1DProperties::Data1DProperties() { addProperty(P_COLOR, defaultColorCombo().variant()); addProperty(P_SCATTER, defaultScatterCombo().variant()); + addProperty(P_LINE, defaultLineCombo().variant()); } QColor Data1DProperties::color() @@ -165,9 +185,24 @@ QCPScatterStyle::ScatterShape Data1DProperties::scatter() return QCPScatterStyle::ScatterShape(scatter_map.value(scatter_name)); } +QCPGraph::LineStyle Data1DProperties::line() +{ + const QString& line_name = getItemValue(P_LINE).value<ComboProperty>().getValue(); + bool contains = line_map.contains(line_name); + ASSERT(contains); + return QCPGraph::LineStyle(line_map.value(line_name)); +} + void Data1DProperties::setScatterProperty(const QString& scatter_name) { auto scatter_combo = defaultScatterCombo(); scatter_combo.setValue(scatter_name); setItemValue(P_SCATTER, scatter_combo.variant()); } + +void Data1DProperties::setLineProperty(const QString& line_name) +{ + auto line_combo = defaultLineCombo(); + line_combo.setValue(line_name); + setItemValue(P_LINE, line_combo.variant()); +} diff --git a/GUI/Model/Data/DataProperties.h b/GUI/Model/Data/DataProperties.h index 20be42cbeea61058322288a60e4808f68ff8ebd5..9818b55d05c9db2efcffbde866a393b4063bf806 100644 --- a/GUI/Model/Data/DataProperties.h +++ b/GUI/Model/Data/DataProperties.h @@ -40,6 +40,7 @@ class Data1DProperties : public DataProperties { private: static constexpr auto P_COLOR{"Color"}; static constexpr auto P_SCATTER{"Scatter"}; + static constexpr auto P_LINE{"Line"}; public: static constexpr auto M_TYPE{"DataItem1DProperties"}; @@ -58,9 +59,15 @@ public: //! Returns a QCP scatter object from its name QCPScatterStyle::ScatterShape scatter(); - //! Returns set up scatter for qcustomplot. + //! Returns a QCP line object from its name + QCPGraph::LineStyle line(); + + //! Set up scatter for qcustomplot. void setScatterProperty(const QString& scatter_name); + //! Set up line for qcustomplot. + void setLineProperty(const QString& line_name); + //! Returns the name of the color, which follows the color of passes property //! container. If the container is nullptr or has the last-in-queue color, //! Returns default color. diff --git a/GUI/Model/Data/DataPropertyContainer.cpp b/GUI/Model/Data/DataPropertyContainer.cpp index 59d2868e2baaa1277e3ec0b939c5dcf7423630a4..ccf9b5784a82a91e8b0f6961187f1b0c3e0229f0 100644 --- a/GUI/Model/Data/DataPropertyContainer.cpp +++ b/GUI/Model/Data/DataPropertyContainer.cpp @@ -68,8 +68,10 @@ void DataPropertyContainer::addItem(DataItem* data_item) if(dynamic_cast<RealDataItem*>(data_item->parent())) { property_item->setScatterProperty("Disc"); + property_item->setLineProperty("None"); } else { property_item->setScatterProperty("None"); + property_item->setLineProperty("Line"); } } diff --git a/GUI/View/PlotComparison/Plot1D.cpp b/GUI/View/PlotComparison/Plot1D.cpp index b31bfe4dcb5a986d3372e597528e91123cca642b..bf8fe5f7855bd93c74436834ed8ccb9dc8d89678 100644 --- a/GUI/View/PlotComparison/Plot1D.cpp +++ b/GUI/View/PlotComparison/Plot1D.cpp @@ -151,7 +151,7 @@ void Plot1D::initPlots() std::for_each(property_items.begin(), property_items.end(), [this](Data1DProperties* item) { auto* graph = m_custom_plot->addGraph(); - graph->setLineStyle(QCPGraph::lsLine); + graph->setLineStyle(item->line()); graph->setPen(QPen(item->color())); graph->setScatterStyle(item->scatter()); m_graph_map[item] = graph;