Restore the selected trace rows/lines when reloading a tab

This commit is contained in:
2021-09-28 12:10:50 +02:00
parent 4a7efa977a
commit 9e4b8a3fea
6 changed files with 79 additions and 1 deletions

View File

@@ -103,6 +103,9 @@ void TraceDrawingProperties::updateTracePlotLines(QTreeWidget *treeWidget)
void TraceDrawingProperties::addRankGroup(unsigned int rank)
{
if (rank >= numberOfRanks)
return;
std::shared_ptr<TracePlotFirstRankLine> firstRankLine;
for (unsigned int group = groupsPerRank; group--;)

View File

@@ -124,6 +124,29 @@ void TraceSelectedTree::init(unsigned int groupsPerRank, unsigned int banksPerGr
this->banksPerGroup = banksPerGroup;
}
std::vector<QTreeWidgetItem *> TraceSelectedTree::clonedItems() const
{
std::vector<QTreeWidgetItem *> clonedTopLevelItems;
for (unsigned int i = 0; i < topLevelItemCount(); i++)
{
clonedTopLevelItems.push_back(topLevelItem(i)->clone());
}
return clonedTopLevelItems;
}
void TraceSelectedTree::setItems(const std::vector<QTreeWidgetItem *> &items)
{
for (unsigned int i = topLevelItemCount(); i--;)
takeTopLevelItem(i);
for (auto item : items)
addTopLevelItem(item);
emit itemsChanged();
}
QMimeData *TraceSelectedTree::mimeData(const QList<QTreeWidgetItem *> items) const
{
QByteArray traceLineData;
@@ -346,6 +369,16 @@ void TraceSelector::setUpTreeWidget(QTreeWidget *treeWidget)
);
}
std::vector<QTreeWidgetItem *> TraceSelector::getTraceSelectorState() const
{
return selectedTree->clonedItems();
}
void TraceSelector::restoreTraceSelectorState(const std::vector<QTreeWidgetItem *> &items)
{
selectedTree->setItems(items);
}
TraceSelectorTreeItem *TraceSelectorTreeItem::createRankParentItem(unsigned int rank,unsigned int groupsPerRank,
unsigned int banksPerGroup)
{
@@ -409,3 +442,19 @@ QString TraceSelectorTreeItem::getLabel(unsigned int rank, unsigned int bankgrou
{
return "RA" + QString::number(rank) + " BG" + QString::number(bankgroup) + " BA" + QString::number(bank);
}
QTreeWidgetItem *TraceSelectorTreeItem::clone() const
{
TraceSelectorTreeItem *cloned = new TraceSelectorTreeItem(*this);
std::vector<TraceSelectorTreeItem *> clonedChildren;
for (unsigned int i = 0; i < childCount(); i++)
{
clonedChildren.push_back(static_cast<TraceSelectorTreeItem *>(child(i)->clone()));
}
for (auto child : clonedChildren)
cloned->addChild(child);
return cloned;
}

View File

@@ -70,6 +70,9 @@ public:
explicit TraceSelectedTree(QWidget *parent = nullptr);
void init(unsigned int groupsPerRank, unsigned int banksPerGroup);
std::vector<QTreeWidgetItem *> clonedItems() const;
void setItems(const std::vector<QTreeWidgetItem *> &items);
Q_SIGNALS:
void itemsChanged();
@@ -108,6 +111,9 @@ public:
static QString getLabel(unsigned int rank, unsigned int bankgroup, unsigned int bank);
const unsigned int rank = 0, bankgroup = 0, bank = 0;
protected:
QTreeWidgetItem *clone() const override;
};
class TraceSelector : public QWidget
@@ -118,6 +124,9 @@ public:
explicit TraceSelector(QWidget *parent = nullptr);
void init(TracePlot *traceplot);
std::vector<QTreeWidgetItem *> getTraceSelectorState() const;
void restoreTraceSelectorState(const std::vector<QTreeWidgetItem *> &items);
signals:
void selectedTreeChanged(QTreeWidget *treeWidget);

View File

@@ -178,6 +178,7 @@ void TraceAnalyzer::reloadTab(int index)
QString traceFile = traceFileTab->getPathToTraceFile();
traceTime time = traceFileTab->getCurrentTraceTime();
traceTime zoomLevel = traceFileTab->getZoomLevel();
auto treeItems = traceFileTab->saveTraceSelectorState();
if (!traceFileTab->close())
return;
@@ -188,6 +189,7 @@ void TraceAnalyzer::reloadTab(int index)
traceFileTab = createTraceFileTab(traceFile);
traceFileTab->setZoomLevel(zoomLevel);
traceFileTab->navigateToTime(time);
traceFileTab->restoreTraceSelectorState(treeItems);
ui->traceFileTabs->insertTab(index, traceFileTab, QFileInfo(traceFile).baseName());
ui->traceFileTabs->setCurrentIndex(index);

View File

@@ -152,7 +152,7 @@ void TraceFileTab::setUpFileWatcher(QString path)
void TraceFileTab::setUpTraceSelector()
{
TraceSelector *selector = ui->tabCustomizePlot;
TraceSelector *selector = static_cast<TraceSelector *>(ui->tabCustomizePlot);
connect(selector, &TraceSelector::selectedTreeChanged,
ui->traceplot, &TracePlot::updateTracePlotLines);
selector->init(ui->traceplot);
@@ -250,6 +250,18 @@ void TraceFileTab::setZoomLevel(traceTime zoomLevel)
tracescroller->tracePlotZoomChanged();
}
std::vector<QTreeWidgetItem *> TraceFileTab::saveTraceSelectorState() const
{
TraceSelector *selector = static_cast<TraceSelector *>(ui->tabCustomizePlot);
return selector->getTraceSelectorState();
}
void TraceFileTab::restoreTraceSelectorState(const std::vector<QTreeWidgetItem *> &items)
{
TraceSelector *selector = static_cast<TraceSelector *>(ui->tabCustomizePlot);
selector->restoreTraceSelectorState(items);
}
class ItemDelegate: public QItemDelegate
{
public:

View File

@@ -78,6 +78,9 @@ public:
traceTime getZoomLevel() const;
void setZoomLevel(traceTime zoomLevel);
std::vector<QTreeWidgetItem *> saveTraceSelectorState() const;
void restoreTraceSelectorState(const std::vector<QTreeWidgetItem *> &items);
protected:
void closeEvent(QCloseEvent *event) override;