Merge branch 'master' into stop_motion_improvement

This commit is contained in:
Jeremy Bullock 2020-04-14 14:24:39 -06:00
commit 66ce2db839
5 changed files with 212 additions and 63 deletions

View file

@ -1641,6 +1641,13 @@ void SceneViewer::onContextMenu(const QPoint &pos, const QPoint &globalPos) {
cvp->addShowHideContextMenu(menu); cvp->addShowHideContextMenu(menu);
} }
SceneViewerPanel *svp = qobject_cast<SceneViewerPanel *>(
parentWidget()->parentWidget()->parentWidget());
if (svp) {
menu->addSeparator();
svp->addShowHideContextMenu(menu);
}
menu->exec(globalPos); menu->exec(globalPos);
delete menu; delete menu;
menuVisible = false; menuVisible = false;

View file

@ -857,33 +857,6 @@ OpenFloatingPanel openStyleEditorCommand(MI_OpenStyleControl, "StyleEditor",
QObject::tr("Style Editor")); QObject::tr("Style Editor"));
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//=============================================================================
// SceneViewer
//-----------------------------------------------------------------------------
class SceneViewerFactory final : public TPanelFactory {
public:
SceneViewerFactory() : TPanelFactory("SceneViewer") {}
TPanel *createPanel(QWidget *parent) override {
SceneViewerPanel *panel = new SceneViewerPanel(parent);
panel->setObjectName(getPanelType());
panel->setWindowTitle(QObject::tr("Viewer"));
panel->setMinimumSize(220, 280);
return panel;
}
void initialize(TPanel *panel) override { assert(0); }
} sceneViewerFactory;
//=============================================================================
OpenFloatingPanel openSceneViewerCommand(MI_OpenLevelView, "SceneViewer",
QObject::tr("Viewer"));
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
class ToolbarFactory final : public TPanelFactory { class ToolbarFactory final : public TPanelFactory {
public: public:
ToolbarFactory() : TPanelFactory("ToolBar") {} ToolbarFactory() : TPanelFactory("ToolBar") {}
@ -1328,6 +1301,53 @@ OpenFloatingPanel openComboViewerCommand(MI_OpenComboViewer, "ComboViewer",
QObject::tr("Combo Viewer")); QObject::tr("Combo Viewer"));
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//=============================================================================
// SceneViewer
//-----------------------------------------------------------------------------
SceneViewerPanelContainer::SceneViewerPanelContainer(QWidget* parent)
: StyleShortcutSwitchablePanel(parent) {
m_sceneViewer = new SceneViewerPanel(parent);
setFocusProxy(m_sceneViewer);
setWidget(m_sceneViewer);
m_sceneViewer->initializeTitleBar(getTitleBar());
}
// reimplementation of TPanel::widgetInThisPanelIsFocused
bool SceneViewerPanelContainer::widgetInThisPanelIsFocused() {
return m_sceneViewer->hasFocus();
}
// reimplementation of TPanel::widgetFocusOnEnter
void SceneViewerPanelContainer::widgetFocusOnEnter() {
m_sceneViewer->onEnterPanel();
}
void SceneViewerPanelContainer::widgetClearFocusOnLeave() {
m_sceneViewer->onLeavePanel();
}
//-----------------------------------------------------------------------------
class SceneViewerFactory final : public TPanelFactory {
public:
SceneViewerFactory() : TPanelFactory("SceneViewer") {}
TPanel* createPanel(QWidget* parent) override {
SceneViewerPanelContainer* panel = new SceneViewerPanelContainer(parent);
panel->setObjectName(getPanelType());
panel->setWindowTitle(QObject::tr("Viewer"));
panel->setMinimumSize(220, 280);
//panel->resize(700, 600);
return panel;
}
void initialize(TPanel* panel) override { assert(0); }
} sceneViewerFactory;
//=============================================================================
OpenFloatingPanel openSceneViewerCommand(MI_OpenLevelView, "SceneViewer",
QObject::tr("Viewer"));
//-----------------------------------------------------------------------------
//============================================================================= //=============================================================================
// CleanupSettings DockWindow // CleanupSettings DockWindow
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View file

@ -26,6 +26,7 @@ class FunctionViewer;
class FlipBook; class FlipBook;
class ToolOptions; class ToolOptions;
class ComboViewerPanel; class ComboViewerPanel;
class SceneViewerPanel;
class FxSettings; class FxSettings;
class VectorGuidedDrawingPane; class VectorGuidedDrawingPane;
@ -271,6 +272,25 @@ protected:
void widgetClearFocusOnLeave() override; void widgetClearFocusOnLeave() override;
}; };
//=========================================================
// SceneViewerPanel
//---------------------------------------------------------
class SceneViewerPanelContainer final : public StyleShortcutSwitchablePanel {
Q_OBJECT
SceneViewerPanel *m_sceneViewer;
public:
SceneViewerPanelContainer(QWidget* parent);
// reimplementation of TPanel::widgetInThisPanelIsFocused
bool widgetInThisPanelIsFocused() override;
protected:
// reimplementation of TPanel::widgetFocusOnEnter
void widgetFocusOnEnter() override;
void widgetClearFocusOnLeave() override;
};
//========================================================= //=========================================================
// FxSettingsPanel // FxSettingsPanel
//--------------------------------------------------------- //---------------------------------------------------------

View file

@ -61,9 +61,19 @@
#include <QMenu> #include <QMenu>
#include <QToolBar> #include <QToolBar>
#include <QMainWindow> #include <QMainWindow>
#include <QSettings>
#include "viewerpane.h" #include "viewerpane.h"
enum CV_Parts {
CVPARTS_None = 0,
CVPARTS_TOOLBAR = 0x1,
CVPARTS_TOOLOPTIONS = 0x2,
CVPARTS_FLIPCONSOLE = 0x4,
CVPARTS_End = 0x8,
CVPARTS_ALL = CVPARTS_TOOLBAR | CVPARTS_TOOLOPTIONS | CVPARTS_FLIPCONSOLE
};
using namespace DVGui; using namespace DVGui;
//============================================================================= //=============================================================================
@ -77,17 +87,16 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WindowFlags flags)
#else #else
SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags) SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags)
#endif #endif
: StyleShortcutSwitchablePanel(parent) { : QFrame(parent) {
QFrame *hbox = new QFrame(this); setFrameStyle(QFrame::StyledPanel);
hbox->setFrameStyle(QFrame::StyledPanel); setObjectName("ViewerPanel");
hbox->setObjectName("ViewerPanel");
QVBoxLayout *mainLayout = new QVBoxLayout(hbox); QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setMargin(0); mainLayout->setMargin(0);
mainLayout->setSpacing(0); mainLayout->setSpacing(0);
// Viewer // Viewer
QWidget *viewer = new QWidget(hbox); QWidget *viewer = new QWidget(this);
QGridLayout *viewerL = new QGridLayout(viewer); QGridLayout *viewerL = new QGridLayout(viewer);
ImageUtils::FullScreenWidget *fsWidget = ImageUtils::FullScreenWidget *fsWidget =
@ -173,16 +182,80 @@ SceneViewerPanel::SceneViewerPanel(QWidget *parent, Qt::WFlags flags)
->getFrameRate()); ->getFrameRate());
updateFrameRange(), updateFrameMarkers(); updateFrameRange(), updateFrameMarkers();
hbox->setLayout(mainLayout);
setWidget(hbox); setLayout(mainLayout);
initializeTitleBar( m_visiblePartsFlag = CVPARTS_ALL;
getTitleBar()); // note: initializeTitleBar() refers to m_sceneViewer updateShowHide();
setFocusProxy(m_sceneViewer);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/*! toggle show/hide of the widgets according to m_visibleFlag
*/
void SceneViewerPanel::updateShowHide() {
// flip console
m_flipConsole->showHideAllParts(m_visiblePartsFlag & CVPARTS_FLIPCONSOLE);
update();
}
//-----------------------------------------------------------------------------
/*! showing the show/hide commands
*/
void SceneViewerPanel::contextMenuEvent(QContextMenuEvent* event) {
QMenu* menu = new QMenu(this);
addShowHideContextMenu(menu);
menu->exec(event->globalPos());
}
//-----------------------------------------------------------------------------
void SceneViewerPanel::addShowHideContextMenu(QMenu* menu) {
QMenu* showHideMenu = menu->addMenu(tr("GUI Show / Hide"));
// actions
QAction* flipConsoleSHAct = showHideMenu->addAction(tr("Console"));
flipConsoleSHAct->setCheckable(true);
flipConsoleSHAct->setChecked(m_visiblePartsFlag & CVPARTS_FLIPCONSOLE);
flipConsoleSHAct->setData((UINT)CVPARTS_FLIPCONSOLE);
QActionGroup* showHideActGroup = new QActionGroup(this);
showHideActGroup->setExclusive(false);
showHideActGroup->addAction(flipConsoleSHAct);
connect(showHideActGroup, SIGNAL(triggered(QAction*)), this,
SLOT(onShowHideActionTriggered(QAction*)));
showHideMenu->addSeparator();
showHideMenu->addAction(CommandManager::instance()->getAction(MI_ViewCamera));
showHideMenu->addAction(CommandManager::instance()->getAction(MI_ViewTable));
showHideMenu->addAction(CommandManager::instance()->getAction(MI_FieldGuide));
showHideMenu->addAction(CommandManager::instance()->getAction(MI_SafeArea));
showHideMenu->addAction(CommandManager::instance()->getAction(MI_ViewBBox));
showHideMenu->addAction(
CommandManager::instance()->getAction(MI_ViewColorcard));
showHideMenu->addAction(CommandManager::instance()->getAction(MI_ViewRuler));
}
//-----------------------------------------------------------------------------
/*! slot function for show/hide the parts
*/
void SceneViewerPanel::onShowHideActionTriggered(QAction* act) {
CV_Parts part = (CV_Parts)act->data().toUInt();
assert(part < CVPARTS_End);
m_visiblePartsFlag ^= part;
updateShowHide();
}
void SceneViewerPanel::onDrawFrame( void SceneViewerPanel::onDrawFrame(
int frame, const ImagePainter::VisualSettings &settings) { int frame, const ImagePainter::VisualSettings &settings) {
TApp *app = TApp::instance(); TApp *app = TApp::instance();
@ -229,7 +302,6 @@ SceneViewerPanel::~SceneViewerPanel() {}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void SceneViewerPanel::showEvent(QShowEvent *event) { void SceneViewerPanel::showEvent(QShowEvent *event) {
StyleShortcutSwitchablePanel::showEvent(event);
TApp *app = TApp::instance(); TApp *app = TApp::instance();
TFrameHandle *frameHandle = app->getCurrentFrame(); TFrameHandle *frameHandle = app->getCurrentFrame();
TSceneHandle *sceneHandle = app->getCurrentScene(); TSceneHandle *sceneHandle = app->getCurrentScene();
@ -250,7 +322,9 @@ void SceneViewerPanel::showEvent(QShowEvent *event) {
ret = ret && connect(sceneHandle, SIGNAL(nameSceneChanged()), this, ret = ret && connect(sceneHandle, SIGNAL(nameSceneChanged()), this,
SLOT(changeWindowTitle())); SLOT(changeWindowTitle()));
ret =
ret && connect(sceneHandle, SIGNAL(preferenceChanged(const QString&)),
m_flipConsole, SLOT(onPreferenceChanged(const QString&)));
ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this, ret = ret && connect(levelHandle, SIGNAL(xshLevelSwitched(TXshLevel *)), this,
SLOT(onXshLevelSwitched(TXshLevel *))); SLOT(onXshLevelSwitched(TXshLevel *)));
ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this, ret = ret && connect(levelHandle, SIGNAL(xshLevelChanged()), this,
@ -275,12 +349,12 @@ void SceneViewerPanel::showEvent(QShowEvent *event) {
// Aggiorno FPS al valore definito nel viewer corrente. // Aggiorno FPS al valore definito nel viewer corrente.
// frameHandle->setPreviewFrameRate(m_fpsSlider->value()); // frameHandle->setPreviewFrameRate(m_fpsSlider->value());
m_flipConsole->setActive(true); m_flipConsole->setActive(true);
m_flipConsole->onPreferenceChanged("");
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void SceneViewerPanel::hideEvent(QHideEvent *event) { void SceneViewerPanel::hideEvent(QHideEvent *event) {
StyleShortcutSwitchablePanel::hideEvent(event);
TApp *app = TApp::instance(); TApp *app = TApp::instance();
TFrameHandle *frameHandle = app->getCurrentFrame(); TFrameHandle *frameHandle = app->getCurrentFrame();
TSceneHandle *sceneHandle = app->getCurrentScene(); TSceneHandle *sceneHandle = app->getCurrentScene();
@ -313,6 +387,8 @@ void SceneViewerPanel::hideEvent(QHideEvent *event) {
disconnect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer, disconnect(app->getCurrentTool(), SIGNAL(toolSwitched()), m_sceneViewer,
SLOT(onToolSwitched())); SLOT(onToolSwitched()));
disconnect(app->getCurrentScene(), SIGNAL(preferenceChanged(const QString&)),
m_flipConsole, SLOT(onPreferenceChanged(const QString&)));
m_flipConsole->setActive(false); m_flipConsole->setActive(false);
} }
@ -522,6 +598,7 @@ void SceneViewerPanel::changeWindowTitle() {
// zoom = sqrt(m_sceneViewer->getViewMatrix().det()); // zoom = sqrt(m_sceneViewer->getViewMatrix().det());
ToonzScene *scene = app->getCurrentScene()->getScene(); ToonzScene *scene = app->getCurrentScene()->getScene();
if (!scene) return; if (!scene) return;
if (!parentWidget()) return;
int frame = app->getCurrentFrame()->getFrame(); int frame = app->getCurrentFrame()->getFrame();
QString name; QString name;
if (app->getCurrentFrame()->isEditingScene()) { if (app->getCurrentFrame()->isEditingScene()) {
@ -535,7 +612,7 @@ void SceneViewerPanel::changeWindowTitle() {
name + tr(" :: Frame: ") + tr(std::to_string(frame + 1).c_str()); name + tr(" :: Frame: ") + tr(std::to_string(frame + 1).c_str());
int col = app->getCurrentColumn()->getColumnIndex(); int col = app->getCurrentColumn()->getColumnIndex();
if (col < 0) { if (col < 0) {
setWindowTitle(name); parentWidget()->setWindowTitle(name);
return; return;
} }
TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet();
@ -552,7 +629,7 @@ void SceneViewerPanel::changeWindowTitle() {
name = name + tr(" (Flipped)"); name = name + tr(" (Flipped)");
} }
} }
setWindowTitle(name); parentWidget()->setWindowTitle(name);
return; return;
} }
assert(cell.m_level.getPointer()); assert(cell.m_level.getPointer());
@ -581,7 +658,7 @@ void SceneViewerPanel::changeWindowTitle() {
} }
} }
setWindowTitle(name); parentWidget()->setWindowTitle(name);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -692,13 +769,6 @@ void SceneViewerPanel::onFrameTypeChanged() {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void SceneViewerPanel::onPreferenceChanged(const QString &prefName) {
m_flipConsole->onPreferenceChanged(prefName);
StyleShortcutSwitchablePanel::onPreferenceChanged(prefName);
}
//-----------------------------------------------------------------------------
void SceneViewerPanel::playAudioFrame(int frame) { void SceneViewerPanel::playAudioFrame(int frame) {
if (m_first) { if (m_first) {
m_first = false; m_first = false;
@ -756,3 +826,20 @@ void SceneViewerPanel::setFlipHButtonChecked(bool checked) {
void SceneViewerPanel::setFlipVButtonChecked(bool checked) { void SceneViewerPanel::setFlipVButtonChecked(bool checked) {
m_flipConsole->setChecked(FlipConsole::eFlipVertical, checked); m_flipConsole->setChecked(FlipConsole::eFlipVertical, checked);
} }
//-----------------------------------------------------------------------------
void SceneViewerPanel::setVisiblePartsFlag(UINT flag) {
m_visiblePartsFlag = flag;
updateShowHide();
}
// SaveLoadQSettings
void SceneViewerPanel::save(QSettings& settings) const {
settings.setValue("visibleParts", m_visiblePartsFlag);
}
void SceneViewerPanel::load(QSettings& settings) {
m_visiblePartsFlag = settings.value("visibleParts", CVPARTS_ALL).toUInt();
updateShowHide();
}

View file

@ -3,11 +3,13 @@
#ifndef VIEWER_PANE_INCLUDED #ifndef VIEWER_PANE_INCLUDED
#define VIEWER_PANE_INCLUDED #define VIEWER_PANE_INCLUDED
#include "styleshortcutswitchablepanel.h"
#include "sceneviewer.h" #include "sceneviewer.h"
#include "toonzqt/intfield.h" #include "toonzqt/intfield.h"
#include "toonzqt/keyframenavigator.h" #include "toonzqt/keyframenavigator.h"
#include "toonzqt/flipconsoleowner.h" #include "toonzqt/flipconsoleowner.h"
#include "saveloadqsettings.h"
#include <QFrame>
class SceneViewer; class SceneViewer;
class QPoint; class QPoint;
@ -25,8 +27,9 @@ class Ruler;
class FlipConsole; class FlipConsole;
class TXshLevel; class TXshLevel;
class SceneViewerPanel final : public StyleShortcutSwitchablePanel, class SceneViewerPanel final : public QFrame,
public FlipConsoleOwner { public FlipConsoleOwner,
public SaveLoadQSettings {
Q_OBJECT Q_OBJECT
friend class SceneViewer; friend class SceneViewer;
@ -38,6 +41,7 @@ class SceneViewerPanel final : public StyleShortcutSwitchablePanel,
TPanelTitleBarButton *m_previewButton; TPanelTitleBarButton *m_previewButton;
TPanelTitleBarButton *m_subcameraPreviewButton; TPanelTitleBarButton *m_subcameraPreviewButton;
bool m_onionSkinActive = false; bool m_onionSkinActive = false;
UINT m_visiblePartsFlag;
bool m_playSound = true; bool m_playSound = true;
bool m_hasSoundtrack = false; bool m_hasSoundtrack = false;
bool m_playing = false; bool m_playing = false;
@ -55,30 +59,40 @@ public:
#endif #endif
~SceneViewerPanel(); ~SceneViewerPanel();
// toggle show/hide of the widgets according to m_visiblePartsFlag
void setVisiblePartsFlag(UINT flag);
void updateShowHide();
void addShowHideContextMenu(QMenu*);
void onDrawFrame(int frame, void onDrawFrame(int frame,
const ImagePainter::VisualSettings &settings) override; const ImagePainter::VisualSettings &settings) override;
bool widgetInThisPanelIsFocused() override {
return m_sceneViewer->hasFocus(); void onEnterPanel() {
m_sceneViewer->setFocus(Qt::OtherFocusReason);
// activate shortcut key for this flipconsole
m_flipConsole->makeCurrent();
} }
void onLeavePanel() { m_sceneViewer->clearFocus(); }
// SaveLoadQSettings
virtual void save(QSettings& settings) const override;
virtual void load(QSettings& settings) override;
void initializeTitleBar(TPanelTitleBar* titleBar);
protected: protected:
void showEvent(QShowEvent *) override; void showEvent(QShowEvent *) override;
void hideEvent(QHideEvent *) override; void hideEvent(QHideEvent *) override;
void resizeEvent(QResizeEvent *) override; void resizeEvent(QResizeEvent *) override;
void initializeTitleBar(TPanelTitleBar *titleBar);
void createFrameToolBar(); void createFrameToolBar();
void createPlayToolBar(); void createPlayToolBar();
void addColorMaskButton(QWidget *parent, const char *iconSVGName, int id); void addColorMaskButton(QWidget *parent, const char *iconSVGName, int id);
// reimplementation of TPanel::widgetFocusOnEnter // reimplementation of TPanel::widgetFocusOnEnter
void widgetFocusOnEnter() override {
m_sceneViewer->setFocus(Qt::OtherFocusReason);
// activate shortcut key for this flipconsole
m_flipConsole->makeCurrent();
};
void widgetClearFocusOnLeave() override { m_sceneViewer->clearFocus(); };
void enableFlipConsoleForCamerastand(bool on); void enableFlipConsoleForCamerastand(bool on);
void playAudioFrame(int frame); void playAudioFrame(int frame);
bool hasSoundtrack(); bool hasSoundtrack();
void contextMenuEvent(QContextMenuEvent* event) override;
public slots: public slots:
@ -97,9 +111,10 @@ protected slots:
void onSceneSwitched(); void onSceneSwitched();
void onFrameTypeChanged(); void onFrameTypeChanged();
void onPlayingStatusChanged(bool playing); void onPlayingStatusChanged(bool playing);
// for showing/hiding the parts
void onShowHideActionTriggered(QAction*);
void enableFullPreview(bool enabled); void enableFullPreview(bool enabled);
void enableSubCameraPreview(bool enabled); void enableSubCameraPreview(bool enabled);
void onPreferenceChanged(const QString &prefName) override;
}; };
#endif #endif