Restore the selected trace rows/lines when reloading a tab
This commit is contained in:
@@ -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--;)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user