diff --git a/docs/en_US/images/preferences_sql_results_grid.png b/docs/en_US/images/preferences_sql_results_grid.png index 235b61924..84e0bca71 100644 Binary files a/docs/en_US/images/preferences_sql_results_grid.png and b/docs/en_US/images/preferences_sql_results_grid.png differ diff --git a/docs/en_US/preferences.rst b/docs/en_US/preferences.rst index 81d305eac..c1c5a9227 100644 --- a/docs/en_US/preferences.rst +++ b/docs/en_US/preferences.rst @@ -377,14 +377,13 @@ Use the fields on the *Options* panel to manage editor preferences. Use the fields on the *Results grid* panel to specify your formatting preferences for copied data. -* Specify the maximum width of the column when 'Resize by data?' is set to True. - If it is set to 0 then columns will auto-size to the maximum width of the data - in the column. If 'Resize by data?' is set to False then this setting won't - take any effect. -* When the *Resize by data?* switch is set to *True*, then data columns will +* When the *Columns sized by* is set to *Column data*, then data columns will auto-size to the maximum width of the data in the column as loaded in the - first batch. If False, the column will be sized to the widest of the data - type or column name. + first batch. If set to *Column name*, the column will be sized to the widest + of the data type or column name. +* Specify the maximum width of the column in pixel when 'Columns sized by' is + set to *Column data*. If 'Columns sized by' is set to *Column name* then this + setting won't have any effect. * Use the *Result copy field separator* drop-down listbox to select the field separator for copied data. * Use the *Result copy quote character* drop-down listbox to select the quote diff --git a/docs/en_US/release_notes_5_6.rst b/docs/en_US/release_notes_5_6.rst index 91fafb0a8..445869b6f 100644 --- a/docs/en_US/release_notes_5_6.rst +++ b/docs/en_US/release_notes_5_6.rst @@ -13,6 +13,7 @@ New features Housekeeping ************ +| `Issue #6622 `_ - Rename the "Resize by data?" to "Columns sized by" and disabled the 'Maximum column width' button if 'Columns sized by' is set to 'Column data'. Bug fixes ********* diff --git a/web/pgadmin/preferences/static/js/preferences.js b/web/pgadmin/preferences/static/js/preferences.js index 7020f3ff1..6dd88151f 100644 --- a/web/pgadmin/preferences/static/js/preferences.js +++ b/web/pgadmin/preferences/static/js/preferences.js @@ -83,7 +83,8 @@ define('pgadmin.preferences', [ }); preferences.on('change', function(m) { - var id = m.get('id'); + var id = m.get('id'), + dependents = m.get('dependents'); if (!(id in changed)) { // Keep track of the original value changed[id] = m._previousAttributes.value; @@ -91,8 +92,46 @@ define('pgadmin.preferences', [ // Remove unchanged models. delete changed[id]; } + + // Check dependents exist or not. If exists then call dependentsFound function. + if (!_.isNull(dependents) && Array.isArray(dependents) && dependents.length > 0) { + dependentsFound(m.get('name'), m.get('value'), dependents); + } }); + /* + * Function: dependentsFound + * + * This method will be used to iterate through all the controls and + * dependents. If found then perform the appropriate action. + */ + var dependentsFound = function(pref_name, pref_val, dependents) { + // Iterate through all the controls and check the dependents + _.each(controls, function(c) { + let ctrl_name = c.model.get('name'); + _.each(dependents, function(deps) { + if (ctrl_name === deps) { + // Create methods to take appropriate actions and call here. + enableDisableMaxWidth(pref_name, pref_val, c); + } + }); + }); + }; + + /* + * Function: enableDisableMaxWidth + * + * This method will be used to enable and disable Maximum Width control + */ + var enableDisableMaxWidth = function(pref_name, pref_val, control) { + if (pref_name === 'column_data_auto_resize' && pref_val === 'by_name') { + control.$el.find('input').prop('disabled', true); + control.$el.find('input').val(0); + } else if (pref_name === 'column_data_auto_resize' && pref_val === 'by_data') { + control.$el.find('input').prop('disabled', false); + } + }; + /* * Function: renderPreferencePanel * @@ -144,6 +183,16 @@ define('pgadmin.preferences', [ controls.push(cntr); }); + /* Iterate through all preferences and check if dependents found. + * If found then call the dependentsFound method + */ + _.each(prefs, function(p) { + let m = preferences.get(p.id); + let dependents = m.get('dependents'); + if (!_.isNull(dependents) && Array.isArray(dependents) && dependents.length > 0) { + dependentsFound(m.get('name'), m.get('value'), dependents); + } + }); }; /* @@ -383,6 +432,7 @@ define('pgadmin.preferences', [ 'category_id': d.id, 'mid': d.mid, 'name': p.name, + 'dependents': p.dependents, }); /* * We don't know until now, how to render the control for diff --git a/web/pgadmin/static/js/slickgrid/plugins/slick.autocolumnsize.js b/web/pgadmin/static/js/slickgrid/plugins/slick.autocolumnsize.js index 9aa6eba78..62a9dfdb2 100644 --- a/web/pgadmin/static/js/slickgrid/plugins/slick.autocolumnsize.js +++ b/web/pgadmin/static/js/slickgrid/plugins/slick.autocolumnsize.js @@ -39,13 +39,13 @@ } } - function resizeAllColumns(maxWidth) { + function resizeAllColumns(maxWidth, max_width_changed=false) { var elHeaders = $container.find('.slick-header-column'); var allColumns = grid.getColumns(); elHeaders.each(function(index, el) { var columnDef = $(el).data('column'); // Check if width is set then no need to resize that column. - if (typeof(columnDef.width) !== 'undefined' && !isNaN(columnDef.width)) { + if (typeof(columnDef.width) !== 'undefined' && !isNaN(columnDef.width) && !max_width_changed) { return; } diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js index 32222297f..40c269d14 100644 --- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js +++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js @@ -892,6 +892,13 @@ define('tools.querytool', [ column_size[table_name] = {}; } + // Keep track of column_data_max_width + self.max_width_changed = false; + if (_.isUndefined(self.old_column_data_max_width) || self.old_column_data_max_width != self.preferences.column_data_max_width) { + self.old_column_data_max_width = self.preferences.column_data_max_width; + self.max_width_changed = true; + } + _.each(columns, function(c) { c.display_name = _.escape(c.display_name); @@ -931,12 +938,12 @@ define('tools.querytool', [ } if (_.isUndefined(column_size[table_name][options.nonative_field])) { - /* If column_data_auto_resize is true then for the first time set - * the addWidth parameter to iconWidth and if it is false then + /* If column_data_auto_resize is 'by_data' then for the first time set + * the addWidth parameter to iconWidth and if it is 'by_name' then * calculate width based on longer string among data type or * column name. */ - if (self.preferences.column_data_auto_resize) { + if (self.preferences.column_data_auto_resize === 'by_data') { options['addWidth'] = iconWidth; options['width'] = NaN; } else { @@ -1187,9 +1194,9 @@ define('tools.querytool', [ dataView.onRowsChanged.subscribe(function(e, args) { grid.invalidateRows(args.rows); grid.render(); - // Resize all columns if column_data_auto_resize is true. - if (self.preferences.column_data_auto_resize) { - grid.resizeAllColumns && grid.resizeAllColumns(self.preferences.column_data_max_width); + // Resize all columns if column_data_auto_resize is 'by_data'. + if (self.preferences.column_data_auto_resize === 'by_data') { + grid.resizeAllColumns && grid.resizeAllColumns(self.preferences.column_data_max_width, self.max_width_changed); } }); @@ -1430,7 +1437,7 @@ define('tools.querytool', [ } dataView.setItems(collection, self.client_primary_key); /* Resize the columns once if data empty */ - if (collection.length === 0 && self.preferences.column_data_auto_resize) { + if (collection.length === 0 && self.preferences.column_data_auto_resize === 'by_data') { self.grid.resizeAllColumns && self.grid.resizeAllColumns(); } }, diff --git a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py index c80143cb0..5d7aa404d 100644 --- a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py +++ b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py @@ -270,27 +270,27 @@ def register_query_tool_preferences(self): self.column_data_auto_resize = self.preference.register( 'Results_grid', 'column_data_auto_resize', - gettext("Resize by data?"), 'boolean', True, + gettext("Columns sized by"), 'radioModern', 'by_data', + options=[{'label': gettext('Column data'), 'value': 'by_data'}, + {'label': gettext('Column name'), 'value': 'by_name'}], category_label=PREF_LABEL_RESULTS_GRID, help_str=gettext( - 'If set to True then data columns will auto-size to the maximum ' + 'If set to \'Column data\' columns will auto-size to the maximum ' 'width of the data in the column as loaded in the first batch. If ' - 'False, the column will be sized to the widest of the data type ' - 'or column name.' - ) + 'set to \'Column name\', the column will be sized to the widest ' + 'of the data type or column name.' + ), + dependents=['column_data_max_width'] ) self.column_data_max_width = self.preference.register( 'Results_grid', 'column_data_max_width', - gettext("Maximum column width"), 'integer', 0, + gettext("Maximum column width (in Pixel)"), 'integer', 0, category_label=PREF_LABEL_RESULTS_GRID, help_str=gettext( - 'Specify the maximum width of the column when \'Resize by data?\' ' - 'is set to True. If it is set to 0 then columns will auto-size to ' - 'the maximum width of the data in the column. If ' - '\'Resize by data?\' is set to False then this setting won\'t ' - 'take any effect.' - ) + 'Specify the maximum width of the column when ' + '\'Columns sized by \' is set to \'Column data\'.' + ), ) self.sql_font_size = self.preference.register( diff --git a/web/pgadmin/utils/preferences.py b/web/pgadmin/utils/preferences.py index e36c756f1..941c00140 100644 --- a/web/pgadmin/utils/preferences.py +++ b/web/pgadmin/utils/preferences.py @@ -73,6 +73,7 @@ class _Preference(object): self.fields = kwargs.get('fields', None) self.allow_blanks = kwargs.get('allow_blanks', None) self.disabled = kwargs.get('disabled', False) + self.dependents = kwargs.get('dependents', None) # Look into the configuration table to find out the id of the specific # preference. @@ -254,6 +255,7 @@ class _Preference(object): 'value': self.get(), 'fields': self.fields, 'disabled': self.disabled, + 'dependents': self.dependents } return res @@ -427,6 +429,7 @@ class Preferences(object): fields = kwargs.get('fields', None) allow_blanks = kwargs.get('allow_blanks', None) disabled = kwargs.get('disabled', False) + dependents = kwargs.get('dependents', None) cat = self.__category(category, category_label) if name in cat['preferences']: @@ -444,7 +447,7 @@ class Preferences(object): cat['id'], name, label, _type, default, help_str=help_str, min_val=min_val, max_val=max_val, options=options, select2=select2, fields=fields, allow_blanks=allow_blanks, - disabled=disabled + disabled=disabled, dependents=dependents ) return res