1
0
Fork 0

sort by universe number

This commit is contained in:
Kevin Matz 2021-09-08 09:40:27 -04:00
parent 33479b37ee
commit 85e85edbbd
3 changed files with 50 additions and 49 deletions

View File

@ -4,8 +4,6 @@
#include "ui_multiverseview.h"
#include "universeview.h"
#include <QDebug>
/**
* @brief MultiverseView::MultiverseView
* @param parent
@ -14,20 +12,27 @@ MultiverseView::MultiverseView(QWidget *parent, QSacnNode *node)
: QMainWindow(parent)
, ui(new Ui::MultiverseView)
, node(node)
, model(new MultiverseModel(this, node))
, sortProxy(new QSortFilterProxyModel(this))
{
ui->setupUi(this);
ui->actionTerminate->setEnabled(false);
ui->actionUnsubscribe->setEnabled(false);
ui->actionInspect->setEnabled(false);
ui->multiverseView->setModel(new MultiverseModel(this, node));
sortProxy->setSourceModel(model);
ui->multiverseView->setModel(sortProxy);
ui->multiverseView->setSortingEnabled(true);
ui->multiverseView->sortByColumn(MultiverseModel::Column::Universe,
Qt::SortOrder::AscendingOrder);
ui->multiverseView->setContextMenuPolicy(Qt::CustomContextMenu);
ui->multiverseView->expandAll();
for (int i = 0; i < ui->multiverseView->model()->rowCount(); i++)
ui->multiverseView->setFirstColumnSpanned(i, QModelIndex(), true);
connect(ui->multiverseView, &QTreeView::customContextMenuRequested,
this, &MultiverseView::multiverseContextMenu);
this, &MultiverseView::createContextMenu);
connect(ui->multiverseView, &QTreeView::doubleClicked,
this, &MultiverseView::createEditor);
@ -48,8 +53,8 @@ MultiverseView::MultiverseView(QWidget *parent, QSacnNode *node)
connect(ui->actionTerminate, &QAction::triggered,
this, [&, node]() {
auto item = static_cast<MultiverseItem*>(ui->multiverseView->currentIndex().internalPointer());
auto data = item->data(0, Qt::EditRole);
auto index = ui->multiverseView->currentIndex();
auto data = index.data(Qt::EditRole);
if (data.metaType().id() == qMetaTypeId<QSacnUniverse*>())
{
auto univ = data.value<QSacnUniverse*>();
@ -60,7 +65,12 @@ MultiverseView::MultiverseView(QWidget *parent, QSacnNode *node)
connect(ui->actionSubscribe, &QAction::triggered,
this, [this, node]() {
auto dialog = new AddUniverseDialog(this, 1, tr("Subscribe to Universe"));
auto index = ui->multiverseView->currentIndex();
auto actual = sortProxy->mapToSource(index);
auto item = static_cast<MultiverseItem*>(actual.internalPointer());
auto val = item->data(MultiverseModel::Column::Universe, Qt::DisplayRole);
auto dialog = new AddUniverseDialog(this, val.toInt(),
tr("Subscribe to Universe"));
connect(dialog, &AddUniverseDialog::additionRequested,
node, &QSacnNode::subscribe);
dialog->exec();
@ -68,8 +78,8 @@ MultiverseView::MultiverseView(QWidget *parent, QSacnNode *node)
connect(ui->actionUnsubscribe, &QAction::triggered,
this, [&, node]() {
auto item = static_cast<MultiverseItem*>(ui->multiverseView->currentIndex().internalPointer());
auto data = item->data(0, Qt::EditRole);
auto index = ui->multiverseView->currentIndex();
auto data = index.data(Qt::EditRole);
if (data.metaType().id() == qMetaTypeId<QSacnUniverse*>())
{
auto univ = data.value<QSacnUniverse*>();
@ -89,7 +99,7 @@ MultiverseView::MultiverseView(QWidget *parent, QSacnNode *node)
*/
MultiverseView::~MultiverseView()
{
delete ui;
delete ui;
}
@ -107,10 +117,9 @@ void MultiverseView::selectionChanged(const QModelIndex &current,
ui->actionUnsubscribe->setEnabled(false);
ui->actionInspect->setEnabled(false);
auto item = static_cast<MultiverseItem*>(current.internalPointer());
auto data = item->data(0, Qt::EditRole);
if (!data.isValid())
return;
auto data = current.data(Qt::EditRole);
// Data universes:
if (data.metaType().id() == qMetaTypeId<QSacnUniverse*>())
{
ui->actionInspect->setEnabled(true);
@ -128,31 +137,19 @@ void MultiverseView::selectionChanged(const QModelIndex &current,
* @brief MultiverseView::multiverseContextMenu
* @param pos
*/
void MultiverseView::multiverseContextMenu(const QPoint &pos)
void MultiverseView::createContextMenu(const QPoint &pos)
{
QMenu menu(ui->multiverseView);
auto globalpos = ui->multiverseView->mapToGlobal(pos);
auto index = ui->multiverseView->indexAt(pos);
auto flags = ui->multiverseView->model()->flags(index);
if (!(flags & Qt::ItemIsSelectable))
{
// top level item
return;
}
auto data = index.data(Qt::EditRole);
auto item = static_cast<MultiverseItem*>(index.internalPointer());
auto data = item->data(0, Qt::EditRole);
if (!data.isValid())
return;
// Data universes:
if (data.metaType().id() == qMetaTypeId<QSacnUniverse*>())
{
if (flags & Qt::ItemIsEditable)
{
// all universes
menu.addAction(ui->actionInspect);
menu.addSeparator();
}
menu.addAction(ui->actionInspect);
menu.addSeparator();
auto univ = data.value<QSacnUniverse*>();
if (univ->isEditable())
menu.addAction(ui->actionTerminate);
@ -162,11 +159,12 @@ void MultiverseView::multiverseContextMenu(const QPoint &pos)
return;
}
if (data.metaType().id() == qMetaTypeId<sACN::EXTENDED::DISCOVERY::discoveredUniverse*>())
// Discovery universes:
if (data.metaType().id() ==
qMetaTypeId<sACN::EXTENDED::DISCOVERY::discoveredUniverse*>())
{
auto univ = data.value<sACN::EXTENDED::DISCOVERY::discoveredUniverse*>();
(void)univ;
// discovered
menu.addAction(ui->actionSubscribe);
menu.exec(globalpos);
return;
}
}
@ -178,8 +176,9 @@ void MultiverseView::multiverseContextMenu(const QPoint &pos)
*/
void MultiverseView::createEditor(const QModelIndex &index)
{
QVariant data = index.data(Qt::EditRole);
auto data = index.data(Qt::EditRole);
// Data universes:
if (data.metaType().id() == qMetaTypeId<QSacnUniverse*>())
{
auto univ = data.value<QSacnUniverse*>();
@ -187,6 +186,7 @@ void MultiverseView::createEditor(const QModelIndex &index)
universeView->show();
}
// Discovery universes:
if (data.metaType().id() ==
qMetaTypeId<sACN::EXTENDED::DISCOVERY::discoveredUniverse*>())
{

View File

@ -23,15 +23,23 @@
*/
#pragma once
#include <QMainWindow>
#include "multiversemodel.h"
#include "qsacnnode.h"
#include <QMainWindow>
#include <QSortFilterProxyModel>
QT_BEGIN_NAMESPACE
namespace Ui {
namespace Ui
{
class MultiverseView;
}
QT_END_NAMESPACE
/**
* @brief The MultiverseView class
*/
class MultiverseView
: public QMainWindow
{
@ -44,10 +52,12 @@ public:
public slots:
void selectionChanged(const QModelIndex &current, const QModelIndex &previous);
void multiverseContextMenu(const QPoint &pos);
void createContextMenu(const QPoint &pos);
void createEditor(const QModelIndex &index);
private:
Ui::MultiverseView *ui;
QSacnNode * node;
MultiverseModel * model;
QSortFilterProxyModel *sortProxy;
};

View File

@ -20,18 +20,9 @@
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="autoExpandDelay">
<number>0</number>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<property name="animated">
<bool>true</bool>
</property>
</widget>
</item>
</layout>