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