Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef PALETTEVIEWERGUI_H
Toshihiro Shimizu 890ddd
#define PALETTEVIEWERGUI_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzQt includes
Toshihiro Shimizu 890ddd
#include "toonzqt/selection.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/lineedit.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tpalette.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qframe></qframe>
Toshihiro Shimizu 890ddd
#include <qtabbar></qtabbar>
Toshihiro Shimizu 890ddd
#include <qshortcut></qshortcut>
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 TXsheetHandle;
Toshihiro Shimizu 890ddd
class TFrameHandle;
Toshihiro Shimizu 890ddd
class TPaletteHandle;
Toshihiro Shimizu 890ddd
class TXshLevelHandle;
Toshihiro Shimizu 890ddd
class TStyleSelection;
Toshihiro Shimizu 890ddd
class TabBarContainter;
Toshihiro Shimizu 890ddd
class ChangeStyleCommand;
Toshihiro Shimizu 890ddd
class QMimeData;
Toshihiro Shimizu 890ddd
class StyleNameEditor;
Toshihiro Shimizu 890ddd
//==============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
//    PaletteViewerGUI  namespace
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    Contains classes pertaining the GUI of a Toonz Palette Viewer.
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace PaletteViewerGUI
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// class for managing the palette's default style chip size
Toshihiro Shimizu 890ddd
class DVAPI ChipSizeManager
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	int chipSize_Palette;
Toshihiro Shimizu 890ddd
	int chipSize_Cleanup;
Toshihiro Shimizu 890ddd
	int chipSize_Studio;
Toshihiro Shimizu 890ddd
	static ChipSizeManager *instance()
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		static ChipSizeManager _instance;
Toshihiro Shimizu 890ddd
		return &_instance;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	ChipSizeManager() : chipSize_Palette(2),
Toshihiro Shimizu 890ddd
						chipSize_Cleanup(2),
Toshihiro Shimizu 890ddd
						chipSize_Studio(2)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
enum PaletteViewType //! Possible palette contents of a Palette Viewer.
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	LEVEL_PALETTE,   //!< Content palette is from a level.
Toshihiro Shimizu 890ddd
	CLEANUP_PALETTE, //!< Content palette is from cleanup settings.
Toshihiro Shimizu 890ddd
	STUDIO_PALETTE   //!< Content palette is from a Studio Palette panel.
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
//    PageViewer  declaration
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI PageViewer : public QFrame,
Toshihiro Shimizu 890ddd
						 public TSelection::View
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QColor m_textColor; //text color used for list view
Toshihiro Shimizu 890ddd
	Q_PROPERTY(QColor TextColor READ getTextColor WRITE setTextColor)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	enum ViewMode //! Possible view modes for a Palette Viewer.
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		SmallChips,		   //!< Small icons.
Toshihiro Shimizu 890ddd
		MediumChips,	   //!< Medium icons.
Toshihiro Shimizu 890ddd
		LargeChips,		   //!< Large icons with style names.
Toshihiro Shimizu 890ddd
		List,			   //!< Top-down list of all icons.
Toshihiro Shimizu 890ddd
		SmallChipsWithName //!< Small icons with overlayed style names (if user-defined).
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// for displaying the linked style name from studio palette
Toshihiro Shimizu 890ddd
	enum NameDisplayMode { Style,
Toshihiro Shimizu 890ddd
						   Original,
Toshihiro Shimizu 890ddd
						   StyleAndOriginal };
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	PageViewer(QWidget *parent = 0, PaletteViewType viewType = LEVEL_PALETTE, bool hasPasteColors = true);
Toshihiro Shimizu 890ddd
	~PageViewer();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setPaletteHandle(TPaletteHandle *paletteHandle);
Toshihiro Shimizu 890ddd
	TPaletteHandle *getPaletteHandle() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setXsheetHandle(TXsheetHandle *xsheetHandle);
Toshihiro Shimizu 890ddd
	TXsheetHandle *getXsheetHandle() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setFrameHandle(TFrameHandle *xsheetHandle);
