package com.traxel.lumbermill.desk;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.beans.PropertyVetoException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JInternalFrame;
protected final MillDesktop desktop;
public FrameControl(
final MillDesktop desktop,
final String name) {
super(name);
this.desktop = desktop;
}
public abstract void layout();
@Override
synchronized (FrameControl.class) {
layout();
}
}
final JInternalFrame[] allFrames;
JInternalFrame frame;
final List frames;
allFrames = desktop.getAllFrames();
if ((allFrames == null) || (allFrames.length == 0)) {
return Collections.EMPTY_LIST;
}
frames = new ArrayList();
for (int i = 0; i < allFrames.length; i++) {
frame = allFrames[i];
if (!frame.isClosed() && !frame.isIcon()) {
frames.add(frame);
}
}
return frames;
}
return Arrays.asList(desktop.getAllFrames());
}
protected void adjustFrame(
final JInternalFrame frame,
final Dimension size,
final int x,
final int y)
throws PropertyVetoException {
frame.setMaximum(false);
frame.setSize(size);
frame.toFront();
frame.setSelected(true);
frame.setLocation(x, y);
}
public abstract static class Tile extends FrameControl {
public static final int HORIZONTAL = 0;
public static final int VERTICAL = 1;
public Tile(
final MillDesktop desktop,
final String name) {
super(desktop, name);
}
@Override
final int ORIENTATION = getOrientation();
JInternalFrame frame;
final List frames;
final Iterator it;
final Dimension deskSize;
final Dimension frameSize;
int x;
int y;
int width;
int height;
final int deskWidth;
final int deskHeight;
frames = getActiveFrames();
if (frames.size() == 0) {
return;
}
deskSize = desktop.getSize();
deskWidth = (int)deskSize.getWidth();
deskHeight = (int)deskSize.getHeight();
if (ORIENTATION == VERTICAL) {
width = deskWidth / frames.size();
height = deskHeight;
} else {
width = deskWidth;
height = deskHeight / frames.size();
}
frameSize = new Dimension(width, height);
x = 0;
y = 0;
it = frames.iterator();
while (it.hasNext()) {
frame = (JInternalFrame)it.next();
try {
adjustFrame(frame, frameSize, x, y);
if (ORIENTATION == VERTICAL) {
x += width;
} else {
y += height;
}
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
}
super(desktop, "Tile Horizontal");
}
@Override
return HORIZONTAL;
}
}
super(desktop, "Tile Vertical");
}
@Override
return VERTICAL;
}
}
public static class Cascade extends FrameControl {
private static final int INCREMENT = 30;
public Cascade(
final MillDesktop desktop) {
super(desktop, "Cascade");
}
@Override
JInternalFrame frame;
final List frames;
final Iterator it;
final Dimension deskSize;
final Dimension frameSize;
int x;
int y;
final int width;
final int height;
final int totalShrink;
frames = getActiveFrames();
if (frames.size() == 0) {
return;
}
deskSize = desktop.getSize();
totalShrink = INCREMENT * frames.size();
width = (int)(deskSize.getWidth() - totalShrink);
height = (int)(deskSize.getHeight() - totalShrink);
frameSize = new Dimension(width, height);
x = 0;
y = 0;
it = frames.iterator();
while (it.hasNext()) {
frame = (JInternalFrame)it.next();
try {
adjustFrame(frame, frameSize, x, y);
x += INCREMENT;
y += INCREMENT;
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
}
super(desktop, "Minimize All");
}
@Override
JInternalFrame frame;
final List frames;
final Iterator it;
frames = getActiveFrames();
if (frames.size() == 0) {
return;
}
it = frames.iterator();
while (it.hasNext()) {
frame = (JInternalFrame)it.next();
try {
frame.setIcon(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
}
public static class RestoreAll extends FrameControl {
super(desktop, "Restore All");
}
@Override
JInternalFrame frame;
final List frames;
final Iterator it;
frames = getAllFrames();
if (frames.size() == 0) {
return;
}
it = frames.iterator();
while (it.hasNext()) {
frame = (JInternalFrame)it.next();
try {
frame.setIcon(false);
frame.setMaximum(false);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
}
private final JInternalFrame frame;
public MaximizeFrame(
final MillDesktop desktop,
final JInternalFrame frame) {
super(desktop, frame.getTitle());
this.frame = frame;
}
@Override
try {
frame.setMaximum(true);
frame.toFront();
frame.setSelected(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}
}