]> git.saurik.com Git - wxWidgets.git/commitdiff
Virtualize StartEditor and add implementations for the ports that can do it.
authorRobin Dunn <robin@alldunn.com>
Tue, 31 May 2011 19:36:47 +0000 (19:36 +0000)
committerRobin Dunn <robin@alldunn.com>
Tue, 31 May 2011 19:36:47 +0000 (19:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67817 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
include/wx/dataview.h
include/wx/generic/dataview.h
include/wx/gtk/dataview.h
include/wx/osx/carbon/dataview.h
include/wx/osx/cocoa/dataview.h
include/wx/osx/core/dataview.h
include/wx/osx/dataview.h
interface/wx/dataview.h
samples/dataview/dataview.cpp
src/gtk/dataview.cpp
src/osx/carbon/dataview.cpp
src/osx/cocoa/dataview.mm
src/osx/dataview_osx.cpp

index 7fcc15873f7d37685b0c19a0e910a2098c0514dd..f7add4c6d510e717bce7abb048a4545124ea1523 100644 (file)
@@ -700,6 +700,8 @@ public:
                                 const wxDataViewColumn *column = NULL ) = 0;
     virtual void HitTest( const wxPoint & point, wxDataViewItem &item, wxDataViewColumn* &column ) const = 0;
     virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const = 0;
+    
+    virtual void StartEditor( const wxDataViewItem & item, unsigned int column ) { }
 
 #if wxUSE_DRAG_AND_DROP
     virtual bool EnableDragSource(const wxDataFormat& WXUNUSED(format))
index d47b028b04db9d0c8656442ca4d4375bb3ffd2c9..16117adb457760a20bca8715297202019c26297b 100644 (file)
@@ -185,7 +185,7 @@ public:
 
     virtual wxBorder GetDefaultBorder() const;
 
-    void StartEditor( const wxDataViewItem & item, unsigned int column );
+    virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
 
 protected:
     virtual int GetSelections( wxArrayInt & sel ) const;
index 03bcbdf1c30cc3a3a0ec41808e3687438fac7d1a..73254d48926b3955c2f4726d318345f5129e6fda 100644 (file)
@@ -158,6 +158,8 @@ public:
                           wxDataViewColumn *&column ) const;
     virtual wxRect GetItemRect( const wxDataViewItem &item,
                                 const wxDataViewColumn *column = NULL ) const;
+                                
+    virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
 
     virtual void Expand( const wxDataViewItem & item );
     virtual void Collapse( const wxDataViewItem & item );
index 056a2a895c29ce06b4dee2750ae8b9c40640e036..b6d88a2661726aa317547eece7b9d851e5c6d42d 100644 (file)
@@ -427,6 +427,8 @@ public:
   virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height);
   virtual void OnSize      ();
 
+  virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
+
  //
  // other methods
  //
index 335bce5ad718c309272492d776b521bb07f64cc2..624c2cb3f746c9b7fa8a6df43fff60ab4270dad8 100644 (file)
@@ -496,6 +496,8 @@ public:
                          wxDataViewColumn*& columnPtr) const;
     virtual void SetRowHeight(const wxDataViewItem& item, unsigned int height);
     virtual void OnSize();
+    
+    virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
 
     // drag & drop helper methods
     wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects);
index 8a24aaefd3d2a07fd1a406fad6c31006bd4f8225..1a554d704b7ea232fa88aec58cc07c52eaadfa1c 100644 (file)
@@ -109,6 +109,7 @@ public:
   virtual void HitTest     (wxPoint const& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const = 0; // return the item and column pointer that contains with the passed point
   virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height)                                = 0; // sets the height of the row containg the passed item in the native control
   virtual void OnSize      (void)                                                                           = 0; // updates the layout of the native control after a size event
+  virtual void StartEditor( const wxDataViewItem & item, unsigned int column )                              = 0; // starts editing the passed in item and column
 };
 
 #endif // _WX_DATAVIEWCTRL_CORE_H_
index e2ca2a24051416f775ba998060731b25072b42ba..e585fa01d39f0235bb6c28990067b33d1218b08c 100644 (file)
@@ -201,6 +201,8 @@ public:
 
  // finishes editing of custom items; if no custom item is currently edited the method does nothing
   void FinishCustomItemEditing();
+  
+  virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
 
  // returns the n-th pointer to a column;
  // this method is different from GetColumn(unsigned int pos) because here 'n' is not a position in the control but the n-th
index aebeef76e309a9554fe4f906a37357302a542877..1d2ab0a8a5edd85e356b0fedcd30b0cdd0e1bf98 100644 (file)
@@ -1095,6 +1095,14 @@ public:
     */
     virtual void SetSelections(const wxDataViewItemArray& sel);
 
