Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef COMBOHISTOGRAM_H
Toshihiro Shimizu 890ddd
#define COMBOHISTOGRAM_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
class RGBLabel;
Toshihiro Shimizu 890ddd
class QLabel;
shun-iwasawa 481b59
class QPushButton;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define COMBOHIST_RESOLUTION_W 256
Toshihiro Shimizu 890ddd
#define COMBOHIST_RESOLUTION_H 100
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
// 120405
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI ComboHistoRGBLabel final : public QWidget {
shun-iwasawa 199e29
  Q_OBJECT
shun-iwasawa d5045c
public:
shun-iwasawa d5045c
  enum DisplayMode { Display_8bit = 0, Display_16bit, Display_0_1 };
shun-iwasawa d5045c
shun-iwasawa d5045c
private:
Shinya Kitaoka 120a6e
  QColor m_color;
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  DisplayMode m_mode;
shun-iwasawa 2cda63
  bool m_alphaVisible;
shun-iwasawa d5045c
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  ComboHistoRGBLabel(QColor color, QWidget *parent);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ~ComboHistoRGBLabel() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setColorAndUpdate(QColor color);
shun-iwasawa d5045c
  void setDisplayMode(DisplayMode mode) { m_mode = mode; }
shun-iwasawa 2cda63
  void setAlphaVisible(bool visible) { m_alphaVisible = visible; }
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
Shinya Kitaoka 120a6e
class DVAPI ChannelHistoGraph : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  QVector<int> m_values[2];  // 0: current raster 1: snapshot</int>
shun-iwasawa d5045c
  int m_maxValue[2];
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_pickedValue;
shun-iwasawa d5045c
  int m_channelIndex;
shun-iwasawa 481b59
  float m_range;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
shun-iwasawa d5045c
  bool *m_showComparePtr;
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  ChannelHistoGraph(int index, QWidget *parent = nullptr,
shun-iwasawa d5045c
                    bool *showComparePtr = nullptr);
Shinya Kitaoka 120a6e
  ~ChannelHistoGraph();
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  virtual void setValues(int *buf, bool isComp);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void showCurrentChannelValue(int val);
shun-iwasawa 481b59
  void setRange(float range) { m_range = range; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *event) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI RGBHistoGraph final : public ChannelHistoGraph {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QVector<int> m_rgbValues[3];</int>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QImage m_histoImg;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
shun-iwasawa d5045c
  RGBHistoGraph(int index, QWidget *parent = 0);
Shinya Kitaoka 120a6e
  ~RGBHistoGraph();
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  void setValues(int *buf, bool isComp) override;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *event) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI ChannelColorBar final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Shinya Kitaoka 120a6e
  QColor m_color;
shun-iwasawa 481b59
  float m_range;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  ChannelColorBar(QWidget *parent = 0, QColor m_color = QColor());
Shinya Kitaoka 120a6e
  ~ChannelColorBar() {}
shun-iwasawa 481b59
  void setRange(float range) { m_range = range; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void paintEvent(QPaintEvent *event) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI ChannelHisto final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ChannelHistoGraph *m_histogramGraph;
Shinya Kitaoka 120a6e
  ChannelColorBar *m_colorBar;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
shun-iwasawa d5045c
  ChannelHisto(int channelIndex, bool *showComparePtr, QWidget *parent = 0);
Shinya Kitaoka 120a6e
  ~ChannelHisto() {}
Toshihiro Shimizu 890ddd
shun-iwasawa d5045c
  void refleshValue(int *buf, bool isComp = false) {
shun-iwasawa d5045c
    m_histogramGraph->setValues(buf, isComp);
shun-iwasawa d5045c
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void showCurrentChannelValue(int val);
Toshihiro Shimizu 890ddd
shun-iwasawa 481b59
  void setRange(float range) {
shun-iwasawa 481b59
    m_histogramGraph->setRange(range);
shun-iwasawa 481b59
    m_colorBar->setRange(range);
shun-iwasawa 481b59
  }
shun-iwasawa 481b59
Toshihiro Shimizu 890ddd
protected slots:
Shinya Kitaoka 120a6e
  void onShowAlphaButtonToggled(bool visible);
shun-iwasawa 2cda63
shun-iwasawa 2cda63
signals:
shun-iwasawa 2cda63
  void showButtonToggled(bool);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class DVAPI ComboHistogram final : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP m_raster;
Shinya Kitaoka 120a6e
  TPaletteP m_palette;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // rgba channels
Shinya Kitaoka 120a6e
  int m_channelValue[4][COMBOHIST_RESOLUTION_W];
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // rgba channels + composited
Shinya Kitaoka 120a6e
  ChannelHisto *m_histograms[5];
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ComboHistoRGBLabel *m_rgbLabel;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ComboHistoRGBLabel *m_rectAverageRgbLabel;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  QLabel *m_xPosLabel;
Shinya Kitaoka 120a6e
  QLabel *m_yPosLabel;
Toshihiro Shimizu 890ddd
shun-iwasawa 481b59
  // graph range control (available only with TRasterF)
shun-iwasawa 481b59
  QWidget *m_rangeControlContainer;
shun-iwasawa 481b59
  QPushButton *m_rangeUpBtn, *m_rangeDwnBtn;
shun-iwasawa 481b59
  QLabel *m_rangeLabel;
shun-iwasawa 481b59
  int m_rangeStep;  // 0 = 1.0, 1 = 2.0, 2 = 4.0, 3 = 8.0...
shun-iwasawa 481b59
shun-iwasawa d5045c
  QComboBox *m_displayModeCombo;
shun-iwasawa d5045c
shun-iwasawa d5045c
  bool m_showCompare;
shun-iwasawa d5045c
  bool m_compHistoIsValid;
shun-iwasawa d5045c
  int m_channelValueComp[4][COMBOHIST_RESOLUTION_W];
shun-iwasawa d5045c
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  ComboHistogram(QWidget *parent = 0);
Shinya Kitaoka 120a6e
  ~ComboHistogram();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterP getRaster() const { return m_raster; }
Shinya Kitaoka 120a6e
  void setRaster(const TRasterP &raster, const TPaletteP &palette = 0);
Shinya Kitaoka 120a6e
  void updateInfo(const TPixel32 &pix, const TPointD &imagePos);
shun-iwasawa d5045c
  void updateInfo(const TPixel64 &pix, const TPointD &imagePos);
shun-iwasawa 481b59
  void updateInfo(const TPixelF &pix, const TPointD &imagePos);
Shinya Kitaoka 120a6e
  void updateAverageColor(const TPixel32 &pix);
shun-iwasawa d5045c
  void updateAverageColor(const TPixel64 &pix);
shun-iwasawa 481b59
  void updateAverageColor(const TPixelF &pix);
shun-iwasawa d5045c
  void updateCompHistogram();
shun-iwasawa d5045c
shun-iwasawa d5045c
  void setShowCompare(bool on) {
shun-iwasawa d5045c
    m_showCompare = on;
shun-iwasawa d5045c
    if (isVisible() && !m_compHistoIsValid) updateCompHistogram();
shun-iwasawa d5045c
  }
shun-iwasawa d5045c
  void invalidateCompHisto() {
shun-iwasawa d5045c
    m_compHistoIsValid = false;
shun-iwasawa d5045c
    if (isVisible() && m_showCompare) updateCompHistogram();
shun-iwasawa d5045c
  }
Toshihiro Shimizu 890ddd
shun-iwasawa 481b59
  void refreshHistogram();
shun-iwasawa 481b59
Toshihiro Shimizu 890ddd
protected:
shun-iwasawa d5045c
  void computeChannelsValue(int *buf, size_t size, TRasterP ras,
shun-iwasawa d5045c
                            TPalette *extPlt = nullptr);
shun-iwasawa d5045c
  void showEvent(QShowEvent *) override;
shun-iwasawa d5045c
shun-iwasawa d5045c
protected slots:
shun-iwasawa d5045c
  void onDisplayModeChanged();
shun-iwasawa 2cda63
  void onShowAlphaButtonToggled(bool);
shun-iwasawa 481b59
  void onRangeUp();
shun-iwasawa 481b59
  void onRangeDown();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif