version 2.20
icon change EDockWidget improvements EMainWindow small refactoring Graphic now remember last loaded graphics style and restore it on setGraphicsCount
This commit is contained in:
@@ -6,6 +6,27 @@
|
||||
#include <QStyle>
|
||||
|
||||
|
||||
EDockWidget::EDockWidget(const QString & title, QWidget * parent, Qt::WindowFlags flags): QDockWidget(title, parent, flags) {
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
EDockWidget::EDockWidget(QWidget * parent, Qt::WindowFlags flags): QDockWidget(parent, flags) {
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
EDockWidget::~EDockWidget() {
|
||||
delete btn_hide;
|
||||
delete btn_dock;
|
||||
delete btn_maximize;
|
||||
delete lbl_title;
|
||||
delete lbl_icon;
|
||||
delete header;
|
||||
delete empty_header;
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::setFeatures(QDockWidget::DockWidgetFeatures features) {
|
||||
btn_dock->setVisible(features.testFlag(DockWidgetFloatable));
|
||||
btn_hide->setVisible(features.testFlag(DockWidgetClosable));
|
||||
@@ -31,6 +52,16 @@ void EDockWidget::setWindowIcon(const QIcon & icon) {
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::setEmptyHeader() {
|
||||
if (titleBarWidget() != empty_header) setTitleBarWidget(empty_header);
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::setStandardHeader() {
|
||||
if (titleBarWidget() != header) setTitleBarWidget(header);
|
||||
}
|
||||
|
||||
|
||||
bool EDockWidget::event(QEvent * e) {
|
||||
if (e->type() == QEvent::FontChange || e->type() == QEvent::Polish) {
|
||||
updateStyle();
|
||||
@@ -39,9 +70,19 @@ bool EDockWidget::event(QEvent * e) {
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::changeEvent(QEvent * e) {
|
||||
if (e->type() == QEvent::WindowStateChange || e->type() == QEvent::LanguageChange) {
|
||||
updateStyle();
|
||||
}
|
||||
QDockWidget::changeEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::init() {
|
||||
header = new QFrame();
|
||||
header->setFrameShape(QFrame::StyledPanel);
|
||||
empty_header = new QWidget();
|
||||
empty_header->setLayout(new QBoxLayout(QBoxLayout::BottomToTop));
|
||||
QBoxLayout * lay =
|
||||
new QBoxLayout(features().testFlag(QDockWidget::DockWidgetVerticalTitleBar) ? QBoxLayout::TopToBottom : QBoxLayout::LeftToRight);
|
||||
lay->setContentsMargins(2, 2, 2, 2);
|
||||
@@ -62,38 +103,62 @@ void EDockWidget::init() {
|
||||
// #endif
|
||||
lbl_title = new QLabel(windowTitle());
|
||||
lbl_title->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
btn_dock = new QToolButton();
|
||||
// btn_dock->setIconSize(QSize(16, 16));
|
||||
btn_dock->setAutoRaise(true);
|
||||
btn_dock->setFocusPolicy(Qt::NoFocus);
|
||||
btn_dock->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
btn_hide = new QToolButton();
|
||||
// btn_hide->setIconSize(QSize(16, 16));
|
||||
btn_hide->setAutoRaise(true);
|
||||
btn_hide->setFocusPolicy(Qt::NoFocus);
|
||||
btn_hide->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
connect(btn_dock, SIGNAL(clicked(bool)), this, SLOT(dockClicked()));
|
||||
connect(btn_hide, SIGNAL(clicked(bool)), this, SLOT(hide()));
|
||||
auto createButton = [this](const char * slot) {
|
||||
auto * ret = new QToolButton();
|
||||
ret->setAutoRaise(true);
|
||||
ret->setFocusPolicy(Qt::NoFocus);
|
||||
ret->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
// ret->setIconSize(QSize(16, 16));
|
||||
connect(ret, SIGNAL(clicked(bool)), this, slot);
|
||||
return ret;
|
||||
};
|
||||
btn_dock = createButton(SLOT(dockClicked()));
|
||||
btn_maximize = createButton(SLOT(maximize()));
|
||||
btn_hide = createButton(SLOT(hide()));
|
||||
lay->addWidget(lbl_icon);
|
||||
lay->addWidget(lbl_title);
|
||||
lay->addWidget(btn_dock);
|
||||
lay->addWidget(btn_maximize);
|
||||
lay->addWidget(btn_hide);
|
||||
header->setLayout(lay);
|
||||
updateStyle();
|
||||
setTitleBarWidget(header);
|
||||
connect(this, &QDockWidget::topLevelChanged, this, &EDockWidget::updateStyle);
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::updateStyle() {
|
||||
int eh_m = style()->pixelMetric(QStyle::PM_DockWidgetTitleMargin);
|
||||
empty_header->layout()->setContentsMargins(eh_m, eh_m, 0, 0);
|
||||
QSize icon_size = preferredIconSize(0.75, this);
|
||||
int bm = 2 * style()->pixelMetric(QStyle::PM_DockWidgetTitleBarButtonMargin, 0, this);
|
||||
QSize btn_size = icon_size;
|
||||
btn_size += QSize(bm, bm);
|
||||
btn_dock->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton));
|
||||
btn_dock->setIconSize(icon_size);
|
||||
btn_dock->setFixedSize(btn_size);
|
||||
btn_hide->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
|
||||
btn_hide->setIconSize(icon_size);
|
||||
btn_hide->setFixedSize(btn_size);
|
||||
lbl_icon->setFixedSize(preferredIconSize(1.5, this));
|
||||
auto restyleButton = [this, icon_size, btn_size](QToolButton * btn, QStyle::StandardPixmap pm) {
|
||||
btn->setIcon(style()->standardIcon(pm));
|
||||
btn->setIconSize(icon_size);
|
||||
btn->setFixedSize(btn_size);
|
||||
};
|
||||
restyleButton(btn_dock, isFloating() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton);
|
||||
restyleButton(btn_maximize, isMaximized() ? QStyle::SP_TitleBarNormalButton : QStyle::SP_TitleBarMaxButton);
|
||||
restyleButton(btn_hide, QStyle::SP_TitleBarCloseButton);
|
||||
btn_dock->setToolTip(isFloating() ? tr("Dock") : tr("Undock"));
|
||||
btn_maximize->setToolTip(isMaximized() ? tr("Show normal") : tr("Maximize"));
|
||||
btn_hide->setToolTip(tr("Hide"));
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::dockClicked() {
|
||||
if (!isFloating() && isMaximized()) showNormal();
|
||||
setFloating(!isFloating());
|
||||
}
|
||||
|
||||
|
||||
void EDockWidget::maximize() {
|
||||
if (!isFloating()) setFloating(true);
|
||||
if (isMaximized())
|
||||
showNormal();
|
||||
else
|
||||
showMaximized();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user