]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/dataview.cpp
move wxGridCellRenderer::Draw before other derived classes implementations (no real...
[wxWidgets.git] / src / osx / carbon / dataview.cpp
index 4da4cb3efb4cb5dc790e3bb24a5d17265dce0b11..8eeeac29a91324342375b9863ac261800e31183c 100644 (file)
@@ -1051,12 +1051,12 @@ bool wxDataViewCtrl::AssociateModel(wxDataViewModel* model)
 
 bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* columnPtr)
 {
 
 bool wxDataViewCtrl::AppendColumn(wxDataViewColumn* columnPtr)
 {
-   return InsertColumn( kDataBrowserListViewAppendColumn, columnPtr );
+   return wxDataViewCtrl::InsertColumn( GetColumnCount(), columnPtr );
 }
 
 bool wxDataViewCtrl::PrependColumn(wxDataViewColumn* columnPtr)
 {
 }
 
 bool wxDataViewCtrl::PrependColumn(wxDataViewColumn* columnPtr)
 {
-   return InsertColumn( 0, columnPtr );
+   return wxDataViewCtrl::InsertColumn( 0, columnPtr );
 }
 
 bool wxDataViewCtrl::InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr)
 }
 
 bool wxDataViewCtrl::InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr)
@@ -1083,7 +1083,7 @@ bool wxDataViewCtrl::InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr)
  // full column variable initialization:
   columnPtr->SetPropertyID(NewPropertyID);
  // add column to wxWidget's internal structure:
  // full column variable initialization:
   columnPtr->SetPropertyID(NewPropertyID);
  // add column to wxWidget's internal structure:
-  wxCHECK_MSG(this->wxDataViewCtrlBase::AppendColumn(columnPtr) &&
+  wxCHECK_MSG(this->wxDataViewCtrlBase::InsertColumn(pos,columnPtr) &&
               m_ColumnPointers.insert(ColumnPointerHashMapType::value_type(NewPropertyID,columnPtr)).second,false,_("Could not add column to internal structures."));
  // create a column description and add column to the native control:
   wxCHECK_MSG(::InitializeColumnDescription(columnDescription,columnPtr,NewPropertyID,title),                 false,_("Column description could not be initialized."));
               m_ColumnPointers.insert(ColumnPointerHashMapType::value_type(NewPropertyID,columnPtr)).second,false,_("Could not add column to internal structures."));
  // create a column description and add column to the native control:
   wxCHECK_MSG(::InitializeColumnDescription(columnDescription,columnPtr,NewPropertyID,title),                 false,_("Column description could not be initialized."));
