Toggle Toolbar Orientation

This commit is contained in:
manongjohn 2023-02-18 12:12:13 -05:00
parent 16bd4c5d1a
commit e7ed5341b2
10 changed files with 185 additions and 39 deletions

View file

@ -1897,14 +1897,24 @@ ParamFieldKeyToggle {
margin-top: 1;
margin-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('../Medium/imgs/white/toolbar_extension_vertical.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button:hover {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #595959;
}
#ToolBar QToolButton#qt_toolbar_ext_button:pressed {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:pressed {
background-color: #141414;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('../Medium/imgs/white/toolbar_extension_horizontal.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:hover {
background-color: #595959;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:pressed {
background-color: #141414;
}
#expandButton:checked {

View file

@ -1897,14 +1897,24 @@ ParamFieldKeyToggle {
margin-top: 1;
margin-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('../Medium/imgs/white/toolbar_extension_vertical.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button:hover {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #494949;
}
#ToolBar QToolButton#qt_toolbar_ext_button:pressed {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:pressed {
background-color: #040404;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('../Medium/imgs/white/toolbar_extension_horizontal.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:hover {
background-color: #494949;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:pressed {
background-color: #040404;
}
#expandButton:checked {

View file

@ -1897,14 +1897,24 @@ ParamFieldKeyToggle {
margin-top: 1;
margin-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('../Medium/imgs/black/toolbar_extension_vertical.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button:hover {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #d3d3d3;
}
#ToolBar QToolButton#qt_toolbar_ext_button:pressed {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:pressed {
background-color: #8f8f8f;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('../Medium/imgs/black/toolbar_extension_horizontal.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:hover {
background-color: #d3d3d3;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:pressed {
background-color: #8f8f8f;
}
#expandButton:checked {

View file

@ -1897,14 +1897,24 @@ ParamFieldKeyToggle {
margin-top: 1;
margin-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('imgs/white/toolbar_extension_vertical.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button:hover {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #717171;
}
#ToolBar QToolButton#qt_toolbar_ext_button:pressed {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:pressed {
background-color: #2c2c2c;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('imgs/white/toolbar_extension_horizontal.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:hover {
background-color: #717171;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:pressed {
background-color: #2c2c2c;
}
#expandButton:checked {

View file

@ -11,7 +11,7 @@
margin-top: 1;
margin-bottom: 1;
}
& QToolButton#qt_toolbar_ext_button {
& QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('@{img-url}/toolbar_extension_vertical.png');
padding-bottom: 1;
&:hover {
@ -21,6 +21,16 @@
background-color: @toolbutton-bg-color-pressed;
}
}
& QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('@{img-url}/toolbar_extension_horizontal.png');
padding-bottom: 1;
&:hover {
background-color: @button-bg-color-hover;
}
&:pressed {
background-color: @toolbutton-bg-color-pressed;
}
}
}
#expandButton {

View file

