]> git.saurik.com Git - wxWidgets.git/blame - src/motif/mdi/lib/XsMotifWindow.h
wxDC::SetFont can now handle invalid font and doesn't assert anymore (other ports...
[wxWidgets.git] / src / motif / mdi / lib / XsMotifWindow.h
CommitLineData
8704bf74
JS
1/*
2 Copyright (C) 1996 Scott W. Sadler
3 All rights reserved.
4*/
5
6/*
7 XsMotifWindow.h
8
9 History
0d57be45 10 03-Mar-96 1.0; Scott W. Sadler (ssadler@cisco.com)
8704bf74
JS
11 Created
12*/
13
14#ifndef XSMOTIFWINDOW_H
15#define XSMOTIFWINDOW_H
16
17// Includes
18
19#include <Xm/Xm.h>
20#include "XsMDIWindow.h"
21
22// Forward declarations
23
24class XsMotifWindow;
25
26/*
27 ----------------------------------------------------------------------------
28 _XsMotifBase class
29*/
30
31class _XsMotifBase : public XsComponent {
32
33 public:
34
35// Destructor
36
37 virtual ~_XsMotifBase ( );
38
39// Window actions
40
41 virtual void show ( );
42
43// Class name
44
45 virtual const char *className ( ) const;
46
47 protected:
48
49// Protected constructor
50
51 _XsMotifBase (const char *name, XsMotifWindow *win);
52
53// Component life-cycle
54
55 virtual void _componentDestroyed ( );
56
57// Utilities
58
59 void _drawShadows (Position x, Position y, Dimension width,
60 Dimension height, Dimension thick, Boolean reverse = False);
61
62 void _drawLine (Position x1, Position y1, Position x2, Position y2, GC &gc);
63
64// Implementation
65
66 XsMotifWindow *_win;
67
68 GC _topShadowGC;
69 GC _bottomShadowGC;
70
71// Event handlers
72
73 virtual void _map ( );
74
75// Internal Event handlers
76
77 static void _mapEventHandler (Widget, XtPointer, XEvent*, Boolean*);
78};
79
80/*
81 ----------------------------------------------------------------------------
82 _XsMotifComponent class
83*/
84
85class _XsMotifComponent : public _XsMotifBase {
86
87 public:
88
89// Destructor
90
91 virtual ~_XsMotifComponent ( );
92
93// Enumerations
94
95 enum Cursors {
96 TopCursor = 0, BottomCursor, LeftCursor, RightCursor,
97 TopLeftCursor, TopRightCursor, BottomLeftCursor,
98 BottomRightCursor, NumCursors };
99
100// Class name
101
102 virtual const char *className ( ) const;
103
104 protected:
105
106// Protected constructor
107
108 _XsMotifComponent (const char *name, XsMotifWindow *win, Widget parent = 0);
109
110// Cursors
111
112 static Cursor _cursors[NumCursors];
113
114// Component parameters
115
116 Dimension _borderSize;
117 Dimension _buttonSize;
118 Dimension _cornerSize;
119
120// Event handlers
121
122 virtual void _expose (XEvent*) = 0;
123 virtual void _input (XEvent*);
124
125 private:
126
127// Internal Event handlers
128
129 static void _exposeEventHandler (Widget, XtPointer, XEvent*, Boolean*);
130 static void _inputEventHandler (Widget, XtPointer, XEvent*, Boolean*);
131
132// Resources
133
134 static XtResource _resourceList[];
135
136 static int _mutex;
137};
138
139/*
140 ----------------------------------------------------------------------------
141 _XsMotifCorner class
142*/
143
144class _XsMotifCorner : public _XsMotifComponent {
145
146 public:
147
148// Enumerations
149
150 enum Corner { TopLeft = 0, TopRight, BottomLeft, BottomRight, Max };
151
152// Constructor/Destructor
153
154 _XsMotifCorner (const char *name, XsMotifWindow *win, Corner corner);
155 virtual ~_XsMotifCorner ( );
156
157// Class name
158
159 virtual const char *className ( ) const;
160
161 protected:
162
163// Implementation
164
165 Corner _corner;
166
167// Event handlers
168
169 virtual void _expose (XEvent*);
170 virtual void _input (XEvent*);
171 virtual void _map ( );
172};
173
174/*
175 ----------------------------------------------------------------------------
176 _XsMotifSide class
177*/
178
179class _XsMotifSide : public _XsMotifComponent {
180
181 public:
182
183// Enumerations
184
185 enum Side { Top = 0, Bottom, Left, Right, Max };
186
187// Constructor/Destructor
188
189 _XsMotifSide (const char *name, XsMotifWindow *win, Side side);
190 virtual ~_XsMotifSide ( );
191
192// Class name
193
194 virtual const char *className ( ) const;
195
196 protected:
197
198// Implementation
199
200 Side _side;
201
202 int _lastW;
203 int _lastH;
204
205// Event handlers
206
207 virtual void _expose (XEvent*);
208 virtual void _input (XEvent*);
209 virtual void _map ( );
210 virtual void _configure (XEvent *);
211
212 private:
213
214// Callbacks
215
216 static void _configureEventHandler (Widget, XtPointer, XEvent*, Boolean*);
217};
218
219/*
220 ----------------------------------------------------------------------------
221 _XsMotifButton class
222*/
223
224class _XsMotifButton : public _XsMotifComponent {
225
226 public:
227
228// Enumerations
229
230 enum Button { Menu = 0, Minimize, Maximize, Max };
231
232// Constructor/Destructor
233
234 _XsMotifButton (const char *name, XsMotifWindow *win, Button button);
235 virtual ~_XsMotifButton ( );
236
237// Utilities
238
239 virtual void redraw ( );
240
241// Class name
242
243 virtual const char *className ( ) const;
244
245 protected:
246
247// Implementation
248
249 Boolean _pressed;
250 Button _button;
251
252// Event handlers
253
254 virtual void _expose (XEvent*);
255 virtual void _input (XEvent*);
256 virtual void _map ( );
257};
258
259/*
260 ----------------------------------------------------------------------------
261 _XsMotifTitle class
262*/
263
264class _XsMotifTitle : public _XsMotifComponent {
265
266 public:
267
268// Constructor/Destructor
269
270 _XsMotifTitle (const char *name, XsMotifWindow *win);
271 virtual ~_XsMotifTitle ( );
272
273// Title string
274
275 void setTitle (const char *name);
276 const char *title ( ) const;
277
278// Class name
279
280 virtual const char *className ( ) const;
281
282 protected:
283
284// Implementation
285
286 Boolean _pressed;
287 String _titleString;
288 GC _fontGC;
289
290 XFontStruct *_titleFont;
291
292 int _lastW;
293 int _lastH;
294
295// Component life-cycle
296
297 virtual void _componentDestroyed ( );
298
299// Utilities
300
301 virtual void _redraw ( );
302
303// Event handlers
304
305 virtual void _expose (XEvent*);
306 virtual void _input (XEvent*);
307 virtual void _map ( );
308 virtual void _configure (XEvent*);
309
310 private:
311
312// Callbacks
313
314 static void _configureEventHandler (Widget, XtPointer, XEvent*, Boolean*);
315
316// Resources
317
318 static XtResource _resourceList[];
319};
320
321// Inline member functions
322
323inline const char *_XsMotifTitle::title ( ) const
324{
325 return (_titleString);
326}
327
328/*
329 ----------------------------------------------------------------------------
330 _XsMotifIcon class
331*/
332
333class _XsMotifIcon : public _XsMotifComponent {
334
335 public:
336
337// Constructor/Destructor
338
339 _XsMotifIcon (const char *name, XsMotifWindow *win, Widget parent);
340 virtual ~_XsMotifIcon ( );
341
342// Window operations
343
344 virtual void show ( );
345
346// Icon name/pixmap
347
348 void setIconName (const char *name);
349 const char *iconName ( ) const;
350
351 void setPixmap (Pixmap pm);
352 Pixmap pixmap ( ) const;
353
354// Class name
355
356 virtual const char *className ( ) const;
357
358 protected:
359
360// Implementation
361
362 GC _fontGC;
363 GC _pixmapGC;
364
365 Dimension _iconSize;
366 String _iconName;
367 XFontStruct *_iconFont;
368 Pixmap _pixmap;
369 Boolean _freePixmap;
370
371 Dimension _width, _height;
372 Position _iconX, _iconY;
373 Boolean _placed;
374
375// Component life-cycle
376
377 virtual void _componentDestroyed ( );
378
379// Event handlers
380
381 virtual void _expose (XEvent*);
382 virtual void _input (XEvent*);
383 virtual void _map ( );
384
385 private:
386
387// Resources
388
389 static XtResource _resourceList[];
390};
391
392// Inline member-functions
393
394inline const char *_XsMotifIcon::iconName ( ) const
395{
396 return (_iconName);
397}
398
399inline Pixmap _XsMotifIcon::pixmap ( ) const
400{
401 return (_pixmap);
402}
403
404/*
405 ----------------------------------------------------------------------------
406 _XsMotifMenu class
407*/
408
409class _XsMotifMenu : public _XsMotifBase {
410
411 public:
412
413// Constructor/Destructor
414
415 _XsMotifMenu (const char *name, XsMotifWindow *win);
416 virtual ~_XsMotifMenu ( );
417
418// Utilities
419
420 virtual void popup (Boolean atPointer = True);
421
422// Enumerations
423
424 enum Item {
425 NoItem = -1, Restore, Move, Size, Minimize,
426 Maximize, Raise, Lower, Close, Num
427 };
428
429// Class name
430
431 virtual const char *className ( ) const;
432
433 protected:
434
435// Dimensions
436
437 enum { ShadowThickness = 1 };
438 enum { VertTextOffset = 3 };
439 enum { HorizTextOffset = 10 };
440
441// Implementation
442
443 static Cursor _cursor;
444 static Pixmap _stipple;
445 static Display *_dpy;
446
447 Boolean _saveUnder;
448
449 String _strings[Num];
450 XFontStruct *_menuFont;
451
452 GC _fontGC;
453 GC _grayGC;
454 GC _backgroundGC;
455
456 Item _curItem;
457
458// Component life-cycle
459
460 virtual void _componentDestroyed ( );
461
462// Menu event processing
463
464 virtual void _processEvents ( );
465
466// Utilities
467
468 virtual void _processItem (Item item);
469 virtual void _redrawMenu ( );
470
471 void _redrawItem (Item);
472 void _toggleItem (Item, Boolean active = False);
473 Item _trackPointer (XMotionEvent *event);
474
475// Pointer grabs
476
477 Boolean _grabPointer ( );
478 void _ungrabPointer ( );
479
480// Event handlers
481
482 virtual void _map ( );
483
484 private:
485
486// Work procedure
487
488 static Boolean _workProc (XtPointer);
489
490// Resources
491
492 static XtResource _resourceList[];
493 static int _count;
494};
495
496
497/*
498 ----------------------------------------------------------------------------
499 XsMotifWindow class
500*/
501
502class XsMotifWindow : public XsMDIWindow {
503
504 public:
505
506// Constructor/Destructor
507
508 XsMotifWindow (const char *name);
509 virtual ~XsMotifWindow ( );
510
511// Window manipulation
512
513 virtual void raise ( );
514 virtual void lower ( );
515
516 virtual void minimize ( );
517 virtual void maximize ( );
518 virtual void restore ( );
519
520 virtual void close ( );
521
522// Window and icon strings
523
524 void setTitle (const char *name);
525 const char *title ( ) const;
526
527 void setIconName (const char *name);
528 const char *iconName ( ) const;
529
530 void setPixmap (Pixmap pm);
531 Pixmap pixmap ( ) const;
532
533// Window icon handle
534
535 Widget icon ( ) const;
536
537// Menu settings
538
539 void popupMenu (Boolean atPointer = True);
540
541// Utilities
542
543 Boolean maximized ( ) const;
544 Boolean minimized ( ) const;
545
546// Position and size
547
548 virtual void setPosition (Position, Position);
549 virtual void setSize (Dimension, Dimension);
550
551 Dimension minWidth ( ) const;
552 Dimension minHeight ( ) const;
553
554// Class name
555
556 virtual const char *className ( ) const;
557
558 protected:
559
560// Window creation functions
561
562 virtual void _buildClientArea (Widget parent) = 0;
563 virtual void _createWindow (Widget parent);
564
565// Window components
566
567 _XsMotifCorner *_corners[_XsMotifCorner::Max];
568 _XsMotifSide *_sides[_XsMotifSide::Max];
569 _XsMotifButton *_buttons[_XsMotifButton::Max];
570 _XsMotifTitle *_title;
571 _XsMotifIcon *_icon;
572 _XsMotifMenu *_menu;
573
574// Window dimensions
575
576 Dimension _savedWidth, _savedHeight;
577 Position _savedX, _savedY;
578 Dimension _minW, _maxW;
579 Dimension _minH, _maxH;
580
581// Window parameters
582
583 Boolean _showBorder;
584 Boolean _showResize;
585 Boolean _showTitle;
586 Boolean _showMenu;
587 Boolean _showMinimize;
588 Boolean _showMaximize;
589 Boolean _lowerOnIconify;
590
591// Window state
592
593 Boolean _maximized;
594 Boolean _minimized;
595
596// Callbacks
597
598 virtual void _mapEvent ( );
599
600 private:
601
602// Internal event handlers
603
604 static void _mapEventHandler (Widget, XtPointer, XEvent*, Boolean*);
605
606// Resources
607
608 static XtResource _resourceList[];
609};
610
611// Inline member functions
612
613inline Boolean XsMotifWindow::maximized ( ) const
614{
615 return (_maximized);
616}
617
618inline Boolean XsMotifWindow::minimized ( ) const
619{
620 return (_minimized);
621}
622
623inline const char *XsMotifWindow::title ( ) const
624{
625 if (_title != 0)
626 return (_title->title ( ));
627 else
628 return (0);
629}
630
631inline const char *XsMotifWindow::iconName ( ) const
632{
633 if (_icon != 0)
634 return (_icon->iconName ( ));
635 else
636 return (0);
637}
638
639inline Pixmap XsMotifWindow::pixmap ( ) const
640{
641 if (_icon != 0)
642 return (_icon->pixmap ( ));
643 else
644 return (None);
645}
646
647inline Widget XsMotifWindow::icon ( ) const
648{
649 if (_icon != 0)
650 return (_icon->base ( ));
651 else
652 return (0);
653}
654
655inline Dimension XsMotifWindow::minWidth ( ) const
656{
657 return (_minW);
658}
659
660inline Dimension XsMotifWindow::minHeight ( ) const
661{
662 return (_minH);
663}
664
665#endif