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