diff --git a/plugins/dockers/CMakeLists.txt b/plugins/dockers/CMakeLists.txt index db5e216577..4d24a32269 100644 --- a/plugins/dockers/CMakeLists.txt +++ b/plugins/dockers/CMakeLists.txt @@ -1,36 +1,37 @@ add_subdirectory(layerdocker) if(HAVE_OPENEXR) add_subdirectory(smallcolorselector) endif() add_subdirectory(specificcolorselector) add_subdirectory(digitalmixer) add_subdirectory(advancedcolorselector) add_subdirectory(presetdocker) add_subdirectory(historydocker) add_subdirectory(channeldocker) add_subdirectory(artisticcolorselector) add_subdirectory(tasksetdocker) add_subdirectory(compositiondocker) add_subdirectory(patterndocker) add_subdirectory(griddocker) add_subdirectory(arrangedocker) if(HAVE_OCIO) add_subdirectory(lut) endif() add_subdirectory(overview) add_subdirectory(palettedocker) add_subdirectory(animation) add_subdirectory(presethistory) add_subdirectory(svgcollectiondocker) add_subdirectory(histogram) add_subdirectory(gamutmask) if(NOT APPLE AND HAVE_QT_QUICK) add_subdirectory(touchdocker) option(ENABLE_CPU_THROTTLE "Build the CPU Throttle Docker" OFF) if (ENABLE_CPU_THROTTLE) add_subdirectory(throttle) endif() endif() add_subdirectory(logdocker) add_subdirectory(snapshotdocker) +add_subdirectory(storyboarddocker) diff --git a/plugins/dockers/storyboarddocker/CMakeLists.txt b/plugins/dockers/storyboarddocker/CMakeLists.txt new file mode 100644 index 0000000000..eae6ba87f0 --- /dev/null +++ b/plugins/dockers/storyboarddocker/CMakeLists.txt @@ -0,0 +1,11 @@ +set(KRITA_STORYBOARDDOCKER_SOURCES + storyboarddocker.cpp storyboarddocker_dock.cpp + ) + +ki18n_wrap_ui(KRITA_STORYBOARDDOCKER_SOURCES + wdgstoryboarddock.ui wdgarrangemenu.ui wdgcommentmenu.ui +) + +add_library(kritastoryboarddocker MODULE ${KRITA_STORYBOARDDOCKER_SOURCES}) +target_link_libraries(kritastoryboarddocker kritaui) +install(TARGETS kritastoryboarddocker DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) \ No newline at end of file diff --git a/plugins/dockers/storyboarddocker/commentDelegate.cpp b/plugins/dockers/storyboarddocker/commentDelegate.cpp new file mode 100644 index 0000000000..544851fe0b --- /dev/null +++ b/plugins/dockers/storyboarddocker/commentDelegate.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "commentDelegate.h" + +#include "kis_node_view_color_scheme.h" + + +CommentDelegate::CommentDelegate(QObject *parent) + : QAbstractItemDelegate(parent) +{ +} + +CommentDelegate::~CommentDelegate() +{ +} + +void CommentDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + painter->save(); + + QVariant v = index.data(Qt::FontRole); + if(v.isValid()) { + option.font = v.value(); + option.fontMetrics = QFontMetrics(option.font); + } + + +} + +QSize NodeViewVisibilityDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(index); + + KisNodeViewColorScheme scm; + return QSize(option.rect.width(), scm.rowHeight()); +} diff --git a/plugins/dockers/storyboarddocker/commentDelegate.h b/plugins/dockers/storyboarddocker/commentDelegate.h new file mode 100644 index 0000000000..50cfebeea1 --- /dev/null +++ b/plugins/dockers/storyboarddocker/commentDelegate.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __COMMENT_DELEGATE_H +#define __COMMENT_DELEGATE_H + +#include + + +class CommentDelegate : public CommentDelegate +{ +public: + CommentDelegate(QObject *parent); + ~CommentDelegate() override; + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; + bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; + +}; + +#endif diff --git a/plugins/dockers/storyboarddocker/krita_storyboarddocker.json b/plugins/dockers/storyboarddocker/krita_storyboarddocker.json new file mode 100644 index 0000000000..00edfe8064 --- /dev/null +++ b/plugins/dockers/storyboarddocker/krita_storyboarddocker.json @@ -0,0 +1,9 @@ +{ + "Id": "Storyboard Docker", + "Type": "Service", + "X-KDE-Library": "kritastoryboarddocker", + "X-KDE-ServiceTypes": [ + "Krita/Dock" + ], + "X-Krita-Version": "28" +} diff --git a/plugins/dockers/storyboarddocker/storyboardModel.cpp b/plugins/dockers/storyboarddocker/storyboardModel.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/dockers/storyboarddocker/storyboardModel.h b/plugins/dockers/storyboarddocker/storyboardModel.h new file mode 100644 index 0000000000..598e3ef444 --- /dev/null +++ b/plugins/dockers/storyboarddocker/storyboardModel.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef STORYBOARD_MODEL +#define STORYBOARD_MODEL + +#include + +class KisNodeModel : public QAbstractListModel +{ + + Q_OBJECT + +public: + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; + + +} + +#endif \ No newline at end of file diff --git a/plugins/dockers/storyboarddocker/storyboarddocker.cpp b/plugins/dockers/storyboarddocker/storyboarddocker.cpp new file mode 100644 index 0000000000..db124717c9 --- /dev/null +++ b/plugins/dockers/storyboarddocker/storyboarddocker.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "storyboarddocker.h" + +#include +#include + +#include +#include + +#include "storyboarddocker_dock.h" + +K_PLUGIN_FACTORY_WITH_JSON(StoryboardDockerPluginFactory, "krita_storyboarddocker.json", registerPlugin();) + +class StoryboardDockerDockFactory : public KoDockFactoryBase { +public: + StoryboardDockerDockFactory() + { + } + + QString id() const override + { + return QString( "StoryboardDocker" ); + } + + virtual Qt::DockWidgetArea defaultDockWidgetArea() const + { + return Qt::RightDockWidgetArea; + } + + QDockWidget* createDockWidget() override + { + StoryboardDockerDock * dockWidget = new StoryboardDockerDock(); + + dockWidget->setObjectName(id()); + + return dockWidget; + } + + DockPosition defaultDockPosition() const override + { + return DockMinimized; + } +private: + + +}; + + +StoryboardDockerPlugin::StoryboardDockerPlugin(QObject *parent, const QVariantList &) + : QObject(parent) +{ + KoDockRegistry::instance()->add(new StoryboardDockerDockFactory()); +} + +StoryboardDockerPlugin::~StoryboardDockerPlugin() +{ +} + +#include "storyboarddocker.moc" diff --git a/plugins/dockers/storyboarddocker/storyboarddocker.h b/plugins/dockers/storyboarddocker/storyboarddocker.h new file mode 100644 index 0000000000..39f7e2a609 --- /dev/null +++ b/plugins/dockers/storyboarddocker/storyboarddocker.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; version 2 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef STORYBOARDDOCKER_H +#define STORYBOARDDOCKER_H + +#include +#include + + +/** + * Storyboard Docker showing frames and comments + */ +class StoryboardDockerPlugin : public QObject +{ + Q_OBJECT +public: + StoryboardDockerPlugin(QObject *parent, const QVariantList &); + ~StoryboardDockerPlugin() override; +}; + +#endif \ No newline at end of file diff --git a/plugins/dockers/storyboarddocker/storyboarddocker_dock.cpp b/plugins/dockers/storyboarddocker/storyboarddocker_dock.cpp new file mode 100644 index 0000000000..bf8ce2b60f --- /dev/null +++ b/plugins/dockers/storyboarddocker/storyboarddocker_dock.cpp @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; version 2 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "storyboarddocker_dock.h" + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "ui_wdgstoryboarddock.h" +#include "ui_wdgcommentmenu.h" +#include "ui_wdgarrangemenu.h" + +class CommentMenu: public QMenu +{ + Q_OBJECT +public: + CommentMenu(QWidget *parent, QStringList fieldList) + : QMenu(parent) + , m_menuUI(new Ui_WdgCommentMenu()) + , visibilityGroup(new QButtonGroup(this)) + , deleteGroup(new QButtonGroup(this)) + , model(new QStringListModel(fieldList, this)) + { + QWidget* commentWidget = new QWidget(this); + m_menuUI->setupUi(commentWidget); + + m_menuUI->fieldListView->setModel(model); + + m_menuUI->fieldListView->setEditTriggers(QAbstractItemView::AnyKeyPressed | + QAbstractItemView::DoubleClicked ); + + + connect(m_menuUI->btnAddField, SIGNAL(clicked()), this, SLOT(slotaddItem())); + connect(m_menuUI->btnDeleteField, SIGNAL(clicked()), this, SLOT(slotdeleteItem())); + + KisAction *commentAction = new KisAction(commentWidget); + commentAction->setDefaultWidget(commentWidget); + this->addAction(commentAction); + } + + QButtonGroup* getvisibilityGroup(){ return visibilityGroup;} + QButtonGroup* getdeleteGroup(){ return deleteGroup;} + +private Q_SLOTS: + void slotaddItem() + { + int row = model->rowCount(); + model->insertRows(row, 1); + + QModelIndex index = model->index(row); + m_menuUI->fieldListView->setCurrentIndex(index); + m_menuUI->fieldListView->edit(index); + } + + void slotdeleteItem() + { + model->removeRows(m_menuUI->fieldListView->currentIndex().row(), 1); + } + +private: + QScopedPointer m_menuUI; + QStringListModel *model; +}; + +class ArrangeMenu: public QMenu +{ +public: + ArrangeMenu(QWidget *parent) + : QMenu(parent) + , m_menuUI(new Ui_WdgArrangeMenu()) + , modeGroup(new QButtonGroup(this)) + , viewGroup(new QButtonGroup(this)) + { + QWidget* arrangeWidget = new QWidget(this); + m_menuUI->setupUi(arrangeWidget); + + modeGroup->addButton(m_menuUI->btnColumnMode, Qt::FlatCap); + modeGroup->addButton(m_menuUI->btnRowMode, Qt::FlatCap); + modeGroup->addButton(m_menuUI->btnGridMode, Qt::FlatCap); + + viewGroup->addButton(m_menuUI->btnAllView, Qt::FlatCap); + viewGroup->addButton(m_menuUI->btnThumbnailsView, Qt::FlatCap); + viewGroup->addButton(m_menuUI->btnCommentsView, Qt::FlatCap); + + KisAction *arrangeAction = new KisAction(arrangeWidget); + arrangeAction->setDefaultWidget(arrangeWidget); + this->addAction(arrangeAction); + } + + QButtonGroup* getModeGroup(){ return modeGroup;} + QButtonGroup* getViewGroup(){ return viewGroup;} + +private: + QButtonGroup *modeGroup; + QButtonGroup *viewGroup; + QScopedPointer m_menuUI; +}; + +StoryboardDockerDock::StoryboardDockerDock( ) + : QDockWidget(i18n("Storyboard")) + , m_ui(new Ui_WdgStoryboardDock()) +{ + QWidget* mainWidget = new QWidget(this); + setWidget(mainWidget); + m_ui->setupUi(mainWidget); + + + m_exportMenu = new QMenu(this); + m_ui->btnExport->setMenu(m_exportMenu); + m_ui->btnExport->setPopupMode(QToolButton::MenuButtonPopup); + + m_exportAsPdfAction = new KisAction("Export as PDF", m_exportMenu); + m_exportMenu->addAction(m_exportAsPdfAction); + + m_exportAsSvgAction = new KisAction("Export as SVG"); + m_exportMenu->addAction(m_exportAsSvgAction); + connect(m_exportAsPdfAction, SIGNAL(triggered()), this, SLOT(slotExportAsPdf())); + connect(m_exportAsSvgAction, SIGNAL(triggered()), this, SLOT(slotExportAsSvg())); + + + QStringList list; + list<<"cats"<<"dogs"<<"birds"; + m_commentMenu = new CommentMenu(this, list); + + m_ui->btnComment->setMenu(m_commentMenu); + m_ui->btnComment->setPopupMode(QToolButton::MenuButtonPopup); + + + m_lockAction = new KisAction(KisIconUtils::loadIcon("unlocked"), "Lock", m_ui->btnLock); + m_lockAction->setCheckable(true); + m_ui->btnLock->setDefaultAction(m_lockAction); + m_ui->btnLock->setIconSize(QSize(22, 22)); + connect(m_lockAction, SIGNAL(toggled(bool)), this, SLOT(slotLockClicked(bool))); + + + m_arrangeMenu = new ArrangeMenu(this); + m_ui->btnArrange->setMenu(m_arrangeMenu); + m_ui->btnArrange->setPopupMode(QToolButton::InstantPopup); + m_ui->btnArrange->setIcon(KisIconUtils::loadIcon("view-choose")); + m_ui->btnArrange->setIconSize(QSize(22, 22)); + + m_modeGroup = m_arrangeMenu->getModeGroup(); + m_viewGroup = m_arrangeMenu->getViewGroup(); + + connect(m_modeGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(slotModeChanged(QAbstractButton*))); + connect(m_viewGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(slotViewChanged(QAbstractButton*))); +} + +StoryboardDockerDock::~StoryboardDockerDock() +{ +} + +void StoryboardDockerDock::setCanvas(KoCanvasBase *canvas) +{ +} + +void StoryboardDockerDock::setViewManager(KisViewManager* kisview) +{ +} + +void StoryboardDockerDock::slotExportAsPdf() +{ + qDebug()<<"export as pdf"; + slotExport("pdf"); +} +void StoryboardDockerDock::slotExportAsSvg() +{ + qDebug()<<"export as svg"; + slotExport("svg"); +} + +void StoryboardDockerDock::slotExport(QString mode) +{ + qDebug()<<"mode is "<setIcon(KisIconUtils::loadIcon("locked")); + } + else{ + m_lockAction->setIcon(KisIconUtils::loadIcon("unlocked")); + } +} + +void StoryboardDockerDock::slotModeChanged(QAbstractButton* button) +{ + qDebug()<<"Mode changed to "<text(); +} + +void StoryboardDockerDock::slotViewChanged(QAbstractButton* button) +{ + qDebug()<<"View changed to "<text(); +} + +#include "storyboarddocker_dock.moc" \ No newline at end of file diff --git a/plugins/dockers/storyboarddocker/storyboarddocker_dock.h b/plugins/dockers/storyboarddocker/storyboarddocker_dock.h new file mode 100644 index 0000000000..eae3e232ad --- /dev/null +++ b/plugins/dockers/storyboarddocker/storyboarddocker_dock.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2020 Saurabh Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef _STORYBOARDDOCKER_DOCK_H_ +#define _STORYBOARDDOCKER_DOCK_H_ + +#include +#include + +#include +#include +#include + +class Ui_WdgStoryboardDock; +class CommentMenu; +class ArrangeMenu; + +class StoryboardDockerDock : public QDockWidget, public KisMainwindowObserver{ + Q_OBJECT +public: + StoryboardDockerDock(); + ~StoryboardDockerDock() override; + QString observerName() override { return "StoryboardDockerDock"; } + void setCanvas(KoCanvasBase *canvas) override; + void unsetCanvas() override {} + void setViewManager(KisViewManager* kisview) override; + +private: + QScopedPointer m_ui; + + QMenu *m_exportMenu; + KisAction *m_exportAsPdfAction; + KisAction *m_exportAsSvgAction; + + CommentMenu *m_commentMenu; + + KisAction *m_lockAction; + + ArrangeMenu *m_arrangeMenu; + + QButtonGroup *m_modeGroup; + QButtonGroup *m_viewGroup; + +private Q_SLOTS: + void slotExportAsPdf(); + void slotExportAsSvg(); + void slotExport(QString); + //the comment button slots + + void slotLockClicked(bool); + void slotModeChanged(QAbstractButton*); + void slotViewChanged(QAbstractButton*); +}; + + +#endif diff --git a/plugins/dockers/storyboarddocker/tests/dummy b/plugins/dockers/storyboarddocker/tests/dummy new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/dockers/storyboarddocker/wdgarrangemenu.ui b/plugins/dockers/storyboarddocker/wdgarrangemenu.ui new file mode 100644 index 0000000000..e71a2f08d9 --- /dev/null +++ b/plugins/dockers/storyboarddocker/wdgarrangemenu.ui @@ -0,0 +1,94 @@ + + + WdgArrangeMenu + + + + 0 + 0 + 174 + 275 + + + + + 0 + 0 + + + + + + + + + + + + Mode + + + + + + + Column + + + + + + + Row + + + + + + + Grid + + + + + + + Qt::Horizontal + + + + + + + View + + + + + + + All + + + + + + + Thumbnails Only + + + + + + + Comments Only + + + + + + + + + + diff --git a/plugins/dockers/storyboarddocker/wdgcommentmenu.ui b/plugins/dockers/storyboarddocker/wdgcommentmenu.ui new file mode 100644 index 0000000000..c6e7b58dea --- /dev/null +++ b/plugins/dockers/storyboarddocker/wdgcommentmenu.ui @@ -0,0 +1,130 @@ + + + WdgCommentMenu + + + + 0 + 0 + 159 + 237 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + QLayout::SetMinimumSize + + + 0 + + + + + 0 + + + QLayout::SetNoConstraint + + + + + 0 + + + QLayout::SetNoConstraint + + + + + + 0 + 0 + + + + + 158 + 10000 + + + + Qt::ScrollBarAsNeeded + + + QAbstractScrollArea::AdjustToContents + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + + + + + + + + + 1 + + + QLayout::SetNoConstraint + + + + + + + + + + 22 + 22 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + ... + + + + + + + + + + + + diff --git a/plugins/dockers/storyboarddocker/wdgstoryboarddock.ui b/plugins/dockers/storyboarddocker/wdgstoryboarddock.ui new file mode 100644 index 0000000000..cebeafaba5 --- /dev/null +++ b/plugins/dockers/storyboarddocker/wdgstoryboarddock.ui @@ -0,0 +1,118 @@ + + + WdgStoryboardDock + + + + 0 + 0 + 604 + 561 + + + + Form + + + + + + + + + + Export + + + true + + + + + + + Comments + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + Lock + + + false + + + false + + + Qt::ToolButtonIconOnly + + + true + + + + + + + Mode + + + true + + + Qt::NoArrow + + + + + + + + + + + + + + Qt::Vertical + + + + + + + + + Qt::Horizontal + + + + + + + + + +