@@ -1183,6 +1183,8 @@ void wxDataViewCtrl::Collapse(wxDataViewItem const& item)
 
 void wxDataViewCtrl::EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr)
 {
 
 void wxDataViewCtrl::EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr)
 {
+  ExpandAncestors(item);
+
   if (item.IsOk())
   {
     DataBrowserPropertyID propertyID;
   if (item.IsOk())
   {
     DataBrowserPropertyID propertyID;
@@ -1210,8 +1212,13 @@ bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const
   {
     wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
 
   {
     wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
 
-    // TODO ???
-    // This doesn't seem to be supported
+    DataBrowserItemState state = 0;
+    OSStatus err = ::GetDataBrowserItemState( 
+       MacDataViewListCtrlPtr->GetControlRef(), 
+       reinterpret_cast<DataBrowserItemID>(item.GetID()),
+       &state );
+    if ((err == 0) && (state & kDataBrowserContainerIsOpen))
+       return true;
   }
   return false;
 }
   }
   return false;
 }
@@ -1327,6 +1334,8 @@ void wxDataViewCtrl::Select(wxDataViewItem const& item)
 {
   if (item.IsOk())
   {
 {
   if (item.IsOk())
   {
+    ExpandAncestors(item);
+  
     DataBrowserItemID                              itemID(reinterpret_cast<DataBrowserItemID>(item.GetID()));
     wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
 
     DataBrowserItemID                              itemID(reinterpret_cast<DataBrowserItemID>(item.GetID()));
     wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
 
@@ -1336,18 +1345,31 @@ void wxDataViewCtrl::Select(wxDataViewItem const& item)
 
 void wxDataViewCtrl::SetSelections(wxDataViewItemArray const& sel)
 {
 
 void wxDataViewCtrl::SetSelections(wxDataViewItemArray const& sel)
 {
-  size_t const NoOfSelections = sel.GetCount();
+    size_t const NoOfSelections = sel.GetCount();
 
 
-  DataBrowserItemID* itemIDs;
+    wxDataViewItem last_parent;
 
 
-  wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
+    size_t i;
+    for (i = 0; i < NoOfSelections; i++)
+    {
+        wxDataViewItem item = sel[i];
+        wxDataViewItem parent = GetModel()->GetParent( item );
+        if (parent)
+        {
+            if (parent != last_parent)
+                ExpandAncestors(item);
+        }
+        last_parent = parent;
+    }
 
 
+    DataBrowserItemID* itemIDs;
+    wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
 
 
-  itemIDs = new DataBrowserItemID[NoOfSelections];
-  for (size_t i=0; i<NoOfSelections; ++i)
-    itemIDs[i] = reinterpret_cast<DataBrowserItemID>(sel[i].GetID());
-  MacDataViewListCtrlPtr->SetSelectedItems(NoOfSelections,itemIDs,kDataBrowserItemsAssign);
-  delete[] itemIDs;
+    itemIDs = new DataBrowserItemID[NoOfSelections];
+    for (i=0; i<NoOfSelections; ++i)
+      itemIDs[i] = reinterpret_cast<DataBrowserItemID>(sel[i].GetID());
+    MacDataViewListCtrlPtr->SetSelectedItems(NoOfSelections,itemIDs,kDataBrowserItemsAssign);
+    delete[] itemIDs;
 }
 
 void wxDataViewCtrl::Unselect(wxDataViewItem const& item)
 }
 
 void wxDataViewCtrl::Unselect(wxDataViewItem const& item)
@@ -1438,6 +1460,56 @@ void wxDataViewCtrl::DoSetIndent()
 }
 
 // event handling:
 }
 
 // event handling:
+void wxDataViewCtrl::OnMouse(wxMouseEvent& event)
+{
+    event.Skip();
+    
+    if (GetModel() == NULL)
+        return;
+
+    wxMacDataViewDataBrowserListViewControlPointer MacDataViewListCtrlPtr(dynamic_cast<wxMacDataViewDataBrowserListViewControlPointer>(m_peer));
+
+    int NoOfChildren;
+    wxDataViewItemArray items;
+    NoOfChildren = GetModel()->GetChildren( wxDataViewItem(), items);
+    if (NoOfChildren == 0)
+       return;
+    wxDataViewItem firstChild = items[0];
+
+    UInt16 headerHeight = 0;
+    MacDataViewListCtrlPtr->GetHeaderButtonHeight(&headerHeight);
+  
+    
+    if (event.GetY() < headerHeight)
+    {
+       unsigned int col_count = GetColumnCount();
+       unsigned int col;
+       for (col = 0; col < col_count; col++)
+       {
+           wxDataViewColumn *column = GetColumn( col );
+           if (column->IsHidden())
+              continue;
+           
+           Rect itemrect;
+           ::GetDataBrowserItemPartBounds( MacDataViewListCtrlPtr->GetControlRef(), 
+              reinterpret_cast<DataBrowserItemID>(firstChild.GetID()), column->GetPropertyID(),
+              kDataBrowserPropertyEnclosingPart, &itemrect );
+           
+           if (abs( event.GetX() - itemrect.right) < 3)
+           {
+               if (column->GetFlags() & wxDATAVIEW_COL_RESIZABLE)
+                  SetCursor( wxCursor( wxCURSOR_SIZEWE ) );
+               else
+                  SetCursor( *wxSTANDARD_CURSOR );
+               return;
+           }
+       }
+       
+    }
+    
+    SetCursor( *wxSTANDARD_CURSOR );
+}
+
 void wxDataViewCtrl::OnSize(wxSizeEvent& event)
 {
   unsigned int const NoOfColumns = this->GetColumnCount();
 void wxDataViewCtrl::OnSize(wxSizeEvent& event)
 {
   unsigned int const NoOfColumns = this->GetColumnCount();
@@ -1475,6 +1547,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl,wxDataViewCtrlBase)
 
 BEGIN_EVENT_TABLE(wxDataViewCtrl,wxDataViewCtrlBase)
   EVT_SIZE(wxDataViewCtrl::OnSize)
 
 BEGIN_EVENT_TABLE(wxDataViewCtrl,wxDataViewCtrlBase)
   EVT_SIZE(wxDataViewCtrl::OnSize)
+  EVT_MOTION(wxDataViewCtrl::OnMouse)
 END_EVENT_TABLE()
 
 #endif // !wxUSE_GENERICDATAVIEWCTRL
 END_EVENT_TABLE()
 
 #endif // !wxUSE_GENERICDATAVIEWCTRL