diff options
| author | pnehrer | 2005-03-30 20:28:36 +0000 |
|---|---|---|
| committer | pnehrer | 2005-03-30 20:28:36 +0000 |
| commit | d2da5dffe95fcfe98af212e20a4fbfb27a03ac80 (patch) | |
| tree | 7020bd350ea3836d8b7332634fe8098b9dbef22a | |
| parent | 4412cc76a4ee68da9ccc486d9f8aac4799b3278c (diff) | |
| download | org.eclipse.ecf-d2da5dffe95fcfe98af212e20a4fbfb27a03ac80.tar.gz org.eclipse.ecf-d2da5dffe95fcfe98af212e20a4fbfb27a03ac80.tar.xz org.eclipse.ecf-d2da5dffe95fcfe98af212e20a4fbfb27a03ac80.zip | |
Merged E3_1M5a branch.
2 files changed, 167 insertions, 46 deletions
diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ChatComposite.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ChatComposite.java index b3b17ff51..2413c1a6b 100644 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ChatComposite.java +++ b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ChatComposite.java @@ -13,10 +13,15 @@ package org.eclipse.ecf.example.collab.ui; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; import java.util.StringTokenizer; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.identity.IDFactory; @@ -29,12 +34,19 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.FontRegistry; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; @@ -51,6 +63,7 @@ import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; @@ -62,6 +75,11 @@ import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; +import org.eclipse.ui.dialogs.ISelectionStatusValidator; +import org.eclipse.ui.model.IWorkbenchAdapter; +import org.eclipse.ui.views.IViewDescriptor; +import org.eclipse.ui.views.IViewRegistry; @@ -814,16 +832,161 @@ public class ChatComposite extends Composite { } } protected void sendShowViewRequest(User touser) { - String viewid = null; - IWorkbenchWindow ww = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + String viewid = null; + IWorkbenchWindow ww = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow(); IWorkbenchPage page = ww.getActivePage(); if (page == null) return; - ShowViewsDialog dlg = new ShowViewsDialog(getShell(),view.lch); + + ElementTreeSelectionDialog dlg = new ElementTreeSelectionDialog( + getShell(), + new LabelProvider() { + private HashMap images = new HashMap(); + public Image getImage(Object element) { + ImageDescriptor desc = null; + if (element instanceof IWorkbenchAdapter) + desc = ((IWorkbenchAdapter) element).getImageDescriptor(element); + else if (element instanceof IViewDescriptor) + desc = ((IViewDescriptor) element).getImageDescriptor(); + + if (desc == null) + return null; + + Image image = (Image) images.get(desc); + if (image == null) { + image = desc.createImage(); + images.put(desc, image); + } + + return image; + } + public String getText(Object element) { + String label; + if (element instanceof IWorkbenchAdapter) + label = ((IWorkbenchAdapter) element).getLabel(element); + else if (element instanceof IViewDescriptor) + label = ((IViewDescriptor) element).getLabel(); + else + label = super.getText(element); + + for ( + int i = label.indexOf('&'); + i >= 0 && i < label.length() - 1; + i = label.indexOf('&', i + 1)) + if (!Character.isWhitespace(label.charAt(i + 1))) + return label.substring(0, i) + label.substring(i + 1); + + return label; + } + public void dispose() { + for (Iterator i = images.values().iterator(); i.hasNext();) + ((Image) i.next()).dispose(); + + images = null; + super.dispose(); + } + }, + new ITreeContentProvider() { + private HashMap parents = new HashMap(); + public Object[] getChildren(Object element) { + if (element.getClass().isArray()) + return (Object[]) element; + else if (element instanceof IWorkbenchAdapter) { + Object[] children = + ((IWorkbenchAdapter) element).getChildren(element); + for (int i = 0; i < children.length; ++i) + if (children[i] instanceof IViewDescriptor) + parents.put(children[i], element); + + return children; + } else + return new Object[0]; + } + public Object getParent(Object element) { + if (element instanceof IWorkbenchAdapter) + return ((IWorkbenchAdapter) element).getParent(element); + else if (element instanceof IViewDescriptor) + return parents.get(element); + else + return null; + } + public boolean hasChildren(Object element) { + if (element.getClass().isArray()) + return ((Object[]) element).length > 0; + else if (element instanceof IWorkbenchAdapter) + return true; + else + return false; + } + public Object[] getElements(Object inputElement) { + return getChildren(inputElement); + } + public void dispose() { + parents = null; + } + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + parents.clear(); + } + }); + dlg.setTitle(MessageLoader + .getString("LineChatClientView.contextmenu.sendShowViewRequest.dialog.title")); + dlg.addFilter(new ViewerFilter() { + public boolean select(Viewer viewer, Object parentElement, Object element) { + if (element instanceof IViewDescriptor + && "org.eclipse.ui.internal.introview".equals( + ((IViewDescriptor) element).getId())) + return false; + else + return true; + }}); + dlg.setSorter(new ViewerSorter()); + dlg.setValidator(new ISelectionStatusValidator() { + public IStatus validate(Object[] selection) { + for (int i = 0; i < selection.length; ++i) + if (!(selection[i] instanceof IViewDescriptor)) + return new Status(Status.ERROR, ClientPlugin.PLUGIN_ID, 0, "", null); + + return new Status(Status.OK, ClientPlugin.PLUGIN_ID, 0, "", null); + } + }); + IViewRegistry reg = PlatformUI.getWorkbench().getViewRegistry(); + dlg.setInput(reg.getCategories()); + IDialogSettings dlgSettings = ClientPlugin.getDefault().getDialogSettings(); + final String DIALOG_SETTINGS = "SendShowViewRequestDialog"; + final String SELECTION_SETTING = "SELECTION"; + IDialogSettings section = dlgSettings.getSection(DIALOG_SETTINGS); + if (section == null) + section = dlgSettings.addNewSection(DIALOG_SETTINGS); + else { + String[] selectedIDs = section.getArray(SELECTION_SETTING); + if (selectedIDs != null && selectedIDs.length > 0) { + ArrayList list = new ArrayList(selectedIDs.length); + for (int i = 0; i < selectedIDs.length; ++i) { + IViewDescriptor desc = reg.find(selectedIDs[i]); + if (desc != null) + list.add(desc); + } + + dlg.setInitialElementSelections(list); + } + } + dlg.open(); if (dlg.getReturnCode() == Window.CANCEL) return; - dlg.showViews(touser); + + Object[] descs = dlg.getResult(); + if (descs == null) + return; + + String[] selectedIDs = new String[descs.length]; + for (int i = 0; i < descs.length; ++i) { + selectedIDs[i] = ((IViewDescriptor)descs[i]).getId(); + view.lch.sendShowView(touser, selectedIDs[i]); + } + + section.put(SELECTION_SETTING, selectedIDs); } protected void sendCVSUpdateRequest(User touser) { //String initStr = MessageLoader.getString("LineChatClientView.contextmenu.sendCVSUpdateRequestInitStr"); diff --git a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ShowViewsDialog.java b/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ShowViewsDialog.java deleted file mode 100644 index b535c6e80..000000000 --- a/examples/bundles/org.eclipse.ecf.example.collab/src/org/eclipse/ecf/example/collab/ui/ShowViewsDialog.java +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -* Copyright (c) 2004 Composent, Inc. 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 -* -* Contributors: -* Composent, Inc. - initial API and implementation -*****************************************************************************/ - -package org.eclipse.ecf.example.collab.ui; - -import org.eclipse.ecf.example.collab.share.User; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.internal.WorkbenchPlugin; -import org.eclipse.ui.internal.dialogs.ShowViewDialog; -import org.eclipse.ui.internal.registry.IViewDescriptor; - -public class ShowViewsDialog extends ShowViewDialog { - - LineChatHandler lch; - - public ShowViewsDialog(Shell shell, LineChatHandler lch) { - super(shell,WorkbenchPlugin.getDefault().getViewRegistry()); - this.lch = lch; - } - - public void showViews(User touser) { - IViewDescriptor[] descs = getSelection(); - if (descs==null) return; - for (int i = 0; i < descs.length; ++i) { - lch.sendShowView(touser,descs[i].getID()); - } - } - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(MessageLoader - .getString("LineChatClientView.contextmenu.sendShowViewRequest.dialog.title")); - //WorkbenchHelp.setHelp(shell, IHelpContextIds.SHOW_VIEW_DIALOG); - } -} |
