CARMA C++
MonitorTable.h
1 #ifndef CARMA_UI_RTD_MONITORTABLE_H
2 #define CARMA_UI_RTD_MONITORTABLE_H
3 
4 
5 /*
6  * @file
7  *
8  * Create a table to include in a MonitorDisplay.
9  *
10  * @author Steve Scott
11  * $id: $
12  *
13  * $CarmaCopyright$
14  *
15  */
16 
17 
18 #include <vector>
19 #include <boost/shared_ptr.hpp>
20 
21 #include <carma/ui/rtd/common/RtDisplay.h>
22 
23 
24 namespace carma {
25 
26 
27 namespace monitor {
28 
29 class MonitorContainer;
30 class MonitorPoint;
31 
32 } // namespace carma::monitor
33 
34 
35 namespace ui {
36 namespace rtd {
37 
38 
43 const int AUTO_SIZE = 0;
44 
49 const int AUTO_SIZE_EACH_COLUMN = -1;
50 
51 class MonitorTableVisitor;
52 typedef boost::shared_ptr<MonitorTableVisitor> MonitorTableVisitorPtr;
53 
54 struct MonitorColumnInfo {
55  ::std::string heading;
56  const monitor::MonitorContainer * container;
57 
58  MonitorColumnInfo( const ::std::string & inHeading,
59  const monitor::MonitorContainer & inContainer );
60 };
61 
62 class MonitorTable;
63 typedef boost::shared_ptr<MonitorTable> MonitorTablePtr;
64 
65 class MonitorTable : public RtTable {
66  public:
83  static MonitorTablePtr makeTable(
84  const ::std::vector<MonitorColumnInfo>& columns,
85  int columnWidth= AUTO_SIZE,
86  int hierarchyDepth=1,
87  int sampleNo=0,
88  bool unitsInRowLabels=true,
89  bool switchRowsAndColumns=false,
90  const MonitorTableVisitorPtr visitor=MonitorTableVisitorPtr(),
91  bool displayRowLabels=true);
92 
109  static MonitorTablePtr makeTable(
110  const MonitorColumnInfo& column,
111  int columnWidth= AUTO_SIZE,
112  int hierarchyDepth=1,
113  int sampleNo=0,
114  bool unitsInRowLabels=true,
115  bool switchRowsAndColumns=false,
116  const MonitorTableVisitorPtr visitor=MonitorTableVisitorPtr(),
117  const bool displayRowLabels=true);
118 
135  static MonitorTablePtr makeTable(
136  const ::std::string& heading,
137  const monitor::MonitorContainer& container,
138  int columnWidth = AUTO_SIZE,
139  int hierarchyDepth=1,
140  int sampleNo=0,
141  bool unitsInRowLabels=true,
142  bool switchRowsAndColumns=false,
143  const MonitorTableVisitorPtr visitor=MonitorTableVisitorPtr(),
144  const bool displayRowLabels=true);
145 
162  static MonitorTablePtr makeTable(
163  const std::vector<std::string>& headings,
164  const std::vector<const monitor::MonitorContainer*>& containers,
165  int columnWidth = AUTO_SIZE,
166  int hierarchyDepth =1,
167  int sampleNo = 0,
168  bool unitsInRowLabels=true,
169  bool switchRowsAndColumns=false,
170  const MonitorTableVisitorPtr visitor=MonitorTableVisitorPtr(),
171  bool displayRowLabels=true);
172 
189  static MonitorTablePtr makeTable(
190  const std::vector< std::string >& headings,
191  const std::vector<monitor::MonitorContainer*>& containers,
192  int columnWidth=AUTO_SIZE,
193  int hierarchyDepth=1,
194  int sampleNo=0,
195  bool unitsInRowLabels=true,
196  bool switchRowsAndColumns=false,
197  const MonitorTableVisitorPtr visitor=MonitorTableVisitorPtr(),
198  bool displayRowLabels=true);
199 
200  virtual ~MonitorTable();
201 
212  static int autoFitColumnWidth(
213  const ::std::vector< const monitor::MonitorContainer * > & containers,
214  int levels,
215  int minWidth,
216  const MonitorTableVisitorPtr visitor );
217 
228  static int autoFitColumnWidth(
229  const monitor::MonitorContainer & container,
230  int levels,
231  int minWidth,
232  const MonitorTableVisitorPtr visitor );
233 
244  static int autoFitColumnWidth(
245  const ::std::vector< monitor::MonitorContainer * > & containers,
246  int levels,
247  int minWidth,
248  const MonitorTableVisitorPtr visitor );
249 
260  static int autoFitColumnWidth(
261  const ::std::vector< MonitorColumnInfo > & columns,
262  int levels,
263  int minWidth,
264  const MonitorTableVisitorPtr visitor );
265 
276  static int autoFitColumnWidth(
277  const MonitorColumnInfo & column,
278  int levels,
279  int minWidth,
280  const MonitorTableVisitorPtr visitor );
281 
282  static ::std::string
283  generateRowLabel( const monitor::MonitorPoint & mp,
284  bool showUnits );
285 
286  protected:
303  MonitorTable(
304  const std::vector<MonitorColumnInfo>& columns,
305  int columnWidth,
306  int hierarchyDepth,
307  int sampleNo,
308  bool unitsInRowLabels,
309  bool switchRowsAndColumns,
310  const MonitorTableVisitorPtr visitor,
311  bool displayRowLabels);
312 
313  private:
314  static ::std::vector< int > getWidths(
315  const monitor::MonitorContainer & container,
316  int levels,
317  int minWidth,
318  const MonitorTableVisitorPtr visitor );
319 
320  void addRowLabels(const monitor::MonitorContainer& container,
321  bool unitsInRowLabels,
322  bool switchRowsAndColumns,
323  const MonitorTableVisitorPtr visitor,
324  const bool displayRowLabels);
325 
326  void addContainerMonitorPoints(
327  const monitor::MonitorContainer & container,
328  const MonitorTableVisitorPtr visitor,
329  const int defaultWidth,
330  const ::std::vector< int > & individualWidths );
331 
332  const int hierarchyDepth_;
333  const int sampleNo_;
334 };
335 
336 
337 } // namespace carma::ui::rtd
338 } // namespace carma::ui
339 
340 
341 } // namespace carma
342 
343 
344 #endif
const int AUTO_SIZE
Indicate to MonitorSingleTableFolder that we want column widths to be automatically calculated with a...
Definition: MonitorTable.h:43
const int AUTO_SIZE_EACH_COLUMN
Indicate to MonitorSingleTableFolder that we want column widths to be automatically calculated with e...
Definition: MonitorTable.h:49
Abstract base class for a monitor point.
Definition: MonitorPoint.h:68
A generic monitor system container base class.