|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef FUNCTIONSHEET_H
|
|
Toshihiro Shimizu |
890ddd |
#define FUNCTIONSHEET_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "functiontreeviewer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "spreadsheetviewer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "functionselection.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/lineedit.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qwidget></qwidget>
|
|
Toshihiro Shimizu |
890ddd |
#include <set></set>
|
|
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 |
class FunctionSheet;
|
|
Toshihiro Shimizu |
890ddd |
class TDoubleParam;
|
|
Toshihiro Shimizu |
890ddd |
class TFrameHandle;
|
|
Toshihiro Shimizu |
890ddd |
class FunctionSelection;
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
692990 |
class FunctionSheetButtonArea final : public QWidget {
|
|
shun-iwasawa |
692990 |
Q_OBJECT
|
|
shun-iwasawa |
692990 |
QPushButton *m_syncSizeBtn;
|
|
shun-iwasawa |
692990 |
|
|
shun-iwasawa |
692990 |
public:
|
|
shun-iwasawa |
692990 |
FunctionSheetButtonArea(QWidget *parent);
|
|
shun-iwasawa |
692990 |
void setSyncSizeBtnState(bool);
|
|
shun-iwasawa |
692990 |
signals:
|
|
shun-iwasawa |
692990 |
void syncSizeBtnToggled(bool);
|
|
shun-iwasawa |
692990 |
};
|
|
shun-iwasawa |
692990 |
|
|
Shinya Kitaoka |
d1f6c4 |
class FunctionSheetRowViewer final : public Spreadsheet::RowPanel {
|
|
Shinya Kitaoka |
120a6e |
FunctionSheet *m_sheet;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
FunctionSheetRowViewer(FunctionSheet *parent);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseReleaseEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseMoveEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void contextMenuEvent(QContextMenuEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class FunctionSheetColumnHeadViewer final : public Spreadsheet::ColumnPanel {
|
|
Shinya Kitaoka |
120a6e |
FunctionSheet *m_sheet;
|
|
Shinya Kitaoka |
120a6e |
// enable drag and drop the expression arguments
|
|
Shinya Kitaoka |
120a6e |
QPoint m_dragStartPosition;
|
|
Shinya Kitaoka |
120a6e |
FunctionTreeModel::Channel *m_draggingChannel;
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun-iwasawa |
875c7e |
int m_clickedColumn = -1;
|
|
shun-iwasawa |
875c7e |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
FunctionSheetColumnHeadViewer(FunctionSheet *parent);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
120a6e |
// update the tooltip
|
|
Shinya Kitaoka |
473e70 |
void mouseMoveEvent(QMouseEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void contextMenuEvent(QContextMenuEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class FunctionSheetCellViewer final : public Spreadsheet::CellPanel {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Shinya Kitaoka |
120a6e |
FunctionSheet *m_sheet;
|
|
Shinya Kitaoka |
120a6e |
DVGui::LineEdit *m_lineEdit;
|
|
Shinya Kitaoka |
120a6e |
int m_editRow, m_editCol;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Jeremy Bullock |
771290 |
// for mouse dragging to adjust the value
|
|
Jeremy Bullock |
771290 |
double m_currentValue = 0.0;
|
|
Jeremy Bullock |
771290 |
double m_updatedValue = 0.0;
|
|
Jeremy Bullock |
771290 |
int m_mouseXPosition;
|
|
Jeremy Bullock |
771290 |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
FunctionSheetCellViewer(FunctionSheet *parent);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
Spreadsheet::DragTool *createDragTool(QMouseEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void drawCells(QPainter &p, int r0, int c0, int r1, int c1) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void mouseDoubleClickEvent(QMouseEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseReleaseEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseMoveEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
120a6e |
void openContextMenu(QMouseEvent *);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private slots:
|
|
Shinya Kitaoka |
120a6e |
void onCellEditorEditingFinished();
|
|
Jeremy Bullock |
771290 |
|
|
Jeremy Bullock |
771290 |
// double clicking opens the line edit where mouse dragging
|
|
Jeremy Bullock |
771290 |
// can change the value. It sends a signal to this slot.
|
|
Jeremy Bullock |
771290 |
void onMouseMovedInLineEdit(QMouseEvent *event);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class FunctionSheet final : public SpreadsheetViewer {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
shun-iwasawa |
692990 |
|
|
shun-iwasawa |
692990 |
FunctionSheetRowViewer *m_rowViewer;
|
|
shun-iwasawa |
692990 |
FunctionSheetColumnHeadViewer *m_columnHeadViewer;
|
|
shun-iwasawa |
692990 |
FunctionSheetCellViewer *m_cellViewer;
|
|
shun-iwasawa |
692990 |
FunctionSelection *m_selection;
|
|
shun-iwasawa |
692990 |
FunctionTreeModel *m_functionTreeModel;
|
|
shun-iwasawa |
692990 |
FunctionViewer *m_functionViewer;
|
|
shun-iwasawa |
692990 |
FunctionSheetButtonArea *m_buttonArea;
|
|
shun-iwasawa |
692990 |
TXsheetHandle *m_xshHandle;
|
|
shun-iwasawa |
692990 |
|
|
shun-iwasawa |
692990 |
QRect m_selectedCells;
|
|
shun-iwasawa |
692990 |
bool m_isFloating;
|
|
shun-iwasawa |
260cd7 |
bool m_showIbtwnValue = true;
|
|
shun-iwasawa |
692990 |
bool m_syncSize = true;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Jeremy Bullock |
4ce953 |
FunctionSheet(QWidget *parent = 0, bool isFloating = false);
|
|
Shinya Kitaoka |
120a6e |
~FunctionSheet();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setModel(FunctionTreeModel *model);
|
|
Shinya Kitaoka |
120a6e |
FunctionTreeModel *getModel() const { return m_functionTreeModel; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setViewer(FunctionViewer *viewer);
|
|
Shinya Kitaoka |
120a6e |
FunctionViewer *getViewer() const { return m_functionViewer; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setCurrentFrame(int frame);
|
|
Shinya Kitaoka |
120a6e |
int getCurrentFrame() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int getChannelCount();
|
|
Shinya Kitaoka |
120a6e |
TDoubleParam *getCurve(int column);
|
|
Shinya Kitaoka |
120a6e |
FunctionTreeModel::Channel *getChannel(int column);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
QRect getSelectedCells() const override;
|
|
Shinya Kitaoka |
473e70 |
void selectCells(const QRect &selectedCells) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
FunctionSelection *getSelection() const { return m_selection; }
|
|
Shinya Kitaoka |
120a6e |
void setSelection(FunctionSelection *selection); // does NOT get ownership
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QString getSelectedParamName();
|
|
Shinya Kitaoka |
120a6e |
int getColumnIndexByCurve(TDoubleParam *param) const;
|
|
Shinya Kitaoka |
120a6e |
bool anyWidgetHasFocus();
|
|
Toshihiro Shimizu |
890ddd |
|
|
shun_iwasawa |
768e20 |
// Obtains a pointer to the stage object containing the
|
|
shun_iwasawa |
768e20 |
// parameter of specified column. Returns nullptr for
|
|
shun_iwasawa |
768e20 |
// fx parameter columns.
|
|
shun_iwasawa |
768e20 |
TStageObject *getStageObject(int column);
|
|
shun_iwasawa |
768e20 |
|
|
shun-iwasawa |
260cd7 |
bool isIbtwnValueVisible() { return m_showIbtwnValue; }
|
|
shun-iwasawa |
260cd7 |
void setIbtwnValueVisible(bool visible) {
|
|
shun-iwasawa |
260cd7 |
m_showIbtwnValue = visible;
|
|
shun-iwasawa |
260cd7 |
update();
|
|
shun-iwasawa |
260cd7 |
}
|
|
shun-iwasawa |
260cd7 |
|
|
shun-iwasawa |
692990 |
bool isSyncSize() { return m_syncSize; }
|
|
shun-iwasawa |
692990 |
void setSyncSize(bool on);
|
|
shun-iwasawa |
692990 |
void setXsheetHandle(TXsheetHandle *xshHandle) { m_xshHandle = xshHandle; }
|
|
shun-iwasawa |
692990 |
|
|
shun-iwasawa |
692990 |
int getFrameZoomFactor() const override;
|
|
shun-iwasawa |
692990 |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void showEvent(QShowEvent *e) override;
|
|
Shinya Kitaoka |
473e70 |
void hideEvent(QHideEvent *e) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public slots:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void updateAll();
|
|
Shinya Kitaoka |
120a6e |
void onFrameSwitched();
|
|
Shinya Kitaoka |
120a6e |
/*---
|
|
Shinya Kitaoka |
120a6e |
* カレントChannelが切り替わったら、NumericalColumnsがそのChannelを表示できるようにスクロールする。---*/
|
|
Shinya Kitaoka |
120a6e |
void onCurrentChannelChanged(FunctionTreeModel::Channel *);
|
|
shun-iwasawa |
692990 |
|
|
shun-iwasawa |
692990 |
void onSyncSizeBtnToggled(bool);
|
|
shun-iwasawa |
692990 |
void onZoomScaleChanged();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|