]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/databrow.cpp
remove unneccessary header dependencies on wx/thread.h
[wxWidgets.git] / src / mac / carbon / databrow.cpp
index 930effca507dcbeef5ab666f64d744ec2914bc92..e7fe19a2a6cedf148661d2fc6ef10d1c3f283a33 100644 (file)
@@ -578,7 +578,6 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowse
 
   wxVariant dataToRender;
 
 
   wxVariant dataToRender;
 
-
   dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
   wxCHECK_RET(dataViewCtrlPtr != NULL,                               _("Pointer to data view control not set correctly."));
   wxCHECK_RET(dataViewCtrlPtr->GetModel() != NULL,                   _("Pointer to model not set correctly."));
   dataViewCtrlPtr = dynamic_cast<wxDataViewCtrl*>(this->GetPeer());
   wxCHECK_RET(dataViewCtrlPtr != NULL,                               _("Pointer to data view control not set correctly."));
   wxCHECK_RET(dataViewCtrlPtr->GetModel() != NULL,                   _("Pointer to model not set correctly."));
@@ -587,7 +586,9 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowse
   wxCHECK_RET(dataViewColumnPtr != NULL,_("No column for the specified column index existing."));
   dataViewCustomRendererPtr = dynamic_cast<wxDataViewCustomRenderer*>(dataViewColumnPtr->GetRenderer());
   wxCHECK_RET(dataViewCustomRendererPtr != NULL,_("No renderer or invalid renderer type specified for custom data column."));
   wxCHECK_RET(dataViewColumnPtr != NULL,_("No column for the specified column index existing."));
   dataViewCustomRendererPtr = dynamic_cast<wxDataViewCustomRenderer*>(dataViewColumnPtr->GetRenderer());
   wxCHECK_RET(dataViewCustomRendererPtr != NULL,_("No renderer or invalid renderer type specified for custom data column."));
-  dataViewCtrlPtr->GetModel()->GetValue(dataToRender,wxDataViewItem(reinterpret_cast<void*>(itemID)),columnIndex);
+
+  wxDataViewItem dataitem( reinterpret_cast<void*>(itemID) );
+  dataViewCtrlPtr->GetModel()->GetValue(dataToRender,dataitem,columnIndex);
   dataViewCustomRendererPtr->SetValue(dataToRender);
 
  // try to determine the content's size (drawable part):
   dataViewCustomRendererPtr->SetValue(dataToRender);
 
  // try to determine the content's size (drawable part):
@@ -612,12 +613,49 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowse
   content.bottom -= wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y);
   content.right  -= wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
 
   content.bottom -= wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y);
   content.right  -= wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
 
- // make sure that 'Render' can draw only in the allowed area:
-  dataViewCustomRendererPtr->GetDC()->SetClippingRegion(content.left,content.top,content.right-content.left+1,content.bottom-content.top+1);
-  (void) (dataViewCustomRendererPtr->Render(wxRect(static_cast<int>(rectangle->left),static_cast<int>(rectangle->top),
-                                                   static_cast<int>(1+rectangle->right-rectangle->left),static_cast<int>(1+rectangle->bottom-rectangle->top)),
-                                            dataViewCustomRendererPtr->GetDC(),((state == kDataBrowserItemIsSelected) ? wxDATAVIEW_CELL_SELECTED : 0)));
-  dataViewCustomRendererPtr->GetDC()->DestroyClippingRegion(); // probably not necessary
+  wxDC *dc = dataViewCustomRendererPtr->GetDC();
+  
+  wxRect cellrect( static_cast<int>(rectangle->left),
+                   static_cast<int>(rectangle->top+2),
+                   static_cast<int>(1+rectangle->right-rectangle->left),
+                   static_cast<int>(rectangle->bottom-rectangle->top) );
+                   
+  bool is_active = IsControlActive( this->m_controlRef );
+  if (state == kDataBrowserItemIsSelected)
+  {
+      
+      wxColour col( wxMacCreateCGColorFromHITheme( (is_active) ? 
+                             kThemeBrushAlternatePrimaryHighlightColor
+                             : kThemeBrushSecondaryHighlightColor ) );
+      
+      wxRect rect = cellrect;
+      Rect itemrect;
+      GetDataBrowserItemPartBounds( this->m_controlRef, itemID, propertyID,
+         kDataBrowserPropertyEnclosingPart, &itemrect );
+      rect.x = itemrect.left;
+      rect.width = itemrect.right-itemrect.left+1;
+      
+      wxBrush selBrush( col );
+      wxPen oldpen( dc->GetPen() );
+      wxBrush oldbrush( dc->GetBrush() );
+      dc->SetPen( *wxTRANSPARENT_PEN );
+      dc->SetBrush( selBrush );
+      dc->DrawRectangle(rect);
+      dc->SetBrush( oldbrush );
+      dc->SetPen( oldpen );
+  }
+
+  wxDataViewModel *model = dataViewCtrlPtr->GetModel();
+  if ((columnIndex == 0) || !model->IsContainer(dataitem) || model->HasContainerColumns(dataitem))
+  {  
+      // make sure that 'Render' can draw only in the allowed area:
+      dc->SetClippingRegion(content.left,content.top,content.right-content.left+1,content.bottom-content.top+1);
+      (void) (dataViewCustomRendererPtr->Render( cellrect, dc, 
+                                            ((state == kDataBrowserItemIsSelected) ? wxDATAVIEW_CELL_SELECTED : 0)));
+      dc->DestroyClippingRegion(); // probably not necessary
+  }
+  
+  dataViewCustomRendererPtr->SetDC(NULL);
 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
 
 OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemDataRef itemData, Boolean getValue)
 } /* wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItemID, DataBrowserPropertyID, DataBrowserItemState, Rect const*, SInt16, Boolean) */
 
 OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemDataRef itemData, Boolean getValue)
