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

Merge branch 'master' into entry-context-menu

This commit is contained in:
Dmitry Degtyarev 2020-06-22 13:31:15 +04:00 committed by GitHub
commit df46850e4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 36 additions and 35 deletions

View File

@ -49,7 +49,6 @@ set(ADTOOL_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/admc.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Runner.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ad_proxy_model.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ad_interface.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/ad_model.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/details_widget.cpp
@ -65,6 +64,7 @@ set(ADTOOL_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/settings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/entry_context_menu.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/confirmation_dialog.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/entry_proxy_model.cpp
)
add_definitions(${QT5_DEFINITIONS})

View File

@ -201,10 +201,6 @@ void load_row(QList<QStandardItem *> row, const QString &dn) {
QString description = AD()->get_attribute(dn, "description");
bool showInAdvancedViewOnly = AD()->get_attribute(dn, "showInAdvancedViewOnly") == "TRUE";
bool is_container = AD()->is_container_like(dn) || AD()->is_container(dn);
QStandardItem *name_item = row[AdModel::Column::Name];
QStandardItem *category_item = row[AdModel::Column::Category];
QStandardItem *description_item = row[AdModel::Column::Description];
@ -214,8 +210,6 @@ void load_row(QList<QStandardItem *> row, const QString &dn) {
category_item->setText(category);
description_item->setText(description);
dn_item->setText(dn);
row[0]->setData(showInAdvancedViewOnly, AdModel::Roles::AdvancedViewOnly);
row[0]->setData(is_container, AdModel::Roles::IsContainer);
// Set icon
// TODO: change to custom, good icons, add those icons to installation?

View File

@ -41,9 +41,7 @@ public:
};
enum Roles {
AdvancedViewOnly = Qt::UserRole + 1,
CanFetch = Qt::UserRole + 2,
IsContainer = Qt::UserRole + 3,
CanFetch = Qt::UserRole + 1,
};
explicit AdModel(QObject *parent);

View File

@ -19,7 +19,7 @@
#include "containers_widget.h"
#include "ad_model.h"
#include "ad_proxy_model.h"
#include "entry_proxy_model.h"
#include <QTreeView>
#include <QLabel>
@ -28,7 +28,7 @@
ContainersWidget::ContainersWidget(AdModel *model, QWidget *parent)
: EntryWidget(model, parent)
{
proxy = new AdProxyModel(model, this);
proxy = new EntryProxyModel(model, this);
proxy->only_show_containers = true;
view->setAcceptDrops(true);

View File

@ -24,7 +24,7 @@
class QItemSelection;
class AdModel;
class AdProxyModel;
class EntryProxyModel;
// Display tree of container entries
// And some other "container-like" entries like domain, built-in, etc
@ -42,7 +42,7 @@ private slots:
void on_selection_changed(const QItemSelection &selected, const QItemSelection &);
private:
AdProxyModel *proxy = nullptr;
EntryProxyModel *proxy = nullptr;
};

View File

@ -20,7 +20,7 @@
#include "contents_widget.h"
#include "ad_interface.h"
#include "ad_model.h"
#include "ad_proxy_model.h"
#include "entry_proxy_model.h"
#include <QTreeView>
#include <QLabel>
@ -29,7 +29,7 @@
ContentsWidget::ContentsWidget(AdModel* model, QWidget *parent)
: EntryWidget(model, parent)
{
proxy = new AdProxyModel(model, this);
proxy = new EntryProxyModel(model, this);
view->setAcceptDrops(true);
view->setEditTriggers(QAbstractItemView::NoEditTriggers);

View File

@ -23,7 +23,7 @@
#include "entry_widget.h"
class AdModel;
class AdProxyModel;
class EntryProxyModel;
// Shows name, category and description of children of entry selected in containers view
class ContentsWidget final : public EntryWidget {
@ -36,7 +36,7 @@ public slots:
void on_selected_container_changed(const QModelIndex &source_index);
private:
AdProxyModel *proxy = nullptr;
EntryProxyModel *proxy = nullptr;
};

View File

@ -17,40 +17,47 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ad_proxy_model.h"
#include "ad_model.h"
#include "entry_proxy_model.h"
#include "entry_model.h"
#include "ad_interface.h"
#include "settings.h"
#include <QAction>
AdProxyModel::AdProxyModel(AdModel *model, QObject *parent)
EntryProxyModel::EntryProxyModel(EntryModel *model_arg, QObject *parent)
: QSortFilterProxyModel(parent)
{
model = model_arg;
setSourceModel(model);
connect(
SETTINGS()->toggle_advanced_view, &QAction::triggered,
this, &AdProxyModel::on_advanced_view_toggled);
this, &EntryProxyModel::on_advanced_view_toggled);
}
void AdProxyModel::on_advanced_view_toggled(bool) {
void EntryProxyModel::on_advanced_view_toggled(bool) {
invalidateFilter();
}
bool AdProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {
const QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
bool EntryProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {
const QModelIndex index = model->index(source_row, 0, source_parent);
const QString dn = model->get_dn_from_index(index);
// Hide advanced view only entries if advanced view is OFF
const bool advanced_view_only = index.data(AdModel::Roles::AdvancedViewOnly).toBool();
const bool advanced_view_is_on = SETTINGS()->toggle_advanced_view->isChecked();
if (advanced_view_only && !advanced_view_is_on) {
return false;
if (!advanced_view_is_on) {
bool advanced_view_only = AD()->get_attribute(dn, "showInAdvancedViewOnly") == "TRUE";
if (advanced_view_only) {
return false;
}
}
// Hide non-containers
if (only_show_containers) {
// Hide non-containers
const bool is_container = index.data(AdModel::Roles::IsContainer).toBool();
bool is_container = AD()->is_container_like(dn) || AD()->is_container(dn);
if (!is_container) {
return false;
}

View File

@ -23,12 +23,13 @@
#include <QSortFilterProxyModel>
class QModelIndex;
class AdModel;
class EntryModel;
// Filter out advanced entries when advanced view is off
class AdProxyModel final : public QSortFilterProxyModel {
// Show/hide advanced entries depending on whether advanced view is on
// Show/hide non-container entries
class EntryProxyModel final : public QSortFilterProxyModel {
public:
explicit AdProxyModel(AdModel *model, QObject *parent);
explicit EntryProxyModel(EntryModel *model_arg, QObject *parent);
bool only_show_containers = false;
@ -36,8 +37,9 @@ private slots:
void on_advanced_view_toggled(bool checked);
private:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
EntryModel *model;
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
};
#endif /* AD_PROXY_MODEL_H */