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:
commit
df46850e4f
@ -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})
|
||||
|
@ -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?
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
@ -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 */
|
Loading…
Reference in New Issue
Block a user