1
0
mirror of https://github.com/altlinux/admc.git synced 2025-02-03 21:47:10 +03:00

rework console filter dialog

This commit is contained in:
Dmitry Degtyarev 2021-11-08 13:06:42 +04:00
parent 2ebb2a710a
commit f4ce23f37c
6 changed files with 37 additions and 36 deletions

View File

@ -34,6 +34,8 @@ ConsoleFilterDialog::ConsoleFilterDialog(AdConfig *adconfig, QWidget *parent)
ui = new Ui::ConsoleFilterDialog();
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
// NOTE: Using only non-container classes for filtering
// because container classes need to always be visible
const QList<QString> noncontainer_classes = adconfig->get_noncontainer_classes();
@ -60,9 +62,6 @@ ConsoleFilterDialog::ConsoleFilterDialog(AdConfig *adconfig, QWidget *parent)
{"CUSTOM_BUTTON_STATE", ui->custom_button},
};
const QHash<QString, QVariant> settings_state = settings_get_variant(SETTING_console_filter_dialog_state).toHash();
restore_state(settings_state);
connect(
ui->custom_dialog_button, &QPushButton::clicked,
custom_dialog, &QDialog::open);
@ -78,30 +77,14 @@ ConsoleFilterDialog::ConsoleFilterDialog(AdConfig *adconfig, QWidget *parent)
on_classes_button();
}
bool ConsoleFilterDialog::filtering_ON() const {
bool ConsoleFilterDialog::get_filter_enabled() const {
return !ui->all_button->isChecked();
}
ConsoleFilterDialog::~ConsoleFilterDialog() {
const QVariant state = save_state();
settings_set_variant(SETTING_console_filter_dialog_state, state);
delete ui;
}
void ConsoleFilterDialog::open() {
original_state = save_state();
QDialog::open();
}
void ConsoleFilterDialog::reject() {
restore_state(original_state);
QDialog::reject();
}
QVariant ConsoleFilterDialog::save_state() const {
QHash<QString, QVariant> state;

View File

@ -47,14 +47,11 @@ public:
ConsoleFilterDialog(AdConfig *adconfig, QWidget *parent);
~ConsoleFilterDialog();
void open() override;
void reject() override;
QVariant save_state() const;
void restore_state(const QVariant &state);
QString get_filter() const;
bool filtering_ON() const;
bool get_filter_enabled() const;
private:
FilterDialog *custom_dialog;

View File

@ -70,13 +70,15 @@ ObjectImpl::ObjectImpl(AdConfig *adconfig_arg, ConsoleWidget *console_arg)
adconfig = adconfig_arg;
buddy_console = nullptr;
policy_impl = nullptr;
filter_dialog = new ConsoleFilterDialog(adconfig, console);
set_results_view(new ResultsView(console_arg));
find_action_enabled = true;
refresh_action_enabled = true;
object_filter = settings_get_variant(SETTING_object_filter, QString()).toString();
object_filter_enabled = settings_get_variant(SETTING_object_filter_enabled, false).toBool();
auto new_user_action = new QAction(tr("User"), this);
auto new_computer_action = new QAction(tr("Computer"), this);
auto new_ou_action = new QAction(tr("OU"), this);
@ -134,9 +136,6 @@ ObjectImpl::ObjectImpl(AdConfig *adconfig_arg, ConsoleWidget *console_arg)
connect(
edit_upn_suffixes_action, &QAction::triggered,
this, &ObjectImpl::on_edit_upn_suffixes);
connect(
filter_dialog, &QDialog::accepted,
this, &ObjectImpl::refresh_tree);
}
void ObjectImpl::set_policy_impl(PolicyImpl *policy_impl_arg) {
@ -163,9 +162,9 @@ void ObjectImpl::fetch(const QModelIndex &index) {
// NOTE: OR user filter with containers filter so
// that container objects are always shown, even if
// they are filtered out by user filter
if (filter_dialog->filtering_ON()) {
if (object_filter_enabled) {
out = filter_OR({is_container_filter(), out});
out = filter_OR({filter_dialog->get_filter(), out});
out = filter_OR({object_filter, out});
}
advanced_features_filter(out);
@ -242,7 +241,7 @@ QString ObjectImpl::get_description(const QModelIndex &index) const {
out += object_count_text;
if (filter_dialog->filtering_ON()) {
if (object_filter_enabled) {
out += tr(" [Filtering enabled]");
}
@ -589,8 +588,27 @@ void ObjectImpl::refresh_tree() {
hide_busy_indicator();
}
void ObjectImpl::open_filter_dialog() {
filter_dialog->open();
void ObjectImpl::open_console_filter_dialog() {
auto dialog = new ConsoleFilterDialog(adconfig, console);
const QVariant dialog_state = settings_get_variant(SETTING_console_filter_dialog_state);
dialog->restore_state(dialog_state);
dialog->open();
connect(
dialog, &QDialog::accepted,
[this, dialog]() {
object_filter = dialog->get_filter();
object_filter_enabled = dialog->get_filter_enabled();
settings_set_variant(SETTING_object_filter, object_filter);
settings_set_variant(SETTING_object_filter_enabled, object_filter_enabled);
settings_set_variant(SETTING_console_filter_dialog_state, dialog->save_state());
refresh_tree();
});
}
void ObjectImpl::on_new_user() {

View File

@ -97,7 +97,7 @@ public:
void refresh_tree();
void open_filter_dialog();
void open_console_filter_dialog();
private slots:
void on_new_user();
@ -117,7 +117,8 @@ private:
AdConfig *adconfig;
ConsoleWidget *buddy_console;
PolicyImpl *policy_impl;
ConsoleFilterDialog *filter_dialog;
QString object_filter;
bool object_filter_enabled;
QAction *find_action;
QAction *move_action;

View File

@ -230,7 +230,7 @@ MainWindow::MainWindow(AdInterface &ad, QWidget *parent)
this, &MainWindow::open_about);
connect(
ui->action_filter_objects, &QAction::triggered,
object_impl, &ObjectImpl::open_filter_dialog);
object_impl, &ObjectImpl::open_console_filter_dialog);
connect(
ui->menu_action, &QMenu::aboutToShow,
ui->console, &ConsoleWidget::update_actions);

View File

@ -123,6 +123,8 @@ DEFINE_SETTING(SETTING_query_items);
DEFINE_SETTING(SETTING_port);
DEFINE_SETTING(SETTING_cert_strategy);
DEFINE_SETTING(SETTING_last_opened_version);
DEFINE_SETTING(SETTING_object_filter);
DEFINE_SETTING(SETTING_object_filter_enabled);
QVariant settings_get_variant(const QString setting, const QVariant &default_value = QVariant());
void settings_set_variant(const QString setting, const QVariant &value);