diff --git a/DRAMSys/traceAnalyzer/presentation/traceselector.cpp b/DRAMSys/traceAnalyzer/presentation/traceselector.cpp index 0b596f2c..4ea627a8 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceselector.cpp +++ b/DRAMSys/traceAnalyzer/presentation/traceselector.cpp @@ -73,6 +73,34 @@ QStringList TraceAvailableTree::mimeTypes() const return types; } +void TraceAvailableTree::keyPressEvent(QKeyEvent *event) +{ + if(event->key() == Qt::Key_Return) + { + for (unsigned int i = 0; i < topLevelItemCount(); i++) + { + auto currentItem = static_cast(topLevelItem(i)); + + if (currentItem->isSelected()) + { + auto clonedItem = new TraceSelectorTreeItem(*currentItem); + + for (int i = 0; i < currentItem->childCount(); i++) + { + auto child = static_cast(currentItem->child(i)); + clonedItem->addChild(new TraceSelectorTreeItem(*child)); + } + + selectedTree->addTopLevelItem(clonedItem); + } + } + + Q_EMIT selectedTree->itemsChanged(); + } + + QTreeWidget::keyPressEvent(event); +} + TraceSelectedTree::TraceSelectedTree(QWidget *parent) : QTreeWidget(parent) { @@ -201,8 +229,8 @@ void TraceSelectedTree::keyPressEvent(QKeyEvent *event) TraceSelector::TraceSelector(QWidget *parent) : QWidget(parent), layout(new QVBoxLayout(this)), - availableTree(new TraceAvailableTree(this)), - selectedTree(new TraceSelectedTree(this)) + selectedTree(new TraceSelectedTree(this)), + availableTree(new TraceAvailableTree(selectedTree, this)) { QLabel *descriptionLabel = new QLabel(); descriptionLabel->setText( diff --git a/DRAMSys/traceAnalyzer/presentation/traceselector.h b/DRAMSys/traceAnalyzer/presentation/traceselector.h index dc0b728c..7d120da2 100644 --- a/DRAMSys/traceAnalyzer/presentation/traceselector.h +++ b/DRAMSys/traceAnalyzer/presentation/traceselector.h @@ -43,17 +43,24 @@ class TracePlot; class TracePlotLine; +class TraceSelectedTree; class QVBoxLayout; class TraceAvailableTree : public QTreeWidget { Q_OBJECT public: - explicit TraceAvailableTree(QWidget *parent = nullptr) : QTreeWidget(parent) {} + explicit TraceAvailableTree(TraceSelectedTree* selectedTree, QWidget *parent = nullptr) : + QTreeWidget(parent), selectedTree(selectedTree) {} protected: + void keyPressEvent(QKeyEvent *event) override; + QMimeData *mimeData(const QList items) const override; QStringList mimeTypes() const override; + +private: + TraceSelectedTree *selectedTree; }; class TraceSelectedTree : public QTreeWidget @@ -123,8 +130,8 @@ private: TracePlot *traceplot; QVBoxLayout *layout; - TraceAvailableTree *availableTree; TraceSelectedTree *selectedTree; + TraceAvailableTree *availableTree; }; #endif //TRACESELECTOR_H