]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/mac/carbon/private.h
addind nonowned window implementation
[wxWidgets.git] / include / wx / mac / carbon / private.h
... / ...
CommitLineData
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
25typedef UInt32 URefCon;
26typedef 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
36class WXDLLEXPORT wxMacCGContextStateSaver
37{
38 DECLARE_NO_COPY_CLASS(wxMacCGContextStateSaver)
39
40public:
41 wxMacCGContextStateSaver( CGContextRef cg )
42 {
43 m_cg = cg;
44 CGContextSaveGState( cg );
45 }
46 ~wxMacCGContextStateSaver()
47 {
48 CGContextRestoreGState( m_cg );
49 }
50private:
51 CGContextRef m_cg;
52};
53
54// app.h
55
56#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
57bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec);
58#endif
59
60#endif // wxUSE_GUI
61
62// filefn.h
63WXDLLIMPEXP_BASE wxString wxMacFSSpec2MacFilename( const FSSpec *spec );
64WXDLLIMPEXP_BASE void wxMacFilename2FSSpec( const wxString &path , FSSpec *spec );
65
66// utils.h
67WXDLLIMPEXP_BASE wxString wxMacFindFolderNoSeparator(short vRefNum,
68 OSType folderType,
69 Boolean createFolder);
70WXDLLIMPEXP_BASE wxString wxMacFindFolder(short vRefNum,
71 OSType folderType,
72 Boolean createFolder);
73
74template<typename T> EventParamType wxMacGetEventParamType() { wxFAIL_MSG( wxT("Unknown Param Type") ); return 0; }
75template<> inline EventParamType wxMacGetEventParamType<RgnHandle>() { return typeQDRgnHandle; }
76template<> inline EventParamType wxMacGetEventParamType<ControlRef>() { return typeControlRef; }
77template<> inline EventParamType wxMacGetEventParamType<WindowRef>() { return typeWindowRef; }
78template<> inline EventParamType wxMacGetEventParamType<MenuRef>() { return typeMenuRef; }
79template<> inline EventParamType wxMacGetEventParamType<EventRef>() { return typeEventRef; }
80template<> inline EventParamType wxMacGetEventParamType<Point>() { return typeQDPoint; }
81template<> inline EventParamType wxMacGetEventParamType<Rect>() { return typeQDRectangle; }
82template<> inline EventParamType wxMacGetEventParamType<Boolean>() { return typeBoolean; }
83template<> inline EventParamType wxMacGetEventParamType<SInt16>() { return typeSInt16; }
84template<> inline EventParamType wxMacGetEventParamType<SInt32>() { return typeSInt32; }
85template<> inline EventParamType wxMacGetEventParamType<UInt32>() { return typeUInt32; }
86template<> inline EventParamType wxMacGetEventParamType<RGBColor>() { return typeRGBColor; }
87template<> inline EventParamType wxMacGetEventParamType<HICommand>() { return typeHICommand; }
88template<> inline EventParamType wxMacGetEventParamType<HIPoint>() { return typeHIPoint; }
89template<> inline EventParamType wxMacGetEventParamType<HISize>() { return typeHISize; }
90template<> inline EventParamType wxMacGetEventParamType<HIRect>() { return typeHIRect; }
91template<> inline EventParamType wxMacGetEventParamType<void*>() { return typeVoidPtr; }
92template<> inline EventParamType wxMacGetEventParamType<CFDictionaryRef>() { return typeCFDictionaryRef; }
93template<> inline EventParamType wxMacGetEventParamType<Collection>() { return typeCollection; }
94template<> 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
103class WXDLLEXPORT wxMacCarbonEvent
104{
105
106public :
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; }
215protected :
216 EventRef m_eventRef;
217 bool m_release;
218};
219
220//
221// helper class for allocating and deallocating Universal Proc Ptrs
222//
223
224template <typename procType, typename uppType , uppType (*newUPP)(procType) , void (*disposeUPP)(uppType) > class wxMacUPP
225{
226public :
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; }
238private :
239 uppType m_upp;
240};
241
242typedef wxMacUPP<NMProcPtr,NMUPP,NewNMUPP,DisposeNMUPP> wxMacNMUPP;
243
244#if wxUSE_GUI
245
246class WXDLLIMPEXP_FWD_CORE wxMacToolTipTimer ;
247
248class WXDLLEXPORT wxMacToolTip
249{
250public :
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
264private :
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
280WXDLLIMPEXP_CORE void wxMacCreateBitmapButton( ControlButtonContentInfo*info , const wxBitmap& bitmap , int forceType = 0 );
281WXDLLIMPEXP_CORE void wxMacReleaseBitmapButton( ControlButtonContentInfo*info );
282WXDLLIMPEXP_CORE CGImageRef wxMacCreateCGImageFromBitmap( const wxBitmap& bitmap );
283
284WXDLLIMPEXP_CORE CGDataProviderRef wxMacCGDataProviderCreateWithCFData( CFDataRef data );
285WXDLLIMPEXP_CORE CGDataConsumerRef wxMacCGDataConsumerCreateWithCFData( CFMutableDataRef data );
286WXDLLIMPEXP_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
299struct wxOpaqueWindowRef
300{
301 wxOpaqueWindowRef( WindowRef ref ) { m_data = ref; }
302 operator WindowRef() { return m_data; }
303private :
304 WindowRef m_data;
305};
306
307WXDLLIMPEXP_CORE void wxMacRectToNative( const wxRect *wx , Rect *n );
308WXDLLIMPEXP_CORE void wxMacNativeToRect( const Rect *n , wxRect* wx );
309WXDLLIMPEXP_CORE void wxMacPointToNative( const wxPoint* wx , Point *n );
310WXDLLIMPEXP_CORE void wxMacNativeToPoint( const Point *n , wxPoint* wx );
311
312WXDLLIMPEXP_CORE wxWindow * wxFindControlFromMacControl(ControlRef inControl );
313WXDLLIMPEXP_CORE wxTopLevelWindowMac* wxFindWinFromMacWindow( WindowRef inWindow );
314WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacMenu(MenuRef inMenuRef);
315
316WXDLLIMPEXP_CORE int wxMacCommandToId( UInt32 macCommandId );
317WXDLLIMPEXP_CORE UInt32 wxIdToMacCommand( int wxId );
318WXDLLIMPEXP_CORE wxMenu* wxFindMenuFromMacCommand( const HICommand &macCommandId , wxMenuItem* &item );
319
320extern wxWindow* g_MacLastWindow;
321WXDLLIMPEXP_CORE pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , EventRef event , void *data );
322WXDLLIMPEXP_CORE Rect wxMacGetBoundsForControl( wxWindow* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin = true );
323
324ControlActionUPP GetwxMacLiveScrollbarActionProc();
325
326// additional optional event defines
327
328#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
329enum {
330 kEventControlFocusPartChanged = 164
331};
332#endif
333
334class WXDLLEXPORT wxMacControl : public wxObject
335{
336public :
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 );
499protected :
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
516class WXDLLEXPORT wxMacDataBrowserControl : public wxMacControl
517{
518public :
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 );
610protected :
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
657class wxMacDataItemBrowserControl;
658class wxMacListBoxItem;
659
660const DataBrowserPropertyID kTextColumnId = 1024;
661const 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.
665const DataBrowserPropertyID kMinColumnId = 1050;
666
667// base API for high-level databrowser operations
668
669class WXDLLEXPORT wxMacListControl
670{
671public:
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
695enum DataItemType {
696 DataItem_Text
697};
698
699class WXDLLEXPORT wxMacDataItem
700{
701public :
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
731protected :
732 wxString m_label;
733 wxCFStringRef m_cfLabel;
734 void * m_data;
735 SInt32 m_order;
736 DataBrowserPropertyID m_colId;
737
738};
739
740enum ListSortOrder {
741 SortOrder_None,
742 SortOrder_Text_Ascending,
743 SortOrder_Text_Descending
744};
745
746typedef wxMacDataItem* wxMacDataItemPtr;
747const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL;
748
749WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE);
750
751class WXDLLEXPORT wxMacDataItemBrowserControl : public wxMacDataBrowserControl, public wxMacListControl
752{
753public :
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
856protected:
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
878private :
879
880 bool m_suppressSelection;
881 DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataItemBrowserControl)
882};
883
884class WXDLLEXPORT wxMacDataItemBrowserSelectionSuppressor
885{
886public :
887 wxMacDataItemBrowserSelectionSuppressor(wxMacDataItemBrowserControl *browser);
888 ~wxMacDataItemBrowserSelectionSuppressor();
889
890private :
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
902class WXDLLEXPORT wxMacListBoxItem : public wxMacDataItem
903{
904public :
905 wxMacListBoxItem();
906
907 virtual ~wxMacListBoxItem();
908
909 virtual void Notification(wxMacDataItemBrowserControl *owner ,
910 DataBrowserItemNotification message,
911 DataBrowserItemDataRef itemData ) const;
912};
913
914class WXDLLEXPORT wxMacDataBrowserListControl : public wxMacDataItemBrowserControl
915{
916public:
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
936OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
937 CGContextRef inContext,
938 const HIRect * inBounds,
939 CGImageRef inImage) ;
940
941CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
942
943CGColorSpaceRef WXDLLIMPEXP_CORE wxMacGetGenericRGBColorSpace(void);
944
945// toplevel.cpp
946
947class WXDLLEXPORT wxMacDeferredWindowDeleter : public wxObject
948{
949public :
950 wxMacDeferredWindowDeleter( WindowRef windowRef );
951 virtual ~wxMacDeferredWindowDeleter();
952
953protected :
954 WindowRef m_macWindow ;
955} ;
956
957#endif // wxUSE_GUI
958
959#define wxMAC_DEFINE_PROC_GETTER( UPP , x ) \
960UPP 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
972void wxMacSetupConverters();
973void wxMacCleanupConverters();
974
975WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to );
976WXDLLIMPEXP_BASE wxString wxMacMakeStringFromPascal( ConstStringPtr from );
977
978// filefn.cpp
979
980WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL );
981WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef );
982WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname );
983
984#if wxUSE_GUI
985
986// deprecating QD
987
988void wxMacLocalToGlobal( WindowRef window , Point*pt );
989void wxMacGlobalToLocal( WindowRef window , Point*pt );
990
991#endif
992
993//---------------------------------------------------------------------------
994// cocoa bridging utilities
995//---------------------------------------------------------------------------
996
997bool wxMacInitCocoa();
998
999class WXDLLEXPORT wxMacAutoreleasePool
1000{
1001public :
1002 wxMacAutoreleasePool();
1003 ~wxMacAutoreleasePool();
1004private :
1005 void* m_pool;
1006};
1007
1008// NSObject
1009
1010void wxMacCocoaRelease( void* obj );
1011void wxMacCocoaAutorelease( void* obj );
1012void wxMacCocoaRetain( void* obj );
1013
1014#if wxMAC_USE_COCOA
1015
1016// NSCursor
1017
1018WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
1019WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
1020void wxMacCocoaSetCursor( WX_NSCursor cursor );
1021void wxMacCocoaHideCursor();
1022void wxMacCocoaShowCursor();
1023
1024typedef 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
1035typedef Cursor ClassicCursor;
1036
1037#endif // wxMAC_USE_COCOA
1038
1039// -------------
1040// Common to all
1041// -------------
1042
1043// Cursor support
1044
1045const short kwxCursorBullseye = 0;
1046const short kwxCursorBlank = 1;
1047const short kwxCursorPencil = 2;
1048const short kwxCursorMagnifier = 3;
1049const short kwxCursorNoEntry = 4;
1050const short kwxCursorPaintBrush = 5;
1051const short kwxCursorPointRight = 6;
1052const short kwxCursorPointLeft = 7;
1053const short kwxCursorQuestionArrow = 8;
1054const short kwxCursorRightArrow = 9;
1055const short kwxCursorSizeNS = 10;
1056const short kwxCursorSize = 11;
1057const short kwxCursorSizeNESW = 12;
1058const short kwxCursorSizeNWSE = 13;
1059const short kwxCursorRoller = 14;
1060const short kwxCursorLast = kwxCursorRoller;
1061
1062// exposing our fallback cursor map
1063
1064extern ClassicCursor gMacCursors[];
1065
1066#endif
1067 // _WX_PRIVATE_H_