Created
April 14, 2020 22:58
-
-
Save slide/b31f5122855e1b4ba144ebd888d72b4c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "testgroupwidget.h" | |
#include "testgroup.h" | |
#include <QFileDialog> | |
#include <QInputDialog> | |
#include <QMessageBox> | |
#include <QMenu> | |
TestGroupWidget::TestGroupWidget(QWidget *parent) : QTreeWidget(parent) | |
{ | |
} | |
void TestGroupWidget::contextMenuEvent(QContextMenuEvent *event) | |
{ | |
QTreeWidgetItem *item = itemAt(event->pos()); | |
if(item != nullptr) | |
{ | |
QMenu contextMenu(this); | |
QAction* action = nullptr; | |
QTreeWidgetItem* parent = item->parent(); | |
if(item->type() == RootType) // "Test Groups" item | |
{ | |
contextMenu.setTitle("Test Groups"); | |
QAction newGroup("New Test Group...", &contextMenu); | |
connect(&newGroup, &QAction::triggered, [=]() { | |
bool ok; | |
QString text = QInputDialog::getText(this, tr("New Test Group"), tr("Enter the new group's name"), QLineEdit::Normal, QString(), &ok); | |
if(ok) | |
{ | |
QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList() << text); | |
newItem->setIcon(0, QIcon(":/resources/images/mainwindow/test-group.png")); | |
topLevelItem(0)->addChild(newItem); | |
TestGroup *group = new TestGroup(text); | |
QVariant v; | |
v.setValue(group); | |
newItem->setData(0, Qt::UserRole, v); | |
} | |
}); | |
contextMenu.addAction(&newGroup); | |
QAction loadGroup("Load Test Group...", &contextMenu); | |
connect(&loadGroup, &QAction::triggered, [=]() { | |
QString fileName = QFileDialog::getOpenFileName(this, tr("Load Test Group"), QString(), "Test Group Files (*.xml, *.json)"); | |
QFile file(fileName); | |
if(file.exists()) | |
{ | |
TestGroup *group = TestGroup::read("", fileName, QUuid::createUuid()); | |
if(group != nullptr) | |
{ | |
} | |
} | |
}); | |
contextMenu.addAction(&loadGroup); | |
action = &newGroup; | |
} | |
else if(item->type() == TestGroupType && item->text(0) != tr("Ungrouped")) // Ungrouped | |
{ | |
contextMenu.setTitle(item->text(0)); | |
QAction copyGroup("Copy Group...", &contextMenu); | |
connect(©Group, &QAction::triggered, [=]() { | |
bool ok; | |
QString text = QInputDialog::getText(this, tr("Copy Group"), tr("Enter the name for the new group"), QLineEdit::Normal, QString(), &ok); | |
if(ok) | |
{ | |
} | |
}); | |
// save group as... | |
// unload group | |
// reload group | |
// clear group | |
action = ©Group; | |
} | |
else if(item->type() == TestType) // a single test | |
{ | |
contextMenu.setTitle(item->text(0)); | |
QAction deleteAction("Delete...", &contextMenu); | |
connect(&deleteAction, &QAction::triggered, [=]() | |
{ | |
if(QMessageBox::question(this, tr("Are you sure?"), QString(tr("Are you sure you want to delete the test named `%1`")).arg(item->text(0))) == QMessageBox::Yes) | |
{ | |
parent->removeChild(item); | |
delete item; | |
} | |
}); | |
contextMenu.addAction(&deleteAction); | |
if(topLevelItem(0)->childCount() > 1) | |
{ | |
QMenu moveTo("Move To", &contextMenu); | |
for(int i = 0; i < topLevelItem(0)->childCount(); i++) | |
{ | |
QTreeWidgetItem* curr = topLevelItem(0)->child(i); | |
if(curr->text(0) != item->parent()->text(0)) | |
{ | |
QAction groupNameAction(curr->text(0), &moveTo); | |
connect(&groupNameAction, &QAction::triggered, [=]() { | |
parent->removeChild(item); | |
curr->addChild(item); | |
}); | |
contextMenu.addAction(&groupNameAction); | |
} | |
} | |
contextMenu.addMenu(&moveTo); | |
} | |
action = &deleteAction; | |
} | |
contextMenu.exec(mapToGlobal(event->pos()), action); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment