Blob Blame Raw


#ifndef KEYFRAMENAVIGATOR_INCLUDED
#define KEYFRAMENAVIGATOR_INCLUDED

#include "tpalette.h"
#include "tfxutil.h"

#include "toonz/tstageobject.h"
#include "toonz/tframehandle.h"
#include "toonz/tobjecthandle.h"
#include "toonz/txsheethandle.h"
#include "toonz/tpalettehandle.h"
#include "toonz/tfxhandle.h"
#include "toonz/tcolumnfx.h"

#include <QToolBar>

#undef DVAPI
#undef DVVAR
#ifdef TOONZQT_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

class TStyleSelection;

//=============================================================================
// KeyframeNavigator
//-----------------------------------------------------------------------------

class DVAPI KeyframeNavigator : public QToolBar
{
	Q_OBJECT

	QAction *m_actPreviewKey;
	QAction *m_actKeyNo;
	QAction *m_actKeyPartial;
	QAction *m_actKeyTotal;
	QAction *m_actNextKey;

	TFrameHandle *m_frameHandle;

public:
	KeyframeNavigator(QWidget *parent = 0, TFrameHandle *frameHandle = 0);

	int getCurrentFrame() const
	{
		if (!m_frameHandle)
			return -1;
		return m_frameHandle->getFrameIndex();
	}

public slots:
	void setCurrentFrame(int frame)
	{
		m_frameHandle->setFrameIndex(frame);
		update();
	}

	void setFrameHandle(TFrameHandle *frameHandle)
	{
		m_frameHandle = frameHandle;
		update();
	}
	void update();

protected slots:
	void toggleKeyAct()
	{
		toggle();
		update();
	}
	void toggleNextKeyAct()
	{
		goNext();
		update();
	}
	void togglePrevKeyAct()
	{
		goPrev();
		update();
	}

protected:
	virtual bool hasNext() const = 0;
	virtual bool hasPrev() const = 0;
	virtual bool hasKeyframes() const = 0;
	virtual bool isKeyframe() const = 0;
	virtual bool isFullKeyframe() const = 0;
	virtual void toggle() = 0;
	virtual void goNext() = 0;
	virtual void goPrev() = 0;

	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);
};

//=============================================================================
// ViewerKeyframeNavigator
//-----------------------------------------------------------------------------

class DVAPI ViewerKeyframeNavigator : public KeyframeNavigator
{
	Q_OBJECT

	TObjectHandle *m_objectHandle;
	TXsheetHandle *m_xsheetHandle;

public:
	ViewerKeyframeNavigator(QWidget *parent, TFrameHandle *frameHandle = 0)
		: KeyframeNavigator(parent, frameHandle), m_objectHandle(0), m_xsheetHandle(0)
	{
		update();
	}

	TObjectHandle *getObjectHandle() const { return m_objectHandle; }
	TXsheetHandle *getXsheetHandle() const { return m_xsheetHandle; }

public slots:
	void setObjectHandle(TObjectHandle *objectHandle)
	{
		m_objectHandle = objectHandle;
		update();
	}
	void setXsheetHandle(TXsheetHandle *xsheetHandle)
	{
		m_xsheetHandle = xsheetHandle;
		update();
	}

protected:
	TStageObject *getStageObject() const;
	bool hasNext() const;
	bool hasPrev() const;
	bool hasKeyframes() const;
	bool isKeyframe() const;
	bool isFullKeyframe() const;
	void toggle();
	void goNext();
	void goPrev();

	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);
};

//=============================================================================
// PaletteKeyframeNavigator
//-----------------------------------------------------------------------------

class DVAPI PaletteKeyframeNavigator : public KeyframeNavigator
{
	Q_OBJECT

	TPaletteHandle *m_paletteHandle;
	TStyleSelection *m_selection;

public:
	PaletteKeyframeNavigator(QWidget *parent, TFrameHandle *frameHandle = 0)
		: KeyframeNavigator(parent, frameHandle), m_paletteHandle(0), m_selection(0)
	{
		update();
	}

	void setSelection(TStyleSelection *selection) { m_selection = selection; }

	TPalette *getPalette() const
	{
		if (!m_paletteHandle)
			return 0;
		return m_paletteHandle->getPalette();
	}
	int getStyleIndex() const
	{
		if (!m_paletteHandle)
			return 0;
		return m_paletteHandle->getStyleIndex();
	}

	TPaletteHandle *getPaletteHandle() const { return m_paletteHandle; }

public slots:
	void setPaletteHandle(TPaletteHandle *paletteHandle)
	{
		m_paletteHandle = paletteHandle;
		update();
	}

protected:
	bool hasNext() const;
	bool hasPrev() const;
	bool hasKeyframes() const;
	bool isKeyframe() const;
	bool isFullKeyframe() const { return isKeyframe(); }
	void toggle();
	void goNext();
	void goPrev();

	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);
};

//=============================================================================
// FxKeyframeNavigator
//-----------------------------------------------------------------------------

class DVAPI FxKeyframeNavigator : public KeyframeNavigator
{
	Q_OBJECT

	TFxHandle *m_fxHandle;

public:
	FxKeyframeNavigator(QWidget *parent, TFrameHandle *frameHandle = 0)
		: KeyframeNavigator(parent, frameHandle), m_fxHandle(0)
	{
		update();
	}

	TFx *getFx() const
	{
		if (!m_fxHandle)
			return 0;
		TFx *fx = m_fxHandle->getFx();
		if (TZeraryColumnFx *zfx = dynamic_cast<TZeraryColumnFx *>(fx))
			fx = zfx->getZeraryFx();
		return fx;
	}

	TFxHandle *getFxHandle() const { return m_fxHandle; }

public slots:
	void setFxHandle(TFxHandle *fxHandle)
	{
		m_fxHandle = fxHandle;
		update();
	}

protected:
	bool hasNext() const;
	bool hasPrev() const;
	bool hasKeyframes() const;
	bool isKeyframe() const;
	bool isFullKeyframe() const;
	void toggle();
	void goNext();
	void goPrev();

	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);
};

#endif