diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java index 75387c07143..e325813e26b 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java @@ -43,6 +43,7 @@ * David McKnight (IBM) - [260346] RSE view for jobs does not remember resized columns * David McKnight (IBM) - [333702] Remote Systems details view does not maintain column width settings across sessions * David McKnight (IBM) - [330398] RSE leaks SWT resources + * David McKnight (IBM) - [340912] inconsistencies with columns in RSE table viewers *******************************************************/ package org.eclipse.rse.internal.ui.view; @@ -118,7 +119,6 @@ import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.rse.ui.view.SystemTableView; import org.eclipse.rse.ui.view.SystemTableViewProvider; import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; @@ -875,21 +875,29 @@ public class SystemTableViewPart extends ViewPart private Button _removeButton; private Button _upButton; private Button _downButton; + + private boolean _changed = false; - public SelectColumnsDialog(Shell shell, ISystemViewElementAdapter viewAdapter, ISystemTableViewColumnManager columnManager) + public SelectColumnsDialog(Shell shell, ISystemViewElementAdapter viewAdapter, ISystemTableViewColumnManager columnManager, int[] originalOrder) { super(shell, SystemResources.RESID_TABLE_SELECT_COLUMNS_LABEL); setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP); + setInitialOKButtonEnabledState(_changed); _adapter = viewAdapter; _columnManager = columnManager; _uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors(); IPropertyDescriptor[] initialDisplayedDescriptors = _columnManager.getVisibleDescriptors(_adapter); + + IPropertyDescriptor[] sortedDisplayedDescriptors = new IPropertyDescriptor[initialDisplayedDescriptors.length]; + for (int i = 0; i < initialDisplayedDescriptors.length; i++){ + int position = originalOrder[i+1]; + sortedDisplayedDescriptors[i] = initialDisplayedDescriptors[position-1]; + } _currentDisplayedDescriptors = new ArrayList(initialDisplayedDescriptors.length); - for (int i = 0; i < initialDisplayedDescriptors.length;i++) - { - if (!_currentDisplayedDescriptors.contains(initialDisplayedDescriptors[i])) - _currentDisplayedDescriptors.add(initialDisplayedDescriptors[i]); + for (int i = 0; i < sortedDisplayedDescriptors.length;i++) + { + _currentDisplayedDescriptors.add(sortedDisplayedDescriptors[i]); } _availableDescriptors = new ArrayList(_uniqueDescriptors.length); for (int i = 0; i < _uniqueDescriptors.length;i++) @@ -909,23 +917,27 @@ public class SystemTableViewPart extends ViewPart { int[] toAdd = _availableList.getSelectionIndices(); addToDisplay(toAdd); + _changed = true; } else if (source == _removeButton) { int[] toAdd = _displayedList.getSelectionIndices(); removeFromDisplay(toAdd); + _changed = true; } else if (source == _upButton) { int index = _displayedList.getSelectionIndex(); moveUp(index); _displayedList.select(index - 1); + _changed = true; } else if (source == _downButton) { int index = _displayedList.getSelectionIndex(); moveDown(index); _displayedList.select(index + 1); + _changed = true; } // update button enable states @@ -979,7 +991,7 @@ public class SystemTableViewPart extends ViewPart _removeButton.setEnabled(enableRemove); _upButton.setEnabled(enableUp); _downButton.setEnabled(enableDown); - + enableOkButton(_changed); } private void moveUp(int index) @@ -1151,11 +1163,23 @@ public class SystemTableViewPart extends ViewPart { ISystemTableViewColumnManager mgr = _viewer.getColumnManager(); ISystemViewElementAdapter adapter = _viewer.getAdapterForContents(); - SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr); + Table table = _viewer.getTable(); + int[] originalOrder = table.getColumnOrder(); + SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr, originalOrder); if (dlg.open() == Window.OK) { - mgr.setCustomDescriptors(adapter, dlg.getDisplayedColumns()); + IPropertyDescriptor[] newDescriptors = dlg.getDisplayedColumns(); + // reset column order + int n = newDescriptors.length + 1; + int[] newOrder = new int[n]; + for (int i = 0; i < n; i++){ + newOrder[i] = i; + } + + mgr.setCustomDescriptors(adapter, newDescriptors); _viewer.computeLayout(true); + table.setColumnOrder(newOrder); + _viewer.refresh(); } } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java index bf95fb1e97d..230c809cd1c 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/SystemMonitorViewPart.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2009 IBM Corporation and others. All rights reserved. + * Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -22,6 +22,7 @@ * David McKnight (IBM) - [225506] [api][breaking] RSE UI leaks non-API types * Zhou Renjian (Kortide) - [282239] Monitor view does not update icon according to connection status * David McKnight (IBM) - [294663] bad cast in monitor view part refresh action + * David McKnight (IBM) - [340912] inconsistencies with columns in RSE table viewers ********************************************************************************/ package org.eclipse.rse.internal.ui.view.monitor; @@ -76,6 +77,7 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.IActionBars; @@ -327,20 +329,27 @@ class SubSetAction extends BrowseAction private Button _upButton; private Button _downButton; - - public SelectColumnsDialog(Shell shell, ISystemViewElementAdapter viewAdapter, ISystemTableViewColumnManager columnManager) + private boolean _changed = false; + + public SelectColumnsDialog(Shell shell, ISystemViewElementAdapter viewAdapter, ISystemTableViewColumnManager columnManager, int[] originalOrder) { super(shell, SystemResources.RESID_TABLE_SELECT_COLUMNS_LABEL); setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP); + setInitialOKButtonEnabledState(_changed); _adapter = viewAdapter; _columnManager = columnManager; _uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors(); IPropertyDescriptor[] initialDisplayedDescriptors = _columnManager.getVisibleDescriptors(_adapter); + + IPropertyDescriptor[] sortedDisplayedDescriptors = new IPropertyDescriptor[initialDisplayedDescriptors.length]; + for (int i = 0; i < initialDisplayedDescriptors.length; i++){ + int position = originalOrder[i+1]; + sortedDisplayedDescriptors[i] = initialDisplayedDescriptors[position-1]; + } _currentDisplayedDescriptors = new ArrayList(initialDisplayedDescriptors.length); - for (int i = 0; i < initialDisplayedDescriptors.length;i++) - { - if (!_currentDisplayedDescriptors.contains(initialDisplayedDescriptors[i])) - _currentDisplayedDescriptors.add(initialDisplayedDescriptors[i]); + for (int i = 0; i < sortedDisplayedDescriptors.length;i++) + { + _currentDisplayedDescriptors.add(sortedDisplayedDescriptors[i]); } _availableDescriptors = new ArrayList(_uniqueDescriptors.length); for (int i = 0; i < _uniqueDescriptors.length;i++) @@ -353,30 +362,36 @@ class SubSetAction extends BrowseAction } + + public void handleEvent(Event e) { Widget source = e.widget; if (source == _addButton) { int[] toAdd = _availableList.getSelectionIndices(); - addToDisplay(toAdd); + addToDisplay(toAdd); + _changed = true; } else if (source == _removeButton) { int[] toAdd = _displayedList.getSelectionIndices(); removeFromDisplay(toAdd); + _changed = true; } else if (source == _upButton) { int index = _displayedList.getSelectionIndex(); moveUp(index); _displayedList.select(index - 1); + _changed = true; } else if (source == _downButton) { int index = _displayedList.getSelectionIndex(); moveDown(index); _displayedList.select(index + 1); + _changed = true; } // update button enable states @@ -430,6 +445,7 @@ class SubSetAction extends BrowseAction _removeButton.setEnabled(enableRemove); _upButton.setEnabled(enableUp); _downButton.setEnabled(enableDown); + enableOkButton(_changed); } @@ -603,13 +619,25 @@ class SubSetAction extends BrowseAction public void run() { SystemTableView viewer = getViewer(); + Table table = viewer.getTable(); + int[] originalOrder = table.getColumnOrder(); ISystemTableViewColumnManager mgr = viewer.getColumnManager(); ISystemViewElementAdapter adapter = viewer.getAdapterForContents(); - SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr); + SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr, originalOrder); if (dlg.open() == Window.OK) { + IPropertyDescriptor[] newDescriptors = dlg.getDisplayedColumns(); + + // reset column order + int n = newDescriptors.length + 1; + int[] newOrder = new int[n]; + for (int i = 0; i < n; i++){ + newOrder[i] = i; + } + mgr.setCustomDescriptors(adapter, dlg.getDisplayedColumns()); viewer.computeLayout(true); + table.setColumnOrder(newOrder); viewer.refresh(); } } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableView.java index 5ab549d1982..f96db316118 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableView.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableView.java @@ -28,6 +28,7 @@ * David McKnight (IBM) - [329170] Show in table does not work after showing empty folder in table * David McKnight (IBM) - [308783] Value in Properties view remains "Pending..." * David McKnight (IBM) - [215814] [performance] Duplicate Queries between Table and Remote Systems View + * David McKnight (IBM) - [340912] inconsistencies with columns in RSE table viewers ********************************************************************************/ package org.eclipse.rse.ui.view; @@ -383,7 +384,7 @@ public class SystemTableView /** * @since 3.0 Moved SystemTableViewProvider from internal to API - * @return + * @return returns the table view provider */ protected SystemTableViewProvider getProvider() { @@ -888,10 +889,20 @@ public class SystemTableView Table table = getTable(); if (table != null && !table.isDisposed()) { + int[] colOrder = table.getColumnOrder(); TableColumn[] columns = table.getColumns(); - for (int i = 0; i < columns.length && i < widths.length; i++) + for (int i = 0; i < columns.length; i++) { - columns[i].setWidth(widths[i]); + TableColumn column = columns[i]; + int position = colOrder[i]; + if (position < widths.length){ + column.setWidth(widths[position]); + } + else { + if (column.getWidth() == 0){ // don't hide this column + column.setWidth(100); + } + } } } }