1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 18:05:33 +02:00

[340912] inconsistencies with columns in RSE table viewers

This commit is contained in:
David McKnight 2011-03-24 21:07:15 +00:00
parent bd63b96760
commit 8e5a02f1a5
3 changed files with 84 additions and 21 deletions

View file

@ -43,6 +43,7 @@
* David McKnight (IBM) - [260346] RSE view for jobs does not remember resized columns * 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) - [333702] Remote Systems details view does not maintain column width settings across sessions
* David McKnight (IBM) - [330398] RSE leaks SWT resources * 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; 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.SystemTableView;
import org.eclipse.rse.ui.view.SystemTableViewProvider; import org.eclipse.rse.ui.view.SystemTableViewProvider;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Combo;
@ -875,21 +875,29 @@ public class SystemTableViewPart extends ViewPart
private Button _removeButton; private Button _removeButton;
private Button _upButton; private Button _upButton;
private Button _downButton; 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); super(shell, SystemResources.RESID_TABLE_SELECT_COLUMNS_LABEL);
setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP); setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP);
setInitialOKButtonEnabledState(_changed);
_adapter = viewAdapter; _adapter = viewAdapter;
_columnManager = columnManager; _columnManager = columnManager;
_uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors(); _uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors();
IPropertyDescriptor[] initialDisplayedDescriptors = _columnManager.getVisibleDescriptors(_adapter); 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); _currentDisplayedDescriptors = new ArrayList(initialDisplayedDescriptors.length);
for (int i = 0; i < initialDisplayedDescriptors.length;i++) for (int i = 0; i < sortedDisplayedDescriptors.length;i++)
{ {
if (!_currentDisplayedDescriptors.contains(initialDisplayedDescriptors[i])) _currentDisplayedDescriptors.add(sortedDisplayedDescriptors[i]);
_currentDisplayedDescriptors.add(initialDisplayedDescriptors[i]);
} }
_availableDescriptors = new ArrayList(_uniqueDescriptors.length); _availableDescriptors = new ArrayList(_uniqueDescriptors.length);
for (int i = 0; i < _uniqueDescriptors.length;i++) for (int i = 0; i < _uniqueDescriptors.length;i++)
@ -909,23 +917,27 @@ public class SystemTableViewPart extends ViewPart
{ {
int[] toAdd = _availableList.getSelectionIndices(); int[] toAdd = _availableList.getSelectionIndices();
addToDisplay(toAdd); addToDisplay(toAdd);
_changed = true;
} }
else if (source == _removeButton) else if (source == _removeButton)
{ {
int[] toAdd = _displayedList.getSelectionIndices(); int[] toAdd = _displayedList.getSelectionIndices();
removeFromDisplay(toAdd); removeFromDisplay(toAdd);
_changed = true;
} }
else if (source == _upButton) else if (source == _upButton)
{ {
int index = _displayedList.getSelectionIndex(); int index = _displayedList.getSelectionIndex();
moveUp(index); moveUp(index);
_displayedList.select(index - 1); _displayedList.select(index - 1);
_changed = true;
} }
else if (source == _downButton) else if (source == _downButton)
{ {
int index = _displayedList.getSelectionIndex(); int index = _displayedList.getSelectionIndex();
moveDown(index); moveDown(index);
_displayedList.select(index + 1); _displayedList.select(index + 1);
_changed = true;
} }
// update button enable states // update button enable states
@ -979,7 +991,7 @@ public class SystemTableViewPart extends ViewPart
_removeButton.setEnabled(enableRemove); _removeButton.setEnabled(enableRemove);
_upButton.setEnabled(enableUp); _upButton.setEnabled(enableUp);
_downButton.setEnabled(enableDown); _downButton.setEnabled(enableDown);
enableOkButton(_changed);
} }
private void moveUp(int index) private void moveUp(int index)
@ -1151,11 +1163,23 @@ public class SystemTableViewPart extends ViewPart
{ {
ISystemTableViewColumnManager mgr = _viewer.getColumnManager(); ISystemTableViewColumnManager mgr = _viewer.getColumnManager();
ISystemViewElementAdapter adapter = _viewer.getAdapterForContents(); 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) 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); _viewer.computeLayout(true);
table.setColumnOrder(newOrder);
_viewer.refresh(); _viewer.refresh();
} }
} }

View file

