removed warnings under g++ 2.7.0
[dyninst.git] / visiClients / barchart / src / barChartTcl.C
1 // barChartTcl.C
2
3 /* $Log: barChartTcl.C,v $
4 /* Revision 1.8  1995/09/22 19:25:29  tamches
5 /* removed warnings under g++ 2.7.0
6 /*
7  * Revision 1.7  1994/11/06  10:24:59  tamches
8  * minor cleanups (especially comments)
9  *
10  * Revision 1.6  1994/10/14  10:29:33  tamches
11  * commented out diagnosted message when gracefully closing
12  *
13  * Revision 1.5  1994/10/13  00:52:38  tamches
14  * Minor additions to support a new command related to sorting
15  * of resources
16  *
17  * Revision 1.4  1994/10/10  23:08:44  tamches
18  * preliminary changes on the way to swapping the x and y axes
19  *
20  * Revision 1.3  1994/10/10  14:36:17  tamches
21  * fixed some resizing bugs
22  *
23  * Revision 1.2  1994/09/29  20:05:37  tamches
24  * minor cvs fixes
25  *
26  * Revision 1.1  1994/09/29  19:51:38  tamches
27  * initial implementation.
28  * Receiving point for visi lib callback routines.  Pretty much
29  * just calls the appropriate class member function in barChart.C
30  *
31 */
32
33 #include <iostream.h>
34
35 #include <tcl.h>
36 #include <tk.h>
37 #include "dg2.h" // for dataGrid[][]
38 #include "visi/h/visualization.h"
39 #include "barChart.h"
40
41 bool barChartIsValid = false;
42    // set to true ** after ** barChart::barChart
43    // until then, callbacks check this flag and do nothing
44
45 int Dg2NewDataCallback(int lastBucket) {
46    if (barChartIsValid) {
47       theBarChart->processNewData(lastBucket);
48       return TCL_OK;
49    }
50    else
51       return TCL_ERROR;
52 }
53
54 int resizeCallbackCommand(ClientData, Tcl_Interp *, int argc, char **argv) {
55    // called from barChart.tcl when it detects a resize; gives our C++ code
56    // a chance to process the resize, too.
57
58    // params: new width, new height
59    if (barChartIsValid && argc==3) {
60       theBarChart->processResizeWindow(atoi(argv[1]), atoi(argv[2]));
61       return TCL_OK;
62    }
63    else
64       return TCL_ERROR;
65 }
66
67 int exposeCallbackCommand(ClientData, Tcl_Interp *, int, char **) {
68    // called from barChart.tcl when it detects an expose; gives our C++ code
69    // a chance to process the expose, too.
70
71    if (barChartIsValid) {
72       theBarChart->processExposeWindow();
73       return TCL_OK;
74    }
75    else
76       return TCL_ERROR;
77 }
78
79 int resourcesAxisHasChangedCommand(ClientData, Tcl_Interp *, int argc, char **) {
80    // called from barChart.tcl when the x-axis layout has changed due to resize,
81    // insertion/deletion, etc; gives our C++ code a chance to update its
82    // internal structures.
83
84    // arg: new width
85
86    if (barChartIsValid && argc==2) {
87       theBarChart->RethinkMetricsAndResources();
88
89       return TCL_OK;
90    }
91    else
92       return TCL_ERROR;
93 }
94
95 int metricsAxisHasChangedCommand(ClientData, Tcl_Interp *, int argc, char **) {
96    // called from barChart.tcl when the y-axis layout has changed due to resize,
97    // insertion/deletion, etc; gives our C++ code a chance to update its
98    // internal structures.
99
100    // argument: new height
101
102    if (barChartIsValid && argc==2) {
103       theBarChart->RethinkMetricsAndResources();
104
105       return TCL_OK;
106    }
107    else
108       return TCL_ERROR;
109 }
110
111 int newScrollPositionCommand(ClientData, Tcl_Interp *, int, char **argv) {
112    // called by tcl code when it's time to scroll the bars to a given value
113    if (barChartIsValid) {
114       int newPos = atoi(argv[1]);
115
116       theBarChart->processNewScrollPosition(newPos);
117       return TCL_OK;
118    }
119    else
120       return TCL_ERROR;
121 }
122
123 int dataFormatHasChangedCommand(ClientData, Tcl_Interp *, int, char **) {
124    if (barChartIsValid) {
125       theBarChart->rethinkDataFormat();
126       return TCL_OK;
127    }
128    else
129       return TCL_ERROR;
130 }
131
132 int rethinkIndirectResourcesCommand(ClientData, Tcl_Interp *, int, char **) {
133    if (barChartIsValid) {
134       theBarChart->rethinkIndirectResources();
135       return TCL_OK;
136    }
137    else
138       return TCL_ERROR;
139 }
140
141 int launchBarChartCommand(ClientData, Tcl_Interp *, int argc, char **argv) {
142    // called just once to fix some information needed by drawBarsCommand, especially
143    // the (sub-)window in which to draw.
144
145    // parameters:
146    // 1) window name (tk-style; e.g. ".top.middle.bar") of the area in which the bars are drawn
147    // 2) do you want double-buffering? ("doublebuffer" or "nodoublebuffer")
148    // 3) do you want no-flicker?       ("noflicker" or "flicker")
149    //       [you automatically get noflicker with doublebuffer]
150    // 4) initial numMetrics
151    // 5) initial numResources
152    // 6) flush flag (0 or 1); use 1 during debugging only
153
154    // cout << "Welcome to launchBarChartCommand()" << endl;
155    
156    if (argc != 7)
157       panic("launchBarChartCommand() -- cannot create barchart (incorrect #args)");
158
159    char *wname = argv[1];
160    const int iNumMetrics   = atoi(argv[4]);
161    const int iNumResources = atoi(argv[5]);
162 //   const bool iFlushFlag = (0==strcmp("1", argv[6]));
163
164    theBarChart = new BarChart(wname,
165                               iNumMetrics, iNumResources);
166    if (theBarChart == NULL)
167       panic("launchBarChartCommand() -- out of memory!");
168
169    barChartIsValid = true;
170    return TCL_OK;
171 }
172
173 void deleteLaunchBarChartCommand(ClientData) {
174    // cout << "Gracefully closing down barchart..." << endl;
175
176    barChartIsValid = false; // important!
177    delete theBarChart;
178 }
179
180 void deleteDummyProc(ClientData) { }
181    // do-nothing routine to be called when a command is deleted that
182    // doesn't require closing down...