]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | Copyright (C) 1996 Scott W. Sadler | |
3 | All rights reserved. | |
4 | */ | |
5 | ||
6 | /* | |
7 | XsMDIWindow.C | |
8 | ||
9 | History | |
10 | 03-Mar-96 1.0; Scott W. Sadler (ssadler@cisco.com) | |
11 | Created | |
12 | */ | |
13 | ||
14 | // Includes | |
15 | ||
16 | #include <assert.h> | |
17 | #include <Xm/Xm.h> | |
18 | #include "XsMDIWindow.h" | |
19 | ||
20 | // Constructor | |
21 | ||
22 | XsMDIWindow::XsMDIWindow (const char *name) : XsComponent (name) | |
23 | { | |
24 | ||
25 | // Initialize | |
26 | ||
27 | _clientArea = 0; | |
28 | _parent = 0; | |
29 | ||
30 | // Initial size and placement | |
31 | ||
32 | _initX = (Position)-1; | |
33 | _initY = (Position)-1; | |
34 | _initH = (Dimension)-1; | |
35 | _initW = (Dimension)-1; | |
36 | _placed = False; | |
37 | } | |
38 | ||
39 | // Destructor | |
40 | ||
41 | XsMDIWindow::~XsMDIWindow ( ) | |
42 | { | |
43 | // Empty | |
44 | } | |
45 | ||
46 | // raise | |
47 | ||
48 | void XsMDIWindow::raise ( ) | |
49 | { | |
50 | assert (_base != 0); | |
51 | XRaiseWindow (XtDisplay (_base), XtWindow (_base)); | |
52 | } | |
53 | ||
54 | // lower | |
55 | ||
56 | void XsMDIWindow::lower ( ) | |
57 | { | |
58 | assert (_base != 0); | |
59 | XLowerWindow (XtDisplay (_base), XtWindow (_base)); | |
60 | } | |
61 | ||
62 | // show | |
63 | ||
64 | void XsMDIWindow::show ( ) | |
65 | { | |
66 | ||
67 | // Create the window (if necessary) | |
68 | ||
69 | if (_base == 0) | |
70 | { | |
71 | assert (_parent != 0); | |
72 | _createWindow (_parent); | |
73 | } | |
74 | ||
75 | // Manage the client area | |
76 | ||
77 | XtManageChild (_clientArea); | |
78 | ||
79 | // Configure the window position and size | |
80 | ||
81 | if (_placed == False) | |
82 | { | |
83 | const int nargs = 4; | |
84 | Arg args[nargs]; | |
85 | int n = 0; | |
86 | ||
87 | if (_initX != (Position)-1) | |
88 | { | |
89 | XtSetArg (args[n], XmNx, _initX); n++; | |
90 | } | |
91 | if (_initY != (Position)-1) | |
92 | { | |
93 | XtSetArg (args[n], XmNy, _initY); n++; | |
94 | } | |
95 | if (_initW != (Dimension)-1) | |
96 | { | |
97 | XtSetArg (args[n], XmNwidth, _initW); n++; | |
98 | } | |
99 | if (_initH != (Dimension)-1) | |
100 | { | |
101 | XtSetArg (args[n], XmNheight, _initH); n++; | |
102 | } | |
103 | ||
104 | assert (n <= nargs); | |
105 | XtSetValues (_base, args, n); | |
106 | ||
107 | _placed = True; | |
108 | } | |
109 | ||
110 | // Call the base class | |
111 | ||
112 | XsComponent::show ( ); | |
113 | } | |
114 | ||
115 | // setPosition | |
116 | ||
117 | void XsMDIWindow::setPosition (Position x, Position y) | |
118 | { | |
119 | if (_base != 0) | |
120 | XtVaSetValues (_base, XmNx, x, XmNy, y, NULL); | |
121 | else | |
122 | { | |
123 | _initX = x; | |
124 | _initY = y; | |
125 | } | |
126 | } | |
127 | ||
128 | // setSize | |
129 | ||
130 | void XsMDIWindow::setSize (Dimension w, Dimension h) | |
131 | { | |
132 | if (_base != 0) | |
133 | XtVaSetValues (_base, XmNwidth, w, XmNheight, h, NULL); | |
134 | else | |
135 | { | |
136 | _initW = w; | |
137 | _initH = h; | |
138 | } | |
139 | } | |
140 | ||
141 | // className | |
142 | ||
143 | const char* XsMDIWindow::className ( ) const | |
144 | { | |
145 | return ("XsMDIWindow"); | |
146 | } | |
147 | ||
148 | // _setWindowParent | |
149 | ||
150 | void XsMDIWindow::_setWindowParent (Widget p) | |
151 | { | |
152 | ||
153 | // This is called by the canvas to tell us who our parent is | |
154 | ||
155 | _parent = p; | |
156 | } |