📄 tableview.java
字号:
for (int i = 0; i < sel.length; i++) {
toRefresh.add(sel[i]);
}
}
runForTableItems(toRefresh, refresher);
oldSelectedItems = toRefresh;
}
});
}
*/
new TableTooltips(table);
table.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (event.keyCode == SWT.F5) {
if ((event.stateMask & SWT.SHIFT) > 0) {
runForSelectedRows(new GroupTableRowRunner() {
public void run(TableRowCore row) {
row.invalidate();
row.refresh(true);
}
});
} else {
sortColumn(true);
}
event.doit = false;
}
}
});
ScrollBar bar = table.getVerticalBar();
if (bar != null) {
bar.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
visibleRowsChanged();
}
});
}
table.setHeaderVisible(true);
initializeTableColumns(table);
}
public void runDefaultAction() {
}
protected void initializeTableColumns(final Table table) {
TableColumn[] oldColumns = table.getColumns();
if (SWT.getVersion() >= 3100)
for (int i = 0; i < oldColumns.length; i++)
oldColumns[i].removeListener(SWT.Move, columnMoveListener);
for (int i = oldColumns.length - 1; i >= 0 ; i--)
oldColumns[i].dispose();
// Pre 3.0RC1 SWT on OSX doesn't call this!! :(
ControlListener resizeListener = new ControlAdapter() {
public void controlResized(ControlEvent e) {
TableColumn column = (TableColumn) e.widget;
if (column == null || column.isDisposed())
return;
TableColumnCore tc = (TableColumnCore)column.getData("TableColumnCore");
if (tc != null)
tc.setWidth(column.getWidth());
int columnNumber = table.indexOf(column);
locationChanged(columnNumber);
}
};
// Add 1 to position because we make a non resizable 0-sized 1st column
// to fix the 1st column gap problem (Eclipse Bug 43910)
// SWT does not set 0 column width as expected in OS X; see bug 43910
// this will be removed when a SWT-provided solution is available to satisfy all platforms with identation issue
bSkipFirstColumn = bSkipFirstColumn && !Constants.isOSX;
if (bSkipFirstColumn) {
TableColumn tc = new TableColumn(table, SWT.NULL);
tc.setWidth(0);
tc.setResizable(false);
}
TableColumnCore[] tmpColumnsOrdered = new TableColumnCore[tableColumns.length];
//Create all columns
for (int i = 0; i < tableColumns.length; i++) {
int position = tableColumns[i].getPosition();
if (position != -1) {
new TableColumn(table, SWT.NULL);
tmpColumnsOrdered[position] = tableColumns[i];
}
}
int iNewLength = table.getColumnCount() - (bSkipFirstColumn ? 1 : 0);
columnsOrdered = new TableColumnCore[iNewLength];
System.arraycopy(tmpColumnsOrdered, 0, columnsOrdered, 0, iNewLength);
ColumnSelectionListener columnSelectionListener = new ColumnSelectionListener();
//Assign length and titles
//We can only do it after ALL columns are created, as position (order)
//may not be in the natural order (if the user re-order the columns).
for (int i = 0; i < tableColumns.length; i++) {
int position = tableColumns[i].getPosition();
if (position == -1)
continue;
String sName = tableColumns[i].getName();
// +1 for Eclipse Bug 43910 (see above)
// user has reported a problem here with index-out-of-bounds - not sure why
// but putting in a preventative check so that hopefully the view still opens
// so they can fix it
int adjusted_position = position + (bSkipFirstColumn ? 1 : 0);
if (adjusted_position >= table.getColumnCount()) {
Debug.out("Incorrect table column setup, skipping column '" + sName
+ "'");
continue;
}
TableColumn column = table.getColumn(adjusted_position);
try {
column.setMoveable(true);
} catch (NoSuchMethodError e) {
// Ignore < SWT 3.1
}
Messages.setLanguageText(column, tableColumns[i].getTitleLanguageKey());
column.setAlignment(tableColumns[i].getSWTAlign());
column.setWidth(tableColumns[i].getWidth());
column.setData("TableColumnCore", tableColumns[i]);
column.setData("configName", "Table." + sTableID + "." + sName);
column.setData("Name", sName);
column.addControlListener(resizeListener);
// At the time of writing this SWT (3.0RC1) on OSX doesn't call the
// selection listener for tables
column.addListener(SWT.Selection, columnSelectionListener);
}
// Initialize the sorter after the columns have been added
String sSortColumn = configMan.getStringParameter(sTableID
+ ".sortColumn", sDefaultSortOn);
int iSortDirection = configMan.getIntParameter(CFG_SORTDIRECTION);
boolean bSortAscending = configMan.getBooleanParameter(sTableID
+ ".sortAsc", iSortDirection == 1 ? false : true);
rowSorter = new TableRowComparator(sSortColumn, bSortAscending);
changeColumnIndicator();
// Add move listener at the very end, so we don't get a bazillion useless
// move triggers
if (SWT.getVersion() >= 3100) {
Listener columnResizeListener = (!COLUMN_CLICK_DELAY) ? null
: new Listener() {
public void handleEvent(Event event) {
lLastColumnResizeOn = System.currentTimeMillis();
}
};
for (int i = 0; i < tableColumns.length; i++) {
int position = tableColumns[i].getPosition();
if (position == -1)
continue;
int adjusted_position = position + (bSkipFirstColumn ? 1 : 0);
if (adjusted_position >= table.getColumnCount())
continue;
TableColumn column = table.getColumn(adjusted_position);
column.addListener(SWT.Move, columnMoveListener);
if (COLUMN_CLICK_DELAY)
column.addListener(SWT.Resize, columnResizeListener);
}
}
}
/** Creates the Context Menu.
*
* @return a new Menu object
*/
public Menu createMenu() {
final Menu menu = new Menu(tableComposite.getShell(), SWT.POP_UP);
menu.addMenuListener(new MenuListener() {
boolean bShown = false;
public void menuHidden(MenuEvent e) {
bShown = false;
if (Constants.isOSX)
return;
// Must dispose in an asyncExec, otherwise SWT.Selection doesn't
// get fired (async workaround provided by Eclipse Bug #87678)
e.widget.getDisplay().asyncExec(new AERunnable() {
public void runSupport() {
if (bShown)
return;
MenuItem[] items = menu.getItems();
for (int i = 0; i < items.length; i++) {
items[i].dispose();
}
}
});
}
public void menuShown(MenuEvent e) {
MenuItem[] items = menu.getItems();
for (int i = 0; i < items.length; i++)
items[i].dispose();
bShown = true;
fillMenu(menu);
addThisColumnSubMenu(getColumnNo(iMouseX));
}
});
return menu;
}
/** Fill the Context Menu with items. Called when menu is about to be shown.
*
* By default, a "Edit Columns" menu and a Column specific menu is set up.
*
* @param menu Menu to fill
*/
public void fillMenu(Menu menu) {
menuThisColumn = new Menu(tableComposite.getShell(), SWT.DROP_DOWN);
final MenuItem itemThisColumn = new MenuItem(menu, SWT.CASCADE);
itemThisColumn.setMenu(menuThisColumn);
final MenuItem itemChangeTable = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemChangeTable, "MyTorrentsView.menu.editTableColumns");
Utils.setMenuItemImage(itemChangeTable, "columns");
itemChangeTable.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
new TableColumnEditorWindow(table.getShell(), tableColumns,
TableStructureEventDispatcher.getInstance(sTableID));
}
});
// Add Plugin Context menus..
boolean enable_items = table != null && table.getSelection().length > 0;
TableContextMenuItem[] items = TableContextMenuManager.getInstance()
.getAllAsArray(sTableID);
if (items.length > 0) {
new MenuItem(menu, SWT.SEPARATOR);
boolean prev_was_separator = true;
for (int i = 0; i < items.length; i++) {
final TableContextMenuItemImpl contextMenuItem = (TableContextMenuItemImpl) items[i];
final int style = contextMenuItem.getStyle();
final int swt_style;
boolean this_is_separator = false;
if (style == TableContextMenuItem.STYLE_PUSH) {
swt_style = SWT.PUSH;
} else if (style == TableContextMenuItem.STYLE_CHECK) {
swt_style = SWT.CHECK;
} else if (style == TableContextMenuItem.STYLE_RADIO) {
swt_style = SWT.RADIO;
} else if (style == TableContextMenuItem.STYLE_SEPARATOR) {
this_is_separator = true;
swt_style = SWT.SEPARATOR;
} else {
swt_style = SWT.PUSH;
}
// skip contiguous separators
if (prev_was_separator && this_is_separator) {
continue;
}
// skip trailing separator
if (this_is_separator && i == items.length - 1) {
continue;
}
prev_was_separator = this_is_separator;
final MenuItem menuItem = new MenuItem(menu, swt_style);
if (swt_style == SWT.SEPARATOR) {
continue;
}
Messages.setLanguageText(menuItem, contextMenuItem.getResourceKey());
menuItem.addListener(SWT.Selection, new SelectedTableRowsListener() {
public void run(TableRowCore row) {
if (swt_style == SWT.CHECK || swt_style == SWT.RADIO) {
contextMenuItem.setData(new Boolean(menuItem.getSelection()));
}
contextMenuItem.invokeListeners(row);
}
});
if (enable_items) {
contextMenuItem.invokeMenuWillBeShownListeners(getSelectedRows());
if (style == TableContextMenuItem.STYLE_CHECK
|| style == TableContextMenuItem.STYLE_RADIO) {
menuItem.setSelection(((Boolean) contextMenuItem.getData())
.booleanValue());
}
}
Graphic g = contextMenuItem.getGraphic();
if (g instanceof UISWTGraphic) {
Utils.setMenuItemImage(menuItem, ((UISWTGraphic) g).getImage());
}
menuItem.setEnabled(enable_items && contextMenuItem.isEnabled());
}
}
}
/**
* SubMenu for column specific tasks.
*
* @param iColumn Column # that tasks apply to.
*/
private void addThisColumnSubMenu(int iColumn) {
MenuItem item;
if (menuThisColumn == null || menuThisColumn.isDisposed())
return;
// Dispose of the old items
MenuItem[] oldItems = menuThisColumn.getItems();
for (int i = 0; i < oldItems.length; i++) {
oldItems[i].dispose();
}
item = menuThisColumn.getParentItem();
if (iColumn == -1) {
item.setEnabled(false);
item.setText(MessageText.getString("GenericText.column"));
return;
}
item.setEnabled(true);
menu.setData("ColumnNo", new Long(iColumn));
TableColumn tcColumn = table.getColumn(iColumn);
item.setText("'" + tcColumn.getText() + "' " +
MessageText.getString("GenericText.column"));
String sColumnName = (String)tcColumn.getData("Name");
if (sColumnName != null) {
addThisColumnSubMenu(sColumnName, menuThisColumn);
}
if (menuThisColumn.getItemCount() > 0) {
new MenuItem(menuThisColumn, SWT.SEPARATOR);
}
item = new MenuItem(menuThisColumn, SWT.PUSH);
Messages.setLanguageText(item, "MyTorrentsView.menu.thisColumn.sort");
item.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
int iColumn = ((Long)menu.getData("ColumnNo")).intValue();
table.getColumn(iColumn).notifyListeners(SWT.Selection, new Event());
}
});
item = new MenuItem(menuThisColumn, SWT.PUSH);
Messages.setLanguageText(item, "MyTorrentsView.menu.thisColumn.remove");
item.setEnabled(false);
item = new MenuItem(menuThisColumn, SWT.PUSH);
Messages.setLanguageText(item, "MyTorrentsView.menu.thisColumn.toClipboard");
item.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
String sToClipboard = "";
int iColumn = ((Long)menu.getData("ColumnNo")).intValue();
TableItem[] tis = table.getSelection();
for (int i = 0; i < tis.length; i++) {
if (i != 0) sToClipboard += "\n";
sToClipboard += tis[i].getText(iColumn);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -