📄 tableview.java
字号:
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) {
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));
}
});
menuThisColumn = new Menu(tableComposite.getShell(), SWT.DROP_DOWN);
final MenuItem itemThisColumn = new MenuItem(menu, SWT.CASCADE);
itemThisColumn.setMenu(menuThisColumn);
// 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);
addTableContextMenuItems(items, menu, true, enable_items);
}
}
private void addTableContextMenuItems(org.gudy.azureus2.plugins.ui.menus.MenuItem[] items, Menu parent, boolean prev_was_separator, boolean enable_items) {
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;
// Do we have any children? If so, we override any manually defined
// style.
boolean is_container = false;
org.gudy.azureus2.plugins.ui.menus.MenuItem [] child_items = contextMenuItem.getItems();
if (style == TableContextMenuItem.STYLE_MENU) {
swt_style = SWT.CASCADE;
is_container = true;
}
else 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(parent, swt_style);
if (swt_style == SWT.SEPARATOR) {
continue;
}
menuItem.addListener(SWT.Selection, new SelectedTableRowsListener() {
public boolean run(TableRowCore[] rows) {
if (swt_style == SWT.CHECK || swt_style == SWT.RADIO) {
if (!menuItem.isDisposed()) {
contextMenuItem.setData(new Boolean(menuItem.getSelection()));
}
}
contextMenuItem.invokeListeners(rows);
return true;
}
});
if (is_container) {
Menu this_menu = new Menu(getComposite().getShell(), SWT.DROP_DOWN);
menuItem.setMenu(this_menu);
this.addTableContextMenuItems(child_items, this_menu, false, enable_items);
}
if (enable_items) {
contextMenuItem.invokeMenuWillBeShownListeners(getSelectedRows());
if (style == TableContextMenuItem.STYLE_CHECK
|| style == TableContextMenuItem.STYLE_RADIO) {
menuItem.setSelection(((Boolean) contextMenuItem.getData())
.booleanValue());
}
}
String custom_title = contextMenuItem.getText();
menuItem.setText(custom_title);
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);
}
new Clipboard(mainComposite.getDisplay()).setContents(new Object[] { sToClipboard },
new Transfer[] {TextTransfer.getInstance()});
}
});
// Add Plugin Context menus..
TableColumnCore tc = (TableColumnCore)tcColumn.getData("TableColumnCore");
TableContextMenuItem[] items = tc.getContextMenuItems();
if (items.length > 0) {
new MenuItem(menuThisColumn, SWT.SEPARATOR);
for (int i = 0; i < items.length; i++) {
final TableContextMenuItemImpl contextMenuItem = (TableContextMenuItemImpl)items[i];
final MenuItem menuItem = new MenuItem(menuThisColumn, SWT.PUSH);
Messages.setLanguageText(menuItem, contextMenuItem.getResourceKey());
menuItem.addListener(SWT.Selection, new SelectedTableRowsListener() {
public boolean run(TableRowCore[] rows) {
contextMenuItem.invokeListeners(rows);
return true;
}
});
}
}
}
/** Create a SubMenu for column specific tasks. Everytime the user opens
* the context menu, the "This Column" submenu is cleared, and this function
* is called to refill it.
*
* @param sColumnName The name of the column the user clicked on
* @param menuThisColumn the menu to fill with MenuItems
*/
public void addThisColumnSubMenu(String sColumnName, Menu menuThisColumn) {
/* // Template code
if (sColumnName.equals("xxx")) {
item = new MenuItem(menuThisColumn, SWT.PUSH);
Messages.setLanguageText(item, "xxx.menu.xxx");
item.setImage(ImageRepository.getImage("xxx"));
item.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
// Code here
}
});
*/
}
/** IView.getComposite()
* @return the composite for this TableView
*/
public Composite getComposite() {
return mainComposite;
}
public Composite getTableComposite() {
return tableComposite;
}
/** IView.refresh(), called when the GUI needs an update */
public final void refresh() {
refresh(false);
}
long count = 0;
public void refresh(boolean bForceSort) {
// don't refresh while there's no table
if (table == null)
return;
refreshTable(bForceSort);
if (bEnableTabViews && tabFolder != null && !tabFolder.isDisposed()
&& !tabFolder.getMinimized())
refreshSelectedSubView();
// TODO: Refresh folder titles
}
public IView getActiveSubView() {
if (!bEnableTabViews || tabFolder == null || tabFolder.isDisposed()
|| tabFolder.getMinimized())
return null;
CTabItem item = tabFolder.getSelection();
if (item != null) {
return (IView)item.getData("IView");
}
return null;
}
public void refreshSelectedSubView() {
IView view = getActiveSubView();
if (view != null)
view.refresh();
}
public void refreshTable(boolean bForceSort) {
// don't refresh while there's no table
if (table == null)
return;
try{
this_mon.enter();
if(getComposite() == null || getComposite().isDisposed())
return;
if (checkColumnWidthsEvery != 0 &&
(loopFactor % checkColumnWidthsEvery) == 0) {
TableColumn[] tableColumnsSWT = table.getColumns();
for (int i = 0; i < tableColumnsSWT.length; i++) {
TableColumnCore tc = (TableColumnCore)tableColumnsSWT[i].getData("TableColumnCore");
if (tc != null && tc.getWidth() != tableColumnsSWT[i].getWidth()) {
tc.setWidth(tableColumnsSWT[i].getWidth());
int columnNumber = table.indexOf(tableColumnsSWT[i]);
locationChanged(columnNumber);
}
}
}
long lTimeStart = System.currentTimeMillis();
count = 0;
final boolean bDoGraphics = (loopFactor % graphicsUpdate) == 0;
final boolean bWillSort = bForceSort || (reOrderDelay != 0) && ((loopFactor % reOrderDelay) == 0);
//System.out.println("Refresh.. WillSort? " + bWillSort);
if (bWillSort) {
if (bForceSort) {
sortColumn.setLastSortValueChange(SystemTime.getCurrentTime());
}
sortColumn(true);
}
lTimeStart = System.currentTimeMillis();
//Refresh all visible items in table...
runForAllRows(new GroupTableRowVisibilityRunner() {
public void run(TableRowCore row, boolean bVisible) {
row.refresh(bDoGraphics, bVisible);
}
});
if (DEBUGADDREMOVE) {
long lTimeDiff = (System.currentTimeMillis() - lTimeStart);
if (lTimeDiff > 500)
debug(lTimeDiff + "ms to refresh rows");
}
loopFactor++;
}finally{
this_mon.exit();
}
}
private void refreshVisibleRows() {
if (getComposite() == null || getComposite().isDisposed())
return;
runForVisibleRows(new GroupTableRowRunner() {
public void run(TableRowCore row) {
row.setAlternatingBGColor(true);
row.refresh(false, true);
}
});
}
/**
* Process the queue of datasources to be added and removed
*
*/
public void processDataSourceQueue() {
Object[] dataSourcesAdd = null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -