1
0
Files
irix-657m-src/eoe/cmd/pcp/pmrun/RunFormUI.h
2022-09-29 17:59:04 +03:00

227 lines
6.3 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.
//
#ifndef RUNFORMUI_H
#define RUNFORMUI_H
#include <Vk/VkComponent.h>
#include "FlagList.h"
class VkOptionMenu;
class VkMenuAction;
class VkMenuToggle;
class VkMenuItem;
class ComboHostFinder; // black magic here - gets around two problems:
class ComboPathFinder; // IMD vs. oz libs & overlapped drop sites (see below)
class RunFormUI : public VkComponent
{
public:
RunFormUI(const char *name,
Widget parent,
char *host,
char *archive,
double delta,
const char *start,
const char *end,
int numspecs,
const char **specs);
virtual ~RunFormUI();
void create(Widget);
const char *className();
protected:
ComboHostFinder *_host;
ComboPathFinder *_path;
// Widgets created by this class
Widget _runForm;
Widget _archiveToggle;
Widget _hostToggle;
Widget _intervalText;
Widget _startText;
Widget _endText;
Widget _cmdText;
Widget _argsText;
Widget _separator;
VkOptionMenu *_timeMenu;
VkMenuItem *_msec;
VkMenuItem *_sec;
VkMenuItem *_min;
VkMenuItem *_hour;
VkMenuItem *_day;
VkMenuItem *_week;
Boolean _hostflag;
Boolean _archiveflag;
Boolean _deltaflag;
Boolean _startflag;
Boolean _endflag;
double _delta;
char *_runProgram;
int _speccount;
char **_specs;
FlagList _flags;
#define BUF_SIZE 2048
char buf[BUF_SIZE];
int hostset;
void showInterval();
void setInterval();
char *stripwhite(char *);
virtual void intervalUnitsActivate(Widget, XtPointer);
virtual void intervalTextLosingFocus(Widget, XtPointer);
virtual void toggleValueChanged(Widget, XtPointer);
// updates start & end times if required ...
void archiveNameChanged(VkComponent *, void *, void *);
private:
// Array of default resources
static String _defaultRunFormUIResources[];
void createSpecs();
char *getSpecToken(const char *, int *);
static void intervalUnitsActivateCallback(Widget, XtPointer, XtPointer);
static void intervalTextLosingFocusCallback(Widget, XtPointer, XtPointer);
static void toggleValueChangedCallback(Widget, XtPointer, XtPointer);
};
//
// ComboHostFinder & ComboIconFinder justification ...
//
// All code differences between IMD & oz desktop libraries are hidden
// away in these two classes (conditional compilation).
//
// Because we are using the same screen real estate for BOTH the host
// and the archive drop sites, only one is successfully registered
// as a drop site (host). This means that whenever the toggle button
// is switched, we have to unregister one of the drop sites & then
// register the other for the one which wasn't successfully registered
// to allow drops at all on this second site.
// This has to be done mainly through Motif, since the desktop stuff
// doesn't really support what we're doing here. They do give access
// to the drop site widgets, so we get away with this because we know
// what happens in registerDropSite() in both of the desktop libraries.
//
#include <Xm/DragDrop.h>
#ifdef PMRUN_NO_IMD // PMRUN_NO_IMD comes in via the command line
#include <oz/HostFinder.h>
#include <oz/PathFinder.h>
class ComboHostFinder : public HostFinder
{
public:
ComboHostFinder(const char *name, Widget base)
: HostFinder(name, base) { }
void enableDrop()
{ _dropPocket->registerDropSite(); }
void disableDrop()
{ XmDropSiteUnregister(_dropPocket->getIconWidget()); }
void updateContent(char *contents)
{ setName(contents); }
char *fetchContent()
{ return strdup(getName()); }
void giveMeFocus()
{ traverseCurrent(); }
};
class ComboPathFinder : public PathFinder
{
public:
ComboPathFinder(const char *name, Widget base)
: PathFinder(name, base) { }
void enableDrop()
{ _dropPocket->registerDropSite(); }
void disableDrop()
{ XmDropSiteUnregister(_dropPocket->getIconWidget()); }
void updateContent(char *contents)
{ setName(contents); }
char *fetchContent()
{ return strdup(getName()); }
void giveMeFocus()
{ traverseCurrent(); }
void drop(IconData *);
};
#else
#include <imd/HostFinder.h>
#include <imd/ModelFinder.h>
enum DropState {PMRUN_ENABLE_DROP, PMRUN_DISABLE_DROP};
void updateDropSite(Widget, enum DropState);
class ComboHostFinder : public ImdHostFinder
{
public:
ComboHostFinder(const char *name, Widget base)
: ImdHostFinder(name, base) { }
void enableDrop()
{ updateDropSite(baseWidget(), PMRUN_ENABLE_DROP); }
void disableDrop()
{ updateDropSite(baseWidget(), PMRUN_DISABLE_DROP); }
void updateContent(char *contents)
{ setContent((ImdString)contents); }
char *fetchContent()
{ return strdup(getContent().writableCharPtr()); }
void giveMeFocus() { }
};
class ComboPathFinder : public ImdViewerFinder
{
public:
ComboPathFinder(const char *name, Widget base)
: ImdViewerFinder((ImdString)name, base) { }
void enableDrop()
{ updateDropSite(baseWidget(), PMRUN_ENABLE_DROP); }
void disableDrop()
{ updateDropSite(baseWidget(), PMRUN_DISABLE_DROP); }
void updateContent(char *contents)
{ setContent((ImdString)contents); }
char *fetchContent()
{ return strdup(getContent().writableCharPtr()); }
void giveMeFocus() { }
void handleDropDNA(const ImdDNA& droppedDNA);
};
#endif // ifndef PMRUN_NO_IMD
#endif // ifndef RUNFORMUI_H