]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/utils.cpp
Added wxSearchCtrl::[Get|Set]DescriptiveText
[wxWidgets.git] / src / mac / carbon / utils.cpp
index d946eeefe3739e89be13b47fa8ab5026b7122c31..85a38d0b49f9b57b540423bc0217be4383404a80 100644 (file)
@@ -821,6 +821,13 @@ OSStatus wxMacCarbonEvent::SetParameter(EventParamName inName, EventParamType in
 // Control Access Support
 // ----------------------------------------------------------------------------
 
+IMPLEMENT_DYNAMIC_CLASS( wxMacControl , wxObject )
+
+wxMacControl::wxMacControl() 
+{
+    Init();
+}
+
 wxMacControl::wxMacControl(wxWindow* peer , bool isRootControl )
 {
     Init();
@@ -858,10 +865,8 @@ void wxMacControl::Dispose()
 {
     wxASSERT_MSG( IsValidControlHandle(m_controlRef) , wxT("Invalid Control Handle (maybe already released) in Dispose") );
 
-    CFIndex count = CFGetRetainCount( m_controlRef ) ;
-    wxASSERT_MSG( count == 1 , wxT("Reference Count of native control was not 1 in Dispose") );
-
-    ::DisposeControl( m_controlRef );
+    // we cannot check the ref count here anymore, as autorelease objects might delete their refs later
+    CFRelease(m_controlRef);
     m_controlRef = NULL;
 }
 
@@ -1287,13 +1292,15 @@ wxMacControl* wxMacControl::GetReferenceFromNativeControl(ControlRef control)
 // basing on DataBrowserItemIDs
 //
 
+IMPLEMENT_ABSTRACT_CLASS( wxMacDataBrowserControl , wxMacControl )
+
 pascal void wxMacDataBrowserControl::DataBrowserItemNotificationProc(
     ControlRef browser,
     DataBrowserItemID itemID,
     DataBrowserItemNotification message,
     DataBrowserItemDataRef itemData )
 {
-    wxMacDataBrowserControl* ctl = dynamic_cast<wxMacDataBrowserControl*>( wxMacControl::GetReferenceFromNativeControl( browser ) );
+    wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl);
     if ( ctl != 0 )
     {
         ctl->ItemNotification(itemID, message, itemData);
@@ -1308,7 +1315,7 @@ pascal OSStatus wxMacDataBrowserControl::DataBrowserGetSetItemDataProc(
     Boolean changeValue )
 {
     OSStatus err = errDataBrowserPropertyNotSupported;
-    wxMacDataBrowserControl* ctl = dynamic_cast<wxMacDataBrowserControl*>( wxMacControl::GetReferenceFromNativeControl( browser ) );
+    wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl);
     if ( ctl != 0 )
     {
         err = ctl->GetSetItemData(itemID, property, itemData, changeValue);
@@ -1322,7 +1329,7 @@ pascal Boolean wxMacDataBrowserControl::DataBrowserCompareProc(
     DataBrowserItemID itemTwoID,
     DataBrowserPropertyID sortProperty)
 {
-    wxMacDataBrowserControl* ctl = dynamic_cast<wxMacDataBrowserControl*>( wxMacControl::GetReferenceFromNativeControl( browser ) );
+    wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl);
     if ( ctl != 0 )
     {
         return ctl->CompareItems(itemOneID, itemTwoID, sortProperty);
@@ -1394,12 +1401,12 @@ OSStatus wxMacDataBrowserControl::AddColumn( DataBrowserListViewColumnDesc *colu
 }
 
 OSStatus wxMacDataBrowserControl::GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id ){
-    return GetDataBrowserTableViewColumnProperty( m_controlRef, position, id ); 
+    return GetDataBrowserTableViewColumnProperty( m_controlRef, position, id );
 }
 
 OSStatus wxMacDataBrowserControl::RemoveColumn( DataBrowserTableViewColumnIndex position )
 {
-    DataBrowserTableViewColumnID id; 
+    DataBrowserTableViewColumnID id;
     GetColumnIDFromIndex( position, &id );
     return RemoveDataBrowserTableViewColumn( m_controlRef, id );
 }
@@ -1624,6 +1631,7 @@ OSStatus wxMacDataBrowserControl::SetDisclosureColumn( DataBrowserPropertyID pro
 wxMacDataItem::wxMacDataItem()
 {
     m_data = NULL;
+
     m_order = 0;
     m_colId = kTextColumnId; // for compat with existing wx*ListBox impls.
 }
@@ -1660,7 +1668,7 @@ short wxMacDataItem::GetColumn()
 void wxMacDataItem::SetColumn( short col )
 {
     m_colId = col;
-} 
+}
 
 void wxMacDataItem::SetLabel( const wxString& str)
 {
@@ -1677,13 +1685,13 @@ bool wxMacDataItem::IsLessThan(wxMacDataItemBrowserControl *owner ,
     const wxMacDataItem* rhs,
     DataBrowserPropertyID sortProperty) const
 {
-    const wxMacDataItem* otherItem = dynamic_cast<const wxMacDataItem*>(rhs);
+    const wxMacDataItem* otherItem = wx_const_cast(wxMacDataItem*,rhs);
     bool retval = false;
-    
+
     if ( sortProperty == m_colId ){
         retval = m_label.CmpNoCase( otherItem->m_label) < 0;
     }
-    
+
     else if ( sortProperty == kNumericOrderColumnId )
         retval = m_order < otherItem->m_order;
 
@@ -1728,6 +1736,7 @@ void wxMacDataItem::Notification(wxMacDataItemBrowserControl *owner ,
 {
 }
 
+IMPLEMENT_DYNAMIC_CLASS( wxMacDataItemBrowserControl , wxMacDataBrowserControl )
 
 wxMacDataItemBrowserControl::wxMacDataItemBrowserControl( wxWindow* peer , const wxPoint& pos, const wxSize& size, long style) :
     wxMacDataBrowserControl( peer, pos, size, style )
@@ -1805,7 +1814,7 @@ OSStatus wxMacDataItemBrowserControl::GetSetItemData(
             // right now default behaviour on these
             break;
         default :
-            
+
             if ( item != NULL ){
                 err = item->GetSetData( this, property , itemData , changeValue );
             }
@@ -1842,7 +1851,7 @@ unsigned int wxMacDataItemBrowserControl::GetItemCount(const wxMacDataItem* cont
     return numItems;
 }
 
-unsigned int wxMacDataItemBrowserControl::GetSelectedItemCount( const wxMacDataItem* container, 
+unsigned int wxMacDataItemBrowserControl::GetSelectedItemCount( const wxMacDataItem* container,
         bool recurse ) const
 {
     return GetItemCount( container, recurse, kDataBrowserItemIsSelected );
@@ -1913,11 +1922,11 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
     columnDesc.headerBtnDesc.btnFontStyle.flags =
         kControlUseFontMask | kControlUseJustMask;
 
-    columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly; 
+    columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly;
     columnDesc.headerBtnDesc.btnFontStyle.just = just;
     columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
     columnDesc.headerBtnDesc.btnFontStyle.style = normal;
-    
+
     // TODO: Why is m_font not defined when we enter wxLC_LIST mode, but is
     // defined for other modes?
     wxFontEncoding enc;
@@ -1927,14 +1936,17 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
         enc = wxLocale::GetSystemEncoding();
     wxMacCFStringHolder cfTitle;
     cfTitle.Assign( title, enc );
-    columnDesc.headerBtnDesc.titleString = cfTitle; 
+    columnDesc.headerBtnDesc.titleString = cfTitle;
 
     columnDesc.headerBtnDesc.minimumWidth = 0;
     columnDesc.headerBtnDesc.maximumWidth = 30000;
 
     columnDesc.propertyDesc.propertyID = (kMinColumnId + colId);
     columnDesc.propertyDesc.propertyType = colType;
-    columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewSortableColumn | kDataBrowserListViewTypeSelectColumn; 
+    columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewSortableColumn;
+#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
+    columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
+#endif
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
     columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewNoGapForIconInHeaderButton;
 #endif
@@ -2125,7 +2137,7 @@ void wxMacDataItemBrowserControl::MacInsert( unsigned int n, const wxArrayString
         item->SetLabel( items[i]);
         if ( column != -1 )
             item->SetColumn( kMinColumnId + column );
-        
+
         if ( m_sortOrder == SortOrder_None )
             item->SetOrder( frontLineOrder + 1 + i );
 
@@ -2353,12 +2365,12 @@ wxMacPortSaver::~wxMacPortSaver()
 
 void wxMacGlobalToLocal( WindowRef window , Point*pt )
 {
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4 
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4
     HIPoint p = CGPointMake( pt->h, pt->v );
-       HIViewRef contentView ;
-       // TODO check toolbar offset 
+    HIViewRef contentView ;
+    // TODO check toolbar offset
     HIViewFindByID( HIViewGetRoot( window ), kHIViewWindowContentID , &contentView) ;
-       HIPointConvert( &p, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceView, contentView );
+    HIPointConvert( &p, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceView, contentView );
     pt->h = p.x;
     pt->v = p.y;
 #else
@@ -2368,10 +2380,10 @@ void wxMacGlobalToLocal( WindowRef window , Point*pt )
 
 void wxMacLocalToGlobal( WindowRef window , Point*pt )
 {
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4 
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4
     HIPoint p = CGPointMake( pt->h, pt->v );
-       HIViewRef contentView ;
-       // TODO check toolbar offset 
+    HIViewRef contentView ;
+    // TODO check toolbar offset
     HIViewFindByID( HIViewGetRoot( window ), kHIViewWindowContentID , &contentView) ;
     HIPointConvert( &p, kHICoordSpaceView, contentView, kHICoordSpace72DPIGlobal, NULL );
     pt->h = p.x;