File: qcgtoplevel.h

package info (click to toggle)
kcachegrind 4%3A22.12.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 9,156 kB
  • sloc: cpp: 28,878; xml: 338; perl: 325; python: 235; sh: 9; makefile: 6
file content (266 lines) | stat: -rw-r--r-- 8,175 bytes parent folder | download
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/*
    This file is part of KCachegrind.

    SPDX-FileCopyrightText: 2002-2016 Josef Weidendorfer <Josef.Weidendorfer@gmx.de>

    SPDX-License-Identifier: GPL-2.0-only
*/

/*
 * QCachegrind top level window
 */

#ifndef QCGTOPLEVEL_H
#define QCGTOPLEVEL_H

#include <QElapsedTimer>
#include <QLabel>
#include <QMainWindow>
#include <QStringList>
#include <QString>

#include "logger.h"
#include "traceitemview.h"
#include "tracedata.h"
#include "toplevelbase.h"

class MultiView;
class QDockWidget;
class QLabel;
class QComboBox;
class QProgressBar;
class QMenu;

class TraceData;
class MainWidget;
class PartSelection;
class FunctionSelection;
class StackSelection;
class TraceFunction;

class QCGTopLevel : public QMainWindow, public Logger, public TopLevelBase
{
    Q_OBJECT
    Q_CLASSINFO("D-Bus Interface", "io.github.qcachegrind")

public:
    QCGTopLevel();
    ~QCGTopLevel() override;

    TraceData* data() { return _data; }
    void setData(TraceData*);

    void createActions();
    void createDocks();
    void createMenu();
    void createToolbar();

    void closeEvent(QCloseEvent*) override;

    ProfileContext::Type groupType() { return _groupType; }
    EventType* eventType() { return _eventType; }
    EventType* eventType2() { return _eventType2; }
    TracePartList activeParts() { return _activeParts; }
    TracePartList hiddenParts() override { return _hiddenParts; }

    /* convenience functions for often used context menu items */
    void addEventTypeMenu(QMenu*,bool) override;
    void addGoMenu(QMenu*) override;

    // Logger overwrites: notifications for file loading
    void loadStart(const QString& filename) override;
    void loadProgress(int progress) override; // 0 - 100
    void loadWarning(int line, const QString& msg) override;
    void loadError(int line, const QString& msg) override;
    void loadFinished(const QString& msg) override; // msg could be error

public Q_SLOTS:
    void load();
    void load(QStringList files, bool addToRecentFiles = true);
    void add();
    void add(QStringList files);

    // shows the main window before loading to see loading progress
    void loadDelayed(QString file, bool addToRecentFiles = true);
    void loadDelayed(QStringList files, bool addToRecentFiles = true);

    void exportGraph();
    void newWindow();
    void configure(QString page = QString());
    void about();

    // layouts
    void layoutDuplicate();
    void layoutRemove();
    void layoutNext();
    void layoutPrevious();
    void layoutSave();
    void layoutRestore();
    void updateLayoutActions();

    void updateStatusBar();
    void eventTypeSelected(const QString&);
    void eventType2Selected(const QString&);
    void groupTypeSelected(int);
    void toggleSplitted();
    void toggleSplitDirection();
    void togglePartDock();
    void toggleStackDock();
    void toggleFunctionDock();
    void functionVisibilityChanged(bool);
    void togglePercentage();
    void setPercentage(bool);
    void setAbsoluteCost();
    void setRelativeCost();
    void toggleHideTemplates();
    void toggleExpanded();
    void toggleCycles();
    void recentFilesMenuAboutToShow();
    void recentFilesTriggered(QAction*);
    void sidebarMenuAboutToShow();
    void forwardAboutToShow();
    void forwardTriggered(QAction*);
    void backAboutToShow();
    void backTriggered(QAction*);
    void upAboutToShow();
    void upTriggered(QAction*);
    void primaryAboutToShow();
    void secondaryAboutToShow();
    void groupingAboutToShow();
    void windowListTriggered(QAction*);
    void windowListAboutToShow();
    void macDockMenuAboutToShow();
    void insertWindowList(QMenu*);
    void reinstallMacDock();

    bool setEventType(EventType*);
    bool setEventType2(EventType*);
    bool setEventType(QString);
    bool setEventType2(QString);
    bool setEventType(QAction*);
    bool setEventType2(QAction*);
    bool setGroupType(ProfileContext::Type);
    bool setGroupType(QString);
    bool setGroup(TraceCostItem*);
    bool setGroup(QString);
    bool setFunction(TraceFunction*);
    bool setFunction(QString);
    void activePartsChangedSlot(const TracePartList& list) override;
    void partsHideSelectedSlot();
    void partsUnhideAllSlot();

