blob: 44f7dd754eaf6c78a7c201d1afe334a7822aeb02 [file] [log] [blame]
/* SPDX-License-Identifier: LGPL-2.1 */
/*
* Copyright (C) 2017 VMware Inc, Yordan Karadzhov <ykaradzhov@vmware.com>
*/
/**
* @file KsMainWindow.hpp
* @brief KernelShark GUI main window.
*/
#ifndef _KS_MAINWINDOW_H
#define _KS_MAINWINDOW_H
// Qt
#include <QMainWindow>
#include <QLocalServer>
// KernelShark
#include "KsTraceViewer.hpp"
#include "KsTraceGraph.hpp"
#include "KsSession.hpp"
#include "KsUtils.hpp"
/**
* The KsMainWindow class provides Main window for the KernelShark GUI.
*/
class KsMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit KsMainWindow(QWidget *parent = nullptr);
~KsMainWindow();
void loadDataFile(const QString &fileName);
void loadSession(const QString &fileName);
/**
* @brief
*
* @param plugin: can be the name of the plugin or the plugin's library
* file (including absolute or relative path).
*/
void registerPlugin(const QString &plugin)
{
_plugins.registerPlugin(plugin);
}
/**
* @brief
*
* @param plugin: can be the name of the plugin or the plugin's library
* file (including absolute path).
*/
void unregisterPlugin(const QString &plugin)
{
_plugins.unregisterPlugin(plugin);
}
void resizeEvent(QResizeEvent* event);
/** Set the Full Screen mode. */
void setFullScreenMode(bool f) {
if ((!isFullScreen() && f) || (isFullScreen() && !f) )
_changeScreenMode();
}
private:
QSplitter _splitter;
/** GUI session. */
KsSession _session;
/** Data Manager. */
KsDataStore _data;
/** Widget for reading and searching in the trace data. */
KsTraceViewer _view;
/** Widget for graphical visualization of the trace data. */
KsTraceGraph _graph;
/** Dual Marker State Machine. */
KsDualMarkerSM _mState;
/** Plugin manager. */
KsPluginManager _plugins;
/** The process used to record trace data. */
QProcess _capture;
/** Local Server used for comunucation with the Capture process. */
QLocalServer _captureLocalServer;
// File menu.
QAction _openAction;
QAction _restorSessionAction;
QAction _importSessionAction;
QAction _exportSessionAction;
QAction _quitAction;
// Filter menu.
QAction _importFilterAction;
QAction _exportFilterAction;
QCheckBox *_graphFilterSyncCBox;
QCheckBox *_listFilterSyncCBox;
QAction _showEventsAction;
QAction _showTasksAction;
QAction _showCPUsAction;
QAction _advanceFilterAction;
QAction _clearAllFilters;
// Plots menu.
QAction _cpuSelectAction;
QAction _taskSelectAction;
// Tools menu.
QAction _pluginsAction;
QAction _captureAction;
QWidgetAction _colorAction;
QWidget _colSlider;
QSlider _colorPhaseSlider;
QAction _fullScreenModeAction;
// Help menu.
QAction _aboutAction;
QAction _contentsAction;
QShortcut _deselectShortcut;
void _open();
void _restorSession();
void _importSession();
void _exportSession();
void _importFilter();
void _exportFilter();
void _listFilterSync(int state);
void _graphFilterSync(int state);
void _showEvents();
void _showTasks();
void _hideTasks();
void _showCPUs();
void _hideCPUs();
void _advancedFiltering();
void _clearFilters();
void _cpuSelect();
void _taskSelect();
void _pluginSelect();
void _record();
void _setColorPhase(int);
void _changeScreenMode();
void _aboutInfo();
void _contents();
void _captureStarted();
void _captureError(QProcess::ProcessError error);
void _readSocket();
void _splitterMoved(int pos, int index);
void _createActions();
void _createMenus();
void _initCapture();
void _updateSession();
inline void _resizeEmpty() {resize(SCREEN_WIDTH * .5, FONT_HEIGHT * 3);}
void _error(const QString &text, const QString &errCode,
bool resize, bool unloadPlugins);
void _deselect();
void _updateFilterMenu();
void _filterSyncCBoxUpdate(kshark_context *kshark_ctx);
private slots:
void _captureFinished(int, QProcess::ExitStatus);
};
#endif // _KS_MAINWINDOW_H