From 0fabd5bb6ebdf73c6cff1d67d3bb34c0f19cfc51 Mon Sep 17 00:00:00 2001 From: Alix Damman Date: Wed, 27 Sep 2017 10:31:44 +0200 Subject: [PATCH 1/3] fix #43 (autoresize): added resizeAxesColumnToContents() and resizeAxesRowToContents() methods + synchronized view_axes with view_x/ylabels in ArrayEditorWidget --- larray_editor/api.py | 5 +++-- larray_editor/arraywidget.py | 30 +++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/larray_editor/api.py b/larray_editor/api.py index 7bdab5c..8c7a32d 100644 --- a/larray_editor/api.py +++ b/larray_editor/api.py @@ -339,12 +339,13 @@ def restore_display_hook(): [ '', 1664780726569649730, -9196963249083393206, -7664327348053294350]]) # test autoresizing - arr8 = la.zeros('a=a_long_label,another_long_label') + arr8 = la.zeros('a=a_long_label,another_long_label; b=this_is_a_label,this_is_another_one') + arr9 = la.zeros('a=a0,a1; long_name_axis=this_is_a_label,this_is_another_one') # compare(arr3, arr4, arr5, arr6) # view(la.stack((arr3, arr4), la.Axis('arrays=arr3,arr4'))) - ses = la.Session(arr2=arr2, arr3=arr3, arr4=arr4, arr5=arr5, arr6=arr6, arr7=arr7, arr8=arr8, + ses = la.Session(arr2=arr2, arr3=arr3, arr4=arr4, arr5=arr5, arr6=arr6, arr7=arr7, arr8=arr8, arr9=arr9, data2=data2, data3=data3) # from larray.tests.common import abspath diff --git a/larray_editor/arraywidget.py b/larray_editor/arraywidget.py index 24f3597..e2c7169 100644 --- a/larray_editor/arraywidget.py +++ b/larray_editor/arraywidget.py @@ -537,8 +537,10 @@ def __init__(self, parent, data, readonly=False, bg_value=None, bg_gradient=None self.view_xlabels.horizontalHeader().sectionResized.connect(self.view_data.updateSectionWidth) self.view_ylabels.verticalHeader().sectionResized.connect(self.view_data.updateSectionHeight) # Synchronize auto-resizing - self.view_xlabels.horizontalHeader().sectionHandleDoubleClicked.connect(self.resizeColumnToContents) - self.view_ylabels.verticalHeader().sectionHandleDoubleClicked.connect(self.resizeRowToContents) + self.view_axes.horizontalHeader().sectionHandleDoubleClicked.connect(self.resizeAxesColumnToContents) + self.view_xlabels.horizontalHeader().sectionHandleDoubleClicked.connect(self.resizeDataColumnToContents) + self.view_axes.verticalHeader().sectionHandleDoubleClicked.connect(self.resizeAxesRowToContents) + self.view_ylabels.verticalHeader().sectionHandleDoubleClicked.connect(self.resizeDataRowToContents) # synchronize specific methods self.view_axes.allSelected.connect(self.view_data.selectAll) @@ -718,6 +720,7 @@ def set_data(self, data, bg_gradient=None, bg_value=None): self.data_adapter.update_filtered_data({}) # reset default size + self.view_axes.set_default_size() self.view_ylabels.set_default_size() self.view_xlabels.set_default_size() self.view_data.set_default_size() @@ -841,18 +844,35 @@ def _data_digits(self, data, maxdigits=6): return maxdigits def autofit_columns(self): + self.view_axes.autofit_columns() + for column in range(self.model_axes.columnCount()): + self.resizeAxesColumnToContents(column) self.view_xlabels.autofit_columns() for column in range(self.model_xlabels.columnCount()): - self.resizeColumnToContents(column) + self.resizeDataColumnToContents(column) - def resizeColumnToContents(self, column): + def resizeAxesColumnToContents(self, column): + # must be connected to view_axes.horizontalHeader().sectionHandleDoubleClicked signal + width = max(self.view_axes.horizontalHeader().sectionSize(column), + self.view_ylabels.sizeHintForColumn(column)) + # no need to call resizeSection on view_ylabels (see synchronization lines in init) + self.view_axes.horizontalHeader().resizeSection(column, width) + + def resizeDataColumnToContents(self, column): # must be connected to view_labels.horizontalHeader().sectionHandleDoubleClicked signal width = max(self.view_xlabels.horizontalHeader().sectionSize(column), self.view_data.sizeHintForColumn(column)) # no need to call resizeSection on view_data (see synchronization lines in init) self.view_xlabels.horizontalHeader().resizeSection(column, width) - def resizeRowToContents(self, row): + def resizeAxesRowToContents(self, row): + # must be connected to view_axes.verticalHeader().sectionHandleDoubleClicked + height = max(self.view_axes.verticalHeader().sectionSize(row), + self.view_xlabels.sizeHintForRow(row)) + # no need to call resizeSection on view_xlabels (see synchronization lines in init) + self.view_axes.verticalHeader().resizeSection(row, height) + + def resizeDataRowToContents(self, row): # must be connected to view_labels.verticalHeader().sectionHandleDoubleClicked height = max(self.view_xlabels.verticalHeader().sectionSize(row), self.view_data.sizeHintForRow(row)) From 8ab60504d572cef0445f72b5c70b76057462ab45 Mon Sep 17 00:00:00 2001 From: Alix Damman Date: Wed, 27 Sep 2017 11:33:12 +0200 Subject: [PATCH 2/3] renamed resizeXXXToContents --- larray_editor/arraywidget.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/larray_editor/arraywidget.py b/larray_editor/arraywidget.py index e2c7169..86a1285 100644 --- a/larray_editor/arraywidget.py +++ b/larray_editor/arraywidget.py @@ -537,10 +537,10 @@ def __init__(self, parent, data, readonly=False, bg_value=None, bg_gradient=None self.view_xlabels.horizontalHeader().sectionResized.connect(self.view_data.updateSectionWidth) self.view_ylabels.verticalHeader().sectionResized.connect(self.view_data.updateSectionHeight) # Synchronize auto-resizing - self.view_axes.horizontalHeader().sectionHandleDoubleClicked.connect(self.resizeAxesColumnToContents) - self.view_xlabels.horizontalHeader().sectionHandleDoubleClicked.connect(self.resizeDataColumnToContents) - self.view_axes.verticalHeader().sectionHandleDoubleClicked.connect(self.resizeAxesRowToContents) - self.view_ylabels.verticalHeader().sectionHandleDoubleClicked.connect(self.resizeDataRowToContents) + self.view_axes.horizontalHeader().sectionHandleDoubleClicked.connect(self.resize_axes_column_to_contents) + self.view_xlabels.horizontalHeader().sectionHandleDoubleClicked.connect(self.resize_xlabels_column_to_contents) + self.view_axes.verticalHeader().sectionHandleDoubleClicked.connect(self.resize_axes_row_to_contents) + self.view_ylabels.verticalHeader().sectionHandleDoubleClicked.connect(self.resize_ylabels_row_to_contents) # synchronize specific methods self.view_axes.allSelected.connect(self.view_data.selectAll) @@ -846,35 +846,35 @@ def _data_digits(self, data, maxdigits=6): def autofit_columns(self): self.view_axes.autofit_columns() for column in range(self.model_axes.columnCount()): - self.resizeAxesColumnToContents(column) + self.resize_axes_column_to_contents(column) self.view_xlabels.autofit_columns() for column in range(self.model_xlabels.columnCount()): - self.resizeDataColumnToContents(column) + self.resize_xlabels_column_to_contents(column) - def resizeAxesColumnToContents(self, column): + def resize_axes_column_to_contents(self, column): # must be connected to view_axes.horizontalHeader().sectionHandleDoubleClicked signal width = max(self.view_axes.horizontalHeader().sectionSize(column), self.view_ylabels.sizeHintForColumn(column)) # no need to call resizeSection on view_ylabels (see synchronization lines in init) self.view_axes.horizontalHeader().resizeSection(column, width) - def resizeDataColumnToContents(self, column): + def resize_xlabels_column_to_contents(self, column): # must be connected to view_labels.horizontalHeader().sectionHandleDoubleClicked signal width = max(self.view_xlabels.horizontalHeader().sectionSize(column), self.view_data.sizeHintForColumn(column)) # no need to call resizeSection on view_data (see synchronization lines in init) self.view_xlabels.horizontalHeader().resizeSection(column, width) - def resizeAxesRowToContents(self, row): + def resize_axes_row_to_contents(self, row): # must be connected to view_axes.verticalHeader().sectionHandleDoubleClicked height = max(self.view_axes.verticalHeader().sectionSize(row), self.view_xlabels.sizeHintForRow(row)) # no need to call resizeSection on view_xlabels (see synchronization lines in init) self.view_axes.verticalHeader().resizeSection(row, height) - def resizeDataRowToContents(self, row): + def resize_ylabels_row_to_contents(self, row): # must be connected to view_labels.verticalHeader().sectionHandleDoubleClicked - height = max(self.view_xlabels.verticalHeader().sectionSize(row), + height = max(self.view_ylabels.verticalHeader().sectionSize(row), self.view_data.sizeHintForRow(row)) # no need to call resizeSection on view_data (see synchronization lines in init) self.view_ylabels.verticalHeader().resizeSection(row, height) From 6d0fd63b84bfecffff2b773c27c31d3e876f7759 Mon Sep 17 00:00:00 2001 From: Alix Damman Date: Wed, 27 Sep 2017 11:36:29 +0200 Subject: [PATCH 3/3] updated test arrays in api.py --- larray_editor/api.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/larray_editor/api.py b/larray_editor/api.py index 8c7a32d..351528b 100644 --- a/larray_editor/api.py +++ b/larray_editor/api.py @@ -339,14 +339,14 @@ def restore_display_hook(): [ '', 1664780726569649730, -9196963249083393206, -7664327348053294350]]) # test autoresizing - arr8 = la.zeros('a=a_long_label,another_long_label; b=this_is_a_label,this_is_another_one') - arr9 = la.zeros('a=a0,a1; long_name_axis=this_is_a_label,this_is_another_one') + long_labels = la.zeros('a=a_long_label,another_long_label; b=this_is_a_label,this_is_another_one') + long_axes_names = la.zeros('first_axis=a0,a1; second_axis=b0,b1') # compare(arr3, arr4, arr5, arr6) # view(la.stack((arr3, arr4), la.Axis('arrays=arr3,arr4'))) - ses = la.Session(arr2=arr2, arr3=arr3, arr4=arr4, arr5=arr5, arr6=arr6, arr7=arr7, arr8=arr8, arr9=arr9, - data2=data2, data3=data3) + ses = la.Session(arr2=arr2, arr3=arr3, arr4=arr4, arr5=arr5, arr6=arr6, arr7=arr7, long_labels=long_labels, + long_axes_names=long_axes_names, data2=data2, data3=data3) # from larray.tests.common import abspath # file = abspath('test_session.xlsx')