diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp index 869b20b3..a785d319 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.cpp @@ -64,13 +64,11 @@ void Phase::draw(QPainter *painter, const QwtScaleMap &xMap, painter->setPen(pen); } - if (!isCollapsed(drawingProperties)) + for (auto line : getTracePlotLines(drawingProperties)) { - for (auto line : getTracePlotLines(drawingProperties)) - { + if (!line->isCollapsed()) drawPhaseSymbol(span.Begin(), span.End(), line->getYVal(), drawingProperties.drawText, getPhaseSymbol(), painter, xMap, yMap); - } } for (Timespan span : spansOnCommandBus) @@ -148,7 +146,7 @@ bool Phase::isSelected(traceTime time, double yVal, { for (auto line : getTracePlotLines(drawingProperties)) { - if (fabs(yVal - line->getYVal()) <= hexagonHeight) + if (!line->isCollapsed() && fabs(yVal - line->getYVal()) <= hexagonHeight) return true; } } @@ -201,12 +199,3 @@ std::vector> Phase::getTracePlotLines(const Trace % drawingProperties.banksPerGroup); } } - -bool Phase::isCollapsed(const TraceDrawingProperties &drawingProperties) const -{ - // Never discard REQ and RESP phases - if (dynamic_cast(this) != nullptr || dynamic_cast(this) != nullptr) - return false; - - return drawingProperties.getRankCollapsedState(transaction->rank); -} diff --git a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h index b5fb6815..b540ce98 100644 --- a/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h +++ b/DRAMSys/traceAnalyzer/businessObjects/phases/phase.h @@ -104,8 +104,6 @@ protected: { return Granularity::Bankwise; } - - bool isCollapsed(const TraceDrawingProperties &drawingProperties) const; }; class REQ : public Phase diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp index c57bbc6b..c6fd577f 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.cpp @@ -34,6 +34,8 @@ */ #include "tracedrawingproperties.h" +#include "util/customlabelscaledraw.h" +#include "traceplot.h" TraceDrawingProperties::TraceDrawingProperties(bool drawText, bool drawBorder, ColorGrouping colorGrouping) : @@ -43,45 +45,52 @@ TraceDrawingProperties::TraceDrawingProperties(bool drawText, bool drawBorder, { } -void TraceDrawingProperties::init(std::shared_ptr tracePlotLines, - std::shared_ptr> collapsedRanks) +void TraceDrawingProperties::init(std::shared_ptr tracePlotLines) { this->tracePlotLines = tracePlotLines; - this->collapsedRanks = collapsedRanks; +} + +void TraceDrawingProperties::init(std::shared_ptr tracePlotLines, + TracePlot *tracePlot) +{ + this->tracePlotLines = tracePlotLines; + this->tracePlot = tracePlot; } void TraceDrawingProperties::setUpTracePlotLines() { - tracePlotLines->push_back(std::make_shared("REQ", collapsedRanks)); - tracePlotLines->push_back(std::make_shared("RESP", collapsedRanks)); + tracePlotLines->push_back(std::make_shared("REQ")); + tracePlotLines->push_back(std::make_shared("RESP")); for (unsigned int rank = numberOfRanks; rank--;) { + std::shared_ptr firstRankLine; + for (unsigned int group = groupsPerRank; group--;) { for (unsigned int bank = banksPerGroup; bank--;) { - std::shared_ptr line; + std::shared_ptr line; if (bank == banksPerGroup - 1 && group == groupsPerRank - 1) - line = std::make_shared(rank, group, bank, collapsedRanks); + { + firstRankLine = createFirstRankLine(rank, group, bank); + line = firstRankLine; + } else - line = std::make_shared(rank, group, bank, collapsedRanks); + { + line = std::make_shared(rank, group, bank, firstRankLine); + } tracePlotLines->push_back(line); } } } - tracePlotLines->push_back(std::make_shared("Command Bus", collapsedRanks)); - tracePlotLines->push_back(std::make_shared("Data Bus", collapsedRanks)); + tracePlotLines->push_back(std::make_shared("Command Bus")); + tracePlotLines->push_back(std::make_shared("Data Bus")); - // Collapse all ranks except the first one by default. - for (int i = 0; i < numberOfRanks; i++) - if (i == 0) - setRankCollapsedState(i, false); - else - setRankCollapsedState(i, true); + updateLabels(); } void TraceDrawingProperties::updateLabels() @@ -97,20 +106,40 @@ void TraceDrawingProperties::updateLabels() // Don't add collapsed ranks, but always add the first rank line. auto bankLine = std::dynamic_pointer_cast(*it); auto firstRankLine = std::dynamic_pointer_cast(*it); - if (!firstRankLine && bankLine && (*collapsedRanks)[bankLine->rank]) + if (!firstRankLine && bankLine && bankLine->isCollapsed()) continue; (*labels)[i] = (*it)->getLabel(); (*it)->setYVal(i); - if (std::dynamic_pointer_cast(*it)) { - // Add two spaces. - i += 2; - } +// Another solution has to be found for this. +// if (std::dynamic_pointer_cast(*it)) { +// // Add two spaces. +// i += 2; +// } i++; } + + Q_EMIT tracePlot->tracePlotLinesChanged(); +} + +std::shared_ptr TraceDrawingProperties::createFirstRankLine(unsigned int rank, unsigned int group, + unsigned int bank) const +{ + auto firstRankLine = std::make_shared(rank, group, bank, tracePlot); + + QObject::connect(firstRankLine.get(), &TracePlotFirstRankLine::collapsedStateChanged, + this, &TraceDrawingProperties::updateLabels); + + QObject::connect(firstRankLine.get(), &TracePlotFirstRankLine::collapsedStateChanged, + tracePlot, &TracePlot::updateScrollbar); + + QObject::connect(tracePlot->getCustomLabelScaleDraw(), &CustomLabelScaleDraw::scaleRedraw, + firstRankLine.get(), &TracePlotFirstRankLine::updateButtonPosition); + + return firstRankLine; } const std::shared_ptr> TraceDrawingProperties::getLabels() const @@ -123,22 +152,11 @@ const TracePlotLineVector &TraceDrawingProperties::getTracePlotLines() const return *tracePlotLines; } -void TraceDrawingProperties::setRankCollapsedState(unsigned int rank, bool collapse) -{ - Q_ASSERT(rank <= numberOfRanks - 1); - - (*collapsedRanks)[rank] = collapse; - - updateLabels(); -} - -bool TraceDrawingProperties::getRankCollapsedState(unsigned int rank) const -{ - return (*collapsedRanks)[rank]; -} - unsigned int TraceDrawingProperties::getNumberOfDisplayedLines() const { + if (!tracePlotLines) + return 0; + unsigned int max = 0; for (auto line : *tracePlotLines) @@ -150,7 +168,7 @@ unsigned int TraceDrawingProperties::getNumberOfDisplayedLines() const return max; } -std::vector> TraceDrawingProperties::getCommandBusLines() const +TracePlotLineVector TraceDrawingProperties::getCommandBusLines() const { if (commandBusLinesCache.size() != 0) return commandBusLinesCache; @@ -168,7 +186,7 @@ std::vector> TraceDrawingProperties::getCommandBu return commandBusLines; } -std::vector> TraceDrawingProperties::getDataBusLines() const +TracePlotLineVector TraceDrawingProperties::getDataBusLines() const { if (dataBusLinesCache.size() != 0) return dataBusLinesCache; @@ -186,7 +204,7 @@ std::vector> TraceDrawingProperties::getDataBusLi return dataBusLines; } -std::vector> TraceDrawingProperties::getRequestLines() const +TracePlotLineVector TraceDrawingProperties::getRequestLines() const { if (requestLinesCache.size() != 0) return requestLinesCache; @@ -204,7 +222,7 @@ std::vector> TraceDrawingProperties::getRequestLi return requestLines; } -std::vector> TraceDrawingProperties::getResponseLines() const +TracePlotLineVector TraceDrawingProperties::getResponseLines() const { if (responseLinesCache.size() != 0) return responseLinesCache; @@ -222,7 +240,7 @@ std::vector> TraceDrawingProperties::getResponseL return responseLines; } -std::vector> TraceDrawingProperties::getFirstRankLines(unsigned int rank) const +TracePlotLineVector TraceDrawingProperties::getFirstRankLines(unsigned int rank) const { Q_ASSERT(rank <= numberOfRanks - 1); @@ -243,7 +261,7 @@ std::vector> TraceDrawingProperties::getFirstRank return firstRankLines; } -std::vector> TraceDrawingProperties::getBankLinesFromRank(unsigned int rank) const +TracePlotLineVector TraceDrawingProperties::getBankLinesFromRank(unsigned int rank) const { Q_ASSERT(rank <= numberOfRanks - 1); @@ -264,7 +282,7 @@ std::vector> TraceDrawingProperties::getBankLines return bankLines; } -std::vector> TraceDrawingProperties::getBankLinesFromGroup(unsigned int rank, unsigned int group) const +TracePlotLineVector TraceDrawingProperties::getBankLinesFromGroup(unsigned int rank, unsigned int group) const { Q_ASSERT(rank <= numberOfRanks - 1); Q_ASSERT(group <= groupsPerRank - 1); @@ -289,8 +307,8 @@ std::vector> TraceDrawingProperties::getBankLines return bankLines; } -std::vector> TraceDrawingProperties::getBankLines(unsigned int rank, unsigned int group, - unsigned int bank) const +TracePlotLineVector TraceDrawingProperties::getBankLines(unsigned int rank, unsigned int group, + unsigned int bank) const { Q_ASSERT(rank <= numberOfRanks - 1); Q_ASSERT(group <= groupsPerRank - 1); diff --git a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h index 5dc40a3f..63e8c585 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h +++ b/DRAMSys/traceAnalyzer/presentation/tracedrawingproperties.h @@ -39,6 +39,7 @@ #ifndef TRACECOLLECTIONDRAWINGPROPERTIES_H #define TRACECOLLECTIONDRAWINGPROPERTIES_H +#include #include #include #include @@ -51,7 +52,13 @@ enum class ColorGrouping {PhaseType, Transaction, Thread}; using TracePlotLineVector = std::vector>; -struct TraceDrawingProperties { +class TracePlot; + +class TraceDrawingProperties : public QObject +{ + Q_OBJECT + +public: bool drawText; bool drawBorder; ColorGrouping colorGrouping; @@ -67,34 +74,37 @@ struct TraceDrawingProperties { bool drawBorder = true, ColorGrouping colorGrouping = ColorGrouping::PhaseType); - void init(std::shared_ptr tracePlotLines, std::shared_ptr> collapsedRanks); + void init(std::shared_ptr tracePlotLines); + void init(std::shared_ptr tracePlotLines, TracePlot *tracePlot); void setUpTracePlotLines(); - void setRankCollapsedState(unsigned int rank, bool collapse); - bool getRankCollapsedState(unsigned int rank) const; - unsigned int getNumberOfDisplayedLines() const; - std::vector> getRequestLines() const; - std::vector> getResponseLines() const; - std::vector> getCommandBusLines() const; - std::vector> getDataBusLines() const; - std::vector> getFirstRankLines(unsigned int rank) const; - std::vector> getBankLines(unsigned int rank, unsigned int group, unsigned int bank) const; - std::vector> getBankLinesFromGroup(unsigned int rank, unsigned int group) const; - std::vector> getBankLinesFromRank(unsigned int rank) const; + TracePlotLineVector getRequestLines() const; + TracePlotLineVector getResponseLines() const; + TracePlotLineVector getCommandBusLines() const; + TracePlotLineVector getDataBusLines() const; + TracePlotLineVector getFirstRankLines(unsigned int rank) const; + TracePlotLineVector getBankLines(unsigned int rank, unsigned int group, unsigned int bank) const; + TracePlotLineVector getBankLinesFromGroup(unsigned int rank, unsigned int group) const; + TracePlotLineVector getBankLinesFromRank(unsigned int rank) const; const TracePlotLineVector &getTracePlotLines() const; - void updateLabels(); const std::shared_ptr> getLabels() const; +private Q_SLOTS: + void updateLabels(); + private: + std::shared_ptr createFirstRankLine(unsigned int rank, unsigned int group, + unsigned int bank) const; + std::shared_ptr> labels = std::make_shared>(); - std::shared_ptr> collapsedRanks; std::shared_ptr tracePlotLines; + TracePlot *tracePlot; // Caches mutable std::map, std::vector>> bankLinesCache; diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp index b7f44ded..0a85cda8 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracenavigator.cpp @@ -318,11 +318,6 @@ Timespan TraceNavigator::getSpanCoveredBySelectedTransaction() return Timespan(begin, end); } -std::shared_ptr> TraceNavigator::getCollapsedRanks() -{ - return collapsedRanks; -} - std::shared_ptr TraceNavigator::getTracePlotLines() { return tracePlotLines; diff --git a/DRAMSys/traceAnalyzer/presentation/tracenavigator.h b/DRAMSys/traceAnalyzer/presentation/tracenavigator.h index e390a8e1..56566625 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracenavigator.h +++ b/DRAMSys/traceAnalyzer/presentation/tracenavigator.h @@ -117,7 +117,6 @@ public: void commitChangesToDB(); void refreshData(); - std::shared_ptr> getCollapsedRanks(); std::shared_ptr getTracePlotLines(); Q_SIGNALS: @@ -136,7 +135,6 @@ private: void getCommentsFromDB(); bool changesToCommitExist; - std::shared_ptr> collapsedRanks = std::make_shared>(); std::shared_ptr tracePlotLines = std::make_shared(); }; diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp index c1781592..1e8fe77f 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.cpp @@ -63,7 +63,8 @@ using namespace std; TracePlot::TracePlot(QWidget *parent): - QwtPlot(parent), isInitialized(false) + QwtPlot(parent), isInitialized(false), + customLabelScaleDraw(new CustomLabelScaleDraw(drawingProperties.getLabels())) { canvas()->setCursor(Qt::ArrowCursor); setUpActions(); @@ -193,6 +194,9 @@ void TracePlot::init(TraceNavigator *navigator, QScrollBar *scrollBar) navigator->GeneralTraceInfo().clkPeriod, this->mouseDownData.zoomSpan); getAndDrawComments(); setZoomLevel(1000); + + updateScrollbar(); + replot(); } @@ -209,7 +213,7 @@ void TracePlot::connectNavigatorQ_SIGNALS() void TracePlot::setUpDrawingProperties() { - drawingProperties.init(navigator->getTracePlotLines(), navigator->getCollapsedRanks()); + drawingProperties.init(navigator->getTracePlotLines(), this); drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks; drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups; @@ -271,6 +275,8 @@ void TracePlot::updateScrollbar() } else scrollBar->hide(); + + verticalScrollbarChanged(scrollBar->value()); } void TracePlot::verticalScrollbarChanged(int value) @@ -291,63 +297,9 @@ void TracePlot::verticalScrollbarChanged(int value) void TracePlot::setUpAxis() { - CustomLabelScaleDraw *customLabelScaleDraw = new CustomLabelScaleDraw(drawingProperties.getLabels()); - customLabelScaleDraw->setMinimumExtent(135.0); - - auto positionButton = [&](const TracePlotFirstRankLine &firstRankLine, RankButton &rankButton) { - QPointF point = this->axisScaleDraw(yLeft)->labelPosition(firstRankLine.getYVal()); - rankButton.setGeometry(point.x(), point.y() - 4, 25, 25); - }; - - QObject::connect(customLabelScaleDraw, &CustomLabelScaleDraw::scaleRedraw, this, [=]() { - for (auto rankButton : rankCollapseButtons) - { - for (auto line : drawingProperties.getFirstRankLines(rankButton->rank)) - { - auto firstRankLine = static_pointer_cast(line); - positionButton(*firstRankLine, *rankButton); - } - } - }); - - updateScrollbar(); - // Set up y axis. - verticalScrollbarChanged(scrollBar->value()); setAxisScaleDraw(yLeft, customLabelScaleDraw); - - // Add push buttons - for (auto line : drawingProperties.getTracePlotLines()) - { - auto firstRankLine = std::dynamic_pointer_cast(line); - if (firstRankLine) - { - auto button = new RankButton(firstRankLine->rank, this); - if (drawingProperties.getRankCollapsedState(firstRankLine->rank)) - button->setText("+"); - else - button->setText("-"); - - positionButton(*firstRankLine, *button); - - QObject::connect(button, &QPushButton::pressed, this, [=]() { - bool wasCollapsed = drawingProperties.getRankCollapsedState(button->rank); - drawingProperties.setRankCollapsedState(button->rank, !wasCollapsed); - - if (wasCollapsed) - button->setText("-"); - else - button->setText("+"); - - updateScrollbar(); - - Q_EMIT scrollBar->valueChanged(scrollBar->value()); - Q_EMIT tracePlotLinesChanged(); - }); - - rankCollapseButtons.push_back(button); - } - } + customLabelScaleDraw->setMinimumExtent(135.0); // Set up x axis. setAxisTitle(xBottom, "Time in ns"); @@ -380,6 +332,11 @@ void TracePlot::getAndDrawComments() } } +CustomLabelScaleDraw *TracePlot::getCustomLabelScaleDraw() const +{ + return customLabelScaleDraw; +} + void TracePlot::enterZoomMode() { mouseDownData.mouseIsDownForZooming = true; diff --git a/DRAMSys/traceAnalyzer/presentation/traceplot.h b/DRAMSys/traceAnalyzer/presentation/traceplot.h index e63d3557..de6a70a5 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplot.h +++ b/DRAMSys/traceAnalyzer/presentation/traceplot.h @@ -61,14 +61,7 @@ */ class TracePlotMouseLabel; - -class RankButton : public QPushButton -{ - Q_OBJECT -public: - explicit RankButton(unsigned int rank, QWidget *parent = nullptr) : QPushButton(parent), rank(rank) {} - const unsigned int rank; -}; +class CustomLabelScaleDraw; class TracePlot : public QwtPlot { @@ -87,12 +80,14 @@ public: void setUpActions(); void setUpContextMenu(); + + CustomLabelScaleDraw *getCustomLabelScaleDraw() const; public Q_SLOTS: void currentTraceTimeChanged(); void selectedTransactionsChanged(); void commentsChanged(); void verticalScrollbarChanged(int value); - + void updateScrollbar(); Q_SIGNALS: void tracePlotZoomChanged(); @@ -127,6 +122,7 @@ private: QueryEditor *queryEditor; QMenu *contextMenu; QScrollBar *scrollBar; + CustomLabelScaleDraw *customLabelScaleDraw; void setUpTracePlotItem(); void setUpDrawingProperties(); @@ -138,9 +134,6 @@ private: void getAndDrawComments(); - void updateScrollbar(); - - /* zooming * */ @@ -206,8 +199,6 @@ private: MouseDownData mouseDownData; KeyPressData keyPressData; - - std::vector rankCollapseButtons; }; diff --git a/DRAMSys/traceAnalyzer/presentation/traceplotline.cpp b/DRAMSys/traceAnalyzer/presentation/traceplotline.cpp index 57d7e693..2e561361 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplotline.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceplotline.cpp @@ -34,16 +34,17 @@ */ #include "traceplotline.h" +#include "traceplot.h" +#include +#include -TracePlotLine::TracePlotLine(const QString &label, const std::shared_ptr> collapsedRanks) : - label(label), - collapsedRanks(collapsedRanks) +TracePlotLine::TracePlotLine(const QString &label) : + label(label) { } -TracePlotLine::TracePlotLine(const std::shared_ptr> collapsedRanks) : - collapsedRanks(collapsedRanks) +TracePlotLine::TracePlotLine() { } @@ -64,7 +65,6 @@ void TracePlotLine::setYVal (int yVal) this->yVal = yVal; } - int TracePlotLine::getYVal() const { return yVal; @@ -72,8 +72,13 @@ int TracePlotLine::getYVal() const TracePlotBankLine::TracePlotBankLine(unsigned int rank, unsigned int group, unsigned int bank, - const std::shared_ptr> collapsedRanks) : - TracePlotLine(collapsedRanks), + std::shared_ptr firstRankLine) : + TracePlotBankLine(rank, group, bank) +{ + this->firstRankLine = firstRankLine; +} + +TracePlotBankLine::TracePlotBankLine(unsigned int rank, unsigned int group, unsigned int bank) : rank(rank), group(group), bank(bank) { QString rankLabel = QString("RA") + QString::number(rank); @@ -85,25 +90,41 @@ TracePlotBankLine::TracePlotBankLine(unsigned int rank, unsigned int group, unsi bool TracePlotBankLine::isCollapsed() const { - return (*collapsedRanks)[rank]; + return firstRankLine.lock()->isCollapsed(); } TracePlotFirstRankLine::TracePlotFirstRankLine(unsigned int rank, unsigned int group, unsigned int bank, - const std::shared_ptr> collapsedRanks) : - TracePlotBankLine(rank, group, bank, collapsedRanks) + TracePlot *tracePlot) : + TracePlotBankLine(rank, group, bank), + collapseButton(new QPushButton(tracePlot)), tracePlot(tracePlot) { collapsedLabel = QString("RA") + QString::number(rank); + + collapseButton->setText(collapsed ? "+" : "-"); + + QObject::connect(collapseButton, &QPushButton::pressed, this, [=](){ + collapsed = !collapsed; + collapseButton->setText(collapsed ? "+" : "-"); + Q_EMIT collapsedStateChanged(); + }); + updateButtonPosition(); +} + +void TracePlotFirstRankLine::updateButtonPosition() +{ + QPointF point = tracePlot->axisScaleDraw(QwtPlot::yLeft)->labelPosition(getYVal()); + collapseButton->setGeometry(point.x(), point.y() - 4, 25, 25); } bool TracePlotFirstRankLine::isCollapsed() const { - return false; + return collapsed; } const QString & TracePlotFirstRankLine::getLabel() const { - if (TracePlotBankLine::isCollapsed()) + if (collapsed) return collapsedLabel; else return TracePlotLine::getLabel(); diff --git a/DRAMSys/traceAnalyzer/presentation/traceplotline.h b/DRAMSys/traceAnalyzer/presentation/traceplotline.h index 7493d7bc..0a3e9f36 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceplotline.h +++ b/DRAMSys/traceAnalyzer/presentation/traceplotline.h @@ -36,14 +36,22 @@ #ifndef TRACELOTLINE_H #define TRACELOTLINE_H +#include #include #include #include -class TracePlotLine +class QPushButton; +class TracePlot; + +class TracePlotFirstRankLine; + +class TracePlotLine : public QObject { + Q_OBJECT + public: - TracePlotLine(const QString &label, const std::shared_ptr> collapsedRanks); + TracePlotLine(const QString &label); virtual ~TracePlotLine() = 0; virtual const QString & getLabel() const; @@ -53,48 +61,65 @@ public: int getYVal() const; protected: - TracePlotLine(const std::shared_ptr> collapsedRanks); + TracePlotLine(); QString label; int yVal; - const std::shared_ptr> collapsedRanks; }; - class TracePlotBankLine : public TracePlotLine { + Q_OBJECT + public: TracePlotBankLine(unsigned int rank, unsigned int group, unsigned int bank, - const std::shared_ptr> collapsedRanks); + std::shared_ptr firstRankLine); ~TracePlotBankLine() = default; - void setCollapsed(bool value); virtual bool isCollapsed() const override; const unsigned int rank; const unsigned int group; const unsigned int bank; + +protected: + TracePlotBankLine(unsigned int rank, unsigned int group, unsigned int bank); + +private: + std::weak_ptr firstRankLine; }; class TracePlotFirstRankLine final : public TracePlotBankLine { + Q_OBJECT + public: TracePlotFirstRankLine(unsigned int rank, unsigned int group, unsigned int bank, - const std::shared_ptr> collapsedRanks); + TracePlot *tracePlot); ~TracePlotFirstRankLine() = default; bool isCollapsed() const override; - const QString & getLabel() const override; +public Q_SLOTS: + void updateButtonPosition(); + +Q_SIGNALS: + void collapsedStateChanged(); + private: QString collapsedLabel; + QPushButton *collapseButton; + bool collapsed = true; + TracePlot *tracePlot; }; class TracePlotRequestLine final : public TracePlotLine { + Q_OBJECT + public: using TracePlotLine::TracePlotLine; ~TracePlotRequestLine() = default; @@ -102,6 +127,8 @@ public: class TracePlotResponseLine final : public TracePlotLine { + Q_OBJECT + public: using TracePlotLine::TracePlotLine; ~TracePlotResponseLine() = default; @@ -109,6 +136,8 @@ public: class TracePlotDataBusLine final : public TracePlotLine { + Q_OBJECT + public: using TracePlotLine::TracePlotLine; ~TracePlotDataBusLine() = default; @@ -116,6 +145,8 @@ public: class TracePlotCommandBusLine final : public TracePlotLine { + Q_OBJECT + public: using TracePlotLine::TracePlotLine; ~TracePlotCommandBusLine() = default; diff --git a/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp b/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp index 629f5c33..4faca38a 100644 --- a/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp +++ b/DRAMSys/traceAnalyzer/presentation/tracescroller.cpp @@ -62,9 +62,11 @@ void TraceScroller::init(TraceNavigator *navigator, TracePlot *tracePlot) connectNavigatorQ_SIGNALS(); setUpDrawingProperties(); - // setUpDrawingProperties() must be called before setUpAxis(). setUpAxis(); setUpTracePlotItem(); + + updateAxis(); + getAndDrawComments(); this->tracePlot = tracePlot; @@ -89,7 +91,7 @@ void TraceScroller::setUpTracePlotItem() void TraceScroller::setUpDrawingProperties() { - drawingProperties.init(navigator->getTracePlotLines(), navigator->getCollapsedRanks()); + drawingProperties.init(navigator->getTracePlotLines()); drawingProperties.numberOfRanks = navigator->GeneralTraceInfo().numberOfRanks; drawingProperties.numberOfBankgroups = navigator->GeneralTraceInfo().numberOfBankgroups; @@ -102,7 +104,6 @@ void TraceScroller::setUpDrawingProperties() void TraceScroller::setUpAxis() { - updateAxis(); axisScaleDraw(yLeft)->enableComponent(QwtAbstractScaleDraw::Labels, false ); axisScaleDraw(yLeft)->enableComponent(QwtAbstractScaleDraw::Ticks, false ); }