Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef FRAMENVIGATOR_H
Toshihiro Shimizu 890ddd
#define FRAMENVIGATOR_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/intfield.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include <qtoolbar></qtoolbar>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZQT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//======================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//    Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TFrameHandle;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//======================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//*****************************************************************************
Toshihiro Shimizu 890ddd
//    KeyframeNavigator  declaration
Toshihiro Shimizu 890ddd
//*****************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    The FrameNavigator is a simple toolbar widget showing a numerical
Toshihiro Shimizu 890ddd
            representation of an integer timeline.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  \details  A FrameNavigator is a TFrameHandle viewer composed of a line edit
Toshihiro Shimizu 890ddd
            widget showing the current frame number, and a pair of directional
Toshihiro Shimizu 890ddd
            arrow buttons that move to adjacent frames.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  \remark   The text field actually visualizes the internal integer \p m_frame \a +1
Toshihiro Shimizu 890ddd
            (e.g. when \p m_frame is 0 then 1 is visualized).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI FrameNavigator : public QToolBar
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TFrameHandle *m_frameHandle;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_frame;
Toshihiro Shimizu 890ddd
	DVGui::IntLineEdit *m_lineEdit;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FrameNavigator(QWidget *parent = 0);
Toshihiro Shimizu 890ddd
	~FrameNavigator() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getFrame() const { return m_frame; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameHandle(TFrameHandle *); //!< Attaches the navigator to the specified frameHandle.
Toshihiro Shimizu 890ddd
										 //!  \remark    Detaches from any previously attached frame handle.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool anyWidgetHasFocus();
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void frameSwitched();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrame(int frame, bool notifyFrameHandler); //!< Sets the navigator's current frame.
Toshihiro Shimizu 890ddd
													   //!  \deprecated  Remove the bool.
Toshihiro Shimizu 890ddd
	void prevFrame() { setFrame(m_frame - 1, true); }  //!< Move to previous frame.
Toshihiro Shimizu 890ddd
	void nextFrame() { setFrame(m_frame + 1, true); }  //!< Move to next frame.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void showEvent(QShowEvent *);
Toshihiro Shimizu 890ddd
	void hideEvent(QHideEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void updateFrame(int frame); //!< Changes frame without emitting any signal and notifying the frameHandle.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*!
Toshihiro Shimizu 890ddd
    \details  Copies the value in the frame's line edit widget to the internal current frame value.
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
	void onEditingFinished(); //!< Slot invoked whenever current frame's text editing is finished.
Toshihiro Shimizu 890ddd
	void onFrameSwitched();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif // FRAMENVIGATORTOOLBAR_H