Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef SPREADSHEETVIEWER_H
Toshihiro Shimizu 890ddd
#define SPREADSHEETVIEWER_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
#include <qframe></qframe>
Toshihiro Shimizu 890ddd
#include <qscrollarea></qscrollarea>
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
// forward declaration
Toshihiro Shimizu 890ddd
class TFrameHandle;
Toshihiro Shimizu 890ddd
class SpreadsheetViewer;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace Spreadsheet
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
class GenericPanel;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI FrameScroller
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QList<framescroller *=""> m_connectedScrollers;</framescroller>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FrameScroller();
Toshihiro Shimizu 890ddd
	virtual ~FrameScroller();
Toshihiro Shimizu 890ddd
	void connectScroller(FrameScroller *scroller);
Toshihiro Shimizu 890ddd
	void disconnectScroller(FrameScroller *scroller);
Toshihiro Shimizu 890ddd
	bool isScrollerConnected(FrameScroller *scroller);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual QScrollArea *getFrameScrollArea() const = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void registerFrameScroller();
Toshihiro Shimizu 890ddd
	void unregisterFrameScroller();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void prepareToScroll(int dy);
Toshihiro Shimizu 890ddd
	virtual void onPrepareToScroll(int dy) {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI DragTool
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	DragTool() {}
Toshihiro Shimizu 890ddd
	virtual ~DragTool() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void click(int row, int col, QMouseEvent *e) {}
Toshihiro Shimizu 890ddd
	virtual void drag(int row, int col, QMouseEvent *e) {}
Toshihiro Shimizu 890ddd
	virtual void release(int row, int col, QMouseEvent *e) {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI SetFrameDragTool : public DragTool
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TFrameHandle *m_frameHandle;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	SetFrameDragTool(TFrameHandle *frameHandle) : m_frameHandle(frameHandle) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void click(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void drag(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void release(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI SelectionDragTool : public DragTool
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	SpreadsheetViewer *m_viewer;
Toshihiro Shimizu 890ddd
	int m_firstRow, m_firstCol;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	SelectionDragTool(SpreadsheetViewer *viewer);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void click(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void drag(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void release(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI PanTool : public DragTool
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	SpreadsheetViewer *m_viewer;
Toshihiro Shimizu 890ddd
	GenericPanel *m_panel;
Toshihiro Shimizu 890ddd
	QPoint m_lastPos;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	PanTool(GenericPanel *panel);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void click(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void drag(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
	void release(int row, int col, QMouseEvent *e);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI ScrollArea : public QScrollArea
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
#if QT_VERSION >= 0x050500
Toshihiro Shimizu 890ddd
	ScrollArea(QWidget *parent = 0, Qt::WindowFlags flags = 0);
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
	ScrollArea(QWidget *parent = 0, Qt::WFlags flags = 0);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
	virtual ~ScrollArea();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	// keyPressEvent and wheelEvent are ignored by the ScrollArea
Toshihiro Shimizu 890ddd
	// and therefore they are handled by the parent (Viewer)
Toshihiro Shimizu 890ddd
	void keyPressEvent(QKeyEvent *e);
Toshihiro Shimizu 890ddd
	void wheelEvent(QWheelEvent *e);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI GenericPanel : public QWidget
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
	SpreadsheetViewer *m_viewer;
Toshihiro Shimizu 890ddd
	DragTool *m_dragTool;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	GenericPanel(SpreadsheetViewer *viewer);
Toshihiro Shimizu 890ddd
	virtual ~GenericPanel();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	SpreadsheetViewer *getViewer() const { return m_viewer; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual DragTool *createDragTool(QMouseEvent *) { return 0; };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void paintEvent(QPaintEvent *);
Toshihiro Shimizu 890ddd
	void mousePressEvent(QMouseEvent *);
Toshihiro Shimizu 890ddd
	void mouseReleaseEvent(QMouseEvent *);
Toshihiro Shimizu 890ddd
	void mouseMoveEvent(QMouseEvent *);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI RowPanel : public GenericPanel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
	const int m_xa; // frame cells start at m_xa
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	RowPanel(SpreadsheetViewer *viewer);
Toshihiro Shimizu 890ddd
	virtual ~RowPanel() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	DragTool *createDragTool(QMouseEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void paintEvent(QPaintEvent *);
Toshihiro Shimizu 890ddd
	void drawRows(QPainter &p, int r0, int r1);
Toshihiro Shimizu 890ddd
	void drawCurrentRowGadget(QPainter &p, int r0, int r1);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI ColumnPanel : public GenericPanel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	ColumnPanel(SpreadsheetViewer *viewer);
Toshihiro Shimizu 890ddd
	virtual ~ColumnPanel() {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI CellPanel : public GenericPanel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	CellPanel(SpreadsheetViewer *viewer);
Toshihiro Shimizu 890ddd
	virtual ~CellPanel() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	DragTool *createDragTool(QMouseEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void paintEvent(QPaintEvent *);
Toshihiro Shimizu 890ddd
	virtual void drawCells(QPainter &p, int r0, int c0, int r1, int c1) {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI SpreadsheetViewer : public QFrame, public Spreadsheet::FrameScroller
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QColor m_lightLightBgColor; // RowPanel background (124,124,124)
Toshihiro Shimizu 890ddd
	QColor m_bgColor;			// RowPanel background in scene range(164,164,164)
Toshihiro Shimizu 890ddd
	QColor m_lightLineColor;	// horizontal line (146,144,146)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor LightLightBGColor READ getLightLightBGColor WRITE setLightLightBGColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor BGColor READ getBGColor WRITE setBGColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor LightLineColor READ getLightLineColor WRITE setLightLineColor)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QColor m_currentRowBgColor; //current frame, column
Toshihiro Shimizu 890ddd
	QColor m_markerLineColor;   //marker interval (0, 255, 246)
Toshihiro Shimizu 890ddd
	QColor m_textColor;			//text (black)
Toshihiro Shimizu 890ddd
	QColor m_verticalLineColor; //vertical line (black)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor CurrentRowBgColor READ getCurrentRowBgColor WRITE setCurrentRowBgColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor MarkerLineColor READ getMarkerLineColor WRITE setMarkerLineColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor TextColor READ getTextColor WRITE setTextColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor VerticalLineColor READ getVerticalLineColor WRITE setVerticalLineColor)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//key frame
Toshihiro Shimizu 890ddd
	QColor m_keyFrameColor;			// (219,139,54)
Toshihiro Shimizu 890ddd
	QColor m_keyFrameBorderColor;   // (82,51,20)
Toshihiro Shimizu 890ddd
	QColor m_selectedKeyFrameColor; // (237,197,155)
Toshihiro Shimizu 890ddd
	//key frame inbetween
Toshihiro Shimizu 890ddd
	QColor m_inBetweenColor;		 // (194,194,176)
Toshihiro Shimizu 890ddd
	QColor m_inBetweenBorderColor;   // (72,72,65)
Toshihiro Shimizu 890ddd
	QColor m_selectedInBetweenColor; // (225,225,216)
Toshihiro Shimizu 890ddd
	//empty cell
Toshihiro Shimizu 890ddd
	QColor m_selectedEmptyColor; // (190,190,190)
Toshihiro Shimizu 890ddd
	//empty cell in the scene range
Toshihiro Shimizu 890ddd
	QColor m_selectedSceneRangeEmptyColor; // (210,210,210)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor KeyFrameColor READ getKeyFrameColor WRITE setKeyFrameColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor KeyFrameBorderColor READ getKeyFrameBorderColor WRITE setKeyFrameBorderColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor SelectedKeyFrameColor READ getSelectedKeyFrameColor WRITE setSelectedKeyFrameColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor InBetweenColor READ getInBetweenColor WRITE setInBetweenColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor InBetweenBorderColor READ getInBetweenBorderColor WRITE setInBetweenBorderColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor SelectedInBetweenColor READ getSelectedInBetweenColor WRITE setSelectedInBetweenColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor SelectedEmptyColor READ getSelectedEmptyColor WRITE setSelectedEmptyColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor SelectedSceneRangeEmptyColor READ getSelectedSceneRangeEmptyColor WRITE setSelectedSceneRangeEmptyColor)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QColor m_columnHeaderBorderColor; //column header border lines (46,47,46)
Toshihiro Shimizu 890ddd
	QColor m_selectedColumnTextColor; //selected column text (red)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor ColumnHeaderBorderColor READ getColumnHeaderBorderColor WRITE setColumnHeaderBorderColor)
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor SelectedColumnTextColor READ getSelectedColumnTextColor WRITE setSelectedColumnTextColor)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	Spreadsheet::ScrollArea *m_columnScrollArea;
Toshihiro Shimizu 890ddd
	Spreadsheet::ScrollArea *m_rowScrollArea;
Toshihiro Shimizu 890ddd
	Spreadsheet::ScrollArea *m_cellScrollArea;
Toshihiro Shimizu 890ddd
	TFrameHandle *m_frameHandle;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_columnWidth;
Toshihiro Shimizu 890ddd
	int m_rowHeight;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// QPoint m_delta;
Toshihiro Shimizu 890ddd
	int m_timerId;
Toshihiro Shimizu 890ddd
	QPoint m_autoPanSpeed;
Toshihiro Shimizu 890ddd
	QPoint m_lastAutoPanPos;
Toshihiro Shimizu 890ddd
	int m_rowCount, m_columnCount;
Toshihiro Shimizu 890ddd
	int m_currentRow;
Toshihiro Shimizu 890ddd
	int m_markRowDistance, m_markRowOffset;
Toshihiro Shimizu 890ddd
	// QRect m_selectedCells; // x=col, y=row
Toshihiro Shimizu 890ddd
	bool m_isComputingSize;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	SpreadsheetViewer(QWidget *parent);
Toshihiro Shimizu 890ddd
	virtual ~SpreadsheetViewer();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getColumnWidth() const { return m_columnWidth; }
Toshihiro Shimizu 890ddd
	void setColumnWidth(int width) { m_columnWidth = width; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getRowHeight() const { return m_rowHeight; }
Toshihiro Shimizu 890ddd
	void setRowHeight(int height) { m_rowHeight = height; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setRowsPanel(Spreadsheet::RowPanel *rows);
Toshihiro Shimizu 890ddd
	void setColumnsPanel(Spreadsheet::ColumnPanel *columns);
Toshihiro Shimizu 890ddd
	void setCellsPanel(Spreadsheet::CellPanel *cells);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getRowCount() const { return m_rowCount; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// provvisorio
Toshihiro Shimizu 890ddd
	QScrollArea *getFrameScrollArea() const { return m_cellScrollArea; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	//QProperty
Toshihiro Shimizu 890ddd
	void setLightLightBGColor(const QColor &color) { m_lightLightBgColor = color; }
Toshihiro Shimizu 890ddd
	QColor getLightLightBGColor() const { return m_lightLightBgColor; }
Toshihiro Shimizu 890ddd
	void setBGColor(const QColor &color) { m_bgColor = color; }
Toshihiro Shimizu 890ddd
	QColor getBGColor() const { return m_bgColor; }
Toshihiro Shimizu 890ddd
	void setLightLineColor(const QColor &color) { m_lightLineColor = color; }
Toshihiro Shimizu 890ddd
	QColor getLightLineColor() const { return m_lightLineColor; }
Toshihiro Shimizu 890ddd
	void setCurrentRowBgColor(const QColor &color) { m_currentRowBgColor = color; }
Toshihiro Shimizu 890ddd
	QColor getCurrentRowBgColor() const { return m_currentRowBgColor; }
Toshihiro Shimizu 890ddd
	void setMarkerLineColor(const QColor &color) { m_markerLineColor = color; }
Toshihiro Shimizu 890ddd
	QColor getMarkerLineColor() const { return m_markerLineColor; }
Toshihiro Shimizu 890ddd
	void setTextColor(const QColor &color) { m_textColor = color; }
Toshihiro Shimizu 890ddd
	QColor getTextColor() const { return m_textColor; }
Toshihiro Shimizu 890ddd
	void setVerticalLineColor(const QColor &color) { m_verticalLineColor = color; }
Toshihiro Shimizu 890ddd
	QColor getVerticalLineColor() const { return m_verticalLineColor; }
Toshihiro Shimizu 890ddd
	void setKeyFrameColor(const QColor &color) { m_keyFrameColor = color; }
Toshihiro Shimizu 890ddd
	QColor getKeyFrameColor() const { return m_keyFrameColor; }
Toshihiro Shimizu 890ddd
	void setKeyFrameBorderColor(const QColor &color) { m_keyFrameBorderColor = color; }
Toshihiro Shimizu 890ddd
	QColor getKeyFrameBorderColor() const { return m_keyFrameBorderColor; }
Toshihiro Shimizu 890ddd
	void setSelectedKeyFrameColor(const QColor &color) { m_selectedKeyFrameColor = color; }
Toshihiro Shimizu 890ddd
	QColor getSelectedKeyFrameColor() const { return m_selectedKeyFrameColor; }
Toshihiro Shimizu 890ddd
	void setInBetweenColor(const QColor &color) { m_inBetweenColor = color; }
Toshihiro Shimizu 890ddd
	QColor getInBetweenColor() const { return m_inBetweenColor; }
Toshihiro Shimizu 890ddd
	void setInBetweenBorderColor(const QColor &color) { m_inBetweenBorderColor = color; }
Toshihiro Shimizu 890ddd
	QColor getInBetweenBorderColor() const { return m_inBetweenBorderColor; }
Toshihiro Shimizu 890ddd
	void setSelectedInBetweenColor(const QColor &color) { m_selectedInBetweenColor = color; }
Toshihiro Shimizu 890ddd
	QColor getSelectedInBetweenColor() const { return m_selectedInBetweenColor; }
Toshihiro Shimizu 890ddd
	void setSelectedEmptyColor(const QColor &color) { m_selectedEmptyColor = color; }
Toshihiro Shimizu 890ddd
	QColor getSelectedEmptyColor() const { return m_selectedEmptyColor; }
Toshihiro Shimizu 890ddd
	void setSelectedSceneRangeEmptyColor(const QColor &color) { m_selectedSceneRangeEmptyColor = color; }
Toshihiro Shimizu 890ddd
	QColor getSelectedSceneRangeEmptyColor() const { return m_selectedSceneRangeEmptyColor; }
Toshihiro Shimizu 890ddd
	void setColumnHeaderBorderColor(const QColor &color) { m_columnHeaderBorderColor = color; }
Toshihiro Shimizu 890ddd
	QColor getColumnHeaderBorderColor() const { return m_columnHeaderBorderColor; }
Toshihiro Shimizu 890ddd
	void setSelectedColumnTextColor(const QColor &color) { m_selectedColumnTextColor = color; }
Toshihiro Shimizu 890ddd
	QColor getSelectedColumnTextColor() const { return m_selectedColumnTextColor; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void scroll(QPoint delta);
Toshihiro Shimizu 890ddd
	void onPrepareToScroll(int dy) { refreshContentSize(0, dy); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setAutoPanSpeed(const QPoint &speed);
Toshihiro Shimizu 890ddd
	void setAutoPanSpeed(const QRect &widgetBounds, const QPoint &mousePos);
Toshihiro Shimizu 890ddd
	void stopAutoPan() { setAutoPanSpeed(QPoint()); }
Toshihiro Shimizu 890ddd
	bool isAutoPanning() const { return m_autoPanSpeed.x() != 0 || m_autoPanSpeed.y() != 0; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int xToColumn(int x) const;
Toshihiro Shimizu 890ddd
	int yToRow(int y) const;
Toshihiro Shimizu 890ddd
	int columnToX(int col) const;
Toshihiro Shimizu 890ddd
	int rowToY(int row) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool refreshContentSize(int scrollDx, int scrollDy);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getCurrentRow() const { return m_currentRow; }
Toshihiro Shimizu 890ddd
	void setCurrentRow(int row) { m_currentRow = row; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual QRect getSelectedCells() const = 0;
Toshihiro Shimizu 890ddd
	virtual void selectCells(const QRect &selectedCells) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isSelectedCell(int row, int col) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return getSelectedCells().contains(QPoint(col, row));
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void setMarkRow(int distance, int offset)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_markRowDistance = distance > 0 ? distance : 6;
Toshihiro Shimizu 890ddd
		m_markRowOffset = offset;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void getMarkRow(int &distance, int &offset) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		distance = m_markRowDistance;
Toshihiro Shimizu 890ddd
		offset = m_markRowOffset;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	int isMarkRow(int row) const { return (row - m_markRowOffset) % m_markRowDistance == 0; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameHandle(TFrameHandle *frameHandle);
Toshihiro Shimizu 890ddd
	TFrameHandle *getFrameHandle() const { return m_frameHandle; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void ensureVisibleCol(int col);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void showEvent(QShowEvent *);
Toshihiro Shimizu 890ddd
	void hideEvent(QHideEvent *);
Toshihiro Shimizu 890ddd
	void resizeEvent(QResizeEvent *event);
Toshihiro Shimizu 890ddd
	void keyPressEvent(QKeyEvent *event);
Toshihiro Shimizu 890ddd
	void wheelEvent(QWheelEvent *event);
Toshihiro Shimizu 890ddd
	void timerEvent(QTimerEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
	void setRowCount(int rowCount);
Toshihiro Shimizu 890ddd
	void setColumnCount(int columnCount);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void frameSwitched();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void updateAreas();
Toshihiro Shimizu 890ddd
	void onVSliderChanged(int);
Toshihiro Shimizu 890ddd
	void onHSliderChanged(int);
Toshihiro Shimizu 890ddd
	/*
Toshihiro Shimizu 890ddd
  void updateAllAree();
Toshihiro Shimizu 890ddd
  void updateCellColumnAree();
Toshihiro Shimizu 890ddd
  void updateCellRowAree();
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif