package net.eleritec.docking.demos;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import net.eleritec.docking.CursorProvider;
import net.eleritec.docking.Dockable;
import net.eleritec.docking.DockableAdapter;
import net.eleritec.docking.DockingManager;
import net.eleritec.docking.DockingPort;
import net.eleritec.docking.defaults.DefaultDockingPort;
import net.eleritec.util.ResourceManager;
public class CursorDemo extends JPanel {
private JLabel titlebar;
private CursorProvider cursorProvider;
private Dockable dockableImpl;
public CursorDemo(String title) {
super();
titlebar = createTitlebar(" " + title);
add(titlebar);
setBorder(new LineBorder(Color.black));
dockableImpl = new DockableImpl();
}
private JLabel createTitlebar(String title) {
JLabel lbl = new JLabel(title);
lbl.setForeground(Color.white);
lbl.setBackground(Color.blue);
lbl.setOpaque(true);
return lbl;
}
public void doLayout() {
Insets in = getInsets();
titlebar.setBounds(in.left, in.top, getWidth() - in.left - in.right, 25);
}
private CursorDemo getThis() {
return this;
}
private void setCursorProvider(CursorProvider prov) {
cursorProvider = prov;
}
private Dockable getDockable() {
return dockableImpl;
}
private class DockableImpl extends DockableAdapter {
public CursorProvider getCursorProvider() {
return cursorProvider;
}
public Component getDockable() {
return getThis();
}
public String getDockableDesc() {
return titlebar.getText().trim();
}
public Component getInitiator() {
// the titlebar will the the 'hot' component that initiates dragging
return titlebar;
}
}
private static JPanel createContentPane() {
JPanel p = new JPanel(new BorderLayout(5, 5));
p.add(buildDockingPort("North"), BorderLayout.NORTH);
p.add(buildDockingPort("South"), BorderLayout.SOUTH);
p.add(buildDockingPort("East"), BorderLayout.EAST);
p.add(buildDockingPort("West"), BorderLayout.WEST);
p.add(createDockingPort(), BorderLayout.CENTER);
return p;
}
private static DefaultDockingPort buildDockingPort(String desc) {
// create the DockingPort
DefaultDockingPort port = createDockingPort();
// create the Dockable panel
CursorDemo cd = new CursorDemo(desc);
DockingManager.registerDockable(cd.getDockable());
// use a custom cursor provider for the north panel
if("North".equals(desc))
cd.setCursorProvider(new CursorDelegate());
// dock the panel and return the DockingPort
port.dock(cd.getDockable(), DockingPort.CENTER_REGION);
return port;
}
private static DefaultDockingPort createDockingPort() {
DefaultDockingPort port = new DefaultDockingPort();
port.setBackground(Color.gray);
port.setPreferredSize(new Dimension(100, 100));
return port;
}
public static void main(String[] args) {
JFrame f = new JFrame("Custom Cursor Docking Demo");
f.setContentPane(createContentPane());
f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
private static class CursorDelegate implements CursorProvider {
private static final Image NORTH_IMG = createImg("tileHorizontal16.gif");
private static final Image EAST_IMG = createImg("tileVertical16.gif");
private static final Image CENTER_IMG = createImg("cascadeWindows16.gif");
private static final Image BLOCKED_IMG = createImg("closeAllWindows16.gif");
private static Image createImg(String imgName) {
return ResourceManager.createImage("resources/images/demo/" + imgName);
}
public Image getCenterImage() {
return CENTER_IMG;
}
public Image getDisallowedImage() {
return BLOCKED_IMG;
}
public Image getEastImage() {
return EAST_IMG;
}
public Image getNorthImage() {
return NORTH_IMG;
}
public Image getSouthImage() {
// same image as north
return NORTH_IMG;
}
public Image getWestImage() {
// same image as east
return EAST_IMG;
}
}
}
|