387 lines
15 KiB
C++
387 lines
15 KiB
C++
/*
|
|
* Copyright 1997, Silicon Graphics, Inc.
|
|
* ALL RIGHTS RESERVED
|
|
*
|
|
* UNPUBLISHED -- Rights reserved under the copyright laws of the United
|
|
* States. Use of a copyright notice is precautionary only and does not
|
|
* imply publication or disclosure.
|
|
*
|
|
* U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
|
|
* Use, duplication or disclosure by the Government is subject to restrictions
|
|
* as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
|
|
* in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
|
|
* in similar or successor clauses in the FAR, or the DOD or NASA FAR
|
|
* Supplement. Contractor/manufacturer is Silicon Graphics, Inc.,
|
|
* 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
|
|
*
|
|
* THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
|
|
* INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
|
|
* DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
|
|
* PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
|
|
* GRAPHICS, INC.
|
|
*/
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
//
|
|
// Source file for LiveTimeFormUI
|
|
//
|
|
// $Id: LiveTimeFormUI.c++,v 1.6 1999/04/30 01:44:04 kenmcd Exp $
|
|
//
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "pmapi.h"
|
|
#include "impl.h"
|
|
#include "LiveTimeFormUI.h"
|
|
|
|
#include <Xm/DrawnB.h>
|
|
#include <Xm/Form.h>
|
|
#include <Xm/LabelG.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Vk/VkResource.h>
|
|
#include <Vk/VkOptionMenu.h>
|
|
#include <Vk/VkMenuItem.h>
|
|
|
|
#ifdef IRIX5_3
|
|
#include "VkPixmap.h"
|
|
#else
|
|
#include <Vk/VkPixmap.h>
|
|
#endif
|
|
|
|
#include "pixmaps.h" // constant and pixmap descriptions
|
|
|
|
|
|
// These are default resources for widgets in objects of this class
|
|
// All resources will be prepended by *<name> at instantiation,
|
|
// where <name> is the name of the specific instance, as well as the
|
|
// name of the baseWidget. These are only defaults, and may be overriden
|
|
// in a resource file by providing a more specific resource name
|
|
|
|
String LiveTimeFormUI::_defaultLiveTimeFormUIResources[] = {
|
|
"*realtimeLabel.labelString: Real Time Controls: ",
|
|
"*timeLabel.labelString: Time",
|
|
"*unitsOption.labelString: ",
|
|
"*intervalUnitsMilliseconds.labelString: Milliseconds",
|
|
"*intervalUnitsSeconds.labelString: Seconds",
|
|
"*intervalUnitsMinutes.labelString: Minutes",
|
|
"*intervalUnitsHours.labelString: Hours",
|
|
"*intervalUnitsDays.labelString: Days",
|
|
"*intervalUnitsWeeks.labelString: Weeks",
|
|
"*intervalLabel.labelString: Interval",
|
|
(char*)NULL
|
|
};
|
|
|
|
LiveTimeFormUI::LiveTimeFormUI(const char *name) : VkComponent(name)
|
|
{
|
|
// No widgets are created by this constructor.
|
|
// If an application creates a component using this constructor,
|
|
// It must explictly call create at a later time.
|
|
// This is mostly useful when adding pre-widget creation
|
|
// code to a derived class constructor.
|
|
|
|
}
|
|
|
|
LiveTimeFormUI::LiveTimeFormUI(const char *name, Widget parent) : VkComponent(name)
|
|
{
|
|
// Call creation function to build the widget tree.
|
|
create(parent);
|
|
|
|
}
|
|
|
|
LiveTimeFormUI::~LiveTimeFormUI()
|
|
{
|
|
}
|
|
|
|
|
|
void
|
|
LiveTimeFormUI::create(Widget parent)
|
|
{
|
|
Arg args[32];
|
|
Cardinal count;
|
|
|
|
// Load any class-defaulted resources for this object
|
|
setDefaultResources(parent, _defaultLiveTimeFormUIResources);
|
|
|
|
#ifdef PCP_PROFILE
|
|
__pmEventTrace("start widgets");
|
|
#endif
|
|
|
|
// Create an unmanaged widget as the top of the widget hierarchy
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNresizePolicy, XmRESIZE_GROW); count++;
|
|
_baseWidget = _liveTimeForm = XtCreateWidget(_name,
|
|
xmFormWidgetClass, parent, args, count);
|
|
|
|
// install a callback to guard against unexpected widget destruction
|
|
installDestroyHandler();
|
|
|
|
// Create widgets used in this component
|
|
// All variables are data members of this class
|
|
|
|
_unitsOption = new VkOptionMenu(_baseWidget);
|
|
_intervalUnitsMilliseconds = _unitsOption->addAction(
|
|
"intervalUnitsMilliseconds",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
_intervalUnitsSeconds = _unitsOption->addAction(
|
|
"intervalUnitsSeconds",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
_intervalUnitsMinutes = _unitsOption->addAction(
|
|
"intervalUnitsMinutes",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
_intervalUnitsHours = _unitsOption->addAction(
|
|
"intervalUnitsHours",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
_intervalUnitsDays = _unitsOption->addAction(
|
|
"intervalUnitsDays",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
_intervalUnitsWeeks = _unitsOption->addAction(
|
|
"intervalUnitsWeeks",
|
|
&LiveTimeFormUI::intervalUnitsActivateCallback, (XtPointer) this);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNrightAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNrightOffset, 4); count++;
|
|
XtSetArg(args[count], XmNwidth, 161); count++;
|
|
XtSetArg(args[count], XmNheight, 32); count++;
|
|
XtSetValues(_unitsOption->baseWidget(), args, count);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNrightAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 70); count++;
|
|
XtSetArg(args[count], XmNrightOffset, 165); count++;
|
|
XtSetArg(args[count], XmNwidth, 94); count++;
|
|
_interval = XtCreateWidget("interval", xmTextFieldWidgetClass,
|
|
_baseWidget, args, count);
|
|
XtAddCallback(_interval, XmNactivateCallback,
|
|
&LiveTimeFormUI::intervalActivateCallback, (XtPointer) this);
|
|
XtAddCallback (_interval, XmNvalueChangedCallback,
|
|
&LiveTimeFormUI::intervalValueChangedCallback, (XtPointer) this);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNalignment, XmALIGNMENT_BEGINNING); count++;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 2); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 84); count++;
|
|
XtSetArg(args[count], XmNheight, 38); count++;
|
|
_intervalLabel = XmCreateLabelGadget(_baseWidget, "intervalLabel", args, count);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNtopWidget, _interval); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNrightAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNtopPosition, 0); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 70); count++;
|
|
XtSetArg(args[count], XmNrightOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 254); count++;
|
|
XtSetArg(args[count], XmNeditable, False); count++;
|
|
XtSetArg(args[count], XmNtraversalOn, False); count++;
|
|
XtSetArg(args[count], XmNcursorPositionVisible, False); count++;
|
|
_position = XtCreateWidget("position", xmTextFieldWidgetClass,
|
|
_baseWidget, args, count);
|
|
Pixel readonlybg = (Pixel) VkGetResource(_position,
|
|
"readOnlyBackground", "ReadOnlyBackground", XmRPixel, "Gray72");
|
|
Pixel readonlyfg = (Pixel) VkGetResource(_position,
|
|
"readOnlyForeground", "ReadOnlyForeground", XmRPixel, "Black");
|
|
count = 0;
|
|
XtSetArg(args[count], XmNbackground, readonlybg); count++;
|
|
XtSetArg(args[count], XmNforeground, readonlyfg); count++;
|
|
XtSetValues(_position, args, count);
|
|
XtAddCallback(_position, XmNactivateCallback,
|
|
&LiveTimeFormUI::positionActivateCallback, (XtPointer) this);
|
|
XtAddCallback(_position, XmNvalueChangedCallback,
|
|
&LiveTimeFormUI::positionValueChangedCallback, (XtPointer) this);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNalignment, XmALIGNMENT_BEGINNING); count++;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNtopWidget, _interval); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNtopPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 40); count++;
|
|
XtSetArg(args[count], XmNheight, 30); count++;
|
|
_timeLabel = XmCreateLabelGadget(_baseWidget, "timeLabel", args, count);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNalignment, XmALIGNMENT_BEGINNING); count++;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNtopWidget, _position); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNtopPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 17); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 145); count++;
|
|
XtSetArg(args[count], XmNheight, 20); count++;
|
|
_realtimeLabel = XmCreateLabelGadget(_baseWidget, "realtimeLabel", args, count);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNlabelType, XmPIXMAP); count++;
|
|
XtSetArg(args[count], XmNpushButtonEnabled, True); count++;
|
|
XtSetArg(args[count], XmNshadowType, XmSHADOW_OUT); count++;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNtopWidget, _position); count++;
|
|
XtSetArg(args[count], XmNrightAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNtopPosition, 0); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNrightOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 63); count++;
|
|
XtSetArg(args[count], XmNheight, 52); count++;
|
|
_vcrForward = XtCreateWidget("vcrForward", xmDrawnButtonWidgetClass,
|
|
_baseWidget, args, count);
|
|
XtAddCallback(_vcrForward, XmNactivateCallback,
|
|
&LiveTimeFormUI::vcrActivateCallback, (XtPointer) this);
|
|
|
|
count = 0;
|
|
XtSetArg(args[count], XmNlabelType, XmPIXMAP); count++;
|
|
XtSetArg(args[count], XmNpushButtonEnabled, True); count++;
|
|
XtSetArg(args[count], XmNshadowType, XmSHADOW_OUT); count++;
|
|
XtSetArg(args[count], XmNtopAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNtopWidget, _position); count++;
|
|
XtSetArg(args[count], XmNleftAttachment, XmATTACH_FORM); count++;
|
|
XtSetArg(args[count], XmNrightAttachment, XmATTACH_WIDGET); count++;
|
|
XtSetArg(args[count], XmNrightWidget, _vcrForward); count++;
|
|
XtSetArg(args[count], XmNtopPosition, 0); count++;
|
|
XtSetArg(args[count], XmNleftPosition, 0); count++;
|
|
XtSetArg(args[count], XmNrightPosition, 0); count++;
|
|
XtSetArg(args[count], XmNtopOffset, 5); count++;
|
|
XtSetArg(args[count], XmNleftOffset, 193); count++;
|
|
XtSetArg(args[count], XmNrightOffset, 5); count++;
|
|
XtSetArg(args[count], XmNwidth, 63); count++;
|
|
XtSetArg(args[count], XmNheight, 52); count++;
|
|
_vcrStop = XtCreateWidget("vcrStop", xmDrawnButtonWidgetClass,
|
|
_baseWidget, args, count);
|
|
XtAddCallback(_vcrStop, XmNactivateCallback,
|
|
&LiveTimeFormUI::vcrActivateCallback, (XtPointer) this);
|
|
|
|
#define FORM_CHILDREN 7
|
|
XtManageChildren(&_interval, FORM_CHILDREN);
|
|
|
|
#ifdef PCP_PROFILE
|
|
__pmEventTrace("end widgets");
|
|
#endif
|
|
}
|
|
|
|
const char *
|
|
LiveTimeFormUI::className()
|
|
{
|
|
return ("LiveTimeFormUI");
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// The following functions are static member functions used to
|
|
// interface with Motif.
|
|
///////////////////////////////////
|
|
|
|
void
|
|
LiveTimeFormUI::intervalActivateCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData)
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *)clientData;
|
|
obj->intervalActivate(w, callData);
|
|
}
|
|
|
|
void
|
|
LiveTimeFormUI::intervalUnitsActivateCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData)
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *)clientData;
|
|
obj->intervalUnitsActivate(w, callData);
|
|
}
|
|
|
|
void
|
|
LiveTimeFormUI::intervalValueChangedCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData )
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *)clientData;
|
|
obj->intervalValueChanged(w, callData);
|
|
}
|
|
|
|
void
|
|
LiveTimeFormUI::positionActivateCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData)
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *)clientData;
|
|
obj->positionActivate(w, callData);
|
|
}
|
|
|
|
void
|
|
LiveTimeFormUI::positionValueChangedCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData)
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *)clientData;
|
|
obj->positionValueChanged(w, callData);
|
|
}
|
|
|
|
void
|
|
LiveTimeFormUI::vcrActivateCallback(Widget w,
|
|
XtPointer clientData, XtPointer callData)
|
|
{
|
|
LiveTimeFormUI* obj = (LiveTimeFormUI *) clientData;
|
|
obj->vcrActivate(w, callData);
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// The following functions are called from the menu items
|
|
// in this window.
|
|
///////////////////////////////////
|
|
|
|
void LiveTimeFormUI::intervalActivate(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from intervalActivateCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|
|
void LiveTimeFormUI::intervalUnitsActivate(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from intervalUnitsActivateCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|
|
void LiveTimeFormUI::intervalValueChanged(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from intervalValueChangedCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|
|
void LiveTimeFormUI::positionActivate(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from positionActivateCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|
|
void LiveTimeFormUI::positionValueChanged(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from positionValueChangedCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|
|
void LiveTimeFormUI::vcrActivate(Widget, XtPointer)
|
|
{
|
|
// This virtual function is called from vcrActivateCallback.
|
|
// This function is normally overriden by a derived class.
|
|
}
|
|
|