1
0
mirror of https://github.com/altlinux/admc.git synced 2025-03-31 02:50:17 +03:00

Merge pull request #282 from altlinux/feature/toolbar

Feature/toolbar
This commit is contained in:
Dmitry Degtyarev 2021-08-19 15:25:40 +03:00 committed by GitHub
commit 8d75716853
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 62 additions and 12 deletions

View File

@ -798,12 +798,12 @@ void CentralWidget::update_description_bar() {
console->set_description_bar_text(text);
}
void CentralWidget::add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QMenu *preferences_menu) {
void CentralWidget::add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QMenu *preferences_menu, QToolBar *toolbar) {
console_actions->add_to_menu(action_menu);
action_menu->addSeparator();
console->add_actions(action_menu, navigation_menu, view_menu);
console->add_actions(action_menu, navigation_menu, view_menu, toolbar);
view_menu->addSeparator();

View File

@ -45,6 +45,7 @@ class ConsoleActions;
class PolicyResultsWidget;
template <typename T>
class QList;
class QToolBar;
enum ItemType {
ItemType_Unassigned,
@ -65,7 +66,7 @@ public:
CentralWidget(AdInterface &ad);
~CentralWidget();
void add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QMenu *preferences_menu);
void add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QMenu *preferences_menu, QToolBar *toolbar);
signals:
void context_menu(const QPoint pos);

View File

