Blame view

src/ParamOutputImpl/Plot/TickPlot/TickMarkDecorator.hh 3.46 KB
fbe3c2bb   Benjamin Renard   First commit
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
/*
 * TickMarkDecorator.hh
 *
 *  Created on: Dec 18, 2013
 *      Author: amdadev
 */

#ifndef TICKMARKDECORATOR_HH_
#define TICKMARKDECORATOR_HH_

#include <boost/smart_ptr/shared_ptr.hpp>
#include <iosfwd>

#include "plplot/plplot.h"
#include <map>

#include "plplot/plstream.h"


#include "TimeAxisDecorator.hh"

using std::map;

namespace plot {

8c860e4f   Benjamin Renard   Rework for tickpl...
26
struct TickParamIndexInfo{
fbe3c2bb   Benjamin Renard   First commit
27
	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
28
	 * @brief format string used to format series values.
fbe3c2bb   Benjamin Renard   First commit
29
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
30
	std::string _valuesFormat;
46858100   Benjamin Renard   Tickplot: Add mis...
31
32

	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
33
	 * @brief link to the parameter data
46858100   Benjamin Renard   Tickplot: Add mis...
34
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
35
	ParameterData* _parameterData;
46858100   Benjamin Renard   Tickplot: Add mis...
36

fbe3c2bb   Benjamin Renard   First commit
37
	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
38
	 * @brief serie component
fbe3c2bb   Benjamin Renard   First commit
39
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
40
41
	AMDA::Common::ParameterIndexComponent _index;
};
225ac17f   Benjamin Renard   Fix tickmarks plot
42

8c860e4f   Benjamin Renard   Rework for tickpl...
43
struct TickParamInfo{
fbe3c2bb   Benjamin Renard   First commit
44
	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
45
	 * @brief param id
fbe3c2bb   Benjamin Renard   First commit
46
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
47
	std::string _paramId;
225ac17f   Benjamin Renard   Fix tickmarks plot
48
49

	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
50
	 * @brief vector of index info
225ac17f   Benjamin Renard   Fix tickmarks plot
51
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
52
	std::vector<TickParamIndexInfo> _indexesInfo;
fbe3c2bb   Benjamin Renard   First commit
53
54
};

8c860e4f   Benjamin Renard   Rework for tickpl...
55
typedef std::vector<TickParamInfo> TickParamInfoList;
fbe3c2bb   Benjamin Renard   First commit
56
57
58
59
60
61
62
63
64
65
66
67

struct TimeInfo{

	/**
	 * @brief time format in label
	 */
	std::string _timeFormat;

	/**
	 * @brief time axis title.
	 */
	std::string _timeTitle;
8c860e4f   Benjamin Renard   Rework for tickpl...
68
69

	TimeAxis* _pAxis;
fbe3c2bb   Benjamin Renard   First commit
70
71
72
73
74
75
76
77
};
typedef boost::shared_ptr<TimeInfo> TimeInfoPtr;

/**
 * @brief decorator used when tickmarks label are needed for a time graph.
 */
class TickMarkDecorator: public TimeAxisDecorator {
public:
8c860e4f   Benjamin Renard   Rework for tickpl...
78
	TickMarkDecorator(PanelPlotOutput* decoratorPlot);
fbe3c2bb   Benjamin Renard   First commit
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

	TickMarkDecorator(const TickMarkDecorator& ref_ );

	TickMarkDecorator& operator=(const TickMarkDecorator& ref_);

	virtual ~TickMarkDecorator();

	void setValuesFormat( const std::string &format_){
		_valuesFormat = format_;
	}
	const std::string& getValuesFormat() const{
		return _valuesFormat;
	}

	/**
	 * Overrides XAxisDecorator::updatePlotArea
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
96
	void updatePlotArea(PanelPlotOutput* pplot_, Axis* axis_, const Bounds& panelBounds_, Bounds& bounds_);
fbe3c2bb   Benjamin Renard   First commit
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

	/**
	 * Overrides XAxisDecorator::configure
	 */
	void configure(PanelPlotOutput* pplot_, Axis* axis_, double start_, double stop_,
			std::map<std::string, ParameterData> *pParameterValues);

	/**
	 * Overrides XAxisDecorator::draw
	 * @brief Draws tickmark on given time axis
	 */
	void draw(PanelPlotOutput* pplot_, Axis* axis_, std::shared_ptr<plstream> pls_);

protected:
	/**
	 * Overrides TimeAxisDecorator::installLabelGenerator.
	 */
	void installLabelGenerator(PanelPlotOutput* pplot_, TimeAxis* axis_);

8c860e4f   Benjamin Renard   Rework for tickpl...
116
117
118
119
120
121
122
123
124
125
	/**
	 * @brief Get tick mark label
	 */
	std::string getTickParamLabel(const std::string& paramId, const AMDA::Common::ParameterIndexComponent& index);

	/**
	 * @brief Get tick mark description
	 */
	std::string getTickParamDescription(const std::string& paramId, bool isScalar);

fbe3c2bb   Benjamin Renard   First commit
126
127
128
private:

	/**
fbe3c2bb   Benjamin Renard   First commit
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
	 * @brief Calculates plot area for date display
	 */
	double computeStartDateWidth(PanelPlotOutput* pplot_, TimeAxis* pAxis_);

	/**
	 * @brief A logger for tick plot decorator
	 */
	static log4cxx::LoggerPtr _logger;
	
	/**
	 * @brief Some time properties that are used by time label generator
	 */
	TimeInfoPtr _pTimeInfo;
	
	/**
8c860e4f   Benjamin Renard   Rework for tickpl...
144
	 * @brief List of tick info
fbe3c2bb   Benjamin Renard   First commit
145
	 */
8c860e4f   Benjamin Renard   Rework for tickpl...
146
	TickParamInfoList _tickInfoList;
fbe3c2bb   Benjamin Renard   First commit
147
148
149
150
151
152
153
	
	/**
	 * @brief A format for value display (see sprintf format)
	 */
	std::string _valuesFormat;
	
	/**
fbe3c2bb   Benjamin Renard   First commit
154
155
156
157
158
159
160
	 * @brief Plot that owns parameter values.
	 */
	PanelPlotOutput* _decoratorPlot;

};

/**
8c860e4f   Benjamin Renard   Rework for tickpl...
161
 * @brief Custom generator for tick time label
fbe3c2bb   Benjamin Renard   First commit
162
 */
8c860e4f   Benjamin Renard   Rework for tickpl...
163
void generateTickTimeLabel(PLINT axis, PLFLT value, char *label, PLINT length,
fbe3c2bb   Benjamin Renard   First commit
164
165
166
167
		PLPointer data);
/**
 * @brief Custom generator for a tick serie (one per serie).
 */
8c860e4f   Benjamin Renard   Rework for tickpl...
168
void generateTickSerieLabel(PLINT axis, PLFLT value, char *label, PLINT length,
fbe3c2bb   Benjamin Renard   First commit
169
170
171
172
		PLPointer data);
} /* namespace plot */

#endif /* TICKMARKDECORATOR_HH_ */