Merge branch 'dvc': miscellaneous wxDataViewCtrl-related fixes

This commit is contained in:
Vadim Zeitlin
2016-04-02 01:09:06 +02:00
16 changed files with 474 additions and 440 deletions

View File

@@ -69,10 +69,12 @@ All (GUI):
- Add support for wxAuiManager and wxAuiPaneInfo to XRC (Andrea Zanellato). - Add support for wxAuiManager and wxAuiPaneInfo to XRC (Andrea Zanellato).
- Add support for wxSL_MIN_MAX_LABELS and wxSL_VALUE_LABEL to XRC (ousnius). - Add support for wxSL_MIN_MAX_LABELS and wxSL_VALUE_LABEL to XRC (ousnius).
- Update Scintilla to v3.6.3 (Paul Kulchenko). - Update Scintilla to v3.6.3 (Paul Kulchenko).
- Make wxDataViewCtrl::Expand() expand ancestors in native ports too.
wxGTK: wxGTK:
- Implement setting link colours in wxHyperlinkCtrl for GTK+3 (Hanmac). - Implement setting link colours in wxHyperlinkCtrl for GTK+3 (Hanmac).
- Support background colour in wxDataViewCtrl attributes.
wxMSW: wxMSW:
@@ -87,6 +89,8 @@ wxOSX:
- Remove extra borders around wxFilePickerCtrl (John Roberts). - Remove extra borders around wxFilePickerCtrl (John Roberts).
- Set up extensions filter correctly in wxFileDialog (nick863). - Set up extensions filter correctly in wxFileDialog (nick863).
- Turn off automatic quotes substitutions in wxTextCtrl (Xlord2). - Turn off automatic quotes substitutions in wxTextCtrl (Xlord2).
- Implement wxDataViewChoiceByIndexRenderer (wanup).
- Fix unnecessary indentation in list-like wxDataViewCtrl (Andreas Falkenhahn).
Unix: Unix:

View File

@@ -662,6 +662,9 @@ public:
return !allow; return !allow;
} }
// Return true if multi column sort is currently allowed.
virtual bool IsMultiColumnSortAllowed() const { return false; }
// This should also be overridden to actually use the specified column for // This should also be overridden to actually use the specified column for
// sorting if using multiple columns is supported. // sorting if using multiple columns is supported.
virtual void ToggleSortByColumn(int WXUNUSED(column)) { } virtual void ToggleSortByColumn(int WXUNUSED(column)) { }
@@ -702,8 +705,8 @@ public:
virtual void SelectAll() = 0; virtual void SelectAll() = 0;
virtual void UnselectAll() = 0; virtual void UnselectAll() = 0;
virtual void Expand( const wxDataViewItem & item ) = 0; void Expand( const wxDataViewItem & item );
virtual void ExpandAncestors( const wxDataViewItem & item ); void ExpandAncestors( const wxDataViewItem & item );
virtual void Collapse( const wxDataViewItem & item ) = 0; virtual void Collapse( const wxDataViewItem & item ) = 0;
virtual bool IsExpanded( const wxDataViewItem & item ) const = 0; virtual bool IsExpanded( const wxDataViewItem & item ) const = 0;
@@ -744,6 +747,10 @@ protected:
virtual void DoSetExpanderColumn() = 0 ; virtual void DoSetExpanderColumn() = 0 ;
virtual void DoSetIndent() = 0; virtual void DoSetIndent() = 0;
// Just expand this item assuming it is already shown, i.e. its parent has
// been already expanded using ExpandAncestors().
virtual void DoExpand(const wxDataViewItem & item) = 0;
private: private:
// Implementation of the public Set/GetCurrentItem() methods which are only // Implementation of the public Set/GetCurrentItem() methods which are only
// called in multi selection case (for single selection controls their // called in multi selection case (for single selection controls their
@@ -766,25 +773,32 @@ protected:
class WXDLLIMPEXP_ADV wxDataViewEvent : public wxNotifyEvent class WXDLLIMPEXP_ADV wxDataViewEvent : public wxNotifyEvent
{ {
public: public:
wxDataViewEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) // Default ctor, normally shouldn't be used and mostly exists only for
: wxNotifyEvent(commandType, winid), // backwards compatibility.
m_item(0), wxDataViewEvent()
m_col(-1), : wxNotifyEvent()
m_model(NULL), {
m_value(wxNullVariant), Init(NULL, NULL, wxDataViewItem());
m_column(NULL), }
m_pos(-1,-1),
m_cacheFrom(0), // Constructor for the events affecting columns (and possibly also items).
m_cacheTo(0), wxDataViewEvent(wxEventType evtType,
m_editCancelled(false) wxDataViewCtrlBase* dvc,
#if wxUSE_DRAG_AND_DROP wxDataViewColumn* column,
, m_dataObject(NULL), const wxDataViewItem& item = wxDataViewItem())
m_dataBuffer(NULL), : wxNotifyEvent(evtType, dvc->GetId())
m_dataSize(0), {
m_dragFlags(0), Init(dvc, column, item);
m_dropEffect(wxDragNone) }
#endif
{ } // Constructor for the events affecting only the items.
wxDataViewEvent(wxEventType evtType,
wxDataViewCtrlBase* dvc,
const wxDataViewItem& item)
: wxNotifyEvent(evtType, dvc->GetId())
{
Init(dvc, NULL, item);
}
wxDataViewEvent(const wxDataViewEvent& event) wxDataViewEvent(const wxDataViewEvent& event)
: wxNotifyEvent(event), : wxNotifyEvent(event),
@@ -808,13 +822,8 @@ public:
{ } { }
wxDataViewItem GetItem() const { return m_item; } wxDataViewItem GetItem() const { return m_item; }
void SetItem( const wxDataViewItem &item ) { m_item = item; }
int GetColumn() const { return m_col; } int GetColumn() const { return m_col; }
void SetColumn( int col ) { m_col = col; }
wxDataViewModel* GetModel() const { return m_model; } wxDataViewModel* GetModel() const { return m_model; }
void SetModel( wxDataViewModel *model ) { m_model = model; }
const wxVariant &GetValue() const { return m_value; } const wxVariant &GetValue() const { return m_value; }
void SetValue( const wxVariant &value ) { m_value = value; } void SetValue( const wxVariant &value ) { m_value = value; }
@@ -824,7 +833,6 @@ public:
void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; }
// for wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only // for wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only
void SetDataViewColumn( wxDataViewColumn *col ) { m_column = col; }
wxDataViewColumn *GetDataViewColumn() const { return m_column; } wxDataViewColumn *GetDataViewColumn() const { return m_column; }
// for wxEVT_DATAVIEW_CONTEXT_MENU only // for wxEVT_DATAVIEW_CONTEXT_MENU only
@@ -857,6 +865,20 @@ public:
virtual wxEvent *Clone() const wxOVERRIDE { return new wxDataViewEvent(*this); } virtual wxEvent *Clone() const wxOVERRIDE { return new wxDataViewEvent(*this); }
// These methods shouldn't be used outside of wxWidgets and wxWidgets
// itself doesn't use them any longer neither as it constructs the events
// with the appropriate ctors directly.
#if WXWIN_COMPATIBILITY_3_0
wxDEPRECATED_MSG("Pass the argument to the ctor instead")
void SetModel( wxDataViewModel *model ) { m_model = model; }
wxDEPRECATED_MSG("Pass the argument to the ctor instead")
void SetDataViewColumn( wxDataViewColumn *col ) { m_column = col; }
wxDEPRECATED_MSG("Pass the argument to the ctor instead")
void SetColumn( int col ) { m_col = col; }
wxDEPRECATED_MSG("Pass the argument to the ctor instead")
void SetItem( const wxDataViewItem &item ) { m_item = item; }
#endif // WXWIN_COMPATIBILITY_3_0
protected: protected:
wxDataViewItem m_item; wxDataViewItem m_item;
int m_col; int m_col;
@@ -880,6 +902,11 @@ protected:
#endif // wxUSE_DRAG_AND_DROP #endif // wxUSE_DRAG_AND_DROP
private: private:
// Common part of non-copy ctors.
void Init(wxDataViewCtrlBase* dvc,
wxDataViewColumn* column,
const wxDataViewItem& item);
wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent); wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent);
}; };

View File

@@ -52,37 +52,97 @@ public:
} }
// implement wxHeaderColumnBase methods // implement wxHeaderColumnBase methods
virtual void SetTitle(const wxString& title) { m_title = title; UpdateDisplay(); } virtual void SetTitle(const wxString& title) wxOVERRIDE
virtual wxString GetTitle() const { return m_title; } {
m_title = title;
UpdateWidth();
}
virtual wxString GetTitle() const wxOVERRIDE
{
return m_title;
}
virtual void SetWidth(int width) { m_width = width; UpdateDisplay(); } virtual void SetWidth(int width) wxOVERRIDE
virtual int GetWidth() const; {
// As a small optimization, use this method to avoid calling
// UpdateWidth() if the width didn't really change, even if we don't
// care about its return value.
(void)WXUpdateWidth(width);
}
virtual int GetWidth() const wxOVERRIDE;
virtual void SetMinWidth(int minWidth) { m_minWidth = minWidth; UpdateDisplay(); } virtual void SetMinWidth(int minWidth) wxOVERRIDE
virtual int GetMinWidth() const { return m_minWidth; } {
m_minWidth = minWidth;
UpdateWidth();
}
virtual int GetMinWidth() const wxOVERRIDE
{
return m_minWidth;
}
virtual void SetAlignment(wxAlignment align) { m_align = align; UpdateDisplay(); } virtual void SetAlignment(wxAlignment align) wxOVERRIDE
virtual wxAlignment GetAlignment() const { return m_align; } {
m_align = align;
UpdateDisplay();
}
virtual wxAlignment GetAlignment() const wxOVERRIDE
{
return m_align;
}
virtual void SetFlags(int flags) { m_flags = flags; UpdateDisplay(); } virtual void SetFlags(int flags) wxOVERRIDE
virtual int GetFlags() const { return m_flags; } {
m_flags = flags;
UpdateDisplay();
}
virtual int GetFlags() const wxOVERRIDE
{
return m_flags;
}
virtual bool IsSortKey() const { return m_sort; } virtual bool IsSortKey() const wxOVERRIDE
{
return m_sort;
}
virtual void UnsetAsSortKey(); virtual void UnsetAsSortKey() wxOVERRIDE;
virtual void SetSortOrder(bool ascending); virtual void SetSortOrder(bool ascending) wxOVERRIDE;
virtual bool IsSortOrderAscending() const { return m_sortAscending; } virtual bool IsSortOrderAscending() const wxOVERRIDE
{
return m_sortAscending;
}
virtual void SetBitmap( const wxBitmap& bitmap ) { wxDataViewColumnBase::SetBitmap(bitmap); UpdateDisplay(); } virtual void SetBitmap( const wxBitmap& bitmap ) wxOVERRIDE
{
wxDataViewColumnBase::SetBitmap(bitmap);
UpdateWidth();
}
// This method is specific to the generic implementation and is used only
// by wxWidgets itself.
bool WXUpdateWidth(int width)
{
if ( width == m_width )
return false;
m_width = width;
UpdateWidth();
return true;
}
private: private:
// common part of all ctors // common part of all ctors
void Init(int width, wxAlignment align, int flags); void Init(int width, wxAlignment align, int flags);
// These methods forward to wxDataViewCtrl::OnColumnChange() and
// OnColumnWidthChange() respectively, i.e. the latter is stronger than the
// former.
void UpdateDisplay(); void UpdateDisplay();
void UpdateWidth();
wxString m_title; wxString m_title;
int m_width, int m_width,
@@ -139,63 +199,62 @@ public:
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxDataViewCtrlNameStr); const wxString& name = wxDataViewCtrlNameStr);
virtual bool AssociateModel( wxDataViewModel *model ); virtual bool AssociateModel( wxDataViewModel *model ) wxOVERRIDE;
virtual bool AppendColumn( wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ) wxOVERRIDE;
virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool PrependColumn( wxDataViewColumn *col ) wxOVERRIDE;
virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ) wxOVERRIDE;
virtual void DoSetExpanderColumn(); virtual void DoSetExpanderColumn() wxOVERRIDE;
virtual void DoSetIndent(); virtual void DoSetIndent() wxOVERRIDE;
virtual unsigned int GetColumnCount() const; virtual unsigned int GetColumnCount() const wxOVERRIDE;
virtual wxDataViewColumn* GetColumn( unsigned int pos ) const; virtual wxDataViewColumn* GetColumn( unsigned int pos ) const wxOVERRIDE;
virtual bool DeleteColumn( wxDataViewColumn *column ); virtual bool DeleteColumn( wxDataViewColumn *column ) wxOVERRIDE;
virtual bool ClearColumns(); virtual bool ClearColumns() wxOVERRIDE;
virtual int GetColumnPosition( const wxDataViewColumn *column ) const; virtual int GetColumnPosition( const wxDataViewColumn *column ) const wxOVERRIDE;
virtual wxDataViewColumn *GetSortingColumn() const; virtual wxDataViewColumn *GetSortingColumn() const wxOVERRIDE;
virtual wxVector<wxDataViewColumn *> GetSortingColumns() const; virtual wxVector<wxDataViewColumn *> GetSortingColumns() const wxOVERRIDE;
virtual int GetSelectedItemsCount() const; virtual int GetSelectedItemsCount() const wxOVERRIDE;
virtual int GetSelections( wxDataViewItemArray & sel ) const; virtual int GetSelections( wxDataViewItemArray & sel ) const wxOVERRIDE;
virtual void SetSelections( const wxDataViewItemArray & sel ); virtual void SetSelections( const wxDataViewItemArray & sel ) wxOVERRIDE;
virtual void Select( const wxDataViewItem & item ); virtual void Select( const wxDataViewItem & item ) wxOVERRIDE;
virtual void Unselect( const wxDataViewItem & item ); virtual void Unselect( const wxDataViewItem & item ) wxOVERRIDE;
virtual bool IsSelected( const wxDataViewItem & item ) const; virtual bool IsSelected( const wxDataViewItem & item ) const wxOVERRIDE;
virtual void SelectAll(); virtual void SelectAll() wxOVERRIDE;
virtual void UnselectAll(); virtual void UnselectAll() wxOVERRIDE;
virtual void EnsureVisible( const wxDataViewItem & item, virtual void EnsureVisible( const wxDataViewItem & item,
const wxDataViewColumn *column = NULL ); const wxDataViewColumn *column = NULL ) wxOVERRIDE;
virtual void HitTest( const wxPoint & point, wxDataViewItem & item, virtual void HitTest( const wxPoint & point, wxDataViewItem & item,
wxDataViewColumn* &column ) const; wxDataViewColumn* &column ) const wxOVERRIDE;
virtual wxRect GetItemRect( const wxDataViewItem & item, virtual wxRect GetItemRect( const wxDataViewItem & item,
const wxDataViewColumn *column = NULL ) const; const wxDataViewColumn *column = NULL ) const wxOVERRIDE;
virtual bool SetRowHeight( int rowHeight ); virtual bool SetRowHeight( int rowHeight ) wxOVERRIDE;
virtual void Expand( const wxDataViewItem & item ); virtual void Collapse( const wxDataViewItem & item ) wxOVERRIDE;
virtual void Collapse( const wxDataViewItem & item ); virtual bool IsExpanded( const wxDataViewItem & item ) const wxOVERRIDE;
virtual bool IsExpanded( const wxDataViewItem & item ) const;
virtual void SetFocus(); virtual void SetFocus() wxOVERRIDE;
virtual bool SetFont(const wxFont & font); virtual bool SetFont(const wxFont & font) wxOVERRIDE;
virtual bool AllowMultiColumnSort(bool allow); virtual bool AllowMultiColumnSort(bool allow) wxOVERRIDE;
virtual bool IsMultiColumnSortAllowed() { return m_allowMultiColumnSort; } virtual bool IsMultiColumnSortAllowed() const wxOVERRIDE { return m_allowMultiColumnSort; }
virtual void ToggleSortByColumn(int column); virtual void ToggleSortByColumn(int column) wxOVERRIDE;
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
virtual bool EnableDragSource( const wxDataFormat &format ); virtual bool EnableDragSource( const wxDataFormat &format ) wxOVERRIDE;
virtual bool EnableDropTarget( const wxDataFormat &format ); virtual bool EnableDropTarget( const wxDataFormat &format ) wxOVERRIDE;
#endif // wxUSE_DRAG_AND_DROP #endif // wxUSE_DRAG_AND_DROP
virtual wxBorder GetDefaultBorder() const; virtual wxBorder GetDefaultBorder() const wxOVERRIDE;
virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column); virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) wxOVERRIDE;
// These methods are specific to generic wxDataViewCtrl implementation and // These methods are specific to generic wxDataViewCtrl implementation and
// should not be used in portable code. // should not be used in portable code.
@@ -203,12 +262,12 @@ public:
void SetAlternateRowColour(const wxColour& colour); void SetAlternateRowColour(const wxColour& colour);
protected: protected:
virtual void EnsureVisible( int row, int column ); void EnsureVisibleRowCol( int row, int column );
// Notice that row here may be invalid (i.e. >= GetRowCount()), this is not // Notice that row here may be invalid (i.e. >= GetRowCount()), this is not
// an error and this function simply returns an invalid item in this case. // an error and this function simply returns an invalid item in this case.
virtual wxDataViewItem GetItemByRow( unsigned int row ) const; wxDataViewItem GetItemByRow( unsigned int row ) const;
virtual int GetRowByItem( const wxDataViewItem & item ) const; int GetRowByItem( const wxDataViewItem & item ) const;
// Mark the column as being used or not for sorting. // Mark the column as being used or not for sorting.
void UseColumnForSorting(int idx); void UseColumnForSorting(int idx);
@@ -233,6 +292,9 @@ public: // utility functions not part of the API
// update the display after a change to an individual column // update the display after a change to an individual column
void OnColumnChange(unsigned int idx); void OnColumnChange(unsigned int idx);
// update after the column width changes, also calls OnColumnChange()
void OnColumnWidthChange(unsigned int idx);
// update after a change to the number of columns // update after a change to the number of columns
void OnColumnsCountChanged(); void OnColumnsCountChanged();
@@ -247,13 +309,15 @@ public: // utility functions not part of the API
// return the column displayed at the given position in the control // return the column displayed at the given position in the control
wxDataViewColumn *GetColumnAt(unsigned int pos) const; wxDataViewColumn *GetColumnAt(unsigned int pos) const;
virtual wxDataViewColumn *GetCurrentColumn() const; virtual wxDataViewColumn *GetCurrentColumn() const wxOVERRIDE;
virtual void OnInternalIdle(); virtual void OnInternalIdle() wxOVERRIDE;
private: private:
virtual wxDataViewItem DoGetCurrentItem() const; virtual wxDataViewItem DoGetCurrentItem() const wxOVERRIDE;
virtual void DoSetCurrentItem(const wxDataViewItem& item); virtual void DoSetCurrentItem(const wxDataViewItem& item) wxOVERRIDE;
virtual void DoExpand(const wxDataViewItem& item) wxOVERRIDE;
void InvalidateColBestWidths(); void InvalidateColBestWidths();
void InvalidateColBestWidth(int idx); void InvalidateColBestWidth(int idx);
@@ -289,12 +353,12 @@ private:
private: private:
void OnSize( wxSizeEvent &event ); void OnSize( wxSizeEvent &event );
virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size); virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size) wxOVERRIDE;
// we need to return a special WM_GETDLGCODE value to process just the // we need to return a special WM_GETDLGCODE value to process just the
// arrows but let the other navigation characters through // arrows but let the other navigation characters through
#ifdef __WXMSW__ #ifdef __WXMSW__
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) wxOVERRIDE;
#endif // __WXMSW__ #endif // __WXMSW__
WX_FORWARD_TO_SCROLL_HELPER() WX_FORWARD_TO_SCROLL_HELPER()

View File

