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