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