    /* These go back to mainloop first by using a timer.
   * So they can be called from event handlers that
   * are not allowed to delete list entries.
   */
    void setEventTypeDelayed(EventType*) override;
    void setEventType2Delayed(EventType*) override;
    void setGroupTypeDelayed(ProfileContext::Type) override;
    void setGroupDelayed(TraceCostItem*) override;
    void setTraceItemDelayed(CostItem*) override;
    void partsHideSelectedSlotDelayed();
    void partsUnhideAllSlotDelayed();
    void goBack();
    void goForward();
    void goUp();
    void setDirectionDelayed(TraceItemView::Direction) override;

    /* SingleShot Slots (without parameters) for the delayed versions */
    void setEventTypeDelayed();
    void setEventType2Delayed();
    void setGroupTypeDelayed();
    void setGroupDelayed();
    void setTraceItemDelayed();
    void loadFilesDelayed();
    void setDirectionDelayed();

    // configuration has changed
    void configChanged() override;

    //void refresh();

    // progress in status bar, empty message disables progress display
    void showStatus(const QString& msg, int progress);
    void showMessage(const QString&, int msec) override;

private:
    void resetState();
    void createLayoutActions();
    void createMiscActions();
    void setupMainWidget(MainWidget*);
    void setupPartSelection(PartSelection*);
    void updateEventTypeMenu(QMenu* m, bool secondary);
    void restoreCurrentState(const QString& postfix);
    void saveCurrentState(const QString& postfix);
    void saveTraceSettings();
    QString traceKey();
    void restoreTraceTypes();
    void restoreTraceSettings();

    QStatusBar* _statusbar;
    QLabel* _statusLabel;
    QString _progressMsg;
    QElapsedTimer _progressStart;
    QProgressBar* _progressBar;

    MultiView* _multiView;
    Qt::Orientation _spOrientation;
    bool _twoMainWidgets;
    FunctionSelection* _functionSelection;
    PartSelection* _partSelection;
    StackSelection* _stackSelection;
    QDockWidget *_partDock, *_stackDock, *_functionDock;
    bool _forcePartDock;

    // menu/toolbar actions
    QAction *_newAction, *_openAction, *_addAction, *_reloadAction;
    QAction *_exportAction, *_dumpToggleAction, *_exitAction;
    QAction *_sidebarMenuAction, *_recentFilesMenuAction;
    QAction *_cyclesToggleAction, *_percentageToggleAction;
    QAction *_expandedToggleAction, *_hideTemplatesToggleAction;
    QAction *_primaryMenuAction, *_secondaryMenuAction;
    QAction *_groupingMenuAction, *_closeAction;
    QAction *_splittedToggleAction, *_splitDirectionToggleAction;
    QAction *_layoutNext, *_layoutPrev, *_layoutRemove, *_layoutDup;
    QAction *_layoutRestore, *_layoutSave, *_toolbarToggleAction;
    QAction *_upAction, *_forwardAction, *_backAction;
    QAction *_configureAction, *_aboutAction, *_aboutQtAction;
    QAction *_minimizeAction, *_zoomAction;
    QMenu *windowMenu, *macDockMenu;
    QToolBar *tb;
    QComboBox* _eventTypeBox;

    TraceFunction* _function;
    const QObject* _lastSender;

    // trace data shown in this window
    TraceData* _data;
    // subcost types used for visualization
    EventType* _eventType;
    EventType* _eventType2;
    QStringList _eventTypes;
    // grouping of function list
    ProfileContext::Type _groupType;
    // selected group
    TraceCostItem* _group;
    // selected parts
    TracePartList _activeParts;
    // hidden parts
    TracePartList _hiddenParts;
    // layouts
    int _layoutCurrent, _layoutCount;
    // remember last file directory for new QFileDialogs
    QString _lastFile;

    // for delayed slots
    EventType* _eventTypeDelayed;
    EventType* _eventType2Delayed;
    ProfileContext::Type _groupTypeDelayed;
    TraceCostItem* _groupDelayed;
    CostItem* _traceItemDelayed;
    QStringList _loadFilesDelayed;
    bool _addToRecentFiles;
    TraceItemView::Direction _directionDelayed;
};

#endif // QCGTOPLEVEL_H