/* -*- c++ -*- */
/*
 * Copyright 2013 Free Software Foundation, Inc.
 *
 * This file is part of GNU Radio
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 */

#ifndef HISTOGRAM_DISPLAY_PLOT_H
#define HISTOGRAM_DISPLAY_PLOT_H

#include <gnuradio/qtgui/DisplayPlot.h>
#include <cstdint>
#include <cstdio>
#include <vector>

/*!
 * \brief QWidget for displaying time domain plots.
 * \ingroup qtgui_blk
 */
class HistogramDisplayPlot : public DisplayPlot
{
    Q_OBJECT

public:
    HistogramDisplayPlot(unsigned int nplots, QWidget*);
    ~HistogramDisplayPlot() override;

    // Disallow copy/move because of the raw QT pointers.
    // They are handled by QT.
    HistogramDisplayPlot(const HistogramDisplayPlot&) = delete;
    HistogramDisplayPlot(HistogramDisplayPlot&&) = delete;
    HistogramDisplayPlot& operator=(const HistogramDisplayPlot&) = delete;
    HistogramDisplayPlot& operator=(HistogramDisplayPlot&&) = delete;

    void plotNewData(const std::vector<double*> dataPoints,
                     const uint64_t numDataPoints,
                     const double timeInterval);

    void replot() override;

public slots:
    void setAutoScale(bool state);
    void setAutoScaleX();
    void setSemilogx(bool en);
    void setSemilogy(bool en);
    void setAccumulate(bool en);
    bool getAccumulate() const;

    void setMarkerAlpha(unsigned int which, int alpha) override;
    int getMarkerAlpha(unsigned int which) const override;
    void setLineColor(unsigned int which, QColor color) override;

    void setNumBins(unsigned int bins);
    void setXaxis(double min, double max) override;

    void clear();

private:
    void _resetXAxisPoints(double left, double right);
    void _autoScaleY(double bottom, double top);

    unsigned int d_bins = 100;
    bool d_accum = false;
    double d_xmin, d_xmax, d_left, d_right;
    double d_width;

    std::vector<double> d_xdata;
    std::vector<std::vector<double>> d_ydata;

    bool d_semilogx = false;
    bool d_semilogy = false;
    bool d_autoscalex_state = false;
};

#endif /* HISTOGRAM_DISPLAY_PLOT_H */
