From 5f34d07bc127e1f5e5cb7ef708b02bba9fd7b82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 10 Aug 2021 19:12:53 +0200 Subject: [PATCH 1/5] Revert "Fix sizing of temporarily last columns in macOS wxDataViewCtrl" This reverts commit c9221fd538540bd6d105853d0f41620ed25102a5. --- include/wx/osx/cocoa/dataview.h | 25 +------------------------ src/osx/cocoa/dataview.mm | 26 ++------------------------ src/osx/dataview_osx.cpp | 5 ----- 3 files changed, 3 insertions(+), 53 deletions(-) diff --git a/include/wx/osx/cocoa/dataview.h b/include/wx/osx/cocoa/dataview.h index 9f54e49e6d..90be1a8ae0 100644 --- a/include/wx/osx/cocoa/dataview.h +++ b/include/wx/osx/cocoa/dataview.h @@ -86,7 +86,7 @@ class wxCocoaDataViewControl; class wxDataViewColumnNativeData { public: - wxDataViewColumnNativeData() : m_NativeColumnPtr(NULL), m_isLast(false), m_prevWidth(0) + wxDataViewColumnNativeData() : m_NativeColumnPtr(NULL) { } @@ -105,32 +105,9 @@ public: m_NativeColumnPtr = newNativeColumnPtr; } - bool GetIsLast() const - { - return m_isLast; - } - - void SetIsLast(bool isLast) - { - m_isLast = isLast; - } - - int GetPrevWidth() const - { - return m_prevWidth; - } - - void SetPrevWidth(int prevWidth) - { - m_prevWidth = prevWidth; - } - private: // not owned by us NSTableColumn* m_NativeColumnPtr; - - bool m_isLast; - int m_prevWidth; }; // ============================================================================ diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index ae6fb345bb..49382f52cc 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2243,8 +2243,7 @@ bool wxCocoaDataViewControl::InsertColumn(unsigned int pos, wxDataViewColumn* co void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) { const int count = GetCount(); - wxDataViewColumnNativeData *nativeData = GetColumn(pos)->GetNativeData(); - NSTableColumn *column = nativeData->GetNativeColumnPtr(); + NSTableColumn *column = GetColumn(pos)->GetNativeData()->GetNativeColumnPtr(); UInt32 const noOfColumns = [[m_OutlineView tableColumns] count]; class MaxWidthCalculator @@ -2376,31 +2375,10 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) if ( m_expanderWidth == 0 ) m_expanderWidth = calculator.GetExpanderWidth(); - const bool isLast = pos == noOfColumns - 1; - - if ( isLast ) - { - // Note that FitColumnWidthToContent() is called whenever a column is - // added, so we might also just temporarily become the last column; - // since we cannot know at this time whether we will just temporarily - // be the last column, we store our current column width in order to - // restore it later in case we suddenly are no longer the last column - // because new columns have been added --> we need to restore our - // previous width in that case because it must not get lost. - nativeData->SetPrevWidth(GetColumn(pos)->GetWidth()); - + if ( pos == noOfColumns - 1 ) [m_OutlineView sizeLastColumnToFit]; - } else if ( GetColumn(pos)->GetWidthVariable() == wxCOL_WIDTH_AUTOSIZE ) - { [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; - } - else if ( nativeData->GetIsLast() ) - { - [column setWidth:nativeData->GetPrevWidth()]; - } - - nativeData->SetIsLast(isLast); if ( !(GetDataViewCtrl()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) ) { diff --git a/src/osx/dataview_osx.cpp b/src/osx/dataview_osx.cpp index 7ac200d45b..be92e53da1 100644 --- a/src/osx/dataview_osx.cpp +++ b/src/osx/dataview_osx.cpp @@ -438,9 +438,6 @@ bool wxDataViewCtrl::InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr) // otherwise ask the control to 'update' the data in the newly appended column: if (GetColumnCount() == 1) SetExpanderColumn(columnPtr); - - AdjustAutosizedColumns(); - // done: return true; } @@ -482,8 +479,6 @@ bool wxDataViewCtrl::DeleteColumn(wxDataViewColumn* columnPtr) { m_ColumnPtrs.Remove(columnPtr); delete columnPtr; - - AdjustAutosizedColumns(); return true; } else From 4d62a7a08f2075d05594c5878d4731f60ac3d8d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 10 Aug 2021 19:13:16 +0200 Subject: [PATCH 2/5] Revert "Autosize the right columns in macOS wxDataViewCtrl" This reverts commit 36ea7ff4d61e174a2d116819f98e66f22a7f5b8a. --- src/osx/cocoa/dataview.mm | 2 +- src/osx/dataview_osx.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 49382f52cc..534553022f 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2377,7 +2377,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) if ( pos == noOfColumns - 1 ) [m_OutlineView sizeLastColumnToFit]; - else if ( GetColumn(pos)->GetWidthVariable() == wxCOL_WIDTH_AUTOSIZE ) + else [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; if ( !(GetDataViewCtrl()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) ) diff --git a/src/osx/dataview_osx.cpp b/src/osx/dataview_osx.cpp index be92e53da1..def9d099d4 100644 --- a/src/osx/dataview_osx.cpp +++ b/src/osx/dataview_osx.cpp @@ -302,7 +302,10 @@ void wxOSXDataViewModelNotifier::AdjustAutosizedColumns() unsigned count = m_DataViewCtrlPtr->GetColumnCount(); for ( unsigned col = 0; col < count; col++ ) { - m_DataViewCtrlPtr->GetDataViewPeer()->FitColumnWidthToContent(col); + wxDataViewColumn *column = m_DataViewCtrlPtr->GetColumnPtr(col); + + if ( column->GetWidthVariable() == wxCOL_WIDTH_AUTOSIZE ) + m_DataViewCtrlPtr->GetDataViewPeer()->FitColumnWidthToContent(col); } } From 2d302cf1430fe5531d585b7cb319395f25aec37a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 10 Aug 2021 19:16:56 +0200 Subject: [PATCH 3/5] Revert "Fix expansion of the last column in macOS wxDataViewCtrl" This reverts commit 7555d1b2459949c128d6ee3a473669a1a134f124 and 2a4c52a41472f7a3659727037ff56158e7294f04. --- src/osx/cocoa/dataview.mm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 534553022f..3928f700f1 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2244,7 +2244,6 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) { const int count = GetCount(); NSTableColumn *column = GetColumn(pos)->GetNativeData()->GetNativeColumnPtr(); - UInt32 const noOfColumns = [[m_OutlineView tableColumns] count]; class MaxWidthCalculator { @@ -2375,10 +2374,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) if ( m_expanderWidth == 0 ) m_expanderWidth = calculator.GetExpanderWidth(); - if ( pos == noOfColumns - 1 ) - [m_OutlineView sizeLastColumnToFit]; - else - [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; + [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; if ( !(GetDataViewCtrl()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) ) { From 8081477a43f8203dd2511d802ca56e3d7c93e15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 10 Aug 2021 19:18:35 +0200 Subject: [PATCH 4/5] Revert "Mac: Fix truncation of images in wxDataViewCtrl" This reverts commit d2fc88c03dcba3f2d533030d3fa83438dac016af. --- src/osx/cocoa/dataview.mm | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 3928f700f1..d5939b62ec 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2251,7 +2251,6 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) MaxWidthCalculator(wxCocoaOutlineView *view, NSTableColumn *column, unsigned columnIndex) : m_width(0), - m_height(0), m_view(view), m_column(columnIndex), m_indent(0), @@ -2272,7 +2271,6 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) { NSCell *cell = [m_view preparedCellAtColumn:m_column row:row]; unsigned cellWidth = ceil([cell cellSize].width); - unsigned cellHeight = ceil([cell cellSize].height); if ( m_indent ) cellWidth += m_indent * [m_view levelForRow:row]; @@ -2284,16 +2282,13 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) } m_width = wxMax(m_width, cellWidth); - m_height = wxMax(m_height, cellHeight); } int GetMaxWidth() const { return m_width; } - int GetMaxHeight() const { return m_height; } int GetExpanderWidth() const { return m_expander; } private: int m_width; - int m_height; wxCocoaOutlineView *m_view; unsigned m_column; int m_indent; @@ -2375,14 +2370,6 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) m_expanderWidth = calculator.GetExpanderWidth(); [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; - - if ( !(GetDataViewCtrl()->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) ) - { - int curHeight = ceil([m_OutlineView rowHeight]); - int rowHeight = calculator.GetMaxHeight(); - if ( rowHeight > curHeight ) - SetRowHeight(rowHeight); - } } // From 8d4ab945002c78e4f37ca5e10c89df1ec7c61c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 17 May 2021 17:11:23 +0200 Subject: [PATCH 5/5] Use -1 as uninitialized value for m_expanderWidth Use -1, not 0, for the not-yet-computed value. Prevents CPU-intensive recomputation when the calculated size _is_ zero - e.g. because the column is hidden. --- src/osx/cocoa/dataview.mm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index d5939b62ec..3b603a36e9 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2092,7 +2092,7 @@ wxCocoaDataViewControl::wxCocoaDataViewControl(wxWindow* peer, ), m_DataSource(NULL), m_OutlineView([[wxCocoaOutlineView alloc] init]), - m_expanderWidth(0) + m_expanderWidth(-1) { // initialize scrollview (the outline view is part of a scrollview): NSScrollView* scrollview = (NSScrollView*) GetWXWidget(); @@ -2254,7 +2254,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) m_view(view), m_column(columnIndex), m_indent(0), - m_expander(0), + m_expander(-1), m_tableColumn(column) { // account for indentation in the column with expander @@ -2275,7 +2275,7 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) if ( m_indent ) cellWidth += m_indent * [m_view levelForRow:row]; - if ( m_expander == 0 && m_tableColumn == [m_view outlineTableColumn] ) + if ( m_expander == -1 && m_tableColumn == [m_view outlineTableColumn] ) { NSRect rc = [m_view frameOfOutlineCellAtRow:row]; m_expander = ceil(rc.origin.x + rc.size.width); @@ -2366,10 +2366,10 @@ void wxCocoaDataViewControl::FitColumnWidthToContent(unsigned int pos) // there might not necessarily be an expander in the rows we've examined above so let's // globally store the expander width for re-use because it should always be the same - if ( m_expanderWidth == 0 ) + if ( m_expanderWidth == -1 ) m_expanderWidth = calculator.GetExpanderWidth(); - [column setWidth:calculator.GetMaxWidth() + m_expanderWidth]; + [column setWidth:calculator.GetMaxWidth() + wxMax(0, m_expanderWidth)]; } //