mirror of
https://github.com/yse/easy_profiler.git
synced 2024-12-26 08:01:51 +08:00
[ui] Use RoundProgressDialog instead of QProgressDialog
This commit is contained in:
parent
abcfa4ac47
commit
f547c62182
@ -61,7 +61,6 @@
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QActionGroup>
|
||||
#include <QApplication>
|
||||
@ -72,14 +71,15 @@
|
||||
#include <QHeaderView>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QMenu>
|
||||
#include <QMoveEvent>
|
||||
#include <QProgressDialog>
|
||||
#include <QResizeEvent>
|
||||
#include <QScrollBar>
|
||||
#include <QSettings>
|
||||
#include <QSignalBlocker>
|
||||
#include <QToolBar>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "blocks_tree_widget.h"
|
||||
#include "arbitrary_value_tooltip.h"
|
||||
#include "round_progress_widget.h"
|
||||
@ -370,8 +370,8 @@ BlocksTreeWidget::BlocksTreeWidget(QWidget* _parent)
|
||||
}
|
||||
|
||||
m_hintLabel = new QLabel("Use Right Mouse Button on the Diagram to build a hierarchy...\n"
|
||||
"1. Press the button >> Move mouse >> Release the button\n"
|
||||
"2. Or just click the right mouse button on any block", this);
|
||||
"Way 1: Press the button >> Move mouse >> Release the button\n"
|
||||
"Way 2: Just click the right mouse button on any block", this);
|
||||
m_hintLabel->setObjectName(QStringLiteral("BlocksTreeWidget_HintLabel"));
|
||||
m_hintLabel->setProperty("hovered", false);
|
||||
m_hintLabel->setAlignment(Qt::AlignCenter);
|
||||
@ -464,13 +464,7 @@ bool BlocksTreeWidget::eventFilter(QObject* _object, QEvent* _event)
|
||||
|
||||
void BlocksTreeWidget::updateHintLabelOnHover(bool hover)
|
||||
{
|
||||
m_hintLabel->setProperty("hovered", hover);
|
||||
m_hintLabel->style()->unpolish(m_hintLabel);
|
||||
m_hintLabel->style()->polish(m_hintLabel);
|
||||
if (m_hintLabel->isVisible())
|
||||
{
|
||||
m_hintLabel->update();
|
||||
}
|
||||
profiler_gui::updateProperty(m_hintLabel, "hovered", hover);
|
||||
}
|
||||
|
||||
void BlocksTreeWidget::onHeaderSectionResized(int logicalIndex, int /*oldSize*/, int newSize)
|
||||
@ -1153,9 +1147,7 @@ void BlocksTreeWidget::createProgressDialog()
|
||||
{
|
||||
destroyProgressDialog();
|
||||
|
||||
m_progress = new RoundProgressDialog("Building tree...", this);
|
||||
m_progress->setWindowFlags(Qt::FramelessWindowHint);
|
||||
m_progress->setAttribute(Qt::WA_TranslucentBackground);
|
||||
m_progress = new RoundProgressDialog(QStringLiteral("Building tree..."), this);
|
||||
m_progress->setValue(0);
|
||||
m_progress->show();
|
||||
|
||||
|
@ -55,11 +55,15 @@
|
||||
#ifndef EASY_PROFILER_GUI_COMMON_FUNCTIONS_H
|
||||
#define EASY_PROFILER_GUI_COMMON_FUNCTIONS_H
|
||||
|
||||
#include <QRgb>
|
||||
#include <QString>
|
||||
#include <QFont>
|
||||
#include <stdlib.h>
|
||||
#include <type_traits>
|
||||
|
||||
#include <QFont>
|
||||
#include <QRgb>
|
||||
#include <QString>
|
||||
#include <QStyle>
|
||||
#include <QWidget>
|
||||
|
||||
#include "common_types.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@ -220,6 +224,19 @@ double value2real(const ::profiler::ArbitraryValue& _serializedValue, int _index
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <class T>
|
||||
void updateProperty(QWidget* widget, const char* name, T&& property)
|
||||
{
|
||||
widget->setProperty(name, std::forward<T>(property));
|
||||
widget->style()->unpolish(widget);
|
||||
widget->style()->polish(widget);
|
||||
|
||||
if (widget->isVisible())
|
||||
{
|
||||
widget->update();
|
||||
}
|
||||
}
|
||||
|
||||
} // END of namespace profiler_gui.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -70,6 +70,7 @@
|
||||
namespace profiler_gui {
|
||||
|
||||
const QString ORGANAZATION_NAME = "EasyProfiler";
|
||||
const QString DEFAULT_WINDOW_TITLE = "EasyProfiler";
|
||||
const QString APPLICATION_NAME = "Easy profiler gui application";
|
||||
|
||||
const QColor RULER_COLOR = QColor::fromRgba(0x40000000 | (::profiler::colors::RichBlue & 0x00ffffff));// 0x402020c0);
|
||||
|
@ -85,7 +85,6 @@
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QProgressDialog>
|
||||
#include <QTextCodec>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QTextStream>
|
||||
@ -99,14 +98,16 @@
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidgetAction>
|
||||
|
||||
#include "main_window.h"
|
||||
#include "arbitrary_value_inspector.h"
|
||||
#include "blocks_tree_widget.h"
|
||||
#include "blocks_graphics_view.h"
|
||||
#include "blocks_tree_widget.h"
|
||||
#include "descriptors_tree_widget.h"
|
||||
#include "fps_widget.h"
|
||||
#include "globals.h"
|
||||
#include "dialog.h"
|
||||
#include "globals.h"
|
||||
#include "fps_widget.h"
|
||||
#include "round_progress_widget.h"
|
||||
|
||||
#include "main_window.h"
|
||||
|
||||
#include <easy/easy_net.h>
|
||||
#include <easy/profiler.h>
|
||||
@ -122,8 +123,6 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define EASY_DEFAULT_WINDOW_TITLE "EasyProfiler"
|
||||
|
||||
const int LOADER_TIMER_INTERVAL = 40;
|
||||
const auto NETWORK_CACHE_FILE = "easy_profiler_stream.cache";
|
||||
|
||||
@ -280,10 +279,7 @@ void DockWidget::toggleState()
|
||||
|
||||
void DockWidget::onTopLevelChanged()
|
||||
{
|
||||
m_floatingButton->setProperty("floating", isFloating());
|
||||
m_floatingButton->style()->unpolish(m_floatingButton);
|
||||
m_floatingButton->style()->polish(m_floatingButton);
|
||||
m_floatingButton->update();
|
||||
profiler_gui::updateProperty(m_floatingButton, "floating", isFloating());
|
||||
}
|
||||
|
||||
void MainWindow::configureSizes()
|
||||
@ -347,7 +343,7 @@ MainWindow::MainWindow() : Parent(), m_theme("default"), m_lastAddress("localhos
|
||||
{ QIcon icon(":/images/logo"); if (!icon.isNull()) QApplication::setWindowIcon(icon); }
|
||||
|
||||
setObjectName("ProfilerGUI_MainWindow");
|
||||
setWindowTitle(EASY_DEFAULT_WINDOW_TITLE);
|
||||
setWindowTitle(profiler_gui::DEFAULT_WINDOW_TITLE);
|
||||
setDockNestingEnabled(true);
|
||||
setAcceptDrops(true);
|
||||
setStatusBar(nullptr);
|
||||
@ -1093,9 +1089,9 @@ void MainWindow::addFileToList(const QString& filename, bool changeWindowTitle)
|
||||
if (changeWindowTitle)
|
||||
{
|
||||
if (m_bOpenedCacheFile)
|
||||
setWindowTitle(QString(EASY_DEFAULT_WINDOW_TITLE " - [%1] - UNSAVED network cache file").arg(filename));
|
||||
setWindowTitle(QString("%1 - [%2] - UNSAVED network cache file").arg(profiler_gui::DEFAULT_WINDOW_TITLE).arg(filename));
|
||||
else
|
||||
setWindowTitle(QString(EASY_DEFAULT_WINDOW_TITLE " - [%1]").arg(filename));
|
||||
setWindowTitle(QString("%1 - [%2]").arg(profiler_gui::DEFAULT_WINDOW_TITLE).arg(filename));
|
||||
}
|
||||
|
||||
return;
|
||||
@ -1125,9 +1121,9 @@ void MainWindow::addFileToList(const QString& filename, bool changeWindowTitle)
|
||||
if (changeWindowTitle)
|
||||
{
|
||||
if (m_bOpenedCacheFile)
|
||||
setWindowTitle(QString(EASY_DEFAULT_WINDOW_TITLE " - [%1] - UNSAVED network cache file").arg(m_lastFiles.front()));
|
||||
setWindowTitle(QString("%1 - [%2] - UNSAVED network cache file").arg(profiler_gui::DEFAULT_WINDOW_TITLE).arg(m_lastFiles.front()));
|
||||
else
|
||||
setWindowTitle(QString(EASY_DEFAULT_WINDOW_TITLE " - [%1]").arg(m_lastFiles.front()));
|
||||
setWindowTitle(QString("%1 - [%2]").arg(profiler_gui::DEFAULT_WINDOW_TITLE).arg(m_lastFiles.front()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1325,7 +1321,7 @@ void MainWindow::clear()
|
||||
m_bNetworkFileRegime = false;
|
||||
m_bOpenedCacheFile = false;
|
||||
|
||||
setWindowTitle(EASY_DEFAULT_WINDOW_TITLE);
|
||||
setWindowTitle(profiler_gui::DEFAULT_WINDOW_TITLE);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@ -1567,6 +1563,16 @@ void MainWindow::showEvent(QShowEvent* show_event)
|
||||
configureSizes();
|
||||
}
|
||||
|
||||
void MainWindow::resizeEvent(QResizeEvent* event)
|
||||
{
|
||||
Parent::resizeEvent(event);
|
||||
if (m_progress != nullptr)
|
||||
{
|
||||
const auto pos = rect().center();
|
||||
m_progress->move(pos.x() - (m_progress->width() >> 1), pos.y() - (m_progress->height() >> 1));
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent* close_event)
|
||||
{
|
||||
if (!m_bCloseAfterSave && (m_bNetworkFileRegime || EASY_GLOBALS.has_local_changes))
|
||||
@ -1875,14 +1881,16 @@ void MainWindow::createProgressDialog(const QString& text)
|
||||
{
|
||||
destroyProgressDialog();
|
||||
|
||||
m_progress = new QProgressDialog(text, QStringLiteral("Cancel"), 0, 100, this);
|
||||
connect(m_progress, &QProgressDialog::canceled, this, &This::onFileReaderCancel);
|
||||
m_progress = new RoundProgressDialog(text, this);
|
||||
m_progress->setCancelButtonEnabled(true);
|
||||
connect(m_progress, &RoundProgressDialog::canceled, this, &This::onFileReaderCancel);
|
||||
|
||||
m_progress->setFixedWidth(px(300));
|
||||
m_progress->setWindowTitle(EASY_DEFAULT_WINDOW_TITLE);
|
||||
m_progress->setModal(true);
|
||||
m_progress->setValue(0);
|
||||
m_progress->show();
|
||||
|
||||
const auto pos = rect().center();
|
||||
m_progress->move(pos.x() - (m_progress->width() >> 1), pos.y() - (m_progress->height() >> 1));
|
||||
}
|
||||
|
||||
void MainWindow::setDisconnected(bool _showMessage)
|
||||
@ -2145,7 +2153,7 @@ void MainWindow::onLoadingFinish(profiler::block_index_t& _nblocks)
|
||||
else
|
||||
{
|
||||
m_bOpenedCacheFile = false;
|
||||
setWindowTitle(EASY_DEFAULT_WINDOW_TITLE " - UNSAVED network cache");
|
||||
setWindowTitle(QString("%1 - UNSAVED network cache").arg(profiler_gui::DEFAULT_WINDOW_TITLE));
|
||||
}
|
||||
|
||||
m_serializedBlocks = std::move(serialized_blocks);
|
||||
@ -2878,7 +2886,7 @@ void MainWindow::onSelectValue(profiler::thread_id_t _thread_id, uint32_t _value
|
||||
|
||||
void DialogWithGeometry::create(QWidget* content, QWidget* parent)
|
||||
{
|
||||
ptr = new Dialog(parent, EASY_DEFAULT_WINDOW_TITLE, content, WindowHeader::AllButtons, QMessageBox::NoButton);
|
||||
ptr = new Dialog(parent, profiler_gui::DEFAULT_WINDOW_TITLE, content, WindowHeader::AllButtons, QMessageBox::NoButton);
|
||||
ptr->setProperty("stayVisible", true);
|
||||
ptr->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
}
|
||||
|
@ -66,6 +66,7 @@
|
||||
|
||||
#include <easy/easy_socket.h>
|
||||
#include <easy/reader.h>
|
||||
#include "round_progress_widget.h"
|
||||
|
||||
#ifdef max
|
||||
#undef max
|
||||
@ -273,7 +274,7 @@ protected:
|
||||
QDockWidget* m_descTreeWidget = nullptr;
|
||||
#endif
|
||||
|
||||
class QProgressDialog* m_progress = nullptr;
|
||||
class RoundProgressDialog* m_progress = nullptr;
|
||||
class BlockDescriptorsWidget* m_dialogDescTree = nullptr;
|
||||
class Dialog* m_listenerDialog = nullptr;
|
||||
QTimer m_readerTimer;
|
||||
@ -312,6 +313,7 @@ public:
|
||||
// Public virtual methods
|
||||
|
||||
void showEvent(QShowEvent* event) override;
|
||||
void resizeEvent(QResizeEvent* event) override;
|
||||
void closeEvent(QCloseEvent* close_event) override;
|
||||
void changeEvent(QEvent* event) override;
|
||||
void dragEnterEvent(QDragEnterEvent* drag_event) override;
|
||||
|
@ -48,15 +48,23 @@
|
||||
* : limitations under the License.
|
||||
************************************************************************/
|
||||
|
||||
#include "round_progress_widget.h"
|
||||
#include <math.h>
|
||||
#include <easy/utility.h>
|
||||
|
||||
#include <QFontMetrics>
|
||||
#include <QHBoxLayout>
|
||||
#include <QMouseEvent>
|
||||
#include <QLabel>
|
||||
#include <QPainter>
|
||||
#include <QStyle>
|
||||
#include <QVariant>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include <easy/utility.h>
|
||||
|
||||
#include "common_functions.h"
|
||||
#include "globals.h"
|
||||
#include "round_progress_widget.h"
|
||||
|
||||
#ifdef max
|
||||
# undef max
|
||||
#endif
|
||||
@ -67,9 +75,13 @@ RoundProgressIndicator::RoundProgressIndicator(QWidget* parent)
|
||||
, m_background(Qt::transparent)
|
||||
, m_color(Qt::green)
|
||||
, m_value(0)
|
||||
, m_pressed(false)
|
||||
, m_cancelButtonEnabled(false)
|
||||
{
|
||||
setWindowFlags(Qt::FramelessWindowHint);
|
||||
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
setAutoFillBackground(false);
|
||||
setProperty("hover", false);
|
||||
}
|
||||
|
||||
RoundProgressIndicator::~RoundProgressIndicator()
|
||||
@ -77,6 +89,17 @@ RoundProgressIndicator::~RoundProgressIndicator()
|
||||
|
||||
}
|
||||
|
||||
bool RoundProgressIndicator::cancelButtonEnabled() const
|
||||
{
|
||||
return m_cancelButtonEnabled;
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::setCancelButtonEnabled(bool enabled)
|
||||
{
|
||||
m_cancelButtonEnabled = enabled;
|
||||
update();
|
||||
}
|
||||
|
||||
int RoundProgressIndicator::value() const
|
||||
{
|
||||
return m_value;
|
||||
@ -136,7 +159,7 @@ void RoundProgressIndicator::showEvent(QShowEvent* event)
|
||||
|
||||
const QFontMetrics fm(font());
|
||||
const QString text = QStringLiteral("100%");
|
||||
const int size = std::max(fm.width(text), fm.height()) + 4 * 4;
|
||||
const int size = std::max(fm.width(text), fm.height()) + px(4 * 4);
|
||||
|
||||
setFixedSize(size, size);
|
||||
}
|
||||
@ -147,11 +170,12 @@ void RoundProgressIndicator::paintEvent(QPaintEvent* /*event*/)
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setBrush(Qt::NoBrush);
|
||||
|
||||
const auto r = rect().adjusted(4, 4, -4, -4);
|
||||
const auto px4 = px(4);
|
||||
auto r = rect().adjusted(px4, px4, -px4, -px4);
|
||||
auto p = painter.pen();
|
||||
|
||||
// Draw circle
|
||||
p.setWidth(4);
|
||||
p.setWidth(px4);
|
||||
p.setColor(m_background);
|
||||
painter.setPen(p);
|
||||
painter.drawArc(r, 0, 360 * 16);
|
||||
@ -160,11 +184,87 @@ void RoundProgressIndicator::paintEvent(QPaintEvent* /*event*/)
|
||||
painter.setPen(p);
|
||||
painter.drawArc(r, 90 * 16, -1 * static_cast<int>(m_value) * 16 * 360 / 100);
|
||||
|
||||
// Draw text
|
||||
p.setWidth(1);
|
||||
p.setColor(palette().foreground().color());
|
||||
painter.setPen(p);
|
||||
painter.drawText(r, Qt::AlignCenter, m_text);
|
||||
const bool hover = property("hover").toBool();
|
||||
|
||||
if (hover && m_cancelButtonEnabled)
|
||||
{
|
||||
// Draw cancel button (red cross)
|
||||
|
||||
const auto hquarter = px4 + (r.width() >> 2);
|
||||
const auto vquarter = px4 + (r.height() >> 2);
|
||||
r.adjust(hquarter, vquarter, -hquarter, -vquarter);
|
||||
|
||||
p.setWidth(px(2));
|
||||
p.setColor(QColor::fromRgb(m_pressed ? profiler::colors::Red900 : profiler::colors::Red500));
|
||||
p.setCapStyle(Qt::SquareCap);
|
||||
|
||||
painter.setPen(p);
|
||||
painter.setBrush(Qt::NoBrush);
|
||||
painter.drawLine(r.topLeft(), r.bottomRight());
|
||||
painter.drawLine(r.bottomLeft(), r.topRight());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw text
|
||||
p.setWidth(px(1));
|
||||
p.setColor(palette().foreground().color());
|
||||
painter.setPen(p);
|
||||
painter.drawText(r, Qt::AlignCenter, m_text);
|
||||
}
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::enterEvent(QEvent* event) {
|
||||
Parent::enterEvent(event);
|
||||
profiler_gui::updateProperty(this, "hover", true);
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::leaveEvent(QEvent* event) {
|
||||
Parent::leaveEvent(event);
|
||||
profiler_gui::updateProperty(this, "hover", false);
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::mousePressEvent(QMouseEvent* event)
|
||||
{
|
||||
Parent::mousePressEvent(event);
|
||||
m_pressed = true;
|
||||
update();
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
Parent::mouseReleaseEvent(event);
|
||||
|
||||
const bool hover = property("hover").toBool();
|
||||
const bool pressed = m_pressed;
|
||||
|
||||
m_pressed = false;
|
||||
update();
|
||||
|
||||
if (pressed && hover && m_cancelButtonEnabled)
|
||||
{
|
||||
emit cancelButtonClicked();
|
||||
}
|
||||
}
|
||||
|
||||
void RoundProgressIndicator::mouseMoveEvent(QMouseEvent* event)
|
||||
{
|
||||
if (m_pressed)
|
||||
{
|
||||
const bool hover = property("hover").toBool();
|
||||
if (rect().contains(event->pos()))
|
||||
{
|
||||
if (!hover)
|
||||
{
|
||||
profiler_gui::updateProperty(this, "hover", true);
|
||||
}
|
||||
}
|
||||
else if (hover)
|
||||
{
|
||||
profiler_gui::updateProperty(this, "hover", false);
|
||||
}
|
||||
}
|
||||
|
||||
Parent::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
RoundProgressWidget::RoundProgressWidget(QWidget* parent)
|
||||
@ -179,11 +279,9 @@ RoundProgressWidget::RoundProgressWidget(const QString& title, QWidget* parent)
|
||||
, m_indicator(new RoundProgressIndicator(this))
|
||||
, m_titlePosition(RoundProgressWidget::Top)
|
||||
{
|
||||
setWindowFlags(Qt::FramelessWindowHint);
|
||||
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
|
||||
m_indicatorWrapper->setWindowFlags(Qt::FramelessWindowHint);
|
||||
m_indicatorWrapper->setAttribute(Qt::WA_TranslucentBackground);
|
||||
setAutoFillBackground(false);
|
||||
|
||||
auto wlay = new QHBoxLayout(m_indicatorWrapper);
|
||||
wlay->setContentsMargins(0, 0, 0, 0);
|
||||
@ -192,6 +290,8 @@ RoundProgressWidget::RoundProgressWidget(const QString& title, QWidget* parent)
|
||||
auto lay = new QVBoxLayout(this);
|
||||
lay->addWidget(m_title);
|
||||
lay->addWidget(m_indicatorWrapper);
|
||||
|
||||
connect(m_indicator, &RoundProgressIndicator::cancelButtonClicked, this, &RoundProgressWidget::canceled);
|
||||
}
|
||||
|
||||
RoundProgressWidget::~RoundProgressWidget()
|
||||
@ -262,6 +362,8 @@ void RoundProgressWidget::setTitlePosition(TitlePosition pos)
|
||||
}
|
||||
|
||||
emit titlePositionChanged();
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
bool RoundProgressWidget::isTopTitlePosition() const
|
||||
@ -274,12 +376,32 @@ void RoundProgressWidget::setTopTitlePosition(bool isTop)
|
||||
setTitlePosition(isTop ? RoundProgressWidget::Top : RoundProgressWidget::Bottom);
|
||||
}
|
||||
|
||||
bool RoundProgressWidget::cancelButtonEnabled() const
|
||||
{
|
||||
return m_indicator->cancelButtonEnabled();
|
||||
}
|
||||
|
||||
void RoundProgressWidget::setCancelButtonEnabled(bool enabled)
|
||||
{
|
||||
m_indicator->setCancelButtonEnabled(enabled);
|
||||
}
|
||||
|
||||
RoundProgressDialog::RoundProgressDialog(const QString& title, QWidget* parent)
|
||||
: Parent(parent)
|
||||
, m_progress(new RoundProgressWidget(title, this))
|
||||
, m_background(Qt::transparent)
|
||||
{
|
||||
setWindowTitle(profiler_gui::DEFAULT_WINDOW_TITLE);
|
||||
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
setAutoFillBackground(false);
|
||||
|
||||
auto lay = new QVBoxLayout(this);
|
||||
lay->addWidget(m_progress);
|
||||
|
||||
connect(m_progress, &RoundProgressWidget::valueChanged, this, &RoundProgressDialog::valueChanged);
|
||||
connect(m_progress, &RoundProgressWidget::finished, this, &RoundProgressDialog::finished);
|
||||
connect(m_progress, &RoundProgressWidget::canceled, this, &RoundProgressDialog::canceled);
|
||||
}
|
||||
|
||||
RoundProgressDialog::~RoundProgressDialog()
|
||||
@ -287,6 +409,33 @@ RoundProgressDialog::~RoundProgressDialog()
|
||||
|
||||
}
|
||||
|
||||
QColor RoundProgressDialog::background() const
|
||||
{
|
||||
return m_background;
|
||||
}
|
||||
|
||||
void RoundProgressDialog::setBackground(QColor color)
|
||||
{
|
||||
m_background = std::move(color);
|
||||
update();
|
||||
}
|
||||
|
||||
void RoundProgressDialog::setBackground(QString color)
|
||||
{
|
||||
m_background.setNamedColor(color);
|
||||
update();
|
||||
}
|
||||
|
||||
bool RoundProgressDialog::cancelButtonEnabled() const
|
||||
{
|
||||
return m_progress->cancelButtonEnabled();
|
||||
}
|
||||
|
||||
void RoundProgressDialog::setCancelButtonEnabled(bool enabled)
|
||||
{
|
||||
m_progress->setCancelButtonEnabled(enabled);
|
||||
}
|
||||
|
||||
void RoundProgressDialog::showEvent(QShowEvent* event)
|
||||
{
|
||||
Parent::showEvent(event);
|
||||
@ -299,3 +448,12 @@ void RoundProgressDialog::setValue(int value)
|
||||
if (value == 100)
|
||||
hide();
|
||||
}
|
||||
|
||||
void RoundProgressDialog::paintEvent(QPaintEvent*)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setBrush(m_background);
|
||||
painter.drawRect(0, 0, width(), height());
|
||||
}
|
||||
|
@ -53,8 +53,8 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <QColor>
|
||||
#include <QWidget>
|
||||
#include <QDialog>
|
||||
#include <QWidget>
|
||||
|
||||
class RoundProgressIndicator : public QWidget
|
||||
{
|
||||
@ -63,10 +63,12 @@ Q_OBJECT
|
||||
using Parent = QWidget;
|
||||
using This = RoundProgressIndicator;
|
||||
|
||||
QString m_text;
|
||||
QColor m_background;
|
||||
QColor m_color;
|
||||
int8_t m_value;
|
||||
QString m_text;
|
||||
QColor m_background;
|
||||
QColor m_color;
|
||||
int8_t m_value;
|
||||
bool m_pressed;
|
||||
bool m_cancelButtonEnabled;
|
||||
|
||||
public:
|
||||
|
||||
@ -83,6 +85,13 @@ public:
|
||||
QColor background() const;
|
||||
QColor color() const;
|
||||
|
||||
bool cancelButtonEnabled() const;
|
||||
void setCancelButtonEnabled(bool enabled);
|
||||
|
||||
signals:
|
||||
|
||||
void cancelButtonClicked();
|
||||
|
||||
public slots:
|
||||
|
||||
void setBackground(QColor color);
|
||||
@ -94,6 +103,11 @@ protected:
|
||||
|
||||
void showEvent(QShowEvent* event) override;
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
void enterEvent(QEvent* event) override;
|
||||
void leaveEvent(QEvent* event) override;
|
||||
void mousePressEvent(QMouseEvent* event) override;
|
||||
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||
void mouseMoveEvent(QMouseEvent* event) override;
|
||||
|
||||
}; // end of class RoundProgressIndicator.
|
||||
|
||||
@ -132,6 +146,9 @@ public:
|
||||
TitlePosition titlePosition() const;
|
||||
bool isTopTitlePosition() const;
|
||||
|
||||
bool cancelButtonEnabled() const;
|
||||
void setCancelButtonEnabled(bool enabled);
|
||||
|
||||
public slots:
|
||||
|
||||
void setValue(int value);
|
||||
@ -144,6 +161,7 @@ signals:
|
||||
void valueChanged(int value);
|
||||
void finished();
|
||||
void titlePositionChanged();
|
||||
void canceled();
|
||||
|
||||
}; // end of class RoundProgressWidget.
|
||||
|
||||
@ -155,20 +173,37 @@ class RoundProgressDialog : public QDialog
|
||||
using This = RoundProgressDialog;
|
||||
|
||||
RoundProgressWidget* m_progress;
|
||||
QColor m_background;
|
||||
|
||||
public:
|
||||
|
||||
Q_PROPERTY(QColor background READ background WRITE setBackground);
|
||||
|
||||
explicit RoundProgressDialog(const QString& title, QWidget* parent = nullptr);
|
||||
~RoundProgressDialog() override;
|
||||
|
||||
QColor background() const;
|
||||
|
||||
bool cancelButtonEnabled() const;
|
||||
void setCancelButtonEnabled(bool enabled);
|
||||
|
||||
protected:
|
||||
|
||||
void showEvent(QShowEvent* event) override;
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
|
||||
public slots:
|
||||
|
||||
void setBackground(QColor color);
|
||||
void setBackground(QString color);
|
||||
void setValue(int value);
|
||||
|
||||
signals:
|
||||
|
||||
void valueChanged(int value);
|
||||
void finished();
|
||||
void canceled();
|
||||
|
||||
}; // end of RoundProgressDialog.
|
||||
|
||||
#endif // ROUND_PROGRESS_WIDGET_H
|
||||
|
@ -18,7 +18,10 @@ RoundProgressIndicator {
|
||||
qproperty-color: #3297FD;
|
||||
qproperty-background: #c4c4c4;
|
||||
background: transparent; }
|
||||
|
||||
|
||||
RoundProgressDialog {
|
||||
qproperty-background: rgba(255, 255, 255, 70%); }
|
||||
|
||||
MainWindow, QToolBar, QDialog {
|
||||
background-color: white; }
|
||||
|
||||
@ -305,9 +308,9 @@ QMenu::indicator:exclusive:checked:disabled {
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QHeaderView::section {
|
||||
height: 15.3ex;
|
||||
min-height: 15.3ex;
|
||||
max-height: 15.3ex;
|
||||
height: 15ex;
|
||||
min-height: 15ex;
|
||||
max-height: 15ex;
|
||||
background: #eeeeee;
|
||||
/*{lin}font-weight: bold;*/ }
|
||||
|
||||
|
@ -64,6 +64,10 @@ RoundProgressIndicator {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
RoundProgressDialog {
|
||||
qproperty-background: rgba(255, 255, 255, 70%);
|
||||
}
|
||||
|
||||
MainWindow, QToolBar, QDialog {
|
||||
background-color: $BackgroundColor;
|
||||
}
|
||||
@ -411,9 +415,9 @@ QMenu::indicator:exclusive:checked:disabled {
|
||||
|
||||
/* ****************************************************************************************************************** */
|
||||
QHeaderView::section {
|
||||
height: 15.3ex;
|
||||
min-height: 15.3ex;
|
||||
max-height: 15.3ex;
|
||||
height: $InputHeight;
|
||||
min-height: $InputHeight;
|
||||
max-height: $InputHeight;
|
||||
background: #eeeeee;
|
||||
/*{lin}font-weight: bold;*/
|
||||
}
|
||||
|
@ -195,10 +195,7 @@ void WindowHeader::onWindowStateChanged()
|
||||
{
|
||||
if (m_maximizeButton != nullptr)
|
||||
{
|
||||
m_maximizeButton->setProperty("max", parentWidget()->isMaximized());
|
||||
m_maximizeButton->style()->unpolish(m_maximizeButton);
|
||||
m_maximizeButton->style()->polish(m_maximizeButton);
|
||||
m_maximizeButton->update();
|
||||
profiler_gui::updateProperty(m_maximizeButton, "max", parentWidget()->isMaximized());
|
||||
setButtonSize(m_maximizeButton, height());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user