@@ -161,7 +161,6 @@ public:
virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) wxOVERRIDE; virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column) wxOVERRIDE;
virtual void Expand( const wxDataViewItem & item ) wxOVERRIDE;
virtual void Collapse( const wxDataViewItem & item ) wxOVERRIDE; virtual void Collapse( const wxDataViewItem & item ) wxOVERRIDE;
virtual bool IsExpanded( const wxDataViewItem & item ) const wxOVERRIDE; virtual bool IsExpanded( const wxDataViewItem & item ) const wxOVERRIDE;
@@ -190,6 +189,8 @@ protected:
virtual void DoSetExpanderColumn() wxOVERRIDE; virtual void DoSetExpanderColumn() wxOVERRIDE;
virtual void DoSetIndent() wxOVERRIDE; virtual void DoSetIndent() wxOVERRIDE;
virtual void DoExpand(const wxDataViewItem& item) wxOVERRIDE;
virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE; virtual void DoApplyWidgetStyle(GtkRcStyle *style) wxOVERRIDE;
private: private:

View File

@@ -447,7 +447,6 @@ public:
virtual void Collapse(const wxDataViewItem& item); virtual void Collapse(const wxDataViewItem& item);
virtual void EnsureVisible(const wxDataViewItem& item, virtual void EnsureVisible(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr); wxDataViewColumn const* columnPtr);
virtual void Expand(const wxDataViewItem& item);
virtual unsigned int GetCount() const; virtual unsigned int GetCount() const;
virtual wxRect GetRectangle(const wxDataViewItem& item, virtual wxRect GetRectangle(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr); wxDataViewColumn const* columnPtr);
@@ -490,6 +489,9 @@ public:
// other methods (inherited from wxDataViewWidgetImpl) // other methods (inherited from wxDataViewWidgetImpl)
// //
virtual void DoSetIndent(int indent); virtual void DoSetIndent(int indent);
virtual void DoExpand(const wxDataViewItem& item);
virtual void HitTest(const wxPoint& point, virtual void HitTest(const wxPoint& point,
wxDataViewItem& item, wxDataViewItem& item,
wxDataViewColumn*& columnPtr) const; wxDataViewColumn*& columnPtr) const;

View File

@@ -62,7 +62,6 @@ public:
virtual bool Add (wxDataViewItem const& parent, wxDataViewItemArray const& itesm) = 0; // adds a items to the native control virtual bool Add (wxDataViewItem const& parent, wxDataViewItemArray const& itesm) = 0; // adds a items to the native control
virtual void Collapse (wxDataViewItem const& item) = 0; // collapses the passed item in the native control virtual void Collapse (wxDataViewItem const& item) = 0; // collapses the passed item in the native control
virtual void EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr) = 0; // ensures that the passed item's value in the passed column is visible (column pointer can be NULL) virtual void EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr) = 0; // ensures that the passed item's value in the passed column is visible (column pointer can be NULL)
virtual void Expand (wxDataViewItem const& item) = 0; // expands the passed item in the native control
virtual unsigned int GetCount (void) const = 0; // returns the number of items in the native control virtual unsigned int GetCount (void) const = 0; // returns the number of items in the native control
virtual wxRect GetRectangle (wxDataViewItem const& item, wxDataViewColumn const* columnPtr) = 0; // returns the rectangle that is used by the passed item and column in the native control virtual wxRect GetRectangle (wxDataViewItem const& item, wxDataViewColumn const* columnPtr) = 0; // returns the rectangle that is used by the passed item and column in the native control
virtual bool IsExpanded (wxDataViewItem const& item) const = 0; // checks if the passed item is expanded in the native control virtual bool IsExpanded (wxDataViewItem const& item) const = 0; // checks if the passed item is expanded in the native control
@@ -104,6 +103,8 @@ public:
// other methods // other methods
// //
virtual void DoSetIndent (int indent) = 0; // sets the indention in the native control virtual void DoSetIndent (int indent) = 0; // sets the indention in the native control
virtual void DoExpand (wxDataViewItem const& item) = 0; // expands the passed item in the native control
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 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 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 OnSize (void) = 0; // updates the layout of the native control after a size event

View File

@@ -169,7 +169,6 @@ public:
virtual void Collapse( const wxDataViewItem& item) wxOVERRIDE; virtual void Collapse( const wxDataViewItem& item) wxOVERRIDE;
virtual void EnsureVisible(const wxDataViewItem& item, const wxDataViewColumn* columnPtr=NULL) wxOVERRIDE; virtual void EnsureVisible(const wxDataViewItem& item, const wxDataViewColumn* columnPtr=NULL) wxOVERRIDE;
virtual void Expand(const wxDataViewItem& item) wxOVERRIDE;
virtual bool IsExpanded(const wxDataViewItem & item) const wxOVERRIDE; virtual bool IsExpanded(const wxDataViewItem & item) const wxOVERRIDE;
virtual unsigned int GetCount() const; virtual unsigned int GetCount() const;
@@ -271,6 +270,8 @@ protected:
virtual void DoSetExpanderColumn() wxOVERRIDE; virtual void DoSetExpanderColumn() wxOVERRIDE;
virtual void DoSetIndent() wxOVERRIDE; virtual void DoSetIndent() wxOVERRIDE;
virtual void DoExpand(const wxDataViewItem& item) wxOVERRIDE;
virtual wxSize DoGetBestSize() const wxOVERRIDE; virtual wxSize DoGetBestSize() const wxOVERRIDE;
// event handling // event handling

View File

@@ -57,11 +57,9 @@ public:
virtual bool MacRender(); virtual bool MacRender();
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer);
@@ -86,8 +84,6 @@ private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer);
}; };
#if wxOSX_USE_COCOA
// ------------------------------------- // -------------------------------------
// wxDataViewChoiceRenderer // wxDataViewChoiceRenderer
// ------------------------------------- // -------------------------------------
@@ -104,11 +100,9 @@ public:
wxString GetChoice(size_t index) const { return m_choices[index]; } wxString GetChoice(size_t index) const { return m_choices[index]; }
const wxArrayString& GetChoices() const { return m_choices; } const wxArrayString& GetChoices() const { return m_choices; }
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxArrayString m_choices; wxArrayString m_choices;
@@ -116,7 +110,24 @@ private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewChoiceRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewChoiceRenderer);
}; };
#endif // wxOSX_USE_COCOA // ----------------------------------------------------------------------------
// wxDataViewChoiceByIndexRenderer
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewChoiceByIndexRenderer: public wxDataViewChoiceRenderer
{
public:
wxDataViewChoiceByIndexRenderer(const wxArrayString& choices,
wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
int alignment = wxDVR_DEFAULT_ALIGNMENT);
virtual bool SetValue(const wxVariant& value) wxOVERRIDE;
virtual bool GetValue(wxVariant& value) const wxOVERRIDE;
virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item,
unsigned col) wxOVERRIDE;
};
// --------------------------------------------------------- // ---------------------------------------------------------
// wxDataViewIconTextRenderer // wxDataViewIconTextRenderer
@@ -132,11 +143,9 @@ public:
virtual bool MacRender(); virtual bool MacRender();
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer);
@@ -157,11 +166,9 @@ public:
virtual bool MacRender(); virtual bool MacRender();
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer);
@@ -183,11 +190,9 @@ public:
virtual bool MacRender(); virtual bool MacRender();
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer);
@@ -208,11 +213,9 @@ public:
virtual bool MacRender(); virtual bool MacRender();
#if wxOSX_USE_COCOA
virtual void OSXOnCellChanged(NSObject *value, virtual void OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned col); unsigned col);
#endif // Cocoa
private: private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer); wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer);

View File

