Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/functionkeyframenavigator.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/framenavigator.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/tframehandle.h"
Toshihiro Shimizu 890ddd
#include "toonz/doubleparamcmd.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "tdoubleparam.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qpushbutton></qpushbutton>
Toshihiro Shimizu 890ddd
#include <qboxlayout></qboxlayout>
Toshihiro Shimizu 890ddd
#include <qtoolbutton></qtoolbutton>
Toshihiro Shimizu 890ddd
#include <qlabel></qlabel>
Toshihiro Shimizu 890ddd
#include <qaction></qaction>
Toshihiro Shimizu 890ddd
#include <qintvalidator></qintvalidator>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FunctionKeyframeNavigator::FunctionKeyframeNavigator(QWidget *parent)
Toshihiro Shimizu 890ddd
	: KeyframeNavigator(parent)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::setCurve(TDoubleParam *curve)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (m_curve.getPointer() == curve)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	m_curve = curve;
Toshihiro Shimizu 890ddd
	if (isVisible())
Toshihiro Shimizu 890ddd
		update();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool FunctionKeyframeNavigator::hasNext() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_curve && m_curve->getNextKeyframe(getCurrentFrame()) >= 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool FunctionKeyframeNavigator::hasPrev() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_curve && m_curve->getPrevKeyframe(getCurrentFrame()) >= 0;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool FunctionKeyframeNavigator::hasKeyframes() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_curve && m_curve->hasKeyframes();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool FunctionKeyframeNavigator::isKeyframe() const
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	return m_curve && m_curve->isKeyframe(getCurrentFrame());
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::toggle()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!m_curve)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	int frame = getCurrentFrame();
Toshihiro Shimizu 890ddd
	double value = m_curve->getValue(frame);
Toshihiro Shimizu 890ddd
	if (m_curve->isKeyframe(frame))
Toshihiro Shimizu 890ddd
		KeyframeSetter::removeKeyframeAt(m_curve.getPointer(), frame);
Toshihiro Shimizu 890ddd
	else {
Toshihiro Shimizu 890ddd
		KeyframeSetter setter(m_curve.getPointer());
Toshihiro Shimizu 890ddd
		setter.createKeyframe(frame);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::goNext()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!m_curve)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	int k = m_curve->getNextKeyframe(getCurrentFrame());
Toshihiro Shimizu 890ddd
	if (k < 0)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	setCurrentFrame(m_curve->keyframeIndexToFrame(k));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::goPrev()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (!m_curve)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	int k = m_curve->getPrevKeyframe(getCurrentFrame());
Toshihiro Shimizu 890ddd
	if (k < 0)
Toshihiro Shimizu 890ddd
		return;
Toshihiro Shimizu 890ddd
	setCurrentFrame(m_curve->keyframeIndexToFrame(k));
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::showEvent(QShowEvent *e)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	KeyframeNavigator::showEvent(e);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void FunctionKeyframeNavigator::hideEvent(QHideEvent *e)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	KeyframeNavigator::hideEvent(e);
Toshihiro Shimizu 890ddd
}