diff --git a/dockingcore/pom.xml b/dockingcore/pom.xml index a58508691d940ac609ca4a030df238a53025f3e7..51c037467ad643f305314b1854835cd60b990c2f 100644 --- a/dockingcore/pom.xml +++ b/dockingcore/pom.xml @@ -9,7 +9,7 @@ </parent> <groupId>fr.soleil.lib</groupId> <artifactId>DockingCore</artifactId> - <version>1.0.6-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> <name>Docking Core</name> <description>A project that defines some common abstractions in docking</description> <developers> diff --git a/dockingcore/src/main/java/fr/soleil/docking/event/DockingEvent.java b/dockingcore/src/main/java/fr/soleil/docking/event/DockingEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..9c4b0ea316dbd1e81ddd55e3765431b02222626f --- /dev/null +++ b/dockingcore/src/main/java/fr/soleil/docking/event/DockingEvent.java @@ -0,0 +1,53 @@ +package fr.soleil.docking.event; + +import java.util.EventObject; + +import fr.soleil.docking.view.IView; + +/** + * An {@link EventObject} that describes the changes in an {@link IView} + * + * @author GIRARDOT + */ +public class DockingEvent extends EventObject { + + private static final long serialVersionUID = -9107231208702875097L; + + /** + * An <code>int</code> used to notify that the associated view was closed + */ + public static final int VIEW_CLOSED = 0; + /** + * An <code>int</code> used to notify that the associated view gained the focus + */ + public static final int FOCUS_GAINED = 1; + /** + * An <code>int</code> used to notify that the associated view lost the focus + */ + public static final int FOCUS_LOST = 2; + + protected final int reason; + + public DockingEvent(IView source, int reason) { + super(source); + this.reason = reason; + } + + @Override + public IView getSource() { + return (IView) super.getSource(); + } + + /** + * Returns the reason of the changes + * + * @return An <code>int</code> + * @see #VIEW_CLOSED + * @see #FOCUS_GAINED + * @see #FOCUS_LOST + */ + public int getReason() { + return reason; + } + +} diff --git a/dockingcore/src/main/java/fr/soleil/docking/listener/IViewListener.java b/dockingcore/src/main/java/fr/soleil/docking/listener/IViewListener.java new file mode 100644 index 0000000000000000000000000000000000000000..9025df1f1c74553914a46013814e0bd4d3090c1e --- /dev/null +++ b/dockingcore/src/main/java/fr/soleil/docking/listener/IViewListener.java @@ -0,0 +1,22 @@ +package fr.soleil.docking.listener; + +import java.util.EventListener; + +import fr.soleil.docking.event.DockingEvent; +import fr.soleil.docking.view.IView; + +/** + * An {@link EventListener} that listens to the changes in an {@link IView} + * + * @author GIRARDOT + */ +public interface IViewListener extends EventListener { + + /** + * Notifies this {@link IViewListener} for some changes in an {@link IView} + * + * @param event The {@link DockingEvent} that describes the concerned {@link IView} and changes + */ + public void dockingChanged(DockingEvent event); + +} diff --git a/dockingcore/src/main/java/fr/soleil/docking/listener/ViewListenerDelegate.java b/dockingcore/src/main/java/fr/soleil/docking/listener/ViewListenerDelegate.java new file mode 100644 index 0000000000000000000000000000000000000000..cd48878030434281d3458d892ddcbcaed7e002c8 --- /dev/null +++ b/dockingcore/src/main/java/fr/soleil/docking/listener/ViewListenerDelegate.java @@ -0,0 +1,69 @@ +package fr.soleil.docking.listener; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.WeakHashMap; + +import fr.soleil.docking.event.DockingEvent; + +/** + * A class delegated to {@link IViewListener}s management + * + * @author GIRARDOT + */ +public class ViewListenerDelegate { + + protected final Collection<IViewListener> listeners; + + public ViewListenerDelegate() { + listeners = Collections.newSetFromMap(new WeakHashMap<IViewListener, Boolean>()); + } + + /** + * Warns all {@link IViewListener}s for some changes + * + * @param event The {@link DockingEvent} that describes the changes + */ + public void warnListeners(DockingEvent event) { + List<IViewListener> copy; + synchronized (listeners) { + copy = new ArrayList<IViewListener>(listeners.size()); + copy.addAll(listeners); + } + for (IViewListener listener : copy) { + if (listener != null) { + listener.dockingChanged(event); + } + } + copy.clear(); + } + + /** + * Adds a new {@link IViewListener} + * + * @param listener the {@link IViewListener} to add + */ + public void addViewListener(final IViewListener listener) { + if (listener != null) { + synchronized (listeners) { + listeners.add(listener); + } + } + } + + /** + * Removes an {@link IViewListener} + * + * @param listener The {@link IViewListener} to remove + */ + public void removeViewListener(IViewListener listener) { + if (listener != null) { + synchronized (listeners) { + listeners.remove(listener); + } + } + } + +} diff --git a/dockingcore/src/main/java/fr/soleil/docking/view/IView.java b/dockingcore/src/main/java/fr/soleil/docking/view/IView.java index 96d04aad76b35970fe27b04a701dff996265d073..a8eb564cf012633e7e6b217f62693756578bd5b5 100644 --- a/dockingcore/src/main/java/fr/soleil/docking/view/IView.java +++ b/dockingcore/src/main/java/fr/soleil/docking/view/IView.java @@ -12,6 +12,8 @@ import java.awt.Component; import javax.swing.Icon; +import fr.soleil.docking.listener.IViewListener; + /** * A dynamically created view containing an id. * @@ -57,11 +59,25 @@ public interface IView { */ public String getTitle(); + /** + * Sets this {@link IView}'s title + * + * @param title The title to set + */ + public void setTitle(String title); + /** * @return the icon */ public Icon getIcon(); + /** + * Sets this {@link IView}'s icon + * + * @param icon The icon to set + */ + public void setIcon(Icon icon); + /** * @return the component */ @@ -109,4 +125,11 @@ public interface IView { */ public void addViewListener(IViewListener listener); + /** + * Removes an {@link IViewListener} from the view.. + * + * @param listener The {@link IViewListener} to remove. + */ + public void removeViewListener(IViewListener listener); + } diff --git a/dockingcore/src/main/java/fr/soleil/docking/view/IViewListener.java b/dockingcore/src/main/java/fr/soleil/docking/view/IViewListener.java deleted file mode 100644 index 7aba97deec8b8af142b00d8addba1f23a4b8fa59..0000000000000000000000000000000000000000 --- a/dockingcore/src/main/java/fr/soleil/docking/view/IViewListener.java +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2014 Synchrotron SOLEIL - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser Public License v2.1 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - ******************************************************************************/ -package fr.soleil.docking.view; - -public interface IViewListener { - - public void viewClosed(); - - public void focusGained(); - - public void focusLost(); - -}