Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.examples.installer/examples/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java')
-rw-r--r--plugins/org.eclipse.net4j.examples.installer/examples/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.examples.installer/examples/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java b/plugins/org.eclipse.net4j.examples.installer/examples/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java
new file mode 100644
index 0000000000..d0d98384ac
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples.installer/examples/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/actions/StateAction.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2004 - 2012 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.actions;
+
+import org.eclipse.net4j.buddies.IBuddySession;
+import org.eclipse.net4j.buddies.ISessionManager;
+import org.eclipse.net4j.buddies.common.IBuddy.State;
+import org.eclipse.net4j.buddies.internal.ui.messages.Messages;
+import org.eclipse.net4j.internal.buddies.Self;
+import org.eclipse.net4j.ui.shared.SharedIcons;
+import org.eclipse.net4j.util.ui.actions.SafeAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+
+import java.text.MessageFormat;
+
+/**
+ * @author Eike Stepper
+ */
+public class StateAction extends SafeAction
+{
+ private State state;
+
+ public StateAction(String text, State state, String key)
+ {
+ super(text, Action.AS_RADIO_BUTTON);
+ setToolTipText(MessageFormat.format(Messages.getString("StateAction_0"), text.toLowerCase())); //$NON-NLS-1$
+ setImageDescriptor(SharedIcons.getDescriptor(key));
+ this.state = state;
+ }
+
+ public void updateState()
+ {
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ setEnabled(session != null);
+ setChecked(session != null && session.getSelf().getState() == state);
+ }
+
+ @Override
+ protected void safeRun() throws Exception
+ {
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ if (session != null && isChecked())
+ {
+ Self self = (Self)session.getSelf();
+ self.setState(state);
+ }
+ }
+
+ public static class DropDownAction extends Action implements IMenuCreator
+ {
+ private Menu fMenu;
+
+ private StateAction availableAction = new AvailableAction();
+
+ private StateAction lonesomeAction = new LonesomeAction();
+
+ private StateAction awayAction = new AwayAction();
+
+ private StateAction doNotDisturbAction = new DoNotDisturbAction();
+
+ public DropDownAction()
+ {
+ setText(Messages.getString("StateAction_2")); //$NON-NLS-1$
+ setMenuCreator(this);
+ }
+
+ public void dispose()
+ {
+ if (fMenu != null)
+ {
+ fMenu.dispose();
+ fMenu = null;
+ }
+ }
+
+ public void updateState()
+ {
+ availableAction.updateState();
+ lonesomeAction.updateState();
+ awayAction.updateState();
+ doNotDisturbAction.updateState();
+
+ IBuddySession session = ISessionManager.INSTANCE.getSession();
+ if (session != null)
+ {
+ setEnabled(true);
+ State state = session.getSelf().getState();
+ switch (state)
+ {
+ case AVAILABLE:
+ setImageDescriptor(availableAction.getImageDescriptor());
+ break;
+
+ case LONESOME:
+ setImageDescriptor(lonesomeAction.getImageDescriptor());
+ break;
+
+ case AWAY:
+ setImageDescriptor(awayAction.getImageDescriptor());
+ break;
+
+ case DO_NOT_DISTURB:
+ setImageDescriptor(doNotDisturbAction.getImageDescriptor());
+ break;
+ }
+ }
+ else
+ {
+ setImageDescriptor(awayAction.getImageDescriptor());
+ setEnabled(false);
+ }
+ }
+
+ public Menu getMenu(Control parent)
+ {
+ if (fMenu != null)
+ {
+ fMenu.dispose();
+ }
+
+ fMenu = new Menu(parent);
+ addActionToMenu(fMenu, availableAction);
+ addActionToMenu(fMenu, lonesomeAction);
+ addActionToMenu(fMenu, awayAction);
+ addActionToMenu(fMenu, doNotDisturbAction);
+ return fMenu;
+ }
+
+ public Menu getMenu(Menu parent)
+ {
+ return null;
+ }
+
+ @Override
+ public void run()
+ {
+ }
+
+ protected void addActionToMenu(Menu parent, Action action)
+ {
+ ActionContributionItem item = new ActionContributionItem(action);
+ item.fill(parent, -1);
+ }
+ }
+
+ public static final class AvailableAction extends StateAction
+ {
+ public AvailableAction()
+ {
+ super(Messages.getString("StateAction_3"), State.AVAILABLE, SharedIcons.OBJ_BUDDY); //$NON-NLS-1$
+ }
+ }
+
+ public static final class LonesomeAction extends StateAction
+ {
+ public LonesomeAction()
+ {
+ super(Messages.getString("StateAction_4"), State.LONESOME, SharedIcons.OBJ_BUDDY_LONESOME); //$NON-NLS-1$
+ }
+ }
+
+ public static final class AwayAction extends StateAction
+ {
+ public AwayAction()
+ {
+ super(Messages.getString("StateAction_5"), State.AWAY, SharedIcons.OBJ_BUDDY_AWAY); //$NON-NLS-1$
+ }
+ }
+
+ public static final class DoNotDisturbAction extends StateAction
+ {
+ public DoNotDisturbAction()
+ {
+ super(Messages.getString("StateAction_6"), State.DO_NOT_DISTURB, SharedIcons.OBJ_BUDDY_DO_NOT_DISTURB); //$NON-NLS-1$
+ }
+ }
+}

Back to the top