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:
parent
d33f81ef7a
commit
8ee2e033ee
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user