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