Toshihiro Shimizu 890ddd
	TFrameHandle *getFrameHandle() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// for clearing the cache when execute paste style command on styleSelection
Toshihiro Shimizu 890ddd
	void setLevelHandle(TXshLevelHandle *levelHandle);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setCurrentStyleIndex(int index);
Toshihiro Shimizu 890ddd
	int getCurrentStyleIndex() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setPage(TPalette::Page *page);
Toshihiro Shimizu 890ddd
	TPalette::Page *getPage() const { return m_page; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setChangeStyleCommand(ChangeStyleCommand *changeStyleCommand) { m_changeStyleCommand = changeStyleCommand; };
Toshihiro Shimizu 890ddd
	ChangeStyleCommand *getChangeStyleCommand() const { return m_changeStyleCommand; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getChipCount() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	ViewMode getViewMode() const { return m_viewMode; }
Toshihiro Shimizu 890ddd
	void setViewMode(ViewMode mode);
Toshihiro Shimizu 890ddd
	void setNameDisplayMode(NameDisplayMode mode);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	PaletteViewerGUI::PaletteViewType getViewType() const { return m_viewType; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int posToIndex(const QPoint &pos) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QRect getItemRect(int index) const;
Toshihiro Shimizu 890ddd
	QRect getColorChipRect(int index) const;
Toshihiro Shimizu 890ddd
	QRect getColorNameRect(int index) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void drop(int indexInPage, const QMimeData *mimeData);
Toshihiro Shimizu 890ddd
	void createDropPage();
Toshihiro Shimizu 890ddd
	void onSelectionChanged() { update(); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TStyleSelection *getSelection() const { return m_styleSelection; }
Toshihiro Shimizu 890ddd
	void clearSelection();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// update the "lock"s for commands when the StyleSelection becomes current and when the current palettte changed
Toshihiro Shimizu 890ddd
	void updateCommandLocks();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setTextColor(const QColor &color) { m_textColor = color; }
Toshihiro Shimizu 890ddd
	QColor getTextColor() const { return m_textColor; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void computeSize();
Toshihiro Shimizu 890ddd
	void onFrameChanged();
Toshihiro Shimizu 890ddd
	void onStyleRenamed();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void addNewColor();
Toshihiro Shimizu 890ddd
	void addNewPage();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	QSize getChipSize() const;
Toshihiro Shimizu 890ddd
	void drawColorChip(QPainter &p, QRect &chipRect, TColorStyle *style);
Toshihiro Shimizu 890ddd
	void drawColorName(QPainter &p, QRect &nameRect, TColorStyle *style, int styleIndex);
Toshihiro Shimizu 890ddd
	void drawToggleLink(QPainter &p, QRect &chipRect, TColorStyle *style);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	// event handlers
Toshihiro Shimizu 890ddd
	void paintEvent(QPaintEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void resizeEvent(QResizeEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void mousePressEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void mouseMoveEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void mouseReleaseEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void mouseDoubleClickEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void contextMenuEvent(QContextMenuEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void keyPressEvent(QKeyEvent *event);
Toshihiro Shimizu 890ddd
	void dragEnterEvent(QDragEnterEvent *event);
Toshihiro Shimizu 890ddd
	void dragMoveEvent(QDragMoveEvent *event);
Toshihiro Shimizu 890ddd
	void dropEvent(QDropEvent *event);
Toshihiro Shimizu 890ddd
	void dragLeaveEvent(QDragLeaveEvent *event);
Toshihiro Shimizu 890ddd
	void startDragDrop();
Toshihiro Shimizu 890ddd
	void createMenuAction(QMenu &menu, const char *id, QString name, const char *slot);
Toshihiro Shimizu 890ddd
	void showEvent(QShowEvent *);
Toshihiro Shimizu 890ddd
	void hideEvent(QHideEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool event(QEvent *e);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void select(int indexInPage, QMouseEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void zoomInChip();
Toshihiro Shimizu 890ddd
	void zoomOutChip();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void toggleLink();
Toshihiro Shimizu 890ddd
	void eraseToggleLink();
Toshihiro Shimizu 890ddd
	void removeLink();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	DVGui::LineEdit *m_renameTextField;
Toshihiro Shimizu 890ddd
	QPoint m_dragStartPosition;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TPalette::Page *m_page;
Toshihiro Shimizu 890ddd
	QPoint m_chipsOrigin;
Toshihiro Shimizu 890ddd
	int m_chipPerRow;
Toshihiro Shimizu 890ddd
	ViewMode m_viewMode;
Toshihiro Shimizu 890ddd
	NameDisplayMode m_nameDisplayMode;
Toshihiro Shimizu 890ddd
	int m_dropPositionIndex;
Toshihiro Shimizu 890ddd
	bool m_dropPageCreated;
Toshihiro Shimizu 890ddd
	bool m_startDrag;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TStyleSelection *m_styleSelection;
Toshihiro Shimizu 890ddd
	TFrameHandle *m_frameHandle;
Toshihiro Shimizu 890ddd
	bool m_hasPasteColors;
Toshihiro Shimizu 890ddd
	PaletteViewType m_viewType;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	ChangeStyleCommand *m_changeStyleCommand;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QShortcut *m_zoomInShortCut;
Toshihiro Shimizu 890ddd
	QShortcut *m_zoomOutShortCut;
Toshihiro Shimizu 890ddd
	StyleNameEditor *m_styleNameEditor;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
	void changeWindowTitleSignal();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
//    PaletteTabBar  declaration
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI PaletteTabBar : public QTabBar
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	PaletteTabBar(QWidget *parent, bool hasPageCommand);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setPageViewer(PageViewer *pageViewer)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_pageViewer = pageViewer;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void updateTabName();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void tabTextChanged(int index);
Toshihiro Shimizu 890ddd
	void movePage(int srcIndex, int dstIndex);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void mousePressEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void mouseMoveEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void mouseDoubleClickEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void dragEnterEvent(QDragEnterEvent *event);
Toshihiro Shimizu 890ddd
	void dragMoveEvent(QDragMoveEvent *event);
Toshihiro Shimizu 890ddd
	void dropEvent(QDropEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	DVGui::LineEdit *m_renameTextField;
Toshihiro Shimizu 890ddd
	int m_renameTabIndex;
Toshihiro Shimizu 890ddd
	PageViewer *m_pageViewer;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool m_hasPageCommand;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
//    PaletteIconWidget  declaration
Toshihiro Shimizu 890ddd
//****************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
	\brief    Special placeholder toolbar icon for \a starting a palette move
Toshihiro Shimizu 890ddd
	through drag & drop.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	\details  This widget is currently employed as a mere mouse event filter
Toshihiro Shimizu 890ddd
	to propagate drag & drop starts to a PaletteViewer ancestor
Toshihiro Shimizu 890ddd
	in the widgets hierarchy.
Toshihiro Shimizu 890ddd
	*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI PaletteIconWidget : public QWidget
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
	PaletteIconWidget(QWidget *parent = 0, Qt::WindowFlags flags = 0);
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
	PaletteIconWidget(QWidget *parent = 0, Qt::WFlags flags = 0);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
	~PaletteIconWidget();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void startDrag(); //!< Emitted \a once whenever the icon is sensibly dragged
Toshihiro Shimizu 890ddd
					  //!  by the user.
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void paintEvent(QPaintEvent *);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void enterEvent(QEvent *event);
Toshihiro Shimizu 890ddd
	void leaveEvent(QEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void mousePressEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
	void mouseMoveEvent(QMouseEvent *event);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	QPoint m_mousePressPos; //!< Mouse position at mouse press.
Toshihiro Shimizu 890ddd
	bool m_isOver,			//!< Whether mouse is hovering on this widget.
Toshihiro Shimizu 890ddd
		m_dragged;			//!< Whether user has started a drag operation on the icon.
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
} // namespace PaletteViewerGUI
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif // PALETTEVIEWERGUI_H