summaryrefslogtreecommitdiffstats
path: root/src/designer/src/lib/shared/actioneditor_p.h
blob: 471d12d043d42026581bd927b1ed2482c97cc21d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists for the convenience
// of Qt Designer.  This header
// file may change from version to version without notice, or even be removed.
//
// We mean it.
//

#ifndef ACTIONEDITOR_H
#define ACTIONEDITOR_H

#include "shared_global_p.h"
#include "shared_enums_p.h"
#include <QtDesigner/abstractactioneditor.h>

#include <QtCore/qpointer.h>

QT_BEGIN_NAMESPACE

class QDesignerPropertyEditorInterface;
class QDesignerSettingsInterface;
class QMenu;
class QActionGroup;
class QItemSelection;
class QListWidget;
class QPushButton;
class QLineEdit;
class QToolButton;

namespace qdesigner_internal {

class ActionView;
class ResourceMimeData;

class QDESIGNER_SHARED_EXPORT ActionEditor: public QDesignerActionEditorInterface
{
    Q_OBJECT
public:
    explicit ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent = nullptr,
                          Qt::WindowFlags flags = {});
    ~ActionEditor() override;

    QDesignerFormWindowInterface *formWindow() const;
    void setFormWindow(QDesignerFormWindowInterface *formWindow) override;

    QDesignerFormEditorInterface *core() const override;

    QAction *actionNew() const;
    QAction *actionDelete() const;

    QString filter() const;

    void manageAction(QAction *action) override;
    void unmanageAction(QAction *action) override;

    static ObjectNamingMode objectNamingMode() { return m_objectNamingMode; }
    static void setObjectNamingMode(ObjectNamingMode n) { m_objectNamingMode = n; }

    static QString actionTextToName(const QString &text,
                                    const QString &prefix = QLatin1StringView("action"));

    // Utility to create a configure button with menu for usage on toolbars
    static QToolButton *createConfigureMenuButton(const QString &t, QMenu **ptrToMenu);

public slots:
    void setFilter(const QString &filter);
    void mainContainerChanged();
    void clearSelection();
    void selectAction(QAction *a); // For use by the menu editor

private slots:
    void slotCurrentItemChanged(QAction *item);
    void slotSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
    void editAction(QAction *item, int column = -1);
    void editCurrentAction();
    void navigateToSlotCurrentAction();
    void slotActionChanged();
    void slotNewAction();
    void slotDelete();
    void resourceImageDropped(const QString &path, QAction *action);
    void slotContextMenuRequested(QContextMenuEvent *, QAction *);
    void slotViewMode(QAction *a);
    void slotSelectAssociatedWidget(QWidget *w);
#if QT_CONFIG(clipboard)
    void slotCopy();
    void slotCut();
    void slotPaste();
#endif

signals:
    void itemActivated(QAction *item, int column);
    // Context menu for item or global menu if item == 0.
    void contextMenuRequested(QMenu *menu, QAction *item);

private:
    using ActionList = QList<QAction *>;
    void deleteActions(QDesignerFormWindowInterface *formWindow, const ActionList &);
#if QT_CONFIG(clipboard)
    void copyActions(QDesignerFormWindowInterface *formWindow, const ActionList &);
#endif

    void restoreSettings();
    void saveSettings();

    void updateViewModeActions();

    static ObjectNamingMode m_objectNamingMode;

    QDesignerFormEditorInterface *m_core;
    QPointer<QDesignerFormWindowInterface> m_formWindow;
    QListWidget *m_actionGroups;

    ActionView *m_actionView;

    QAction *m_actionNew;
    QAction *m_actionEdit;
    QAction *m_actionNavigateToSlot;
#if QT_CONFIG(clipboard)
    QAction *m_actionCopy;
    QAction *m_actionCut;
    QAction *m_actionPaste;
#endif
    QAction *m_actionSelectAll;
    QAction *m_actionDelete;

    QActionGroup *m_viewModeGroup;
    QAction *m_iconViewAction;
    QAction *m_listViewAction;

    QString m_filter;
    QWidget *m_filterWidget;
    bool m_withinSelectAction = false;
};

} // namespace qdesigner_internal

QT_END_NAMESPACE

#endif // ACTIONEDITOR_H