/*
* @(#)ToolBarPrefsHandler.java
*
* Copyright (c) 1996-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.util.prefs;
import java.awt.*;
import java.awt.event.*;
import java.util.prefs.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
import javax.swing.event.*;
/**
* ToolBarPrefsHandler.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class ToolBarPrefsHandler implements ComponentListener, AncestorListener {
private JToolBar toolbar;
private String prefsPrefix;
private Preferences prefs;
public ToolBarPrefsHandler(JToolBar toolbar, String prefsPrefix, Preferences prefs) {
this.toolbar = toolbar;
this.prefsPrefix = prefsPrefix;
this.prefs = prefs;
String constraint = prefs.get(prefsPrefix+".constraint", BorderLayout.NORTH);
int orientation = (constraint.equals(BorderLayout.NORTH) || constraint.equals(BorderLayout.SOUTH)) ? JToolBar.HORIZONTAL : JToolBar.VERTICAL;
toolbar.setOrientation(orientation);
toolbar.getParent().add(constraint, toolbar);
toolbar.setVisible(prefs.getBoolean(prefsPrefix+".visible", true));
/*
if (prefs.getBoolean(prefsPrefix+".isFloating", false)) {
makeToolBarFloat();
}*/
toolbar.addComponentListener(this);
toolbar.addAncestorListener(this);
}
/*
* XXX - This does not work
private void makeToolBarFloat() {
BasicToolBarUI ui = (BasicToolBarUI) toolbar.getUI();
Window window = SwingUtilities.getWindowAncestor(toolbar);
System.out.println("Window Ancestor:"+window+" instanceof Frame:"+(window instanceof Frame));
ui.setFloating(true, new Point(
prefs.getInt(prefsPrefix+".floatingX", 0),
prefs.getInt(prefsPrefix+".floatingY", 0)
));
window = SwingUtilities.getWindowAncestor(toolbar);
window.setLocation(
prefs.getInt(prefsPrefix+".floatingX", 0),
prefs.getInt(prefsPrefix+".floatingY", 0)
);
window.toFront();
}*/
@Override
public void componentHidden(ComponentEvent e) {
prefs.putBoolean(prefsPrefix+".visible", false);
}
@Override
public void componentMoved(ComponentEvent e) {
locationChanged();
}
private void locationChanged() {
// FIXME : use reflection to get hold of method 'isFloating'.
if (toolbar.getUI() instanceof BasicToolBarUI) {
BasicToolBarUI ui = (BasicToolBarUI) toolbar.getUI();
boolean floating = ui.isFloating();
prefs.putBoolean(prefsPrefix+".isFloating", floating);
if (floating) {
Window window = SwingUtilities.getWindowAncestor(toolbar);
prefs.putInt(prefsPrefix+".floatingX", window.getX());
prefs.putInt(prefsPrefix+".floatingY", window.getY());
} else if (toolbar.getParent() != null) {
int x = toolbar.getX();
int y = toolbar.getY();
Insets insets = toolbar.getParent().getInsets();
String constraint;
if (x == insets.left && y == insets.top) {
constraint = (toolbar.getOrientation() == JToolBar.HORIZONTAL) ? BorderLayout.NORTH : BorderLayout.WEST;
} else {
constraint = (toolbar.getOrientation() == JToolBar.HORIZONTAL) ? BorderLayout.SOUTH : BorderLayout.EAST;
}
prefs.put(prefsPrefix+".constraint", constraint);
}
} else {
if (toolbar.getParent() != null) {
int x = toolbar.getX();
int y = toolbar.getY();
Insets insets = toolbar.getParent().getInsets();
String constraint;
if (x == insets.left && y == insets.top) {
constraint = (toolbar.getOrientation() == JToolBar.HORIZONTAL) ? BorderLayout.NORTH : BorderLayout.WEST;
} else {
constraint = (toolbar.getOrientation() == JToolBar.HORIZONTAL) ? BorderLayout.SOUTH : BorderLayout.EAST;
}
prefs.put(prefsPrefix+".constraint", constraint);
}
}
}
@Override
public void componentResized(ComponentEvent e) {
locationChanged();
}
@Override
public void componentShown(ComponentEvent e) {
prefs.putBoolean(prefsPrefix+".visible", true);
}
@Override
public void ancestorAdded(AncestorEvent event) {
locationChanged();
}
@Override
public void ancestorMoved(AncestorEvent event) {
if (toolbar.getUI() instanceof BasicToolBarUI) {
if (((BasicToolBarUI) toolbar.getUI()).isFloating()) {
locationChanged();
}
}
}
@Override
public void ancestorRemoved(AncestorEvent event) {
if (toolbar.getUI() instanceof BasicToolBarUI) {
if (((BasicToolBarUI) toolbar.getUI()).isFloating()) {
locationChanged();
}
}
}
}