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:
parent
bd63b96760
commit
8e5a02f1a5
3 changed files with 84 additions and 21 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue