1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-02 22:55:26 +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) - [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();
}
}

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
* 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();
}
}

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) - [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);
}
}
}
}
}