1
0
mirror of https://github.com/altlinux/admc.git synced 2024-10-27 01:55:37 +03:00

redo some tab edits to enable their testing

pass individual widgets instead of passing the whole ui var
This commit is contained in:
Dmitry Degtyarev 2021-12-22 16:25:40 +04:00
parent d33f81ef7a
commit 8ee2e033ee
4 changed files with 84 additions and 64 deletions

View File

@ -48,16 +48,19 @@ AttributesTab::AttributesTab(QList<AttributeEdit *> *edit_list, QWidget *parent)
ui = new Ui::AttributesTab();
ui->setupUi(this);
auto tab_edit = new AttributesTabEdit(ui, this);
auto tab_edit = new AttributesTabEdit(ui->view, ui->filter_button, ui->edit_button, ui->view_button, this);
edit_list->append({
tab_edit,
});
}
AttributesTabEdit::AttributesTabEdit(Ui::AttributesTab *ui_arg, QObject *parent)
AttributesTabEdit::AttributesTabEdit(QTreeView *view_arg, QPushButton *filter_button_arg, QPushButton *edit_button_arg, QPushButton *view_button_arg, QObject *parent)
: AttributeEdit(parent) {
ui = ui_arg;
view = view_arg;
filter_button = filter_button_arg;
edit_button = edit_button_arg;
view_button = view_button_arg;
model = new QStandardItemModel(0, AttributesColumn_COUNT, this);
set_horizontal_header_labels_from_map(model,
@ -67,24 +70,24 @@ AttributesTabEdit::AttributesTabEdit(Ui::AttributesTab *ui_arg, QObject *parent)
{AttributesColumn_Type, tr("Type")}
});
auto filter_menu = new AttributesTabFilterMenu(ui->view);
auto filter_menu = new AttributesTabFilterMenu(view);
proxy = new AttributesTabProxy(filter_menu, this);
proxy->setSourceModel(model);
ui->view->setModel(proxy);
view->setModel(proxy);
ui->filter_button->setMenu(filter_menu);
filter_button->setMenu(filter_menu);
enable_widget_on_selection(ui->edit_button, ui->view);
enable_widget_on_selection(edit_button, view);
settings_restore_header_state(SETTING_attributes_tab_header_state, ui->view->header());
settings_restore_header_state(SETTING_attributes_tab_header_state, view->header());
const QHash<QString, QVariant> state = settings_get_variant(SETTING_attributes_tab_header_state).toHash();
ui->view->header()->restoreState(state["header"].toByteArray());
view->header()->restoreState(state["header"].toByteArray());
QItemSelectionModel *selection_model = ui->view->selectionModel();
QItemSelectionModel *selection_model = view->selectionModel();
connect(
selection_model, &QItemSelectionModel::selectionChanged,
@ -92,13 +95,13 @@ AttributesTabEdit::AttributesTabEdit(Ui::AttributesTab *ui_arg, QObject *parent)
update_edit_and_view_buttons();
connect(
ui->view, &QAbstractItemView::doubleClicked,
view, &QAbstractItemView::doubleClicked,
this, &AttributesTabEdit::on_double_click);
connect(
ui->edit_button, &QAbstractButton::clicked,
edit_button, &QAbstractButton::clicked,
this, &AttributesTabEdit::edit_attribute);
connect(
ui->view_button, &QAbstractButton::clicked,
view_button, &QAbstractButton::clicked,
this, &AttributesTabEdit::view_attribute);
connect(
filter_menu, &AttributesTabFilterMenu::filter_changed,
@ -112,7 +115,7 @@ AttributesTab::~AttributesTab() {
}
QList<QStandardItem *> AttributesTabEdit::get_selected_row() const {
const QItemSelectionModel *selection_model = ui->view->selectionModel();
const QItemSelectionModel *selection_model = view->selectionModel();
const QList<QModelIndex> selecteds = selection_model->selectedRows();
if (selecteds.isEmpty()) {
@ -140,27 +143,27 @@ void AttributesTabEdit::update_edit_and_view_buttons() {
const bool no_selection = selected_row.isEmpty();
if (no_selection) {
ui->edit_button->setVisible(true);
ui->edit_button->setEnabled(false);
edit_button->setVisible(true);
edit_button->setEnabled(false);
ui->view_button->setVisible(false);
ui->view_button->setEnabled(false);
view_button->setVisible(false);
view_button->setEnabled(false);
} else {
const QString attribute = selected_row[AttributesColumn_Name]->text();
const bool read_only = g_adconfig->get_attribute_is_system_only(attribute);
if (read_only) {
ui->edit_button->setVisible(false);
ui->edit_button->setEnabled(false);
edit_button->setVisible(false);
edit_button->setEnabled(false);
ui->view_button->setVisible(true);
ui->view_button->setEnabled(true);
view_button->setVisible(true);
view_button->setEnabled(true);
} else {
ui->edit_button->setVisible(true);
ui->edit_button->setEnabled(true);
edit_button->setVisible(true);
edit_button->setEnabled(true);
ui->view_button->setVisible(false);
ui->view_button->setEnabled(false);
view_button->setVisible(false);
view_button->setEnabled(false);
}
}
}
@ -295,31 +298,31 @@ AttributeDialog *AttributesTabEdit::get_attribute_dialog(const bool read_only) {
// switch statement for better flow
auto octet_attribute_dialog = [&]() -> AttributeDialog * {
if (single_valued) {
return new OctetAttributeDialog(value_list, attribute, read_only, ui->view);
return new OctetAttributeDialog(value_list, attribute, read_only, view);
} else {
return new ListAttributeDialog(value_list, attribute, read_only, ui->view);
return new ListAttributeDialog(value_list, attribute, read_only, view);
}
};
auto string_attribute_dialog = [&]() -> AttributeDialog * {
if (single_valued) {
return new StringAttributeDialog(value_list, attribute, read_only, ui->view);
return new StringAttributeDialog(value_list, attribute, read_only, view);
} else {
return new ListAttributeDialog(value_list, attribute, read_only, ui->view);
return new ListAttributeDialog(value_list, attribute, read_only, view);
}
};
auto bool_attribute_dialog = [&]() -> AttributeDialog * {
if (single_valued) {
return new BoolAttributeDialog(value_list, attribute, read_only, ui->view);
return new BoolAttributeDialog(value_list, attribute, read_only, view);
} else {
return new ListAttributeDialog(value_list, attribute, read_only, ui->view);
return new ListAttributeDialog(value_list, attribute, read_only, view);
}
};
auto datetime_attribute_dialog = [&]() -> AttributeDialog * {
if (single_valued) {
return new DatetimeAttributeDialog(value_list, attribute, read_only, ui->view);
return new DatetimeAttributeDialog(value_list, attribute, read_only, view);
} else {
return nullptr;
}

View File

@ -42,6 +42,8 @@ class AttributesTabProxy;
class AttributesFilterDialog;
class AttributeDialog;
class AttributesTabEdit;
class QTreeView;
class QPushButton;
namespace Ui {
class AttributesTab;
@ -61,13 +63,16 @@ class AttributesTabEdit final : public AttributeEdit {
Q_OBJECT
public:
AttributesTabEdit(Ui::AttributesTab *ui, QObject *parent);
AttributesTabEdit(QTreeView *view, QPushButton *filter_button, QPushButton *edit_button, QPushButton *view_button, QObject *parent);
void load(AdInterface &ad, const AdObject &object) override;
bool apply(AdInterface &ad, const QString &dn) const override;
private:
Ui::AttributesTab *ui;
QTreeView *view;
QPushButton *filter_button;
QPushButton *edit_button;
QPushButton *view_button;
AttributesFilterDialog *filter_dialog;
QStandardItemModel *model;
AttributesTabProxy *proxy;

View File

@ -53,17 +53,21 @@ MembershipTab::MembershipTab(QList<AttributeEdit *> *edit_list, const Membership
ui = new Ui::MembershipTab();
ui->setupUi(this);
auto tab_edit = new MembershipTabEdit(ui, type, this);
auto tab_edit = new MembershipTabEdit(ui->view, ui->primary_button, ui->add_button, ui->remove_button, ui->properties_button, ui->primary_group_label, type, this);
edit_list->append({
tab_edit,
});
}
MembershipTabEdit::MembershipTabEdit(Ui::MembershipTab *ui_arg, const MembershipTabType &type_arg, QObject *parent)
MembershipTabEdit::MembershipTabEdit(QTreeView *view_arg, QPushButton *primary_button_arg, QPushButton *add_button_arg, QPushButton *remove_button_arg, QPushButton *properties_button_arg, QLabel *primary_group_label_arg, const MembershipTabType &type_arg, QObject *parent)
: AttributeEdit(parent) {
ui = ui_arg;
view = view_arg;
primary_button = primary_button_arg;
add_button = add_button_arg;
remove_button = remove_button_arg;
properties_button = properties_button_arg;
primary_group_label = primary_group_label_arg;
type = type_arg;
model = new QStandardItemModel(0, MembersColumn_COUNT, this);
@ -73,39 +77,39 @@ MembershipTabEdit::MembershipTabEdit(Ui::MembershipTab *ui_arg, const Membership
{MembersColumn_Parent, tr("Folder")},
});
ui->view->setModel(model);
view->setModel(model);
// Primary group widgets are visible only in Member of version
if (type == MembershipTabType_Members) {
ui->primary_button->hide();
ui->primary_group_label->hide();
primary_button->hide();
primary_group_label->hide();
}
settings_restore_header_state(SETTING_membership_tab_header_state, ui->view->header());
settings_restore_header_state(SETTING_membership_tab_header_state, view->header());
enable_widget_on_selection(ui->remove_button, ui->view);
enable_widget_on_selection(ui->properties_button, ui->view);
enable_widget_on_selection(remove_button, view);
enable_widget_on_selection(properties_button, view);
const QItemSelectionModel *selection_model = ui->view->selectionModel();
const QItemSelectionModel *selection_model = view->selectionModel();
connect(
selection_model, &QItemSelectionModel::selectionChanged,
this, &MembershipTabEdit::enable_primary_button_on_valid_selection);
enable_primary_button_on_valid_selection();
connect(
ui->remove_button, &QAbstractButton::clicked,
remove_button, &QAbstractButton::clicked,
this, &MembershipTabEdit::on_remove_button);
connect(
ui->add_button, &QAbstractButton::clicked,
add_button, &QAbstractButton::clicked,
this, &MembershipTabEdit::on_add_button);
connect(
ui->properties_button, &QAbstractButton::clicked,
properties_button, &QAbstractButton::clicked,
this, &MembershipTabEdit::on_properties_button);
connect(
ui->primary_button, &QAbstractButton::clicked,
primary_button, &QAbstractButton::clicked,
this, &MembershipTabEdit::on_primary_button);
PropertiesDialog::open_when_view_item_activated(ui->view, MembersRole_DN);
PropertiesDialog::open_when_view_item_activated(view, MembersRole_DN);
}
MembershipTab::~MembershipTab() {
@ -281,7 +285,7 @@ void MembershipTabEdit::on_add_button() {
return QList<QString>();
}();
auto dialog = new SelectObjectDialog(classes, SelectObjectDialogMultiSelection_Yes, ui->view);
auto dialog = new SelectObjectDialog(classes, SelectObjectDialogMultiSelection_Yes, view);
const QString title = [&]() {
switch (type) {
@ -305,7 +309,7 @@ void MembershipTabEdit::on_add_button() {
}
void MembershipTabEdit::on_remove_button() {
const QItemSelectionModel *selection_model = ui->view->selectionModel();
const QItemSelectionModel *selection_model = view->selectionModel();
const QList<QModelIndex> selected = selection_model->selectedRows();
QList<QString> removed_values;
@ -334,7 +338,7 @@ void MembershipTabEdit::on_remove_button() {
return QString();
}();
message_box_warning(ui->view, tr("Error"), error_text);
message_box_warning(view, tr("Error"), error_text);
} else {
remove_values(removed_values);
}
@ -342,7 +346,7 @@ void MembershipTabEdit::on_remove_button() {
void MembershipTabEdit::on_primary_button() {
// Make selected group primary
const QItemSelectionModel *selection_model = ui->view->selectionModel();
const QItemSelectionModel *selection_model = view->selectionModel();
const QList<QModelIndex> selecteds = selection_model->selectedRows();
const QModelIndex selected = selecteds[0];
const QString group_dn = selected.data(MembersRole_DN).toString();
@ -361,22 +365,22 @@ void MembershipTabEdit::on_primary_button() {
void MembershipTabEdit::on_properties_button() {
AdInterface ad;
if (ad_failed(ad, ui->view)) {
if (ad_failed(ad, view)) {
return;
}
const QModelIndex current = ui->view->selectionModel()->currentIndex();
const QModelIndex current = view->selectionModel()->currentIndex();
const QString dn = current.data(MembersRole_DN).toString();
PropertiesDialog::open_for_target(ad, dn);
}
void MembershipTabEdit::enable_primary_button_on_valid_selection() {
if (ui->primary_button == nullptr) {
if (primary_button == nullptr) {
return;
}
const QItemSelectionModel *selection_model = ui->view->selectionModel();
const QItemSelectionModel *selection_model = view->selectionModel();
const QList<QModelIndex> selecteds = selection_model->selectedRows();
// Enable "set primary group" button if
@ -395,9 +399,9 @@ void MembershipTabEdit::enable_primary_button_on_valid_selection() {
const QString dn = selected_dns.values()[0];
const bool is_primary = current_primary_values.contains(dn);
ui->primary_button->setEnabled(!is_primary);
primary_button->setEnabled(!is_primary);
} else {
ui->primary_button->setEnabled(false);
primary_button->setEnabled(false);
}
}
@ -417,7 +421,7 @@ void MembershipTabEdit::reload_model() {
return out;
}();
ui->primary_group_label->setText(primary_group_label_text);
primary_group_label->setText(primary_group_label_text);
}
model->removeRows(0, model->rowCount());

View File

@ -27,6 +27,9 @@
#include <QSet>
class QStandardItemModel;
class QTreeView;
class QPushButton;
class QLabel;
// Displays and edits membership info which can go both ways
// 1. users that are members of group
@ -56,13 +59,18 @@ class MembershipTabEdit final : public AttributeEdit {
Q_OBJECT
public:
MembershipTabEdit(Ui::MembershipTab *ui, const MembershipTabType &type, QObject *parent);
MembershipTabEdit(QTreeView *view, QPushButton *primary_button, QPushButton *add_button, QPushButton *remove_button, QPushButton *properties_button, QLabel *primary_group_label, const MembershipTabType &type, QObject *parent);
void load(AdInterface &ad, const AdObject &object) override;
bool apply(AdInterface &ad, const QString &dn) const override;
private:
Ui::MembershipTab *ui;
QTreeView *view;
QPushButton *primary_button;
QPushButton *add_button;
QPushButton *remove_button;
QPushButton *properties_button;
QLabel *primary_group_label;
MembershipTabType type;
QStandardItemModel *model;