Blob Blame Raw


#ifndef HISTOGRAM_H
#define HISTOGRAM_H

#include "tcommon.h"
#include "traster.h"
#include "ttoonzimage.h"
#include "tpalette.h"

#include <QWidget>
#include <QStackedWidget>

#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

#ifdef _WIN32
#pragma warning(disable : 4251)
#endif

class QStackedWidget;
class QString;
class QComboBox;
class QColor;

//=============================================================================
// HistogramGraph
//-----------------------------------------------------------------------------

class DVAPI HistogramGraph : public QWidget
{
	Q_OBJECT

	QColor m_color;
	/*! Height of graph, without margin.*/
	int m_height;

	QVector<int> m_values, m_viewValues, m_logViewValues;
	bool m_logScale;

public:
	static const int drawMargin;

public:
	HistogramGraph(QWidget *parent = 0, QColor m_color = QColor());
	~HistogramGraph();

	void setAlphaMask(int value);

	void setHeight(int height) { m_height = height; }
	int getHeight() { return m_height; }

	void setValues(const int values[]);
	const QVector<int> &values() const { return m_values; }

	void setLogScale(bool onOff) { m_logScale = onOff; }
	bool logScale() const { return m_logScale; }

	void draw(QPainter *painter, QPoint translation = QPoint(0, 0));

protected:
	void paintEvent(QPaintEvent *pe);
};

//=============================================================================
// ChannelBar
//-----------------------------------------------------------------------------

class DVAPI ChannelBar : public QWidget
{
	Q_OBJECT

	QColor m_color;
	int m_colorBarLength;

	bool m_isHorizontal;
	bool m_drawNumbers;

public:
	ChannelBar(QWidget *parent = 0, QColor m_color = QColor(),
			   bool isHorizontal = true);
	~ChannelBar();

	QColor getColor() const { return m_color; }

	void setDrawNumbers(bool onOff);
	bool drawNumbers() const { return m_drawNumbers; }

	void draw(QPainter *painter, QPoint translation = QPoint(0, 0));

protected:
	void paintEvent(QPaintEvent *event);
};

//=============================================================================
// HistogramView
//-----------------------------------------------------------------------------

class DVAPI HistogramView : public QWidget
{
	Q_OBJECT

	HistogramGraph *m_histogramGraph;
	ChannelBar *m_colorBar;

	QWidget *m_drawnWidget;

public:
	HistogramView(QWidget *parent = 0, QColor color = Qt::black);
	~HistogramView();

	const HistogramGraph *histogramGraph() const { return m_histogramGraph; }
	HistogramGraph *histogramGraph() { return m_histogramGraph; }

	const ChannelBar *channelBar() const { return m_colorBar; }
	ChannelBar *channelBar() { return m_colorBar; }

	QColor getChannelBarColor() const { return m_colorBar->getColor(); }

	//Deve essere fatto prima di chiamare setValues()
	void setGraphHeight(int height) { m_histogramGraph->setHeight(height); }
	void setGraphAlphaMask(int value) { m_histogramGraph->setAlphaMask(value); }
	void setDrawnWidget(QWidget *widget);

	void setValues(const int values[]);
	const QVector<int> &values() const { return m_histogramGraph->values(); }

	void draw(QPainter *painter, QPoint translation = QPoint(0, 0));
};

//=============================================================================
// Histograms
//-----------------------------------------------------------------------------

class DVAPI Histograms : public QStackedWidget
{
	Q_OBJECT

	TRasterP m_raster;
	TPaletteP m_palette; //Necessario per le tlv
	int m_channelValue[6][256];
	int m_channelsCount;
	bool m_computeAlsoRGBA;

public:
	Histograms(QWidget *parent = 0, bool rgba = false);
	~Histograms();

	TRasterP getRaster() const { return m_raster; }
	void setRaster(const TRasterP &raster, const TPaletteP &palette = 0);

	HistogramView *getHistogramView(int indexType) const;
	int channelsCount() const { return m_channelsCount; }

protected:
	void computeChannelsValue();
};

//=============================================================================
// Histogram
//-----------------------------------------------------------------------------

class DVAPI Histogram : public QWidget
{
	Q_OBJECT

	QComboBox *m_channelsListBox;
	Histograms *m_histograms;

public:
	Histogram(QWidget *parent = 0);
	~Histogram() {}

	Histograms *getHistograms() const { return m_histograms; }

	TRasterP getRaster() const { return m_histograms->getRaster(); }
	void setRaster(const TRasterP &raster, const TPaletteP &palette = 0);

public slots:

	void setLogScale(bool onOff);

private:
	void updateChannelsList();
};

#endif // HISTOGRAM_H