@@ -1299,7 +1299,7 @@ public:
ensures that the item itself as well as all ancestor ensures that the item itself as well as all ancestor
items have been read from the model by the control. items have been read from the model by the control.
*/ */
virtual void ExpandAncestors( const wxDataViewItem & item ); void ExpandAncestors( const wxDataViewItem & item );
/** /**
Returns pointer to the column. @a pos refers to the position in the Returns pointer to the column. @a pos refers to the position in the

View File

@@ -739,14 +739,14 @@ void MyFrame::BuildDataViewCtrl(wxPanel* parent, unsigned int nPanel, unsigned l
ilist->Add( wxIcon(wx_small_xpm) ); ilist->Add( wxIcon(wx_small_xpm) );
tc->AssignImageList( ilist ); tc->AssignImageList( ilist );
wxDataViewItem parent = const wxDataViewItem root =
tc->AppendContainer( wxDataViewItem(0), "The Root", 0 ); tc->AppendContainer( wxDataViewItem(0), "The Root", 0 );
tc->AppendItem( parent, "Child 1", 0 ); tc->AppendItem( root, "Child 1", 0 );
tc->AppendItem( parent, "Child 2", 0 ); tc->AppendItem( root, "Child 2", 0 );
tc->AppendItem( parent, "Child 3, very long, long, long, long", 0 ); tc->AppendItem( root, "Child 3, very long, long, long, long", 0 );
wxDataViewItem cont = wxDataViewItem cont =
tc->AppendContainer( parent, "Container child", 0 ); tc->AppendContainer( root, "Container child", 0 );
tc->AppendItem( cont, "Child 4", 0 ); tc->AppendItem( cont, "Child 4", 0 );
tc->AppendItem( cont, "Child 5", 0 ); tc->AppendItem( cont, "Child 5", 0 );

View File

@@ -470,7 +470,8 @@ bool MyListModel::GetAttrByRow( unsigned int row, unsigned int col,
case Col_IconText: case Col_IconText:
if ( !(row % 2) ) if ( !(row % 2) )
return false; return false;
attr.SetColour(*wxLIGHT_GREY); attr.SetColour(*wxYELLOW);
attr.SetBackgroundColour(*wxLIGHT_GREY);
break; break;
case Col_TextWithAttr: case Col_TextWithAttr:

View File

@@ -26,6 +26,7 @@
#endif #endif
#include "wx/datectrl.h" #include "wx/datectrl.h"
#include "wx/except.h"
#include "wx/spinctrl.h" #include "wx/spinctrl.h"
#include "wx/choice.h" #include "wx/choice.h"
#include "wx/imaglist.h" #include "wx/imaglist.h"
@@ -669,18 +670,18 @@ wxDataViewCtrl* wxDataViewRendererBase::GetView() const
bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect labelRect ) bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect labelRect )
{ {
wxDataViewCtrl* dv_ctrl = GetOwner()->GetOwner(); wxDataViewColumn* const column = GetOwner();
wxDataViewCtrl* const dv_ctrl = column->GetOwner();
// Before doing anything we send an event asking if editing of this item is really wanted. // Before doing anything we send an event asking if editing of this item is really wanted.
wxDataViewEvent start_event( wxEVT_DATAVIEW_ITEM_START_EDITING, dv_ctrl->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_START_EDITING, dv_ctrl, column, item);
start_event.SetDataViewColumn( GetOwner() ); dv_ctrl->GetEventHandler()->ProcessEvent( event );
start_event.SetModel( dv_ctrl->GetModel() ); if( !event.IsAllowed() )
start_event.SetItem( item );
start_event.SetEventObject( dv_ctrl );
dv_ctrl->GetEventHandler()->ProcessEvent( start_event );
if( !start_event.IsAllowed() )
return false; return false;
// Remember the item being edited for use in FinishEditing() later.
m_item = item;
unsigned int col = GetOwner()->GetModelColumn(); unsigned int col = GetOwner()->GetModelColumn();
const wxVariant& value = CheckedGetValue(dv_ctrl->GetModel(), item, col); const wxVariant& value = CheckedGetValue(dv_ctrl->GetModel(), item, col);
@@ -688,7 +689,10 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
// there might be no editor control for the given item // there might be no editor control for the given item
if(!m_editorCtrl) if(!m_editorCtrl)
{
m_item = wxDataViewItem();
return false; return false;
}
wxDataViewEditorCtrlEvtHandler *handler = wxDataViewEditorCtrlEvtHandler *handler =
new wxDataViewEditorCtrlEvtHandler( m_editorCtrl, (wxDataViewRenderer*) this ); new wxDataViewEditorCtrlEvtHandler( m_editorCtrl, (wxDataViewRenderer*) this );
@@ -706,17 +710,10 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item) void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item)
{ {
// Remember the item being edited for use in FinishEditing() later.
m_item = item;
wxDataViewColumn* const column = GetOwner(); wxDataViewColumn* const column = GetOwner();
wxDataViewCtrl* const dv_ctrl = column->GetOwner(); wxDataViewCtrl* const dv_ctrl = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl, column, item);
event.SetDataViewColumn( column );
event.SetModel( dv_ctrl->GetModel() );
event.SetItem( item );
event.SetEventObject( dv_ctrl );
dv_ctrl->GetEventHandler()->ProcessEvent( event ); dv_ctrl->GetEventHandler()->ProcessEvent( event );
} }
@@ -756,7 +753,8 @@ bool wxDataViewRendererBase::FinishEditing()
wxVariant value; wxVariant value;
const bool gotValue = GetValueFromEditorCtrl(m_editorCtrl, value); const bool gotValue = GetValueFromEditorCtrl(m_editorCtrl, value);
wxDataViewCtrl* dv_ctrl = GetOwner()->GetOwner(); wxDataViewColumn* const column = GetOwner();
wxDataViewCtrl* const dv_ctrl = column->GetOwner();
DestroyEditControl(); DestroyEditControl();
@@ -769,14 +767,9 @@ bool wxDataViewRendererBase::FinishEditing()
unsigned int col = GetOwner()->GetModelColumn(); unsigned int col = GetOwner()->GetModelColumn();
// Now we should send Editing Done event // Now we should send Editing Done event
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl, column, m_item);
event.SetDataViewColumn( GetOwner() );
event.SetModel( dv_ctrl->GetModel() );
event.SetItem( m_item );
event.SetValue( value ); event.SetValue( value );
event.SetColumn( col );
event.SetEditCanceled( !isValid ); event.SetEditCanceled( !isValid );
event.SetEventObject( dv_ctrl );
dv_ctrl->GetEventHandler()->ProcessEvent( event ); dv_ctrl->GetEventHandler()->ProcessEvent( event );
bool accepted = false; bool accepted = false;
@@ -826,6 +819,11 @@ wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model,
const wxDataViewItem& item, const wxDataViewItem& item,
unsigned column) unsigned column)
{ {
// This method is called by the native control, so we shouldn't allow
// exceptions to escape from it.
wxTRY
{
// Now check if we have a value and remember it for rendering it later. // Now check if we have a value and remember it for rendering it later.
// Notice that we do it even if it's null, as the cell should be empty then // Notice that we do it even if it's null, as the cell should be empty then
// and not show the last used value. // and not show the last used value.
@@ -857,6 +855,15 @@ wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model,
SetEnabled(enabled); SetEnabled(enabled);
}
wxCATCH_ALL
(
// There is not much we can do about it here, just log it and don't
// show anything in this cell.
wxLogDebug("Retrieving the value from the model threw an exception");
SetValue(wxVariant());
)
return true; return true;
} }
@@ -1002,12 +1009,17 @@ wxDataViewCustomRendererBase::RenderText(const wxString& text,
if ( !GetOwner()->GetOwner()->IsEnabled() ) if ( !GetOwner()->GetOwner()->IsEnabled() )
flags |= wxCONTROL_DISABLED; flags |= wxCONTROL_DISABLED;
// Notice that we intentionally don't use any alignment here: it is not
// necessary because the cell rectangle had been already adjusted to
// account for the alignment in WXCallRender() and using the alignment here
// results in problems with ellipsization when using native MSW renderer,
// see http://trac.wxwidgets.org/ticket/17363, so just don't do it.
wxRendererNative::Get().DrawItemText( wxRendererNative::Get().DrawItemText(
GetOwner()->GetOwner(), GetOwner()->GetOwner(),
*dc, *dc,
text, text,
rectText, rectText,
GetEffectiveAlignment(), wxALIGN_NOT,
flags, flags,
GetEllipsizeMode()); GetEllipsizeMode());
} }
@@ -1154,6 +1166,13 @@ const wxDataViewModel* wxDataViewCtrlBase::GetModel() const
return m_model; return m_model;
} }
void wxDataViewCtrlBase::Expand(const wxDataViewItem& item)
{
ExpandAncestors(item);
DoExpand(item);
}
void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item ) void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item )
{ {
if (!m_model) return; if (!m_model) return;
@@ -1173,7 +1192,7 @@ void wxDataViewCtrlBase::ExpandAncestors( const wxDataViewItem & item )
// then we expand the parents, starting at the root // then we expand the parents, starting at the root
while (!parentChain.empty()) while (!parentChain.empty())
{ {
Expand(parentChain.back()); DoExpand(parentChain.back());
parentChain.pop_back(); parentChain.pop_back();
} }
} }
@@ -1586,6 +1605,29 @@ wxDEFINE_EVENT( wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, wxDataViewEvent );
wxDEFINE_EVENT( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, wxDataViewEvent ); wxDEFINE_EVENT( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, wxDataViewEvent );
wxDEFINE_EVENT( wxEVT_DATAVIEW_ITEM_DROP, wxDataViewEvent ); wxDEFINE_EVENT( wxEVT_DATAVIEW_ITEM_DROP, wxDataViewEvent );
// Common part of non-copy ctors.
void wxDataViewEvent::Init(wxDataViewCtrlBase* dvc,
wxDataViewColumn* column,
const wxDataViewItem& item)
{
m_item = item;
m_col = column ? column->GetModelColumn() : -1;
m_model = dvc->GetModel();
m_column = column;
m_pos = wxDefaultPosition;
m_cacheFrom = 0;
m_cacheTo = 0;
m_editCancelled = false;
#if wxUSE_DRAG_AND_DROP
m_dataObject = NULL;
m_dataBuffer = NULL;
m_dataSize = 0;
m_dragFlags = 0;
m_dropEffect = wxDragNone;
#endif // wxUSE_DRAG_AND_DROP
SetEventObject(dvc);
}
#if wxUSE_SPINCTRL #if wxUSE_SPINCTRL

View File

@@ -186,6 +186,15 @@ void wxDataViewColumn::UpdateDisplay()
} }
} }
void wxDataViewColumn::UpdateWidth()
{
if (m_owner)
{
int idx = m_owner->GetColumnIndex( this );
m_owner->OnColumnWidthChange( idx );
}
}
void wxDataViewColumn::UnsetAsSortKey() void wxDataViewColumn::UnsetAsSortKey()
{ {
m_sort = false; m_sort = false;
@@ -284,12 +293,7 @@ private:
bool SendEvent(wxEventType type, unsigned int n) bool SendEvent(wxEventType type, unsigned int n)
{ {
wxDataViewCtrl * const owner = GetOwner(); wxDataViewCtrl * const owner = GetOwner();
wxDataViewEvent event(type, owner->GetId()); wxDataViewEvent event(type, owner, owner->GetColumn(n));
event.SetEventObject(owner);
event.SetColumn(n);
event.SetDataViewColumn(owner->GetColumn(n));
event.SetModel(owner->GetModel());
// for events created by wxDataViewHeaderWindow the // for events created by wxDataViewHeaderWindow the
// row / value fields are not valid // row / value fields are not valid
@@ -1649,12 +1653,7 @@ wxDragResult wxDataViewMainWindow::OnDragOver( wxDataFormat format, wxCoord x,
if ( row < GetRowCount() && xx <= GetEndOfLastCol() ) if ( row < GetRowCount() && xx <= GetEndOfLastCol() )
item = GetItemByRow( row ); item = GetItemByRow( row );
wxDataViewModel *model = GetModel(); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner, item);
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() );
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( model );
event.SetDataFormat( format ); event.SetDataFormat( format );
event.SetDropEffect( def ); event.SetDropEffect( def );
if ( !m_owner->HandleWindowEvent( event ) || !event.IsAllowed() ) if ( !m_owner->HandleWindowEvent( event ) || !event.IsAllowed() )
@@ -1693,12 +1692,7 @@ bool wxDataViewMainWindow::OnDrop( wxDataFormat format, wxCoord x, wxCoord y )
if ( row < GetRowCount() && xx <= GetEndOfLastCol()) if ( row < GetRowCount() && xx <= GetEndOfLastCol())
item = GetItemByRow( row ); item = GetItemByRow( row );
wxDataViewModel *model = GetModel(); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner, item);
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() );
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( model );
event.SetDataFormat( format ); event.SetDataFormat( format );
if (!m_owner->HandleWindowEvent( event ) || !event.IsAllowed()) if (!m_owner->HandleWindowEvent( event ) || !event.IsAllowed())
return false; return false;
@@ -1719,14 +1713,9 @@ wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoo
if ( row < GetRowCount() && xx <= GetEndOfLastCol() ) if ( row < GetRowCount() && xx <= GetEndOfLastCol() )
item = GetItemByRow( row ); item = GetItemByRow( row );
wxDataViewModel *model = GetModel();
wxCustomDataObject *obj = (wxCustomDataObject *) GetDropTarget()->GetDataObject(); wxCustomDataObject *obj = (wxCustomDataObject *) GetDropTarget()->GetDataObject();
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP, m_owner->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, m_owner, item);
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( model );
event.SetDataFormat( format ); event.SetDataFormat( format );
event.SetDataSize( obj->GetSize() ); event.SetDataSize( obj->GetSize() );
event.SetDataBuffer( obj->GetData() ); event.SetDataBuffer( obj->GetData() );
@@ -1842,11 +1831,9 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
unsigned int item_last = item_start + item_count; unsigned int item_last = item_start + item_count;
// Send the event to wxDataViewCtrl itself. // Send the event to wxDataViewCtrl itself.
wxWindow * const parent = GetParent(); wxDataViewEvent cache_event(wxEVT_DATAVIEW_CACHE_HINT, m_owner, NULL);
wxDataViewEvent cache_event(wxEVT_DATAVIEW_CACHE_HINT, parent->GetId());
cache_event.SetEventObject(parent);
cache_event.SetCache(item_start, item_last - 1); cache_event.SetCache(item_start, item_last - 1);
parent->ProcessWindowEvent(cache_event); m_owner->ProcessWindowEvent(cache_event);
// compute which columns needs to be redrawn // compute which columns needs to be redrawn
unsigned int cols = GetOwner()->GetColumnCount(); unsigned int cols = GetOwner()->GetColumnCount();
@@ -2528,12 +2515,8 @@ bool wxDataViewMainWindow::ItemChanged(const wxDataViewItem & item)
GetOwner()->InvalidateColBestWidths(); GetOwner()->InvalidateColBestWidths();
// Send event // Send event
wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, item);
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); m_owner->ProcessWindowEvent(le);
le.SetEventObject(parent);
le.SetModel(GetModel());
le.SetItem(item);
parent->ProcessWindowEvent(le);
return true; return true;
} }
@@ -2559,14 +2542,9 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i
GetOwner()->InvalidateColBestWidth(view_column); GetOwner()->InvalidateColBestWidth(view_column);
// Send event // Send event
wxWindow *parent = GetParent(); wxDataViewColumn* const column = m_owner->GetColumn(view_column);
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, column, item);
le.SetEventObject(parent); m_owner->ProcessWindowEvent(le);
le.SetModel(GetModel());
le.SetItem(item);
le.SetColumn(view_column);
le.SetDataViewColumn(GetOwner()->GetColumn(view_column));
parent->ProcessWindowEvent(le);
return true; return true;
} }
@@ -2815,14 +2793,8 @@ bool wxDataViewMainWindow::IsRowSelected( unsigned int row )
void wxDataViewMainWindow::SendSelectionChangedEvent( const wxDataViewItem& item) void wxDataViewMainWindow::SendSelectionChangedEvent( const wxDataViewItem& item)
{ {
wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_DATAVIEW_SELECTION_CHANGED, m_owner, item);
wxDataViewEvent le(wxEVT_DATAVIEW_SELECTION_CHANGED, parent->GetId()); m_owner->ProcessWindowEvent(le);
le.SetEventObject(parent);
le.SetModel(GetModel());
le.SetItem( item );
parent->ProcessWindowEvent(le);
} }
void wxDataViewMainWindow::RefreshRow( unsigned int row ) void wxDataViewMainWindow::RefreshRow( unsigned int row )
@@ -3113,14 +3085,8 @@ bool
wxDataViewMainWindow::SendExpanderEvent(wxEventType type, wxDataViewMainWindow::SendExpanderEvent(wxEventType type,
const wxDataViewItem& item) const wxDataViewItem& item)
{ {
wxWindow *parent = GetParent(); wxDataViewEvent le(type, m_owner, item);
wxDataViewEvent le(type, parent->GetId()); return !m_owner->ProcessWindowEvent(le) || le.IsAllowed();
le.SetEventObject(parent);
le.SetModel(GetModel());
le.SetItem( item );
return !parent->ProcessWindowEvent(le) || le.IsAllowed();
} }
bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const
@@ -3700,13 +3666,8 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event )
const wxDataViewItem item = GetItemByRow(m_currentRow); const wxDataViewItem item = GetItemByRow(m_currentRow);
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, m_owner, item);
parent->GetId()); if ( m_owner->ProcessWindowEvent(le) )
le.SetItem(item);
le.SetEventObject(parent);
le.SetModel(GetModel());
if ( parent->ProcessWindowEvent(le) )
break; break;
// else: fall through to WXK_SPACE handling // else: fall through to WXK_SPACE handling
} }
@@ -3884,7 +3845,7 @@ void wxDataViewMainWindow::OnVerticalNavigation(const wxKeyEvent& event, int del
RefreshRow( m_currentRow ); RefreshRow( m_currentRow );
} }
GetOwner()->EnsureVisible( m_currentRow, -1 ); GetOwner()->EnsureVisibleRowCol( m_currentRow, -1 );
} }
void wxDataViewMainWindow::OnLeftKey(wxKeyEvent& event) void wxDataViewMainWindow::OnLeftKey(wxKeyEvent& event)
@@ -3932,7 +3893,7 @@ void wxDataViewMainWindow::OnLeftKey(wxKeyEvent& event)
SelectRow( row, false); SelectRow( row, false);
SelectRow( parent, true ); SelectRow( parent, true );
ChangeCurrentRow( parent ); ChangeCurrentRow( parent );
GetOwner()->EnsureVisible( parent, -1 ); GetOwner()->EnsureVisibleRowCol( parent, -1 );
SendSelectionChangedEvent( parent_node->GetItem() ); SendSelectionChangedEvent( parent_node->GetItem() );
} }
} }
@@ -3965,7 +3926,7 @@ void wxDataViewMainWindow::OnRightKey(wxKeyEvent& event)
SelectRow( row, false ); SelectRow( row, false );
SelectRow( row + 1, true ); SelectRow( row + 1, true );
ChangeCurrentRow( row + 1 ); ChangeCurrentRow( row + 1 );
GetOwner()->EnsureVisible( row + 1, -1 ); GetOwner()->EnsureVisibleRowCol( row + 1, -1 );
SendSelectionChangedEvent( GetItemByRow(row+1) ); SendSelectionChangedEvent( GetItemByRow(row+1) );
} }
} }
@@ -4046,7 +4007,7 @@ bool wxDataViewMainWindow::TryAdvanceCurrentColumn(wxDataViewTreeNode *node, wxK
} }
} }
GetOwner()->EnsureVisible(m_currentRow, idx); GetOwner()->EnsureVisibleRowCol(m_currentRow, idx);
if ( idx < 1 ) if ( idx < 1 )
{ {
@@ -4112,19 +4073,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
// the other ones. // the other ones.
if (event.RightUp()) if (event.RightUp())
{ {
wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, m_owner, col, item);
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId()); m_owner->ProcessWindowEvent(le);
le.SetEventObject(parent);
le.SetModel(model);
if ( item.IsOk() && col )
{
le.SetItem( item );
le.SetColumn( col->GetModelColumn() );
le.SetDataViewColumn( col );
}
parent->ProcessWindowEvent(le);
return; return;
} }
@@ -4153,10 +4103,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
wxDataViewItem itemDragged = GetItemByRow( drag_item_row ); wxDataViewItem itemDragged = GetItemByRow( drag_item_row );
// Notify cell about drag // Notify cell about drag
wxDataViewEvent evt( wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() ); wxDataViewEvent evt(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, m_owner, itemDragged);
evt.SetEventObject( m_owner );
evt.SetItem( itemDragged );
evt.SetModel( model );
if (!m_owner->HandleWindowEvent( evt )) if (!m_owner->HandleWindowEvent( evt ))
return; return;
@@ -4270,15 +4217,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
{ {
if ( !hoverOverExpander && (current == m_lineLastClicked) ) if ( !hoverOverExpander && (current == m_lineLastClicked) )
{ {
wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, m_owner, col, item);
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, parent->GetId()); if ( m_owner->ProcessWindowEvent(le) )
le.SetItem( item );
le.SetColumn( col->GetModelColumn() );
le.SetDataViewColumn( col );
le.SetEventObject(parent);
le.SetModel(GetModel());
if ( parent->ProcessWindowEvent(le) )
{ {
// Item activation was handled from the user code. // Item activation was handled from the user code.
return; return;
@@ -4577,7 +4517,11 @@ void wxDataViewMainWindow::UpdateColumnSizes()
if ( lastColX < fullWinWidth ) if ( lastColX < fullWinWidth )
{ {
int desiredWidth = wxMax(fullWinWidth - lastColX, lastCol->GetMinWidth()); int desiredWidth = wxMax(fullWinWidth - lastColX, lastCol->GetMinWidth());
lastCol->SetWidth(desiredWidth); if ( !lastCol->WXUpdateWidth(desiredWidth) )
{
// The column width didn't change, no need to do anything else.
return;
}
// All columns fit on screen, so we don't need horizontal scrolling. // All columns fit on screen, so we don't need horizontal scrolling.
// To prevent flickering scrollbar when resizing the window to be // To prevent flickering scrollbar when resizing the window to be
@@ -4842,6 +4786,13 @@ bool wxDataViewCtrl::InsertColumn( unsigned int pos, wxDataViewColumn *col )
return true; return true;
} }
void wxDataViewCtrl::OnColumnWidthChange(unsigned int idx)
{
InvalidateColBestWidth(idx);
OnColumnChange(idx);
}
void wxDataViewCtrl::OnColumnChange(unsigned int idx) void wxDataViewCtrl::OnColumnChange(unsigned int idx)
{ {
if ( m_headerArea ) if ( m_headerArea )
@@ -5266,7 +5217,7 @@ void wxDataViewCtrl::UnselectAll()
m_clientArea->UnselectAllRows(); m_clientArea->UnselectAllRows();
} }
void wxDataViewCtrl::EnsureVisible( int row, int column ) void wxDataViewCtrl::EnsureVisibleRowCol( int row, int column )
{ {
if( row < 0 ) if( row < 0 )
row = 0; row = 0;
@@ -5293,9 +5244,9 @@ void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataVie
if( row >= 0 ) if( row >= 0 )
{ {
if( column == NULL ) if( column == NULL )
EnsureVisible(row, -1); EnsureVisibleRowCol(row, -1);
else else
EnsureVisible( row, GetColumnIndex(column) ); EnsureVisibleRowCol( row, GetColumnIndex(column) );
} }
} }
@@ -5322,10 +5273,8 @@ int wxDataViewCtrl::GetRowByItem( const wxDataViewItem & item ) const
return m_clientArea->GetRowByItem( item ); return m_clientArea->GetRowByItem( item );
} }
void wxDataViewCtrl::Expand( const wxDataViewItem & item ) void wxDataViewCtrl::DoExpand( const wxDataViewItem & item )
{ {
ExpandAncestors( item );
int row = m_clientArea->GetRowByItem( item ); int row = m_clientArea->GetRowByItem( item );
if (row != -1) if (row != -1)
m_clientArea->Expand(row); m_clientArea->Expand(row);

View File

@@ -979,9 +979,8 @@ wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable,
if (gs_lastLeftClickHeader) if (gs_lastLeftClickHeader)
{ {
wxDataViewCtrl *dv = tree_model->internal->GetOwner(); wxDataViewCtrl *dv = tree_model->internal->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_COLUMN_SORTED, dv->GetId() ); wxDataViewEvent
event.SetDataViewColumn( gs_lastLeftClickHeader ); event(wxEVT_DATAVIEW_COLUMN_SORTED, dv, gs_lastLeftClickHeader);
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
} }
@@ -1129,11 +1128,7 @@ static GtkCellEditable *gtk_wx_cell_renderer_text_start_editing(
item(column->GetOwner()->GTKPathToItem(wxGtkTreePath(path))); item(column->GetOwner()->GTKPathToItem(wxGtkTreePath(path)));
wxDataViewCtrl *dv = column->GetOwner(); wxDataViewCtrl *dv = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_START_EDITING, dv->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_START_EDITING, dv, column, item);
event.SetDataViewColumn( column );
event.SetModel( dv->GetModel() );
event.SetColumn( column->GetModelColumn() );
event.SetItem( item );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
if (event.IsAllowed()) if (event.IsAllowed())
@@ -2253,7 +2248,6 @@ void GtkApplyAttr(GtkCellRendererText *renderer, const wxDataViewItemAttr& attr)
g_value_unset( &gvalue ); g_value_unset( &gvalue );
} }
#if 0
if (attr.HasBackgroundColour()) if (attr.HasBackgroundColour())
{ {
wxColour colour = attr.GetBackgroundColour(); wxColour colour = attr.GetBackgroundColour();
@@ -2273,7 +2267,6 @@ void GtkApplyAttr(GtkCellRendererText *renderer, const wxDataViewItemAttr& attr)
g_object_set_property( G_OBJECT(renderer), "cell-background-set", &gvalue ); g_object_set_property( G_OBJECT(renderer), "cell-background-set", &gvalue );
g_value_unset( &gvalue ); g_value_unset( &gvalue );
} }
#endif
} }
} // anonymous namespace } // anonymous namespace
@@ -3002,9 +2995,7 @@ gtk_dataview_header_button_press_callback( GtkWidget *WXUNUSED(widget),
gs_lastLeftClickHeader = column; gs_lastLeftClickHeader = column;
wxDataViewCtrl *dv = column->GetOwner(); wxDataViewCtrl *dv = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, dv->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, dv, column);
event.SetDataViewColumn( column );
event.SetModel( dv->GetModel() );
if (dv->HandleWindowEvent( event )) if (dv->HandleWindowEvent( event ))
return FALSE; return FALSE;
} }
@@ -3012,9 +3003,8 @@ gtk_dataview_header_button_press_callback( GtkWidget *WXUNUSED(widget),
if (gdk_event->button == 3) if (gdk_event->button == 3)
{ {
wxDataViewCtrl *dv = column->GetOwner(); wxDataViewCtrl *dv = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, dv->GetId() ); wxDataViewEvent
event.SetDataViewColumn( column ); event(wxEVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, dv, column);
event.SetModel( dv->GetModel() );
if (dv->HandleWindowEvent( event )) if (dv->HandleWindowEvent( event ))
return FALSE; return FALSE;
} }
@@ -3605,14 +3595,12 @@ gboolean wxDataViewCtrlInternal::row_draggable( GtkTreeDragSource *WXUNUSED(drag
delete m_dragDataObject; delete m_dragDataObject;
m_dragDataObject = NULL; m_dragDataObject = NULL;
wxDataViewItem item(GetOwner()->GTKPathToItem(path)); wxDataViewCtrl* const dvc = GetOwner();
wxDataViewItem item(dvc->GTKPathToItem(path));
if ( !item ) if ( !item )
return FALSE; return FALSE;
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, dvc, item);
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( m_wx_model );
gint x, y; gint x, y;
gtk_widget_get_pointer(m_owner->GtkGetTreeView(), &x, &y); gtk_widget_get_pointer(m_owner->GtkGetTreeView(), &x, &y);
event.SetPosition(x, y); event.SetPosition(x, y);
@@ -3676,10 +3664,7 @@ wxDataViewCtrlInternal::drag_data_received(GtkTreeDragDest *WXUNUSED(drag_dest),
{ {
wxDataViewItem item(GetOwner()->GTKPathToItem(path)); wxDataViewItem item(GetOwner()->GTKPathToItem(path));
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP, m_owner->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, m_owner, item);
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( m_wx_model );
event.SetDataFormat(gtk_selection_data_get_target(selection_data)); event.SetDataFormat(gtk_selection_data_get_target(selection_data));
event.SetDataSize(gtk_selection_data_get_length(selection_data)); event.SetDataSize(gtk_selection_data_get_length(selection_data));
event.SetDataBuffer(const_cast<guchar*>(gtk_selection_data_get_data(selection_data))); event.SetDataBuffer(const_cast<guchar*>(gtk_selection_data_get_data(selection_data)));
@@ -3699,10 +3684,7 @@ wxDataViewCtrlInternal::row_drop_possible(GtkTreeDragDest *WXUNUSED(drag_dest),
{ {
wxDataViewItem item(GetOwner()->GTKPathToItem(path)); wxDataViewItem item(GetOwner()->GTKPathToItem(path));
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner, item);
event.SetEventObject( m_owner );
event.SetItem( item );
event.SetModel( m_wx_model );
event.SetDataFormat(gtk_selection_data_get_target(selection_data)); event.SetDataFormat(gtk_selection_data_get_target(selection_data));
event.SetDataSize(gtk_selection_data_get_length(selection_data)); event.SetDataSize(gtk_selection_data_get_length(selection_data));
if (!m_owner->HandleWindowEvent( event )) if (!m_owner->HandleWindowEvent( event ))
@@ -3822,10 +3804,7 @@ bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &parent, const wx
bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item ) bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner->GetId() ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, item);
event.SetEventObject( m_owner );
event.SetModel( m_owner->GetModel() );
event.SetItem( item );
m_owner->HandleWindowEvent( event ); m_owner->HandleWindowEvent( event );
return true; return true;
@@ -3833,12 +3812,9 @@ bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item )
bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int view_column ) bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int view_column )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner->GetId() ); wxDataViewColumn* const column = m_owner->GetColumn(view_column);
event.SetEventObject( m_owner ); wxDataViewEvent
event.SetModel( m_owner->GetModel() ); event(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, column, item);
event.SetColumn( view_column );
event.SetDataViewColumn( GetOwner()->GetColumn(view_column) );
event.SetItem( item );
m_owner->HandleWindowEvent( event ); m_owner->HandleWindowEvent( event );
return true; return true;
@@ -4371,10 +4347,8 @@ wxdataview_selection_changed_callback( GtkTreeSelection* WXUNUSED(selection), wx
if (!gtk_widget_get_realized(dv->m_widget)) if (!gtk_widget_get_realized(dv->m_widget))
return; return;
wxDataViewEvent event( wxEVT_DATAVIEW_SELECTION_CHANGED, dv->GetId() ); wxDataViewEvent
event.SetEventObject( dv ); event(wxEVT_DATAVIEW_SELECTION_CHANGED, dv, dv->GetSelection());
event.SetItem( dv->GetSelection() );
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
} }
@@ -4382,11 +4356,8 @@ static void
wxdataview_row_activated_callback( GtkTreeView* WXUNUSED(treeview), GtkTreePath *path, wxdataview_row_activated_callback( GtkTreeView* WXUNUSED(treeview), GtkTreePath *path,
GtkTreeViewColumn *WXUNUSED(column), wxDataViewCtrl *dv ) GtkTreeViewColumn *WXUNUSED(column), wxDataViewCtrl *dv )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_ACTIVATED, dv->GetId() );
wxDataViewItem item(dv->GTKPathToItem(path)); wxDataViewItem item(dv->GTKPathToItem(path));
event.SetItem( item ); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_ACTIVATED, dv, item);
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
} }
@@ -4394,11 +4365,8 @@ static gboolean
wxdataview_test_expand_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, wxdataview_test_expand_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter,
GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EXPANDING, dv->GetId() ); wxDataViewItem item( (void*) iter->user_data );
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDING, dv, item);
wxDataViewItem item( (void*) iter->user_data );;
event.SetItem( item );
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
return !event.IsAllowed(); return !event.IsAllowed();
@@ -4408,11 +4376,8 @@ static void
wxdataview_row_expanded_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, wxdataview_row_expanded_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter,
GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EXPANDED, dv->GetId() ); wxDataViewItem item( (void*) iter->user_data );
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDED, dv, item);
wxDataViewItem item( (void*) iter->user_data );;
event.SetItem( item );
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
} }
@@ -4420,11 +4385,8 @@ static gboolean
wxdataview_test_collapse_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, wxdataview_test_collapse_row_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter,
GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_COLLAPSING, dv->GetId() ); wxDataViewItem item( (void*) iter->user_data );
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSING, dv, item);
wxDataViewItem item( (void*) iter->user_data );;
event.SetItem( item );
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
return !event.IsAllowed(); return !event.IsAllowed();
@@ -4434,11 +4396,8 @@ static void
wxdataview_row_collapsed_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter, wxdataview_row_collapsed_callback( GtkTreeView* WXUNUSED(treeview), GtkTreeIter* iter,
GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv ) GtkTreePath *WXUNUSED(path), wxDataViewCtrl *dv )
{ {
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_COLLAPSED, dv->GetId() ); wxDataViewItem item( (void*) iter->user_data );
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSED, dv, item);
wxDataViewItem item( (void*) iter->user_data );;
event.SetItem( item );
event.SetModel( dv->GetModel() );
dv->HandleWindowEvent( event ); dv->HandleWindowEvent( event );
} }
@@ -4531,10 +4490,8 @@ gtk_dataview_button_press_callback( GtkWidget *WXUNUSED(widget),
gtk_tree_selection_select_path(selection, path); gtk_tree_selection_select_path(selection, path);
} }
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, dv->GetId() ); wxDataViewEvent
if (path) event(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, dv, dv->GTKPathToItem(path));
event.SetItem(dv->GTKPathToItem(path));
event.SetModel( dv->GetModel() );
return dv->HandleWindowEvent( event ); return dv->HandleWindowEvent( event );
} }
@@ -4863,7 +4820,7 @@ wxDataViewColumn *wxDataViewCtrl::GetSortingColumn() const
return m_internal->GetDataViewSortColumn(); return m_internal->GetDataViewSortColumn();
} }
void wxDataViewCtrl::Expand( const wxDataViewItem & item ) void wxDataViewCtrl::DoExpand( const wxDataViewItem & item )
{ {
GtkTreeIter iter; GtkTreeIter iter;
iter.user_data = item.GetID(); iter.user_data = item.GetID();

View File

@@ -10,7 +10,11 @@
#include "wx/wxprec.h" #include "wx/wxprec.h"
#if (wxUSE_DATAVIEWCTRL == 1) && !defined(wxUSE_GENERICDATAVIEWCTRL) #if wxUSE_DATAVIEWCTRL
#include "wx/dataview.h"
#if !defined(wxUSE_GENERICDATAVIEWCTRL)
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/app.h" #include "wx/app.h"
@@ -544,10 +548,7 @@ outlineView:(NSOutlineView*)outlineView
wxCHECK_MSG( dvc->GetModel(), false, wxCHECK_MSG( dvc->GetModel(), false,
"Pointer to model not set correctly." ); "Pointer to model not set correctly." );
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, dvc->GetId()); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, dvc, wxDataViewItemFromItem(item));
event.SetEventObject(dvc);
event.SetItem(wxDataViewItemFromItem(item));
event.SetModel(dvc->GetModel());
BOOL dragSuccessful = false; BOOL dragSuccessful = false;
if ( [bestType compare:DataViewPboardType] == NSOrderedSame ) if ( [bestType compare:DataViewPboardType] == NSOrderedSame )
@@ -755,16 +756,10 @@ outlineView:(NSOutlineView*)outlineView
// send first the event to wxWidgets that the sorting has changed so that // send first the event to wxWidgets that the sorting has changed so that
// the program can do special actions before the sorting actually starts: // the program can do special actions before the sorting actually starts:
wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_SORTED,dvc->GetId()); // variable definition wxDataViewColumn* const col = noOfDescriptors > 0
? [[wxSortDescriptors objectAtIndex:0] columnPtr]
event.SetEventObject(dvc); : NULL;
if (noOfDescriptors > 0) wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_SORTED, dvc, col);
{
wxDataViewColumn* const col = [[wxSortDescriptors objectAtIndex:0] columnPtr];
event.SetColumn(dvc->GetColumnPosition(col));
event.SetDataViewColumn(col);
}
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
// start re-ordering the data; // start re-ordering the data;
@@ -793,12 +788,7 @@ outlineView:(NSOutlineView*)outlineView
wxCHECK_MSG(dvc, false, "Pointer to data view control not set correctly."); wxCHECK_MSG(dvc, false, "Pointer to data view control not set correctly.");
wxCHECK_MSG(dvc->GetModel(), false, "Pointer to model not set correctly."); wxCHECK_MSG(dvc->GetModel(), false, "Pointer to model not set correctly.");
wxDataViewEvent wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, dvc, wxDataViewItemFromItem(item));
event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE,dvc->GetId());
event.SetEventObject(dvc);
event.SetItem(wxDataViewItemFromItem(item));
event.SetModel(dvc->GetModel());
if ([bestType compare:DataViewPboardType] == NSOrderedSame) if ([bestType compare:DataViewPboardType] == NSOrderedSame)
{ {
NSArray* dataArray((NSArray*)[pasteboard propertyListForType:DataViewPboardType]); NSArray* dataArray((NSArray*)[pasteboard propertyListForType:DataViewPboardType]);
@@ -898,22 +888,16 @@ outlineView:(NSOutlineView*)outlineView
// send a begin drag event for all selected items and proceed with // send a begin drag event for all selected items and proceed with
// dragging unless the event is vetoed: // dragging unless the event is vetoed:
wxDataViewEvent
event(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG,dvc->GetId());
event.SetEventObject(dvc);
event.SetModel(dvc->GetModel());
for (size_t itemCounter=0; itemCounter<[writeItems count]; ++itemCounter) for (size_t itemCounter=0; itemCounter<[writeItems count]; ++itemCounter)
{ {
bool itemStringAvailable(false); // a flag indicating if for the current item a string is available bool itemStringAvailable(false); // a flag indicating if for the current item a string is available
wxDataObjectComposite* itemObject(new wxDataObjectComposite()); // data object for current item wxDataObjectComposite* itemObject(new wxDataObjectComposite()); // data object for current item
wxString itemString; // contains the TAB concatenated data of an item wxString itemString; // contains the TAB concatenated data of an item
event.SetItem( const wxDataViewItem item = wxDataViewItemFromItem([writeItems objectAtIndex:itemCounter]);
wxDataViewItemFromItem([writeItems objectAtIndex:itemCounter])); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, dvc, item);
itemString = ::ConcatenateDataViewItemValues(dvc,event.GetItem()); itemString = ::ConcatenateDataViewItemValues(dvc, item);
itemObject->Add(new wxTextDataObject(itemString)); itemObject->Add(new wxTextDataObject(itemString));
event.SetDataObject(itemObject);
// check if event has not been vetoed: // check if event has not been vetoed:
if (dvc->HandleWindowEvent(event) && event.IsAllowed() && (event.GetDataObject()->GetFormatCount() > 0)) if (dvc->HandleWindowEvent(event) && event.IsAllowed() && (event.GetDataObject()->GetFormatCount() > 0))
{ {
@@ -1616,11 +1600,8 @@ outlineView:(NSOutlineView*)outlineView
// sent whether the cell is editable or not // sent whether the cell is editable or not
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_ACTIVATED,dvc->GetId()); const wxDataViewItem item = wxDataViewItemFromItem([self itemAtRow:[self clickedRow]]);
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_ACTIVATED, dvc, item);
event.SetEventObject(dvc);
event.SetItem(wxDataViewItemFromItem([self itemAtRow:[self clickedRow]]));
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
} }
@@ -1633,12 +1614,8 @@ outlineView:(NSOutlineView*)outlineView
characterAtIndex: 0] == NSCarriageReturnCharacter ) characterAtIndex: 0] == NSCarriageReturnCharacter )
{ {
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
const wxDataViewItem item = wxDataViewItem( [[self itemAtRow:[self selectedRow]] pointer]);
wxDataViewEvent eventDV( wxEVT_DATAVIEW_ITEM_ACTIVATED, dvc->GetId() ); wxDataViewEvent eventDV(wxEVT_DATAVIEW_ITEM_ACTIVATED, dvc, item);
eventDV.SetEventObject(dvc);
eventDV.SetItem( wxDataViewItem( [[self itemAtRow:[self selectedRow]] pointer]) );
eventDV.SetModel( dvc->GetModel() );
if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) )
[super keyDown:event]; [super keyDown:event];
} }
@@ -1660,19 +1637,16 @@ outlineView:(NSOutlineView*)outlineView
// menu should be shown or not // menu should be shown or not
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU,dvc->GetId());
wxDataViewItemArray selectedItems;
event.SetEventObject(dvc);
event.SetModel(dvc->GetModel());
// get the item information; // get the item information;
// theoretically more than one ID can be returned but the event can only // theoretically more than one ID can be returned but the event can only
// handle one item, therefore only the first item of the array is // handle one item, therefore only the first item of the array is
// returned: // returned:
wxDataViewItem item;
wxDataViewItemArray selectedItems;
if (dvc->GetSelections(selectedItems) > 0) if (dvc->GetSelections(selectedItems) > 0)
event.SetItem(selectedItems[0]); item = selectedItems[0];
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, dvc, item);
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
// nothing is done: // nothing is done:
return nil; return nil;
@@ -1688,14 +1662,8 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent
event(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK,dvc->GetId());
// first, send an event that the user clicked into a column's header: // first, send an event that the user clicked into a column's header:
event.SetEventObject(dvc); wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_HEADER_CLICK, dvc, col);
event.SetColumn(dvc->GetColumnPosition(col));
event.SetDataViewColumn(col);
dvc->HandleWindowEvent(event); dvc->HandleWindowEvent(event);
// now, check if the click may have had an influence on sorting, too; // now, check if the click may have had an influence on sorting, too;
@@ -1731,13 +1699,7 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSING,dvc->GetId()); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSING, dvc, wxDataViewItemFromItem(item));
event.SetEventObject(dvc);
event.SetItem (wxDataViewItemFromItem(item));
event.SetModel (dvc->GetModel());
// finally send the equivalent wxWidget event:
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
// opening the container is allowed if not vetoed: // opening the container is allowed if not vetoed:
return event.IsAllowed(); return event.IsAllowed();
@@ -1749,13 +1711,7 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDING,dvc->GetId()); wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDING, dvc, wxDataViewItemFromItem(item));
event.SetEventObject(dvc);
event.SetItem (wxDataViewItemFromItem(item));
event.SetModel (dvc->GetModel());
// finally send the equivalent wxWidget event:
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
// opening the container is allowed if not vetoed: // opening the container is allowed if not vetoed:
return event.IsAllowed(); return event.IsAllowed();
@@ -1818,12 +1774,7 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_REORDERED,dvc->GetId()); wxDataViewEvent event(wxEVT_DATAVIEW_COLUMN_REORDERED, dvc, col);
event.SetEventObject(dvc);
event.SetColumn(dvc->GetColumnPosition(col));
event.SetDataViewColumn(col);
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
} }
@@ -1831,12 +1782,9 @@ outlineView:(NSOutlineView*)outlineView
{ {
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSED,dvc->GetId()); const wxDataViewItem item = wxDataViewItemFromItem(
[[notification userInfo] objectForKey:@"NSObject"]);
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_COLLAPSED, dvc, item);
event.SetEventObject(dvc);
event.SetItem(wxDataViewItemFromItem(
[[notification userInfo] objectForKey:@"NSObject"]));
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
} }
@@ -1844,12 +1792,9 @@ outlineView:(NSOutlineView*)outlineView
{ {
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDED,dvc->GetId()); const wxDataViewItem item = wxDataViewItemFromItem(
[[notification userInfo] objectForKey:@"NSObject"]);
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EXPANDED, dvc, item);
event.SetEventObject(dvc);
event.SetItem(wxDataViewItemFromItem(
[[notification userInfo] objectForKey:@"NSObject"]));
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
} }
@@ -1859,11 +1804,7 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
wxDataViewEvent event(wxEVT_DATAVIEW_SELECTION_CHANGED,dvc->GetId()); wxDataViewEvent event(wxEVT_DATAVIEW_SELECTION_CHANGED, dvc, dvc->GetSelection());
event.SetEventObject(dvc);
event.SetModel(dvc->GetModel());
event.SetItem(dvc->GetSelection());
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
} }
@@ -1928,15 +1869,11 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
// send event to wxWidgets: const wxDataViewItem
wxDataViewEvent item = wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow]);
event(wxEVT_DATAVIEW_ITEM_EDITING_DONE,dvc->GetId());
event.SetEventObject(dvc); // send event to wxWidgets:
event.SetItem( wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_EDITING_DONE, dvc, col, item);
wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow]));
event.SetColumn(dvc->GetColumnPosition(col));
event.SetDataViewColumn(col);
dvc->GetEventHandler()->ProcessEvent(event); dvc->GetEventHandler()->ProcessEvent(event);
@@ -2223,7 +2160,7 @@ void wxCocoaDataViewControl::EnsureVisible(const wxDataViewItem& item, const wxD
} }
} }
void wxCocoaDataViewControl::Expand(const wxDataViewItem& item) void wxCocoaDataViewControl::DoExpand(const wxDataViewItem& item)
{ {
[m_OutlineView expandItem:[m_DataSource getDataViewItemFromBuffer:item]]; [m_OutlineView expandItem:[m_DataSource getDataViewItemFromBuffer:item]];
} }
@@ -2306,6 +2243,15 @@ bool wxCocoaDataViewControl::AssociateModel(wxDataViewModel* model)
else else
m_DataSource = NULL; m_DataSource = NULL;
[m_OutlineView setDataSource:m_DataSource]; // if there is a data source the data is immediately going to be requested [m_OutlineView setDataSource:m_DataSource]; // if there is a data source the data is immediately going to be requested
// By default, the first column is indented to leave enough place for the
// expanders, but this looks bad if there are no expanders, so don't use
// indent in this case.
if ( model && model->IsListModel() )
{
DoSetIndent(0);
}
return true; return true;
} }
@@ -2903,6 +2849,49 @@ bool wxDataViewChoiceRenderer::MacRender()
wxIMPLEMENT_CLASS(wxDataViewChoiceRenderer, wxDataViewRenderer); wxIMPLEMENT_CLASS(wxDataViewChoiceRenderer, wxDataViewRenderer);
// ----------------------------------------------------------------------------
// wxDataViewChoiceByIndexRenderer
// ----------------------------------------------------------------------------
wxDataViewChoiceByIndexRenderer::wxDataViewChoiceByIndexRenderer(const wxArrayString& choices,
wxDataViewCellMode mode,
int alignment)
: wxDataViewChoiceRenderer(choices, mode, alignment)
{
m_variantType = wxS("long");
}
void
wxDataViewChoiceByIndexRenderer::OSXOnCellChanged(NSObject *value,
const wxDataViewItem& item,
unsigned col)
{
wxVariant valueLong(ObjectToLong(value));
if ( !Validate(valueLong) )
return;
wxDataViewModel *model = GetOwner()->GetOwner()->GetModel();
model->ChangeValue(valueLong, item, col);
}
bool
wxDataViewChoiceByIndexRenderer::SetValue(const wxVariant& value)
{
const wxVariant valueStr = GetChoice(value.GetLong());
return wxDataViewChoiceRenderer::SetValue(valueStr);
}
bool
wxDataViewChoiceByIndexRenderer::GetValue(wxVariant& value) const
{
wxVariant valueStr;
if ( !wxDataViewChoiceRenderer::GetValue(valueStr) )
return false;
value = (long) GetChoices().Index(valueStr.GetString());
return true;
}
// --------------------------------------------------------- // ---------------------------------------------------------
// wxDataViewDateRenderer // wxDataViewDateRenderer
// --------------------------------------------------------- // ---------------------------------------------------------
@@ -3305,4 +3294,6 @@ void wxDataViewColumn::SetNativeData(wxDataViewColumnNativeData* newNativeDataPt
m_NativeDataPtr = newNativeDataPtr; m_NativeDataPtr = newNativeDataPtr;
} }
#endif // (wxUSE_DATAVIEWCTRL == 1) && !defined(wxUSE_GENERICDATAVIEWCTRL) #endif // !wxUSE_GENERICDATAVIEWCTRL
#endif // wxUSE_DATAVIEWCTRL

View File

@@ -9,7 +9,11 @@
// For compilers that support precompilation, includes "wx.h". // For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
#if (wxUSE_DATAVIEWCTRL != 0) && (!defined(wxUSE_GENERICDATAVIEWCTRL) || (wxUSE_GENERICDATAVIEWCTRL == 0)) #if wxUSE_DATAVIEWCTRL
#include "wx/dataview.h"
#ifndef wxUSE_GENERICDATAVIEWCTRL
#include <limits> #include <limits>
@@ -122,13 +126,8 @@ bool wxOSXDataViewModelNotifier::ItemChanged(wxDataViewItem const& item)
wxCHECK_MSG(GetOwner() != NULL,false,"Owner not initialized."); wxCHECK_MSG(GetOwner() != NULL,false,"Owner not initialized.");
if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(item),item)) if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(item),item))
{ {
// sent the equivalent wxWidget event: // send the equivalent wxWidgets event:
wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED,m_DataViewCtrlPtr->GetId()); wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_DataViewCtrlPtr, item);
dataViewEvent.SetEventObject(m_DataViewCtrlPtr);
dataViewEvent.SetModel(m_DataViewCtrlPtr->GetModel());
dataViewEvent.SetItem(item);
// sent the equivalent wxWidget event:
m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent); m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
// row height may have to be adjusted: // row height may have to be adjusted:
AdjustRowHeight(item); AdjustRowHeight(item);
@@ -144,16 +143,11 @@ bool wxOSXDataViewModelNotifier::ItemsChanged(wxDataViewItemArray const& items)
{ {
size_t const noOfItems = items.GetCount(); size_t const noOfItems = items.GetCount();
wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED,m_DataViewCtrlPtr->GetId());
dataViewEvent.SetEventObject(m_DataViewCtrlPtr);
dataViewEvent.SetModel(m_DataViewCtrlPtr->GetModel());
for (size_t indexItem=0; indexItem<noOfItems; ++indexItem) for (size_t indexItem=0; indexItem<noOfItems; ++indexItem)
if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(items[indexItem]),items[indexItem])) if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(items[indexItem]),items[indexItem]))
{ {
// send for all changed items a wxWidget event: // send for all changed items a wxWidgets event:
dataViewEvent.SetItem(items[indexItem]); wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED,m_DataViewCtrlPtr,items[indexItem]);
m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent); m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
} }
else else
@@ -211,13 +205,9 @@ bool wxOSXDataViewModelNotifier::ValueChanged(wxDataViewItem const& item, unsign
wxCHECK_MSG(GetOwner() != NULL,false,"Owner not initialized."); wxCHECK_MSG(GetOwner() != NULL,false,"Owner not initialized.");
if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(item),item)) if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(item),item))
{ {
wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED,m_DataViewCtrlPtr->GetId()); wxDataViewEvent dataViewEvent(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_DataViewCtrlPtr, m_DataViewCtrlPtr->GetColumn(col), item);
dataViewEvent.SetEventObject(m_DataViewCtrlPtr); // send the equivalent wxWidgets event:
dataViewEvent.SetModel(m_DataViewCtrlPtr->GetModel());
dataViewEvent.SetColumn(col);
dataViewEvent.SetItem(item);
// send the equivalent wxWidget event:
m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent); m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent);
AdjustAutosizedColumns(); AdjustAutosizedColumns();
@@ -520,9 +510,9 @@ void wxDataViewCtrl::EnsureVisible(wxDataViewItem const& item, wxDataViewColumn
} }
} }
void wxDataViewCtrl::Expand(wxDataViewItem const& item) void wxDataViewCtrl::DoExpand(wxDataViewItem const& item)
{ {
return GetDataViewPeer()->Expand(item); return GetDataViewPeer()->DoExpand(item);
} }
bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const
@@ -742,5 +732,6 @@ wxBEGIN_EVENT_TABLE(wxDataViewCtrl,wxDataViewCtrlBase)
EVT_MOTION(wxDataViewCtrl::OnMouse) EVT_MOTION(wxDataViewCtrl::OnMouse)
wxEND_EVENT_TABLE() wxEND_EVENT_TABLE()
#endif // (wxUSE_DATAVIEWCTRL != 0) && (!defined(wxUSE_GENERICDATAVIEWCTRL) || (wxUSE_GENERICDATAVIEWCTRL == 0)) #endif // !wxUSE_GENERICDATAVIEWCTRL
#endif // wxUSE_DATAVIEWCTRL