/*
* Created on 16.03.2006
*
*/
package org.jdesktop.swingx;
import java.awt.event.ActionEvent;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JRootPane;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import org.jdesktop.swingx.action.AbstractActionExt;
import org.jdesktop.test.AncientSwingTeam;
public class JXStatusBarVisualCheck extends InteractiveTestCase {
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(JXStatusBarVisualCheck.class.getName());
public static void main(String[] args) {
JXStatusBarVisualCheck test = new JXStatusBarVisualCheck();
try {
test.runInteractiveTests();
// test.runInteractiveTests("interactive.*Decorate.*");
} catch (Exception ex) {
}
}
/**
* Issue #1192-swingx: Cursor not adjusted to text component.
*/
public void interactiveTextComponentCursor() {
JTextField field = new JTextField("here we go, move mouse over me - text-cursor as expected");
JXFrame frame = wrapInFrame(field, "text cursor");
JTextField status = new JTextField("I'm in statusbar - move mouse over me, no text cursor");
addStatusComponent(frame, status);
show(frame);
}
/**
* Issue #936-swingx: JXRootPane can't cope with default decoration.
*/
public void interactiveDefaultDecorated() {
JXTable table = new JXTable(new AncientSwingTeam());
final JXFrame frame = wrapWithScrollingInFrame(table, "toggle laf decoration");
Action toggleDecoration = new AbstractAction("toggleDecoration") {
public void actionPerformed(ActionEvent e) {
boolean wasDecoratedByLAF = frame.isUndecorated();
frame.setVisible(false);
frame.dispose();
frame.setUndecorated(!wasDecoratedByLAF);
frame.getRootPane().setWindowDecorationStyle(wasDecoratedByLAF ?
JRootPane.NONE : JRootPane.FRAME );
frame.setVisible(true);
}
};
addAction(frame, toggleDecoration);
addStatusMessage(frame, "we must be showing");
show(frame);
}
/**
* Use-case: mimic win2k explorer status bar.
*
* has a - leading message area which resizes on frame resize - two trailing
* fixed size text areas with different fixed sizes.
*
* goal: - add the message text - add the trailing labels - auto-space (in
* win2k that would be "gaps" between the labels, in other LFs it would be),
* that is no need to manually insert anything nor fiddle with "insets". The
* LF should come up with a reasonable default. - simple constraint for
* trailing, that is no need for any hack with weights
*
*/
public void interactiveWin2kExplorerStatus() {
JComponent panel = new JXPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(createIconLabel("resources/images/explorer_win2k.png"));
panel.add(createIconLabel("resources/images/explorer_win2k_narrow.png"));
final JXFrame frame = wrapInFrame(panel, "Compare with screenshots");
addMessage(frame, "18 Objekt(e) (Freier Speicherplatz 2,08 GB)");
JXStatusBar statusBar = getStatusBar(frame);
statusBar.add(new JLabel("286 Byte")); // , JLabel.TRAILING);
statusBar.add(new JLabel("[ ] Arbeitsplatz")); //, JLabel.TRAILING);
frame.setSize(1000, 200);
frame.setVisible(true);
}
/**
* Use-case: mimic win2k eclipse status bar.
*
* has a
* - trailing fixed size area for progress info
* - before that: three fixed-size text areas (which are near to
* same size, but aren't :-) Hmm.... maybe they aren't even fixed-size,
* the separators in the wide vs narrow screenshot aren't exactly aligned.
*
* This might be a compound statusbar (one being the context infos, the
* other for progress info) - so could be considered a edge case,
* not necessarily included.
*
* goals (as far as the text fields go) are similar to the explorer
* plus:
* - support equals size cells
* - keep layout if one of the text labels is removed/hidden
*
*
*/
public void interactiveWin2kEclipseStatus() {
JComponent panel = new JXPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(createIconLabel("resources/images/eclipse_win2k.png"));
panel.add(createIconLabel("resources/images/eclipse_win2k_narrow.png"));
panel.add(createIconLabel("resources/images/eclipse_win2k_empty.png"));
final JXFrame frame = wrapInFrame(panel, "Compare with screenshots");
// JW: this is a hack .. add an empty label to force the following
// components to trailing
addMessage(frame, "");
JXStatusBar statusBar = getStatusBar(frame);
statusBar.add(new JLabel("Writable")); // , JLabel.TRAILING);
final JLabel insertLabel = new JLabel("Smart Insert");
statusBar.add(insertLabel); //, JLabel.TRAILING);
statusBar.add(new JLabel("2440 : 59")); //, JLabel.TRAILING);
// mimic a second statusbar?
statusBar.add(new JLabel("Building workspace ..."));
Action action = new AbstractActionExt("toggle insertLabel") {
public void actionPerformed(ActionEvent e) {
insertLabel.setVisible(!insertLabel.isVisible());
}
};
addAction(frame, action);
frame.setSize(1000, 200);
frame.setVisible(true);
}
private JLabel createIconLabel(String resource) {
Icon wideIcon = new ImageIcon(getClass().getResource(resource));
JLabel wide = new JLabel(wideIcon);
wide.setAlignmentX(JLabel.TRAILING);
return wide;
}
/**
* Issue ??-swingx: JXStatusBar must be bidi-compliant.
*
* On toggle CO, status bar should revers order of components.
*/
public void interactiveRToL() {
final JComponent panel = new JXPanel();
panel.add(new JLabel("leading"));
panel.add(new JLabel("trailing"));
panel.setBorder(new TitledBorder("FlowLayout"));
final JXFrame frame = wrapWithScrollingInFrame(panel, "Bidi-compliance of StatusBar");
addMessage(frame, "leading");
JXStatusBar statusBar = getStatusBar(frame);
statusBar.add(new JLabel("trailing"));
addComponentOrientationToggle(frame);
frame.setSize(200, 400);
frame.setVisible(true);
}
/**
* do-nothing method - suppress warning if there are no other
* test fixtures to run.
*
*/
public void testDummy() {
}
}