]> git.saurik.com Git - wxWidgets.git/blob - include/wx/osx/carbon/private.h
translating background style BG_PAINT into opaqueness for speed-up of OS redraws...
[wxWidgets.git] / include / wx / osx / carbon / private.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/osx/carbon/private.h
3 // Purpose: Private declarations: as this header is only included by
4 // wxWidgets itself, it may contain identifiers which don't start
5 // with "wx".
6 // Author: Stefan Csomor
7 // Modified by:
8 // Created: 1998-01-01
9 // RCS-ID: $Id$
10 // Copyright: (c) Stefan Csomor
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
13
14 #ifndef _WX_PRIVATE_H_
15 #define _WX_PRIVATE_H_
16
17 #include "wx/osx/core/private.h"
18
19 #include <Carbon/Carbon.h>
20
21 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
22 typedef UInt32 URefCon;
23 typedef SInt32 SRefCon;
24 #endif
25
26 #if wxUSE_GUI
27
28 #include "wx/osx/uma.h"
29
30 #include "wx/listbox.h"
31 #include "wx/osx/dc.h"
32 #include "wx/osx/dcclient.h"
33 #include "wx/osx/dcmemory.h"
34
35 // app.h
36
37 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
38 bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec);
39 #endif
40
41 // TODO REMOVE WXDLLIMPEXP_CORE wxNonOwnedWindow* wxFindWindowFromWXWindow( WXWindow inWindow );
42
43 #endif // wxUSE_GUI
44
45 // filefn.h
46 WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec );
47 WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec );
48
49 // utils.h
50 WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum,
51 OSType folderType,
52 Boolean createFolder);
53 WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum,
54 OSType folderType,
55 Boolean createFolder);
56
57 template<typename T> EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; }
58 template<> inline EventParamType wxMacGetEventParamType<HIShapeRef>() { return typeHIShapeRef; }
59 template<> inline EventParamType wxMacGetEventParamType<RgnHandle>() { return typeQDRgnHandle; }
60 template<> inline EventParamType wxMacGetEventParamType<ControlRef>() { return typeControlRef; }
61 template<> inline EventParamType wxMacGetEventParamType<WindowRef>() { return typeWindowRef; }
62 template<> inline EventParamType wxMacGetEventParamType<MenuRef>() { return typeMenuRef; }
63 template<> inline EventParamType wxMacGetEventParamType<EventRef>() { return typeEventRef; }
64 template<> inline EventParamType wxMacGetEventParamType<Point>() { return typeQDPoint; }
65 template<> inline EventParamType wxMacGetEventParamType<Rect>() { return typeQDRectangle; }
66 template<> inline EventParamType wxMacGetEventParamType<Boolean>() { return typeBoolean; }
67 template<> inline EventParamType wxMacGetEventParamType<SInt16>() { return typeSInt16; }
68 template<> inline EventParamType wxMacGetEventParamType<SInt32>() { return typeSInt32; }
69 template<> inline EventParamType wxMacGetEventParamType<UInt32>() { return typeUInt32; }
70 template<> inline EventParamType wxMacGetEventParamType<RGBColor>() { return typeRGBColor; }
71 template<> inline EventParamType wxMacGetEventParamType<HICommand>() { return typeHICommand; }
72 template<> inline EventParamType wxMacGetEventParamType<HIPoint>() { return typeHIPoint; }
73 template<> inline EventParamType wxMacGetEventParamType<HISize>() { return typeHISize; }
74 template<> inline EventParamType wxMacGetEventParamType<HIRect>() { return typeHIRect; }
75 template<> inline EventParamType wxMacGetEventParamType<void*>() { return typeVoidPtr; }
76 template<> inline EventParamType wxMacGetEventParamType<CFDictionaryRef>() { return typeCFDictionaryRef; }
77 template<> inline EventParamType wxMacGetEventParamType<Collection>() { return typeCollection; }
78 template<> inline EventParamType wxMacGetEventParamType<CGContextRef>() { return typeCGContextRef; }
79 /*
80 These are ambiguous
81 template<> EventParamType wxMacGetEventParamType<GrafPtr>() { return typeGrafPtr; }
82 template<> EventParamType wxMacGetEventParamType<OSStatus>() { return typeOSStatus; }
83 template<> EventParamType wxMacGetEventParamType<CFIndex>() { return typeCFIndex; }
84 template<> EventParamType wxMacGetEventParamType<GWorldPtr>() { return typeGWorldPtr; }
85 */
86
87 class WXDLLIMPEXP_CORE wxMacCarbonEvent
88 {
89
90 public :
91 wxMacCarbonEvent()
92 {
93 m_eventRef = 0;
94 m_release = false;
95 }
96
97 wxMacCarbonEvent( EventRef event , bool release = false )
98 {
99 m_eventRef = event;
100 m_release = release;
101 }
102
103 wxMacCarbonEvent(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone)
104 {
105 m_eventRef = NULL;
106 verify_noerr( MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef) );
107 m_release = true;
108 }
109
110 ~wxMacCarbonEvent()
111 {
112 if ( m_release )
113 ReleaseEvent( m_eventRef );
114 }
115
116 OSStatus Create(UInt32 inClassID,UInt32 inKind,EventTime inWhen = 0 /*now*/,EventAttributes inAttributes=kEventAttributeNone)
117 {
118 verify( (m_eventRef == NULL) || m_release );
119 if ( m_eventRef && m_release )
120 {
121 ReleaseEvent( m_eventRef );
122 m_release = false;
123 m_eventRef = NULL;
124 }
125 OSStatus err = MacCreateEvent( NULL , inClassID, inKind,inWhen,inAttributes,&m_eventRef);
126 if ( err == noErr )
127 m_release = true;
128 return err;
129 }
130
131 OSStatus GetParameter( EventParamName inName, EventParamType inDesiredType, UInt32 inBufferSize, void * outData);
132
133 template <typename T> OSStatus GetParameter( EventParamName inName, EventParamType type , T *data )
134 {
135 return GetParameter( inName, type , sizeof( T ) , data );
136 }
137 template <typename T> OSStatus GetParameter( EventParamName inName, T *data )
138 {
139 return GetParameter<T>( inName, wxMacGetEventParamType<T>() , data );
140 }
141
142 template <typename T> T GetParameter( EventParamName inName )
143 {
144 T value;
145 verify_noerr( GetParameter<T>( inName, &value ) );
146 return value;
147 }
148 template <typename T> T GetParameter( EventParamName inName, EventParamType inDesiredType )
149 {
150 T value;
151 verify_noerr( GetParameter<T>( inName, inDesiredType , &value ) );
152 return value;
153 }
154
155 OSStatus SetParameter( EventParamName inName, EventParamType inType, UInt32 inSize, const void * inData);
156 template <typename T> OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T *data )
157 {
158 return SetParameter( inName, inDesiredType , sizeof( T ) , data );
159 }
160 template <typename T> OSStatus SetParameter( EventParamName inName, EventParamType inDesiredType , const T& data )
161 {
162 return SetParameter<T>( inName, inDesiredType , &data );
163 }
164 template <typename T> OSStatus SetParameter( EventParamName inName, const T *data )
165 {
166 return SetParameter<T>( inName, wxMacGetEventParamType<T>() , data );
167 }
168 template <typename T> OSStatus SetParameter( EventParamName inName, const T& data )
169 {
170 return SetParameter<T>( inName, wxMacGetEventParamType<T>() , &data );
171 }
172 UInt32 GetClass()
173 {
174 return ::GetEventClass( m_eventRef );
175 }
176 UInt32 GetKind()
177 {
178 return ::GetEventKind( m_eventRef );
179 }
180 EventTime GetTime()
181 {
182 return ::GetEventTime( m_eventRef );
183 }
184 UInt32 GetTicks()
185 {
186 return EventTimeToTicks( GetTime() );
187 }
188 OSStatus SetCurrentTime( )
189 {
190 return ::SetEventTime( m_eventRef , GetCurrentEventTime() );
191 }
192 OSStatus SetTime( EventTime when )
193 {
194 return ::SetEventTime( m_eventRef , when );
195 }
196 operator EventRef () { return m_eventRef; }
197
198 bool IsValid() { return m_eventRef != 0; }
199 protected :
200 EventRef m_eventRef;
201 bool m_release;
202 };
203
204 #if wxUSE_GUI
205
206 class WXDLLIMPEXP_FWD_CORE wxMacToolTipTimer ;
207
208 class WXDLLIMPEXP_CORE wxMacToolTip
209 {
210 public :
211 wxMacToolTip() ;
212 ~wxMacToolTip() ;
213
214 void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ;
215 void Draw() ;
216 void Clear() ;
217
218 long GetMark()
219 { return m_mark ; }
220
221 bool IsShown()
222 { return m_shown ; }
223
224 private :
225 wxString m_label ;
226 wxPoint m_position ;
227 Rect m_rect ;
228 WindowRef m_window ;
229 PicHandle m_backpict ;
230 bool m_shown ;
231 long m_mark ;
232 #if wxUSE_TIMER
233 wxMacToolTipTimer* m_timer ;
234 #endif
235 wxCFStringRef m_helpTextRef ;
236 } ;
237
238 // Quartz
239
240 WXDLLIMPEXP_CORE void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 );
241 WXDLLIMPEXP_CORE void wxMacReleaseBitmapButton( ControlButtonContentInfo*info );
242
243 #define MAC_WXHBITMAP(a) (GWorldPtr(a))
244 #define MAC_WXHMETAFILE(a) (PicHandle(a))
245 #define MAC_WXHICON(a) (IconRef(a))
246 #define MAC_WXHCURSOR(a) (CursHandle(a))
247 #define MAC_WXHRGN(a) (RgnHandle(a))
248 #define MAC_WXHWND(a) (WindowPtr(a))
249 #define MAC_WXRECPTR(a) ((Rect*)a)
250 #define MAC_WXPOINTPTR(a) ((Point*)a)
251 #define MAC_WXHMENU(a) ((MenuHandle)a)
252
253 struct wxOpaqueWindowRef
254 {
255 wxOpaqueWindowRef( WindowRef ref ) { m_data = ref; }
256 operator WindowRef() { return m_data; }
257 private :
258 WindowRef m_data;
259 };
260
261 WXDLLIMPEXP_CORE void wxMacRectToNative( const wxRect *wx , Rect *n );
262 WXDLLIMPEXP_CORE void wxMacNativeToRect( const Rect *n , wxRect* wx );
263 WXDLLIMPEXP_CORE void wxMacPointToNative( const wxPoint* wx , Point *n );
264 WXDLLIMPEXP_CORE void wxMacNativeToPoint( const Point *n , wxPoint* wx );
265
266 WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef);
267
268 WXDLLIMPEXP_CORE int wxMacCommandToId( UInt32 macCommandId );
269 WXDLLIMPEXP_CORE UInt32 wxIdToMacCommand( int wxId );
270 WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item );
271
272 WXDLLIMPEXP_CORE pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data );
273 WXDLLIMPEXP_CORE Rect wxMacGetBoundsForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true );
274
275 ControlActionUPP GetwxMacLiveScrollbarActionProc();
276
277 // additional optional event defines
278
279 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
280 enum {
281 kEventControlFocusPartChanged = 164
282 };
283 #endif
284
285 class WXDLLIMPEXP_CORE wxMacControl : public wxWidgetImpl
286 {
287 public :
288 wxMacControl( wxWindowMac* peer , bool isRootControl = false );
289 wxMacControl() ;
290 virtual ~wxMacControl();
291
292 void Init();
293
294 void SetReferenceInNativeControl();
295 static wxMacControl* GetReferenceFromNativeControl(ControlRef control);
296
297 virtual ControlRef * GetControlRefAddr() { return &m_controlRef; }
298 virtual ControlRef GetControlRef() const { return m_controlRef; }
299
300 virtual WXWidget GetWXWidget() const { return (WXWidget) m_controlRef; }
301
302 virtual bool IsVisible() const;
303
304 virtual void Raise();
305
306 virtual void Lower();
307
308 virtual void ScrollRect( const wxRect *rect, int dx, int dy );
309
310 virtual void GetContentArea( int &left , int &top , int &width , int &height ) const;
311 virtual void Move(int x, int y, int width, int height);
312 virtual void GetPosition( int &x, int &y ) const;
313 virtual void GetSize( int &width, int &height ) const;
314 virtual void SetControlSize( wxWindowVariant variant ) ;
315
316 // where is in native window relative coordinates
317 virtual void SetNeedsDisplay( const wxRect* where = NULL );
318 virtual bool GetNeedsDisplay() const;
319
320 virtual bool CanFocus() const;
321 // return true if successful
322 virtual bool SetFocus();
323 virtual bool HasFocus() const;
324
325 void RemoveFromParent();
326 void Embed( wxWidgetImpl *parent );
327
328 void SetDefaultButton( bool isDefault );
329 void PerformClick();
330 void SetLabel( const wxString& title, wxFontEncoding encoding );
331
332 void SetCursor( const wxCursor & cursor );
333 void CaptureMouse();
334 void ReleaseMouse();
335
336 wxInt32 GetValue() const;
337 void SetValue( wxInt32 v );
338 wxBitmap GetBitmap() const;
339 void SetBitmap( const wxBitmap& bitmap );
340 void SetBitmapPosition( wxDirection dir );
341 void SetupTabs( const wxNotebook &notebook );
342
343 void GetBestRect( wxRect *r ) const;
344 bool IsEnabled() const;
345 void Enable( bool enable );
346 bool ButtonClickDidStateChange() { return false ;}
347 void SetMinimum( wxInt32 v );
348 void SetMaximum( wxInt32 v );
349 void PulseGauge() ;
350 void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
351
352 // temp convenience methods
353
354 void GetBestRect( Rect *r ) const;
355 /*
356 void operator= (ControlRef c) { m_controlRef = c; }
357 operator ControlRef () { return m_controlRef; }
358 operator ControlRef * () { return &m_controlRef; }
359 */
360 // accessing data and values
361
362 virtual OSStatus SetData( ControlPartCode inPartCode , ResType inTag , Size inSize , const void * inData );
363 virtual OSStatus GetData( ControlPartCode inPartCode , ResType inTag , Size inBufferSize , void * inOutBuffer , Size * outActualSize ) const;
364 virtual OSStatus GetDataSize( ControlPartCode inPartCode , ResType inTag , Size * outActualSize ) const;
365 virtual OSStatus SendEvent( EventRef ref , OptionBits inOptions = 0 );
366 virtual OSStatus SendHICommand( HICommand &command , OptionBits inOptions = 0 );
367
368 virtual OSStatus SendHICommand( UInt32 commandID , OptionBits inOptions = 0 );
369
370 virtual wxInt32 GetMaximum() const;
371 virtual wxInt32 GetMinimum() const;
372
373 virtual void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum );
374 virtual void SetRange( SInt32 minimum , SInt32 maximum );
375
376 // templated helpers
377
378 Size GetDataSize( ControlPartCode inPartCode , ResType inTag ) const
379 {
380 Size sz;
381 verify_noerr( GetDataSize( inPartCode , inTag , &sz ) );
382 return sz;
383 }
384 template <typename T> OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T *data )
385 {
386 return SetData( inPartCode , inTag , sizeof( T ) , data );
387 }
388 template <typename T> OSStatus SetData( ControlPartCode inPartCode , ResType inTag , const T& data )
389 {
390 return SetData( inPartCode , inTag , sizeof( T ) , &data );
391 }
392 template <typename T> OSStatus SetData( ResType inTag , const T *data )
393 {
394 return SetData( kControlEntireControl , inTag , sizeof( T ) , data );
395 }
396 template <typename T> OSStatus SetData( ResType inTag , const T& data )
397 {
398 return SetData( kControlEntireControl , inTag , sizeof( T ) , &data );
399 }
400 template <typename T> OSStatus GetData( ControlPartCode inPartCode , ResType inTag , T *data ) const
401 {
402 Size dummy;
403 return GetData( inPartCode , inTag , sizeof( T ) , data , &dummy );
404 }
405 template <typename T> T GetData( ControlPartCode inPartCode , ResType inTag ) const
406 {
407 T value;
408 OSStatus err = GetData<T>( inPartCode , inTag , &value );
409
410 if ( err != noErr )
411 {
412 wxFAIL_MSG( wxString::Format(wxT("GetData Failed for Part [%i] and Tag [%i]"),
413 inPartCode, (int)inTag) );
414 }
415
416 return value;
417 }
418 template <typename T> OSStatus GetData( ResType inTag , T *data ) const
419 {
420 Size dummy;
421 return GetData( kControlEntireControl , inTag , sizeof( T ) , data , &dummy );
422 }
423 template <typename T> T GetData( ResType inTag ) const
424 {
425 return GetData<T>( kControlEntireControl , inTag );
426 }
427
428 // Flash the control for the specified amount of time
429
430 virtual void VisibilityChanged( bool shown );
431 virtual void SuperChangedPosition();
432
433
434 virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
435 virtual void SetBackgroundColour( const wxColour& col );
436 virtual bool SetBackgroundStyle(wxBackgroundStyle style);
437 virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers );
438 void SetActionProc( ControlActionUPP actionProc );
439 SInt32 GetViewSize() const;
440
441 virtual void SetVisibility( bool visible );
442
443 virtual bool IsActive() const;
444
445 // invalidates this control and all children
446 virtual void InvalidateWithChildren();
447 virtual void SetDrawingEnabled( bool enable );
448
449 // in native parent window relative coordinates
450
451 virtual void GetRectInWindowCoords( Rect *r );
452
453
454 virtual void GetFeatures( UInt32 *features );
455
456 // to be moved into a tab control class
457
458 virtual OSStatus SetTabEnabled( SInt16 tabNo , bool enable );
459
460 virtual void InstallEventHandler( WXWidget control = NULL );
461 protected :
462 WXEVENTHANDLERREF m_macControlEventHandler ;
463 ControlRef m_controlRef;
464 wxFont m_font;
465 long m_windowStyle;
466 DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacControl)
467 };
468
469 // ============================================================================
470 // DataBrowser Wrapper
471 // ============================================================================
472 //
473 // basing on DataBrowserItemIDs
474 //
475
476 class WXDLLIMPEXP_CORE wxMacDataBrowserControl : public wxMacControl
477 {
478 public :
479 wxMacDataBrowserControl( wxWindow* peer, const wxPoint& pos, const wxSize& size, long style);
480 wxMacDataBrowserControl() {}
481
482 OSStatus SetCallbacks( const DataBrowserCallbacks *callbacks );
483
484 OSStatus GetItemCount( DataBrowserItemID container,
485 Boolean recurse,
486 DataBrowserItemState state,
487 ItemCount *numItems) const;
488
489 OSStatus GetItems( DataBrowserItemID container,
490 Boolean recurse,
491 DataBrowserItemState state,
492 Handle items) const;
493
494
495 OSStatus AddColumn( DataBrowserListViewColumnDesc *columnDesc,
496 DataBrowserTableViewColumnIndex position );
497
498 OSStatus RemoveColumn( DataBrowserTableViewColumnIndex position );
499
500 OSStatus AutoSizeColumns();
501
502 OSStatus SetHasScrollBars( bool horiz, bool vert );
503 OSStatus SetHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle );
504
505 OSStatus SetHeaderButtonHeight( UInt16 height );
506 OSStatus GetHeaderButtonHeight( UInt16 *height );
507
508 OSStatus UpdateItems( DataBrowserItemID container, UInt32 numItems,
509 const DataBrowserItemID *items,
510 DataBrowserPropertyID preSortProperty,
511 DataBrowserPropertyID propertyID ) const;
512
513 OSStatus AddItems( DataBrowserItemID container, UInt32 numItems,
514 const DataBrowserItemID *items,
515 DataBrowserPropertyID preSortProperty );
516 OSStatus RemoveItems( DataBrowserItemID container, UInt32 numItems,
517 const DataBrowserItemID *items,
518 DataBrowserPropertyID preSortProperty );
519 OSStatus RevealItem( DataBrowserItemID item,
520 DataBrowserPropertyID propertyID,
521 DataBrowserRevealOptions options ) const;
522
523 OSStatus SetSelectionFlags( DataBrowserSelectionFlags );
524 OSStatus GetSelectionAnchor( DataBrowserItemID *first, DataBrowserItemID *last ) const;
525 bool IsItemSelected( DataBrowserItemID item ) const;
526 OSStatus SetSelectedItems( UInt32 numItems,
527 const DataBrowserItemID *items,
528 DataBrowserSetOption operation );
529
530 OSStatus GetItemID( DataBrowserTableViewRowIndex row,
531 DataBrowserItemID * item ) const;
532 OSStatus GetItemRow( DataBrowserItemID item,
533 DataBrowserTableViewRowIndex * row ) const;
534
535 OSStatus SetDefaultRowHeight( UInt16 height );
536 OSStatus GetDefaultRowHeight( UInt16 * height ) const;
537
538 OSStatus SetRowHeight( DataBrowserItemID item , UInt16 height);
539 OSStatus GetRowHeight( DataBrowserItemID item , UInt16 *height) const;
540
541 OSStatus GetColumnWidth( DataBrowserPropertyID column , UInt16 *width ) const;
542 OSStatus SetColumnWidth( DataBrowserPropertyID column , UInt16 width );
543
544 OSStatus GetDefaultColumnWidth( UInt16 *width ) const;
545 OSStatus SetDefaultColumnWidth( UInt16 width );
546
547 OSStatus GetColumnCount( UInt32* numColumns) const;
548
549 OSStatus GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id );
550
551 OSStatus GetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex *position) const;
552 OSStatus SetColumnPosition( DataBrowserPropertyID column, DataBrowserTableViewColumnIndex position);
553
554 OSStatus GetScrollPosition( UInt32 *top , UInt32 *left ) const;
555 OSStatus SetScrollPosition( UInt32 top , UInt32 left );
556
557 OSStatus GetSortProperty( DataBrowserPropertyID *column ) const;
558 OSStatus SetSortProperty( DataBrowserPropertyID column );
559
560 OSStatus GetSortOrder( DataBrowserSortOrder *order ) const;
561 OSStatus SetSortOrder( DataBrowserSortOrder order );
562
563 OSStatus GetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags *flags ) const;
564 OSStatus SetPropertyFlags( DataBrowserPropertyID property, DataBrowserPropertyFlags flags );
565
566 OSStatus GetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc ) const;
567 OSStatus SetHeaderDesc( DataBrowserPropertyID property, DataBrowserListViewHeaderDesc *desc );
568
569 OSStatus SetDisclosureColumn( DataBrowserPropertyID property , Boolean expandableRows );
570
571 OSStatus GetItemPartBounds( DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect * bounds );
572 protected :
573
574 static pascal void DataBrowserItemNotificationProc(
575 ControlRef browser,
576 DataBrowserItemID itemID,
577 DataBrowserItemNotification message,
578 DataBrowserItemDataRef itemData );
579
580 virtual void ItemNotification(
581 DataBrowserItemID itemID,
582 DataBrowserItemNotification message,
583 DataBrowserItemDataRef itemData) = 0;
584
585 static pascal OSStatus DataBrowserGetSetItemDataProc(
586 ControlRef browser,
587 DataBrowserItemID itemID,
588 DataBrowserPropertyID property,
589 DataBrowserItemDataRef itemData,
590 Boolean changeValue );
591
592 virtual OSStatus GetSetItemData(
593 DataBrowserItemID itemID,
594 DataBrowserPropertyID property,
595 DataBrowserItemDataRef itemData,
596 Boolean changeValue ) = 0;
597
598 static pascal Boolean DataBrowserCompareProc(
599 ControlRef browser,
600 DataBrowserItemID itemOneID,
601 DataBrowserItemID itemTwoID,
602 DataBrowserPropertyID sortProperty);
603
604 virtual Boolean CompareItems(DataBrowserItemID itemOneID,
605 DataBrowserItemID itemTwoID,
606 DataBrowserPropertyID sortProperty) = 0;
607 DECLARE_ABSTRACT_CLASS(wxMacDataBrowserControl)
608 };
609
610 // ============================================================================
611 // Higher-level Databrowser
612 // ============================================================================
613 //
614 // basing on data item objects
615 //
616
617 // forward decl
618
619 class wxMacDataItemBrowserControl;
620 class wxMacListBoxItem;
621
622 const DataBrowserPropertyID kTextColumnId = 1024;
623 const DataBrowserPropertyID kNumericOrderColumnId = 1025;
624
625 // for multi-column controls, we will use this + the column ID to identify the
626 // column. We don't use kTextColumnId there, and ideally the two should merge.
627 const DataBrowserPropertyID kMinColumnId = 1050;
628
629 // base API for high-level databrowser operations
630
631 // base class for databrowser items
632
633 enum DataItemType {
634 DataItem_Text
635 };
636
637 /*
638 class WXDLLIMPEXP_CORE wxMacDataItem
639 {
640 public :
641 wxMacDataItem();
642 virtual ~wxMacDataItem();
643 } ;
644 */
645
646 class WXDLLIMPEXP_CORE wxMacDataItem
647 {
648 public :
649 wxMacDataItem();
650 virtual ~wxMacDataItem();
651
652 virtual bool IsLessThan(wxMacDataItemBrowserControl *owner ,
653 const wxMacDataItem*,
654 DataBrowserPropertyID property) const;
655
656 // returns true if access was successful, otherwise false
657 virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner ,
658 DataBrowserPropertyID property,
659 DataBrowserItemDataRef itemData,
660 bool changeValue );
661
662 virtual void Notification(wxMacDataItemBrowserControl *owner ,
663 DataBrowserItemNotification message,
664 DataBrowserItemDataRef itemData ) const;
665
666 void SetOrder( SInt32 order );
667 SInt32 GetOrder() const;
668
669 protected :
670 SInt32 m_order;
671
672 };
673
674 enum ListSortOrder {
675 SortOrder_None,
676 SortOrder_Text_Ascending,
677 SortOrder_Text_Descending
678 };
679
680 typedef wxMacDataItem* wxMacDataItemPtr;
681 const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL;
682 typedef void * wxListColumnId ;
683
684 WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE);
685
686 class WXDLLIMPEXP_CORE wxMacDataItemBrowserControl : public wxMacDataBrowserControl
687 {
688 public :
689 wxMacDataItemBrowserControl( wxWindow* peer , const wxPoint& pos, const wxSize& size, long style);
690 wxMacDataItemBrowserControl() {}
691 // create a list item (can be a subclass of wxMacListBoxItem)
692
693 unsigned int GetItemCount(const wxMacDataItem* container, bool recurse , DataBrowserItemState state) const;
694 void GetItems(const wxMacDataItem* container, bool recurse ,
695 DataBrowserItemState state, wxArrayMacDataItemPtr &items ) const;
696
697 unsigned int GetSelectedItemCount( const wxMacDataItem* container, bool recurse ) const;
698
699 unsigned int GetLineFromItem(const wxMacDataItem *item) const;
700 wxMacDataItem * GetItemFromLine(unsigned int n) const;
701
702 void UpdateItem(const wxMacDataItem *container, const wxMacDataItem *item,
703 DataBrowserPropertyID property) const;
704 void UpdateItems(const wxMacDataItem *container, wxArrayMacDataItemPtr &items,
705 DataBrowserPropertyID property) const;
706
707 void InsertColumn(int colId, DataBrowserPropertyType colType,
708 const wxString& title, SInt16 just = teFlushDefault, int defaultWidth = -1);
709
710 int GetColumnWidth(int colId);
711 void SetColumnWidth(int colId, int width);
712
713 void AddItem(wxMacDataItem *container, wxMacDataItem *item);
714 void AddItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items );
715
716 void RemoveAllItems(wxMacDataItem *container);
717 void RemoveItem(wxMacDataItem *container, wxMacDataItem* item);
718 void RemoveItems(wxMacDataItem *container, wxArrayMacDataItemPtr &items);
719
720 void SetSelectedItem( wxMacDataItem* item , DataBrowserSetOption option);
721 void SetSelectedItems( wxArrayMacDataItemPtr &items , DataBrowserSetOption option);
722 void SetSelectedAllItems( DataBrowserSetOption option);
723 Boolean IsItemSelected( const wxMacDataItem* item) const;
724
725 void RevealItem( wxMacDataItem* item, DataBrowserRevealOptions options);
726
727 void GetSelectionAnchor( wxMacDataItemPtr* first , wxMacDataItemPtr* last) const;
728
729 // add and remove
730
731 virtual void MacDelete( unsigned int n );
732 virtual void MacInsert( unsigned int n, wxMacDataItem* item);
733 virtual void MacClear();
734
735 // accessing content
736
737 virtual unsigned int MacGetCount() const;
738
739 public :
740
741 // as we are getting the same events for human and API selection we have to suppress
742 // events in the latter case, since this will be used from many subclasses we keep it here
743
744 bool IsSelectionSuppressed() const { return m_suppressSelection; }
745 bool SuppressSelection( bool suppress );
746
747 // client data
748
749 virtual wxClientDataType GetClientDataType() const;
750 virtual void SetClientDataType(wxClientDataType clientDataItemsType);
751 //virtual ListSortOrder GetSortOrder() const;
752 //virtual void SetSortOrder(const ListSortOrder sort);
753
754
755
756 protected:
757
758 ListSortOrder m_sortOrder;
759 wxClientDataType m_clientDataItemsType;
760
761 // ID aware base methods, should be 'final' ie not changed in subclasses
762
763 virtual Boolean CompareItems(DataBrowserItemID itemOneID,
764 DataBrowserItemID itemTwoID,
765 DataBrowserPropertyID sortProperty);
766
767 virtual OSStatus GetSetItemData(DataBrowserItemID itemID,
768 DataBrowserPropertyID property,
769 DataBrowserItemDataRef itemData,
770 Boolean changeValue );
771
772 virtual void ItemNotification(
773 DataBrowserItemID itemID,
774 DataBrowserItemNotification message,
775 DataBrowserItemDataRef itemData);
776
777
778 private :
779
780 bool m_suppressSelection;
781 DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataItemBrowserControl)
782 };
783
784 class WXDLLIMPEXP_CORE wxMacDataItemBrowserSelectionSuppressor
785 {
786 public :
787 wxMacDataItemBrowserSelectionSuppressor(wxMacDataItemBrowserControl *browser);
788 ~wxMacDataItemBrowserSelectionSuppressor();
789
790 private :
791
792 bool m_former;
793 wxMacDataItemBrowserControl* m_browser;
794 };
795
796 // ============================================================================
797 // platform listbox implementation
798 // ============================================================================
799
800 // exposed for reuse in wxCheckListBox
801
802 class WXDLLIMPEXP_CORE wxMacListBoxItem : public wxMacDataItem
803 {
804 public :
805 wxMacListBoxItem();
806
807 virtual ~wxMacListBoxItem();
808
809 virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner ,
810 DataBrowserPropertyID property,
811 DataBrowserItemDataRef itemData,
812 bool changeValue );
813
814 virtual void Notification(wxMacDataItemBrowserControl *owner ,
815 DataBrowserItemNotification message,
816 DataBrowserItemDataRef itemData ) const;
817 protected :
818 };
819
820 class WXDLLIMPEXP_CORE wxMacDataBrowserColumn : public wxListWidgetColumn
821 {
822 public :
823 wxMacDataBrowserColumn( DataBrowserPropertyID propertyId, DataBrowserPropertyType colType, bool editable )
824 : m_property(propertyId), m_editable(editable), m_type( colType )
825 {
826 }
827 ~wxMacDataBrowserColumn()
828 {
829 }
830 DataBrowserPropertyID GetProperty() const { return m_property ; }
831
832 bool IsEditable() const { return m_editable; }
833
834 DataBrowserPropertyType GetType() const { return m_type; }
835
836 protected :
837 DataBrowserPropertyID m_property;
838 bool m_editable;
839 DataBrowserPropertyType m_type;
840 } ;
841
842 WX_DEFINE_ARRAY_PTR(wxMacDataBrowserColumn *, wxArrayMacDataBrowserColumns);
843
844
845 class WXDLLIMPEXP_CORE wxMacDataBrowserCellValue : public wxListWidgetCellValue
846 {
847 public :
848 wxMacDataBrowserCellValue(DataBrowserItemDataRef data) : m_data(data) {}
849 virtual ~wxMacDataBrowserCellValue() {}
850
851 virtual void Set( CFStringRef value );
852 virtual void Set( const wxString& value );
853 virtual void Set( int value ) ;
854 virtual void Check( bool check );
855
856 virtual int GetIntValue() const ;
857 virtual wxString GetStringValue() const ;
858 protected :
859 DataBrowserItemDataRef m_data;
860 } ;
861
862
863 class WXDLLIMPEXP_CORE wxMacDataBrowserListControl : public wxMacDataItemBrowserControl, public wxListWidgetImpl
864 {
865 public:
866 wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style );
867 wxMacDataBrowserListControl() {}
868 virtual ~wxMacDataBrowserListControl();
869
870 // wxListWidgetImpl Methods
871
872 wxListWidgetColumn* InsertTextColumn( unsigned int pos, const wxString& title, bool editable = false,
873 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
874 wxListWidgetColumn* InsertCheckColumn( unsigned int pos , const wxString& title, bool editable = false,
875 wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
876
877 wxMacDataBrowserColumn* DoInsertColumn( unsigned int pos, DataBrowserPropertyID property,
878 const wxString& title, bool editable,
879 DataBrowserPropertyType colType, SInt16 just, int width );
880 // add and remove
881
882 virtual void ListDelete( unsigned int n );
883 virtual void ListInsert( unsigned int n );
884 virtual void ListClear();
885
886 // selecting
887
888 virtual void ListDeselectAll();
889 virtual void ListSetSelection( unsigned int n, bool select, bool multi = false );
890 virtual int ListGetSelection() const;
891 virtual int ListGetSelections( wxArrayInt& aSelections ) const;
892 virtual bool ListIsSelected( unsigned int n ) const;
893
894 // display
895
896 virtual void ListScrollTo( unsigned int n );
897
898 // accessing content
899
900 virtual unsigned int ListGetCount() const;
901
902 virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL );
903 virtual void UpdateLineToEnd( unsigned int n) ;
904
905 // pointing back
906
907 wxMacDataBrowserColumn* GetColumnFromProperty( DataBrowserPropertyID );
908
909 protected:
910 virtual void ItemNotification(
911 DataBrowserItemID itemID,
912 DataBrowserItemNotification message,
913 DataBrowserItemDataRef itemData);
914
915 private:
916 wxArrayMacDataBrowserColumns m_columns;
917 int m_nextColumnId ;
918
919 DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserListControl)
920 };
921
922 // ============================================================================
923 // graphics implementation
924 // ============================================================================
925
926 // draw the image 'upside down' corrected as HIViewDrawCGImage does
927
928 OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
929 CGContextRef inContext,
930 const HIRect * inBounds,
931 CGImageRef inImage) ;
932
933 CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
934
935 #endif // wxUSE_GUI
936
937 #define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \
938 UPP Get##x() \
939 { \
940 static UPP sHandler = NULL; \
941 if ( sHandler == NULL ) \
942 sHandler = New##UPP( x ); \
943 return sHandler; \
944 }
945
946 //---------------------------------------------------------------------------
947 // wxMac string conversions
948 //---------------------------------------------------------------------------
949
950 void wxMacSetupConverters();
951 void wxMacCleanupConverters();
952
953 // utils.cpp
954
955 // filefn.cpp
956
957 WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL );
958 WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef );
959 WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname );
960
961 //---------------------------------------------------------------------------
962 // cocoa bridging utilities
963 //---------------------------------------------------------------------------
964
965 bool wxMacInitCocoa();
966
967 typedef Cursor ClassicCursor;
968
969 // -------------
970 // Common to all
971 // -------------
972
973 // Cursor support
974
975 const short kwxCursorBullseye = 0;
976 const short kwxCursorBlank = 1;
977 const short kwxCursorPencil = 2;
978 const short kwxCursorMagnifier = 3;
979 const short kwxCursorNoEntry = 4;
980 const short kwxCursorPaintBrush = 5;
981 const short kwxCursorPointRight = 6;
982 const short kwxCursorPointLeft = 7;
983 const short kwxCursorQuestionArrow = 8;
984 const short kwxCursorRightArrow = 9;
985 const short kwxCursorSizeNS = 10;
986 const short kwxCursorSize = 11;
987 const short kwxCursorSizeNESW = 12;
988 const short kwxCursorSizeNWSE = 13;
989 const short kwxCursorRoller = 14;
990 const short kwxCursorLast = kwxCursorRoller;
991
992 // exposing our fallback cursor map
993
994 extern ClassicCursor gMacCursors[];
995
996 //
997 //
998 //
999
1000 #if wxUSE_GUI
1001
1002 class wxNonOwnedWindowCarbonImpl : public wxNonOwnedWindowImpl
1003 {
1004 public :
1005 wxNonOwnedWindowCarbonImpl( wxNonOwnedWindow* nonownedwnd) ;
1006
1007 wxNonOwnedWindowCarbonImpl();
1008 virtual ~wxNonOwnedWindowCarbonImpl();
1009
1010 virtual void WillBeDestroyed() ;
1011 void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
1012 long style, long extraStyle, const wxString& name ) ;
1013 void Create( wxWindow* parent, WXWindow nativeWindow );
1014
1015 WXWindow GetWXWindow() const;
1016 void Raise();
1017 void Lower();
1018 bool Show(bool show);
1019 bool ShowWithEffect(bool show, wxShowEffect effect, unsigned timeout);
1020
1021
1022 void Update();
1023 bool SetTransparent(wxByte alpha);
1024 bool SetBackgroundColour(const wxColour& col );
1025 void SetExtraStyle( long exStyle );
1026 bool SetBackgroundStyle(wxBackgroundStyle style);
1027 bool CanSetTransparent();
1028 void MoveWindow(int x, int y, int width, int height);
1029 void GetPosition( int &x, int &y ) const;
1030 void GetSize( int &width, int &height ) const;
1031 void GetContentArea( int &left , int &top , int &width , int &height ) const;
1032
1033 bool SetShape(const wxRegion& region);
1034
1035 virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) ;
1036
1037 virtual bool IsMaximized() const;
1038
1039 virtual bool IsIconized() const;
1040
1041 virtual void Iconize( bool iconize );
1042
1043 virtual void Maximize(bool maximize);
1044
1045 virtual bool IsFullScreen() const;
1046
1047 virtual bool ShowFullScreen(bool show, long style);
1048
1049 virtual void ShowWithoutActivating();
1050
1051 virtual void RequestUserAttention(int flags);
1052
1053 virtual void ScreenToWindow( int *x, int *y );
1054
1055 virtual void WindowToScreen( int *x, int *y );
1056 virtual bool IsActive();
1057
1058
1059 bool MacGetUnifiedAppearance() const ;
1060 void MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) ;
1061 wxUint32 MacGetWindowAttributes() const ;
1062 void MacSetMetalAppearance( bool set ) ;
1063 bool MacGetMetalAppearance() const ;
1064 void MacSetUnifiedAppearance( bool set );
1065
1066 WXEVENTHANDLERREF MacGetEventHandler() { return m_macEventHandler ; }
1067
1068 wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
1069 protected :
1070 void MacInstallTopLevelWindowEventHandler();
1071
1072 WXEVENTHANDLERREF m_macEventHandler ;
1073 WindowRef m_macWindow;
1074 void * m_macFullScreenData ;
1075 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCarbonImpl)
1076 };
1077
1078 #endif // wxUSE_GUI
1079
1080 #endif
1081 // _WX_PRIVATE_H_