@ -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 * 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 * of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html * 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 * 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 * 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) - [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; 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.Label;
import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget; import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IActionBars; import org.eclipse.ui.IActionBars;
@ -327,20 +329,27 @@ class SubSetAction extends BrowseAction
private Button _upButton; private Button _upButton;
private Button _downButton; 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); super(shell, SystemResources.RESID_TABLE_SELECT_COLUMNS_LABEL);
setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP); setToolTipText(SystemResources.RESID_TABLE_SELECT_COLUMNS_TOOLTIP);
setInitialOKButtonEnabledState(_changed);
_adapter = viewAdapter; _adapter = viewAdapter;
_columnManager = columnManager; _columnManager = columnManager;
_uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors(); _uniqueDescriptors = viewAdapter.getUniquePropertyDescriptors();
IPropertyDescriptor[] initialDisplayedDescriptors = _columnManager.getVisibleDescriptors(_adapter); 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); _currentDisplayedDescriptors = new ArrayList(initialDisplayedDescriptors.length);
for (int i = 0; i < initialDisplayedDescriptors.length;i++) for (int i = 0; i < sortedDisplayedDescriptors.length;i++)
{ {
if (!_currentDisplayedDescriptors.contains(initialDisplayedDescriptors[i])) _currentDisplayedDescriptors.add(sortedDisplayedDescriptors[i]);
_currentDisplayedDescriptors.add(initialDisplayedDescriptors[i]);
} }
_availableDescriptors = new ArrayList(_uniqueDescriptors.length); _availableDescriptors = new ArrayList(_uniqueDescriptors.length);
for (int i = 0; i < _uniqueDescriptors.length;i++) for (int i = 0; i < _uniqueDescriptors.length;i++)
@ -353,30 +362,36 @@ class SubSetAction extends BrowseAction
} }
public void handleEvent(Event e) public void handleEvent(Event e)
{ {
Widget source = e.widget; Widget source = e.widget;
if (source == _addButton) if (source == _addButton)
{ {
int[] toAdd = _availableList.getSelectionIndices(); int[] toAdd = _availableList.getSelectionIndices();
addToDisplay(toAdd); addToDisplay(toAdd);
_changed = true;
} }
else if (source == _removeButton) else if (source == _removeButton)
{ {
int[] toAdd = _displayedList.getSelectionIndices(); int[] toAdd = _displayedList.getSelectionIndices();
removeFromDisplay(toAdd); removeFromDisplay(toAdd);
_changed = true;
} }
else if (source == _upButton) else if (source == _upButton)
{ {
int index = _displayedList.getSelectionIndex(); int index = _displayedList.getSelectionIndex();
moveUp(index); moveUp(index);
_displayedList.select(index - 1); _displayedList.select(index - 1);
_changed = true;
} }
else if (source == _downButton) else if (source == _downButton)
{ {
int index = _displayedList.getSelectionIndex(); int index = _displayedList.getSelectionIndex();
moveDown(index); moveDown(index);
_displayedList.select(index + 1); _displayedList.select(index + 1);
_changed = true;
} }
// update button enable states // update button enable states
@ -430,6 +445,7 @@ class SubSetAction extends BrowseAction
_removeButton.setEnabled(enableRemove); _removeButton.setEnabled(enableRemove);
_upButton.setEnabled(enableUp); _upButton.setEnabled(enableUp);
_downButton.setEnabled(enableDown); _downButton.setEnabled(enableDown);
enableOkButton(_changed);
} }
@ -603,13 +619,25 @@ class SubSetAction extends BrowseAction
public void run() public void run()
{ {
SystemTableView viewer = getViewer(); SystemTableView viewer = getViewer();
Table table = viewer.getTable();
int[] originalOrder = table.getColumnOrder();
ISystemTableViewColumnManager mgr = viewer.getColumnManager(); ISystemTableViewColumnManager mgr = viewer.getColumnManager();
ISystemViewElementAdapter adapter = viewer.getAdapterForContents(); ISystemViewElementAdapter adapter = viewer.getAdapterForContents();
SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr); SelectColumnsDialog dlg = new SelectColumnsDialog(getShell(), adapter, mgr, originalOrder);
if (dlg.open() == Window.OK) 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()); mgr.setCustomDescriptors(adapter, dlg.getDisplayedColumns());
viewer.computeLayout(true); viewer.computeLayout(true);
table.setColumnOrder(newOrder);
viewer.refresh(); viewer.refresh();
} }
} }

View file

@ -28,6 +28,7 @@
* David McKnight (IBM) - [329170] Show in table does not work after showing empty folder in table * 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) - [308783] Value in Properties view remains "Pending..."
* David McKnight (IBM) - [215814] [performance] Duplicate Queries between Table and Remote Systems View * 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; package org.eclipse.rse.ui.view;
@ -383,7 +384,7 @@ public class SystemTableView
/** /**
* @since 3.0 Moved SystemTableViewProvider from internal to API * @since 3.0 Moved SystemTableViewProvider from internal to API
* @return * @return returns the table view provider
*/ */
protected SystemTableViewProvider getProvider() protected SystemTableViewProvider getProvider()
{ {
@ -888,10 +889,20 @@ public class SystemTableView
Table table = getTable(); Table table = getTable();
if (table != null && !table.isDisposed()) if (table != null && !table.isDisposed())
{ {
int[] colOrder = table.getColumnOrder();
TableColumn[] columns = table.getColumns(); 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);
}
}
} }
} }
} }