From aa1ddb44ca4e7f19ebba41fdf1b78d2e0aae0c23 Mon Sep 17 00:00:00 2001 From: Victor Zarubkin Date: Thu, 16 Nov 2017 22:32:28 +0300 Subject: [PATCH] #0 [GUI] Styling --- profiler_gui/blocks_graphics_view.cpp | 5 + profiler_gui/default.css | 187 ++++++++++++++++++ profiler_gui/easy_frame_rate_viewer.cpp | 2 +- profiler_gui/globals.cpp | 8 +- profiler_gui/icons/attribution.txt | 55 +++--- profiler_gui/icons/check-disabled.svg | 8 + profiler_gui/icons/check.svg | 8 + profiler_gui/icons/close-white-hover.svg | 12 ++ profiler_gui/icons/close-white.svg | 12 ++ profiler_gui/icons/maximize-white-hover.svg | 10 + profiler_gui/icons/maximize-white.svg | 10 + .../icons/radio-indicator-disabled.svg | 7 + profiler_gui/icons/radio-indicator.svg | 7 + profiler_gui/main.cpp | 11 ++ profiler_gui/main_window.cpp | 66 +++++-- profiler_gui/main_window.h | 9 +- profiler_gui/resources.qrc | 11 +- 17 files changed, 379 insertions(+), 49 deletions(-) create mode 100644 profiler_gui/default.css create mode 100644 profiler_gui/icons/check-disabled.svg create mode 100644 profiler_gui/icons/check.svg create mode 100644 profiler_gui/icons/close-white-hover.svg create mode 100644 profiler_gui/icons/close-white.svg create mode 100644 profiler_gui/icons/maximize-white-hover.svg create mode 100644 profiler_gui/icons/maximize-white.svg create mode 100644 profiler_gui/icons/radio-indicator-disabled.svg create mode 100644 profiler_gui/icons/radio-indicator.svg diff --git a/profiler_gui/blocks_graphics_view.cpp b/profiler_gui/blocks_graphics_view.cpp index 2f9814e..8ea248a 100644 --- a/profiler_gui/blocks_graphics_view.cpp +++ b/profiler_gui/blocks_graphics_view.cpp @@ -1522,6 +1522,7 @@ void EasyGraphicsView::onIdleTimeout() if (widget == nullptr) return; + widget->setObjectName(QStringLiteral("DiagramPopup")); widget->setAttribute(Qt::WA_ShowWithoutActivating, true); widget->setFocusPolicy(Qt::NoFocus); @@ -1529,6 +1530,8 @@ void EasyGraphicsView::onIdleTimeout() if (lay == nullptr) return; + lay->setSpacing(2); + int row = 0; switch (itemDesc.type()) { @@ -2326,6 +2329,7 @@ void EasyThreadNamesWidget::onIdleTimeout() if (widget == nullptr) return; + widget->setObjectName(QStringLiteral("ThreadsPopup")); widget->setAttribute(Qt::WA_ShowWithoutActivating, true); widget->setFocusPolicy(Qt::NoFocus); @@ -2335,6 +2339,7 @@ void EasyThreadNamesWidget::onIdleTimeout() int row = 0; + lay->setSpacing(2); lay->addWidget(new EasyBoldLabel(intersectingItem->threadName(), widget), row, 0, 1, 2, Qt::AlignHCenter); ++row; diff --git a/profiler_gui/default.css b/profiler_gui/default.css new file mode 100644 index 0000000..07cf8ef --- /dev/null +++ b/profiler_gui/default.css @@ -0,0 +1,187 @@ +/********************************** +* * +* Light theme for EasyProfiler. * +* * +***********************************/ + + +/* ****************************************************************************************************************** */ +* { + font-family: "DejaVu Sans"; + font-size: 13px; + color: #606070; +} + +*:disabled { + color: #b0b0c0; +} + + + + + +/* ****************************************************************************************************************** */ +QLineEdit, QPushButton { + height: 24px; + border: 1px solid #cccccc; + background-color: white; +} + +QPushButton { + padding: 2px 5px 2px 5px; +} + +QPushButton:hover { + border: 1px solid #f4a386; + color: #806070; +} + +QPushButton:pressed { + border: 1px solid #d47366; + color: #705060; +} + +/* ****************************************************************************************************************** */ +QMenu { + background-color: white; + padding-top: 4px; + padding-bottom: 4px; +} + +QMenu::item { + height: 22px; + padding: 0 16px 0 25px; + border: 1px solid transparent; /* reserve space for selection border */ +} + +QMenu::item:selected { + border-color: rgba(96, 112, 208, 128); + background: rgba(96, 112, 208, 64); +} + +QMenu::icon { + width: 12px; + height: 12px; + background: none; + border: 1px inset transparent; + padding: 1px; + margin-left: 2px; +} + +QMenu::icon:checked { /* appearance of a 'checked' icon */ + background-color: #dddddd; + border: 1px inset #aaaaaa; +} + +QMenu::separator { + height: 1px; + background: #cccccc; + margin-left: 5px; + margin-right: 5px; +} + +QMenu::indicator { + width: 14px; + height: 14px; + background-color: white; + border: 1px solid #cccccc; + margin-left: 2px; + padding: 1px; +} + +QMenu::indicator:non-exclusive:checked { image: url(":/CheckIndicator"); } +QMenu::indicator:non-exclusive:checked:disabled { image: url(":/CheckIndicatorDisabled"); } + +QMenu::indicator:exclusive { border-radius: 8px; } +QMenu::indicator:exclusive:checked { image: url(":/RadioIndicator"); } +QMenu::indicator:exclusive:checked:disabled { image: url(":/RadioIndicatorDisabled"); } + + + + +/* ****************************************************************************************************************** */ +/*QToolButton { + border: 1px solid transparent; + background: none; + padding: 2px; +} + +QToolButton:hover { + border: 1px solid #cccccc; +} + +QToolButton[popupMode="1"] { + padding-right: 13px; +} + +QToolButton:pressed { + background-color: #808080; +} + +QToolButton::menu-button { + border: none; + border-left: 1px solid transparent; + width: 12px; +} + +QToolButton::menu-button:hover { + border-left: 1px solid #cccccc; + background-color: #bbbbbb; +} + +QToolButton::menu-button:pressed { + border-left: 1px solid #cccccc; + background-color: #808080; +}*/ + + + + + + +/* ****************************************************************************************************************** */ +QHeaderView::section { + height: 28px; + width: 96px; + min-width: 64px; + background: #eeeeee; +} + + + + + +/* ****************************************************************************************************************** */ +QDockWidget QWidget#EasyDockWidgetTitle { + background-color: #666666; +} + +QDockWidget QWidget#EasyDockWidgetTitle QLabel { + color: white; + margin-left: 4px; +} + +QDockWidget QWidget#EasyDockWidgetTitle QPushButton { + background: none; + border: none; + max-height: 12px; + max-width: 12px; + margin-right: 4px; + padding: 0; +} + +QDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton { image: url(":/DockMaximizeWhite"); } +QDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetFloatButton:hover { image: url(":/DockMaximizeWhiteHover"); } +QDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetCloseButton { image: url(":/DockCloseWhite"); } +QDockWidget QWidget#EasyDockWidgetTitle QPushButton#EasyDockWidgetCloseButton:hover { image: url(":/DockCloseWhiteHover"); } + + + +/* ****************************************************************************************************************** */ +QWidget#DiagramPopup, QWidget#ThreadsPopup { + background-color: white; + border: 1px solid #cccccc; +} + + + diff --git a/profiler_gui/easy_frame_rate_viewer.cpp b/profiler_gui/easy_frame_rate_viewer.cpp index 43e3367..3c07af8 100644 --- a/profiler_gui/easy_frame_rate_viewer.cpp +++ b/profiler_gui/easy_frame_rate_viewer.cpp @@ -269,7 +269,7 @@ EasyFrameRateViewer::EasyFrameRateViewer(QWidget* _parent) : Parent(_parent), m_ // Dirty hack for QDockWidget stupid initial size policy :( setFixedHeight(10); // Set very small height to enable appropriate minimum height on the application startup - QTimer::singleShot(100, [this]() + QTimer::singleShot(100, [this] { // Now set appropriate minimum height setMinimumHeight((QFontMetrics(scene()->font()).height() + 3) * 6); diff --git a/profiler_gui/globals.cpp b/profiler_gui/globals.cpp index 9963452..3d73907 100644 --- a/profiler_gui/globals.cpp +++ b/profiler_gui/globals.cpp @@ -104,10 +104,10 @@ namespace profiler_gui { , auto_adjust_histogram_height(true) , display_only_frames_on_histogram(false) , bind_scene_and_tree_expand_status(true) - , bg_font(::profiler_gui::EFont("Helvetica", 10, QFont::Bold)) - , chronometer_font(::profiler_gui::EFont("Helvetica", 16, QFont::Bold)) - , items_font(::profiler_gui::EFont("Helvetica", 10, QFont::Medium)) - , selected_item_font(::profiler_gui::EFont("Helvetica", 10, QFont::Medium)) + , bg_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Bold)) + , chronometer_font(::profiler_gui::EFont("DejaVu Sans", 16, QFont::Bold)) + , items_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Medium)) + , selected_item_font(::profiler_gui::EFont("DejaVu Sans", 10, QFont::Medium)) { } diff --git a/profiler_gui/icons/attribution.txt b/profiler_gui/icons/attribution.txt index 88e12b1..00c05b6 100644 --- a/profiler_gui/icons/attribution.txt +++ b/profiler_gui/icons/attribution.txt @@ -1,24 +1,31 @@ -logo.svg - Icon made by Freepik from www.flaticon.com -off.svg - Icon made by Freepik from www.flaticon.com -open-folder.svg - Icon made by Freepik from www.flaticon.com -open-folder2.svg - Icon made by Freepik from www.flaticon.com -reload-folder2.svg - Icon made by Freepik from www.flaticon.com -reload.svg - Icon made by Freepik from www.flaticon.com -expand.svg - Icon made by Freepik from www.flaticon.com -collapse.svg - Icon made by Freepik from www.flaticon.com -colors.svg - Icon made by Freepik from www.flaticon.com -colors-black.svg - Icon made by Freepik from www.flaticon.com -save.svg - Icon made by Freepik from www.flaticon.com -statistics.svg - Icon made by Freepik from www.flaticon.com -statistics2.svg - Icon made by Freepik from www.flaticon.com -lan.svg - Icon made by Freepik from www.flaticon.com -lan_on.svg - Icon made by Freepik from www.flaticon.com -wifi.svg - Icon made by Freepik from www.flaticon.com -wifi_on.svg - Icon made by Freepik from www.flaticon.com -play.svg - Icon made by Google from www.flaticon.com -stop.svg - Icon made by Google from www.flaticon.com -delete.svg - Icon made by Google from www.flaticon.com -list.svg - Icon made by Freepik from www.flaticon.com -search-prev.svg - Icon made by Freepik from www.flaticon.com -search-next.svg - Icon made by Freepik from www.flaticon.com -settings.svg - Icon made by Freepik from www.flaticon.com \ No newline at end of file +logo.svg - Icon made by Freepik from www.flaticon.com +off.svg - Icon made by Freepik from www.flaticon.com +open-folder.svg - Icon made by Freepik from www.flaticon.com +open-folder2.svg - Icon made by Freepik from www.flaticon.com +reload-folder2.svg - Icon made by Freepik from www.flaticon.com +reload.svg - Icon made by Freepik from www.flaticon.com +expand.svg - Icon made by Freepik from www.flaticon.com +collapse.svg - Icon made by Freepik from www.flaticon.com +colors.svg - Icon made by Freepik from www.flaticon.com +colors-black.svg - Icon made by Freepik from www.flaticon.com +save.svg - Icon made by Freepik from www.flaticon.com +statistics.svg - Icon made by Freepik from www.flaticon.com +statistics2.svg - Icon made by Freepik from www.flaticon.com +lan.svg - Icon made by Freepik from www.flaticon.com +lan_on.svg - Icon made by Freepik from www.flaticon.com +wifi.svg - Icon made by Freepik from www.flaticon.com +wifi_on.svg - Icon made by Freepik from www.flaticon.com +play.svg - Icon made by Google from www.flaticon.com +stop.svg - Icon made by Google from www.flaticon.com +delete.svg - Icon made by Google from www.flaticon.com +list.svg - Icon made by Freepik from www.flaticon.com +search-prev.svg - Icon made by Freepik from www.flaticon.com +search-next.svg - Icon made by Freepik from www.flaticon.com +settings.svg - Icon made by Freepik from www.flaticon.com +check.svg - Icon made by Kirill Kazachek from www.flaticon.com +check-disabled.svg - Icon made by Kirill Kazachek from www.flaticon.com +close-white.svg - Icon made by Cole Bemis from www.flaticon.com +close-white-disabled.svg - Icon made by Cole Bemis from www.flaticon.com +maximize-white.svg - Icon made by Google from www.flaticon.com +maximize-white-disabled.svg - Icon made by Google from www.flaticon.com + diff --git a/profiler_gui/icons/check-disabled.svg b/profiler_gui/icons/check-disabled.svg new file mode 100644 index 0000000..d6d7f1c --- /dev/null +++ b/profiler_gui/icons/check-disabled.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/profiler_gui/icons/check.svg b/profiler_gui/icons/check.svg new file mode 100644 index 0000000..2d88e97 --- /dev/null +++ b/profiler_gui/icons/check.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/profiler_gui/icons/close-white-hover.svg b/profiler_gui/icons/close-white-hover.svg new file mode 100644 index 0000000..2dcade2 --- /dev/null +++ b/profiler_gui/icons/close-white-hover.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/profiler_gui/icons/close-white.svg b/profiler_gui/icons/close-white.svg new file mode 100644 index 0000000..cec4875 --- /dev/null +++ b/profiler_gui/icons/close-white.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/profiler_gui/icons/maximize-white-hover.svg b/profiler_gui/icons/maximize-white-hover.svg new file mode 100644 index 0000000..b294f37 --- /dev/null +++ b/profiler_gui/icons/maximize-white-hover.svg @@ -0,0 +1,10 @@ + + + + + + + diff --git a/profiler_gui/icons/maximize-white.svg b/profiler_gui/icons/maximize-white.svg new file mode 100644 index 0000000..5c299a9 --- /dev/null +++ b/profiler_gui/icons/maximize-white.svg @@ -0,0 +1,10 @@ + + + + + + + diff --git a/profiler_gui/icons/radio-indicator-disabled.svg b/profiler_gui/icons/radio-indicator-disabled.svg new file mode 100644 index 0000000..f667d5d --- /dev/null +++ b/profiler_gui/icons/radio-indicator-disabled.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/profiler_gui/icons/radio-indicator.svg b/profiler_gui/icons/radio-indicator.svg new file mode 100644 index 0000000..52ba580 --- /dev/null +++ b/profiler_gui/icons/radio-indicator.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/profiler_gui/main.cpp b/profiler_gui/main.cpp index e8f7ac2..cad8ac5 100644 --- a/profiler_gui/main.cpp +++ b/profiler_gui/main.cpp @@ -50,6 +50,8 @@ #include #include +#include +#include #include "main_window.h" #include "globals.h" @@ -61,6 +63,15 @@ int main(int argc, char **argv) { QApplication app(argc, argv); + QFile file(":/DefaultTheme"); + if (file.open(QFile::ReadOnly | QFile::Text)) + { + QTextStream in(&file); + QString style = in.readAll(); + if (!style.isEmpty()) + app.setStyleSheet(style); + } + //Instanciate easy globals after QApplication to allow creation of global fonts, and on the main thread to avoid data races EASY_GLOBALS; diff --git a/profiler_gui/main_window.cpp b/profiler_gui/main_window.cpp index f0f164b..dc25cb4 100644 --- a/profiler_gui/main_window.cpp +++ b/profiler_gui/main_window.cpp @@ -64,11 +64,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -134,6 +134,38 @@ inline void clear_stream(std::stringstream& _stream) ////////////////////////////////////////////////////////////////////////// +EasyDockWidget::EasyDockWidget(const QString& title, QWidget* parent) : QDockWidget(title, parent) +{ + auto floatingButton = new QPushButton(); + floatingButton->setObjectName("EasyDockWidgetFloatButton"); + connect(floatingButton, &QPushButton::clicked, [this] { + setFloating(!isFloating()); + }); + + auto closeButton = new QPushButton(); + closeButton->setObjectName("EasyDockWidgetCloseButton"); + connect(closeButton, &QPushButton::clicked, [this] { + close(); + }); + + auto caption = new QWidget(this); + caption->setObjectName("EasyDockWidgetTitle"); + + auto lay = new QHBoxLayout(caption); + lay->setContentsMargins(0, 0, 0, 0); + lay->setSpacing(2); + lay->addWidget(new QLabel(title)); + lay->addStretch(100); + lay->addWidget(floatingButton); + lay->addWidget(closeButton); + + setTitleBarWidget(caption); +} + +EasyDockWidget::~EasyDockWidget() +{ +} + EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastPort(::profiler::DEFAULT_PORT) { { QIcon icon(":/logo"); if (!icon.isNull()) QApplication::setWindowIcon(icon); } @@ -146,7 +178,7 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP setStatusBar(nullptr); - m_graphicsView = new QDockWidget("Diagram", this); + m_graphicsView = new EasyDockWidget("Diagram", this); m_graphicsView->setObjectName("ProfilerGUI_Diagram"); m_graphicsView->setMinimumHeight(50); m_graphicsView->setAllowedAreas(Qt::AllDockWidgetAreas); @@ -154,7 +186,7 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP auto graphicsView = new EasyGraphicsViewWidget(this); m_graphicsView->setWidget(graphicsView); - m_treeWidget = new QDockWidget("Hierarchy", this); + m_treeWidget = new EasyDockWidget("Hierarchy", this); m_treeWidget->setObjectName("ProfilerGUI_Hierarchy"); m_treeWidget->setMinimumHeight(50); m_treeWidget->setAllowedAreas(Qt::AllDockWidgetAreas); @@ -162,7 +194,7 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP auto treeWidget = new EasyHierarchyWidget(this); m_treeWidget->setWidget(treeWidget); - m_fpsViewer = new QDockWidget("FPS Monitor", this); + m_fpsViewer = new EasyDockWidget("FPS Monitor", this); m_fpsViewer->setObjectName("ProfilerGUI_FPS"); m_fpsViewer->setWidget(new EasyFrameRateViewer(this)); m_fpsViewer->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); @@ -173,7 +205,7 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP #if EASY_GUI_USE_DESCRIPTORS_DOCK_WINDOW != 0 auto descTree = new EasyDescWidget(); - m_descTreeWidget = new QDockWidget("Blocks"); + m_descTreeWidget = new EasyDockWidget("Blocks"); m_descTreeWidget->setObjectName("ProfilerGUI_Blocks"); m_descTreeWidget->setMinimumHeight(50); m_descTreeWidget->setAllowedAreas(Qt::AllDockWidgetAreas); @@ -443,12 +475,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP submenu->addSeparator(); auto w = new QWidget(submenu); auto l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Min blocks spacing, px", w), 0, Qt::AlignLeft); auto spinbox = new QSpinBox(w); spinbox->setRange(0, 400); spinbox->setValue(EASY_GLOBALS.blocks_spacing); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onSpacingChange(int))); l->addWidget(spinbox); w->setLayout(l); @@ -458,12 +490,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP w = new QWidget(submenu); l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Min blocks size, px", w), 0, Qt::AlignLeft); spinbox = new QSpinBox(w); spinbox->setRange(1, 400); spinbox->setValue(EASY_GLOBALS.blocks_size_min); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onMinSizeChange(int))); l->addWidget(spinbox); w->setLayout(l); @@ -473,12 +505,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP w = new QWidget(submenu); l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Blocks narrow size, px", w), 0, Qt::AlignLeft); spinbox = new QSpinBox(w); spinbox->setRange(1, 400); spinbox->setValue(EASY_GLOBALS.blocks_narrow_size); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onNarrowSizeChange(int))); l->addWidget(spinbox); w->setLayout(l); @@ -492,12 +524,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP submenu = menu->addMenu("FPS Monitor"); w = new QWidget(submenu); l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Request interval, ms", w), 0, Qt::AlignLeft); spinbox = new QSpinBox(w); spinbox->setRange(1, 600000); spinbox->setValue(EASY_GLOBALS.fps_timer_interval); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onFpsIntervalChange(int))); l->addWidget(spinbox); w->setLayout(l); @@ -507,12 +539,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP w = new QWidget(submenu); l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Max history size", w), 0, Qt::AlignLeft); spinbox = new QSpinBox(w); spinbox->setRange(2, 200); spinbox->setValue(EASY_GLOBALS.max_fps_history); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onFpsHistoryChange(int))); l->addWidget(spinbox); w->setLayout(l); @@ -522,12 +554,12 @@ EasyMainWindow::EasyMainWindow() : Parent(), m_lastAddress("localhost"), m_lastP w = new QWidget(submenu); l = new QHBoxLayout(w); - l->setContentsMargins(33, 1, 1, 1); + l->setContentsMargins(26, 1, 16, 1); l->addWidget(new QLabel("Line width, px", w), 0, Qt::AlignLeft); spinbox = new QSpinBox(w); spinbox->setRange(1, 6); spinbox->setValue(EASY_GLOBALS.fps_widget_line_width); - spinbox->setFixedWidth(50); + spinbox->setFixedWidth(70); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onFpsMonitorLineWidthChange(int))); l->addWidget(spinbox); w->setLayout(l); diff --git a/profiler_gui/main_window.h b/profiler_gui/main_window.h index cb769b8..ff8663b 100644 --- a/profiler_gui/main_window.h +++ b/profiler_gui/main_window.h @@ -60,6 +60,7 @@ #include #include +#include #include #include @@ -78,8 +79,6 @@ #define EASY_GUI_USE_DESCRIPTORS_DOCK_WINDOW 0 -class QDockWidget; - namespace profiler { namespace net { struct EasyProfilerStatus; } } ////////////////////////////////////////////////////////////////////////// @@ -195,6 +194,12 @@ private: ////////////////////////////////////////////////////////////////////////// +struct EasyDockWidget : public QDockWidget +{ + EasyDockWidget(const QString& title, QWidget* parent = nullptr); + virtual ~EasyDockWidget(); +}; + class EasyMainWindow : public QMainWindow { Q_OBJECT diff --git a/profiler_gui/resources.qrc b/profiler_gui/resources.qrc index 5f6fd8a..cde0f98 100644 --- a/profiler_gui/resources.qrc +++ b/profiler_gui/resources.qrc @@ -1,5 +1,6 @@ + default.css icons/logo.svg icons/off.svg icons/open-folder2.svg @@ -24,6 +25,14 @@ icons/list.svg icons/search-next.svg icons/search-prev.svg - icons/settings.svg + icons/settings.svg + icons/check.svg + icons/check-disabled.svg + icons/radio-indicator.svg + icons/radio-indicator-disabled.svg + icons/maximize-white.svg + icons/maximize-white-hover.svg + icons/close-white.svg + icons/close-white-hover.svg