32#include <QFontMetrics>
37#include <ArmarXGui/gui-plugins/ScenarioManager/gui/ui_scenariolistview.h>
49 startButtonDelegate(this),
50 stopButtonDelegate(this),
51 restartButtonDelegate(this),
52 removeAction(
"Remove", &contextMenu),
53 expandAction(
"Expand", &contextMenu),
54 collapseAction(
"Collapse", &contextMenu)
58 ui->treeView->setModel(model.get());
59 ui->treeView->setSortingEnabled(
true);
60 ui->treeView->setItemDelegateForColumn(1, &startButtonDelegate);
61 ui->treeView->setItemDelegateForColumn(2, &stopButtonDelegate);
62 ui->treeView->setItemDelegateForColumn(3, &restartButtonDelegate);
65 contextMenu.setParent(ui->treeView);
66 ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
67 QObject::connect(ui->treeView,
68 SIGNAL(customContextMenuRequested(
const QPoint&)),
70 SLOT(onCustomContextMenu(
const QPoint&)));
72 ui->treeView->addAction(&removeAction);
74 ui->treeView->setDragEnabled(
true);
75 ui->treeView->setDefaultDropAction(Qt::CopyAction);
76 ui->treeView->setAcceptDrops(
true);
77 ui->treeView->setDropIndicatorShown(
true);
79 QObject::connect(&removeAction, SIGNAL(triggered()),
this, SLOT(removeItemTriggered()));
80 QObject::connect(&expandAction, SIGNAL(triggered()),
this, SLOT(expandItemTriggered()));
81 QObject::connect(&collapseAction, SIGNAL(triggered()),
this, SLOT(collapseItemTriggered()));
83 QObject::connect(&startButtonDelegate,
86 SLOT(startButtonClicked(
int,
int, QModelIndex)));
89 QObject::connect(&stopButtonDelegate,
92 SLOT(stopButtonClicked(
int,
int, QModelIndex)));
94 QObject::connect(&restartButtonDelegate,
97 SLOT(restartButtonClicked(
int,
int, QModelIndex)));
108 this->model = treeModel;
109 ui->treeView->setModel(model.get());
111 QHeaderView* header = ui->treeView->header();
112 header->setStretchLastSection(
false);
113 header->setSectionResizeMode(0, QHeaderView::Stretch);
114 header->setSectionResizeMode(1, QHeaderView::Fixed);
115 header->setSectionResizeMode(2, QHeaderView::Fixed);
116 header->setSectionResizeMode(3, QHeaderView::Fixed);
117 header->setSectionResizeMode(4, QHeaderView::Fixed);
118 const int buttonWidth = 60;
119 header->resizeSection(1, buttonWidth);
120 header->resizeSection(2, buttonWidth);
121 header->resizeSection(3, buttonWidth);
122 header->resizeSection(4, statusColumnWidth());
126ScenarioListView::statusColumnWidth()
const
131 const QFontMetrics metrics(ui->treeView->font());
134 for (
const std::string&
status : {std::string(
"Status"),
143 width = std::max(width,
144 metrics.boundingRect(QString::fromStdString(
status)).width());
147 const int padding = 16;
148 return width + padding;
152ScenarioListView::on_searchBar_textEdited(
const QString& text)
154 model->setFilterRegExp(QRegExp(text, Qt::CaseInsensitive, QRegExp::FixedString));
155 ui->treeView->expandAll();
159ScenarioListView::startButtonClicked(
int row,
int column, QModelIndex parent)
165ScenarioListView::stopButtonClicked(
int row,
int column, QModelIndex parent)
171ScenarioListView::restartButtonClicked(
int row,
int column, QModelIndex parent)
177ScenarioListView::on_newButton_clicked()
183ScenarioListView::on_openButton_clicked()
189ScenarioListView::on_expandAllButton_clicked()
191 ui->treeView->expandAll();
195ScenarioListView::on_collapseAllButton_clicked()
197 ui->treeView->collapseAll();
201ScenarioListView::removeItemTriggered()
203 QModelIndex
index = ui->treeView->currentIndex();
208ScenarioListView::on_treeView_clicked(
const QModelIndex&
index)
214ScenarioListView::onCustomContextMenu(
const QPoint& point)
216 QModelIndex
index = ui->treeView->currentIndex();
218 QList<QAction*> actions;
219 actions.append(&expandAction);
220 actions.append(&collapseAction);
222 separator.setSeparator(
true);
223 actions.append(&separator);
224 actions.append(&removeAction);
226 QMenu::exec(actions, ui->treeView->mapToGlobal(point));
233 if (!
index.isValid())
240 const QAbstractItemModel* model =
index.model();
241 int rows = model->rowCount(
index);
242 int cols = model->columnCount(
index);
244 for (
int r = 0; r < rows; ++r)
246 for (
int c = 0;
c < cols; ++
c)
248 QModelIndex child = model->index(r,
c,
index);
258ScenarioListView::expandItemTriggered()
260 QModelIndex
index = ui->treeView->currentIndex();
263 #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
264 ui->treeView->expandRecursively(
index);
271ScenarioListView::collapseItemTriggered()
273 QModelIndex
index = ui->treeView->currentIndex();
274 ui->treeView->collapse(
index);
~ScenarioListView() override
Destructor.
void itemClicked(const QModelIndex &index)
ScenarioListView(QWidget *parent=0)
Constructor that sets up the ui and behaviour of this view.
void stopApplication(int row, int column, QModelIndex parent)
void setModel(FilterableTreeModelSortFilterProxyModelPtr model)
Sets the model of this view.
void restartApplication(int row, int column, QModelIndex parent)
void startApplication(int row, int column, QModelIndex parent)
void removeItem(QModelIndex index)
std::shared_ptr< FilterableTreeModelSortFilterProxyModel > FilterableTreeModelSortFilterProxyModelPtr
bool buttonClicked(RemoteGui::ValueMap const &newValues, RemoteGui::ValueMap const &oldValues, std::string const &name)
This file offers overloads of toIce() and fromIce() functions for STL container types.
void expandRecursively(QTreeView *view, const QModelIndex &index)
static const std::string Stopped
static const std::string Mixed
static const std::string Missing
static const std::string Unknown
static const std::string Inactive
static const std::string Waiting
static const std::string Running