blob: 99d9231730352fec36c1d9ab560265bf8e047394 [file] [log] [blame]
/*
* Copyright (c) 2007, 2008, 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.IBuddySession;
import org.eclipse.net4j.buddies.ISessionManager;
import org.eclipse.net4j.buddies.ISessionManagerEvent;
import org.eclipse.net4j.buddies.common.IBuddyStateEvent;
import org.eclipse.net4j.buddies.internal.ui.BuddiesItemProvider;
import org.eclipse.net4j.buddies.internal.ui.actions.ConnectAction;
import org.eclipse.net4j.buddies.internal.ui.actions.DisconnectAction;
import org.eclipse.net4j.buddies.internal.ui.actions.FlashAction;
import org.eclipse.net4j.buddies.internal.ui.actions.ReconnectAction;
import org.eclipse.net4j.buddies.internal.ui.actions.StateAction.DropDownAction;
import org.eclipse.net4j.util.container.IContainer;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
import org.eclipse.net4j.util.ui.views.ContainerView;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
public abstract class SessionManagerView extends ContainerView implements IListener
{
private IBuddySession session;
private ConnectAction connectAction = new ConnectAction();
private DisconnectAction disconnectAction = new DisconnectAction();
private ReconnectAction reconnectAction = new ReconnectAction();
private FlashAction flashAction = new FlashAction();
private DropDownAction dropDownAction = new DropDownAction();
private Control control;
public SessionManagerView()
{
}
public IBuddySession getSession()
{
return session;
}
@Override
public void dispose()
{
ISessionManager.INSTANCE.removeListener(this);
session = null;
super.dispose();
}
public void notifyEvent(IEvent event)
{
if (event instanceof ISessionManagerEvent)
{
queryBuddiesManager();
}
else if (event instanceof IBuddyStateEvent)
{
if (session != null && event.getSource() == session.getSelf())
{
updateState();
}
}
}
@Override
protected final Control createUI(Composite parent)
{
control = createControl(parent);
queryBuddiesManager();
ISessionManager.INSTANCE.addListener(this);
return control;
}
protected Control createControl(Composite parent)
{
return super.createUI(parent);
}
@Override
protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()
{
return new BuddiesItemProvider();
}
@Override
protected void fillLocalToolBar(IToolBarManager manager)
{
super.fillLocalToolBar(manager);
manager.add(dropDownAction);
}
@Override
protected void fillLocalPullDown(IMenuManager manager)
{
manager.add(connectAction);
manager.add(disconnectAction);
manager.add(reconnectAction);
manager.add(new Separator());
manager.add(flashAction);
super.fillLocalPullDown(manager);
}
protected void queryBuddiesManager()
{
IBuddySession oldSession = session;
session = ISessionManager.INSTANCE.getSession();
if (oldSession != session)
{
if (oldSession != null)
{
oldSession.removeListener(this);
oldSession.getSelf().removeListener(this);
}
if (session != null)
{
session.addListener(this);
session.getSelf().addListener(this);
}
}
resetInput();
updateState();
}
protected void updateState()
{
connectAction.setEnabled(session == null);
disconnectAction.setEnabled(session != null);
reconnectAction.setEnabled(session != null);
flashAction.setEnabled(session != null && !ISessionManager.INSTANCE.isFlashing());
dropDownAction.updateState();
// control.setEnabled(session != null);
}
}