##// END OF EJS Templates
Adds "number of operations" and "number of variables" properties for the tests
Adds "number of operations" and "number of variables" properties for the tests

File last commit:

r1075:029fbf916457
r1170:3da18e6983d5
Show More
VariableInspectorWidget.cpp
240 lines | 9.3 KiB | text/x-c | CppLexer
/ gui / src / Variable / VariableInspectorWidget.cpp
Alexandre Leroux
Calls rename dialog when clicking action in the menu
r685 #include <Variable/RenameVariableDialog.h>
#include <Variable/Variable.h>
Alexandre Leroux
Affects model to the Variable Widget
r152 #include <Variable/VariableController.h>
Alexandre Leroux
Initializes the variable inspector and adds it to the MainWindow
r110 #include <Variable/VariableInspectorWidget.h>
Alexandre Leroux
Adds header in the menu
r290 #include <Variable/VariableMenuHeaderWidget.h>
Alexandre Leroux
Affects model to the Variable Widget
r152 #include <Variable/VariableModel.h>
Alexandre Leroux
Initializes the variable inspector and adds it to the MainWindow
r110
#include <ui_VariableInspectorWidget.h>
Implement of the abort download process
r422 #include <QMouseEvent>
Alexandre Leroux
Affects model to the Variable Widget
r152 #include <QSortFilterProxyModel>
Add implementation of progress bar on variable inspector connected to...
r401 #include <QStyledItemDelegate>
Alexandre Leroux
Adds header in the menu
r290 #include <QWidgetAction>
Alexandre Leroux
Affects model to the Variable Widget
r152
Rename "DragDropHelper" in "DragDropGuiController"
r1075 #include <DragAndDrop/DragDropGuiController.h>
Alexandre Leroux
Affects model to the Variable Widget
r152 #include <SqpApplication.h>
Alexandre Leroux
Pull request fixes
r251 Q_LOGGING_CATEGORY(LOG_VariableInspectorWidget, "VariableInspectorWidget")
Add implementation of progress bar on variable inspector connected to...
r401
class QProgressBarItemDelegate : public QStyledItemDelegate {
public:
Correction MR
r402 QProgressBarItemDelegate(QObject *parent) : QStyledItemDelegate{parent} {}
Add implementation of progress bar on variable inspector connected to...
r401
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
auto data = index.data(Qt::DisplayRole);
Correction MR
r402 auto progressData = index.data(VariableRoles::ProgressRole);
Add implementation of progress bar on variable inspector connected to...
r401 if (data.isValid() && progressData.isValid()) {
auto name = data.value<QString>();
auto progress = progressData.value<double>();
Implement of the abort download process
r422 if (progress > 0) {
auto cancelButtonWidth = 20;
Add implementation of progress bar on variable inspector connected to...
r401 auto progressBarOption = QStyleOptionProgressBar{};
Implement of the abort download process
r422 auto progressRect = option.rect;
progressRect.setWidth(progressRect.width() - cancelButtonWidth);
progressBarOption.rect = progressRect;
Add implementation of progress bar on variable inspector connected to...
r401 progressBarOption.minimum = 0;
progressBarOption.maximum = 100;
progressBarOption.progress = progress;
progressBarOption.text
= QString("%1 %2").arg(name).arg(QString::number(progress, 'f', 2) + "%");
progressBarOption.textVisible = true;
progressBarOption.textAlignment = Qt::AlignCenter;
Implement of the abort download process
r422
Add implementation of progress bar on variable inspector connected to...
r401 QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption,
painter);
Implement of the abort download process
r422
// Cancel button
auto buttonRect = QRect(progressRect.right(), option.rect.top(), cancelButtonWidth,
option.rect.height());
auto buttonOption = QStyleOptionButton{};
buttonOption.rect = buttonRect;
buttonOption.text = "X";
QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter);
}
else {
QStyledItemDelegate::paint(painter, option, index);
Add implementation of progress bar on variable inspector connected to...
r401 }
}
else {
QStyledItemDelegate::paint(painter, option, index);
}
}
Implement of the abort download process
r422
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
const QModelIndex &index)
{
if (event->type() == QEvent::MouseButtonRelease) {
auto data = index.data(Qt::DisplayRole);
auto progressData = index.data(VariableRoles::ProgressRole);
if (data.isValid() && progressData.isValid()) {
auto cancelButtonWidth = 20;
auto progressRect = option.rect;
progressRect.setWidth(progressRect.width() - cancelButtonWidth);
// Cancel button
auto buttonRect = QRect(progressRect.right(), option.rect.top(), cancelButtonWidth,
option.rect.height());
Correction for MR
r447 auto e = (QMouseEvent *)event;
auto clickX = e->x();
auto clickY = e->y();
Implement of the abort download process
r422
auto x = buttonRect.left(); // the X coordinate
auto y = buttonRect.top(); // the Y coordinate
auto w = buttonRect.width(); // button width
auto h = buttonRect.height(); // button height
if (clickX > x && clickX < x + w) {
if (clickY > y && clickY < y + h) {
auto variableModel = sqpApp->variableController().variableModel();
variableModel->abortProgress(index);
}
Few corrections
r763 return true;
Implement of the abort download process
r422 }
else {
Few corrections
r763 return QStyledItemDelegate::editorEvent(event, model, option, index);
Implement of the abort download process
r422 }
}
else {
Few corrections
r763 return QStyledItemDelegate::editorEvent(event, model, option, index);
Implement of the abort download process
r422 }
}
else {
Few corrections
r763 return QStyledItemDelegate::editorEvent(event, model, option, index);
Implement of the abort download process
r422 }
Few corrections
r763
return QStyledItemDelegate::editorEvent(event, model, option, index);
Implement of the abort download process
r422 }
Add implementation of progress bar on variable inspector connected to...
r401 };
Alexandre Leroux
Initializes the variable inspector and adds it to the MainWindow
r110 VariableInspectorWidget::VariableInspectorWidget(QWidget *parent)
Add implementation of progress bar on variable inspector connected to...
r401 : QWidget{parent},
ui{new Ui::VariableInspectorWidget},
Correction MR
r402 m_ProgressBarItemDelegate{new QProgressBarItemDelegate{this}}
Alexandre Leroux
Initializes the variable inspector and adds it to the MainWindow
r110 {
ui->setupUi(this);
Alexandre Leroux
Affects model to the Variable Widget
r152
// Sets model for table
Temporal parameters of the selected variables can be updated using the...
r304 // auto sortFilterModel = new QSortFilterProxyModel{this};
// sortFilterModel->setSourceModel(sqpApp->variableController().variableModel());
Alexandre Leroux
Affects model to the Variable Widget
r152
Alexandre Leroux
Fixes refresh problem in Variable widget
r368 auto variableModel = sqpApp->variableController().variableModel();
ui->tableView->setModel(variableModel);
// Adds extra signal/slot between view and model, so the view can be updated instantly when
// there is a change of data in the model
connect(variableModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this,
SLOT(refresh()));
Temporal parameters of the selected variables can be updated using the...
r304 ui->tableView->setSelectionModel(sqpApp->variableController().variableSelectionModel());
Add implementation of progress bar on variable inspector connected to...
r401 ui->tableView->setItemDelegateForColumn(0, m_ProgressBarItemDelegate);
Alexandre Leroux
Activates menu on variable widget
r245
Alexandre Leroux
Uses Qt::SizeHintRole to set column width and height
r278 // 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());
}
Alexandre Leroux
Activates multi-selection on variable widget
r286 // Sets selection options
ui->tableView->setSelectionBehavior(QTableView::SelectRows);
ui->tableView->setSelectionMode(QTableView::ExtendedSelection);
Alexandre Leroux
Activates menu on variable widget
r245 // Connection to show a menu when right clicking on the tree
ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableView, &QTableView::customContextMenuRequested, this,
&VariableInspectorWidget::onTableMenuRequested);
Alexandre Leroux
Initializes the variable inspector and adds it to the MainWindow
r110 }
VariableInspectorWidget::~VariableInspectorWidget()
{
delete ui;
}
Alexandre Leroux
Activates menu on variable widget
r245
void VariableInspectorWidget::onTableMenuRequested(const QPoint &pos) noexcept
{
Alexandre Leroux
Handles multi-selection when displaying the menu of the variable widget...
r287 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);
Alexandre Leroux
Retrieves the current selected variable when clicking on the variable widget
r246 }
}
Alexandre Leroux
Handles multi-selection when displaying the menu of the variable widget...
r287
QMenu tableMenu{};
// Emits a signal so that potential receivers can populate the menu before displaying it
emit tableMenuAboutToBeDisplayed(&tableMenu, selectedVariables);
Alexandre Leroux
Adds an entry to the menu for deleting a variable...
r291 // Adds menu-specific actions
if (!selectedVariables.isEmpty()) {
Alexandre Leroux
Create 'Rename action' in variable menu
r683 tableMenu.addSeparator();
Alexandre Leroux
Adds 'Duplicate' action on variable menu
r706 // 'Rename' and 'Duplicate' actions (only if one variable selected)
Alexandre Leroux
Create 'Rename action' in variable menu
r683 if (selectedVariables.size() == 1) {
auto selectedVariable = selectedVariables.front();
Alexandre Leroux
Fixes crashes on release when duplicating/renaming a variable
r770 auto duplicateFun = [varW = std::weak_ptr<Variable>(selectedVariable)]()
{
if (auto var = varW.lock()) {
sqpApp->variableController().cloneVariable(var);
}
Alexandre Leroux
Adds 'Duplicate' action on variable menu
r706 };
tableMenu.addAction(tr("Duplicate"), duplicateFun);
Alexandre Leroux
Fixes crashes on release when duplicating/renaming a variable
r770 auto renameFun = [ varW = std::weak_ptr<Variable>(selectedVariable), &model, this ]()
{
if (auto var = varW.lock()) {
// Generates forbidden names (names associated to existing variables)
auto allVariables = model->variables();
auto forbiddenNames = QVector<QString>(allVariables.size());
std::transform(allVariables.cbegin(), allVariables.cend(),
forbiddenNames.begin(),
[](const auto &variable) { return variable->name(); });
RenameVariableDialog dialog{var->name(), forbiddenNames, this};
if (dialog.exec() == QDialog::Accepted) {
var->setName(dialog.name());
}
Alexandre Leroux
Calls rename dialog when clicking action in the menu
r685 }
Alexandre Leroux
Create 'Rename action' in variable menu
r683 };
tableMenu.addAction(tr("Rename..."), renameFun);
}
Alexandre Leroux
Adds an entry to the menu for deleting a variable...
r291 // 'Delete' action
Alexandre Leroux
Variable deletion (7)...
r336 auto deleteFun = [&selectedVariables]() {
sqpApp->variableController().deleteVariables(selectedVariables);
Alexandre Leroux
Adds an entry to the menu for deleting a variable...
r291 };
tableMenu.addAction(QIcon{":/icones/delete.png"}, tr("Delete"), deleteFun);
}
Alexandre Leroux
Handles multi-selection when displaying the menu of the variable widget...
r287 if (!tableMenu.isEmpty()) {
Alexandre Leroux
Adds header in the menu
r290 // 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);
Alexandre Leroux
Handles multi-selection when displaying the menu of the variable widget...
r287 // Displays menu
Alexandre Leroux
Fixed menus position
r655 tableMenu.exec(QCursor::pos());
Alexandre Leroux
Pull request fixes
r251 }
Alexandre Leroux
Activates menu on variable widget
r245 }
Alexandre Leroux
Fixes refresh problem in Variable widget
r368
void VariableInspectorWidget::refresh() noexcept
{
ui->tableView->viewport()->update();
}