1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
/*
* XMPI
* Copyright 1997 The Ohio State University
* NJN
*
* $Id: xmpi_tr_segment.c,v 1.2 1999/08/17 03:11:13 lamteam Exp $
*
* Function: - select and view a trace segment
*/
#include <Xm/SelectioB.h>
#include "xmpi.h"
/*
* global functions
*/
void xmpi_tr_select_segment();
/*
* external functions
*/
extern int xmpi_db_parse_segment();
extern void xmpi_db_view();
/*
* private functions
*/
static void selcancel_cb();
static void selseg_cb();
/*
* xmpi_tr_select_segment
*
* Function: - select, parse and view a trace segment
* Accepts: - maximum segment number
*/
void
xmpi_tr_select_segment(maxseg)
int maxseg;
{
Widget dialog_w; /* dialog to select segment */
XmString str1, str2; /* various strings */
Arg args[3];
char buf[32]; /* formatting buffer */
/*
* If there is only a single segment then no selection is necessary.
*/
if (maxseg == 1) {
if (xmpi_db_parse_segment(0)) {
xmpi_db_free();
xmpi_ctl_resetinfo();
} else {
xmpi_db_view();
}
xmpi_unbusy();
return;
}
/*
* Pop up a dialog to choose a segment number. The OK callback will
* parse and view the selected segment.
*/
sprintf(buf, "Enter segment to display (0-%d)", maxseg - 1);
str1 = XmStringCreateSimple(buf);
str2 = XmStringCreateSimple("0");
XtSetArg(args[0], XmNselectionLabelString, str1);
XtSetArg(args[1], XmNautoUnmanage, False);
XtSetArg(args[2], XmNtextString, str2);
dialog_w = XmCreatePromptDialog(xmpi_shell, "prompt_pop", args, 3);
XmStringFree(str1);
XmStringFree(str2);
XtAddCallback(dialog_w, XmNokCallback, selseg_cb, NULL);
XtAddCallback(dialog_w, XmNcancelCallback, selcancel_cb, NULL);
XtSetSensitive(XmSelectionBoxGetChild(dialog_w, XmDIALOG_HELP_BUTTON),
False);
XtManageChild(dialog_w);
XtPopup(XtParent(dialog_w), XtGrabNone);
}
/*
* selseg_cb
*
* Function: - segment selection callback, parses and views
* the selected segment
* Accepts: - callback parms
*/
static void
selseg_cb(w, cdata, cbs)
Widget w;
XtPointer cdata;
XmSelectionBoxCallbackStruct
*cbs;
{
char *s;
int segment; /* segment number */
XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &s);
segment = (s && *s) ? stoi((unsigned char *)s) : 0;
XtFree(s);
XtDestroyWidget(w);
if (xmpi_db_parse_segment(segment)) {
xmpi_db_free();
xmpi_ctl_resetinfo();
} else {
xmpi_db_view();
}
xmpi_unbusy();
}
/*
* selcancel_cb
*
* Function: - segment selection cancel callback
* Accepts: - callback parms
*/
static void
selcancel_cb(w, cdata, cbs)
Widget w;
XtPointer cdata;
XmSelectionBoxCallbackStruct
*cbs;
{
xmpi_ctl_resetinfo();
XtDestroyWidget(w);
}
|