250 lines
6.5 KiB
Java
250 lines
6.5 KiB
Java
|
/*
|
||
|
|
||
|
Copyright 2006 Eric Hakenholz
|
||
|
|
||
|
This file is part of C.a.R. software.
|
||
|
|
||
|
C.a.R. is a 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, version 3 of the License.
|
||
|
|
||
|
C.a.R. 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, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
package eric;
|
||
|
|
||
|
import java.awt.Color;
|
||
|
import java.awt.Dimension;
|
||
|
import java.awt.Frame;
|
||
|
import java.awt.Point;
|
||
|
import java.awt.event.KeyAdapter;
|
||
|
import java.awt.event.KeyEvent;
|
||
|
import java.awt.event.MouseAdapter;
|
||
|
import java.awt.event.MouseEvent;
|
||
|
import java.awt.event.WindowAdapter;
|
||
|
import java.awt.event.WindowEvent;
|
||
|
|
||
|
import javax.swing.BorderFactory;
|
||
|
import javax.swing.ImageIcon;
|
||
|
import javax.swing.JButton;
|
||
|
import javax.swing.JComponent;
|
||
|
import javax.swing.JDialog;
|
||
|
import javax.swing.JLabel;
|
||
|
import javax.swing.JTextField;
|
||
|
import javax.swing.SwingConstants;
|
||
|
|
||
|
import rene.gui.Global;
|
||
|
import rene.zirkel.ZirkelCanvas;
|
||
|
import rene.zirkel.expression.Expression;
|
||
|
import rene.zirkel.objects.ConstructionObject;
|
||
|
import eric.bar.JProperties;
|
||
|
import javax.swing.JPanel;
|
||
|
import rene.gui.Global;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author erichake
|
||
|
*/
|
||
|
public class JMacroPrompt extends JDialog {
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
private static final long serialVersionUID = 1L;
|
||
|
// boolean Valid=false;
|
||
|
JTextField T = new JTextField();
|
||
|
// String S="";
|
||
|
String InitValue = "";
|
||
|
ConstructionObject OC;
|
||
|
ZirkelCanvas ZC;
|
||
|
int WindowEventCount = 0;
|
||
|
Color TitleColor = new Color(200, 200, 200);
|
||
|
Color TxtColor = new Color(250, 250, 250);
|
||
|
Color DlogColor = new Color(90, 90, 90);
|
||
|
|
||
|
private void fixsize(final JComponent cp, final int w, final int h) {
|
||
|
final Dimension d = new Dimension(w, h);
|
||
|
cp.setMaximumSize(d);
|
||
|
cp.setMinimumSize(d);
|
||
|
cp.setPreferredSize(d);
|
||
|
cp.setSize(d);
|
||
|
}
|
||
|
|
||
|
private JEricPanel margin(final int w) {
|
||
|
final JEricPanel mypan = new JEricPanel();
|
||
|
fixsize(mypan, w, 1);
|
||
|
mypan.setOpaque(false);
|
||
|
mypan.setFocusable(false);
|
||
|
return mypan;
|
||
|
}
|
||
|
|
||
|
private boolean isValidExpression(final String myexp) {
|
||
|
boolean bool = true;
|
||
|
try {
|
||
|
final Expression exp = new Expression(myexp, OC.getConstruction(),
|
||
|
OC);
|
||
|
if (!(exp.isValid()))
|
||
|
bool = false;
|
||
|
} catch (final Exception ex) {
|
||
|
bool = false;
|
||
|
}
|
||
|
return bool;
|
||
|
}
|
||
|
|
||
|
public JMacroPrompt(final Frame f, final ZirkelCanvas zc,
|
||
|
final String oName, final ConstructionObject oc) {
|
||
|
super(f, true);
|
||
|
OC = oc;
|
||
|
ZC = zc;
|
||
|
|
||
|
try {
|
||
|
InitValue = String.valueOf(OC.getValue());
|
||
|
} catch (final Exception ex) {
|
||
|
}
|
||
|
|
||
|
final JPanel content = (JPanel) this.getContentPane();
|
||
|
this.setUndecorated(true);
|
||
|
content.setLayout(new javax.swing.BoxLayout(content,
|
||
|
javax.swing.BoxLayout.Y_AXIS));
|
||
|
content.setBackground(DlogColor);
|
||
|
// this.setBackground(new Color(0.2f, 0.2f, 0.2f, 0.5f));
|
||
|
// content.setOpaque(false);
|
||
|
|
||
|
final JLabel p1 = new JLabel(Global.name("macro.prompt.prompt") + " :");
|
||
|
p1.setHorizontalAlignment(SwingConstants.CENTER);
|
||
|
fixsize(p1, 300, 15);
|
||
|
p1.setAlignmentX(0.5f);
|
||
|
p1.setOpaque(false);
|
||
|
p1.setFont(new java.awt.Font(Global.GlobalFont, 1, 12));
|
||
|
p1.setForeground(TitleColor);
|
||
|
|
||
|
final JEricPanel p2 = new JEricPanel();
|
||
|
p2
|
||
|
.setLayout(new javax.swing.BoxLayout(p2,
|
||
|
javax.swing.BoxLayout.X_AXIS));
|
||
|
final JLabel p21 = new JLabel(oName);
|
||
|
final JButton okbtn = new JButton();
|
||
|
okbtn.setIcon(new ImageIcon(getClass().getResource(
|
||
|
"/eric/GUI/icons/palette/Mvalid.png")));
|
||
|
okbtn.setBorder(BorderFactory.createEmptyBorder());
|
||
|
okbtn.addMouseListener(new MouseAdapter() {
|
||
|
@Override
|
||
|
public void mouseClicked(final MouseEvent e) {
|
||
|
doclose();
|
||
|
}
|
||
|
});
|
||
|
okbtn.setContentAreaFilled(false);
|
||
|
final JButton cancelbtn = new JButton();
|
||
|
cancelbtn.setIcon(new ImageIcon(getClass().getResource(
|
||
|
"/eric/GUI/icons/palette/Mcancel.png")));
|
||
|
cancelbtn.setBorder(BorderFactory.createEmptyBorder());
|
||
|
cancelbtn.addMouseListener(new MouseAdapter() {
|
||
|
@Override
|
||
|
public void mouseClicked(final MouseEvent e) {
|
||
|
T.setText(InitValue);
|
||
|
try {
|
||
|
OC.setExpression(T.getText(), OC.getConstruction());
|
||
|
OC.setSlider(false);
|
||
|
} catch (final Exception ex) {
|
||
|
}
|
||
|
ZC.recompute();
|
||
|
ZC.validate();
|
||
|
ZC.repaint();
|
||
|
T.requestFocus();
|
||
|
T.selectAll();
|
||
|
}
|
||
|
});
|
||
|
cancelbtn.setContentAreaFilled(false);
|
||
|
fixsize(p21, 120, 18);
|
||
|
fixsize(T, 118, 18);
|
||
|
p2.add(margin(5));
|
||
|
p2.add(p21);
|
||
|
p2.add(margin(10));
|
||
|
p2.add(T);
|
||
|
p2.add(margin(5));
|
||
|
p2.add(cancelbtn);
|
||
|
p2.add(margin(5));
|
||
|
p2.add(okbtn);
|
||
|
p2.add(margin(5));
|
||
|
|
||
|
fixsize(p2, 300, 30);
|
||
|
p2.setAlignmentX(0.5f);
|
||
|
p2.setOpaque(false);
|
||
|
p21.setOpaque(false);
|
||
|
p21.setFont(new java.awt.Font(Global.GlobalFont, 1, 12));
|
||
|
T.setFont(new java.awt.Font(Global.GlobalFont, 1, 12));
|
||
|
p21.setForeground(TxtColor);
|
||
|
T.setText(JProperties.Point_To_Comma(InitValue, OC.getConstruction(),
|
||
|
true));
|
||
|
|
||
|
content.add(p1);
|
||
|
content.add(p2);
|
||
|
|
||
|
T.addKeyListener(new KeyAdapter() {
|
||
|
@Override
|
||
|
public void keyPressed(final KeyEvent e) {
|
||
|
if ((e.getKeyCode() == KeyEvent.VK_ENTER)
|
||
|
|| (e.getKeyCode() == KeyEvent.VK_ESCAPE)) {
|
||
|
doclose();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void keyReleased(final KeyEvent e) {
|
||
|
final String e1 = JProperties.Comma_To_Point(T.getText(), OC
|
||
|
.getConstruction(), true);
|
||
|
final String myexp = (isValidExpression(e1)) ? e1 : "invalid";
|
||
|
try {
|
||
|
OC.setExpression(myexp, OC.getConstruction());
|
||
|
OC.setSlider(false);
|
||
|
} catch (final Exception ex) {
|
||
|
}
|
||
|
ZC.recompute();
|
||
|
ZC.validate();
|
||
|
ZC.repaint();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this.addWindowListener(new WindowAdapter() {
|
||
|
@Override
|
||
|
public void windowOpened(final WindowEvent e) {
|
||
|
T.requestFocus();
|
||
|
T.selectAll();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
pack();
|
||
|
final Point pt = zc.getLocationOnScreen();
|
||
|
pt.x += zc.getSize().width / 2 - this.getSize().width / 2;
|
||
|
pt.y += zc.getSize().height - this.getSize().height;
|
||
|
this.setLocation(pt);
|
||
|
this.setVisible(true);
|
||
|
}
|
||
|
|
||
|
public void doclose() {
|
||
|
final String e1 = JProperties.Comma_To_Point(T.getText(), OC
|
||
|
.getConstruction(), true);
|
||
|
final String myexp = (isValidExpression(e1)) ? e1 : InitValue;
|
||
|
|
||
|
try {
|
||
|
OC.setExpression(myexp, OC.getConstruction());
|
||
|
OC.setSlider(false);
|
||
|
} catch (final Exception ex) {
|
||
|
}
|
||
|
ZC.recompute();
|
||
|
ZC.validate();
|
||
|
ZC.repaint();
|
||
|
setVisible(false);
|
||
|
dispose();
|
||
|
}
|
||
|
|
||
|
}
|