1 /***********************************************************************/
2 /* Open Visualization Data Explorer                                    */
3 /* (C) Copyright IBM Corp. 1989,1999                                   */
4 /* ALL RIGHTS RESERVED                                                 */
5 /* This code licensed under the                                        */
6 /*    "IBM PUBLIC LICENSE - Open Visualization Data Explorer"          */
7 /***********************************************************************/
8 
9 #include <dxconfig.h>
10 #include "../base/defines.h"
11 
12 #ifndef _DXApplication_h
13 #define _DXApplication_h
14 
15 #include <Xm/Xm.h>
16 
17 #include "IBMApplication.h"
18 #include "List.h"
19 #include "Dictionary.h"
20 #include "DXExecCtl.h"
21 #include "License.h"
22 
23 class HelpWin;
24 class MsgWin;
25 class ImageWindow;
26 class ControlPanel;
27 
28 #define RECENT_NETS "recentNets"
29 
30 //
31 // Class name definition:
32 //
33 #define ClassDXApplication	"DXApplication"
34 
35 extern "C" int DXApplication_DXAfterFunction(Display *display);
36 
37 extern "C" void
38 #if defined(ALTERNATE_CXX_SIGNAL)
39 	DXApplication_HandleCoreDump(int dummy, ... );
40 #else
41 	DXApplication_HandleCoreDump(int dummy);
42 #endif
43 
44 typedef struct
45 {
46     //
47     // options and resources:
48     //
49     String	server;
50     String	executive;
51     String	workingDirectory;
52 
53     String	program;
54     String	cfgfile;
55     String	userModules;
56     String	macros;
57     String      errorPath;
58 
59     String	executiveModule;
60     String	uiModule;
61 
62     Boolean	noWindowPlacement;
63 
64     int		port;
65     int		memorySize;
66 
67     Boolean	echoVersion;
68     String	anchorMode;
69     Boolean	noAnchorAtStartup;
70     Boolean	noConfirmedQuit;
71     Boolean	debugMode;
72     Boolean	showInstanceNumbers;
73     Boolean	runUIOnly;
74     Boolean	runLocally;
75     Boolean	showHelpMessage;
76     Boolean	executeProgram;
77     Boolean	executeOnChange;
78     Boolean	suppressStartupWindows;
79     Boolean	isMetric;
80     Boolean	exitAfter;
81     Boolean	noExitOptions;
82     Boolean	noExecuteMenus;
83     Boolean	noConnectionMenus;
84     Boolean	noWindowsMenus;
85 
86     //
87     // Image window image saving/printing control
88     //
89     String	printImageFormat;
90     String	printImagePageSize;	// wxh in inches or cm (see isMetric)
91     int		printImageResolution;	// Dots per inch or cm (see isMetric)
92     String	printImageSize;		// "8" or "8x" or "x10" or "8x10"
93     String	printImageCommand;
94 
95     String	saveImageFormat;
96     String	saveImagePageSize;	// wxh in inches or cm (see isMetric)
97     int		saveImageResolution;	// Dots per inch or cm (see isMetric)
98     String	saveImageSize;		// "8", "8x", "x10" or "8x10" cm or "
99 
100     //
101     // Message Window control
102     //
103     Boolean	infoEnabled;
104     Boolean	warningEnabled;
105     Boolean	errorEnabled;
106     Boolean	moduleInfoOpensMessage;
107     Boolean	infoOpensMessage;
108     Boolean	warningOpensMessage;
109     Boolean	errorOpensMessage;
110 
111     //
112     // Configurability level
113     //
114     String	restrictionLevel;
115     Boolean	useWindowSpecs;
116     Boolean	noRWConfig;
117 
118     //
119     // Panel configurability
120     //
121     Boolean	noOpenAllPanels;
122     Boolean	noPanelEdit;
123     Boolean	noPanelAccess;
124     Boolean	noPanelOptions;
125 
126     //
127     // Interactor/panel  configurability
128     //
129     Boolean	noInteractorEdits;
130     Boolean	noInteractorAttributes;
131     Boolean	noInteractorMovement;
132 
133     //
134     // Image/Editor window configurability
135     //
136     Boolean	noImageMenus;
137     Boolean	noImageRWNetFile;
138     Boolean	limitedNetFileSelection;
139     String	netPath;
140     Boolean	noImageLoad;
141     Boolean	noEditorAccess;
142     Boolean	limitImageOptions;
143     Boolean	noImageSaving;
144     Boolean	noImagePrinting;
145     Boolean     notifySaveNet;
146     Boolean     noNetworkExecute;
147 
148     //
149     // Message window  configurability
150     //
151     Boolean	noScriptCommands;
152     Boolean	noMessageInfoOption;
153     Boolean	noMessageWarningOption;
154     Boolean	noEditorOnError;
155 
156     //
157     // ColormapEditor window configurability
158     //
159     Boolean	noCMapSetNameOption;
160     Boolean	noCMapOpenMap;
161     Boolean	noCMapSaveMap;
162 
163 
164     //
165     // Process group defining and host assignments.
166     //
167     Boolean	noPGroupAssignment;
168 
169     //
170     // Global configurability
171     //
172     Boolean	noDXHelp;
173 
174     String      cryptKey;       // Key used to decrypt the .net and .cfg files
175     Boolean     forceNetFileEncryption; // Do we force encryption
176     String      forceFunctionalLicense; // If non-null,
177 					// force the given license type
178     Pixel	errorNodeForeground;
179     Pixel	executionHighlightForeground;
180     Pixel	backgroundExecutionForeground;
181     Pixel	foreground;
182     Pixel	background;
183     Pixel       insensitiveColor;
184     Pixel       accentColor;
185     Pixel       standInBackground; // This one is shared.
186 
187     int		applicationPort;
188     String	applicationHost;
189 
190     String	oemApplicationName;	// Allow alternate app name if verified
191     String 	oemApplicationNameCode;	// Crypted app name for verification
192     String 	oemLicenseCode;		// Used to not require a license
193 
194     String	viewDataFile;		// Data file to use in viewer mode.
195 
196     Boolean 	autoScrollVPEInitVal;	// set to FALSE by default, provides an
197 					// initial value to EditorWorkSpace for
198 					// repositioning scrollbars during page changes.
199     String	cosmoDir;		// On behalf of java generation
200     String	jdkDir;
201     String	htmlDir;
202     String	dxJarFile;
203     String	userHtmlDir;
204     String	serverDir;
205 
206     //
207     // Automatic graph layout
208     //
209     int		autoLayoutHeight;
210     int		autoLayoutGroupSpacing;
211     int		autoLayoutNodeSpacing;
212 } DXResource;
213 
214 
215 //
216 // Referenced classes:
217 //
218 class Dictionary;
219 class DXWindow;
220 class Command;
221 class CommandScope;
222 class DXChild;
223 class DXPacketIF;
224 class ApplicIF;
225 class FileDialog;
226 class Network;
227 class StartServerDialog;
228 class LoadMacroDialog;
229 class LoadMDFDialog;
230 class OpenNetworkDialog;
231 class MsgWin;
232 class DebugWin;
233 class HelpWin;
234 class ProcessGroupAssignDialog;
235 class ProcessGroupManager;
236 class EditorWindow;
237 
238 struct DXServerInfo
239 {
240     int 	autoStart;
241     char       *server;
242     char       *executive;
243     char       *workingDirectory;
244     char       *userModules; 	// -mdf option
245     char       *executiveFlags; // Other flags, as required, for dxexec.
246     int		port;
247     int		memorySize;
248 
249     List    	children;
250     List	queuedPackets;
251     DXPacketIF *packet;
252 };
253 
254 //
255 // DXApplication class definition:
256 //
257 class DXApplication : public IBMApplication
258 {
259     friend class DXExecCtl;
260     friend class DXPacketIF;
261     friend class DXLinkHandler;
262 
263   private:
264     //
265     // Private class data:
266     //
267     static boolean    DXApplicationClassInitialized; // class initialized?
268     static void 	DebugEchoCallback(void *clientData, char *echoString);
269     static void       QueuedPacketAccept(void *data);
270     static void       QueuedPacketCancel(void *data);
271 
272     static void InitializeSignals();
273     friend void
274 #if defined(ALTERNATE_CXX_SIGNAL)
275     DXApplication_HandleCoreDump(int dummy, ... );
276 #else
277     DXApplication_HandleCoreDump(int dummy);
278 #endif
279 
280 
281     //
282     // License manager stuff
283     //
284     static void       LicenseMessage(void *, int, void *);
285 
286     //
287     // Dumped object list.
288     //
289     List	dumpedObjects;
290 
291     //
292     // Should we do a disconnect from the executive next time through the
293     // handleEvents.
294     //
295     boolean 	serverDisconnectScheduled;
296 
297     //
298     // Private member data:
299     //
300     boolean runApplication;	// continue to run the application?
301 
302     //
303     // Define a mapping of integer levels and the restriction level names and
304     // determine if the current restriction level is at the given level.
305     // The highest level of restriction is 1 the lowest and +infinity.
306     //
307     boolean isRestrictionLevel(int level);
308 
309     //
310     // Called if DIAGNOSTICS is defined
311     //
312     friend int DXApplication_DXAfterFunction(Display *display);
313 
314     //
315     // Have we read the first network yet.
316     //
317     boolean readFirstNetwork;
318 
319     //
320     // Save all dirty files and return a message string
321     //
322     void emergencySave (char *msg);
323 
324     //
325     // Check the oemApplicationName and oemApplicationNameCode resources and see
326     // if an alternate application name can be verified.  If so, return it
327     // otherwise return NULL.  The return value of the effects the return
328     // values of getFormalName() and getInformalName().
329     //
330     const char *getOEMApplicationName();
331 
332     //
333     // See if there is an OEM license code (see oemApplicationName and
334     // oemLicenseCode resources) and if so see if it is valid.
335     // If so return TRUE and the type of functional license (rt/dev) that
336     // was granted to the oem.
337     //
338     boolean verifyOEMLicenseCode(LicenseTypeEnum *);
339 
340 #if defined(BETA_VERSION) && defined(NOTDEF)
341     //
342     // Exit if this is a beta version and its old
343     //
344     void betaTimeoutCheck();
345 #endif
346 
347   protected:
348     //
349     // Protected class data:
350     //
351     static DXResource resource;	// resources and options
352 
353     static String ListValuedSettings[];
354 
355     //
356     // Protected member data:
357     //
358     DXWindow	       *anchor;		// anchor window
359     CommandScope       *commandScope;	// command scope
360     DXServerInfo	serverInfo;
361     DXExecCtl		execCtl;
362 #ifdef HAS_CLIPNOTIFY_EXTENSION
363     boolean		hasClipnotifyExtension;
364     int			clipnotifyEventCode;
365 #endif
366 
367     FileDialog         *openFileDialog;
368 
369     ApplicIF	       *applicationPacket;
370 
371     //
372     // Overrides the Application class version:
373     //   Initializes Xt Intrinsics with option list (switches).
374     //
375     virtual boolean initialize(int* argcp,
376 			    char**        argv);
377 
378     //
379     // Override of superclass handleEvents() function:
380     //   Handles application events.
381     //   This routine should be called by main() only.
382     //
383     virtual void handleEvents();
384     virtual void handleEvent(XEvent *xev);
385 
386     //
387     // If we're using an anchor window with its own copyright then be satisfied
388     // with that.  Otherwise use the superclass method.
389     virtual void postCopyrightNotice();
390 
391     void highlightNodes(char* path, int highlightType);
392 
393     StartServerDialog 	*startServerDialog;
394     OpenNetworkDialog	*openNetworkDialog;
395     LoadMacroDialog	*loadMacroDialog;
396     LoadMDFDialog	*loadMDFDialog;
397     MsgWin		*messageWindow;
398 
399     LicenseTypeEnum	appLicenseType;		// nodelocked or concurrent
400     LicenseTypeEnum	funcLicenseType;	// run-time or development
401 
402     //
403     // The list of errors for the current (or most recent) execution.
404     List errorList;
405 
406     //
407     // Read the module description file into the Node Definition Dictionary.
408     //
409     virtual void loadMDF();
410     //
411     // Read the interactor description file into the Node Definition Dictionary.
412     //
413     virtual void loadIDF();
414 
415     //
416     // Destroy the objects that have been dumped.
417     //
418     void destroyDumpedObjects();
419 
420     virtual void clearErrorList(void);
421     virtual void addErrorList(char *line);
422 
423     //
424     // Manage the software licenses
425     //
426     virtual void determineUILicense(LicenseTypeEnum *appLicense,
427 				    LicenseTypeEnum *funcLicense);
428 
429     virtual boolean	    verifyServerLicense();
430 
431     //
432     // Disconnect from Exec next time through the main loop
433     //
434     void		scheduleServerDisconnect();
435 
436     //
437     // Send the command to the flush the dictionaries.
438     //
439     virtual void flushExecutiveDictionaries(DXPacketIF *pif);
440 
441     //
442     // Handle cancelation of (disconnection from) a packet interface.
443     //
444     virtual void packetIFCancel(DXPacketIF *p);
445     //
446     // Handle acceptance of (connection to) a packet interface.
447     //
448     virtual void packetIFAccept(DXPacketIF *p);
449 
450     //
451     //  Get the functional license that was asked for by the user.
452     //
453     LicenseTypeEnum getForcedFunctionalLicenseEnum();
454 
455     //
456     // Install the default resources for this class and then call the
457     // same super class method to get the default resources from the
458     // super classes.
459     //
460     virtual void installDefaultResources(Widget baseWidget);
461 
462   public:
463     //
464     // Public static data:
465     //
466     static Symbol MsgExecute;
467     static Symbol MsgStandBy;
468     static Symbol MsgExecuteDone;
469     static Symbol MsgServerDisconnected;
470     static Symbol MsgPanelChanged;
471 
472     //
473     // The input pointer is a pointer to an Application.
474     //
475 #if 0
476     static void       ShutdownApplication(void *);
477 #endif
478 
479     //
480     // Public member data:
481     //
482     Network	       *network;	// Main network
483     List		macroList;	// list of user macros
484     Command*		quitCmd;	// DX application Quit command
485     Command*            exitCmd;        // DX application Quit command with
486                                         // checking if macros modified
487     Command*		openFileCmd;
488     Command*		loadMacroCmd;
489     Command*		executeOnceCmd;
490     Command*		executeOnChangeCmd;
491     Command*		endExecutionCmd;
492     Command*		connectedToServerCmd;
493     Command*		disconnectedFromServerCmd;
494     Command*		connectToServerCmd;
495     Command*		resetServerCmd;
496     Command*		disconnectFromServerCmd;
497     Command*            messageWindowCmd;
498     Command*            openSequencerCmd;
499     Command*            openAllColormapCmd;
500     Command*		assignProcessGroupCmd;
501 
502 
503     //
504     // Used to do autoactivation/deactivation of commands that register
505     // themselves with this command.
506     //
507     Command*		executingCmd;
508     Command*		notExecutingCmd;
509 
510 #if USE_REMAP
511     Command*            toggleRemapInteractorsCmd;
512 #endif
513     Command*            loadMDFCmd;
514     Command*            toggleInfoEnable;
515     Command*            toggleWarningEnable;
516     Command*            toggleErrorEnable;
517 
518 #if !defined(WORKSPACE_PAGES)
519     ProcessGroupManager *PGManager;
520 #endif
521 
522     ProcessGroupAssignDialog *processGroupAssignDialog;
523 
524     //
525     // Constructor:
526     //
527     DXApplication(char* className);
528 
529     //
530     // Destructor:
531     //
532     ~DXApplication();
533 
534     void notifyPanelChanged();
535 
536     //
537     // Add dumped object to the list so as to delete it later.
538     //
539     void dumpObject(Base *object);
540 
541     //
542     // return the CommandScope.
543     //
getCommandScope()544     CommandScope *getCommandScope() { return this->commandScope; }
545 
546     //
547     // Access routines:
548     //
getAnchor()549     DXWindow* getAnchor()
550     {
551 	return this->anchor;
552     }
553     void shutdownApplication();
554 
555     //
556     // Functions to manage the server connection.
557     int connectToServer(int port, DXChild *c = NULL);
558     boolean disconnectFromServer();
559     void closeConnection(DXChild *c);
560     void completeConnection(DXChild *c);
561     DXChild *startServer();
562     void setServer(char *server);
563 
getPacketIF()564     DXPacketIF *getPacketIF() { return this->serverInfo.packet; }
getExecCtl()565     DXExecCtl  *getExecCtl()  { return &this->execCtl; }
566 
567     virtual boolean openFile(const char *netfile,
568 				const char *cfgfile = NULL,
569 				boolean resetTheServer = TRUE);
570 
571     virtual boolean saveFile(const char *netfile,
572 				boolean force = FALSE);
573 
574     virtual boolean resetServer(void);
575     boolean postStartServerDialog();
576     void postProcessGroupAssignDialog();
577     void postOpenNetworkDialog();
578     void postLoadMDFDialog();
579     void postLoadMacroDialog();
580     void getServerParameters(int 	 *autoStart,
581 			     const char **server,
582 			     const char **executive,
583 			     const char **workingDirectory,
584 			     const char **executiveFlags,
585 			     int	 *port,
586 			     int	 *memorySize);
587     void setServerParameters(int 	 autoStart,
588 			     const char *server,
589 			     const char *executive,
590 			     const char *workingDirectory,
591 			     const char *executiveFlags,
592 			     int	 port,
593 			     int	 memorySize);
594     //
595     // Functions to manage the application connection
596     //
597     virtual void connectToApplication(const char *host, const int port);
598     virtual void disconnectFromApplication(boolean terminate);
599 
600     //
601     // Pre-allocate required ui colors
602     //
603     //const String *DXAllocateColors(XtResource*, int);
604 
getAccentColor()605     Pixel getAccentColor()
606     {
607 	return this->resource.accentColor;
608     }
getStandInBackground()609     Pixel getStandInBackground()
610     {
611 	return this->resource.standInBackground;
612     }
getErrorNodeForeground()613     Pixel getErrorNodeForeground()
614     {
615 	return this->resource.errorNodeForeground;
616     }
getExecutionHighlightForeground()617     Pixel getExecutionHighlightForeground()
618     {
619 	return this->resource.executionHighlightForeground;
620     }
getBackgroundExecutionForeground()621     Pixel getBackgroundExecutionForeground()
622     {
623 	return this->resource.backgroundExecutionForeground;
624     }
getForeground()625     Pixel getForeground()
626     {
627 	return this->resource.foreground;
628     }
getInsensitiveColor()629     Pixel getInsensitiveColor()
630     {
631         return this->resource.insensitiveColor;
632     }
inDebugMode()633     boolean inDebugMode() { return this->resource.debugMode; }
634 
635     //
636     // I added trace on/off buttons to the msgwin and I want to be able to see
637     // the instance numbers in the vpe conditionally as well.
638     //
showInstanceNumbers()639     boolean showInstanceNumbers()
640 	{ return (this->resource.debugMode || this->resource.showInstanceNumbers); }
641     void showInstanceNumbers(boolean on_or_off);
642 
643     boolean inEditMode();
644     boolean inImageMode();
645     boolean inMenuBarMode();
646 
647     boolean inDataViewerMode();		// Object viewer, requires ui/viewer.net
648     const char *getDataViewerImportFile();  // Data file to view
649 
isMetricUnits()650     boolean isMetricUnits()
651     {
652 	return this->resource.isMetric;
653     }
654 
getMessageWindow()655     MsgWin *getMessageWindow()
656     {
657 	return this->messageWindow;
658     }
getLimitedNetPath()659     const char *getLimitedNetPath()
660     {
661 	return this->resource.netPath;
662     }
663 
664     //
665     // Get the default image printing/saving options specified through
666     // command line options or resources.
667     //
668     String      getPrintImageFormat();
669     String      getPrintImageSize();
670     String      getPrintImagePageSize();
671     int         getPrintImageResolution();
672     String      getPrintImageCommand();
673     String      getSaveImageFormat();
674     String      getSaveImageSize();
675     String      getSaveImagePageSize();
676     int         getSaveImageResolution();
677 
678     //
679     // Create a new network editor.
680     // This particular implementation makes the returned editor an anchor
681     // if this->anchor is NULL.
682     // This may return NULL in which case a message dialog is posted.
683     //
684     virtual EditorWindow *newNetworkEditor(Network *n);
685 
686     virtual Network *newNetwork(boolean nonJava=FALSE);
687     virtual MsgWin *newMsgWin();
688     virtual ImageWindow *newImageWindow(Network *n);
689     virtual ControlPanel *newControlPanel(Network *n);
690 
691 
692 
693     //
694     // Mark all the networks owned by this application as dirty.
695     //
696     void markNetworksDirty(void);
697 
698     boolean	isInfoEnabled();
699     boolean	isWarningEnabled();
700     boolean	isErrorEnabled();
701     boolean	doesInfoOpenMessage(boolean fromModule = FALSE);
702     boolean	doesWarningOpenMessage();
703     boolean	doesErrorOpenMessage();
704     int 	doesErrorOpenVpe(Network*);
705     void	enableInfo(boolean enable);
706     void	enableWarning(boolean enable);
707     void	enableError(boolean enable);
708 
709     //
710     // constants returned by doesErrorOpenVpe()
711     //
712     enum {
713 	DontOpenVpe = 0,
714 	MayOpenVpe  = 1,
715 	MustOpenVpe = 2
716     };
717 
718     //
719     // Read the user's description file into the Node Definition Dictionary.
720     // If dict is not null then fill the given dictionary with the
721     // NodeDefintions found in the given MDF.
722     // If uiLoadedOnly is TRUE, then the user has asked to have these loaded
723     // from somewhere other than the command line (in which case the
724     // exec does not know about them yet).
725     //
726     virtual void loadUDF(const char *fileName, Dictionary *dict = NULL,
727 				boolean uiLoadedOnly = FALSE);
728 
729     //
730     // Get selected NodeDefinitoins from the newdefs dictionary and send
731     // their representative MDF specs to the server if they are
732     // 	1) outboard
733     // 	2) dynamically loaded
734     // 	3) outboardness or dynmacity changes compared to the possibly
735     //	    existing definition in the current dictionary if provided.
736     //
737     void sendNewMDFToServer(Dictionary *newdefs, Dictionary *current = NULL);
738 
739     //
740     // Define a set of methods that indicate a level of UI capability.
741     //
742     virtual boolean appAllowsDXHelp();
743     virtual boolean appSuppressesStartupWindows();
744     virtual boolean appLimitsNetFileSelection();
745 
746     virtual boolean appAllowsPanelEdit();
747     virtual boolean appAllowsRWConfig();
748     virtual boolean appAllowsPanelAccess();
749     virtual boolean appAllowsOpenAllPanels();
750     virtual boolean appAllowsPanelOptions();
751 
752     virtual boolean appAllowsInteractorEdits();
753     virtual boolean appAllowsInteractorSelection();
754     virtual boolean appAllowsInteractorMovement();
755     virtual boolean appAllowsInteractorAttributeChange();
756 
757     virtual boolean appAllowsImageRWNetFile();
758     virtual boolean appAllowsSavingNetFile(Network *n = NULL);
759     virtual boolean appAllowsSavingCfgFile();
760     virtual boolean appAllowsImageLoad();
761     virtual boolean appAllowsImageSaving();
762     virtual boolean appAllowsImagePrinting();
763     virtual boolean appLimitsImageOptions();
764 
765     virtual boolean appAllowsEditorAccess();
766     virtual boolean appAllowsPGroupAssignmentChange();
767 
768     virtual boolean appAllowsMessageInfoOption();
769     virtual boolean appAllowsMessageWarningOption();
770     virtual boolean appAllowsScriptCommands();
771 
772     virtual boolean appAllowsCMapSetName();
773     virtual boolean appAllowsCMapOpenMap();
774     virtual boolean appAllowsCMapSaveMap();
775     virtual boolean appForcesNetFileEncryption();
776     boolean appAllowsExitOptions();
777     boolean appAllowsExecuteMenus();
778     boolean appAllowsConnectionMenus();
779     boolean appAllowsWindowsMenus();
780     boolean appAllowsImageMenus();
781     boolean appAllowsConfirmedQuit();
782 
dxlAppNotifySaveNet()783     boolean dxlAppNotifySaveNet()
784     { return DXApplication::resource.notifySaveNet; }
785 
dxlAppNoNetworkExecute()786     boolean dxlAppNoNetworkExecute()
787     { return DXApplication::resource.noNetworkExecute; }
788 
789 
790 
791 
792 
793     //
794     // Return the name of the application (i.e. 'Data Explorer',
795     // 'Data Prompter', 'Medical Visualizer'...).
796     //
797     virtual const char *getInformalName();
798 
799     //
800     // Return the formal name of the application (i.e.
801     // 'Open Visualization Data Explorer', 'Open Visualization Data Prompter'...)
802     //
803     virtual const char *getFormalName();
804 
805     //
806     // Get the applications copyright notice, for example...
807     // "Copyright International Business Machines Corporation 1991-1993
808     // All rights reserved"
809     //
810     virtual const char *getCopyrightNotice();
811 
812     //
813     // Go through the error list and highlight all nodes that got errors.
814     //
815     void refreshErrorIndicators();
816 
817     virtual boolean printComment(FILE *f);
818     virtual boolean parseComment(const char *line, const char *filename,
819 					int lineno);
820 
821     //
822     // Return TRUE if the DXWindows are supposed to use the window placement
823     // information saved in the .net or .cfg files.
824     //
825     virtual boolean applyWindowPlacements();
826 
getCryptKey()827     virtual const char* getCryptKey() { return this->resource.cryptKey; }
828 
getCosmoDir()829     const char* getCosmoDir() { return this->resource.cosmoDir; }
getJdkDir()830     const char* getJdkDir() { return this->resource.jdkDir; }
getHtmlDir()831     const char* getHtmlDir() { return this->resource.htmlDir; }
getServerDir()832     const char* getServerDir() { return this->resource.serverDir; }
getDxJarFile()833     const char* getDxJarFile() { return this->resource.dxJarFile; }
getUserHtmlDir()834     const char* getUserHtmlDir() { return this->resource.userHtmlDir; }
835 
836     //
837     // Should we force the functional license to be that returned by
838     // getForcedFunctionalLicenseEnum().
839     //
840     virtual boolean isFunctionalLicenseForced();
841 
842     //
843     // Get the functional license that was granted.
844     //
845     LicenseTypeEnum getFunctionalLicenseEnum();
846 
847     //
848     // Do an emergencySave() and then call the super class method
849     //
850     virtual void abortApplication();
851 
getAutoScrollInitialValue()852     boolean getAutoScrollInitialValue() { return this->resource.autoScrollVPEInitVal; }
853 
854 #if WORKSPACE_PAGES
855     ProcessGroupManager *getProcessGroupManager();
856 #endif
857 
getAppConnection()858     ApplicIF            *getAppConnection() { return this->applicationPacket; }
859 
860     void appendReferencedFile (const char* file);
861     void removeReferencedFile (const char* file);
862     void getRecentNets(List& result);
863 
864 
865     //
866     // Returns a pointer to the class name.
867     //
getClassName()868     const char* getClassName()
869     {
870 	return ClassDXApplication;
871     }
872 };
873 
874 
875 extern DXApplication* theDXApplication;
876 
877 #endif /*  _DXApplication_h */
878