diff --git a/stuff/config/qss/Astral_048_VeryDark/Astral_048_VeryDark.qss b/stuff/config/qss/Astral_048_VeryDark/Astral_048_VeryDark.qss index 943c3d3..1413593 100644 --- a/stuff/config/qss/Astral_048_VeryDark/Astral_048_VeryDark.qss +++ b/stuff/config/qss/Astral_048_VeryDark/Astral_048_VeryDark.qss @@ -1488,7 +1488,8 @@ FxSettings QToolBar QToolBar { /* ----------------------------------------------------------------------------- Tool Options ----------------------------------------------------------------------------- */ -#ToolOptions TPanelTitleBar { +#ToolOptions TPanelTitleBar, +#CommandBar TPanelTitleBar { background-color: #303030; background-image: url('../Astral_072_Dark/imgs/white/title_grip_vertical.svg'); background-repeat: no-repeat; @@ -1551,6 +1552,15 @@ PopupButton::menu-indicator:disabled { #XSheetToolbar #XSheetToolbarLevelButton { padding: 2; } +#CommandBar { + margin: 0; + padding: 0; + border: 0; +} +#CommandBar::separator:horizontal { + margin-right: 3; + margin-left: 3; +} QToolBar#MediumPaddingToolBar QToolButton { padding-left: 3; padding-right: 3; diff --git a/stuff/config/qss/Astral_072_Dark/Astral_072_Dark.qss b/stuff/config/qss/Astral_072_Dark/Astral_072_Dark.qss index 994bef1..673aeec 100644 --- a/stuff/config/qss/Astral_072_Dark/Astral_072_Dark.qss +++ b/stuff/config/qss/Astral_072_Dark/Astral_072_Dark.qss @@ -1488,7 +1488,8 @@ FxSettings QToolBar QToolBar { /* ----------------------------------------------------------------------------- Tool Options ----------------------------------------------------------------------------- */ -#ToolOptions TPanelTitleBar { +#ToolOptions TPanelTitleBar, +#CommandBar TPanelTitleBar { background-color: #484848; background-image: url('imgs/white/title_grip_vertical.svg'); background-repeat: no-repeat; @@ -1551,6 +1552,15 @@ PopupButton::menu-indicator:disabled { #XSheetToolbar #XSheetToolbarLevelButton { padding: 2; } +#CommandBar { + margin: 0; + padding: 0; + border: 0; +} +#CommandBar::separator:horizontal { + margin-right: 3; + margin-left: 3; +} QToolBar#MediumPaddingToolBar QToolButton { padding-left: 3; padding-right: 3; diff --git a/stuff/config/qss/Astral_072_Dark/less/layouts/toolbar.less b/stuff/config/qss/Astral_072_Dark/less/layouts/toolbar.less index 8c90d2d..7cb7065 100644 --- a/stuff/config/qss/Astral_072_Dark/less/layouts/toolbar.less +++ b/stuff/config/qss/Astral_072_Dark/less/layouts/toolbar.less @@ -29,7 +29,7 @@ Tool Options ----------------------------------------------------------------------------- */ -#ToolOptions { +#ToolOptions, #CommandBar { & TPanelTitleBar { // Use grip handles for title bar background-color: @bg; @@ -113,6 +113,16 @@ PopupButton { } } +#CommandBar { + margin: 0; + padding: 0; + border: 0; + &::separator:horizontal { + margin-right: 3; + margin-left: 3; + } +} + QToolBar#MediumPaddingToolBar { //Schematic Toolbars & QToolButton { padding-left: 3; diff --git a/stuff/config/qss/Astral_128_Neutral/Astral_128_Neutral.qss b/stuff/config/qss/Astral_128_Neutral/Astral_128_Neutral.qss index 35a43e6..059b984 100644 --- a/stuff/config/qss/Astral_128_Neutral/Astral_128_Neutral.qss +++ b/stuff/config/qss/Astral_128_Neutral/Astral_128_Neutral.qss @@ -1488,7 +1488,8 @@ FxSettings QToolBar QToolBar { /* ----------------------------------------------------------------------------- Tool Options ----------------------------------------------------------------------------- */ -#ToolOptions TPanelTitleBar { +#ToolOptions TPanelTitleBar, +#CommandBar TPanelTitleBar { background-color: #808080; background-image: url('../Astral_072_Dark/imgs/black/title_grip_vertical.svg'); background-repeat: no-repeat; @@ -1551,6 +1552,15 @@ PopupButton::menu-indicator:disabled { #XSheetToolbar #XSheetToolbarLevelButton { padding: 2; } +#CommandBar { + margin: 0; + padding: 0; + border: 0; +} +#CommandBar::separator:horizontal { + margin-right: 3; + margin-left: 3; +} QToolBar#MediumPaddingToolBar QToolButton { padding-left: 3; padding-right: 3; diff --git a/stuff/profiles/layouts/rooms/Default/menubar_template.xml b/stuff/profiles/layouts/rooms/Default/menubar_template.xml index b9e1347..8867a81 100644 --- a/stuff/profiles/layouts/rooms/Default/menubar_template.xml +++ b/stuff/profiles/layouts/rooms/Default/menubar_template.xml @@ -226,6 +226,7 @@ <command>MI_OpenTasks</command> <command>MI_OpenTMessage</command> <command>MI_OpenToolbar</command> + <command>MI_OpenCommandToolbar</command> <command>MI_OpenToolOptionBar</command> <command>MI_OpenLevelView</command> <command>MI_OpenComboViewer</command> diff --git a/toonz/sources/toonz/CMakeLists.txt b/toonz/sources/toonz/CMakeLists.txt index 8818d87..2d960c1 100644 --- a/toonz/sources/toonz/CMakeLists.txt +++ b/toonz/sources/toonz/CMakeLists.txt @@ -29,6 +29,7 @@ set(MOC_HEADERS colormodelviewer.h columncommand.h columnselection.h + commandbar.h convertpopup.h curveio.h drawingdata.h @@ -163,6 +164,7 @@ set(HEADERS ${MOC_HEADERS}) set(SOURCES floatingpanelcommand.cpp canvassizepopup.cpp + commandbar.cpp history.cpp loadfoldercommand.cpp loadfolderpopup.cpp diff --git a/toonz/sources/toonz/commandbar.cpp b/toonz/sources/toonz/commandbar.cpp new file mode 100644 index 0000000..ceea7fb --- /dev/null +++ b/toonz/sources/toonz/commandbar.cpp @@ -0,0 +1,84 @@ + + +#include "commandbar.h" + +// Tnz6 includes +#include "tapp.h" +#include "menubarcommandids.h" +// TnzQt includes +#include "toonzqt/gutil.h" + +// TnzLib includes +#include "toonz/preferences.h" +#include "toonz/tscenehandle.h" +#include "toonzqt/menubarcommand.h" + +// Qt includes +#include <QWidgetAction> + + +//============================================================================= +// Toolbar +//----------------------------------------------------------------------------- + +#if QT_VERSION >= 0x050500 +CommandBar::CommandBar(QWidget *parent, Qt::WindowFlags flags, + bool isCollapsible) +#else +CommandBar::CommandBar(XsheetViewer *parent, Qt::WFlags flags) +#endif + : QToolBar(parent), m_isCollapsible(isCollapsible) { + setObjectName("cornerWidget"); + setObjectName("CommandBar"); + + TApp *app = TApp::instance(); + m_keyFrameButton = new ViewerKeyframeNavigator(this, app->getCurrentFrame()); + m_keyFrameButton->setObjectHandle(app->getCurrentObject()); + m_keyFrameButton->setXsheetHandle(app->getCurrentXsheet()); + + QWidgetAction *keyFrameAction = new QWidgetAction(this); + keyFrameAction->setDefaultWidget(m_keyFrameButton); + + { + QAction *newVectorLevel = + CommandManager::instance()->getAction("MI_NewVectorLevel"); + addAction(newVectorLevel); + QAction *newToonzRasterLevel = + CommandManager::instance()->getAction("MI_NewToonzRasterLevel"); + addAction(newToonzRasterLevel); + QAction *newRasterLevel = + CommandManager::instance()->getAction("MI_NewRasterLevel"); + addAction(newRasterLevel); + addSeparator(); + QAction *reframeOnes = CommandManager::instance()->getAction("MI_Reframe1"); + addAction(reframeOnes); + QAction *reframeTwos = CommandManager::instance()->getAction("MI_Reframe2"); + addAction(reframeTwos); + QAction *reframeThrees = + CommandManager::instance()->getAction("MI_Reframe3"); + addAction(reframeThrees); + + addSeparator(); + + QAction *repeat = CommandManager::instance()->getAction("MI_Dup"); + addAction(repeat); + + addSeparator(); + + QAction *collapse = CommandManager::instance()->getAction("MI_Collapse"); + addAction(collapse); + QAction *open = CommandManager::instance()->getAction("MI_OpenChild"); + addAction(open); + QAction *leave = CommandManager::instance()->getAction("MI_CloseChild"); + addAction(leave); + + addSeparator(); + addAction(keyFrameAction); + } +} + + + + + + diff --git a/toonz/sources/toonz/commandbar.h b/toonz/sources/toonz/commandbar.h new file mode 100644 index 0000000..12262d7 --- /dev/null +++ b/toonz/sources/toonz/commandbar.h @@ -0,0 +1,44 @@ +#pragma once + +#ifndef COMMANDBAR_H +#define COMMANDBAR_H + +#include <memory> + +#include "toonz/txsheet.h" +#include "toonz/txshleveltypes.h" +#include "toonzqt/keyframenavigator.h" + +#include <QToolBar> + +//----------------------------------------------------------------------------- + +// forward declaration +class XsheetViewer; +class QPushButton; + +//============================================================================= +// XSheet Toolbar +//----------------------------------------------------------------------------- + +class CommandBar final : public QToolBar { + Q_OBJECT + + //XsheetViewer *m_viewer; + ViewerKeyframeNavigator *m_keyFrameButton; + bool m_isCollapsible; + +public: +#if QT_VERSION >= 0x050500 + CommandBar(QWidget *parent = 0, Qt::WindowFlags flags = 0, + bool isCollapsible = false); +#else + CommandBar(XsheetViewer *parent = 0, Qt::WFlags flags = 0); +#endif + +signals: + void updateVisibility(); + +}; + +#endif // COMMANDBAR_H diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 65e0fb3..6d44d82 100644 --- a/toonz/sources/toonz/mainwindow.cpp +++ b/toonz/sources/toonz/mainwindow.cpp @@ -307,8 +307,9 @@ void Room::load(const TFilePath &fp) { QVariant name = settings.value("name"); if (name.canConvert(QVariant::String)) { // Allocate panel - paneObjectName = name.toString(); - pane = TPanelFactory::createPanel(this, paneObjectName); + paneObjectName = name.toString(); + std::string paneStrName = paneObjectName.toStdString(); + pane = TPanelFactory::createPanel(this, paneObjectName); if (SaveLoadQSettings *persistent = dynamic_cast<SaveLoadQSettings *>(pane->widget())) persistent->load(settings); @@ -445,6 +446,12 @@ centralWidget->setLayout(centralWidgetLayout);*/ setCommandHandler(MI_About, this, &MainWindow::onAbout); setCommandHandler(MI_MaximizePanel, this, &MainWindow::maximizePanel); setCommandHandler(MI_FullScreenWindow, this, &MainWindow::fullScreenWindow); + setCommandHandler("MI_NewVectorLevel", this, + &MainWindow::onNewVectorLevelButtonPressed); + setCommandHandler("MI_NewToonzRasterLevel", this, + &MainWindow::onNewToonzRasterLevelButtonPressed); + setCommandHandler("MI_NewRasterLevel", this, + &MainWindow::onNewRasterLevelButtonPressed); // remove ffmpegCache if still exists from crashed exit QString ffmpegCachePath = ToonzFolder::getCacheRootFolder().getQString() + "//ffmpeg"; @@ -1601,6 +1608,20 @@ void MainWindow::defineActions() { createMenuFileAction(MI_ClearRecentLevel, tr("&Clear Recent level File List"), ""); createMenuFileAction(MI_NewLevel, tr("&New Level..."), "Alt+N"); + + QAction *newVectorLevelAction = + createMenuFileAction(MI_NewVectorLevel, tr("&New Vector Level"), ""); + newVectorLevelAction->setIconText(tr("New Vector Level")); + newVectorLevelAction->setIcon(createQIconPNG("new_vector_level")); + QAction *newToonzRasterLevelAction = createMenuFileAction( + MI_NewToonzRasterLevel, tr("&New Toonz Raster Level"), ""); + newToonzRasterLevelAction->setIconText(tr("New Toonz Raster Level")); + newToonzRasterLevelAction->setIcon(createQIconPNG("new_toonz_raster_level")); + QAction *newRasterLevelAction = + createMenuFileAction(MI_NewRasterLevel, tr("&New Raster Level"), ""); + newRasterLevelAction->setIconText(tr("New Raster Level")); + newRasterLevelAction->setIcon(createQIconPNG("new_raster_level")); + createMenuFileAction(MI_LoadLevel, tr("&Load Level..."), ""); createMenuFileAction(MI_SaveLevel, tr("&Save Level"), ""); createMenuFileAction(MI_SaveAllLevels, tr("&Save All Levels"), ""); @@ -1957,6 +1978,7 @@ void MainWindow::defineActions() { createMenuWindowsAction(MI_OpenStyleControl, tr("&Style Editor"), ""); createMenuWindowsAction(MI_OpenToolbar, tr("&Toolbar"), ""); createMenuWindowsAction(MI_OpenToolOptionBar, tr("&Tool Option Bar"), ""); + createMenuWindowsAction(MI_OpenCommandToolbar, tr("&Command Bar"), ""); createMenuWindowsAction(MI_OpenLevelView, tr("&Viewer"), ""); #ifdef LINETEST createMenuWindowsAction(MI_OpenLineTestCapture, tr("&LineTest Capture"), ""); @@ -2259,6 +2281,33 @@ void MainWindow::togglePickStyleLines() { //----------------------------------------------------------------------------- +void MainWindow::onNewVectorLevelButtonPressed() { + int defaultLevelType = Preferences::instance()->getDefLevelType(); + Preferences::instance()->setDefLevelType(PLI_XSHLEVEL); + CommandManager::instance()->execute("MI_NewLevel"); + Preferences::instance()->setDefLevelType(defaultLevelType); +} + +//----------------------------------------------------------------------------- + +void MainWindow::onNewToonzRasterLevelButtonPressed() { + int defaultLevelType = Preferences::instance()->getDefLevelType(); + Preferences::instance()->setDefLevelType(TZP_XSHLEVEL); + CommandManager::instance()->execute("MI_NewLevel"); + Preferences::instance()->setDefLevelType(defaultLevelType); +} + +//----------------------------------------------------------------------------- + +void MainWindow::onNewRasterLevelButtonPressed() { + int defaultLevelType = Preferences::instance()->getDefLevelType(); + Preferences::instance()->setDefLevelType(OVL_XSHLEVEL); + CommandManager::instance()->execute("MI_NewLevel"); + Preferences::instance()->setDefLevelType(defaultLevelType); +} + +//----------------------------------------------------------------------------- + class ReloadStyle final : public MenuItemHandler { public: ReloadStyle() : MenuItemHandler("MI_ReloadStyle") {} diff --git a/toonz/sources/toonz/mainwindow.h b/toonz/sources/toonz/mainwindow.h index bfdb041..1c07330 100644 --- a/toonz/sources/toonz/mainwindow.h +++ b/toonz/sources/toonz/mainwindow.h @@ -118,6 +118,9 @@ public: /*-- StylepickerAreas,StylepickerLinesに直接切り替えるコマンド --*/ void togglePickStyleAreas(); void togglePickStyleLines(); + void onNewVectorLevelButtonPressed(); + void onNewToonzRasterLevelButtonPressed(); + void onNewRasterLevelButtonPressed(); QString getLayoutName() { return m_layoutName; } diff --git a/toonz/sources/toonz/menubar.cpp b/toonz/sources/toonz/menubar.cpp index f8ec356..4d68975 100644 --- a/toonz/sources/toonz/menubar.cpp +++ b/toonz/sources/toonz/menubar.cpp @@ -1335,6 +1335,7 @@ QMenuBar *StackedMenuBar::createFullMenuBar() { addMenuItem(windowsMenu, MI_OpenTasks); addMenuItem(windowsMenu, MI_OpenTMessage); addMenuItem(windowsMenu, MI_OpenToolbar); + addMenuItem(windowsMenu, MI_OpenCommandToolbar); addMenuItem(windowsMenu, MI_OpenToolOptionBar); addMenuItem(windowsMenu, MI_OpenLevelView); addMenuItem(windowsMenu, MI_OpenComboViewer); diff --git a/toonz/sources/toonz/menubarcommandids.h b/toonz/sources/toonz/menubarcommandids.h index 8f023f6..912ca8c 100644 --- a/toonz/sources/toonz/menubarcommandids.h +++ b/toonz/sources/toonz/menubarcommandids.h @@ -26,6 +26,9 @@ #define MI_ClearRecentLevel "MI_ClearRecentLevel" #define MI_PrintXsheet "MI_PrintXsheet" #define MI_NewLevel "MI_NewLevel" +#define MI_NewVectorLevel "MI_NewVectorLevel" +#define MI_NewToonzRasterLevel "MI_NewToonzRasterLevel" +#define MI_NewRasterLevel "MI_NewRasterLevel" #define MI_LoadLevel "MI_LoadLevel" #define MI_LoadFolder "MI_LoadFolder" #define MI_SaveLevel "MI_SaveLevel" @@ -86,6 +89,7 @@ #define MI_OpenFileBrowser2 "MI_OpenFileBrowser2" #define MI_OpenStyleControl "MI_OpenStyleControl" #define MI_OpenToolbar "MI_OpenToolbar" +#define MI_OpenCommandToolbar "MI_OpenCommandToolbar" #define MI_OpenToolOptionBar "MI_OpenToolOptionBar" #define MI_OpenLevelView "MI_OpenLevelView" #ifdef LINETEST diff --git a/toonz/sources/toonz/tpanels.cpp b/toonz/sources/toonz/tpanels.cpp index 0fe5898..951753e 100644 --- a/toonz/sources/toonz/tpanels.cpp +++ b/toonz/sources/toonz/tpanels.cpp @@ -14,6 +14,7 @@ #include "xsheetviewer.h" #include "sceneviewer.h" #include "toolbar.h" +#include "commandbar.h" #include "flipbook.h" #include "castviewer.h" #include "filebrowser.h" @@ -862,6 +863,35 @@ public: } toolbarFactory; //========================================================= +// Command Bar Panel +//--------------------------------------------------------- + +//----------------------------------------------------------------------------- +CommandBarPanel::CommandBarPanel(QWidget *parent) + : TPanel(parent, 0, TDockWidget::horizontal) { + CommandBar *xsheetToolbar = new CommandBar(); + setWidget(xsheetToolbar); + setIsMaximizable(false); + setFixedHeight(36); +} + +class CommandBarFactory final : public TPanelFactory { +public: + CommandBarFactory() : TPanelFactory("CommandBar") {} + TPanel *createPanel(QWidget *parent) override { + TPanel *panel = new CommandBarPanel(parent); + panel->setObjectName(getPanelType()); + return panel; + } + void initialize(TPanel *panel) override {} +} commandBarFactory; + +//============================================================================= +OpenFloatingPanel openCommandBarCommand(MI_OpenCommandToolbar, "CommandBar", + QObject::tr("Command Bar")); +//----------------------------------------------------------------------------- + +//========================================================= // ToolOptionPanel //--------------------------------------------------------- diff --git a/toonz/sources/toonz/tpanels.h b/toonz/sources/toonz/tpanels.h index d6501d8..db50598 100644 --- a/toonz/sources/toonz/tpanels.h +++ b/toonz/sources/toonz/tpanels.h @@ -210,6 +210,15 @@ public: ToolOptionPanel(QWidget *parent); }; +class CommandBarPanel final : public TPanel { + Q_OBJECT + + // ToolOptions *m_toolOption; + +public: + CommandBarPanel(QWidget *parent); +}; + //========================================================= // FlipbookPanel //--------------------------------------------------------- diff --git a/toonz/sources/toonz/xsheetviewer.cpp b/toonz/sources/toonz/xsheetviewer.cpp index b34eeb9..e8bd779 100644 --- a/toonz/sources/toonz/xsheetviewer.cpp +++ b/toonz/sources/toonz/xsheetviewer.cpp @@ -169,13 +169,9 @@ XsheetViewer::XsheetViewer(QWidget *parent, Qt::WFlags flags) TApp::instance()->getCurrentXsheet()); m_toolbarScrollArea = new XsheetScrollArea(this); - m_toolbarScrollArea->setFixedSize(m_orientation->cellWidth() * 12, - XsheetGUI::TOOLBAR_HEIGHT); m_toolbarScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_toolbarScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_toolbar = new XsheetGUI::Toolbar(this); - m_toolbar->setFixedSize(m_orientation->cellWidth() * 12, - XsheetGUI::TOOLBAR_HEIGHT); + m_toolbar = new XsheetGUI::XSheetToolbar(this, 0, true); m_toolbarScrollArea->setWidget(m_toolbar); QRect noteArea(0, 0, 75, 120); @@ -215,6 +211,8 @@ XsheetViewer::XsheetViewer(QWidget *parent, Qt::WFlags flags) connect(this, &XsheetViewer::orientationChanged, this, &XsheetViewer::onOrientationChanged); + connect(m_toolbar, SIGNAL(updateVisibility()), this, + SLOT(positionSections())); emit orientationChanged(orientation()); } @@ -313,10 +311,9 @@ void XsheetViewer::positionSections() { if (Preferences::instance()->isShowXSheetToolbarEnabled()) { m_toolbar->showToolbar(true); - - int w = geometry().size().width(); + int w = visibleRegion().boundingRect().width() - 5; m_toolbarScrollArea->setGeometry(0, 0, w, XsheetGUI::TOOLBAR_HEIGHT); - + m_toolbar->setFixedWidth(w); if (o->isVerticalTimeline()) { headerFrame = headerFrame.adjusted(XsheetGUI::TOOLBAR_HEIGHT, XsheetGUI::TOOLBAR_HEIGHT); diff --git a/toonz/sources/toonz/xsheetviewer.h b/toonz/sources/toonz/xsheetviewer.h index 7a8238c..c55624c 100644 --- a/toonz/sources/toonz/xsheetviewer.h +++ b/toonz/sources/toonz/xsheetviewer.h @@ -325,7 +325,7 @@ class XsheetViewer final : public QFrame, public SaveLoadQSettings { XsheetGUI::RowArea *m_rowArea; XsheetGUI::CellArea *m_cellArea; XsheetGUI::NoteArea *m_noteArea; - XsheetGUI::Toolbar *m_toolbar; + XsheetGUI::XSheetToolbar *m_toolbar; Spreadsheet::FrameScroller m_frameScroller; @@ -698,7 +698,6 @@ protected: void wheelEvent(QWheelEvent *event) override; void timerEvent(QTimerEvent *) override; - void positionSections(); void disconnectScrollBars(); void connectScrollBars(); void connectOrDisconnectScrollBars(bool toConnect); @@ -708,6 +707,7 @@ signals: void orientationChanged(const Orientation *newOrientation); public slots: + void positionSections(); void onSceneSwitched(); void onXsheetChanged(); void onCurrentFrameSwitched(); diff --git a/toonz/sources/toonz/xshtoolbar.cpp b/toonz/sources/toonz/xshtoolbar.cpp index 114d9cc..eafafb5 100644 --- a/toonz/sources/toonz/xshtoolbar.cpp +++ b/toonz/sources/toonz/xshtoolbar.cpp @@ -12,9 +12,11 @@ // TnzLib includes #include "toonz/preferences.h" #include "toonz/tscenehandle.h" +#include "toonzqt/menubarcommand.h" // Qt includes #include <QPushButton> +#include <QWidgetAction> //============================================================================= @@ -25,144 +27,77 @@ namespace XsheetGUI { //----------------------------------------------------------------------------- #if QT_VERSION >= 0x050500 -Toolbar::Toolbar(XsheetViewer *parent, Qt::WindowFlags flags) +XSheetToolbar::XSheetToolbar(XsheetViewer *parent, Qt::WindowFlags flags, + bool isCollapsible) #else -Toolbar::Toolbar(XsheetViewer *parent, Qt::WFlags flags) +XSheetToolbar::XSheetToolbar(XsheetViewer *parent, Qt::WFlags flags) #endif - : QFrame(parent), m_viewer(parent) { - setFrameStyle(QFrame::StyledPanel); + : QToolBar(parent), m_viewer(parent), m_isCollapsible(isCollapsible) { setObjectName("cornerWidget"); - m_toolbar = new QToolBar(); - m_toolbar->setFixedHeight(30); - m_toolbar->setObjectName("XSheetToolbar"); - - m_newVectorLevelButton = new QPushButton(this); - m_newVectorLevelButton->setIconSize(QSize(18, 18)); - QIcon newVectorIcon = createQIconPNG("new_vector_level"); - m_newVectorLevelButton->setIcon(newVectorIcon); - m_newVectorLevelButton->setObjectName("XSheetToolbarLevelButton"); - m_newVectorLevelButton->setToolTip(tr("New Vector Level")); - - m_newToonzRasterLevelButton = new QPushButton(this); - m_newToonzRasterLevelButton->setIconSize(QSize(18, 18)); - QIcon newToonzRasterIcon = createQIconPNG("new_toonz_raster_level"); - m_newToonzRasterLevelButton->setIcon(newToonzRasterIcon); - m_newToonzRasterLevelButton->setObjectName("XSheetToolbarLevelButton"); - m_newToonzRasterLevelButton->setToolTip(tr("New Toonz Raster Level")); - - m_newRasterLevelButton = new QPushButton(this); - m_newRasterLevelButton->setIconSize(QSize(18, 18)); - QIcon newRasterIcon = createQIconPNG("new_raster_level"); - m_newRasterLevelButton->setIcon(newRasterIcon); - m_newRasterLevelButton->setObjectName("XSheetToolbarLevelButton"); - m_newRasterLevelButton->setToolTip(tr("New Raster Level")); + setFixedHeight(30); + setObjectName("XSheetToolbar"); TApp *app = TApp::instance(); m_keyFrameButton = new ViewerKeyframeNavigator(this, app->getCurrentFrame()); m_keyFrameButton->setObjectHandle(app->getCurrentObject()); m_keyFrameButton->setXsheetHandle(app->getCurrentXsheet()); - QVBoxLayout *mainLay = new QVBoxLayout(); - mainLay->setMargin(0); - mainLay->setSpacing(5); + QWidgetAction *keyFrameAction = new QWidgetAction(this); + keyFrameAction->setDefaultWidget(m_keyFrameButton); + { - mainLay->addStretch(1); - QHBoxLayout *toolbarLayout = new QHBoxLayout(); - toolbarLayout->setSpacing(2); - toolbarLayout->setMargin(0); - { - m_toolbar->addWidget(m_newVectorLevelButton); - m_toolbar->addWidget(m_newToonzRasterLevelButton); - m_toolbar->addWidget(m_newRasterLevelButton); - m_toolbar->addSeparator(); - QAction *reframeOnes = - CommandManager::instance()->getAction("MI_Reframe1"); - m_toolbar->addAction(reframeOnes); - QAction *reframeTwos = - CommandManager::instance()->getAction("MI_Reframe2"); - m_toolbar->addAction(reframeTwos); - QAction *reframeThrees = - CommandManager::instance()->getAction("MI_Reframe3"); - m_toolbar->addAction(reframeThrees); - - m_toolbar->addSeparator(); - - QAction *repeat = CommandManager::instance()->getAction("MI_Dup"); - m_toolbar->addAction(repeat); - - m_toolbar->addSeparator(); - - QAction *collapse = CommandManager::instance()->getAction("MI_Collapse"); - m_toolbar->addAction(collapse); - QAction *open = CommandManager::instance()->getAction("MI_OpenChild"); - m_toolbar->addAction(open); - QAction *leave = CommandManager::instance()->getAction("MI_CloseChild"); - m_toolbar->addAction(leave); - - m_toolbar->addSeparator(); - m_toolbar->addWidget(m_keyFrameButton); - toolbarLayout->addWidget(m_toolbar); - toolbarLayout->addStretch(0); - } - mainLay->addLayout(toolbarLayout, 0); - if (!Preferences::instance()->isShowXSheetToolbarEnabled()) { - m_toolbar->hide(); + QAction *newVectorLevel = + CommandManager::instance()->getAction("MI_NewVectorLevel"); + addAction(newVectorLevel); + QAction *newToonzRasterLevel = + CommandManager::instance()->getAction("MI_NewToonzRasterLevel"); + addAction(newToonzRasterLevel); + QAction *newRasterLevel = + CommandManager::instance()->getAction("MI_NewRasterLevel"); + addAction(newRasterLevel); + addSeparator(); + QAction *reframeOnes = CommandManager::instance()->getAction("MI_Reframe1"); + addAction(reframeOnes); + QAction *reframeTwos = CommandManager::instance()->getAction("MI_Reframe2"); + addAction(reframeTwos); + QAction *reframeThrees = + CommandManager::instance()->getAction("MI_Reframe3"); + addAction(reframeThrees); + + addSeparator(); + + QAction *repeat = CommandManager::instance()->getAction("MI_Dup"); + addAction(repeat); + + addSeparator(); + + QAction *collapse = CommandManager::instance()->getAction("MI_Collapse"); + addAction(collapse); + QAction *open = CommandManager::instance()->getAction("MI_OpenChild"); + addAction(open); + QAction *leave = CommandManager::instance()->getAction("MI_CloseChild"); + addAction(leave); + + addSeparator(); + addAction(keyFrameAction); + + if (!Preferences::instance()->isShowXSheetToolbarEnabled() && + m_isCollapsible) { + hide(); } - - mainLay->addStretch(1); } - setLayout(mainLay); - - // signal-slot connections - bool ret = true; - ret = ret && connect(m_newVectorLevelButton, SIGNAL(released()), this, - SLOT(onNewVectorLevelButtonPressed())); - ret = ret && connect(m_newToonzRasterLevelButton, SIGNAL(released()), this, - SLOT(onNewToonzRasterLevelButtonPressed())); - ret = ret && connect(m_newRasterLevelButton, SIGNAL(released()), this, - SLOT(onNewRasterLevelButtonPressed())); - assert(ret); - - // m_leaveSubButton->hide(); } //----------------------------------------------------------------------------- -void Toolbar::onNewVectorLevelButtonPressed() { - int defaultLevelType = Preferences::instance()->getDefLevelType(); - Preferences::instance()->setDefLevelType(PLI_XSHLEVEL); - CommandManager::instance()->execute("MI_NewLevel"); - Preferences::instance()->setDefLevelType(defaultLevelType); +void XSheetToolbar::showToolbar(bool show) { + if (!m_isCollapsible) return; + show ? this->show() : this->hide(); } //----------------------------------------------------------------------------- -void Toolbar::onNewToonzRasterLevelButtonPressed() { - int defaultLevelType = Preferences::instance()->getDefLevelType(); - // Preferences::instance()->setOldDefLevelType(defaultLevelType); - Preferences::instance()->setDefLevelType(TZP_XSHLEVEL); - CommandManager::instance()->execute("MI_NewLevel"); - Preferences::instance()->setDefLevelType(defaultLevelType); -} - -//----------------------------------------------------------------------------- - -void Toolbar::onNewRasterLevelButtonPressed() { - int defaultLevelType = Preferences::instance()->getDefLevelType(); - Preferences::instance()->setDefLevelType(OVL_XSHLEVEL); - CommandManager::instance()->execute("MI_NewLevel"); - Preferences::instance()->setDefLevelType(defaultLevelType); -} - -//----------------------------------------------------------------------------- - -void Toolbar::showToolbar(bool show) { - show ? m_toolbar->show() : m_toolbar->hide(); -} - -//----------------------------------------------------------------------------- - -void Toolbar::toggleXSheetToolbar() { +void XSheetToolbar::toggleXSheetToolbar() { bool toolbarEnabled = Preferences::instance()->isShowXSheetToolbarEnabled(); Preferences::instance()->enableShowXSheetToolbar(!toolbarEnabled); TApp::instance()->getCurrentScene()->notifyPreferenceChanged("XSheetToolbar"); @@ -170,12 +105,20 @@ void Toolbar::toggleXSheetToolbar() { //----------------------------------------------------------------------------- +void XSheetToolbar::showEvent(QShowEvent *e) { + if (Preferences::instance()->isShowXSheetToolbarEnabled() || !m_isCollapsible) + show(); + else + hide(); + emit updateVisibility(); +} + //============================================================ class ToggleXSheetToolbarCommand final : public MenuItemHandler { public: ToggleXSheetToolbarCommand() : MenuItemHandler(MI_ToggleXSheetToolbar) {} - void execute() override { Toolbar::toggleXSheetToolbar(); } + void execute() override { XSheetToolbar::toggleXSheetToolbar(); } } ToggleXSheetToolbarCommand; //============================================================ diff --git a/toonz/sources/toonz/xshtoolbar.h b/toonz/sources/toonz/xshtoolbar.h index 18e5f70..0ca8690 100644 --- a/toonz/sources/toonz/xshtoolbar.h +++ b/toonz/sources/toonz/xshtoolbar.h @@ -26,30 +26,27 @@ namespace XsheetGUI { // XSheet Toolbar //----------------------------------------------------------------------------- -class Toolbar final : public QFrame { +class XSheetToolbar final : public QToolBar { Q_OBJECT XsheetViewer *m_viewer; - - QPushButton *m_newVectorLevelButton; - QPushButton *m_newToonzRasterLevelButton; - QPushButton *m_newRasterLevelButton; ViewerKeyframeNavigator *m_keyFrameButton; - QToolBar *m_toolbar; + bool m_isCollapsible; public: #if QT_VERSION >= 0x050500 - Toolbar(XsheetViewer *parent = 0, Qt::WindowFlags flags = 0); + XSheetToolbar(XsheetViewer *parent = 0, Qt::WindowFlags flags = 0, + bool isCollapsible = false); #else - Toolbar(XsheetViewer *parent = 0, Qt::WFlags flags = 0); + XSheetToolbar(XsheetViewer *parent = 0, Qt::WFlags flags = 0); #endif static void toggleXSheetToolbar(); void showToolbar(bool show); +signals: + void updateVisibility(); -protected slots: - void onNewVectorLevelButtonPressed(); - void onNewToonzRasterLevelButtonPressed(); - void onNewRasterLevelButtonPressed(); +protected: + void showEvent(QShowEvent *e) override; }; } // namespace XsheetGUI;