Blob Blame Raw


#ifndef PALETTEVIEWER_H
#define PALETTEVIEWER_H

#include "paletteviewergui.h"
#include "toonz/tpalettehandle.h"

#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 declaration
class QScrollArea;
class QToolBar;
class PaletteKeyframeNavigator;
class TFrameHandle;

using namespace PaletteViewerGUI;

//-----------------------------------------------------------------------------

class DVAPI ChangeStyleCommand
{
public:
	ChangeStyleCommand() {}
	virtual ~ChangeStyleCommand() {}
	virtual bool onStyleChanged() = 0;
};

//DAFARE: non mi piace, forse e' meglio un comando esterno!!
class TXsheetHandle;

//=============================================================================
// PaletteViewer
//-----------------------------------------------------------------------------

class DVAPI PaletteViewer : public QFrame
{
	Q_OBJECT

public:
	PaletteViewer(QWidget *parent = 0, PaletteViewType viewType = LEVEL_PALETTE,
				  bool hasSaveToolBar = true, bool hasPageCommand = true, bool hasPasteColors = true);
	~PaletteViewer();

	const TPaletteHandle *getPaletteHandle() const { return m_paletteHandle; }
	void setPaletteHandle(TPaletteHandle *paletteHandle);

	const TFrameHandle *getFrameHandle() const { return m_frameHandle; }
	void setFrameHandle(TFrameHandle *frameHandle);

	const TXsheetHandle *getXsheetHandle() const { return m_xsheetHandle; }
	void setXsheetHandle(TXsheetHandle *xsheetHandle);

	// for clearing level cache after "paste style" command called from style selection
	void setLevelHandle(TXshLevelHandle *levelHandle);

	TPalette *getPalette();

	void setChangeStyleCommand(ChangeStyleCommand *); // gets ownership
	ChangeStyleCommand *getChangeStyleCommand() const { return m_changeStyleCommand; }

	int getViewMode() const { return m_pageViewer->getViewMode(); }
	void setViewMode(int mode) { m_pageViewer->setViewMode((PaletteViewerGUI::PageViewer::ViewMode)mode); }

	void updateView();

	void enableSaveAction(bool enable);

protected:
	TPaletteHandle *m_paletteHandle;
	TFrameHandle *m_frameHandle;
	TXsheetHandle *m_xsheetHandle;

	QScrollArea *m_pageViewerScrollArea;
	PaletteViewerGUI::PageViewer *m_pageViewer;
	TabBarContainter *m_tabBarContainer;
	PaletteTabBar *m_pagesBar;

	QToolBar *m_paletteToolBar;
	QToolBar *m_savePaletteToolBar;

	int m_indexPageToDelete;

	PaletteViewType m_viewType;

	PaletteKeyframeNavigator *m_keyFrameButton;

	ChangeStyleCommand *m_changeStyleCommand;

	bool m_hasSavePaletteToolbar;
	bool m_hasPageCommand;

	bool m_isSaveActionEnabled;

	QAction *m_lockPaletteAction;
	QToolButton *m_lockPaletteToolButton;

protected:
	void createTabBar();

	void createToolBar()
	{
		createPaletteToolBar();
		createSavePaletteToolBar();
	}
	void createPaletteToolBar();
	void createSavePaletteToolBar();

	void updateTabBar();

	void updateToolBar()
	{
		updatePaletteToolBar();
		updateSavePaletteToolBar();
	}
	void updatePaletteToolBar();
	void updateSavePaletteToolBar();

	void resizeEvent(QResizeEvent *event);
	void contextMenuEvent(QContextMenuEvent *event);

	void showEvent(QShowEvent *);
	void hideEvent(QHideEvent *);

	void dragEnterEvent(QDragEnterEvent *event);
	void dropEvent(QDropEvent *event);

	void clearStyleSelection();

protected slots:

	void setPageView(int currentIndexPage);

	void addNewPage();
	void addNewColor();
	void deletePage();

	void saveStudioPalette();

	void onColorStyleSwitched();
	void onPaletteChanged();
	void onPaletteSwitched();
	void onFrameSwitched();
	void onTabTextChanged(int tabIndex);
	void onViewMode(QAction *);

	void changeWindowTitle();

	void movePage(int srcIndex, int dstIndex);

	void startDragDrop();

	void onNameDisplayMode(QAction *);
	void setIsLocked(bool lock);
};

#endif // PALETTEVIEWER_H