210 lines
5.7 KiB
C++
210 lines
5.7 KiB
C++
#pragma once
|
|
|
|
#ifndef FUNCTIONVIEWER_H
|
|
#define FUNCTIONVIEWER_H
|
|
|
|
// TnzCore includes
|
|
#include "tcommon.h"
|
|
#include "saveloadqsettings.h"
|
|
|
|
// TnzLib includes
|
|
#include "toonz/tframehandle.h"
|
|
#include "toonz/preferences.h"
|
|
|
|
// TnzQt includes
|
|
#include "toonzqt/treemodel.h"
|
|
|
|
// Qt includes
|
|
#include <QSplitter>
|
|
#include <QSettings>
|
|
|
|
#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 TParam;
|
|
class TDoubleParam;
|
|
class TXsheetHandle;
|
|
class TObjectHandle;
|
|
class TFxHandle;
|
|
class TColumnHandle;
|
|
class TStageObject;
|
|
class TSceneHandle;
|
|
|
|
class FrameNavigator;
|
|
class FunctionTreeView;
|
|
class FunctionPanel;
|
|
class FunctionSheet;
|
|
class FunctionKeyframeNavigator;
|
|
class FunctionSegmentViewer;
|
|
class FunctionToolbar;
|
|
class FunctionSelection;
|
|
|
|
class QStackedWidget;
|
|
class QAction;
|
|
class QScrollArea;
|
|
class QSplitter;
|
|
class QVBoxLayout;
|
|
|
|
namespace DVGui {
|
|
class ValueField;
|
|
}
|
|
|
|
//==================================================
|
|
|
|
//************************************************************************
|
|
// FunctionViewer declaration
|
|
//************************************************************************
|
|
|
|
// Function editor widget
|
|
class DVAPI FunctionViewer final : public QSplitter, public SaveLoadQSettings {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum IoType { eSaveCurve, eLoadCurve, eExportCurve };
|
|
|
|
public:
|
|
#if QT_VERSION >= 0x050500
|
|
FunctionViewer(QWidget *parent = 0, Qt::WindowFlags flags = 0);
|
|
#else
|
|
FunctionViewer(QWidget *parent = 0, Qt::WFlags flags = 0);
|
|
#endif
|
|
~FunctionViewer();
|
|
|
|
void setXsheetHandle(TXsheetHandle *xshHandle); //!< Associates an xsheet to
|
|
//! the function editor.
|
|
void setFrameHandle(TFrameHandle *frameHandle); //!< Synchronizes an external
|
|
//! timeline with the function
|
|
//! editor.
|
|
void setObjectHandle(TObjectHandle *objectHandle); //!< Associates a stage
|
|
//! objects selector to the
|
|
//! function editor.
|
|
void setFxHandle(TFxHandle *fxHandle); //!< Associates an fx selector to the
|
|
//! function editor.
|
|
void setColumnHandle(TColumnHandle *columnHandle); //!< Associates a column
|
|
//! selector to the
|
|
//! function editor.
|
|
|
|
FunctionSelection *getSelection() const { return m_selection; }
|
|
|
|
void openContextMenu(TreeModel::Item *item, const QPoint &globalPos);
|
|
|
|
void addParameter(TParam *parameter,
|
|
const TFilePath &folder = TFilePath()); //!< Adds the
|
|
//! specified
|
|
//! parameter to the
|
|
//! function editor.
|
|
//!\param parameter
|
|
//! Parameter to be
|
|
//! added. Ownership
|
|
//! remains \a
|
|
//! external. \param
|
|
//! folder Host
|
|
//! folder (created
|
|
//! if necessary)
|
|
//! the parameter
|
|
//! will be added
|
|
//! to.
|
|
|
|
void setFocusColumnsOrGraph();
|
|
void clearFocusColumnsAndGraph();
|
|
bool columnsOrGraphHasFocus();
|
|
void setSceneHandle(TSceneHandle *sceneHandle);
|
|
TSceneHandle *getSceneHandle() const { return m_sceneHandle; }
|
|
TXsheetHandle *getXsheetHandle() const { return m_xshHandle; }
|
|
|
|
// SaveLoadQSettings
|
|
virtual void save(QSettings &settings,
|
|
bool forPopupIni = false) const override;
|
|
virtual void load(QSettings &settings) override;
|
|
|
|
// refer to the preferences' "Current Column Color"
|
|
QColor getCurrentTextColor() const;
|
|
|
|
signals:
|
|
|
|
void curveChanged();
|
|
void curveIo(int type, TDoubleParam *curve, const std::string &name);
|
|
void editObject();
|
|
|
|
public slots:
|
|
|
|
void refreshModel();
|
|
void rebuildModel();
|
|
void onFrameSwitched();
|
|
void toggleMode();
|
|
void onValueFieldChanged();
|
|
void onXsheetChanged();
|
|
void onStageObjectSwitched();
|
|
void onStageObjectChanged(bool isDragging = false);
|
|
void onFxSwitched();
|
|
|
|
void onCurveChanged(bool isDragging);
|
|
void onCurveSelected(TDoubleParam *);
|
|
void onSelectionChanged();
|
|
void onPreferenceChanged(const QString &);
|
|
|
|
void doSwitchCurrentObject(TStageObject *obj);
|
|
void doSwitchCurrentFx(TFx *fx);
|
|
|
|
// in order to avoid FunctionViewer to get focus while editing the expression
|
|
bool isExpressionPageActive();
|
|
|
|
private:
|
|
// Handles
|
|
|
|
TXsheetHandle *m_xshHandle;
|
|
TFrameHandle *m_frameHandle;
|
|
TObjectHandle *m_objectHandle;
|
|
TFxHandle *m_fxHandle;
|
|
TColumnHandle *m_columnHandle;
|
|
TSceneHandle *m_sceneHandle;
|
|
QVBoxLayout *m_leftLayout;
|
|
int m_spacing;
|
|
int m_toggleStatus = 0;
|
|
Preferences::FunctionEditorToggle m_toggleStart;
|
|
TFrameHandle
|
|
m_localFrame; //!< Internal timeline - which is attached to m_frameHandle
|
|
//! <I>in case</I> it is not zero.
|
|
// Widgets
|
|
|
|
FunctionTreeView *m_treeView; //!< Tree view on the left side of the viewer.
|
|
FunctionToolbar *m_toolbar; //!< Central area's toolbar
|
|
FunctionPanel *m_functionGraph; //!< The function graph view widget.
|
|
FunctionSheet *m_numericalColumns; //!< The numerical columns view widget.
|
|
FunctionSegmentViewer *m_segmentViewer; //!< Lower segment editor.
|
|
|
|
// Current objects
|
|
|
|
TDoubleParam *m_curve;
|
|
FunctionSelection *m_selection;
|
|
|
|
private:
|
|
void showEvent(QShowEvent *) override;
|
|
void hideEvent(QHideEvent *) override;
|
|
|
|
public: // :(
|
|
void emitCurveChanged() {
|
|
emit curveChanged();
|
|
} //!< \deprecated Should not be public.
|
|
void emitIoCurve(int type, TDoubleParam *curve, const std::string &name) {
|
|
emit curveIo(type, curve, name);
|
|
} //!< \deprecated Should not be public.
|
|
|
|
private slots:
|
|
|
|
void propagateExternalSetFrame(); //!< Forwards m_frameHandle's setFrame()
|
|
//! invocations to m_localFrame.
|
|
};
|
|
|
|
#endif // FUNCTIONEDITORVIEWER_H
|