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