/*
* org.openmicroscopy.shoola.env.ui.TopWindow
*
*------------------------------------------------------------------------------
* Copyright (C) 2006 University of Dundee. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package org.openmicroscopy.shoola.env.ui;
import java.awt.Frame;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import org.openmicroscopy.shoola.util.ui.AnimatedJFrame;
import org.openmicroscopy.shoola.util.ui.UIUtilities;
/**
* A superclass for windows that are to be linked to the {@link TaskBar} by
* means of one quick-launch button and a menu entry in the
* {@link TaskBar#WINDOW_MENU}.
* <p>The constructor of this class automatically adds an entry in the
* {@link TaskBar#WINDOW_MENU} subclasses use the <code>configure</code>
* methods to specify icons, names, and tooltips. These are display-trigger
* buttons that cause the window to be shown on screen. This class uses the
* {@link TopWindowManager} to control mouse clicks on these buttons as well as
* to manage the display state of the window.</p>
* <p>Agents with a single top level window typically have their window inherit
* from this class. The {@link #enableButtons(boolean) enableButtons} method
* is provided so as to let agents control when the display buttons should be
* disabled/enabled by default they're enabled.</p>
*
* @see org.openmicroscopy.shoola.env.ui.TopWindowManager
* @see org.openmicroscopy.shoola.env.ui.TopWindowGroup
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author <br>Andrea Falconi
* <a href="mailto:a.falconi@dundee.ac.uk">
* a.falconi@dundee.ac.uk</a>
* @version 2.2
* @since OME2.2
*/
public abstract class TopWindow
extends AnimatedJFrame
{
/**
* The icon button that we add to the quick launch toolbar within the
* {@link TaskBar}.
*/
private JButton quickLaunchBtn;
/**
* The menu entry that we add to the window menu within the {@link TaskBar}.
*/
private JMenuItem winMenuEntry;
/** Cached reference to the {@link TaskBar}. */
private TaskBar taskBar;
/** Adds the display buttons to the task bar and enables them. */
private void configureButtons()
{
enableButtons(true);
}
/**
* Sets the icon and tooltip of the quick-launch button.
*
* @param icon The icon.
* @param tooltip The tooltip.
*/
protected void configureQuickLaunchBtn(Icon icon, String tooltip)
{
if (quickLaunchBtn != null) quickLaunchBtn.setIcon(icon);
if (quickLaunchBtn != null)
quickLaunchBtn.setToolTipText(
UIUtilities.formatToolTipText(tooltip));
}
/**
* Sets the text label and the icon of the entry in the
* {@link TaskBar#WINDOW_MENU}.
*
* @param name A text label for the menu item.
* @param icon An icon for the menu item.
*/
protected void configureWinMenuEntry(String name, Icon icon)
{
if (winMenuEntry != null) winMenuEntry.setText(name);
if (winMenuEntry != null) winMenuEntry.setIcon(icon);
}
/**
* Called by subclasses to perform initialization.
* This constructor adds an entry to the
* {@link TaskBar#WINDOW_MENU} subclasses can then use the
* <code>configure</code> methods to specify icons, names, and tooltips.
* Also an instance of {@link TopWindowManager} is created to control mouse
* clicks on these buttons as well as to manage the display state of the
* window.
*
* @param title The title of the window.
* @param tb A reference to the task bar.
*/
protected TopWindow(String title, TaskBar tb)
{
super(title);
setIconImage(AbstractIconManager.getOMEImageIcon()); //Default.
if (tb == null)
throw new NullPointerException("No reference to the TaskBar.");
taskBar = tb;
quickLaunchBtn = new JButton();
winMenuEntry = new JMenuItem();
configureButtons();
new TopWindowManager(this,
new AbstractButton[] {quickLaunchBtn, winMenuEntry});
}
/**
* Called by subclasses to perform initialization.
*
* @param title The title of the window.
*/
protected TopWindow(String title)
{
super(title);
setIconImage(AbstractIconManager.getOMEImageIcon()); //Default.
}
/**
* Deiconifies the frame if the frame is in the {@link Frame#ICONIFIED}
* state.
*/
public void deIconify()
{
if (getExtendedState() == Frame.ICONIFIED)
setExtendedState(Frame.NORMAL);
setVisible(true);
}
/** Iconifies the frame depending on the extended state. */
public void iconify()
{
if (getExtendedState() == Frame.NORMAL)
setExtendedState(Frame.ICONIFIED);
setVisible(false);
}
/**
* Enables or disables the display buttons.
*
* @param b Pass <code>true</code> to enable, <code>false</code> to disable.
*/
public void enableButtons(boolean b)
{
if (quickLaunchBtn != null) quickLaunchBtn.setEnabled(b);
if (winMenuEntry != null) winMenuEntry.setEnabled(b);
}
/** Shows the window. */
public void open() { quickLaunchBtn.doClick(); }
/**
* Disposes of the window and removes the display buttons from the
* {@link TaskBar}.
*/
public void close()
{
dispose();
//taskBar.removeFromMenu(TaskBar.WINDOW_MENU, winMenuEntry);
//taskBar.removeFromToolBar(TaskBar.QUICK_LAUNCH_TOOLBAR, quickLaunchBtn);
}
/**
* Packs and shows the window at the center of the screen.
* Default location. Any class can override the method to specify the size
* and the location of the window.
*/
public void setOnScreen()
{
pack();
UIUtilities.centerAndShow(this);
}
}