##// END OF EJS Templates
Unplot menu (5): adds contains() method to an IVariableContainer...
Unplot menu (5): adds contains() method to an IVariableContainer The method will be used to generate an action in the 'unplot' menu, depending on whether or not the container contains the variable

File last commit:

r281:08349e12a7ef
r301:87af69bdce8a
Show More
VariableInspectorWidget.cpp
89 lines | 3.1 KiB | text/x-c | CppLexer
/ gui / src / Variable / VariableInspectorWidget.cpp
#include <Variable/VariableController.h>
#include <Variable/VariableInspectorWidget.h>
#include <Variable/VariableMenuHeaderWidget.h>
#include <Variable/VariableModel.h>
#include <ui_VariableInspectorWidget.h>
#include <QSortFilterProxyModel>
#include <QWidgetAction>
#include <SqpApplication.h>
Q_LOGGING_CATEGORY(LOG_VariableInspectorWidget, "VariableInspectorWidget")
VariableInspectorWidget::VariableInspectorWidget(QWidget *parent)
: QWidget{parent}, ui{new Ui::VariableInspectorWidget}
{
ui->setupUi(this);
// Sets model for table
// auto sortFilterModel = new QSortFilterProxyModel{this};
// sortFilterModel->setSourceModel(sqpApp->variableController().variableModel());
ui->tableView->setModel(sqpApp->variableController().variableModel());
ui->tableView->setSelectionModel(sqpApp->variableController().variableSelectionModel());
// Fixes column sizes
auto model = ui->tableView->model();
const auto count = model->columnCount();
for (auto i = 0; i < count; ++i) {
ui->tableView->setColumnWidth(
i, model->headerData(i, Qt::Horizontal, Qt::SizeHintRole).toSize().width());
}
// Sets selection options
ui->tableView->setSelectionBehavior(QTableView::SelectRows);
ui->tableView->setSelectionMode(QTableView::ExtendedSelection);
// Connection to show a menu when right clicking on the tree
ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableView, &QTableView::customContextMenuRequested, this,
&VariableInspectorWidget::onTableMenuRequested);
}
VariableInspectorWidget::~VariableInspectorWidget()
{
delete ui;
}
void VariableInspectorWidget::onTableMenuRequested(const QPoint &pos) noexcept
{
auto selectedRows = ui->tableView->selectionModel()->selectedRows();
// Gets the model to retrieve the underlying selected variables
auto model = sqpApp->variableController().variableModel();
auto selectedVariables = QVector<std::shared_ptr<Variable> >{};
for (const auto &selectedRow : qAsConst(selectedRows)) {
if (auto selectedVariable = model->variable(selectedRow.row())) {
selectedVariables.push_back(selectedVariable);
}
}
QMenu tableMenu{};
// Emits a signal so that potential receivers can populate the menu before displaying it
emit tableMenuAboutToBeDisplayed(&tableMenu, selectedVariables);
// Adds menu-specific actions
if (!selectedVariables.isEmpty()) {
// 'Delete' action
auto deleteFun = []() {
/// @todo ALX : call variable deletion
};
tableMenu.addSeparator();
tableMenu.addAction(QIcon{":/icones/delete.png"}, tr("Delete"), deleteFun);
}
if (!tableMenu.isEmpty()) {
// Generates menu header (inserted before first action)
auto firstAction = tableMenu.actions().first();
auto headerAction = new QWidgetAction{&tableMenu};
headerAction->setDefaultWidget(new VariableMenuHeaderWidget{selectedVariables, &tableMenu});
tableMenu.insertAction(firstAction, headerAction);
// Displays menu
tableMenu.exec(mapToGlobal(pos));
}
}