+    /** 
+        Programmatically starts editing the given item on the given column.
+        Currently not implemented on wxOSX Carbon.
+        @since 2.9.2
+    */
+    
+    virtual void StartEditor(const wxDataViewItem & item, unsigned int column);
+
     /**
         Unselect the given item.
     */
index b9d424622aed188f16748bc7dfa0589692cb23be..ce215ffaafbbfa36af9d7302b7018d62810149d0 100644 (file)
@@ -1160,8 +1160,11 @@ void MyFrame::OnAddTreeItem(wxCommandEvent& WXUNUSED(event))
 {
     wxDataViewTreeCtrl* ctrl = (wxDataViewTreeCtrl*) m_ctrl[3];
     wxDataViewItem selected = ctrl->GetSelection();
-    if (ctrl->IsContainer(selected))
-        ctrl->AppendItem( selected, "Item", 0 );
+    if (ctrl->IsContainer(selected)) {
+        wxDataViewItem newitem = ctrl->AppendItem( selected, "Item", 0 );
+        ctrl->Select(newitem);
+        ctrl->StartEditor(newitem, 0);
+    }
 }
 
 void MyFrame::OnAddTreeContainerItem(wxCommandEvent& WXUNUSED(event))
index 19ddb6a8d8a6183ab0aef04de883285ed00e37e1..c268ff468247b4523364c5b957a99dded0705578 100644 (file)
@@ -4836,6 +4836,33 @@ void wxDataViewCtrl::DoSetCurrentItem(const wxDataViewItem& item)
     gtk_tree_view_set_cursor(GTK_TREE_VIEW(m_treeview), path, NULL, FALSE);
 }
 
+void wxDataViewCtrl::StartEditor(const wxDataViewItem& item, unsigned int column)
+{
+    wxCHECK_RET( m_treeview,
+                 "Current item can't be set before creating the control." );
+
+    // We need to make sure the model knows about this item or the path would
+    // be invalid and gtk_tree_view_set_cursor() would silently do nothing.
+    ExpandAncestors(item);
+    
+    wxDataViewColumn *dvcolumn = GetColumn(column);
+    wxASSERT_MSG(dvcolumn, "Could not retrieve column");
+    GtkTreeViewColumn *gcolumn = GTK_TREE_VIEW_COLUMN(dvcolumn->GetGtkHandle());
+
+    // We also need to preserve the existing selection from changing.
+    // Unfortunately the only way to do it seems to use our own selection
+    // function and forbid any selection changes during set cursor call.
+    wxGtkTreeSelectionLock
+        lock(gtk_tree_view_get_selection(GTK_TREE_VIEW(m_treeview)));
+
+    // Do move the cursor now.
+    GtkTreeIter iter;
+    iter.user_data = item.GetID();
+    wxGtkTreePath path(m_internal->get_path( &iter ));
+
+    gtk_tree_view_set_cursor(GTK_TREE_VIEW(m_treeview), path, gcolumn, TRUE);
+}
+
 wxDataViewItem wxDataViewCtrl::GetSelection() const
 {
     GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(m_treeview) );
index ee915593506f57906ba70ad6456e612a13a0ace0..ff748471c213319136e043f7f89e6c1445d1eb73 100644 (file)
@@ -1236,6 +1236,11 @@ void wxMacDataViewDataBrowserListViewControl::OnSize()
     SetHasScrollBars(true,true);
 }
 
+void wxMacDataViewDataBrowserListViewControl::StartEditor( const wxDataViewItem & item, unsigned int column )
+{
+    // implement me
+}
+
 //
 // callback functions (inherited from wxMacDataBrowserTableViewControl)
 //
index 2aeac7950d7a3844223dc70efb876016870b87a2..ac10280f6c25c58d1990b85eacc2d61807f6cf09 100644 (file)
@@ -2314,6 +2314,11 @@ void wxCocoaDataViewControl::Resort()
     [m_OutlineView reloadData];
 }
 
+void wxCocoaDataViewControl::StartEditor( const wxDataViewItem & item, unsigned int column )
+{
+    [m_OutlineView editColumn:column row:[m_OutlineView rowForItem:[m_DataSource getDataViewItemFromBuffer:item]] withEvent:nil select:YES];
+}
+
 //
 // other methods (inherited from wxDataViewWidgetImpl)
 //
index 08c094bd860be5ad5c5c216c3cc77098087a4e05..c239ca35ffb4df386ec5725450743cc4b4eec18c 100644 (file)
@@ -633,6 +633,11 @@ void wxDataViewCtrl::AddChildren(wxDataViewItem const& parentItem)
   (void) GetModel()->ItemsAdded(parentItem,items);
 }
 
+void wxDataViewCtrl::StartEditor( const wxDataViewItem & item, unsigned int column )
+{
+    GetDataViewPeer()->StartEditor(item, column);
+}
+
 void wxDataViewCtrl::FinishCustomItemEditing()
 {
   if (GetCustomRendererItem().IsOk())