CONTENTS Title Page Copyright Page Preface 1 Overview of the XUI Toolkit 1.1 Overview of XUI Toolkit Components 1.1.1 User Interface Objects 1.1.2 X Toolkit Routines 1.1.3 Cut and Paste Routines 1.1.4 Application Development Tools 1.2 Programming Concepts 1.2.1 Creating the Form of Your Application 1.2.2 Associating Function with Form 1.3 Widgets in the XUI Toolkit 1.4 Widget Attributes 1.4.1 Size and Position Attributes 1.4.2 Appearance Attributes 1.4.3 Callback Attributes 1.4.4 Assigning Values to Widget Attributes 2 Creating a VMS DECwindows Application 2.1 Overview of a VMS DECwindows Application 2.2 Symbol Definition Files 2.3 Initializing the XUI Toolkit 2.3.1 Application Shell Widget 2.3.2 Using Multiple Shell Widgets 2.4 Creating the Widgets in the Interface 2.4.1 Using Low-Level Widget Creation Routines 2.4.1.1 Using Low-Level Routines to Define the Parent/Child Relationship of a Widget 2.4.1.2 Using Low-Level Routines to Define the Initial Appearance of a Widget 2.4.1.3 Using Low-Level Routines to Associate Callback Routines with a Widget 2.4.2 Using High-Level Widget Creation Routines 2.4.2.1 Using High-Level Routines to Define the Parent/Child Relationship of a Widget 2.4.2.2 Using High-Level Routines to Define the Initial Appearance of a Widget 2.4.2.3 Using High-Level Routines to Associate Callback Routines with a Widget 2.4.3 Using UIL and DRM to Create Widgets 2.4.3.1 Using UIL to Define the Parent/Child Relationship of a Widget 2.4.3.2 Using UIL to Define the Initial Appearance of a Widget 2.4.3.3 Using UIL to Associate Callbacks with a Widget 2.5 Managing the Widgets in the Interface 2.5.1 Managing a Single Child Widget 2.5.2 Managing Multiple Child Widgets 2.6 Realizing the Widgets in the Interface 2.7 Main Input Loop 2.8 Creating a Callback Routine 2.8.1 Identifying the Widget Performing the Callback 2.8.2 Associating Application-Specific Data with a Widget 2.8.3 Widget-Specific Callback Data 2.8.4 Guidelines for Creating Callback Routines 2.9 Manipulating the Interface at Run Time 2.9.1 Standard Widget Manipulation Routines 2.9.2 Widget-Specific Manipulation Routines 2.10 Complete Listing of the Hello World! Sample Application 2.10.1 Using Low-Level Routines to Create the Hello World! User Interface 2.10.2 Using High-Level Routines to Create the Hello World! User Interface 2.10.3 Using UIL and DRM to Create the Hello World! User Interface 2.10.4 The Hello World! Sample Application Main Input Loop and Callback Routine 3 Creating a User Interface Using UIL and DRM 3.1 Overview of UIL and DRM 3.2 Specifying a User Interface Using UIL-A Sample Program 3.2.1 Recommended UIL Coding Techniques 3.2.1.1 Naming Values and Objects 3.2.1.2 Declaring Values, Identifiers, and Procedures 3.2.1.3 Declaring Objects 3.2.1.4 Using Local Definitions for Objects 3.2.2 Creating a UIL Specification File 3.2.3 Structure of a UIL Module 3.2.4 Declaring the UIL Module 3.2.5 Using the UIL Constants Include File 3.2.6 Declaring Procedures in UIL 3.2.7 Declaring Values in UIL 3.2.7.1 Defining Arguments for Attached Dialog Box Widgets 3.2.7.2 Defining Integer Values 3.2.7.3 Defining String Values 3.2.7.4 Specifying Multiline Compound Strings 3.2.7.5 Defining String Table Values 3.2.7.6 Defining Font Values 3.2.7.7 Defining Color Values 3.2.7.8 Defining Pixmap Values 3.2.8 Declaring Interface Objects in a UIL Module 3.2.8.1 Specifying Arguments in an Object Declaration 3.2.8.2 Specifying Children in an Object Declaration 3.2.8.3 Specifying Callbacks in an Object Declaration 3.2.9 Specifying an Icon as a Widget Label 3.3 Creating a User Interface at Run Time Using DRM 3.3.1 Accessing the UID File at Run Time 3.3.2 Deferring Fetching 3.3.3 Retrieving Literal Values from UID Files 3.3.4 Setting Values at Run Time Using UID Resources 3.3.5 Using an Object Definition as a Template 3.4 Customizing a VMS DECwindows Interface Using UIL and DRM 3.4.1 Designing an International Application Using UIL and DRM 3.4.2 Specifying the User Interface for an International Application 3.4.3 Creating the User Interface for an International Application 3.5 Using Identifiers in UIL 3.6 Using Symbolic References to Widget Identifiers in UIL 3.7 Developing and Testing Prototypes Using UIL 3.7.1 Setting Up the UIL Module for Prototype Testing 3.7.2 Setting Up the Application Program for Prototype Testing 3.8 Using UIL on Large Projects 3.9 Working with User-Defined Widgets in UIL 3.9.1 Defining Arguments and Reasons for a User-Defined Widget 3.9.2 Using a User-Defined Widget in an Interface Specification 3.9.3 Accessing a User-Defined Widget at Run Time 4 Creating a Main Window Widget 4.1 Overview of Window Widgets 4.2 Children of a Main Window Widget 4.2.1 Menu Bar Widget 4.2.2 Command Window Widget 4.2.3 Scroll Bar Widgets 4.2.4 Work Area Widget 4.3 Creating a Main Window Widget 4.3.1 Adding Children to a Main Window Widget 4.3.1.1 Using SET VALUES to Add Children to a Main Window Widget 4.3.1.2 Using the MAIN WINDOW SET AREAS Routine 4.3.1.3 Accepting Main Window Widget Defaults 4.3.2 Customizing the Main Window Widget 4.3.3 Associating Callback Routines with a Main Window Widget 4.4 Creating a Scroll Window Widget 4.4.1 Adding Children to a Scroll Window Widget 4.4.1.1 Using SET VALUES to Add Children to a Scroll Window Widget 4.4.1.2 Using the SCROLL WINDOW SET AREAS Support Routine 4.4.1.3 Accepting Scroll Window Widget Defaults 4.5 Creating a Window Widget 4.5.1 Drawing Graphics in a Window Widget 4.5.2 Associating Callback Routines with a Window Widget 4.6 Creating a Command Window Widget 4.6.1 Command Window Widget Support Routines 4.6.2 Specifying the Contents of the Command Line 4.6.3 Displaying Error Messages in the Command Window Widget 4.6.4 Defining Accelerators for the Command Window Widget 4.6.5 Customizing the Appearance of the Command Window Widget 4.6.5.1 Specifying the Command Line Prompt 4.6.5.2 Specifying the Size and Content of the Command History Window 4.6.6 Associating Callback Routines with the Command Window Widget 5 Using the Label, Separator, and Button Widgets 5.1 Overview of Label, Separator, and Button Widgets and Gadgets 5.2 Creating a Label Widget or Gadget 5.2.1 Customizing a Label Widget 5.2.1.1 Specifying the Size and Position of a Label Widget 5.2.1.2 Specifying the Alignment in a Label Widget 5.2.1.3 Specifying Margins in a Label Widget 5.2.1.4 Specifying the Content of a Label Widget 5.2.2 Customizing a Label Gadget 5.3 Creating a Separator Widget or Gadget 5.3.1 Customizing a Separator Widget or Gadget 5.4 Creating a Push Button Widget or Gadget 5.4.1 Customizing a Push Button Widget 5.4.1.1 Specifying Highlighting Behavior 5.4.1.2 Specifying Shadowing 5.4.1.3 Specifying the Insensitive Pixmap 5.4.2 Customizing a Push Button Gadget 5.4.3 Associating Callback Routines with a Push Button Widget or Gadget 5.5 Creating a Toggle Button Widget or Gadget 5.5.1 Specifying the State of a Toggle Button Widget or Gadget 5.5.2 Customizing a Toggle Button Widget 5.5.2.1 Specifying the Appearance of the Indicator 5.5.2.2 Specifying On and Off Pixmaps 5.5.3 Customizing a Toggle Button Gadget 5.5.4 Associating Callback Routines with a Toggle Button Widget or Gadget 5.6 Working with Compound Strings 5.6.1 Creating a Compound String 5.6.2 Creating Compound Strings with Multiple Segments 5.6.3 Manipulating a Compound String 5.6.4 Retrieving Information About a Compound String 5.6.5 Specifying Fonts 5.7 Defining Accelerators for Button Widgets and Gadgets 5.7.1 Defining the Accelerator Key or Key Combination 5.7.2 Adding an Accelerator to a Widget or Gadget 5.7.3 Installing an Accelerator in an Application 5.7.4 Specifying an Accelerator Label 5.7.5 Adding an Accelerator to the Hello World! Sample Application 6 Creating Menu Widgets 6.1 Overview of Menu Widgets 6.2 Menu Widgets in the XUI Toolkit 6.2.1 Creating Menu Items 6.2.2 Nesting Menu Widgets 6.3 Creating a Work Area Menu Widget 6.3.1 Customizing a Work Area Menu Widget 6.3.1.1 Specifying the Size of a Work Area Menu Widget 6.3.1.2 Specifying the Arrangement of Menu Items 6.3.1.3 Specifying Margins and Spacing 6.3.1.4 Determining Menu Item Alignment 6.3.1.5 Specifying Radio Button Exclusivity 6.3.1.6 Restricting Menu Items to Classes of Widgets 6.3.2 Associating Callback Routines with a Work Area Menu Widget 6.4 Creating a Pull-Down Menu Widget 6.4.1 Customizing the Appearance of a Pull-Down Menu Widget 6.4.2 Associating Callback Routines with a Pull-Down Menu Widget 6.5 Creating a Menu Bar Widget 6.5.1 Customizing a Menu Bar Widget 6.6 Creating an Option Menu Widget 6.6.1 Customizing an Option Menu Widget 6.6.1.1 Specifying the Initial Value of an Option Menu Widget 6.6.1.2 Specifying the Label in an Option Menu Widget 6.7 Creating a Pop-Up Menu Widget 6.7.1 Creating an Action Procedure 6.7.2 Adding an Action Procedure to a Widget 6.7.3 Customizing a Pop-Up Menu Widget 6.7.4 Associating Callback Routines with a Pop-Up Menu Widget 7 Creating Dialog Box Widgets 7.1 Overview of the Dialog Box Widget 7.2 Dialog Box Widgets in the XUI Toolkit 7.2.1 Generic Dialog Box Widgets 7.2.1.1 Dialog Box Widget 7.2.1.2 Attached Dialog Box Widget 7.2.2 Standard Dialog Box Widgets 7.2.2.1 Message Box Widget 7.2.2.2 Selection Box Widget 7.3 Styles of Dialog Box Widgets 7.4 Creating a Dialog Box Widget 7.4.1 Specifying the Layout of Children in a Dialog Box Widget 7.4.2 Customizing the Dialog Box Widget 7.4.2.1 Sizing and Resizing a Dialog Box Widget 7.4.2.2 Positioning a Dialog Box Widget 7.4.2.3 Selecting the Unit of Measure Used in a Dialog Box Widget 7.4.2.4 Defining Translations for Simple Text Widgets 7.4.2.5 Assigning Accelerators to Child Widgets 7.4.2.6 Grabbing the Input Focus 7.4.3 Associating Callback Routines with a Dialog Box Widget 7.5 Creating an Attached Dialog Box Widget 7.5.1 Defining Attachments in an Attached Dialog Box Widget 7.5.1.1 Attaching an Edge to the Attached Dialog Box 7.5.1.2 Attaching an Edge to Another Child Widget 7.5.1.3 Attaching an Edge to a Position in the Attached Dialog Box Widget 7.5.1.4 Accepting Default Attachments 7.5.2 Using Attachment Attributes 7.5.3 Customizing an Attached Dialog Box Widget 7.5.3.1 Specifying the Default Spacing Between Child Widgets 7.5.3.2 Defining the Default Denominator Used in Fraction Positioning 7.5.3.3 Controlling Resizing Behavior of Child Widgets 7.5.4 Associating Callback Routines with an Attached Dialog Box Widget 8 Creating a List Box Widget 8.1 Overview of the List Box Widget 8.2 Creating a List Box Widget 8.2.1 Creating an Item List 8.2.1.1 Creating an Item List as an Array of Compound Strings 8.2.1.2 Creating an Item List Using the UIL STRING TABLE Function 8.2.2 Selecting and Canceling Selections of List Items 8.3 List Box Widget Support Routines 8.3.1 Adding and Deleting List Items at Run Time 8.3.1.1 Using SET VALUES to Add or Delete List Items 8.3.1.2 Using a Support Routine to Add an Item to an Item List 8.3.1.3 Using a Support Routine to Delete an Item from an Item List 8.3.2 Selecting and Canceling the Selection of List Items at Run Time 8.3.2.1 Using the SET VALUES Intrinsic Routine to Select List Items 8.3.2.2 Using a Support Routine to Select a List Item 8.3.2.3 Canceling the Selection of Items in an Item List 8.3.3 Customizing the Appearance of a List Box Widget 8.3.3.1 Specifying the Size of a List Box Widget 8.3.3.2 Specifying List Items to Be Visible 8.3.3.3 Specifying Margins and Spacing in a List Box Widget 8.3.4 Associating Callbacks with a List Box Widget 9 Handling Text 9.1 Overview of Text Widgets 9.2 Creating Text Widgets 9.2.1 Manipulating the Text Contents of the Text Widgets 9.2.1.1 Placing Text in a Text Widget 9.2.1.2 Retrieving Text from a Text Widget 9.2.1.3 Disabling Text Editing 9.2.1.4 Limiting the Length of the Text 9.2.2 Customizing the Appearance of the Text Widgets 9.2.2.1 Specifying Size 9.2.2.2 Specifying Margins 9.2.2.3 Controlling Resizing Behavior 9.2.2.4 Controlling Text Cursor Appearance 9.2.2.5 Positioning the Insertion Point 9.2.2.6 Specifying Border Visibility and Color 9.2.2.7 Identifying the Current Writing and Editing Directions 9.2.3 Handling Text Selections 9.2.3.1 Selecting Text 9.2.3.2 Retrieving Selected Text 9.2.3.3 Canceling the Selection of Text 9.2.4 Associating Callbacks with Text Widgets 10 Using the Scale and the Scroll Bar Widgets 10.1 Overview of the Scale Widget 10.2 Creating a Scale Widget 10.2.1 Determining the Range of Values 10.2.2 Customizing the Appearance of a Scale Widget 10.2.2.1 Specifying the Size of a Scale Widget 10.2.2.2 Specifying the Orientation of the Scale Widget 10.2.2.3 Specifying the Title of the Scale Widget 10.2.2.4 Specifying the Color of the Slider 10.2.2.5 Representing the Value of the Scale 10.2.2.6 Adding Labeled Tick Marks to a Scale Widget 10.2.3 Associating Callbacks with a Scale Widget 10.3 Overview of the Scroll Bar Widget 10.4 Creating a Scroll Bar Widget 10.4.1 Determining the Range of a Scroll Bar Widget 10.4.2 Specifying the Size of the Slider in a Scroll Bar Widget 10.4.3 Defining the Size of Increment and Decrement 10.4.4 Modifying the Action of the Stepping Arrows 10.4.5 Customizing the Appearance of the Scroll Bar Widget 10.4.6 Associating Callbacks with a Scroll Bar Widget 11 Using the Color Mixing Widget 11.1 Overview of the Color Mixing Widget 11.1.1 Color Models 11.1.2 Components of the Color Mixing Widget 11.1.2.1 Color Display Subwidget 11.1.2.2 Color Model Option Menu Subwidget 11.1.2.3 Color Mixer Subwidget 11.1.2.4 Push Button Subwidgets 11.1.2.5 Label Subwidgets 11.1.2.6 Work Area Subwidget 11.2 Creating a Color Mixing Widget 11.2.1 Setting and Retrieving New Color Values 11.2.2 Customizing the Color Mixing Widget 11.2.2.1 Specifying the Size 11.2.2.2 Specifying Margins 11.2.2.3 Labeling the Color Mixing Widget 11.2.2.4 Defining the Background Color of the Color Display Subwidget 11.2.2.5 Adding a Work Area to the Color Mixing Widget 11.3 Supporting Other Color Models 11.3.1 Replacing the Color Display Subwidget 11.3.2 Replacing the Color Mixer Subwidget 11.4 Associating Callbacks with a Color Mixing Widget 12 Using Help 12.1 Overview of the Help Widget 12.1.1 Help Widget Terminology 12.2 Help Library Information 12.2.1 VMS Help Library Enhancements 12.3 Modifying Help Widget Appearance 12.3.1 Help Widget Topic Information 12.4 Using the Help Widget 12.5 Context-Sensitive Help 13 Using the Cut and Paste Routines 13.1 Overview of the Cut and Paste Routines 13.1.1 Communicating with Other Applications 13.1.2 Implementing the Copy, Cut, and Paste Functions 13.2 Copying Data to the Clipboard 13.2.1 Copying Data to the Clipboard by Name 13.2.2 Creating a Clipboard Callback Routine 13.2.3 Deleting Data from the Clipboard 13.2.4 Specifying Clipboard Data Formats 13.3 Copying Data from the Clipboard 13.4 Inquiring About Clipboard Contents 13.5 QuickCopy Implementation 13.5.1 QuickCopy Message Types 13.5.2 Selection Threshold Resource 13.5.3 Implementing the QuickCopy Function 13.5.3.1 CopyFrom and MoveFrom Operations 13.5.3.2 CopyTo and MoveTo Operations 14 Communicating with the Window Manager 14.1 Overview 14.2 Making Requests of the Window Manager 14.2.1 Using Window Properties 14.2.1.1 Predefined Window Properties 14.2.1.2 Vendor-Specific Window Properties 14.2.2 Using Shell Widget Attributes 14.3 Setting and Retrieving Predefined Window Manager Properties 14.4 Setting and Retrieving Vendor-Specific Window Manager Properties 14.5 Setting and Retrieving Shell Widget Attributes 14.5.1 Setting Shell Widget Attributes at Widget Creation Time 14.5.2 Setting Shell Widget Attributes After Creation Time 14.6 Receiving Messages from the Window Manager 14.7 Customizing Your Application Using Window Manager Hints 14.7.1 Customizing Your Main Application Window 14.7.1.1 Associating a Name with Your Main Application Window 14.7.1.2 Specifying the Initial Size and Position of Your Application 14.7.1.3 Customizing the Title Bar 14.7.1.4 Including Shrink-to-Icon, Push-to-Back, and Resize Buttons in the Title Bar 14.7.2 Getting Information About Your Main Application Window 14.7.3 Customizing Your Application Icon 14.7.3.1 Specifying the Text in the Icon 14.7.3.2 Specifying the Pixmap Used in Your Application Icon 14.7.3.3 Using a Window in Your Icon 14.7.3.4 Positioning Your Icon on the Display 14.7.4 Specifying the Initial State of Your Application 14.7.5 Creating Transient and Sticky Windows 14.7.6 Bypassing the Window Manager A Using the DECTERM PORT Routine DECTERM PORT B Using the VAX Bindings B.1 Using the DECwindows Ada Programming Interfaces B.1.1 Using the Ada Packages B.1.1.1 Package CDA B.1.1.2 Package DDIF B.1.1.3 Package DTIF B.1.1.4 Package DWT B.1.1.5 Package X B.1.2 Callbacks B.1.3 Tasking Considerations B.1.4 Ada Examples B.2 Using the FORTRAN Bindings B.3 Using the VAX Pascal Bindings C International Version of the DECburger Application D Building Your Own Widgets D.1 Overview of Widgets D.1.1 Building a Widget D.1.2 Building a Sample Widget D.2 Widget Class Definitions D.2.1 Core Widgets D.2.1.1 CoreClassPart Structure D.2.1.2 CorePart Structure D.2.1.3 CorePart Default Values D.2.2 Composite Widgets D.2.2.1 CompositeClassPart Structure D.2.2.2 CompositePart Structure D.2.2.3 CompositePart Default Values D.2.3 Constraint Widgets D.2.3.1 ConstraintClassPart Structure D.2.3.2 ConstraintPart Structure D.3 Widget Classing D.3.1 Widget Naming Conventions D.3.2 Widget Subclassing in Public .h Files D.3.3 Widget Subclassing in Private .h Files D.3.4 Widget Subclassing in .c Files D.3.5 Superclass Chaining D.3.6 Class Initialization D.3.7 Inheritance of Superclass Operations D.3.8 Invocation of Superclass Operations D.4 Creating Instances of Widgets to Build a User Interface D.4.1 Widget Instance Initialization D.4.2 Constraint Widget Instance Initialization D.4.3 Nonwidget Data Initialization D.4.4 Widget Instance Window Creation D.4.5 Dynamic Data Deallocation D.4.6 Dynamic Constraint Data Deallocation D.5 Composite Widgets and Their Children D.5.1 Addition of Children to a Composite Widget D.5.2 Insertion Order of Children D.5.3 Deleting Children D.5.4 Constrained Composite Widgets D.6 Geometry Management D.6.1 Initiating Geometry Changes D.6.2 General Geometry Manager Requests D.6.3 Resize Requests D.6.4 Potential Geometry Changes D.6.5 Child Geometry Management D.6.6 Widget Placement and Sizing D.6.7 Obtaining the Preferred Geometry D.6.8 Managing Size Changes D.7 Event Management D.7.1 X Event Filters D.7.1.1 Pointer Motion Compression D.7.1.2 Enter/Leave Compression D.7.1.3 Exposure Compression D.7.2 Widget Exposure and Visibility D.7.2.1 Redisplay of a Widget D.7.2.2 Widget Visibility D.7.3 X Event Handlers D.8 Resource Management D.8.1 Resource Lists D.8.2 Superclass to Subclass Chaining of Resource Lists D.8.3 Retrieving Subresources D.8.4 Obtaining Application Resources D.8.5 Resource Conversions D.8.5.1 Predefined Resource Converters D.8.5.2 New Resource Converters D.8.6 Reading and Writing Widget Resource Fields D.8.6.1 Widget Subpart Resource Data D.8.7 Setting Widget Resource Fields D.8.7.1 Specifying Widget State D.8.7.2 Specifying Widget Geometry Values D.8.7.3 Specifying Widget Constraint Information D.8.7.4 Specifying the Widget Subpart Resources D.9 Translation Management D.9.1 Action Tables D.9.2 Translating Action Names to Procedures D.9.3 Translation Tables D.9.3.1 Event Sequences D.9.3.2 Action Sequences D.9.4 Translation Table Syntax D.9.4.1 Modifier Names in a Translation Table D.9.4.2 Event Types D.9.4.3 Canonical Representation D.9.5 Translation Table Management D.9.6 Using Accelerators D.9.7 Key Code to Key Symbol Conversions Glossary accelerator . . . bit gravity bitmap . . . case-sensitivity clause caution dialog box . . . clipboard close . . . control panel controls list . . . disable discontinuous selection . . . event mask exit . . . gadget ghost image . . . hotspot icon . . . input device input focus . . . maximum slider MB1, MB2, MB3, ..., MBn . . . name null-terminated string . . . parent passive grab . . . pointing device button pop-up menu . . . pull-down menu push button . . . reply resize . . . scope scroll bar . . . size slider . . . substructure redirect symbolic reference . . . toggle button toggle indicator . . . User Interface Definition file User Interface Language . . . widget hierarchy widget identifier . . . XUI Resource Manager EXAMPLES 2-1 Including the XUI Toolkit Symbol Definition File in an Application 2-2 Initializing the XUI Toolkit 2-3 Creating Your Own Application Context 2-4 Creating a User Interface Using Low-Level Routines 2-5 Creating a User Interface Using High-Level Routines 2-6 Using UIL to Define a Widget 2-7 Creating the Interface at Run Time Using DRM 2-8 Managing a Single Widget 2-9 Managing a Group of Child Widgets 2-10 Realizing a Widget Hierarchy 2-11 Entering the Main Input Loop 2-12 Hello World! Application Callback Routine 2-13 Adding a Work Procedure 2-14 Setup Section of the Hello World! Application Using Low-Level Routines 2-15 Setup Section of the Hello World! Application Using High-Level Routines 2-16 Hello World! Application UIL Specification File 2-17 Hello World! Application Using UIL 2-18 Main Input Loop and Callback Routine of the Hello World! Application 3-1 Widget Hierarchy in the DECburger UIL Module 3-2 UIL Module Structure 3-3 Module Declaration in the DECburger UIL Module 3-4 Constants from Include File in the DECburger UIL Module 3-5 Procedure Declaration in the DECburger UIL Module 3-6 Defining Integer Values in the DECburger UIL Module 3-7 Defining String Values in the DECburger UIL Module 3-8 Defining a String Table Value in the DECburger UIL Module 3-9 Declaring a Font Value in the DECburger UIL Module 3-10 Defining Colors in the DECburger UIL Module 3-11 Defining a Color Table in the DECburger UIL Module 3-12 Defining an Icon in the DECburger UIL Module 3-13 Declaring an Object in the DECburger UIL Module 3-14 Specifying Children in the DECburger UIL Module 3-15 Specifying Multiple Procedures per Callback Reason 3-16 Using an Icon as a Label in the DECburger UIL Module 3-17 Initializing DRM and the XUI Toolkit in the DECburger Application 3-18 Declaring the UID Hierarchy for the DECburger Application 3-19 Opening the UID Hierarchy for the DECburger Application 3-20 Declaring a Vector of Names to Register for DRM in the DECburger Application 3-21 Registering Names for DRM in the DECburger Application 3-22 DECburger UIL Module Setup for Deferred Fetching 3-23 Title Bar String for DECburger Application 3-24 Getting a Value from the UID File for the DECburger Application 3-25 UIL Module for the FETCH SET VALUES Application 3-26 C Program for the FETCH SET VALUES Application 3-27 UIL Module Setup for the FETCH WIDGET OVERRIDE Routine 3-28 Using the FETCH WIDGET OVERRIDE Routine in a C Program 3-29 French UIL Module for the International DECburger Application 3-30 C Program for the International DECburger Application 3-31 Using Identifiers in a UIL Module 3-32 Using Symbolic References in a UIL Module 3-33 Declarations in the DECburger UIL Module for Prototype Testing 3-34 Declaring an Unimplemented Object in the DECburger UIL Module 3-35 Definition of the Activate Routine in the DECburger Application 3-36 Sample Main UIL File 3-37 User-Defined XYZ Widget 3-38 Declaring the User-Defined XYZ Widget in a UIL Module 3-39 C Program for Displaying the XYZ User-Defined Widget 4-1 Main Window Created in the DECburger UIL Module 4-2 Performing Graphics Operations in a Window Widget 5-1 Push Button Gadgets in the DECburger Option Menu 5-2 Push Button Callback Procedure in the DECburger Application 5-3 Creating the Radio Box Widget in the DECburger Application 5-4 Setting the Initial State of a Toggle Button 5-5 Toggle Button Callback Procedure in the DECburger Application 5-6 Creating a Compound String 5-7 Creating a Compound String with Multiple Segments 5-8 Extracting the Text Content from a Compound String 5-9 Specifying a Font 5-10 Adding an Accelerator to a Push Button Widget or Gadget 5-11 Adding an Accelerator to the Hello World! Application 6-1 Building a Work Area Menu 6-2 Creating the Menu Bar Widget in the DECburger Application 6-3 Creating the Option Menu Widget in the DECburger Application 6-4 Creating an Option Menu Widget with an Item Selected 6-5 Action Procedure to Pop Up a Pop-Up Menu Widget 6-6 Creating a Pop-Up Menu Widget 7-1 Creating the Dialog Box Widget in the DECburger Application 7-2 Creating the Children of the Dialog Box Widget in the DECburger Application 7-3 Positioning Children in an Attached Dialog Box Widget 8-1 Creating an Item List as an Array of Compound Strings 8-2 Creating an Item List Using the UIL STRING TABLE Function 8-3 Selecting an Item in an Item List 8-4 Adding an Item to a List Box Widget 8-5 Specifying the Size of the DECburger List Box Widget 8-6 Associating a Callback Routine with a List Box Widget 8-7 Callback Routine DECburger Associates with the List Box Widget 9-1 Defining the Simple Text Widget in the DECburger Sample Application 9-2 Using the S TEXT GET STRING Support Routine in the DECburger Sample Application 10-1 Determining the Range of Values 10-2 Setting Appearance Attributes of the Scale Widget in the DECburger Sample Application 10-3 Labeling Points Along a Scale in a Scale Widget 10-4 Associating a Callback Routine with a Scale Widget 10-5 Scale Widget Callback Routine in the DECburger Application 10-6 Specifying the Range of Values in a Scroll Bar Widget 11-1 Creating a Color Mixing Widget 12-1 Sample Help File 12-2 Creating a Help Widget 12-3 UIL Help Widget Implementation 13-1 Copying Data to the Clipboard 13-2 Copying Data from the Clipboard 13-3 Calling the OWN SELECTION Routine 13-4 Notifying the Receiving Application that Data Is Available 13-5 Getting the Selection Value 13-6 Getting the Secondary Selection Data 13-7 QuickCopy Callback Routine 13-8 Sending a KILL_SELECTION Message 14-1 Assigning Values to Predefined Window Manager Properties 14-2 Setting Vendor-Specific Window Manager Properties 14-3 Setting Shell Widget Attributes at Widget Creation Time 14-4 Using the SET VALUES Intrinsic Routine to Set Shell Widget Attributes 14-5 Specifying the Shrink-to-Icon Pixmap Using the CHANGE PROPERTY Xlib Routine 14-6 Using Shell Widget Attributes to Specify Your Application Icon A-1 Creating a DECterm on a Remote Node A-2 Command Procedure to Compile, Link, and Run a DECterm on a Remote Node B-1 Hello World! Application in VAX Ada B-2 Hello World! Application in VAX FORTRAN B-3 Hello World! Application in VAX Pascal C-1 C Program for the International Version of DECburger D-1 Sample Widget D-2 Modifying the Hello World! Application to Use the Sample Widget D-3 Compiling and Linking the Sample Widget D-4 The .c File for a Label Widget FIGURES 1-1 XUI Layered Architecture 1-2 Hello World! Application User Interface 1-3 Application Widget Hierarchy of the Hello World! Application 1-4 DECburger User Interface 2-1 Structure of an XUI Application 2-2 Relationship of Shell Widget to Application 2-3 Argument Data Structure (VAX Binding) 2-4 Callback Routine Data Structure (VAX Binding) 2-5 Widget Callback Data Structure (VAX Binding) 3-1 Setting Up a User Interface Specified with UIL 3-2 Radio Box with Toggle Buttons in the DECburger Application 3-3 Widget Hierarchy for the DECburger Radio Box Widget 3-4 Using an Icon in the DECburger Application Interface 3-5 Widget Creation in a DRM Fetch Operation 3-6 Sample Application Using the FETCH SET VALUES Routine 3-7 Using UID Hierarchies to Provide Alternatives or Refinements to an Interface 4-1 Main Window Widget 5-1 Attributes for Setting Margins 5-2 Radio Box with Toggle Button Gadgets in the DECburger Application 5-3 Hello World! Application with an Accelerator 6-1 Menu Widget 6-2 Relationship of Pull-Down Menu Widget and Pull-Down Menu Entry Widget or Gadget 6-3 Widget Hierarchy of Nested Pull-Down Menu Widgets 6-4 Widget Hierarchy of a Work Area Menu 6-5 Laying Out Menu Items 6-6 DECburger Menu Bar with a Pull-Down Menu Selected 6-7 Widget Hierarchy of the DECburger Menu Bar Widget 6-8 Option Menu Widget 6-9 Pop-Up Menu Widget 7-1 Resizing a Dialog Box Widget 7-2 Layout of the DECburger Dialog Box Widget 7-3 Attaching an Edge of a Child Widget to the Attached Dialog Box Widget 7-4 Attaching an Edge of a Child Widget to Another Child Widget in an Attached Dialog Box Widget 7-5 Attaching an Edge to a Position in an Attached Dialog Box 8-1 List Box Widget 8-2 List Box Widget Used in the DECburger User Interface 8-3 Margins and Spacing in a List Box Widget 9-1 Text Widgets 9-2 Default Configuration of the Text Widgets 10-1 Scale Widget 10-2 Scale Widget Sizing Attributes 10-3 Scroll Bar Widget 11-1 Components of the Color Mixing Widget (HLS Color Model) 11-2 Components of the Color Mixing Widget (RGB Color Model) 11-3 Labels in the Color Mixing Widget (HLS Color Model) 11-4 Labels in the Color Mixing Widget (RGB Color Model) 12-1 Sample XUI Toolkit Help Widget 13-1 Edit Menu 14-1 DEC WM Hints Data Structure (VAX Binding) 14-2 WM Decoration Geometry Data Structure (VAX Binding) 14-3 Appearance of an Application Running Under the DECwindows Window Manager 14-4 Customizable Aspects of the Main Application Window 14-5 Informational Attributes Provided by the Window Manager 14-6 Customizable Aspects of Your Application Icon TABLES 1-1 Summary of XUI Toolkit Widgets 1-2 Widget Size and Position Attributes 1-3 Callback Attributes Supported by the Push Button Widget 2-1 Symbol Definition Files 2-2 Widget Creation Mechanisms 2-3 Standard Arguments Used with Low-Level Routines 2-4 Arguments Used with the High-Level Routine PUSH BUTTON 2-5 Standard Widget Manipulation Routines 3-1 Optional UIL Module Header Clauses 3-2 UIL Compiler Rules for Checking Argument Type and Count 3-3 UIL Value Types 3-4 DRM Routines and Functions 4-1 Main Window Widget Creation Mechanisms 4-2 Widget Attributes Accessible Using the High-Level Routine MAIN WINDOW 4-3 Child Widget Attributes of the Main Window Widget 4-4 Scroll Window Widget Creation Mechanisms 4-5 Widget Attributes Accessible Using the High-Level Routine SCROLL WINDOW 4-6 Child Widget Attributes of the Scroll Window Widget 4-7 Window Widget Creation Mechanisms 4-8 Widget Attributes Accessible Using the High-Level Routine WINDOW 4-9 Command Window Widget Creation Mechanisms 4-10 Widget Attributes Accessible Using the High-Level Routine COMMAND WINDOW 4-11 Command Window Widget Support Routines 4-12 Command Window Widget Callbacks 5-1 Label Widget and Gadget Creation Mechanisms 5-2 Attributes Accessible Using the High-Level Routine LABEL 5-3 Separator Widget and Gadget Creation Mechanisms 5-4 Attributes Accessible Using the High-Level Routine SEPARATOR 5-5 Push Button Widget and Gadget Creation Mechanisms 5-6 Attributes Accessible Using the High-Level Routine PUSH BUTTON 5-7 Push Button Widget and Gadget Callbacks 5-8 Toggle Button Widget and Gadget Creation Mechanisms 5-9 Attributes Accessible Using the High-Level Routine TOGGLE BUTTON 5-10 Toggle Button Widget and Gadget Callbacks 5-11 Compound String Routines 6-1 Work Area Menu Widget Creation Mechanisms 6-2 Attributes Accessible Using the High-Level Routine MENU 6-3 XUI Toolkit Widget and Gadget Class Names 6-4 Pull-Down Menu Widget Creation Mechanisms 6-5 Pull-Down Menu Entry Widget and Gadget Creation Mechanisms 6-6 Attributes Accessible Using the High-Level Routine MENU 6-7 Menu Bar Widget Creation Mechanisms 6-8 Attributes Accessible Using the High-Level Routine MENU BAR 6-9 Option Menu Widget Creation Mechanisms 6-10 Attributes Accessible Using the High-Level Routine OPTION MENU 6-11 Pop-Up Menu Widget Creation Mechanisms 6-12 Attributes Accessible Using the High-Level Routine MENU 7-1 Dialog Box Widget Creation Mechanisms 7-2 Attributes Accessible Using the High-Level Routine DIALOG BOX 7-3 Attached Dialog Box Widget Creation Mechanisms 7-4 Attributes Accessible Using the High-Level Routine ATTACHED DIALOG BOX 7-5 Attachment Attributes 7-6 Attachment Constants for the Attached Dialog Box Widget 8-1 List Box Widget Creation Mechanisms 8-2 Attributes Accessible Using the High-Level Routine LIST BOX 8-3 List Box Widget Support Routines 8-4 List Box Widget Callbacks 9-1 Text Widget Support Routines 9-2 Mechanisms for Creating Text Widgets 9-3 Attributes Accessible Using the High-Level Routines S TEXT and CS TEXT 9-4 Text Widget Callbacks 10-1 Scale Widget Creation Mechanisms 10-2 Attributes Accessible Using the High-Level Routine SCALE 10-3 Horizontal and Vertical Orientation Constants 10-4 Scale Widget Callbacks 10-5 Scroll Bar Widget Creation Mechanisms 10-6 Attributes Accessible Using the High-Level Routine SCROLL BAR 10-7 Scroll Widget Callbacks 11-1 Color Model Constants 11-2 Mechanisms for Creating the Color Mixing Widget 11-3 Support Routines for the Color Mixing Widget 11-4 Color Mixing Widget Label Attributes 11-5 Color Mixing Widget Callbacks 12-1 Help Widget Terminology 12-2 VMS Librarian Utility Extensions 12-3 Help Widget Appearance Attributes 12-4 Help Widget Topic Attributes 12-5 Help Widget Creation Routines 13-1 Cut and Paste Routines 13-2 Edit Menu Functions 13-3 QuickCopy Operations 14-1 Predefined Window Manager Properties 14-2 Members of the WM Hints Data Structure 14-3 Properties Defined by the DECwindows Window Manager 14-4 Members of the DEC WM Hints Data Structure 14-5 Members of the WM Decoration Geometry Data Structure 14-6 Xlib Routines for Setting and Retrieving Predefined Window Manager Properties 14-7 Common Tasks Performed with the Window Manager 14-8 Information Provided by the Window Manager B-1 Subtype Definitions-Package DWT B-2 Subtype Definitions-Package X D-1 Default Values for the CorePart Structure D-2 Default Values for the CompositePart Structure D-3 Resource Types D-4 Translation Table Modifiers D-5 Event Types D-6 Event Type Abbreviations for Translation Tables