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-top: 1;
margin-bottom: 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'); qproperty-icon: url('../Medium/imgs/white/toolbar_extension_vertical.png');
padding-bottom: 1; padding-bottom: 1;
} }
#ToolBar QToolButton#qt_toolbar_ext_button:hover { #ToolBar QToolButton#qt_toolbar_ext_button_vertical:hover {
background-color: #595959; 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; background-color: #141414;
} }
#expandButton:checked { #expandButton:checked {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -28,6 +28,8 @@
#include <QToolButton> #include <QToolButton>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QObject> #include <QObject>
#include <QContextMenuEvent>
#include <QStyle>
TEnv::IntVar ShowAllToolsToggle("ShowAllToolsToggle", 1); TEnv::IntVar ShowAllToolsToggle("ShowAllToolsToggle", 1);
@ -35,41 +37,35 @@ TEnv::IntVar ShowAllToolsToggle("ShowAllToolsToggle", 1);
// Toolbar // Toolbar
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Toolbar::Toolbar(QWidget *parent, bool isVertical) Toolbar::Toolbar(QWidget *parent, bool isViewerToolbar)
: QToolBar(parent), m_isExpanded(ShowAllToolsToggle != 0) { : QToolBar(parent)
, m_isExpanded(ShowAllToolsToggle != 0)
, m_isViewerToolbar(isViewerToolbar)
, m_isVertical(true) {
// Fondamentale per lo style sheet // Fondamentale per lo style sheet
setObjectName("toolBar"); setObjectName("toolBar");
setMovable(false); if (m_isViewerToolbar) m_isVertical = false;
if (isVertical)
setOrientation(Qt::Vertical);
else
setOrientation(Qt::Horizontal);
m_panel = dynamic_cast<TPanel *>(parent);
setMovable(false);
setIconSize(QSize(20, 20)); setIconSize(QSize(20, 20));
setToolButtonStyle(Qt::ToolButtonIconOnly); setToolButtonStyle(Qt::ToolButtonIconOnly);
m_moreButton = findChild<QToolButton *>("qt_toolbar_ext_button");
m_expandButton = new QToolButton(this); m_expandButton = new QToolButton(this);
m_expandButton->setObjectName("expandButton"); m_expandButton->setObjectName("expandButton");
m_expandButton->setCheckable(true); m_expandButton->setCheckable(true);
m_expandButton->setChecked(m_isExpanded); m_expandButton->setChecked(m_isExpanded);
m_expandButton->setArrowType((isVertical) ? Qt::DownArrow : Qt::RightArrow);
m_expandButton->hide(); m_expandButton->hide();
m_expandAction = addWidget(m_expandButton); m_expandAction = addWidget(m_expandButton);
connect(m_expandButton, SIGNAL(toggled(bool)), this, connect(m_expandButton, SIGNAL(toggled(bool)), this,
SLOT(setIsExpanded(bool))); SLOT(setIsExpanded(bool)));
updateToolbar(); updateOrientation(m_isVertical);
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);
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -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() { void Toolbar::onToolChanged() {
ToolHandle *toolHandle = TApp::instance()->getCurrentTool(); ToolHandle *toolHandle = TApp::instance()->getCurrentTool();
TTool *tool = toolHandle->getTool(); TTool *tool = toolHandle->getTool();

View file

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

View file

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