package net.sourceforge.fidocadj.dialogs;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import net.sourceforge.fidocadj.globals.*;
/** Some routines useful with dialog windows.
<pre>
This file is part of FidoCadJ.
FidoCadJ 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 3 of the License, or
(at your option) any later version.
FidoCadJ 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 FidoCadJ. If not,
@see <a href=http://www.gnu.org/licenses/>http://www.gnu.org/licenses/</a>.
Copyright 2007-2013 by Davide Bucci
</pre>
*/
public final class DialogUtil
{
private DialogUtil()
{
// nothing
}
/** Center the frame on the screen and set its height and width to half
the screen size.
@param frame the window to be centered.
*/
public static void center(Window frame)
{
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
Point center = ge.getCenterPoint();
int w = frame.getWidth();
int h = frame.getHeight();
int x = center.x - w/2, y = center.y - h/2;
frame.setBounds(x, y, w, h);
frame.validate();
}
/** Center the frame on the screen and set its height and width to the
given proportion of the screen size
@param frame the window to be centered
@param propX the horisontal proportion, between 0.0 and 1.0.
@param propY the vertical proportion, between 0.0 and 1.0.
*/
public static void center(Window frame, double propX, double propY)
{
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
Point center = ge.getCenterPoint();
Rectangle bounds = ge.getMaximumWindowBounds();
int w = Math.max((int)(bounds.width*propX), Math.min(frame.getWidth(),
bounds.width));
int h = Math.max((int)(bounds.height*propY), Math.min(frame.getHeight(),
bounds.height));
int x = center.x - w/2, y = center.y - h/2;
frame.setBounds(x, y, w, h);
/* if (w == bounds.width && h == bounds.height)
frame.setExtendedState(Frame.MAXIMIZED_BOTH);*/
frame.validate();
}
/** Center the frame on the screen and set its height and width to the
given proportion of the screen size. Specify also the minimum
size in pixels.
@param frame the window to be centered
@param propX the horisontal proportion, between 0.0 and 1.0.
@param propY the vertical proportion, between 0.0 and 1.0.
@param minx minimum horisontal size in pixels.
@param miny minimum vertical size in pixels.
*/
public static void center(Window frame, double propX, double propY,
int minx, int miny)
{
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
Point center = ge.getCenterPoint();
Rectangle bounds = ge.getMaximumWindowBounds();
int w = Math.max((int)(bounds.width*propX), Math.min(frame.getWidth(),
bounds.width));
if(w<minx)
w=minx;
int h = Math.max((int)(bounds.height*propY), Math.min(frame.getHeight(),
bounds.height));
if(h<miny)
h=miny;
int x = center.x - w/2, y = center.y - h/2;
frame.setBounds(x, y, w, h);
/* if (w == bounds.width && h == bounds.height)
frame.setExtendedState(Frame.MAXIMIZED_BOTH);*/
frame.validate();
}
/** Maps the escape key with the action given (ideally, it should probably
close the dialog window). Example follows:
<pre>
// Here is an action in which the dialog is closed
AbstractAction cancelAction = new AbstractAction ()
{
public void actionPerformed (ActionEvent e)
{
setVisible(false);
}
};
dialogUtil.addCancelEscape (this, cancelAction);
</pre>
@param f the dialog window on which the action should be applied
@param cancelAction the action to be performed in response to the Esc
key
*/
public static void addCancelEscape (JDialog f,
AbstractAction cancelAction)
{
// Map the Esc key to the cancel action description in the dialog box's
// input map.
String CANCEL_ACTION_KEY = "CANCEL_ACTION_KEY";
int noModifiers = 0;
KeyStroke escapeKey =
KeyStroke.getKeyStroke (KeyEvent.VK_ESCAPE, noModifiers, false);
InputMap inputMap = f.getRootPane ().getInputMap
(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put (escapeKey, CANCEL_ACTION_KEY);
f.getRootPane ().getActionMap ().put (CANCEL_ACTION_KEY, cancelAction);
}
/** Set up the constraints for the GridLayout manager
@param gridx the x position in the grid
@param gridy the y position in the grid
@param width the width of the control
@param height the heigth of the control
@param weightx the weightx to be adopted
@param weighty the weighty to be adopted
@param anch the anchor value
@param fill the fill valuue
@param insets the insets to be used
@return the constraints object created.
*/
public static GridBagConstraints createConst(int gridx, int gridy,
int width, int height, int weightx, int weighty,
int anch, int fill, Insets insets)
{
GridBagConstraints constraints=new GridBagConstraints();
constraints.gridx=gridx;
constraints.gridy=gridy;
constraints.gridwidth=width;
constraints.gridheight=height;
constraints.weightx=weightx;
constraints.weighty=weighty;
constraints.fill = fill;
constraints.anchor = anch;
constraints.insets=insets;
return constraints;
}
}