diff --git a/toonz/sources/toonz/filmstrip.cpp b/toonz/sources/toonz/filmstrip.cpp index c647ff0..0067ed4 100644 --- a/toonz/sources/toonz/filmstrip.cpp +++ b/toonz/sources/toonz/filmstrip.cpp @@ -1270,7 +1270,7 @@ void FilmstripFrames::contextMenuEvent(QContextMenuEvent *event) { sl->getPath().getType() != "mp4" && sl->getPath().getType() != "webm"))) menu->addAction(cm->getAction(MI_RevertToLastSaved)); menu->addSeparator(); - + createSelectLevelMenu(menu); QMenu *panelMenu = menu->addMenu(tr("Panel Settings")); QAction *toggleOrientation = panelMenu->addAction(tr("Toggle Orientation")); QAction *hideComboBox = panelMenu->addAction(tr("Show/Hide Drop Down Menu")); @@ -1292,6 +1292,43 @@ void FilmstripFrames::contextMenuEvent(QContextMenuEvent *event) { //----------------------------------------------------------------------------- +void FilmstripFrames::createSelectLevelMenu(QMenu *menu) { + ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); + if (scene) { + std::vector levels; + scene->getLevelSet()->listLevels(levels); + std::vector::iterator it; + int i = 0; + bool active = false; + QMenu *levelSelectMenu; + for (it = levels.begin(); it != levels.end(); ++it) { + TXshSimpleLevel *sl = (*it)->getSimpleLevel(); + if (sl) { + // register only used level in xsheet + if (!scene->getTopXsheet()->isLevelUsed(sl)) continue; + QString levelName = QString::fromStdWString(sl->getName()); + if (i == 0) { + levelSelectMenu = menu->addMenu(tr("Select Level")); + active = true; + } + if (active) { + QAction *action = levelSelectMenu->addAction(levelName); + connect(action, &QAction::triggered, [=] { levelSelected(i); }); + } + i++; + } + } + } +} + +//----------------------------------------------------------------------------- + +void FilmstripFrames::levelSelected(int index) { + emit(levelSelectedSignal(index)); +} + +//----------------------------------------------------------------------------- + void FilmstripFrames::comboBoxToggled(bool ignore) { emit(comboBoxToggledSignal()); } @@ -1505,6 +1542,8 @@ Filmstrip::Filmstrip(QWidget *parent, Qt::WFlags flags) SLOT(comboBoxToggled())); connect(m_frames, SIGNAL(navigatorToggledSignal()), this, SLOT(navigatorToggled())); + connect(m_frames, SIGNAL(levelSelectedSignal(int)), this, + SLOT(onChooseLevelComboChanged(int))); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/filmstrip.h b/toonz/sources/toonz/filmstrip.h index c9e3b79..fb3cb97 100644 --- a/toonz/sources/toonz/filmstrip.h +++ b/toonz/sources/toonz/filmstrip.h @@ -128,6 +128,7 @@ signals: void orientationToggledSignal(bool); void comboBoxToggledSignal(); void navigatorToggledSignal(); + void levelSelectedSignal(int); protected: void showEvent(QShowEvent *) override; @@ -156,7 +157,7 @@ protected: void contextMenuEvent(QContextMenuEvent *event) override; void startDragDrop(); - + void createSelectLevelMenu(QMenu *menu); void inbetween(); void execNavigatorPan(const QPoint &point); @@ -170,6 +171,7 @@ protected slots: void orientationToggled(bool); void comboBoxToggled(bool); void navigatorToggled(bool); + void levelSelected(int); private: // QSS Properties diff --git a/toonz/sources/toonzqt/docklayout.cpp b/toonz/sources/toonzqt/docklayout.cpp index ad5d990..a5b2cd6 100644 --- a/toonz/sources/toonzqt/docklayout.cpp +++ b/toonz/sources/toonzqt/docklayout.cpp @@ -424,7 +424,7 @@ void DockLayout::applyTransform(const QTransform &transform) { // check if the region will be with fixed width bool Region::checkWidgetsToBeFixedWidth(std::vector &widgets) { if (m_item) { - if (m_item->objectName() == "FilmStrip" || + if ( // m_item->objectName() == "FilmStrip" || m_item->objectName() == "StyleEditor") { widgets.push_back(m_item); return true; @@ -466,9 +466,9 @@ void DockLayout::redistribute() { // glitchy. bool widgetsCanBeFixedWidth = !m_regions.front()->checkWidgetsToBeFixedWidth(widgets); - // if (widgetsCanBeFixedWidth) { - // for (QWidget *widget : widgets) widget->setFixedWidth(widget->width()); - //} + if (widgetsCanBeFixedWidth) { + for (QWidget *widget : widgets) widget->setFixedWidth(widget->width()); + } m_regions.front()->calculateExtremalSizes(); @@ -487,12 +487,12 @@ void DockLayout::redistribute() { m_regions.front()->setGeometry(contentsRect()); m_regions.front()->redistribute(); - // if (widgetsCanBeFixedWidth) { - // for (QWidget *widget : widgets) { - // widget->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); - // widget->setMinimumSize(0, 0); - // } - //} + if (widgetsCanBeFixedWidth) { + for (QWidget *widget : widgets) { + widget->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + widget->setMinimumSize(0, 0); + } + } } // Finally, apply Region geometries found