From a30667c815392b76262d08b85eced8ee11a539b2 Mon Sep 17 00:00:00 2001 From: shun_iwasawa Date: Wed, 6 Jul 2016 12:50:25 +0900 Subject: [PATCH] fix crash on save level as command --- toonz/sources/toonz/filebrowserpopup.cpp | 34 ++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/toonz/sources/toonz/filebrowserpopup.cpp b/toonz/sources/toonz/filebrowserpopup.cpp index 833227ef..0c9bc67a 100644 --- a/toonz/sources/toonz/filebrowserpopup.cpp +++ b/toonz/sources/toonz/filebrowserpopup.cpp @@ -1456,6 +1456,38 @@ void SaveLevelAsPopup::initFolder() { if (scene) fp = scene->decodeFilePath(project->getFolder(TProject::Drawings)); setFolder(fp); } + +//--------------------------------------------------------------------------- +/* + For Save Level As command, it is needed to check if the current level is + selected (just like Save Level command) BEFORE opening the popup. So I decided + to use an original MenuItemHandler rather than OpenPopupCommandHandler. + 06/07/2016 Shun +*/ + +class SaveLevelAsCommandHandler final : public MenuItemHandler { + SaveLevelAsPopup *m_popup; + +public: + SaveLevelAsCommandHandler() : MenuItemHandler(MI_SaveLevelAs), m_popup(0) {} + void execute() override { + TXshSimpleLevel *sl = TApp::instance()->getCurrentLevel()->getSimpleLevel(); + if (!sl) { + DVGui::warning(QObject::tr("No Current Level")); + return; + } + ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); + if (!scene) { + DVGui::warning(QObject::tr("No Current Scene")); + return; + } + if (!m_popup) m_popup = new SaveLevelAsPopup(); + m_popup->show(); + m_popup->raise(); + m_popup->activateWindow(); + } +} saveLevelAsCommandHandler; + //============================================================================= // ReplaceLevelPopup @@ -2040,8 +2072,6 @@ OpenPopupCommandHandler saveSceneAsPopupCommand( OpenPopupCommandHandler saveSubSceneAsPopupCommand( MI_SaveSubxsheetAs); OpenPopupCommandHandler loadLevelPopupCommand(MI_LoadLevel); -OpenPopupCommandHandler saveLevelAsPopupCommand( - MI_SaveLevelAs); OpenPopupCommandHandler convertWithInputPopupCommand( MI_ConvertFileWithInput); OpenPopupCommandHandler replaceLevelPopupCommand(