Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef HISTOGRAM_H
Toshihiro Shimizu 890ddd
#define HISTOGRAM_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
#include "traster.h"
Toshihiro Shimizu 890ddd
#include "ttoonzimage.h"
Toshihiro Shimizu 890ddd
#include "tpalette.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include <qstackedwidget></qstackedwidget>
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
e280ae
#ifdef _MSC_VER
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4251)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class QStackedWidget;
Toshihiro Shimizu 890ddd
class QString;
Toshihiro Shimizu 890ddd
class QComboBox;
Toshihiro Shimizu 890ddd
class QColor;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// HistogramGraph
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI HistogramGraph final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor m_color;
Shinya Kitaoka 120a6e
  /*! Height of graph, without margin.*/
Shinya Kitaoka 120a6e
  int m_height;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QVector<int> m_values, m_viewValues, m_logViewValues;</int>
Shinya Kitaoka 120a6e
  bool m_logScale;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  static const int drawMargin;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  HistogramGraph(QWidget *parent = 0, QColor m_color = QColor());
Shinya Kitaoka 120a6e
  ~HistogramGraph();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setAlphaMask(int value);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setHeight(int height) { m_height = height; }
Shinya Kitaoka 120a6e
  int getHeight() { return m_height; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setValues(const int values[]);
Shinya Kitaoka 120a6e
  const QVector<int> &values() const { return m_values; }</int>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setLogScale(bool onOff) { m_logScale = onOff; }
Shinya Kitaoka 120a6e
  bool logScale() const { return m_logScale; }
Toshihiro Shimizu 890ddd
shun-iwasawa 0ed559
  void draw(QPainter *painter, QPoint translation = QPoint(0, 0),
shun-iwasawa 0ed559
            int size = -1);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *pe) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// ChannelBar
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI ChannelBar final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
shun-iwasawa 0ed559
public:
shun-iwasawa 0ed559
  enum Range { Range_0_255, Range_0_1 };
shun-iwasawa 0ed559
shun-iwasawa 0ed559
private:
Shinya Kitaoka 120a6e
  QColor m_color;
Shinya Kitaoka 120a6e
  int m_colorBarLength;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool m_isHorizontal;
Shinya Kitaoka 120a6e
  bool m_drawNumbers;
shun-iwasawa 0ed559
shun-iwasawa 4c05e2
  QColor m_textColor;
shun-iwasawa 0ed559
  Range m_range;
shun-iwasawa 0ed559
shun-iwasawa 4c05e2
  Q_PROPERTY(QColor TextColor READ getTextColor WRITE setTextColor)
Toshihiro Shimizu 890ddd
shun-iwasawa 0ed559
  int m_size;
shun-iwasawa 0ed559
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  ChannelBar(QWidget *parent = 0, QColor m_color = QColor(),
Shinya Kitaoka 120a6e
             bool isHorizontal = true);
Shinya Kitaoka 120a6e
  ~ChannelBar();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getColor() const { return m_color; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setDrawNumbers(bool onOff);
Shinya Kitaoka 120a6e
  bool drawNumbers() const { return m_drawNumbers; }
Toshihiro Shimizu 890ddd
shun-iwasawa 0ed559
  void draw(QPainter *painter, QPoint translation = QPoint(0, 0),
shun-iwasawa 0ed559
            int size = -1);
Toshihiro Shimizu 890ddd
shun-iwasawa 4c05e2
  void setTextColor(const QColor &color) { m_textColor = color; }
shun-iwasawa 4c05e2
  QColor getTextColor() const { return m_textColor; }
shun-iwasawa 0ed559
shun-iwasawa 0ed559
  void setLabelRange(Range range) { m_range = range; }
shun-iwasawa 0ed559
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *event) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// HistogramView
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI HistogramView final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  HistogramGraph *m_histogramGraph;
Shinya Kitaoka 120a6e
  ChannelBar *m_colorBar;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QWidget *m_drawnWidget;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  HistogramView(QWidget *parent = 0, QColor color = Qt::black);
Shinya Kitaoka 120a6e
  ~HistogramView();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const HistogramGraph *histogramGraph() const { return m_histogramGraph; }
Shinya Kitaoka 120a6e
  HistogramGraph *histogramGraph() { return m_histogramGraph; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  const ChannelBar *channelBar() const { return m_colorBar; }
Shinya Kitaoka 120a6e
  ChannelBar *channelBar() { return m_colorBar; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QColor getChannelBarColor() const { return m_colorBar->getColor(); }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // Deve essere fatto prima di chiamare setValues()
Shinya Kitaoka 120a6e
  void setGraphHeight(int height) { m_histogramGraph->setHeight(height); }
Shinya Kitaoka 120a6e
  void setGraphAlphaMask(int value) { m_histogramGraph->setAlphaMask(value); }
Shinya Kitaoka 120a6e
  void setDrawnWidget(QWidget *widget);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setValues(const int values[]);
Shinya Kitaoka 120a6e
  const QVector<int> &values() const { return m_histogramGraph->values(); }</int>
Toshihiro Shimizu 890ddd
shun-iwasawa 0ed559
  void draw(QPainter *painter, QPoint translation = QPoint(0, 0),
shun-iwasawa 0ed559
            int width = -1);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// Histograms
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI Histograms final : public QStackedWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP m_raster;
Shinya Kitaoka 120a6e
  TPaletteP m_palette;  // Necessario per le tlv
Shinya Kitaoka 120a6e
  int m_channelValue[6][256];
Shinya Kitaoka 120a6e
  int m_channelsCount;
Shinya Kitaoka 120a6e
  bool m_computeAlsoRGBA;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  Histograms(QWidget *parent = 0, bool rgba = false);
Shinya Kitaoka 120a6e
  ~Histograms();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP getRaster() const { return m_raster; }
Shinya Kitaoka 120a6e
  void setRaster(const TRasterP &raster, const TPaletteP &palette = 0);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  HistogramView *getHistogramView(int indexType) const;
Shinya Kitaoka 120a6e
  int channelsCount() const { return m_channelsCount; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 120a6e
  void computeChannelsValue();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// Histogram
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI Histogram final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QComboBox *m_channelsListBox;
Shinya Kitaoka 120a6e
  Histograms *m_histograms;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  Histogram(QWidget *parent = 0);
Shinya Kitaoka 120a6e
  ~Histogram() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  Histograms *getHistograms() const { return m_histograms; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP getRaster() const { return m_histograms->getRaster(); }
Shinya Kitaoka 120a6e
  void setRaster(const TRasterP &raster, const TPaletteP &palette = 0);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setLogScale(bool onOff);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  void updateChannelsList();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
#endif  // HISTOGRAM_H