@@ -738,7 +776,7 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
             dataViewEvent.SetEventObject(dataViewCtrlPtr);
             dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
            // finally send the equivalent wxWidget event:
             dataViewEvent.SetEventObject(dataViewCtrlPtr);
             dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
            // finally send the equivalent wxWidget event:
-            dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+            dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
            // opening the container is allowed if not vetoed:
             return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
           } /* block */
            // opening the container is allowed if not vetoed:
             return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
           } /* block */
@@ -754,7 +792,7 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
             dataViewEvent.SetEventObject(dataViewCtrlPtr);
             dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
            // finally send the equivalent wxWidget event:
             dataViewEvent.SetEventObject(dataViewCtrlPtr);
             dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
            // finally send the equivalent wxWidget event:
-            dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+            dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
            // opening the container is allowed if not vetoed:
             return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
           } /* block */
            // opening the container is allowed if not vetoed:
             return ::SetDataBrowserItemDataBooleanValue(itemData,dataViewEvent.IsAllowed());
           } /* block */
@@ -792,7 +830,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
         } /* block */
         break;
       case kDataBrowserContainerOpened:
         } /* block */
         break;
       case kDataBrowserContainerOpened:
@@ -803,7 +841,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
          // add children to the expanded container:
           dataViewCtrlPtr->AddChildrenLevel(wxDataViewItem(reinterpret_cast<void*>(itemID)));
         } /* block */
          // add children to the expanded container:
           dataViewCtrlPtr->AddChildrenLevel(wxDataViewItem(reinterpret_cast<void*>(itemID)));
         } /* block */
@@ -826,7 +864,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
             dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
           } /* if */
          // finally send the equivalent wxWidget event:
             dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
           } /* if */
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
         } /* block */
         break;
       case kDataBrowserEditStopped:
         } /* block */
         break;
       case kDataBrowserEditStopped:
@@ -847,7 +885,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
             dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
           } /* if */
          // finally send the equivalent wxWidget event:
             dataViewEvent.SetDataViewColumn(dataViewCtrlPtr->GetColumnPtr(propertyID));
           } /* if */
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
         } /* block */
         break;
       case kDataBrowserItemAdded:
         } /* block */
         break;
       case kDataBrowserItemAdded:
@@ -862,7 +900,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetItem(wxDataViewItem(reinterpret_cast<void*>(itemID)));
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
         } /* block */
         break;
       case kDataBrowserItemRemoved:
         } /* block */
         break;
       case kDataBrowserItemRemoved:
@@ -877,7 +915,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetModel      (dataViewCtrlPtr->GetModel());
          // finally send the equivalent wxWidget event:
           dataViewEvent.SetEventObject(dataViewCtrlPtr);
           dataViewEvent.SetModel      (dataViewCtrlPtr->GetModel());
          // finally send the equivalent wxWidget event:
-          dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+          dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
         } /* block */
         break;
       case kDataBrowserUserStateChanged:
         } /* block */
         break;
       case kDataBrowserUserStateChanged:
@@ -918,7 +956,7 @@ void wxMacDataViewDataBrowserListViewControl::DataBrowserItemNotificationProc(Da
                 dataViewEvent.SetColumn(columnIndex);
                 dataViewEvent.SetDataViewColumn(columnPtr);
                // finally send the equivalent wxWidget event:
                 dataViewEvent.SetColumn(columnIndex);
                 dataViewEvent.SetDataViewColumn(columnPtr);
                // finally send the equivalent wxWidget event:
-                dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent);
+                dataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
               } /* if */
             } /* if */
           } /* if */
               } /* if */
             } /* if */
           } /* if */