@ -1897,14 +1897,24 @@ ParamFieldKeyToggle {
margin-top: 1;
margin-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical {
qproperty-icon: url('../Medium/imgs/black/toolbar_extension_vertical.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button:hover {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #b3b3b3;
}
#ToolBar QToolButton#qt_toolbar_ext_button:pressed {
#ToolBar QToolButton#qt_toolbar_ext_button_vertical:pressed {
background-color: #676767;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal {
qproperty-icon: url('../Medium/imgs/black/toolbar_extension_horizontal.png');
padding-bottom: 1;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:hover {
background-color: #b3b3b3;
}
#ToolBar QToolButton#qt_toolbar_ext_button_horizontal:pressed {
background-color: #676767;
}
#expandButton:checked {

View file

@ -93,7 +93,7 @@ ComboViewerPanel::ComboViewerPanel(QWidget *parent, Qt::WFlags flags)
setObjectName("ComboViewerPanel");
// ToolBar
m_toolbar = new Toolbar(this, false);
m_toolbar = new Toolbar(this, true);
// Tool Options
m_toolOptions = new ToolOptions();
m_toolOptions->setObjectName("ComboViewerToolOptions");

View file

@ -28,6 +28,8 @@
#include <QToolButton>
#include <QVBoxLayout>
#include <QObject>
#include <QContextMenuEvent>
#include <QStyle>
TEnv::IntVar ShowAllToolsToggle("ShowAllToolsToggle", 1);
@ -35,41 +37,35 @@ TEnv::IntVar ShowAllToolsToggle("ShowAllToolsToggle", 1);
// Toolbar
//-----------------------------------------------------------------------------
Toolbar::Toolbar(QWidget *parent, bool isVertical)
: QToolBar(parent), m_isExpanded(ShowAllToolsToggle != 0) {
Toolbar::Toolbar(QWidget *parent, bool isViewerToolbar)
: QToolBar(parent)
, m_isExpanded(ShowAllToolsToggle != 0)
, m_isViewerToolbar(isViewerToolbar)
, m_isVertical(true) {
// Fondamentale per lo style sheet
setObjectName("toolBar");
setMovable(false);
if (isVertical)
setOrientation(Qt::Vertical);
else
setOrientation(Qt::Horizontal);
if (m_isViewerToolbar) m_isVertical = false;
m_panel = dynamic_cast<TPanel *>(parent);
setMovable(false);
setIconSize(QSize(20, 20));
setToolButtonStyle(Qt::ToolButtonIconOnly);
m_moreButton = findChild<QToolButton *>("qt_toolbar_ext_button");
m_expandButton = new QToolButton(this);
m_expandButton->setObjectName("expandButton");
m_expandButton->setCheckable(true);
m_expandButton->setChecked(m_isExpanded);
m_expandButton->setArrowType((isVertical) ? Qt::DownArrow : Qt::RightArrow);
m_expandButton->hide();
m_expandAction = addWidget(m_expandButton);
connect(m_expandButton, SIGNAL(toggled(bool)), this,
SLOT(setIsExpanded(bool)));
updateToolbar();
if (isVertical) {
QIcon moreIcon(":Resources/moredown.svg");
QToolButton *more = findChild<QToolButton *>("qt_toolbar_ext_button");
more->setIcon(moreIcon);
} else {
QIcon moreIcon(":Resources/more.svg");
QToolButton *more = findChild<QToolButton *>("qt_toolbar_ext_button");
more->setIcon(moreIcon);
}
updateOrientation(m_isVertical);
}
//-----------------------------------------------------------------------------
@ -269,6 +265,79 @@ void Toolbar::hideEvent(QHideEvent *e) {
//-----------------------------------------------------------------------------
void Toolbar::contextMenuEvent(QContextMenuEvent *event) {
if (m_isViewerToolbar) return;
QMenu *menu = new QMenu();
QAction *toggleOrientation = menu->addAction(tr("Toggle Orientation"));
connect(toggleOrientation, SIGNAL(triggered(bool)), this,
SLOT(orientationToggled(bool)));
toggleOrientation->setEnabled(m_panel->isFloating());
menu->exec(event->globalPos());
}
//-----------------------------------------------------------------------------
void Toolbar::orientationToggled(bool ignore) {
if (m_isViewerToolbar) return;
updateOrientation(!m_isVertical);
}
void Toolbar::updateOrientation(bool isVertical) {
bool wasVertical = m_isVertical;
m_isVertical = isVertical;
if (!m_isViewerToolbar) {
// Current dimensions
int x = wasVertical ? m_panel->height() : m_panel->width();
m_panel->setOrientation(m_isVertical);
m_panel->setFixedWidth(m_isVertical ? 44 : QWIDGETSIZE_MAX);
m_panel->setFixedHeight(m_isVertical ? QWIDGETSIZE_MAX : 44);
if (m_isVertical)
m_panel->resize(44, x);
else
m_panel->resize(x, 44);
}
setFixedWidth(m_isVertical ? 34 : QWIDGETSIZE_MAX);
setFixedHeight(m_isVertical ? QWIDGETSIZE_MAX : 34);
setOrientation(m_isVertical ? Qt::Vertical : Qt::Horizontal);
setSizePolicy(QSizePolicy::Policy::Expanding,
QSizePolicy::Policy::Expanding);
// m_moreButton->setIcon(m_isVertical ? m_moreDownIcon : m_moreIcon);
m_moreButton->setObjectName(m_isVertical
? "qt_toolbar_ext_button_vertical"
: "qt_toolbar_ext_button_horizontal");
QStyle *s = m_moreButton->style();
s->unpolish(m_moreButton);
s->polish(m_moreButton);
m_expandButton->setArrowType(m_isVertical ? Qt::DownArrow : Qt::RightArrow);
updateToolbar();
}
// SaveLoadQSettings
void Toolbar::save(QSettings &settings) const {
UINT orientation = 0;
orientation = m_isVertical ? 1 : 0;
settings.setValue("vertical", orientation);
}
void Toolbar::load(QSettings &settings) {
UINT orientation = settings.value("vertical", 1).toUInt();
m_isVertical = orientation == 1;
updateOrientation(m_isVertical);
}
//-----------------------------------------------------------------------------
void Toolbar::onToolChanged() {
ToolHandle *toolHandle = TApp::instance()->getCurrentTool();
TTool *tool = toolHandle->getTool();

View file

@ -5,11 +5,14 @@
#include "tools/toolcommandids.h"
#include "pane.h"
#include "saveloadqsettings.h"
#include <QToolBar>
class QToolButton;
class Toolbar final : public QToolBar {
class Toolbar final : public QToolBar, public SaveLoadQSettings {
Q_OBJECT
std::map<std::string, QAction *> m_toolbarList;
@ -18,6 +21,11 @@ class Toolbar final : public QToolBar {
bool m_isExpanded;
int m_toolbarLevel;
bool m_isViewerToolbar;
TPanel *m_panel;
bool m_isVertical = true;
QToolButton *m_moreButton;
struct {
const char *toolName;
bool isSeparator;
@ -44,20 +52,29 @@ class Toolbar final : public QToolBar {
{T_Hand, false, false, 0}, {0, false, false, 0}};
public:
Toolbar(QWidget *parent, bool isVertical = true);
Toolbar(QWidget *parent, bool isViewerToolbar = false);
~Toolbar();
// SaveLoadQSettings
virtual void save(QSettings &settings) const override;
virtual void load(QSettings &settings) override;
void updateOrientation(bool isVertical);
protected:
bool addAction(QAction *act);
void showEvent(QShowEvent *e) override;
void hideEvent(QHideEvent *e) override;
void contextMenuEvent(QContextMenuEvent *event) override;
protected slots:
void onToolChanged();
void onPreferenceChanged(const QString &prefName);
void setIsExpanded(bool expand);
void updateToolbar();
void orientationToggled(bool);
};
#endif // TOOLBAR_H

View file

@ -1017,8 +1017,8 @@ public:
panel->setWidget(toolbar);
panel->setIsMaximizable(false);
// panel->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
panel->setFixedWidth(44); // 35
toolbar->setFixedWidth(34);
// panel->setFixedWidth(44); // 35
// toolbar->setFixedWidth(34);
panel->setWindowTitle(QString(""));
panel->getTitleBar()->showTitleBar(TApp::instance()->getShowTitleBars());
connect(TApp::instance(), SIGNAL(showTitleBars(bool)), panel->getTitleBar(),