]> git.saurik.com Git - wxWidgets.git/blame - src/mac/uma.cpp
wxSocekt now uses wxPostEvent.
[wxWidgets.git] / src / mac / uma.cpp
CommitLineData
72e7876b
SC
1#include <wx/mac/uma.h>
2#include <wx/mac/aga.h>
3
4// init
5
6static bool sUMAHasAppearance = false ;
7static long sUMAAppearanceVersion = 0 ;
8extern int gAGABackgroundColor ;
9bool UMAHasAppearance() { return sUMAHasAppearance ; }
10long UMAGetAppearanceVersion() { return sUMAAppearanceVersion ; }
11
12static bool sUMAHasWindowManager = false ;
13static long sUMAWindowManagerAttr = 0 ;
14
15bool UMAHasWindowManager() { return sUMAHasWindowManager ; }
16long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; }
17
18void UMAInitToolbox( UInt16 inMoreMastersCalls )
19{
20#if !TARGET_CARBON
21 ::MaxApplZone();
22 for (long i = 1; i <= inMoreMastersCalls; i++)
23 ::MoreMasters();
24
25 ::InitGraf(&qd.thePort);
26 ::InitFonts();
27 ::InitWindows();
28 ::InitMenus();
29 ::TEInit();
30 ::InitDialogs(0L);
31 ::FlushEvents(everyEvent, 0);
32 ::InitCursor();
33 long total,contig;
34 PurgeSpace(&total, &contig);
35#else
36 InitMenus() ;
37#endif
38
39#if UMA_USE_APPEARANCE
40 long theAppearance ;
41 if ( Gestalt( gestaltAppearanceAttr, &theAppearance ) == noErr )
42 {
43 sUMAHasAppearance = true ;
44 RegisterAppearanceClient();
45 if ( Gestalt( gestaltAppearanceVersion, &theAppearance ) == noErr )
46 {
47 sUMAAppearanceVersion = theAppearance ;
48 }
49 else
50 {
51 sUMAAppearanceVersion = 0x0100 ;
52 }
53 }
54#endif // UMA_USE_APPEARANCE
55#if UMA_USE_8_6
56#if UMA_USE_WINDOWMGR
57 if ( Gestalt( gestaltWindowMgrAttr, &sUMAWindowManagerAttr ) == noErr )
58 {
59 sUMAHasWindowManager = sUMAWindowManagerAttr & gestaltWindowMgrPresent ;
60 }
61#endif // UMA_USE_WINDOWMGR
62#endif
63}
64
65// process manager
66long UMAGetProcessMode()
67{
68 OSErr err ;
69 ProcessInfoRec processinfo;
70 ProcessSerialNumber procno ;
71
72 procno.highLongOfPSN = NULL ;
73 procno.lowLongOfPSN = kCurrentProcess ;
74 processinfo.processInfoLength = sizeof(ProcessInfoRec);
75 processinfo.processName = NULL;
76 processinfo.processAppSpec = NULL;
77
78 err = ::GetProcessInformation( &procno , &processinfo ) ;
79 wxASSERT( err == noErr ) ;
80 return processinfo.processMode ;
81}
82
83bool UMAGetProcessModeDoesActivateOnFGSwitch()
84{
85 return UMAGetProcessMode() & modeDoesActivateOnFGSwitch ;
86}
87
88// menu manager
89
90void UMASetMenuTitle( MenuRef menu , ConstStr255Param title )
91{
92#if !TARGET_CARBON
93 long size = GetHandleSize( (Handle) menu ) ;
94 const long headersize = 14 ;
95 int oldlen = (**menu).menuData[0] + 1;
96 int newlen = title[0] + 1 ;
97
98 if ( oldlen < newlen )
99 {
100 // enlarge before adjusting
101 SetHandleSize( (Handle) menu , size + (newlen - oldlen ) );
102 }
103
104 if ( oldlen != newlen )
105 memmove( (char*) (**menu).menuData + newlen , (char*) (**menu).menuData + oldlen , size - headersize - oldlen ) ;
106
107 memcpy( (char*) (**menu).menuData , title , newlen ) ;
108 if ( oldlen > newlen )
109 {
110 // shrink after
111 SetHandleSize( (Handle) menu , size + (newlen - oldlen ) ) ;
112 }
113#else
114 SetMenuTitle( menu , title ) ;
115#endif
116}
117
118UInt32 UMAMenuEvent( EventRecord *inEvent )
119{
120 if ( UMAHasAppearance() )
121 {
122 return MenuEvent( inEvent ) ;
123 }
124 else
125 {
126 if ( inEvent->what == keyDown && inEvent->modifiers & cmdKey)
127 {
128 return MenuKey( inEvent->message & charCodeMask ) ;
129 }
130 return NULL ;
131 }
132}
133
134void UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem )
135{
136#if UMA_USE_8_6
137 EnableMenuItem( inMenu , inItem ) ;
138#else
139 EnableItem( inMenu , inItem ) ;
140#endif
141}
142
143void UMADisableMenuItem( MenuRef inMenu , MenuItemIndex inItem )
144{
145#if UMA_USE_8_6
146 DisableMenuItem( inMenu , inItem ) ;
147#else
148 DisableItem( inMenu , inItem ) ;
149#endif
150}
151// quickdraw
152
153#if !TARGET_CARBON
154
155pascal QDGlobalsPtr GetQDGlobalsPtr (void)
156{
157 return QDGlobalsPtr (* (Ptr*) LMGetCurrentA5 ( ) - 0xCA);
158}
159
160#endif
161
162void UMAShowWatchCursor()
163{
164 OSErr err = noErr;
165
166 CursHandle watchFob = GetCursor (watchCursor);
167
168 if (!watchFob)
169 err = nilHandleErr;
170 else
171 {
172 #if TARGET_CARBON
173 Cursor preservedArrow;
174 GetQDGlobalsArrow (&preservedArrow);
175 SetQDGlobalsArrow (*watchFob);
176 InitCursor ( );
177 SetQDGlobalsArrow (&preservedArrow);
178 #else
179 SetCursor (*watchFob);
180 #endif
181 }
182}
183
184void UMAShowArrowCursor()
185{
186#if TARGET_CARBON
187 Cursor arrow;
188 SetCursor (GetQDGlobalsArrow (&arrow));
189#else
190 SetCursor (&(qd.arrow));
191#endif
192}
193
194// window manager
195
196GrafPtr UMAGetWindowPort( WindowRef inWindowRef )
197{
198 wxASSERT( inWindowRef != NULL ) ;
199#if TARGET_CARBON
200 return GetWindowPort( inWindowRef ) ;
201#else
202 return (GrafPtr) inWindowRef ;
203#endif
204}
205
206void UMADisposeWindow( WindowRef inWindowRef )
207{
208 wxASSERT( inWindowRef != NULL ) ;
209 DisposeWindow( inWindowRef ) ;
210}
211
212void UMASetWTitleC( WindowRef inWindowRef , const char *title )
213{
214 Str255 ptitle ;
215 strncpy( (char*)ptitle , title , 96 ) ;
216 ptitle[96] = 0 ;
217 c2pstr( (char*)ptitle ) ;
218 SetWTitle( inWindowRef , ptitle ) ;
219}
220void UMAGetWTitleC( WindowRef inWindowRef , char *title )
221{
222 GetWTitle( inWindowRef , (unsigned char*)title ) ;
223 p2cstr( (unsigned char*)title ) ;
224}
225
226void UMAShowWindow( WindowRef inWindowRef )
227{
228 ShowWindow( inWindowRef ) ;
229}
230
231void UMAHideWindow( WindowRef inWindowRef )
232{
233 HideWindow( inWindowRef) ;
234}
235
236void UMASelectWindow( WindowRef inWindowRef )
237{
238 SelectWindow( inWindowRef ) ;
239}
240
241void UMABringToFront( WindowRef inWindowRef )
242{
243 BringToFront( inWindowRef ) ;
244}
245
246void UMASendBehind( WindowRef inWindowRef , WindowRef behindWindow )
247{
248 SendBehind( inWindowRef , behindWindow ) ;
249}
250
251void UMACloseWindow(WindowRef inWindowRef)
252{
253#if TARGET_CARBON
254#else
255 CloseWindow( inWindowRef ) ;
256#endif
257}
258
259// appearance additions
260
261void UMAActivateControl( ControlHandle inControl )
262{
263 if ( UMAHasAppearance() )
264 {
265 ::ActivateControl( inControl ) ;
266 }
267 else
268 {
269 AGAActivateControl( inControl ) ;
270 }
271}
272
273void UMADrawControl( ControlHandle inControl )
274{
275 if ( UMAHasAppearance() )
276 {
277 ::DrawControlInCurrentPort( inControl ) ;
278 }
279 else
280 {
281 AGADrawControl( inControl ) ;
282 }
283}
284
285void UMAMoveControl( ControlHandle inControl , short x , short y )
286{
287 if ( UMAHasAppearance() )
288 {
289 ::MoveControl( inControl , x , y ) ;
290 }
291 else
292 {
293 AGAMoveControl( inControl , x ,y ) ;
294 }
295}
296
297void UMASizeControl( ControlHandle inControl , short x , short y )
298{
299 if ( UMAHasAppearance() )
300 {
301 ::SizeControl( inControl , x , y ) ;
302 }
303 else
304 {
305 AGASizeControl( inControl , x ,y ) ;
306 }
307}
308
309void UMADeactivateControl( ControlHandle inControl )
310{
311 if ( UMAHasAppearance() )
312 {
313 ::DeactivateControl( inControl ) ;
314 }
315 else
316 {
317 AGADeactivateControl( inControl ) ;
318 }
319}
320
321void UMASetThemeWindowBackground (WindowRef inWindow,
322 ThemeBrush inBrush,
323 Boolean inUpdate){
324 if ( UMAHasAppearance() )
325 {
326 ::SetThemeWindowBackground( inWindow ,inBrush , inUpdate ) ;
327 }
328 else
329 {
330 AGASetThemeWindowBackground( inWindow , inBrush , inUpdate ) ;
331 }
332}
333
334
335ControlHandle UMANewControl(WindowPtr owningWindow,
336 const Rect * boundsRect,
337 ConstStr255Param controlTitle,
338 Boolean initiallyVisible,
339 SInt16 initialValue,
340 SInt16 minimumValue,
341 SInt16 maximumValue,
342 SInt16 procID,
343 SInt32 controlReference)
344{
345 ControlHandle theControl = NULL ;
346 if ( UMAHasAppearance() )
347 {
348 theControl = NewControl( owningWindow , boundsRect , controlTitle , initiallyVisible ,
349 initialValue , minimumValue , maximumValue , procID , controlReference ) ;
350 }
351 else
352 {
353 theControl = AGANewControl( owningWindow , boundsRect , controlTitle , initiallyVisible ,
354 initialValue , minimumValue , maximumValue , procID , controlReference ) ;
355 }
356 return theControl ;
357}
358
359void UMADisposeControl (ControlHandle theControl)
360{
361 if ( UMAHasAppearance() )
362 {
363 ::DisposeControl( theControl ) ;
364 }
365 else
366 {
367 ::DisposeControl( theControl ) ;
368 }
369}
370
371
372void UMAHiliteControl (ControlHandle theControl,
373 ControlPartCode hiliteState)
374 {
375 if ( UMAHasAppearance() )
376 {
377 ::HiliteControl( theControl , hiliteState ) ;
378 }
379 else
380 {
381 ::HiliteControl( theControl , hiliteState ) ;
382 }
383}
384
385
386void UMAShowControl (ControlHandle theControl)
387{
388 if ( UMAHasAppearance() )
389 {
390 ::ShowControl( theControl ) ;
391 }
392 else
393 {
394 ::ShowControl( theControl ) ;
395 }
396}
397
398
399void UMAHideControl (ControlHandle theControl)
400{
401 if ( UMAHasAppearance() )
402 {
403 ::HideControl( theControl ) ;
404 }
405 else
406 {
407 ::HideControl( theControl ) ;
408 }
409}
410
411
412void UMASetControlVisibility (ControlHandle inControl,
413 Boolean inIsVisible,
414 Boolean inDoDraw)
415 {
416 if ( UMAHasAppearance() )
417 {
418 ::SetControlVisibility( inControl , inIsVisible, inDoDraw ) ;
419 }
420}
421
422
423
424bool UMAIsControlActive (ControlHandle inControl)
425{
426 if ( UMAHasAppearance() )
427 {
428 return IsControlActive( inControl ) ;
429 }
430 else
431 return (**inControl).contrlHilite == 0 ;
432}
433
434
435bool UMAIsControlVisible (ControlHandle inControl)
436{
437 if ( UMAHasAppearance() )
438 {
439 return IsControlVisible( inControl ) ;
440 }
441 return true ;
442}
443
444OSErr UMAGetBestControlRect (ControlHandle inControl,
445 Rect * outRect,
446 SInt16 * outBaseLineOffset)
447{
448 if ( UMAHasAppearance() )
449 {
450 return GetBestControlRect( inControl , outRect , outBaseLineOffset ) ;
451 }
452 else
453 {
454 return AGAGetBestControlRect( inControl , outRect , outBaseLineOffset ) ;
455 }
456}
457
458
459OSErr UMASetControlFontStyle (ControlHandle inControl,
460 const ControlFontStyleRec * inStyle)
461{
462 if ( UMAHasAppearance() )
463 {
464 return ::SetControlFontStyle( inControl , inStyle ) ;
465 }
466 else
467 return AGASetControlFontStyle( inControl , inStyle ) ;
468}
469
470
471
472// control hierarchy
473
474OSErr UMACreateRootControl (WindowPtr inWindow,
475 ControlHandle * outControl)
476{
477 if ( UMAHasAppearance() )
478 {
479 return CreateRootControl( inWindow , outControl ) ;
480 }
481 else
482 return AGACreateRootControl( inWindow , outControl ) ;
483}
484
485
486
487OSErr UMAEmbedControl (ControlHandle inControl,
488 ControlHandle inContainer)
489{
490 if ( UMAHasAppearance() )
491 {
492 return EmbedControl( inControl , inContainer ) ;
493 }
494 else
495 return AGAEmbedControl( inControl , inContainer ) ; ;
496}
497
498
499
500// keyboard focus
501OSErr UMASetKeyboardFocus (WindowPtr inWindow,
502 ControlHandle inControl,
503 ControlFocusPart inPart)
504{
505 if ( UMAHasAppearance() )
506 {
507 return SetKeyboardFocus( inWindow , inControl , inPart ) ;
508 }
509 else
510 return AGASetKeyboardFocus( inWindow , inControl , inPart ) ;
511}
512
513
514
515
516// events
517
518ControlPartCode UMAHandleControlClick (ControlHandle inControl,
519 Point inWhere,
520 SInt16 inModifiers,
521 ControlActionUPP inAction)
522{
523 if ( UMAHasAppearance() )
524 {
525 return HandleControlClick( inControl , inWhere , inModifiers , inAction ) ;
526 }
527 else
528 {
529 return AGAHandleControlClick( inControl , inWhere , inModifiers , inAction ) ;
530 }
531}
532
533
534SInt16 UMAHandleControlKey (ControlHandle inControl,
535 SInt16 inKeyCode,
536 SInt16 inCharCode,
537 SInt16 inModifiers)
538{
539 if ( UMAHasAppearance() )
540 {
541 return HandleControlKey( inControl , inKeyCode , inCharCode , inModifiers ) ;
542 }
543 else
544 {
545 return AGAHandleControlKey(inControl , inKeyCode , inCharCode , inModifiers ) ;
546 }
547}
548
549
550
551void UMAIdleControls (WindowPtr inWindow)
552{
553 if ( UMAHasAppearance() )
554 {
555 IdleControls( inWindow ) ;
556 }
557 else
558 {
559 AGAIdleControls( inWindow ) ;
560 }
561}
562
563void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn )
564{
565 if ( UMAHasAppearance() )
566 {
567 UpdateControls( inWindow , inRgn ) ;
568 }
569 else
570 {
571 AGAUpdateControls( inWindow , inRgn ) ;
572 }
573}
574
575OSErr UMAGetRootControl( WindowPtr inWindow , ControlHandle *outControl )
576{
577 if ( UMAHasAppearance() )
578 {
579 return GetRootControl( inWindow , outControl ) ;
580 }
581 else
582 {
583 return AGAGetRootControl( inWindow , outControl ) ;
584 }
585}
586
587
588// handling control data
589
590OSErr UMASetControlData (ControlHandle inControl,
591 ControlPartCode inPart,
592 ResType inTagName,
593 Size inSize,
594 Ptr inData)
595{
596 if ( UMAHasAppearance() )
597 {
598 return SetControlData( inControl , inPart , inTagName , inSize , inData ) ;
599 }
600 else
601 return AGASetControlData( inControl , inPart , inTagName , inSize , inData ) ;
602}
603
604
605
606OSErr UMAGetControlData (ControlHandle inControl,
607 ControlPartCode inPart,
608 ResType inTagName,
609 Size inBufferSize,
610 Ptr outBuffer,
611 Size * outActualSize)
612{
613 if ( UMAHasAppearance() )
614 {
615 return ::GetControlData( inControl , inPart , inTagName , inBufferSize , outBuffer , outActualSize ) ;
616 }
617 else
618 {
619 return AGAGetControlData( inControl , inPart , inTagName , inBufferSize , outBuffer , outActualSize ) ;
620 }
621
622}
623
624
625OSErr UMAGetControlDataSize (ControlHandle inControl,
626 ControlPartCode inPart,
627 ResType inTagName,
628 Size * outMaxSize)
629{
630 if ( UMAHasAppearance() )
631 {
632 return GetControlDataSize( inControl , inPart , inTagName , outMaxSize ) ;
633 }
634 else
635 {
636 return AGAGetControlDataSize( inControl , inPart , inTagName , outMaxSize ) ;
637 }
638}
639
640
641
642
643
644// system 8.0 changes
645
646short UMAFindWindow( Point inPoint , WindowRef *outWindow )
647{
648 // todo add the additional area codes
649 return FindWindow( inPoint , outWindow ) ;
650}
651
652OSStatus UMAGetWindowFeatures( WindowRef inWindowRef , UInt32 *outFeatures )
653{
654#if UMA_USE_WINDOWMGR
655 return GetWindowFeatures( inWindowRef , outFeatures ) ;
656#else
657 return 0 ;
658#endif
659}
660
661OSStatus UMAGetWindowRegion( WindowRef inWindowRef , WindowRegionCode inRegionCode , RgnHandle ioWinRgn )
662{
663#if UMA_USE_WINDOWMGR
664 return GetWindowRegion( inWindowRef , inRegionCode , ioWinRgn ) ;
665#else
666 return 0 ;
667#endif
668}
669
670void UMADrawGrowIcon( WindowRef inWindowRef )
671{
672 DrawGrowIcon( inWindowRef ) ;
673}
674
675OSStatus UMACollapseWindow( WindowRef inWindowRef , Boolean inCollapseIt )
676{
677 return CollapseWindow( inWindowRef , inCollapseIt ) ;
678}
679
680OSStatus UMACollapseAllWindows( Boolean inCollapseEm )
681{
682 return CollapseAllWindows( inCollapseEm ) ;
683}
684
685Boolean UMAIsWindowCollapsed( WindowRef inWindowRef )
686{
687 return IsWindowCollapsed( inWindowRef ) ;
688}
689
690Boolean UMAIsWindowCollapsable( WindowRef inWindowRef )
691{
692 return IsWindowCollapsable( inWindowRef ) ;
693}
694
695// system 8.5 changes<MacWindows.h>
696OSStatus UMACreateNewWindow( WindowClass windowClass , WindowAttributes attributes , const Rect *bounds, WindowRef *outWindow )
697{
698#if UMA_USE_WINDOWMGR
699 if ( UMAHasWindowManager() )
700 {
701 return CreateNewWindow( windowClass , attributes, bounds, outWindow ) ;
702 }
703 else
704#endif
705 {
706 short procID ;
707 if ( UMAHasAppearance() )
708 {
709 switch( windowClass )
710 {
711 case kMovableModalWindowClass :
712 procID = kWindowMovableModalDialogProc;
713 break ;
714 case kDocumentWindowClass :
715 procID = kWindowFullZoomGrowDocumentProc;
716 break ;
717 default :
718 procID = kWindowMovableModalDialogProc;
719 break ;
720 }
721 }
722 else
723 {
724 switch( windowClass )
725 {
726 case kMovableModalWindowClass :
727 procID = movableDBoxProc;
728// procID += kMovableModalDialogVariantCode;
729 break ;
730 case kDocumentWindowClass :
731 procID = zoomDocProc;
732 break ;
733 default :
734 procID = documentProc;
735 break ;
736 }
737 }
738 *outWindow = NewCWindow(nil, bounds, "\p", false, procID, (WindowRef) -1 /*behind*/,
739 attributes & kWindowCloseBoxAttribute , (long)NULL);
740 return noErr ;
741 }
742}
743
744OSStatus UMAGetWindowClass( WindowRef inWindowRef , WindowClass *outWindowClass )
745{
746#if UMA_USE_WINDOWMGR
747 if ( UMAHasWindowManager() )
748 {
749 return GetWindowClass( inWindowRef , outWindowClass ) ;
750 }
751 else
752#endif
753 return kDocumentWindowClass ;
754}
755
756OSStatus UMAGetWindowAttributes( WindowRef inWindowRef , WindowAttributes *outAttributes )
757{
758#if UMA_USE_WINDOWMGR
759 if ( UMAHasWindowManager() )
760 {
761 return GetWindowAttributes( inWindowRef , outAttributes ) ;
762 }
763#endif
764 return kWindowNoAttributes ;
765}
766
767void UMAShowFloatingWindows()
768{
769#if UMA_USE_WINDOWMGR
770 if ( UMAHasWindowManager() )
771 {
772 ShowFloatingWindows() ;
773 }
774#endif
775}
776
777void UMAHideFloatingWindows()
778{
779#if UMA_USE_WINDOWMGR
780 if ( UMAHasWindowManager() )
781 {
782 HideFloatingWindows() ;
783 }
784#endif
785}
786
787Boolean UMAAreFloatingWindowsVisible()
788{
789#if UMA_USE_WINDOWMGR
790 if ( UMAHasWindowManager() )
791 {
792 return AreFloatingWindowsVisible() ;
793 }
794#endif
795 return false ;
796}
797
798WindowRef UMAFrontNonFloatingWindow()
799{
800#if UMA_USE_WINDOWMGR
801 if ( UMAHasWindowManager() )
802 {
803 return FrontNonFloatingWindow() ;
804 }
805 else
806#endif
807 {
808 return FrontWindow() ;
809 }
810}
811
812WindowRef UMAFrontWindow()
813{
814#if UMA_USE_WINDOWMGR
815 if ( UMAHasWindowManager() )
816 {
817 return FrontWindow() ;
818 }
819 else
820#endif
821 {
822 return FrontWindow() ;
823 }
824}
825
826WindowRef UMAGetActiveNonFloatingWindow()
827{
828 return NULL ;
829}
830
831bool UMAIsWindowFloating( WindowRef inWindow )
832{
833 WindowClass cl ;
834
835 UMAGetWindowClass( inWindow , &cl ) ;
836 return cl == kFloatingWindowClass ;
837}
838
839bool UMAIsWindowModal( WindowRef inWindow )
840{
841 WindowClass cl ;
842
843 UMAGetWindowClass( inWindow , &cl ) ;
844 return cl < kFloatingWindowClass ;
845}
846
847// others
848
849void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate )
850{
851 if ( inWindowRef )
852 {
853// bool isHighlighted = IsWindowHighlited( inWindowRef ) ;
854// if ( inActivate != isHightlited )
855 HiliteWindow( inWindowRef , inActivate ) ;
856 }
857}
858