| /* |
| * Copyright (c) 2007, 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.net4j.buddies.internal.ui.views; |
| |
| import org.eclipse.net4j.buddies.IBuddyCollaboration; |
| import org.eclipse.net4j.buddies.internal.ui.CollaborationsItemProvider; |
| import org.eclipse.net4j.buddies.internal.ui.bundle.OM; |
| import org.eclipse.net4j.buddies.internal.ui.messages.Messages; |
| import org.eclipse.net4j.buddies.ui.IFacilityPaneCreator; |
| import org.eclipse.net4j.util.StringUtil; |
| import org.eclipse.net4j.util.container.ContainerUtil; |
| import org.eclipse.net4j.util.container.IContainer; |
| import org.eclipse.net4j.util.event.IEvent; |
| import org.eclipse.net4j.util.ui.actions.SafeAction; |
| import org.eclipse.net4j.util.ui.actions.SashLayoutAction; |
| import org.eclipse.net4j.util.ui.views.ContainerItemProvider; |
| import org.eclipse.net4j.util.ui.widgets.SashComposite; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionRegistry; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.viewers.ITreeSelection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.IWorkbenchActionConstants; |
| |
| import java.text.MessageFormat; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| public class CollaborationsView extends SessionManagerView |
| { |
| private SashComposite sashComposite; |
| |
| private Map<String, IFacilityPaneCreator> facilityPaneCreators = new HashMap<String, IFacilityPaneCreator>(); |
| |
| public CollaborationsView() |
| { |
| initFacilityPaneCreators(); |
| } |
| |
| public CollaborationsPane getCollaborationsPane() |
| { |
| return (CollaborationsPane)sashComposite.getControl2(); |
| } |
| |
| public Map<String, IFacilityPaneCreator> getFacilityPaneCreators() |
| { |
| return facilityPaneCreators; |
| } |
| |
| @Override |
| protected Control createControl(Composite parent) |
| { |
| sashComposite = new SashComposite(parent, SWT.NONE, 10, 30) |
| { |
| @Override |
| protected Control createControl1(Composite parent) |
| { |
| return CollaborationsView.super.createControl(parent); |
| } |
| |
| @Override |
| protected Control createControl2(Composite parent) |
| { |
| return new CollaborationsPane(parent, CollaborationsView.this); |
| } |
| }; |
| |
| IActionBars bars = getViewSite().getActionBars(); |
| bars.getMenuManager().add(new Separator()); |
| bars.getToolBarManager().add(new Separator()); |
| getCollaborationsPane().fillActionBars(bars); |
| |
| BuddiesDropAdapter.support(getViewer()); |
| return sashComposite; |
| } |
| |
| @Override |
| protected void queryBuddiesManager() |
| { |
| super.queryBuddiesManager(); |
| getCollaborationsPane().setSession(getSession()); |
| } |
| |
| @Override |
| public void notifyEvent(IEvent event) |
| { |
| super.notifyEvent(event); |
| getCollaborationsPane().notifyEvent(event); |
| } |
| |
| @Override |
| protected void fillLocalPullDown(IMenuManager manager) |
| { |
| super.fillLocalPullDown(manager); |
| manager.add(new Separator()); |
| manager.add(new SashLayoutAction.LayoutMenu(sashComposite)); |
| } |
| |
| @Override |
| protected void fillContextMenu(IMenuManager manager, ITreeSelection selection) |
| { |
| super.fillContextMenu(manager, selection); |
| if (selection.size() == 1) |
| { |
| final IBuddyCollaboration collaboration = (IBuddyCollaboration)selection.getFirstElement(); |
| if (collaboration != null) |
| { |
| manager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, new Separator()); |
| for (IFacilityPaneCreator c : facilityPaneCreators.values()) |
| { |
| String type = c.getType(); |
| if (collaboration.getFacility(type) == null) |
| { |
| IAction action = new StartFacilityAction(collaboration, type, c.getImageDescriptor()); |
| manager.insertBefore(IWorkbenchActionConstants.MB_ADDITIONS, action); |
| } |
| } |
| } |
| } |
| } |
| |
| @Override |
| protected void doubleClicked(Object object) |
| { |
| if (object instanceof IBuddyCollaboration) |
| { |
| IBuddyCollaboration collaboration = (IBuddyCollaboration)object; |
| getCollaborationsPane().setActiveCollaboration(collaboration); |
| } |
| } |
| |
| @Override |
| protected IContainer<?> getContainer() |
| { |
| return getSession() != null ? getSession().getSelf() : ContainerUtil.emptyContainer(); |
| } |
| |
| @Override |
| protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider() |
| { |
| return new CollaborationsItemProvider() |
| { |
| @Override |
| public Font getFont(Object obj) |
| { |
| if (obj instanceof IBuddyCollaboration) |
| { |
| if (obj == getCollaborationsPane().getActiveCollaboration()) |
| { |
| return getBold(); |
| } |
| } |
| |
| return super.getFont(obj); |
| } |
| }; |
| } |
| |
| protected void initFacilityPaneCreators() |
| { |
| IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| IConfigurationElement[] elements = registry.getConfigurationElementsFor(OM.BUNDLE_ID, OM.EXT_POINT); |
| for (final IConfigurationElement element : elements) |
| { |
| if ("facilityPaneCreator".equals(element.getName())) //$NON-NLS-1$ |
| { |
| try |
| { |
| IFacilityPaneCreator creator = (IFacilityPaneCreator)element.createExecutableExtension("class"); //$NON-NLS-1$ |
| facilityPaneCreators.put(creator.getType(), creator); |
| } |
| catch (Exception ex) |
| { |
| OM.LOG.error(ex); |
| } |
| } |
| } |
| } |
| |
| /** |
| * @author Eike Stepper |
| */ |
| private final class StartFacilityAction extends SafeAction |
| { |
| private final String type; |
| |
| private IBuddyCollaboration collaboration; |
| |
| private StartFacilityAction(IBuddyCollaboration collaboration, String type, ImageDescriptor descriptor) |
| { |
| super(MessageFormat.format(Messages.getString("CollaborationsView_2"), StringUtil.cap(type)), AS_RADIO_BUTTON); //$NON-NLS-1$ |
| setToolTipText(MessageFormat.format(Messages.getString("CollaborationsView_3"), type)); //$NON-NLS-1$ |
| setImageDescriptor(descriptor); |
| this.collaboration = collaboration; |
| this.type = type; |
| } |
| |
| @Override |
| protected void safeRun() throws Exception |
| { |
| collaboration.installFacility(type); |
| } |
| } |
| } |