added visiLibId
[dyninst.git] / visiClients / tableVisi / src / tvMetric.C
1 // tvMetric.C
2 // Ariel Tamches
3
4 /*
5  * $Log: tvMetric.C,v $
6  * Revision 1.3  1995/12/22 22:39:12  tamches
7  * added visiLibId
8  *
9  * Revision 1.2  1995/12/19 00:53:34  tamches
10  * new args to tvMetric; it calls changeNumSigFigs
11  * changeNumSigFigs written to update valuesPixWidth & numSigFigs
12  * getColPixWidth updated correspondingly
13  *
14  * Revision 1.1  1995/11/04 00:45:59  tamches
15  * First version of new table visi
16  *
17  */
18
19 #include "minmax.h"
20 #include "tvMetric.h"
21
22 tvMetric::tvMetric(unsigned iVisiLibId,
23                    const string &iName, const string &iUnitsName,
24                    XFontStruct *nameFontStruct, XFontStruct *unitsNameFontStruct,
25                    XFontStruct *valuesFontStruct,
26                    unsigned iNumSigFigs) :
27                       name(iName), unitsName(iUnitsName) {
28    visiLibId = iVisiLibId;
29    namePixWidth = XTextWidth(nameFontStruct, name.string_of(), name.length());
30    unitsPixWidth = XTextWidth(unitsNameFontStruct, iUnitsName.string_of(),
31                               iUnitsName.length());
32    changeNumSigFigs(iNumSigFigs, valuesFontStruct); // updates valuesPixWidth, too
33 }
34
35 void tvMetric::changeNumSigFigs(unsigned newNumSigFigs, XFontStruct *valuesFontStruct) {
36    numSigFigs = newNumSigFigs;
37    
38    // need to recalculate valuesPixWidth
39
40    // for values, include a decimal point and numSigFigs characters.
41    valuesPixWidth = XTextWidth(valuesFontStruct, ".", 1);
42    valuesPixWidth += numSigFigs * XTextWidth(valuesFontStruct, "0", 1); // a typical digit
43    valuesPixWidth += XTextWidth(valuesFontStruct, "0", 1);
44       // ... and a possible leading 0 not counted against the num of sig figs
45 }
46
47 unsigned tvMetric::getColPixWidth() const {
48    unsigned result = max(getNamePixWidth(), getUnitsPixWidth());
49
50    // now we must consider sig figs: the values themselves might be wider
51    // than "result" so far, which includes the labelling.
52    result = max(result, valuesPixWidth);
53
54    // Now add padding:
55    const unsigned horiz_padding_each_side = 3;
56    result += 2*horiz_padding_each_side;
57
58    return result;
59 }