⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tableview.java

📁 基于JXTA开发平台的下载软件开发源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                    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 + -