1
0
mirror of https://github.com/altlinux/admc.git synced 2025-02-09 01:57:26 +03:00

clean up query item impl

This commit is contained in:
Dmitry Degtyarev 2021-09-01 16:58:07 +04:00
parent 4c45d82491
commit be940d074d
3 changed files with 112 additions and 111 deletions

View File

@ -192,7 +192,7 @@ void QueryFolderImpl::on_import() {
return out;
}();
console_query_item_load(console, data, parent_index);
console_query_item_load_hash(console, data, parent_index);
console_query_tree_save(console);
}
@ -232,7 +232,7 @@ void console_query_tree_init(ConsoleWidget *console) {
if (item_list.contains(path)) {
// Query item
const QHash<QString, QVariant> data = item_list[path].toHash();
console_query_item_load(console, data, folder_index);
console_query_item_load_hash(console, data, folder_index);
} else if (folder_list.contains(path)) {
// Query folder
const QHash<QString, QVariant> data = folder_list[path].toHash();
@ -309,7 +309,7 @@ void console_query_tree_save(ConsoleWidget *console) {
folder_list[path] = data;
}
} else {
const QHash<QString, QVariant> data = console_query_item_save(index);
const QHash<QString, QVariant> data = console_query_item_save_hash(index);
item_list[path] = data;
}

View File

@ -41,23 +41,19 @@
#define QUERY_ROOT "QUERY_ROOT"
void console_query_item_load(const QList<QStandardItem *> row, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children) {
QStandardItem *main_item = row[0];
main_item->setData(description, QueryItemRole_Description);
main_item->setData(filter, QueryItemRole_Filter);
main_item->setData(filter_state, QueryItemRole_FilterState);
main_item->setData(base, QueryItemRole_Base);
main_item->setData(scope_is_children, QueryItemRole_ScopeIsChildren);
main_item->setIcon(QIcon::fromTheme("emblem-system"));
QueryItemImpl::QueryItemImpl(ConsoleWidget *console_arg)
: ConsoleImpl(console_arg) {
set_results_view(new ResultsView(console_arg));
row[QueryColumn_Name]->setText(name);
row[QueryColumn_Description]->setText(description);
}
edit_action = new QAction(tr("Edit..."), this);
export_action = new QAction(tr("Export query..."), this);
void console_query_item_create(ConsoleWidget *console, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children, const QModelIndex &parent) {
const QList<QStandardItem *> row = console->add_scope_item(ItemType_QueryItem, parent);
console_query_item_load(row, name, description, filter, filter_state, base, scope_is_children);
connect(
edit_action, &QAction::triggered,
this, &QueryItemImpl::on_edit);
connect(
export_action, &QAction::triggered,
this, &QueryItemImpl::on_export);
}
void QueryItemImpl::fetch(const QModelIndex &index) {
@ -76,91 +72,6 @@ void QueryItemImpl::fetch(const QModelIndex &index) {
console_object_search(console, index, base, scope, filter, search_attributes);
}
void QueryItemImpl::on_export() {
const QModelIndex index = console->get_selected_item(ItemType_QueryItem);
const QString file_path = [&]() {
const QString query_name = index.data(Qt::DisplayRole).toString();
const QString caption = QCoreApplication::translate("query_item_impl.cpp", "Export Query");
const QString suggested_file = QString("%1/%2.json").arg(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), query_name);
const QString filter = QCoreApplication::translate("query_item_impl.cpp", "JSON (*.json)");
const QString out = QFileDialog::getSaveFileName(console, caption, suggested_file, filter);
return out;
}();
if (file_path.isEmpty()) {
return;
}
const QHash<QString, QVariant> data = console_query_item_save(index);
const QByteArray json_bytes = QJsonDocument::fromVariant(data).toJson();
QFile file(file_path);
file.open(QIODevice::WriteOnly);
file.write(json_bytes);
}
QHash<QString, QVariant> console_query_item_save(const QModelIndex &index) {
const QString name = index.data(Qt::DisplayRole).toString();
const QString description = index.data(QueryItemRole_Description).toString();
const QString base = index.data(QueryItemRole_Base).toString();
const QString filter = index.data(QueryItemRole_Filter).toString();
const QByteArray filter_state = index.data(QueryItemRole_FilterState).toByteArray();
const bool scope_is_children = index.data(QueryItemRole_ScopeIsChildren).toBool();
QHash<QString, QVariant> data;
data["name"] = name;
data["description"] = description;
data["base"] = base;
data["filter"] = filter;
data["filter_state"] = filter_state.toHex();
data["scope_is_children"] = scope_is_children;
return data;
}
void console_query_item_load(ConsoleWidget *console, const QHash<QString, QVariant> &data, const QModelIndex &parent_index) {
if (data.isEmpty()) {
return;
}
const QString name = data["name"].toString();
const QString description = data["description"].toString();
const QString base = data["base"].toString();
const bool scope_is_children = data["scope_is_children"].toBool();
const QString filter = data["filter"].toString();
const QByteArray filter_state = QByteArray::fromHex(data["filter_state"].toString().toLocal8Bit());
if (!console_query_or_folder_name_is_good(name, parent_index, console, QModelIndex())) {
return;
}
console_query_item_create(console, name, description, filter, filter_state, base, scope_is_children, parent_index);
}
void QueryItemImpl::on_edit() {
auto dialog = new EditQueryItemDialog(console);
dialog->open();
}
QueryItemImpl::QueryItemImpl(ConsoleWidget *console_arg)
: ConsoleImpl(console_arg) {
set_results_view(new ResultsView(console_arg));
edit_action = new QAction(tr("Edit..."), this);
export_action = new QAction(tr("Export query..."), this);
connect(
edit_action, &QAction::triggered,
this, &QueryItemImpl::on_edit);
connect(
export_action, &QAction::triggered,
this, &QueryItemImpl::on_export);
}
QString QueryItemImpl::get_description(const QModelIndex &index) const {
const QString object_count_text = console_object_count_string(console, index);
@ -233,3 +144,92 @@ QList<QString> QueryItemImpl::column_labels() const {
QList<int> QueryItemImpl::default_columns() const {
return object_impl_default_columns();
}
void QueryItemImpl::on_edit() {
auto dialog = new EditQueryItemDialog(console);
dialog->open();
}
void QueryItemImpl::on_export() {
const QModelIndex index = console->get_selected_item(ItemType_QueryItem);
const QString file_path = [&]() {
const QString query_name = index.data(Qt::DisplayRole).toString();
const QString caption = QCoreApplication::translate("query_item_impl.cpp", "Export Query");
const QString suggested_file = QString("%1/%2.json").arg(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), query_name);
const QString filter = QCoreApplication::translate("query_item_impl.cpp", "JSON (*.json)");
const QString out = QFileDialog::getSaveFileName(console, caption, suggested_file, filter);
return out;
}();
if (file_path.isEmpty()) {
return;
}
const QHash<QString, QVariant> data = console_query_item_save_hash(index);
const QByteArray json_bytes = QJsonDocument::fromVariant(data).toJson();
QFile file(file_path);
file.open(QIODevice::WriteOnly);
file.write(json_bytes);
}
void console_query_item_load(const QList<QStandardItem *> row, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children) {
QStandardItem *main_item = row[0];
main_item->setData(description, QueryItemRole_Description);
main_item->setData(filter, QueryItemRole_Filter);
main_item->setData(filter_state, QueryItemRole_FilterState);
main_item->setData(base, QueryItemRole_Base);
main_item->setData(scope_is_children, QueryItemRole_ScopeIsChildren);
main_item->setIcon(QIcon::fromTheme("emblem-system"));
row[QueryColumn_Name]->setText(name);
row[QueryColumn_Description]->setText(description);
}
void console_query_item_create(ConsoleWidget *console, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children, const QModelIndex &parent) {
const QList<QStandardItem *> row = console->add_scope_item(ItemType_QueryItem, parent);
console_query_item_load(row, name, description, filter, filter_state, base, scope_is_children);
}
QHash<QString, QVariant> console_query_item_save_hash(const QModelIndex &index) {
const QString name = index.data(Qt::DisplayRole).toString();
const QString description = index.data(QueryItemRole_Description).toString();
const QString base = index.data(QueryItemRole_Base).toString();
const QString filter = index.data(QueryItemRole_Filter).toString();
const QByteArray filter_state = index.data(QueryItemRole_FilterState).toByteArray();
const bool scope_is_children = index.data(QueryItemRole_ScopeIsChildren).toBool();
QHash<QString, QVariant> data;
data["name"] = name;
data["description"] = description;
data["base"] = base;
data["filter"] = filter;
data["filter_state"] = filter_state.toHex();
data["scope_is_children"] = scope_is_children;
return data;
}
void console_query_item_load_hash(ConsoleWidget *console, const QHash<QString, QVariant> &data, const QModelIndex &parent_index) {
if (data.isEmpty()) {
return;
}
const QString name = data["name"].toString();
const QString description = data["description"].toString();
const QString base = data["base"].toString();
const bool scope_is_children = data["scope_is_children"].toBool();
const QString filter = data["filter"].toString();
const QByteArray filter_state = QByteArray::fromHex(data["filter_state"].toString().toLocal8Bit());
if (!console_query_or_folder_name_is_good(name, parent_index, console, QModelIndex())) {
return;
}
console_query_item_create(console, name, description, filter, filter_state, base, scope_is_children, parent_index);
}

View File

@ -42,11 +42,6 @@ enum QueryColumn {
QueryColumn_COUNT,
};
void console_query_item_load(const QList<QStandardItem *> row, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children);
void console_query_item_create(ConsoleWidget *console, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children, const QModelIndex &parent);
void console_query_item_load(ConsoleWidget *console, const QHash<QString, QVariant> &data, const QModelIndex &parent_index);
QHash<QString, QVariant> console_query_item_save(const QModelIndex &index);
class QueryItemImpl final : public ConsoleImpl {
Q_OBJECT
@ -68,13 +63,19 @@ public:
QList<QString> column_labels() const override;
QList<int> default_columns() const override;
private slots:
void on_edit();
void on_export();
private:
QAction *edit_action;
QAction *export_action;
void on_edit();
void on_export();
};
void console_query_item_load(const QList<QStandardItem *> row, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children);
void console_query_item_create(ConsoleWidget *console, const QString &name, const QString &description, const QString &filter, const QByteArray &filter_state, const QString &base, const bool scope_is_children, const QModelIndex &parent);
QHash<QString, QVariant> console_query_item_save_hash(const QModelIndex &index);
void console_query_item_load_hash(ConsoleWidget *console, const QHash<QString, QVariant> &data, const QModelIndex &parent_index);
#endif /* CONSOLE_QUERY_H */