2
0
forked from Ivasoft/DSView

adjust interface style at macos

This commit is contained in:
dreamsourcelabTAI
2021-11-24 14:41:25 +08:00
parent f85170e93f
commit 55ef4298cf
6 changed files with 115 additions and 86 deletions

View File

@@ -26,53 +26,60 @@
#include "../device/devinst.h" #include "../device/devinst.h"
#include "../device/file.h" #include "../device/file.h"
#include <assert.h> #include <assert.h>
#include <QStyleOption> #include <QStyleOption>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainter> #include <QPainter>
#include <QRect> #include <QRect>
#include <QDebug> #include <QDebug>
#include <QHBoxLayout>
#include "../config/appconfig.h" #include "../config/appconfig.h"
#include "../ui/msgbox.h" #include "../ui/msgbox.h"
namespace pv { namespace pv {
namespace view { namespace view {
DevMode::DevMode(QWidget *parent, SigSession *session) : DevMode::DevMode(QWidget *parent, SigSession *session) :
QWidget(parent), QWidget(parent),
_session(session) _session(session)
{ {
_layout = new QHBoxLayout(this); _bFile = false;
_layout->setSpacing(0);
_layout->setContentsMargins(2, 0, 0, 0);
_close_button = new QToolButton(this); QHBoxLayout *layout = new QHBoxLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(2, 0, 0, 0);
_close_button = new QToolButton();
_close_button->setObjectName("FileCloseButton"); _close_button->setObjectName("FileCloseButton");
_close_button->setContentsMargins(0, 0, 0, 0); _close_button->setContentsMargins(0, 0, 0, 0);
_close_button->setFixedWidth(10); _close_button->setFixedWidth(10);
_close_button->setFixedHeight(height()); _close_button->setFixedHeight(height());
_close_button->setIconSize(QSize(10, 10)); _close_button->setIconSize(QSize(10, 10));
_close_button->setToolButtonStyle(Qt::ToolButtonIconOnly); _close_button->setToolButtonStyle(Qt::ToolButtonIconOnly);
_close_button->setMinimumWidth(10);
_pop_menu = new QMenu(this); _mode_btn = new QToolButton();
_mode_btn = new QToolButton(this);
_mode_btn->setObjectName("ModeButton"); _mode_btn->setObjectName("ModeButton");
_mode_btn->setIconSize(QSize(height()*2, height())); _mode_btn->setIconSize(QSize(height() * 1.5, height()));
_mode_btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); _mode_btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
_mode_btn->setContentsMargins(0, 0, 1000, 0); _mode_btn->setContentsMargins(0, 0, 0, 0);
_mode_btn->setMenu(_pop_menu);
_mode_btn->setPopupMode(QToolButton::InstantPopup); _mode_btn->setPopupMode(QToolButton::InstantPopup);
_mode_btn->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum); _mode_btn->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
_layout->addWidget(_close_button); // _mode_btn->setArrowType(Qt::NoArrow);
_layout->addWidget(_mode_btn);
_layout->setStretch(1, 100); _pop_menu = new QMenu(this);
setLayout(_layout); _pop_menu->setContentsMargins(15,0,0,0);
_mode_btn->setMenu(_pop_menu);
layout->addWidget(_close_button);
layout->addWidget(_mode_btn);
layout->setStretch(1, 100);
setLayout(layout);
connect(_close_button, SIGNAL(clicked()), this, SLOT(on_close()));
} }
@@ -89,7 +96,10 @@ void DevMode::set_device()
{ {
DevInst* dev_inst = _session->get_device(); DevInst* dev_inst = _session->get_device();
assert(dev_inst); assert(dev_inst);
_bFile = false;
//remove all action object
for(std::map<QAction *, const sr_dev_mode *>::const_iterator i = _mode_list.begin(); for(std::map<QAction *, const sr_dev_mode *>::const_iterator i = _mode_list.begin();
i != _mode_list.end(); i++) { i != _mode_list.end(); i++) {
(*i).first->setParent(NULL); (*i).first->setParent(NULL);
@@ -97,53 +107,54 @@ void DevMode::set_device()
delete (*i).first; delete (*i).first;
} }
_mode_list.clear(); _mode_list.clear();
_close_button->setIcon(QIcon()); _close_button->setIcon(QIcon());
_close_button->setDisabled(true); _close_button->setDisabled(true);
disconnect(_close_button, SIGNAL(clicked()), this, SLOT(on_close()));
AppConfig &app = AppConfig::Instance(); AppConfig &app = AppConfig::Instance();
int lan = app._frameOptions.language; int lan = app._frameOptions.language;
if (true) { QString iconPath = GetIconPath() + "/";
QString iconPath = GetIconPath() + "/";
for (const GSList *l = dev_inst->get_dev_mode_list(); for (const GSList *l = dev_inst->get_dev_mode_list(); l; l = l->next)
l; l = l->next) { {
const sr_dev_mode *mode = (const sr_dev_mode *)l->data; const sr_dev_mode *mode = (const sr_dev_mode *)l->data;
QString icon_name = QString::fromLocal8Bit(mode->icon); QString icon_name = QString::fromLocal8Bit(mode->icon);
QAction *action = new QAction(this); QAction *action = new QAction(this);
action->setIcon(QIcon(iconPath+"square-"+icon_name)); action->setIcon(QIcon(iconPath + "square-" + icon_name));
if (lan == LAN_CN)
action->setText(mode->name_cn);
else
action->setText(mode->name);
connect(action, SIGNAL(triggered()), this, SLOT(on_mode_change()));
_mode_list[action] = mode;
if (dev_inst->dev_inst()->mode == _mode_list[action]->mode)
{
QString icon_fname = iconPath + icon_name;
_mode_btn->setIcon(QIcon(icon_fname));
if (lan == LAN_CN) if (lan == LAN_CN)
action->setText(mode->name_cn); _mode_btn->setText(mode->name_cn);
else else
action->setText(mode->name); _mode_btn->setText(mode->name);
connect(action, SIGNAL(triggered()), this, SLOT(on_mode_change()));
_mode_list[action] = mode;
if (dev_inst->dev_inst()->mode == _mode_list[action]->mode) {
QString icon_fname = iconPath + icon_name;
_mode_btn->setIcon(QIcon(icon_fname));
if (lan== LAN_CN)
_mode_btn->setText(mode->name_cn);
else
_mode_btn->setText(mode->name);
}
_pop_menu->addAction(action);
}
File *file_dev;
if((file_dev = dynamic_cast<File*>(dev_inst))) {
_close_button->setDisabled(false);
_close_button->setIcon(QIcon(iconPath+"/close.svg"));
connect(_close_button, SIGNAL(clicked()), this, SLOT(on_close()));
} }
_pop_menu->addAction(action);
} }
if ((dynamic_cast<File *>(dev_inst)))
{
_close_button->setDisabled(false);
_close_button->setIcon(QIcon(iconPath + "/close.svg"));
_bFile = true;
}
update(); update();
} }
void DevMode::paintEvent(QPaintEvent*) void DevMode::paintEvent(QPaintEvent*)
{ {
using pv::view::Trace; using pv::view::Trace;
QStyleOption o; QStyleOption o;
@@ -164,8 +175,8 @@ void DevMode::on_mode_change()
AppConfig &app = AppConfig::Instance(); AppConfig &app = AppConfig::Instance();
int lan = app._frameOptions.language; int lan = app._frameOptions.language;
for(std::map<QAction *, const sr_dev_mode *>::const_iterator i = _mode_list.begin(); for(auto i = _mode_list.begin();i != _mode_list.end(); i++)
i != _mode_list.end(); i++) { {
if ((*i).first == action) { if ((*i).first == action) {
if (dev_inst->dev_inst()->mode != (*i).second->mode) { if (dev_inst->dev_inst()->mode != (*i).second->mode) {
_session->set_run_mode(SigSession::Single); _session->set_run_mode(SigSession::Single);
@@ -186,6 +197,8 @@ void DevMode::on_mode_change()
_mode_btn->setText((*i).second->name); _mode_btn->setText((*i).second->name);
dev_changed(false); dev_changed(false);
} }
break;
} }
} }
} }
@@ -195,7 +208,7 @@ void DevMode::on_close()
DevInst *dev_inst = _session->get_device(); DevInst *dev_inst = _session->get_device();
assert(dev_inst); assert(dev_inst);
if (MsgBox::Confirm("are you sure to close the device?")){ if (_bFile && MsgBox::Confirm("are you sure to close the device?")){
_session->close_file(dev_inst); _session->close_file(dev_inst);
dev_changed(true); dev_changed(true);
} }

View File

@@ -30,13 +30,12 @@
#include <QWidget> #include <QWidget>
#include <QPushButton> #include <QPushButton>
#include <QHBoxLayout>
#include <QVector> #include <QVector>
#include <QToolButton> #include <QToolButton>
#include <QLabel> #include <QLabel>
#include <libsigrok4DSL/libsigrok.h> #include <libsigrok4DSL/libsigrok.h>
namespace pv { namespace pv {
namespace device{ namespace device{
@@ -81,13 +80,12 @@ signals:
private: private:
SigSession *_session; SigSession *_session;
QHBoxLayout * _layout;
std::map <QAction *, const sr_dev_mode *> _mode_list; std::map <QAction *, const sr_dev_mode *> _mode_list;
QToolButton *_mode_btn; QToolButton *_mode_btn;
QMenu *_pop_menu; QMenu *_pop_menu;
QPoint _mouse_point; QPoint _mouse_point;
QToolButton *_close_button; QToolButton *_close_button;
bool _bFile;
}; };
} // namespace view } // namespace view

View File

@@ -922,12 +922,11 @@ void View::data_updated()
void View::update_margins() void View::update_margins()
{ {
_ruler->setGeometry(_viewcenter->x(), 0, _ruler->setGeometry(_viewcenter->x(), 0, get_view_width(), _viewcenter->y());
get_view_width(), _viewcenter->y());
_header->setGeometry(0, _viewcenter->y(), _header->setGeometry(0, _viewcenter->y(), _viewcenter->x(), _viewcenter->height());
_viewcenter->x(), _viewcenter->height());
_devmode->setGeometry(0, 0, _devmode->setGeometry(0, 0, _viewcenter->x(), _viewcenter->y());
_viewcenter->x(), _viewcenter->y());
} }
void View::header_updated() void View::header_updated()

View File

@@ -1279,25 +1279,35 @@ QToolButton::menu-arrow:open
QToolButton#ModeButton::menu-arrow QToolButton#ModeButton::menu-arrow
{ {
image: url(:/dark/mode_down_arrow.svg); /* image: url(:/dark/mode_down_arrow.svg);*/
image:none;
} }
/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */ /* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */
QToolButton::menu-indicator QToolButton::menu-indicator
{ {
image: url(:/dark/down_arrow.svg); image: url(:/dark/down_arrow.svg);
top: -7px; top: -20px;
left: -2px; left: 0px;
width:8px;
height:10px;
} }
QToolButton{
font-size:14px;
}
QToolButton#ModeButton::menu-indicator QToolButton#ModeButton::menu-indicator
{ {
image: url(:/dark/mode_down_arrow.svg); image: url(:/dark/mode_down_arrow.svg);
top: -7px; top: 0px;
left: -3px; left: 0px;
width:12px;
height:12px;
} }
QToolButton#ModeButton::menu-indicator:hover QToolButton#ModeButton::menu-indicator:hover
{ {
top: -5px; top: 0px;
} }
QPushButton::menu-indicator QPushButton::menu-indicator

View File

@@ -1319,26 +1319,35 @@ QToolButton::menu-arrow:open
QToolButton#ModeButton::menu-arrow QToolButton#ModeButton::menu-arrow
{ {
image: url(:/light/mode_down_arrow.svg); /*image: url(:/light/mode_down_arrow.svg);*/
image:none;
} }
/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */ /* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */
QToolButton::menu-indicator QToolButton::menu-indicator
{ {
image: url(:/light/down_arrow.svg); image: url(:/light/down_arrow.svg);
top: -7px; top: -20px;
left: -2px; left: 0px;
width:8px;
height:10px;
}
QToolButton{
font-size:14px;
} }
QToolButton#ModeButton::menu-indicator QToolButton#ModeButton::menu-indicator
{ {
image: url(:/light/mode_down_arrow.svg); image: url(:/light/mode_down_arrow.svg);
top: -7px; top: 0px;
left: -3px; left: 0px;
width:12px;
height:12px;
} }
QToolButton#ModeButton::menu-indicator:hover QToolButton#ModeButton::menu-indicator:hover
{ {
top: -5px; top: 0px;
} }
QPushButton::menu-indicator QPushButton::menu-indicator

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.0, 2021-11-22T18:49:27. --> <!-- Written by QtCreator 4.11.0, 2021-11-23T18:40:01. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>