changed units labeling to match type of data being displayed
[dyninst.git] / visiClients / tableVisi / src / tableVisi.h
1 // tableVisi.h
2 // Ariel Tamches
3
4 /*
5  * $Log: tableVisi.h,v $
6  * Revision 1.3  1995/12/03 21:09:27  newhall
7  * changed units labeling to match type of data being displayed
8  *
9  * Revision 1.2  1995/11/08  21:47:04  tamches
10  * removed some unused members
11  *
12  * Revision 1.1  1995/11/04 00:45:19  tamches
13  * First version of new table visi
14  *
15  */
16
17 #ifndef _TABLE_VISI_H_
18 #define _TABLE_VISI_H_
19
20 #include "String.h"
21 #include "Vector.h"
22 #include "minmax.h"
23
24 #include "tclclean.h"
25 #include "tkclean.h"
26 #include "tkTools.h"
27
28 #include "tvMetric.h"
29 #include "tvFocus.h"
30 #include "tvCell.h"
31
32 class tableVisi {
33  private:
34    vector<tvMetric> metrics;
35    vector<tvFocus> foci;
36    vector<unsigned> indirectMetrics; // for sorting
37    vector<unsigned> indirectFoci; // for sorting
38    vector< vector<tvCell> > cells; // array[metrics] of array[foci]
39    bool focusLongNameMode;
40    unsigned numSigFigs;
41
42    Tk_Window theTkWindow;
43    Display *theDisplay; // needed only in the destructor
44    Pixmap offscreenPixmap;
45    XColor *backgroundColor; // for erasing the offscreen pixmap
46    GC backgroundGC; // same...
47
48    int offset_x, offset_y;
49    int all_cells_width, all_cells_height; // # pixels needed in horiz, vert sb's
50
51    XFontStruct *metricNameFont, *metricUnitsFont, *focusNameFont, *cellFont;
52    unsigned maxFocusNamePixWidth; // max of foci[].getNamePixWidth()
53
54    XColor *lineColor; GC lineColorGC;
55    XColor *metricNameColor; GC metricNameGC;
56    XColor *metricUnitsColor; GC metricUnitsGC;
57    XColor *focusNameColor; GC focusNameGC;
58    XColor *cellColor; GC cellGC;
59
60  private:
61
62    void double2string(char *, double) const;
63
64    XFontStruct *myXLoadQueryFont(const string &fontName) const;
65    XColor *myTkGetColor(Tcl_Interp *, const string &colorName) const;
66    void resizeScrollbars(Tcl_Interp *);
67    bool adjustHorizSBOffset(Tcl_Interp *interp);
68    bool adjustVertSBOffset(Tcl_Interp *interp);
69
70    // private metric helper functions
71    void drawMetricNames(Drawable) const;
72    void drawMetricVertLine(Drawable, int x) const;
73    unsigned getMetricAreaPixHeight() const;
74    unsigned getMetricNameBaseline() const; // assumes 0 is top y coord of metric area
75    unsigned getMetricUnitsBaseline() const; // assumes 0 is top y coord of metric area
76
77    // private focus helper functions
78    void drawFocusNames(Drawable) const;
79    void drawFocusHorizLine(Drawable, int y) const;
80    unsigned getFocusLinePixHeight() const;
81    unsigned getVertPixFocusTop2Baseline() const;
82    unsigned getHorizPixBeforeFocusName() const {return 3;}
83    unsigned getFocusAreaPixWidth() const;
84
85    // private cell helper functions
86    void drawCells(Drawable) const;
87    void drawCells1Col(Drawable, int middle_x, int top_y,
88                       const vector<tvCell> &thisMetricCells) const;
89    unsigned getVertPixCellTop2Baseline() const;
90
91    // helper functions for sorting
92    void sortMetrics(int left, int right);
93    int partitionMetrics(int left, int right);
94
95    void sortFoci(int left, int right);
96    int partitionFoci(int left, int right);
97
98  public:
99    tableVisi(Tcl_Interp *interp,
100              Tk_Window iTkWindow,
101              const string &metricNameFontName,
102              const string &metricUnitsFontName,
103              const string &focusFontName,
104              const string &cellFontName,
105              const string &iLineColorName,
106              const string &iMetricColorName,
107              const string &iMetricUnitsColorName,
108              const string &iFocusColorName,
109              const string &cellColorName,
110              const string &backgroundColorName,
111              unsigned iSigFigs
112              );
113   ~tableVisi();
114
115    bool tryFirst();
116    void resize(Tcl_Interp *); // does not redraw
117
118    void draw(bool xsynch) const;
119
120    unsigned getNumMetrics() const {return metrics.size();}
121    unsigned getNumFoci()    const {return foci.size();}
122
123    void clearMetrics(Tcl_Interp *interp);
124    void clearFoci(Tcl_Interp *interp);
125
126    void addMetric(const string &metricName, const string &metricUnits);
127    void addFocus(const string &focusName);
128    void changeUnitsLabel(u_int which, const char *new_name);
129
130    void sortMetrics();
131    void unsortMetrics();
132
133    void sortFoci();
134    void unsortFoci();
135
136    bool setFocusNameMode(Tcl_Interp *interp, bool longNameMode);
137       // returns true iff any changes
138
139    bool setSigFigs(unsigned);
140       // returns true iff any changes
141
142    void invalidateCell(unsigned theMetric, unsigned theFocus);
143    void setCellValidData(unsigned theMetric, unsigned theFocus, double data);
144
145    int get_offset_x() const {return offset_y;}
146    int get_offset_y() const {return offset_y;}
147
148    int get_total_cell_x_pix() const {return all_cells_width;}
149    int get_total_cell_y_pix() const {return all_cells_height;}
150
151    int get_visible_x_pix() const {return Tk_Width(theTkWindow);}
152    int get_visible_y_pix() const {return Tk_Height(theTkWindow);}
153
154    bool adjustHorizSBOffset(Tcl_Interp *, float newFirst);
155    bool adjustVertSBOffset(Tcl_Interp *, float newFirst);
156 };
157
158 #endif