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