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

Docking VL first implementation

parent f39d0437
No related branches found
No related tags found
No related merge requests found
package fr.soleil.docking.vl;
import java.util.HashMap;
import java.util.Map;
import com.vldocking.swing.docking.DockKey;
import com.vldocking.swing.docking.Dockable;
import com.vldocking.swing.docking.DockableState;
import com.vldocking.swing.docking.DockableState.Location;
import com.vldocking.swing.docking.DockingDesktop;
import com.vldocking.swing.docking.RelativeDockablePosition;
import com.vldocking.swing.docking.event.DockingActionCloseEvent;
import com.vldocking.swing.docking.event.DockingActionEvent;
import com.vldocking.swing.docking.event.DockingActionListener;
@SuppressWarnings("serial")
public class SoleilDockingDesktop extends DockingDesktop {
protected Map<String, RelativeDockablePosition> closedPositions = new HashMap<String, RelativeDockablePosition>();
private boolean closeEnabled;
private boolean autoHideEnabled;
private boolean maximizeEnabled;
private boolean floatingEnabled;
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());
}
@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;
}
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);
}
}
}
private RelativeDockablePosition getPositionForClosedView(Dockable dockable) {
RelativeDockablePosition result = null;
if (dockable != null) {
result = closedPositions.get(dockable.getDockKey().getKey());
}
return result;
}
}
...@@ -10,138 +10,141 @@ import java.io.ObjectOutputStream; ...@@ -10,138 +10,141 @@ import java.io.ObjectOutputStream;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.UIManager;
import com.vldocking.swing.docking.Dockable;
import com.vldocking.swing.docking.DockingDesktop; import com.vldocking.swing.docking.DockingDesktop;
import com.vldocking.swing.docking.DockingPreferences;
import fr.soleil.docking.ADockingManager; import fr.soleil.docking.ADockingManager;
import fr.soleil.docking.exception.DockingException;
import fr.soleil.docking.perspective.IPerspective; import fr.soleil.docking.perspective.IPerspective;
import fr.soleil.docking.perspective.PerspectiveFactory; import fr.soleil.docking.perspective.PerspectiveFactory;
import fr.soleil.docking.vl.view.VlDockView;
import fr.soleil.docking.vl.view.VlDockViewFactory; import fr.soleil.docking.vl.view.VlDockViewFactory;
public class VlDockDockingManager extends ADockingManager { public class VlDockDockingManager extends ADockingManager {
protected DockingDesktop rootWindow; protected SoleilDockingDesktop mainDockingDesktop;
public VlDockDockingManager() { public VlDockDockingManager() {
super(new VlDockViewFactory(), new PerspectiveFactory()); super(new VlDockViewFactory(), new PerspectiveFactory());
} DockingPreferences.setShadowDesktopStyle();
UIManager.getDefaults().put("TabbedDockableContainer.tabPlacement", 1);
@Override }
public JComponent getDockingArea() {
if (rootWindow == null) { @Override
rootWindow = (DockingDesktop) createNewDockingArea(null); public JComponent getDockingArea() {
rootWindow.setOpaqueContents(true); if (mainDockingDesktop == null) {
} mainDockingDesktop = (SoleilDockingDesktop) new SoleilDockingDesktop();
return rootWindow; mainDockingDesktop.setOpaqueContents(true);
} }
return mainDockingDesktop;
public DockingDesktop getDockingDesktop() { }
return (DockingDesktop) getDockingArea();
} public DockingDesktop getDockingDesktop() {
return (DockingDesktop) getDockingArea();
@Override }
public JComponent createNewDockingArea(Color background) {
DockingDesktop result = new DockingDesktop(); @Override
if (background != null) { public JComponent createNewDockingArea(Color background) {
result.setBackground(background); SoleilDockingDesktop result = new SoleilDockingDesktop(false, false,
} true, false);
return result; if (background != null) {
} result.setBackground(background);
}
@Override return result;
public void setDockingAreaBeackground(JComponent dockingArea, Color areaBackground) { }
if (dockingArea != null) {
dockingArea.setBackground(areaBackground); @Override
} public void setDockingAreaBeackground(JComponent dockingArea,
} Color areaBackground) {
if (dockingArea != null) {
// /** dockingArea.setBackground(areaBackground);
// * Creates a new docking area with a given background {@link Color} }
// * }
// * @param background The background {@link Color}
// * @return A {@link JComponent} @Override
// */ public void loadPerspective(IPerspective perspective)
// @Override throws DockingException {
// public JComponent createNewDockingArea(Color background) { DockingException dockingException = null;
// DockingDesktop result = (DockingDesktop) createNewDockingArea(); if (perspective.getByteArray().length > 0) {
// if (background != null) {
// result.setBackground(background); ObjectInputStream ois = null;
// } ByteArrayInputStream bais = null;
// return result; try {
// }
bais = new ByteArrayInputStream(perspective.getByteArray());
@Override ois = new ObjectInputStream(bais);
public void loadPerspective(IPerspective perspective) { mainDockingDesktop.readXML(ois);
if (perspective.getByteArray().length > 0) { } catch (Exception e) {
dockingException = new DockingException("Perspective.load() :"
ObjectInputStream ois = null; + " Unexpected Error", e);
ByteArrayInputStream bais = null; } finally {
try { try {
if (ois != null) {
bais = new ByteArrayInputStream(perspective.getByteArray()); ois.close();
ois = new ObjectInputStream(bais); }
rootWindow.readXML(ois); // Actually there is no effect to close bais ...
} catch (Exception e) { } catch (IOException e) {
JOptionPane.showMessageDialog(rootWindow, "Perspective.load() :" + " Unexpected Error (see traces)", if (dockingException == null) {
"INFONODE Docking - Error", JOptionPane.ERROR_MESSAGE); dockingException = new DockingException(
} finally { "I/O Exception", e);
try { } else {
if (ois != null) { e.printStackTrace();
ois.close(); }
} }
// Actually there is no effect to close bais ... }
} catch (IOException e) { }
e.printStackTrace(); if (dockingException != null) {
} throw dockingException;
} }
} }
}
@Override
@Override protected void savePerspective(IPerspective perspective) {
protected void savePerspective(IPerspective perspective) { ByteArrayOutputStream baos = null;
ByteArrayOutputStream baos = null; ObjectOutputStream ous = null;
ObjectOutputStream ous = null; baos = new ByteArrayOutputStream();
baos = new ByteArrayOutputStream(); try {
try { ous = new ObjectOutputStream(baos);
ous = new ObjectOutputStream(baos); mainDockingDesktop.writeXML(ous);
rootWindow.writeXML(ous); } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); JOptionPane.showMessageDialog(mainDockingDesktop,
JOptionPane.showMessageDialog(rootWindow, "Perspective.save() :" + " Unexpected Error (see traces)", "Perspective.save() :" + " Unexpected Error (see traces)",
"INFONODE Docking - Error", JOptionPane.ERROR_MESSAGE); "VLDock - Error", JOptionPane.ERROR_MESSAGE);
} finally { } finally {
try { try {
ous.close(); ous.close();
// Actually there is no effect to close baos ... // Actually there is no effect to close baos ...
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
perspective.setByteArray(baos.toByteArray()); perspective.setByteArray(baos.toByteArray());
} }
@Override @Override
protected void updateViews(PropertyChangeEvent evt) { protected void updateViews(PropertyChangeEvent evt) {
if (evt.getSource() == this.viewFactory) { if (evt.getSource() == this.viewFactory) {
Dockable newView = (Dockable) evt.getNewValue(); VlDockView newView = (VlDockView) evt.getNewValue();
Dockable oldView = (Dockable) evt.getOldValue(); VlDockView oldView = (VlDockView) evt.getOldValue();
if (newView == null) { // removed if (newView == null) { // removed
rootWindow.remove(oldView);
} else { mainDockingDesktop.remove(oldView);
rootWindow.addDockable(newView); } else {
} mainDockingDesktop.addDockable(newView);
} }
} }
}
@Override
public void setEnabledDocking(boolean enabledDocking) { @Override
// public void setEnabledDocking(boolean enabledDocking) {
} System.out.println("VlDockDockingManager.setEnabledDocking()");
}
@Override
public boolean isEnabledDocking() { @Override
return true; public boolean isEnabledDocking() {
} return true;
}
} }
...@@ -9,149 +9,176 @@ import java.util.List; ...@@ -9,149 +9,176 @@ 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.event.DockingActionEvent;
import com.vldocking.swing.docking.event.DockingActionListener;
import fr.soleil.docking.view.IView; import fr.soleil.docking.view.IView;
import fr.soleil.docking.view.IViewListener; import fr.soleil.docking.view.IViewListener;
import fr.soleil.docking.vl.VlDockDockingManager; import fr.soleil.docking.vl.SoleilDockingDesktop;
public class VlDockView implements IView { public class VlDockView implements IView, Dockable {
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 VlDockDockingManager manager; protected SoleilDockingDesktop dockingDesktop;
public VlDockView(String title, Icon icon, Component component, Object id, VlDockDockingManager manager) { public VlDockView(String title, Icon icon, Component component, Object id) {
this.title = title; this.title = title;
this.icon = icon; this.icon = icon;
this.component = component; this.component = component;
this.id = id; this.id = id;
this.key = new DockKey(title, title, title, icon); this.key = new DockKey(title, title, title, icon);
this.key.setFloatEnabled(false); }
this.manager = manager; public void setDockingDesktop(SoleilDockingDesktop dockingDesktop){
} this.dockingDesktop = dockingDesktop;
dockingDesktop.registerDockable(this);
@Override }
public Component getComponent() { @Override
return component; public Component getComponent() {
} return component;
}
@Override
public Object getId() { @Override
return id; public Object getId() {
} return id;
}
@Override
public boolean isEnabled() { @Override
return enabled; public boolean isEnabled() {
} return enabled;
}
@Override
public void setEnabled(boolean enabled) { @Override
this.enabled = enabled; public void setEnabled(boolean enabled) {
} this.enabled = enabled;
}
@Override
public boolean isVisible() { @Override
return visible; public boolean isVisible() {
} return visible;
}
@Override
public void setVisible(boolean visible) { @Override
this.visible = visible; public void setVisible(boolean visible) {
this.visible = visible;
} if (visible) {
dockingDesktop.showDockable(this);
@Override } else {
public String getTitle() { dockingDesktop.close(this);
return title; }
} component.setVisible(visible);
component.setEnabled(visible);
@Override }
public Icon getIcon() {
return icon; @Override
} public String getTitle() {
return title;
@Override }
public Color getViewBackground() {
return component.getBackground(); @Override
} public Icon getIcon() {
return icon;
@Override }
public void setViewBackground(Color bg) {
if (component instanceof Container) { @Override
List<Component> components = getAllComponents((Container) component); public Color getViewBackground() {
setComponentsBackground(components, bg); return component.getBackground();
} }
component.setBackground(bg);
} @Override
public void setViewBackground(Color bg) {
@Override if (component instanceof Container) {
public Color getViewForeground() { List<Component> components = getAllComponents((Container) component);
return component.getForeground(); setComponentsBackground(components, bg);
} }
component.setBackground(bg);
@Override }
public void setViewForeground(Color fg) {
component.setForeground(fg); @Override
} public Color getViewForeground() {
return component.getForeground();
/* }
* Sets the background of all {@link Component}s in a given {@link List}
* @Override
* @param components The {@link List} public void setViewForeground(Color fg) {
* @param bg The background to set component.setForeground(fg);
*/ }
protected void setComponentsBackground(List<?> components, Color bg) {
if (components != null) { /*
for (Object comp : components) { * Sets the background of all {@link Component}s in a given {@link List}
if (comp instanceof Component) { *
((Component) comp).setBackground(bg); * @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) {
* Sets the foreground of all {@link Component}s in a given {@link List} if (comp instanceof Component) {
* ((Component) comp).setBackground(bg);
* @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) { * Sets the foreground of all {@link Component}s in a given {@link List}
((Component) comp).setForeground(bg); *
} * @param components
} * The {@link List}
} * @param bg
} * The foreground to set
*/
public List<Component> getAllComponents(final Container c) { protected void setComponentsForeground(List<?> components, Color bg) {
Component[] comps = c.getComponents(); if (components != null) {
List<Component> compList = new ArrayList<Component>(); for (Object comp : components) {
for (Component comp : comps) { if (comp instanceof Component) {
compList.add(comp); ((Component) comp).setForeground(bg);
if (comp instanceof Container) { }
compList.addAll(getAllComponents((Container) comp)); }
} }
} }
return compList;
} public List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
@Override List<Component> compList = new ArrayList<Component>();
public void setClosable(boolean closable) { for (Component comp : comps) {
// TODO Auto-generated method stub compList.add(comp);
if (comp instanceof Container) {
} compList.addAll(getAllComponents((Container) comp));
}
@Override }
public void addViewListener(IViewListener listener) { return compList;
// TODO Auto-generated method stub }
} @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;
}
} }
...@@ -7,22 +7,24 @@ import javax.swing.JComponent; ...@@ -7,22 +7,24 @@ import javax.swing.JComponent;
import fr.soleil.docking.view.AbstractViewFactory; import fr.soleil.docking.view.AbstractViewFactory;
import fr.soleil.docking.view.IView; import fr.soleil.docking.view.IView;
import fr.soleil.docking.vl.SoleilDockingDesktop;
public class VlDockViewFactory extends AbstractViewFactory { public class VlDockViewFactory extends AbstractViewFactory {
public VlDockViewFactory() { public VlDockViewFactory() {
super(); super();
} }
@Override @Override
protected IView createView(String title, Icon icon, Component component, Object id) { protected IView createView(String title, Icon icon, Component component, Object id) {
// TODO Auto-generated method stub IView result = new VlDockView(title, icon, component, id);
return null; return result;
} }
@Override @Override
protected void updateViewForDockingArea(IView view, JComponent dockingArea) { protected void updateViewForDockingArea(IView view, JComponent dockingArea) {
// TODO Auto-generated method stub ((VlDockView)view).setDockingDesktop((SoleilDockingDesktop) dockingArea);
} }
} }
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