blob: 399e0f21a575e1b6b44d0e9c1baee06f04ca6397 [file] [log] [blame]
/*
* 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);
}
}
}