From 9f7f342856c1b3e3c4bb0b1feaa6ff85ab38fb43 Mon Sep 17 00:00:00 2001 From: Semyon Knyazev Date: Wed, 27 Nov 2024 15:35:33 +0400 Subject: [PATCH] Add "set/unset all" actions to links tab in the OU results widget These actions are available for "Enforced" and "Disable" columns and set/unset corresponding state for all policies. Actions are triggered via context menu. --- .../linked_policies_widget.cpp | 45 +++++++++++++++++++ .../linked_policies_widget.h | 5 +++ 2 files changed, 50 insertions(+) diff --git a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp index f08d1b2f..d2a5611c 100644 --- a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp +++ b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp @@ -36,11 +36,15 @@ LinkedPoliciesWidget::LinkedPoliciesWidget(ConsoleWidget *console_arg, QWidget * auto remove_link_action = new QAction(tr("Remove link"), this); auto move_up_action = new QAction(tr("Move up"), this); auto move_down_action = new QAction(tr("Move down"), this); + set_all_checked_action = new QAction(tr("Set all"), this); + set_all_unchecked_action = new QAction(tr("Unset all"), this); context_menu = new QMenu(this); context_menu->addAction(remove_link_action); context_menu->addAction(move_up_action); context_menu->addAction(move_down_action); + context_menu->addAction(set_all_checked_action); + context_menu->addAction(set_all_unchecked_action); model = new DragDropLinksModel(gplink, 0, LinkedPoliciesColumn_COUNT, this); set_horizontal_header_labels_from_map(model, @@ -90,6 +94,12 @@ LinkedPoliciesWidget::LinkedPoliciesWidget(ConsoleWidget *console_arg, QWidget * connect( move_down_action, &QAction::triggered, this, &LinkedPoliciesWidget::move_down); + connect( + set_all_checked_action, &QAction::triggered, + this, &LinkedPoliciesWidget::on_set_checked_all); + connect( + set_all_unchecked_action, &QAction::triggered, + this, &LinkedPoliciesWidget::on_set_unchecked_all); connect(model, &DragDropLinksModel::link_orders_changed, [this](const Gplink &gplink_arg) { AdInterface ad; @@ -194,6 +204,17 @@ void LinkedPoliciesWidget::open_context_menu(const QPoint &pos) { return; } + if (index.column() == LinkedPoliciesColumn_Disabled || index.column() == LinkedPoliciesColumn_Enforced) { + set_all_checked_action->setVisible(true); + set_all_unchecked_action->setVisible(true); + set_all_checked_action->setData(index.column()); + set_all_unchecked_action->setData(index.column()); + } + else { + set_all_checked_action->setVisible(false); + set_all_unchecked_action->setVisible(false); + } + const QPoint global_pos = ui->view->current_view()->mapToGlobal(pos); context_menu->popup(global_pos); } @@ -394,3 +415,27 @@ void LinkedPoliciesWidget::load_item_row(const AdObject &gpo_object, QListrowCount(); ++row) { + QStandardItem *item = model->itemFromIndex(model->index(row, column)); + item->setCheckState(check_state); + } +} + +void LinkedPoliciesWidget::on_set_checked_all() { + QVariant column_data = set_all_checked_action->data(); + if (column_data.isNull()) { + return; + } + set_all_column_check_state(column_data.toInt(), true); +} + +void LinkedPoliciesWidget::on_set_unchecked_all() { + QVariant column_data = set_all_unchecked_action->data(); + if (column_data.isNull()) { + return; + } + set_all_column_check_state(column_data.toInt(), false); +} diff --git a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.h b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.h index ff4af72e..c33ef882 100644 --- a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.h +++ b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.h @@ -41,6 +41,8 @@ private: Gplink gplink; QString ou_dn; QMenu *context_menu; + QAction *set_all_checked_action; + QAction *set_all_unchecked_action; void on_item_changed(QStandardItem *item); void open_context_menu(const QPoint &pos); @@ -52,6 +54,9 @@ private: void update_policy_link_icons(const QModelIndex &changed_item_index, bool is_checked, GplinkOption option); QList gpo_object_list(AdInterface &ad); void load_item_row(const AdObject &gpo_object, QList row); + void set_all_column_check_state(int column, bool checked); + void on_set_checked_all(); + void on_set_unchecked_all(); }; #endif // LINKED_POLICIES_WIDGET_H