mirror of
https://github.com/altlinux/admc.git
synced 2025-02-03 05:47:02 +03:00
rework console filter dialog
This commit is contained in:
parent
2ebb2a710a
commit
f4ce23f37c
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user