]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/listctrl_mac.cpp
ignore WinCE projects and build directories
[wxWidgets.git] / src / mac / carbon / listctrl_mac.cpp
index ba97e1840b85134c60673d6670cbfef176436592..e307203d9864a0d46e85e475cc195dafed4f19f8 100644 (file)
@@ -30,6 +30,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/intl.h"
+    #include "wx/settings.h"
 #endif
 
 #include "wx/mac/uma.h"
@@ -772,6 +773,18 @@ wxListCtrl::~wxListCtrl()
     delete m_renameTimer;
 }
 
+/*static*/
+wxVisualAttributes wxListCtrl::GetClassDefaultAttributes(wxWindowVariant variant)
+{
+    wxVisualAttributes attr;
+
+    attr.colFg = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT );
+    attr.colBg = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX );
+    attr.font.MacCreateFromThemeFont(kThemeViewsFont);
+
+    return attr;
+}
+
 // ----------------------------------------------------------------------------
 // set/get/change style
 // ----------------------------------------------------------------------------
@@ -967,10 +980,10 @@ bool wxListCtrl::SetColumn(int col, wxListItem& item)
         {
             wxFontEncoding enc;
             if ( m_font.Ok() )
-                enc = m_font.GetEncoding();
+                enc = GetFont().GetEncoding();
             else
                 enc = wxLocale::GetSystemEncoding();
-            wxMacCFStringHolder cfTitle;
+            wxCFStringRef cfTitle;
             cfTitle.Assign( item.GetText() , enc );
             if(columnDesc.titleString)
                 CFRelease(columnDesc.titleString);
@@ -2297,9 +2310,26 @@ void wxListCtrl::RefreshItem(long item)
         return;
     }
 
-    wxRect rect;
-    GetItemRect(item, rect);
-    RefreshRect(rect);
+    if (m_dbImpl)
+    {
+        DataBrowserItemID id;
+
+        if ( !IsVirtual() )
+        {
+            wxMacDataItem* thisItem = m_dbImpl->GetItemFromLine(item);
+            id = (DataBrowserItemID) thisItem;
+        }
+        else
+            id = item+1;
+
+        m_dbImpl->wxMacDataBrowserControl::UpdateItems
+                  (
+                    kDataBrowserNoItem,
+                    1, &id,
+                    kDataBrowserItemNoProperty, // preSortProperty
+                    kDataBrowserNoItem // update all columns
+                  );
+    }
 }
 
 void wxListCtrl::RefreshItems(long itemFrom, long itemTo)
@@ -2310,14 +2340,35 @@ void wxListCtrl::RefreshItems(long itemFrom, long itemTo)
         return;
     }
 
-    wxRect rect1, rect2;
-    GetItemRect(itemFrom, rect1);
-    GetItemRect(itemTo, rect2);
+    if (m_dbImpl)
+    {
+        const long count = itemTo - itemFrom + 1;
+        DataBrowserItemID *ids = new DataBrowserItemID[count];
+
+        if ( !IsVirtual() )
+        {
+            for ( long i = 0; i < count; i++ )
+            {
+                wxMacDataItem* thisItem = m_dbImpl->GetItemFromLine(itemFrom+i);
+                ids[i] = (DataBrowserItemID) thisItem;
+            }
+        }
+        else
+        {
+            for ( long i = 0; i < count; i++ )
+                ids[i] = itemFrom+i+1;
+        }
 
-    wxRect rect = rect1;
-    rect.height = rect2.GetBottom() - rect1.GetTop();
+        m_dbImpl->wxMacDataBrowserControl::UpdateItems
+                  (
+                    kDataBrowserNoItem,
+                    count, ids,
+                    kDataBrowserItemNoProperty, // preSortProperty
+                    kDataBrowserNoItem // update all columns
+                  );
 
-    RefreshRect(rect);
+        delete[] ids;
+    }
 }
 
 void wxListCtrl::SetDropTarget( wxDropTarget *dropTarget )
@@ -2662,12 +2713,10 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
     if (bgColor == wxNullColour)
         bgColor = listBgColor;
 
-    wxFont listFont = list->GetFont();
-    if (font == wxNullFont)
-        font = listFont;
+    if (!font.Ok())
+        font = list->GetFont();
 
-    wxMacCFStringHolder cfString;
-    cfString.Assign( text, wxLocale::GetSystemEncoding() );
+    wxCFStringRef cfString( text, wxLocale::GetSystemEncoding() );
 
     Rect enclosingRect;
     CGRect enclosingCGRect, iconCGRect, textCGRect;
@@ -2718,9 +2767,9 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
         }
         CGContextSaveGState(context);
 
-        CGContextSetRGBFillColor(context, (float)backgroundColor.red / (float)USHRT_MAX,
-                      (float)backgroundColor.green / (float)USHRT_MAX,
-                      (float)backgroundColor.blue / (float)USHRT_MAX, 1.0);
+        CGContextSetRGBFillColor(context, (CGFloat)backgroundColor.red / (CGFloat)USHRT_MAX,
+                      (CGFloat)backgroundColor.green / (CGFloat)USHRT_MAX,
+                      (CGFloat)backgroundColor.blue / (CGFloat)USHRT_MAX, (CGFloat) 1.0);
         CGContextFillRect(context, enclosingCGRect);
 
         CGContextRestoreGState(context);
@@ -2738,9 +2787,9 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
             bgColor.GetRGBColor(&backgroundColor);
             CGContextSaveGState(context);
 
-            CGContextSetRGBFillColor(context, (float)backgroundColor.red / (float)USHRT_MAX,
-                          (float)backgroundColor.green / (float)USHRT_MAX,
-                          (float)backgroundColor.blue / (float)USHRT_MAX, 1.0);
+            CGContextSetRGBFillColor(context, (CGFloat)backgroundColor.red / (CGFloat)USHRT_MAX,
+                          (CGFloat)backgroundColor.green / (CGFloat)USHRT_MAX,
+                          (CGFloat)backgroundColor.blue / (CGFloat)USHRT_MAX, (CGFloat) 1.0);
             CGContextFillRect(context, enclosingCGRect);
 
             CGContextRestoreGState(context);
@@ -2769,26 +2818,33 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
 
     HIThemeTextHorizontalFlush hFlush = kHIThemeTextHorizontalFlushLeft;
     HIThemeTextInfo info;
-
-#ifdef __LP64__
-    info.version = kHIThemeTextInfoVersionOne;
-    info.fontID = kThemeViewsFont;
-    if (font.Ok())
+    bool setup = false;
+#if wxMAC_USE_CORE_TEXT
+    if ( UMAGetSystemVersion() >= 0x1050 )
     {
-        info.fontID = kThemeSpecifiedFont;
-        info.font = (CTFontRef) font.MacGetCTFont();
+        info.version = kHIThemeTextInfoVersionOne;
+        info.fontID = kThemeViewsFont;
+        if (font.Ok())
+        {
+            info.fontID = kThemeSpecifiedFont;
+            info.font = (CTFontRef) font.MacGetCTFont();
+            setup = true;
+        }
     }
-#else
-    info.version = kHIThemeTextInfoVersionZero;
-    info.fontID = kThemeViewsFont;
-
-    if (font.Ok())
+#endif
+#if wxMAC_USE_ATSU_TEXT
+    if ( !setup )
     {
-        if (font.GetFamily() != wxFONTFAMILY_DEFAULT)
+        info.version = kHIThemeTextInfoVersionZero;
+        info.fontID = kThemeViewsFont;
+
+        if (font.Ok())
+        {
             info.fontID = font.MacGetThemeFontID();
 
-        ::TextSize( (short)(font.MacGetFontSize()) ) ;
-        ::TextFace( font.MacGetFontStyle() ) ;
+            ::TextSize( (short)(font.MacGetFontSize()) ) ;
+            ::TextFace( font.MacGetFontStyle() ) ;
+        }
     }
 #endif
 
@@ -2815,9 +2871,9 @@ void wxMacDataBrowserListCtrlControl::DrawItem(
     info.truncationMaxLines = 1;
 
     CGContextSaveGState(context);
-    CGContextSetRGBFillColor (context, (float)labelColor.red / (float)USHRT_MAX,
-                      (float)labelColor.green / (float)USHRT_MAX,
-                      (float)labelColor.blue / (float)USHRT_MAX, 1.0);
+    CGContextSetRGBFillColor (context, (CGFloat)labelColor.red / (CGFloat)USHRT_MAX,
+                      (CGFloat)labelColor.green / (CGFloat)USHRT_MAX,
+                      (CGFloat)labelColor.blue / (CGFloat)USHRT_MAX, (CGFloat) 1.0);
 
     HIThemeDrawTextBox(cfString, &textCGRect, &info, context, kHIThemeOrientationNormal);
 
@@ -2840,7 +2896,7 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI
 
     OSStatus err = errDataBrowserPropertyNotSupported;
     wxListCtrl* list = wxDynamicCast( GetPeer() , wxListCtrl );
-    wxMacListCtrlItem* lcItem;
+    wxMacListCtrlItem* lcItem = NULL;
 
     if (listColumn >= 0)
     {
@@ -2880,10 +2936,8 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI
             default :
                 if ( property >= kMinColumnId )
                 {
-                    wxMacCFStringHolder cfStr;
-
                     if (!text.IsEmpty()){
-                        cfStr.Assign( text, wxLocale::GetSystemEncoding() );
+                        wxCFStringRef cfStr( text, wxLocale::GetSystemEncoding() );
                         err = ::SetDataBrowserItemDataText( itemData, cfStr );
                         err = noErr;
                     }
@@ -2918,7 +2972,7 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI
                     // can then deal with the veto
                     CFStringRef sr ;
                     verify_noerr( GetDataBrowserItemDataText( itemData , &sr ) ) ;
-                    wxMacCFStringHolder cfStr(sr) ;;
+                    wxCFStringRef cfStr(sr) ;;
                     if (m_isVirtual)
                         list->SetItem( (long)itemData-1 , listColumn, cfStr.AsString() ) ;
                     else