forked from Ivasoft/DSView
Update the tool button for windows, fix a but about switching it's status
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include <QFormLayout>
|
||||
#include <QSlider>
|
||||
#include <list>
|
||||
#include <QKeyEvent>
|
||||
#include "../toolbars/titlebar.h"
|
||||
#include "dsdialog.h"
|
||||
#include "../ui/uimanager.h"
|
||||
|
||||
@@ -70,9 +70,9 @@ TitleBar::TitleBar(bool top, QWidget *parent, ITitleParent *titleParent, bool ha
|
||||
lay1->addWidget(_title);
|
||||
|
||||
if (_isTop) {
|
||||
_minimizeButton = new XToolButton(this);
|
||||
_minimizeButton = new QToolButton(this);
|
||||
_minimizeButton->setObjectName("MinimizeButton");
|
||||
_maximizeButton = new XToolButton(this);
|
||||
_maximizeButton = new QToolButton(this);
|
||||
_maximizeButton->setObjectName("MaximizeButton");
|
||||
|
||||
lay1->addWidget(_minimizeButton);
|
||||
@@ -85,7 +85,7 @@ TitleBar::TitleBar(bool top, QWidget *parent, ITitleParent *titleParent, bool ha
|
||||
}
|
||||
|
||||
if (_isTop || _hasClose) {
|
||||
_closeButton= new XToolButton(this);
|
||||
_closeButton= new QToolButton(this);
|
||||
_closeButton->setObjectName("CloseButton");
|
||||
lay1->addWidget(_closeButton);
|
||||
connect(_closeButton, SIGNAL( clicked()), parent, SLOT(close()));
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
#define DSVIEW_PV_TOOLBARS_TITLEBAR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QToolButton>
|
||||
|
||||
#include "../interface/icallbacks.h"
|
||||
#include "../ui/xtoolbutton.h"
|
||||
#include "../ui/uimanager.h"
|
||||
|
||||
|
||||
@@ -94,9 +94,9 @@ protected:
|
||||
void mouseDoubleClickEvent(QMouseEvent *event);
|
||||
|
||||
|
||||
XToolButton *_minimizeButton;
|
||||
XToolButton *_maximizeButton;
|
||||
XToolButton *_closeButton;
|
||||
QToolButton *_minimizeButton;
|
||||
QToolButton *_maximizeButton;
|
||||
QToolButton *_closeButton;
|
||||
QLabel *_title;
|
||||
|
||||
bool _moving;
|
||||
|
||||
@@ -21,29 +21,92 @@
|
||||
|
||||
#include "xtoolbutton.h"
|
||||
#include <QMenu>
|
||||
#include "../log.h"
|
||||
#include <QApplication>
|
||||
#include "../log.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
static int _click_times = 0;
|
||||
static XToolButton *_lst_button = NULL;
|
||||
}
|
||||
|
||||
XToolButton::XToolButton(QWidget *parent)
|
||||
:QToolButton(parent)
|
||||
{
|
||||
|
||||
_menu = NULL;
|
||||
_is_mouse_down = false;
|
||||
}
|
||||
|
||||
void XToolButton::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
|
||||
#ifdef _WIN32
|
||||
if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
QMenu* menu = this->menu();
|
||||
if (menu){
|
||||
QPoint pt = mapToGlobal(rect().bottomLeft());
|
||||
menu->popup(pt);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
_is_mouse_down = true;
|
||||
|
||||
if (_lst_button != this){
|
||||
_click_times = 0;
|
||||
}
|
||||
|
||||
_lst_button = this;
|
||||
|
||||
#ifdef _WIN32
|
||||
_menu = this->menu();
|
||||
if (_menu == NULL){
|
||||
QToolButton::mousePressEvent(event); // is not a popup menu.
|
||||
return;
|
||||
}
|
||||
|
||||
_click_times++;
|
||||
|
||||
if (event->button() != Qt::LeftButton){
|
||||
setCheckable(true);
|
||||
setChecked(false);
|
||||
setCheckable(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_click_times % 2 == 1){
|
||||
setCheckable(true);
|
||||
setChecked(true);
|
||||
QPoint pt = mapToGlobal(rect().bottomLeft());
|
||||
connect(_menu, SIGNAL(aboutToHide()), this, SLOT(onHidePopupMenu()));
|
||||
_menu->popup(pt);
|
||||
}
|
||||
else{
|
||||
setCheckable(true);
|
||||
setChecked(false);
|
||||
setCheckable(false);
|
||||
}
|
||||
|
||||
#else
|
||||
QToolButton::mousePressEvent(event);
|
||||
#endif
|
||||
}
|
||||
|
||||
void XToolButton::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
_is_mouse_down = false;
|
||||
QToolButton::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
void XToolButton::onHidePopupMenu()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
|
||||
setCheckable(true);
|
||||
setChecked(false);
|
||||
setCheckable(false);
|
||||
|
||||
QWidget *widgetUnderMouse = qApp->widgetAt(QCursor::pos());
|
||||
if (widgetUnderMouse != this){
|
||||
_is_mouse_down = false;
|
||||
}
|
||||
|
||||
if (!_is_mouse_down || _lst_button != this){
|
||||
_click_times = 0;
|
||||
}
|
||||
|
||||
if (_menu != NULL){
|
||||
disconnect(_menu, SIGNAL(aboutToHide()), this, SLOT(onHidePopupMenu()));
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -25,16 +25,26 @@
|
||||
#include <QWidget>
|
||||
#include <QToolButton>
|
||||
#include <QMouseEvent>
|
||||
#include <QPoint>
|
||||
|
||||
|
||||
class XToolButton : public QToolButton
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
XToolButton(QWidget *parent = nullptr);
|
||||
|
||||
protected:
|
||||
private:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void mouseReleaseEvent(QMouseEvent *event) override;
|
||||
|
||||
private slots:
|
||||
void onHidePopupMenu();
|
||||
|
||||
private:
|
||||
QMenu *_menu;
|
||||
bool _is_mouse_down;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user