📄 accountsview.java
字号:
public void dragLeave(DropTargetEvent event) { } public void dropAccept(DropTargetEvent event) { } public void drop(DropTargetEvent event) { event.detail = DND.DROP_COPY; TreeItem item = tree.getItem(tree.toControl(event.x, event.y)); if (SecurityTransfer.getInstance().isSupportedType(event.currentDataType)) { if (SecurityTransfer.getInstance().isSupportedType(event.currentDataType) && item != null && item.getData() instanceof Account) { Security[] securities = (Security[]) event.data; for (int i = 0; i < securities.length; i++) { TransactionDialog dlg = new TransactionDialog((Account)item.getData(), getViewSite().getShell()); dlg.open(securities[i]); } } } if (_accountTreeItemTransfer.isSupportedType(event.currentDataType)) { Integer[] items = (Integer[]) event.data; if (items != null) { AccountGroup group = null; if (item != null) { if (item instanceof GroupTreeItem) group = ((GroupTreeItem)item).getGroup(); else if (item instanceof AccountTreeItem) group = ((AccountTreeItem)item).getAccount().getGroup(); } for (int i = 0; i < items.length; i++) { Account account = (Account) CorePlugin.getRepository().load(Account.class, items[i]); CorePlugin.getRepository().allAccounts().remove(account); if (account.getGroup() != null) account.getGroup().getAccounts().remove(account); account.setGroup(group); if (account.getGroup() != null) account.getGroup().getAccounts().add(account); CorePlugin.getRepository().allAccounts().add(account); CorePlugin.getRepository().save(account); } } } } }); MenuManager menuMgr = new MenuManager("#popupMenu", "popupMenu"); //$NON-NLS-1$ //$NON-NLS-2$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuManager) { menuManager.add(new Separator("top")); //$NON-NLS-1$ menuManager.add(new NewAccountAction(AccountsView.this)); menuManager.add(new NewAccountGroupAction(AccountsView.this)); menuManager.add(new Separator("group1")); //$NON-NLS-1$ menuManager.add(newTransactionAction); menuManager.add(new Separator("group2")); //$NON-NLS-1$ menuManager.add(new Separator("group3")); //$NON-NLS-1$ menuManager.add(new Separator("group4")); //$NON-NLS-1$ menuManager.add(new Separator("group5")); //$NON-NLS-1$ menuManager.add(deleteAction); menuManager.add(new Separator("group6")); //$NON-NLS-1$ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); menuManager.add(propertiesAction); menuManager.add(new Separator("bottom")); //$NON-NLS-1$ } }); tree.setMenu(menuMgr.createContextMenu(tree)); getSite().registerContextMenu(menuMgr, getSite().getSelectionProvider()); IActionBars actionBars = getViewSite().getActionBars(); actionBars.setGlobalActionHandler("delete", deleteAction); actionBars.setGlobalActionHandler("properties", propertiesAction); IPreferenceStore preferenceStore = TradingPlugin.getDefault().getPreferenceStore(); String[] values = preferenceStore.getString(PREFS_ACCOUNT_EXPANDED_ITEMS).split(";"); for (int i = 0; i < values.length; i++) expandMap.put(values[i], new Boolean(true)); parent.getDisplay().asyncExec(new Runnable() { public void run() { updateView(); updateSelection(); CorePlugin.getRepository().allAccountGroups().addCollectionObserver(AccountsView.this); CorePlugin.getRepository().allAccounts().addCollectionObserver(AccountsView.this); CurrencyConverter.getInstance().addObserver(AccountsView.this); } }); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ public void setFocus() { tree.getParent().setFocus(); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#dispose() */ public void dispose() { CurrencyConverter.getInstance().deleteObserver(AccountsView.this); CorePlugin.getRepository().allAccountGroups().removeCollectionObserver(AccountsView.this); CorePlugin.getRepository().allAccounts().removeCollectionObserver(AccountsView.this); super.dispose(); } private void updateView() { List list = CorePlugin.getRepository().allAccountGroups(); Collections.sort(list, groupComparator); for (Iterator iter = list.iterator(); iter.hasNext(); ) { AccountGroup account = (AccountGroup)iter.next(); if (account.getParent() == null) new GroupTreeItem(account, tree, SWT.NONE); } list = CorePlugin.getRepository().allAccounts(); Collections.sort(list, accountComparator); for (Iterator iter = list.iterator(); iter.hasNext(); ) { Account account = (Account)iter.next(); if (account.getGroup() == null) new AccountTreeItem(account, tree, SWT.NONE); } int index = 0; TreeItem[] items = tree.getItems(); for (int i = 0; i < items.length; i++) index = updateItemColors(items[i], index); String[] sizes = TradingPlugin.getDefault().getPreferenceStore().getString(PREFS_ACCOUNT_COLUMNS_SIZE).split(";"); for (int i = 0; i < tree.getColumnCount(); i++) { if (i < sizes.length && sizes[i].length() != 0) tree.getColumn(i).setWidth(Integer.parseInt(sizes[i])); else tree.getColumn(i).setWidth(i == 0 ? 100 : 75); } if ("gtk".equals(SWT.getPlatform())) tree.getColumn(tree.getColumnCount() - 1).pack(); } private void updateItemColors() { tree.getDisplay().asyncExec(new Runnable() { public void run() { if (!tree.isDisposed()) { int index = 0; TreeItem[] items = tree.getItems(); for (int i = 0; i < items.length; i++) index = updateItemColors(items[i], index); } } }); } private int updateItemColors(TreeItem treeItem, int index) {// treeItem.setBackground((index & 1) == 0 ? evenBackground : oddBackground);// treeItem.setForeground((index & 1) == 0 ? evenForeground : oddForeground); index++; if (treeItem instanceof GroupTreeItem) { AccountGroup group = (AccountGroup)treeItem.getData(); if (expandMap.get(String.valueOf(group.getId())) != null) treeItem.setExpanded(true); } if (treeItem.getExpanded()) { TreeItem[] items = treeItem.getItems(); for (int i = 0; i < items.length; i++) index = updateItemColors(items[i], index); } return index; } private void updateSelection() { TreeItem[] selection = tree.getSelection(); if (selection != null && selection.length == 1) { Object item = selection[0].getData(); if (item instanceof Account) getSite().getSelectionProvider().setSelection(new AccountSelection((Account)item)); else if (item instanceof AccountGroup) getSite().getSelectionProvider().setSelection(new AccountGroupSelection((AccountGroup)item)); else getSite().getSelectionProvider().setSelection(new NullSelection()); } else getSite().getSelectionProvider().setSelection(new NullSelection()); newTransactionAction.setEnabled(getSite().getSelectionProvider().getSelection() instanceof AccountSelection); deleteAction.setEnabled(!(getSite().getSelectionProvider().getSelection() instanceof NullSelection)); propertiesAction.setEnabled(!(getSite().getSelectionProvider().getSelection() instanceof NullSelection)); } /* (non-Javadoc) * @see net.sourceforge.eclipsetrader.core.ICollectionObserver#itemAdded(java.lang.Object) */ public void itemAdded(Object o) { if (o instanceof Account) { Account account = (Account)o; if (account.getGroup() != null) return; TreeItem items[] = tree.getItems(); for (int i = 0; i < items.length; i++) { if (!(items[i].getData() instanceof Account)) continue; Account arg1 = (Account)items[i].getData(); if (accountComparator.compare(account, arg1) < 0) { new AccountTreeItem(account, tree, SWT.NONE, i); updateItemColors(); updateSelection(); return; } } new AccountTreeItem(account, tree, SWT.NONE); updateItemColors(); updateSelection(); } else if (o instanceof AccountGroup) { AccountGroup group = (AccountGroup)o; if (group.getParent() != null) return; TreeItem items[] = tree.getItems(); for (int i = 0; i < items.length; i++) { if (!(items[i].getData() instanceof AccountGroup)) { new GroupTreeItem((AccountGroup)o, tree, SWT.NONE, i); updateItemColors(); updateSelection(); return; } AccountGroup arg1 = (AccountGroup)items[i].getData(); if (groupComparator.compare(group, arg1) < 0) { new GroupTreeItem(group, tree, SWT.NONE, i); updateItemColors(); updateSelection(); return; } } new GroupTreeItem(group, tree, SWT.NONE); updateItemColors(); updateSelection(); } } /* (non-Javadoc) * @see net.sourceforge.eclipsetrader.core.ICollectionObserver#itemRemoved(java.lang.Object) */ public void itemRemoved(Object o) { TreeItem[] items = tree.getItems(); for (int i = 0; i < items.length; i++) { if (items[i].getData().equals(o)) items[i].dispose(); } updateItemColors(); updateSelection(); } /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ public void update(Observable o, Object arg) { tree.getDisplay().asyncExec(new Runnable() { public void run() { if (!tree.isDisposed()) { TreeItem[] childs = tree.getItems(); for (int i = 0; i < childs.length; i++) updateTree(childs[i]); } } }); } void updateTree(TreeItem treeItem) { if (treeItem instanceof AccountTreeItem) ((AccountTreeItem)treeItem).update(null, null); else { TreeItem[] childs = treeItem.getItems(); for (int i = 0; i < childs.length; i++) updateTree(childs[i]); } } public Tree getTree() { return tree; } private class AccountTreeItem extends TreeItem implements Observer { private Account account; public AccountTreeItem(Account account, Tree parent, int style, int index) { super(parent, style, index); init(account);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -