X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dcd79bff8c7c2bccd883dc014de19a1acd2d7dff..3222fc18c9363f4339937bac1f92705ee6cfcd7c:/src/mac/carbon/listctrl_mac.cpp diff --git a/src/mac/carbon/listctrl_mac.cpp b/src/mac/carbon/listctrl_mac.cpp index 8bc2439167..66046b29ca 100644 --- a/src/mac/carbon/listctrl_mac.cpp +++ b/src/mac/carbon/listctrl_mac.cpp @@ -102,7 +102,7 @@ wxEND_HANDLERS_TABLE() wxCONSTRUCTOR_5( wxListCtrl , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle ) /* - TODO : Expose more information of a list's layout etc. via appropriate objects (à la NotebookPageInfo) + TODO : Expose more information of a list's layout etc. via appropriate objects (ï¿  la NotebookPageInfo) */ #else IMPLEMENT_DYNAMIC_CLASS(wxListCtrl, wxControl) @@ -259,11 +259,11 @@ protected: Rect *maxEditTextRect, Boolean *shrinkToFit); - static pascal Boolean DataBrowserHitTestProc(ControlRef browser, - DataBrowserItemID itemID, - DataBrowserPropertyID property, - const Rect *theRect, - const Rect *mouseRect) { return true; } + static pascal Boolean DataBrowserHitTestProc(ControlRef WXUNUSED(browser), + DataBrowserItemID WXUNUSED(itemID), + DataBrowserPropertyID WXUNUSED(property), + const Rect *WXUNUSED(theRect), + const Rect *WXUNUSED(mouseRect)) { return true; } virtual bool ConfirmEditText(DataBrowserItemID item, DataBrowserPropertyID property, @@ -980,13 +980,13 @@ bool wxListCtrl::SetColumn(int col, wxListItem& item) if (item.GetMask() & wxLIST_MASK_IMAGE && item.GetImage() != -1 ) { - columnDesc.btnContentInfo.contentType = kControlContentIconRef; wxImageList* imageList = GetImageList(wxIMAGE_LIST_SMALL); if (imageList && imageList->GetImageCount() > 0 ) { wxBitmap bmp = imageList->GetBitmap( item.GetImage() ); - IconRef icon = bmp.GetBitmapData()->GetIconRef(); + IconRef icon = bmp.GetIconRef(); columnDesc.btnContentInfo.u.iconRef = icon; + columnDesc.btnContentInfo.contentType = kControlContentIconRef; } } @@ -1105,7 +1105,15 @@ bool wxListCtrl::GetItem(wxListItem& info) const if (!IsVirtual()) { if (info.m_itemId >= 0 && info.m_itemId < GetItemCount()) + { m_dbImpl->MacGetColumnInfo(info.m_itemId, info.m_col, info); + if (info.GetMask() & wxLIST_MASK_STATE) + { + DataBrowserItemID id = (DataBrowserItemID)m_dbImpl->GetItemFromLine(info.m_itemId); + if (IsDataBrowserItemSelected( m_dbImpl->GetControlRef(), id )) + info.SetState(info.GetState() | wxLIST_STATE_SELECTED); + } + } } else { @@ -1840,7 +1848,7 @@ wxTextCtrl* wxListCtrl::EditLabel(long item, wxClassInfo* textControlClass) } // End label editing, optionally cancelling the edit -bool wxListCtrl::EndEditLabel(bool cancel) +bool wxListCtrl::EndEditLabel(bool WXUNUSED(cancel)) { // TODO: generic impl. doesn't have this method - is it needed for us? if (m_genericImpl) @@ -2356,7 +2364,7 @@ wxMacListCtrlItem::~wxMacListCtrlItem() void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner , DataBrowserItemNotification message, - DataBrowserItemDataRef itemData ) const + DataBrowserItemDataRef WXUNUSED(itemData) ) const { wxMacDataBrowserListCtrlControl *lb = wxDynamicCast(owner, wxMacDataBrowserListCtrlControl); @@ -2502,9 +2510,7 @@ wxMacDataBrowserListCtrlControl::wxMacDataBrowserListCtrlControl( wxWindow *peer if ( style & wxLC_VRULES ) { -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 verify_noerr( DataBrowserChangeAttributes(m_controlRef, kDataBrowserAttributeListViewDrawColumnDividers, kDataBrowserAttributeNone) ); -#endif } verify_noerr( SetHiliteStyle(kDataBrowserTableViewFillHilite ) ); @@ -2530,11 +2536,11 @@ pascal Boolean wxMacDataBrowserListCtrlControl::DataBrowserEditTextProc( } bool wxMacDataBrowserListCtrlControl::ConfirmEditText( - DataBrowserItemID itemID, - DataBrowserPropertyID property, - CFStringRef theString, - Rect *maxEditTextRect, - Boolean *shrinkToFit) + DataBrowserItemID WXUNUSED(itemID), + DataBrowserPropertyID WXUNUSED(property), + CFStringRef WXUNUSED(theString), + Rect *WXUNUSED(maxEditTextRect), + Boolean *WXUNUSED(shrinkToFit)) { return false; } @@ -2593,7 +2599,7 @@ void wxMacDataBrowserListCtrlControl::DrawItem( DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemState itemState, - const Rect *itemRect, + const Rect *WXUNUSED(itemRect), SInt16 gdDepth, Boolean colorDevice) { @@ -2723,13 +2729,13 @@ void wxMacDataBrowserListCtrlControl::DrawItem( { if (color.Ok()) - labelColor = MAC_WXCOLORREF( color.GetPixel() ); + color.GetRGBColor(&labelColor); else if (list->GetTextColour().Ok()) - labelColor = MAC_WXCOLORREF( list->GetTextColour().GetPixel() ); + list->GetTextColour().GetRGBColor(&labelColor); if (bgColor.Ok()) { - backgroundColor = MAC_WXCOLORREF( bgColor.GetPixel() ); + bgColor.GetRGBColor(&backgroundColor); CGContextSaveGState(context); CGContextSetRGBFillColor(context, (float)backgroundColor.red / (float)USHRT_MAX, @@ -2748,7 +2754,7 @@ void wxMacDataBrowserListCtrlControl::DrawItem( wxImageList* imageList = list->GetImageList(wxIMAGE_LIST_SMALL); if (imageList && imageList->GetImageCount() > 0){ wxBitmap bmp = imageList->GetBitmap(imgIndex); - IconRef icon = bmp.GetBitmapData()->GetIconRef(); + IconRef icon = bmp.GetIconRef(); CGContextSaveGState(context); CGContextTranslateCTM(context, 0,iconCGRect.origin.y + CGRectGetMaxY(iconCGRect)); @@ -2762,19 +2768,29 @@ void wxMacDataBrowserListCtrlControl::DrawItem( } HIThemeTextHorizontalFlush hFlush = kHIThemeTextHorizontalFlushLeft; - UInt16 fontID = kThemeViewsFont; + HIThemeTextInfo info; + +#ifdef __LP64__ + info.version = kHIThemeTextInfoVersionOne; + info.fontID = kThemeViewsFont; + if (font.Ok()) + { + info.fontID = kThemeSpecifiedFont; + info.font = (CTFontRef) font.MacGetCTFont(); + } +#else + info.version = kHIThemeTextInfoVersionZero; + info.fontID = kThemeViewsFont; if (font.Ok()) { if (font.GetFamily() != wxFONTFAMILY_DEFAULT) - fontID = font.MacGetThemeFontID(); + info.fontID = font.MacGetThemeFontID(); -// FIXME: replace these with CG or ATSUI calls so we can remove this #ifndef. -#ifndef __LP64__ ::TextSize( (short)(font.MacGetFontSize()) ) ; ::TextFace( font.MacGetFontStyle() ) ; -#endif } +#endif wxListItem item; list->GetColumn(listColumn, item); @@ -2791,10 +2807,7 @@ void wxMacDataBrowserListCtrlControl::DrawItem( } } - HIThemeTextInfo info; - info.version = kHIThemeTextInfoVersionZero; info.state = active ? kThemeStateActive : kThemeStateInactive; - info.fontID = fontID; info.horizontalFlushness = hFlush; info.verticalFlushness = kHIThemeTextVerticalFlushCenter; info.options = kHIThemeTextBoxOptionNone; @@ -2810,8 +2823,10 @@ void wxMacDataBrowserListCtrlControl::DrawItem( CGContextRestoreGState(context); +#ifndef __LP64__ if (savedState != NULL) SetThemeDrawingState(savedState, true); +#endif } OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemID, @@ -2859,13 +2874,19 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI if ( list && list->HasFlag( wxLC_EDIT_LABELS ) ) { verify_noerr(SetDataBrowserItemDataBooleanValue( itemData, true )); + err = noErr ; } break ; default : if ( property >= kMinColumnId ) { - wxMacCFStringHolder cfStr(text); - verify_noerr( ::SetDataBrowserItemDataText( itemData, cfStr) ); + wxMacCFStringHolder cfStr; + + if (!text.IsEmpty()){ + cfStr.Assign( text, wxLocale::GetSystemEncoding() ); + err = ::SetDataBrowserItemDataText( itemData, cfStr ); + err = noErr; + } @@ -2874,7 +2895,7 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI wxImageList* imageList = list->GetImageList(wxIMAGE_LIST_SMALL); if (imageList && imageList->GetImageCount() > 0){ wxBitmap bmp = imageList->GetBitmap(imgIndex); - IconRef icon = bmp.GetBitmapData()->GetIconRef(); + IconRef icon = bmp.GetIconRef(); ::SetDataBrowserItemDataIcon(itemData, icon); } } @@ -2915,7 +2936,7 @@ OSStatus wxMacDataBrowserListCtrlControl::GetSetItemData(DataBrowserItemID itemI void wxMacDataBrowserListCtrlControl::ItemNotification(DataBrowserItemID itemID, DataBrowserItemNotification message, - DataBrowserItemDataRef itemData ) + DataBrowserItemDataRef WXUNUSED(itemData) ) { // we want to depend on as little as possible to make sure tear-down of controls is safe if ( message == kDataBrowserItemRemoved) @@ -2936,7 +2957,6 @@ void wxMacDataBrowserListCtrlControl::ItemNotification(DataBrowserItemID itemID, bool trigger = false; wxListEvent event( wxEVT_COMMAND_LIST_ITEM_SELECTED, list->GetId() ); - bool isSingle = (list->GetWindowStyle() & wxLC_SINGLE_SEL) != 0; event.SetEventObject( list ); if ( !list->IsVirtual() ) @@ -2956,8 +2976,9 @@ void wxMacDataBrowserListCtrlControl::ItemNotification(DataBrowserItemID itemID, { case kDataBrowserItemDeselected: event.SetEventType(wxEVT_COMMAND_LIST_ITEM_DESELECTED); - if ( !isSingle ) - trigger = !IsSelectionSuppressed(); + // as the generic implementation is also triggering this + // event for single selection, we do the same (different than listbox) + trigger = !IsSelectionSuppressed(); break; case kDataBrowserItemSelected: