qthistodraw.h 4.38 KB
Newer Older
Sylvain Thery's avatar
Sylvain Thery committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg           *
*                                                                              *
* This library is free software; you can redistribute it and/or modify it      *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your     *
* option) any later version.                                                   *
*                                                                              *
* This library is distributed in the hope that it will be useful, but WITHOUT  *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
* for more details.                                                            *
*                                                                              *
* You should have received a copy of the GNU Lesser General Public License     *
* along with this library; if not, write to the Free Software Foundation,      *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
*                                                                              *
* Web site: http://cgogn.unistra.fr/                                           *
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef __QT_HISTO_DRAW__
#define __QT_HISTO_DRAW__


#include <QWidget>
#include <QPainter>
#include <QMouseEvent>

#include "Utils/Qt/qtpopup.h"
#include "Algo/Histogram/histogram.h"

namespace CGoGN
{

namespace Utils
{

namespace QT
{


class RenderHistogram : public QWidget
{
    Q_OBJECT

	static const int m_frameWidth = 10;


	const Algo::Histogram::Histogram& m_histo;
    std::vector<Geom::Vec3f> m_qcolors;

    unsigned int m_max;
	int m_h;
	int m_w;
	unsigned int m_l;

	std::vector<int> m_vals_ax_left;

	int m_axl_nbd;
	bool m_drawHisto;
	bool m_drawQuantilles;
	bool m_histoFront;
	float m_opacity;
	bool m_drawAxis;

	/// draw all in painter
	void draw(QPainter& painter);

	/// compute left axis value
	void axeVals();

public:
	/**
	 * constructor
	 * @param parent parent widget
	 * @param histo histogram to draw
	 */
    RenderHistogram(QWidget* parent, Algo::Histogram::Histogram& histo, bool drawAxis=true );

    /// minimum size
    virtual QSize minimumSizeHint() const;

    /// size at launch
    virtual QSize sizeHint() const;

    /**
     * set color table for quantilles drawing
     * @param colors vector of colors
     */
    void setQuantillesColors(const std::vector<Geom::Vec3f>& colors);

   /***
    * svg export
    * @param filename file name of svg file
    */
    void svgExport(const std::string& filename);

    /**
     * set histo position (front or back)
     * @param hf if true histo is in front of the quantille
     */
    void setHistoPosition(bool hf);

    /**
     * define if histogram is drawn
     */
    void setHistoDraw(bool d);

    /**
     * define if quantille is drawn
     */
    void setQuantillesDraw(bool d);

    /**
	 * get bool value that indicate drawing of histogram
	 */
    bool getHistoDraw();

    /**
	 * get bool value that indicate drawing of quantille
	 */
    bool getQuantillesDraw();

    /**
	 * get opacity value
	 */
    float getOpacity();

    /**
     * define the opacity if the two graphs are drawn
     */
    void setOpacity(float op);

    /**
     * update drawing
     */
    void update();

    signals:
    /**
     * emitted signal when a column of histogram is clicked
     */
    void clicked(unsigned int, unsigned int);



protected:

    /// draw the histogram in painter widget
    void drawHisto(QPainter& painter);

    /// draw the quatilles in painter widget
    void drawQuantilles(QPainter& painter);

    /// functinn calles when widget need to be redraw
   void paintEvent(QPaintEvent *event);

   /// draw the histogram in painter widget
   void mousePressEvent(QMouseEvent* event);

};

}
}
}


#endif