Blob Blame Raw
#pragma once

#ifndef FRAMENVIGATOR_H
#define FRAMENVIGATOR_H

// TnzCore includes
#include "tcommon.h"

// TnzQt includes
#include "toonzqt/intfield.h"

// Qt includes
#include <QWidget>
#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

//======================================================

//    Forward declarations

class TFrameHandle;

//======================================================

//*****************************************************************************
//    KeyframeNavigator  declaration
//*****************************************************************************

/*!
  \brief    The FrameNavigator is a simple toolbar widget showing a numerical
            representation of an integer timeline.

  \details  A FrameNavigator is a TFrameHandle viewer composed of a line edit
            widget showing the current frame number, and a pair of directional
            arrow buttons that move to adjacent frames.

  \remark   The text field actually visualizes the internal integer \p m_frame \a +1
            (e.g. when \p m_frame is 0 then 1 is visualized).
*/

class DVAPI FrameNavigator : public QToolBar
{
	Q_OBJECT

	TFrameHandle *m_frameHandle;

	int m_frame;
	DVGui::IntLineEdit *m_lineEdit;

public:
	FrameNavigator(QWidget *parent = 0);
	~FrameNavigator() {}

	int getFrame() const { return m_frame; }

	void setFrameHandle(TFrameHandle *); //!< Attaches the navigator to the specified frameHandle.
										 //!  \remark    Detaches from any previously attached frame handle.

	bool anyWidgetHasFocus();
signals:

	void frameSwitched();

public slots:

	void setFrame(int frame, bool notifyFrameHandler); //!< Sets the navigator's current frame.
													   //!  \deprecated  Remove the bool.
	void prevFrame() { setFrame(m_frame - 1, true); }  //!< Move to previous frame.
	void nextFrame() { setFrame(m_frame + 1, true); }  //!< Move to next frame.

protected:
	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);

	void updateFrame(int frame); //!< Changes frame without emitting any signal and notifying the frameHandle.

protected slots:

	/*!
    \details  Copies the value in the frame's line edit widget to the internal current frame value.
  */
	void onEditingFinished(); //!< Slot invoked whenever current frame's text editing is finished.
	void onFrameSwitched();
};

#endif // FRAMENVIGATORTOOLBAR_H