@ -38,6 +38,7 @@
#include <QStackedWidget>
#include <QTreeView>
#include <QVBoxLayout>
#include <QToolBar>
#define SPLITTER_STATE "SPLITTER_STATE"
@ -83,10 +84,17 @@ ConsoleWidget::ConsoleWidget(QWidget *parent)
d->results_stacked_widget = new QStackedWidget();
d->properties_action = new QAction(tr("&Properties"), this);
d->navigate_up_action = new QAction(tr("&Up one level"), this);
d->navigate_back_action = new QAction(tr("&Back"), this);
d->navigate_forward_action = new QAction(tr("&Forward"), this);
d->navigate_up_action = new QAction(QIcon::fromTheme("go-up"), tr("&Up one level"), this);
d->navigate_back_action = new QAction(QIcon::fromTheme("go-previous"), tr("&Back"), this);
d->navigate_forward_action = new QAction(QIcon::fromTheme("go-next"), tr("&Forward"), this);
// NOTE: this refresh action is for the action menu.
// Refreshes selected object, if it can be refreshed.
// Hidden if can't refresh.
d->refresh_action = new QAction(tr("&Refresh"), this);
// NOTE: this refresh action is for the toolbar.
// Refreshes current scope item, if it can be refreshed.
// Always visible.
d->refresh_current_scope_action = new QAction(QIcon::fromTheme("view-refresh"), tr("&Refresh"), this);
d->customize_columns_action = new QAction(tr("&Customize columns"), this);
d->set_results_to_icons_action = new QAction(tr("&Icons"), this);
d->set_results_to_list_action = new QAction(tr("&List"), this);
@ -168,6 +176,9 @@ ConsoleWidget::ConsoleWidget(QWidget *parent)
connect(
d->refresh_action, &QAction::triggered,
d, &ConsoleWidgetPrivate::refresh);
connect(
d->refresh_current_scope_action, &QAction::triggered,
d, &ConsoleWidgetPrivate::refresh_current_scope);
connect(
d->customize_columns_action, &QAction::triggered,
d, &ConsoleWidgetPrivate::customize_columns);
@ -566,7 +577,8 @@ void ConsoleWidgetPrivate::update_actions() {
const QModelIndex selected = selected_list[0];
const bool is_dynamic = selected.data(ConsoleRole_ScopeIsDynamic).toBool();
if (is_dynamic) {
const bool is_scope = selected.data(ConsoleRole_IsScope).toBool();
if (is_scope && is_dynamic) {
refresh_action->setVisible(true);
}
@ -709,9 +721,23 @@ void ConsoleWidgetPrivate::on_focus_changed(QWidget *old, QWidget *now) {
}
void ConsoleWidgetPrivate::refresh() {
const QList<QModelIndex> selected = q->get_selected_items();
if (selected.size() == 1) {
const QModelIndex index = selected[0];
q->refresh_scope(index);
}
}
void ConsoleWidgetPrivate::refresh_current_scope() {
const QModelIndex current_scope = q->get_current_scope_item();
q->refresh_scope(current_scope);
const bool is_dynamic = current_scope.data(ConsoleRole_ScopeIsDynamic).toBool();
if (is_dynamic) {
q->refresh_scope(current_scope);
}
}
void ConsoleWidgetPrivate::customize_columns() {
@ -851,7 +877,7 @@ void ConsoleWidgetPrivate::update_view_actions() {
customize_columns_action->setVisible(results_view_exists);
}
void ConsoleWidget::add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu) {
void ConsoleWidget::add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QToolBar *toolbar) {
// Action
action_menu->addAction(d->refresh_action);
action_menu->addSeparator();
@ -891,6 +917,13 @@ void ConsoleWidget::add_actions(QMenu *action_menu, QMenu *navigation_menu, QMen
view_menu->addSeparator();
view_menu->addAction(d->customize_columns_action);
// Toolbar
toolbar->addAction(d->navigate_back_action);
toolbar->addAction(d->navigate_forward_action);
toolbar->addAction(d->navigate_up_action);
toolbar->addSeparator();
toolbar->addAction(d->refresh_current_scope_action);
}
const ResultsDescription ConsoleWidgetPrivate::get_current_results() const {

View File

@ -49,6 +49,7 @@ class QStandardItem;
class QMenu;
class QAbstractItemView;
class QStandardItemModel;
class QToolBar;
enum ConsoleRolePublic {
ConsoleRole_Fetching = Qt::UserRole + 17,
@ -165,7 +166,7 @@ public:
bool item_was_fetched(const QModelIndex &index) const;
void add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu);
void add_actions(QMenu *action_menu, QMenu *navigation_menu, QMenu *view_menu, QToolBar *toolbar);
// These getters are only for showing/hiding these widgets
QWidget *get_scope_view() const;

View File

@ -82,6 +82,7 @@ public:
QAction *properties_action;
QAction *refresh_action;
QAction *refresh_current_scope_action;
QAction *navigate_up_action;
QAction *navigate_back_action;
@ -113,6 +114,7 @@ public:
void on_scope_items_about_to_be_removed(const QModelIndex &parent, int first, int last);
void on_focus_changed(QWidget *old, QWidget *now);
void refresh();
void refresh_current_scope();
void customize_columns();
void navigate_up();
void navigate_back();

View File

@ -37,15 +37,23 @@
#include <QMenuBar>
#include <QStatusBar>
#include <QTextEdit>
#include <QToolBar>
#define MESSAGE_LOG_OBJECT_NAME "MESSAGE_LOG_OBJECT_NAME"
MainWindow::MainWindow()
: QMainWindow() {
toolbar = new QToolBar(this);
toolbar->setObjectName("main_window_toolbar");
toolbar->setWindowTitle(tr("Toolbar"));
addToolBar(toolbar);
setStatusBar(g_status()->status_bar());
connection_options_dialog = new ConnectionOptionsDialog(this);
manual_action = new QAction(QIcon::fromTheme("help-faq"), tr("&Manual"), this);
message_log_dock = new QDockWidget();
message_log_dock->setWindowTitle(tr("Message Log"));
message_log_dock->setWidget(g_status()->message_log());
@ -103,7 +111,6 @@ void MainWindow::setup_menubar() {
auto quit_action = new QAction(tr("&Quit"), this);
quit_action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q));
auto manual_action = new QAction(tr("&Manual"), this);
auto about_action = new QAction(tr("&About ADMC"), this);
auto confirm_actions_action = settings_make_and_connect_action(SETTING_confirm_actions, tr("&Confirm actions"), this);
@ -177,6 +184,7 @@ void MainWindow::setup_menubar() {
preferences_menu->addMenu(language_menu);
preferences_menu->addSeparator();
preferences_menu->addAction(message_log_dock->toggleViewAction());
preferences_menu->addAction(toolbar->toggleViewAction());
for (const auto language : language_list) {
QAction *language_action = language_actions[language];
@ -245,8 +253,10 @@ void MainWindow::connect_to_server() {
auto central_widget = new CentralWidget(ad);
setCentralWidget(central_widget);
central_widget->add_actions(action_menu, navigation_menu, view_menu, preferences_menu);
central_widget->add_actions(action_menu, navigation_menu, view_menu, preferences_menu, toolbar);
toolbar->addAction(manual_action);
connect_action->setEnabled(false);
}
}

View File

@ -27,6 +27,7 @@ class QAction;
class QDockWidget;
class QMenu;
class ConnectionOptionsDialog;
class QToolBar;
class MainWindow final : public QMainWindow {
Q_OBJECT
@ -39,8 +40,10 @@ protected:
private:
QAction *connect_action;
QAction *manual_action;
ConnectionOptionsDialog *connection_options_dialog;
QDockWidget *message_log_dock;
QToolBar *toolbar;
QMenu *action_menu;
QMenu *navigation_menu;