Skip to content
Snippets Groups Projects
Commit fc5c790b authored by Gregory Viguier's avatar Gregory Viguier Committed by MADELA Patrick
Browse files

Docking VL first implementation

parent cd9651f5
No related branches found
No related tags found
No related merge requests found
package fr.soleil.docking.vl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.vldocking.swing.docking.DockKey;
......@@ -13,78 +16,81 @@ import com.vldocking.swing.docking.event.DockingActionCloseEvent;
import com.vldocking.swing.docking.event.DockingActionEvent;
import com.vldocking.swing.docking.event.DockingActionListener;
import fr.soleil.docking.view.IViewListener;
import fr.soleil.docking.vl.view.VlDockView;
@SuppressWarnings("serial")
public class SoleilDockingDesktop extends DockingDesktop {
protected Map<String, RelativeDockablePosition> closedPositions = new HashMap<String, RelativeDockablePosition>();
protected Map<String, RelativeDockablePosition> closedPositions = new HashMap<String, RelativeDockablePosition>();
protected boolean closeEnabled;
protected boolean autoHideEnabled;
protected boolean maximizeEnabled;
protected boolean floatingEnabled;
private boolean closeEnabled;
private boolean autoHideEnabled;
private boolean maximizeEnabled;
private boolean floatingEnabled;
public SoleilDockingDesktop() {
this(true, false, true, false);
}
public SoleilDockingDesktop() {
this(true, false, true, false);
}
public SoleilDockingDesktop(boolean close, boolean autoHide, boolean maximize, boolean floating) {
super();
closeEnabled = close;
autoHideEnabled = autoHide;
maximizeEnabled = maximize;
floatingEnabled = floating;
addDockingActionListener(generateDockingActionListener());
}
public SoleilDockingDesktop(boolean close, boolean autoHide,
boolean maximize, boolean floating) {
super();
closeEnabled = close;
autoHideEnabled = autoHide;
maximizeEnabled = maximize;
floatingEnabled = floating;
addDockingActionListener(generateDockingActionListener());
}
@Override
public void addDockable(Dockable dockable) {
//DockKey key = dockable.getDockKey();
// key.setCloseEnabled(closeEnabled);
//key.setAutoHideEnabled(autoHideEnabled);
//key.setMaximizeEnabled(maximizeEnabled);
//key.setFloatEnabled(floatingEnabled);
// super.addDockable(dockable, new RelativeDockablePosition(1,0, 0.5, 0.5));
addDockingActionListener((VlDockView) dockable);
super.addDockable(dockable);
}
@Override
public void addDockable(Dockable dockable) {
DockKey key = dockable.getDockKey();
key.setCloseEnabled(closeEnabled);
key.setAutoHideEnabled(autoHideEnabled);
key.setMaximizeEnabled(maximizeEnabled);
key.setFloatEnabled(floatingEnabled);
super.addDockable(dockable, new RelativeDockablePosition(1,0, 0.5, 0.5));
//super.addDockable(dockable);
}
private DockingActionListener generateDockingActionListener() {
DockingActionListener result = new DockingActionListener() {
public boolean acceptDockingAction(DockingActionEvent event) {
return true;
}
private DockingActionListener generateDockingActionListener() {
DockingActionListener result = new DockingActionListener() {
public boolean acceptDockingAction(DockingActionEvent event) {
return true;
}
public void dockingActionPerformed(DockingActionEvent event) {
if (event.getActionType() == DockingActionEvent.ACTION_CLOSE) {
Dockable closedDockable = ((DockingActionCloseEvent) event).getDockable();
DockableState state = getDockableState(closedDockable);
RelativeDockablePosition position = state.getPosition();
closedPositions.put(closedDockable.getDockKey().getKey(), position);
}
}
};
return result;
}
public void dockingActionPerformed(DockingActionEvent event) {
if (event.getActionType() == DockingActionEvent.ACTION_CLOSE) {
Dockable closedDockable = ((DockingActionCloseEvent) event)
.getDockable();
DockableState state = getDockableState(closedDockable);
RelativeDockablePosition position = state.getPosition();
closedPositions.put(closedDockable.getDockKey().getKey(),
position);
}
}
};
return result;
}
public void showDockable(Dockable dockable) {
DockableState state = getDockableState(dockable);
if (state == null || Location.CLOSED.equals(state.getLocation())
|| Location.HIDDEN.equals(state.getLocation())) {
RelativeDockablePosition position = getPositionForClosedView(dockable);
if (position != null) {
addDockable(dockable, position);
}
else {
addDockable(dockable);
}
}
}
public void showDockable(Dockable dockable) {
DockableState state = getDockableState(dockable);
if (state == null || Location.CLOSED.equals(state.getLocation())
|| Location.HIDDEN.equals(state.getLocation())) {
RelativeDockablePosition position = getPositionForClosedView(dockable);
if (position != null) {
addDockable(dockable, position);
} else {
addDockable(dockable);
}
}
}
private RelativeDockablePosition getPositionForClosedView(Dockable dockable) {
RelativeDockablePosition result = null;
if (dockable != null) {
result = closedPositions.get(dockable.getDockKey().getKey());
}
return result;
}
private RelativeDockablePosition getPositionForClosedView(Dockable dockable) {
RelativeDockablePosition result = null;
if (dockable != null) {
result = closedPositions.get(dockable.getDockKey().getKey());
}
return result;
}
}
......@@ -4,12 +4,14 @@ import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.Icon;
import com.vldocking.swing.docking.DockKey;
import com.vldocking.swing.docking.Dockable;
import com.vldocking.swing.docking.event.DockingActionCloseEvent;
import com.vldocking.swing.docking.event.DockingActionEvent;
import com.vldocking.swing.docking.event.DockingActionListener;
......@@ -17,168 +19,181 @@ import fr.soleil.docking.view.IView;
import fr.soleil.docking.view.IViewListener;
import fr.soleil.docking.vl.SoleilDockingDesktop;
public class VlDockView implements IView, Dockable {
protected Object id;
protected boolean enabled;
protected boolean visible;
protected String title;
protected Component component;
protected Icon icon;
protected DockKey key;
protected SoleilDockingDesktop dockingDesktop;
public VlDockView(String title, Icon icon, Component component, Object id) {
this.title = title;
this.icon = icon;
this.component = component;
this.id = id;
this.key = new DockKey(title, title, title, icon);
}
public void setDockingDesktop(SoleilDockingDesktop dockingDesktop){
this.dockingDesktop = dockingDesktop;
dockingDesktop.registerDockable(this);
}
@Override
public Component getComponent() {
return component;
}
@Override
public Object getId() {
return id;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Override
public boolean isVisible() {
return visible;
}
@Override
public void setVisible(boolean visible) {
this.visible = visible;
if (visible) {
dockingDesktop.showDockable(this);
} else {
dockingDesktop.close(this);
}
component.setVisible(visible);
component.setEnabled(visible);
}
@Override
public String getTitle() {
return title;
}
@Override
public Icon getIcon() {
return icon;
}
@Override
public Color getViewBackground() {
return component.getBackground();
}
@Override
public void setViewBackground(Color bg) {
if (component instanceof Container) {
List<Component> components = getAllComponents((Container) component);
setComponentsBackground(components, bg);
}
component.setBackground(bg);
}
@Override
public Color getViewForeground() {
return component.getForeground();
}
@Override
public void setViewForeground(Color fg) {
component.setForeground(fg);
}
/*
* Sets the background of all {@link Component}s in a given {@link List}
*
* @param components The {@link List}
*
* @param bg The background to set
*/
protected void setComponentsBackground(List<?> components, Color bg) {
if (components != null) {
for (Object comp : components) {
if (comp instanceof Component) {
((Component) comp).setBackground(bg);
}
}
}
}
/**
* Sets the foreground of all {@link Component}s in a given {@link List}
*
* @param components
* The {@link List}
* @param bg
* The foreground to set
*/
protected void setComponentsForeground(List<?> components, Color bg) {
if (components != null) {
for (Object comp : components) {
if (comp instanceof Component) {
((Component) comp).setForeground(bg);
}
}
}
}
public List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
List<Component> compList = new ArrayList<Component>();
for (Component comp : comps) {
compList.add(comp);
if (comp instanceof Container) {
compList.addAll(getAllComponents((Container) comp));
}
}
return compList;
}
@Override
public void setClosable(boolean closable) {
}
@Override
public void addViewListener(final IViewListener listener) {
new DockingActionListener() {
public boolean acceptDockingAction(DockingActionEvent event) {
return true;
}
public void dockingActionPerformed(DockingActionEvent event) {
if (event.getActionType() == DockingActionEvent.ACTION_CLOSE) {
listener.viewClosed();
}
}
};
}
@Override
public DockKey getDockKey() {
return key;
}
public class VlDockView implements IView, Dockable, DockingActionListener {
protected Object id;
protected boolean enabled;
protected boolean visible;
protected String title;
protected Component component;
protected Icon icon;
protected DockKey key;
protected SoleilDockingDesktop dockingDesktop;
protected List<IViewListener> viewListeners;
public VlDockView(String title, Icon icon, Component component, Object id) {
this.title = title;
this.icon = icon;
this.component = component;
this.id = id;
this.key = new DockKey(title, title, title, icon);
this.viewListeners = new ArrayList<IViewListener>();
}
public void setDockingDesktop(SoleilDockingDesktop dockingDesktop) {
this.dockingDesktop = dockingDesktop;
dockingDesktop.registerDockable(this);
}
@Override
public Component getComponent() {
return component;
}
@Override
public Object getId() {
return id;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@Override
public boolean isVisible() {
return visible;
}
@Override
public void setVisible(boolean visible) {
this.visible = visible;
if (visible) {
dockingDesktop.showDockable(this);
}
else {
dockingDesktop.close(this);
}
component.setVisible(visible);
component.setEnabled(visible);
}
@Override
public String getTitle() {
return title;
}
@Override
public Icon getIcon() {
return icon;
}
@Override
public Color getViewBackground() {
return component.getBackground();
}
@Override
public void setViewBackground(Color bg) {
if (component instanceof Container) {
List<Component> components = getAllComponents((Container) component);
setComponentsBackground(components, bg);
}
component.setBackground(bg);
}
@Override
public Color getViewForeground() {
return component.getForeground();
}
@Override
public void setViewForeground(Color fg) {
component.setForeground(fg);
}
/*
* Sets the background of all {@link Component}s in a given {@link List}
*
* @param components The {@link List}
*
* @param bg The background to set
*/
protected void setComponentsBackground(List<?> components, Color bg) {
if (components != null) {
for (Object comp : components) {
if (comp instanceof Component) {
((Component) comp).setBackground(bg);
}
}
}
}
/**
* Sets the foreground of all {@link Component}s in a given {@link List}
*
* @param components The {@link List}
* @param bg The foreground to set
*/
protected void setComponentsForeground(List<?> components, Color bg) {
if (components != null) {
for (Object comp : components) {
if (comp instanceof Component) {
((Component) comp).setForeground(bg);
}
}
}
}
public List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
List<Component> compList = new ArrayList<Component>();
for (Component comp : comps) {
compList.add(comp);
if (comp instanceof Container) {
compList.addAll(getAllComponents((Container) comp));
}
}
return compList;
}
@Override
public void setClosable(boolean closable) {
key.setCloseEnabled(closable);
}
@Override
public void addViewListener(final IViewListener listener) {
viewListeners.add(listener);
}
@Override
public DockKey getDockKey() {
return key;
}
@Override
public boolean acceptDockingAction(DockingActionEvent event) {
return true;
}
@Override
public void dockingActionPerformed(DockingActionEvent event) {
if (event.getActionType() == DockingActionEvent.ACTION_CLOSE) {
Dockable closedDockable = ((DockingActionCloseEvent) event).getDockable();
if (getDockKey().getKey().equals(closedDockable.getDockKey().getKey())) {
for (Iterator<IViewListener> listenersIterator = viewListeners.iterator(); listenersIterator
.hasNext();) {
IViewListener listener = (IViewListener) listenersIterator.next();
listener.viewClosed();
}
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment