/* * @(#)FocusWindowAction.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.app.action.window; import edu.umd.cs.findbugs.annotations.Nullable; import org.jhotdraw.util.*; import java.beans.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.URI; import org.jhotdraw.app.View; import org.jhotdraw.net.URIUtil; /** * Requests focus for a Frame. * * @author Werner Randelshofer * @version $Id$ */ public class FocusWindowAction extends AbstractAction { private static final long serialVersionUID = 1L; public static final String ID = "window.focus"; @Nullable private View view; private PropertyChangeListener ppc; /** Creates a new instance. */ public FocusWindowAction(@Nullable View view) { this.view = view; ResourceBundleUtil labels = ResourceBundleUtil.getBundle("org.jhotdraw.app.Labels"); labels.configureAction(this, ID); //setEnabled(false); setEnabled(view != null); ppc = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); if (name.equals(View.TITLE_PROPERTY)) { putValue(Action.NAME, evt.getNewValue()); } } }; if (view != null) { view.addPropertyChangeListener(ppc); } } public void dispose() { setView(null); } public void setView(@Nullable View newValue) { if (view != null) { view.removePropertyChangeListener(ppc); } view = newValue; if (view != null) { view.addPropertyChangeListener(ppc); } } @Override public Object getValue(String key) { if (Action.NAME.equals(key) && view != null) { return getTitle(); } else { return super.getValue(key); } } private String getTitle() { ResourceBundleUtil labels = ResourceBundleUtil.getBundle("org.jhotdraw.app.Labels"); String title = labels.getString("unnamedFile"); if (view != null) { URI uri = view.getURI(); if (uri == null) { title = labels.getString("unnamedFile"); } else { title = URIUtil.getName(uri); } if (view.hasUnsavedChanges()) { title += "*"; } title = (labels.getFormatted("internalFrame.title", title, view.getApplication() == null?"":view.getApplication().getName(), view.getMultipleOpenId())); } return title; } private JFrame getFrame() { return (JFrame) SwingUtilities.getWindowAncestor( view.getComponent()); } private Component getRootPaneContainer() { return SwingUtilities.getRootPane( view.getComponent()).getParent(); } @Override public void actionPerformed(ActionEvent evt) { /* JFrame frame = getFrame(); if (frame != null) { frame.setExtendedState(frame.getExtendedState() & ~Frame.ICONIFIED); frame.toFront(); frame.requestFocus(); JRootPane rp = SwingUtilities.getRootPane(view.getComponent()); if (rp != null && (rp.getParent() instanceof JInternalFrame)) { ((JInternalFrame) rp.getParent()).toFront(); } view.getComponent().requestFocus(); } else { Toolkit.getDefaultToolkit().beep(); }*/ Component rpContainer = getRootPaneContainer(); if (rpContainer instanceof Frame) { Frame frame = (Frame) rpContainer; frame.setExtendedState(frame.getExtendedState() & ~Frame.ICONIFIED); frame.toFront(); } else if (rpContainer instanceof JInternalFrame) { JInternalFrame frame = (JInternalFrame) rpContainer; frame.toFront(); try { frame.setSelected(true); } catch (PropertyVetoException e) { // Don't care. } } view.getComponent().requestFocusInWindow(); } }