package org.geogebra.desktop.gui.dialog; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowEvent; import javax.swing.text.JTextComponent; import org.geogebra.common.euclidian.EuclidianController; import org.geogebra.common.gui.InputHandler; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoPolygon; import org.geogebra.common.util.AsyncOperation; import org.geogebra.common.util.lang.Unicode; import org.geogebra.desktop.gui.GuiManagerD; import org.geogebra.desktop.main.AppD; public abstract class InputDialogRotateD extends AngleInputDialogD implements KeyListener { protected GeoPolygon[] polys; protected GeoElement[] selGeos; protected EuclidianController ec; // we need to know which controller called // for rotate private static String defaultRotateAngle = Unicode.FORTY_FIVE_DEGREES; public InputDialogRotateD(AppD app, String title, InputHandler handler, GeoPolygon[] polys, GeoElement[] selGeos, EuclidianController ec) { super(app, app.getLocalization().getMenu("Angle"), title, defaultRotateAngle, false, handler, false); this.polys = polys; this.selGeos = selGeos; this.ec = ec; this.inputPanel.getTextComponent().addKeyListener(this); } /** * Handles button clicks for dialog. */ @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); try { if (source == btOK || source == inputPanel.getTextComponent()) { processInput(new AsyncOperation<String>() { @Override public void callback(String obj) { setVisibleForTools(obj == null); if (obj != null) { defaultRotateAngle = obj; } } }); } else if (source == btApply) { processInput(new AsyncOperation<String>() { @Override public void callback(String obj) { // TODO Auto-generated method stub } }); } else if (source == btCancel) { setVisibleForTools(false); } } catch (Exception ex) { // do nothing on uninitializedValue setVisibleForTools(false); } } protected abstract void processInput(AsyncOperation<String> op); @Override public void windowGainedFocus(WindowEvent arg0) { if (!wrappedDialog.isModal()) { app.setCurrentSelectionListener(null); } ((GuiManagerD) app.getGuiManager()).setCurrentTextfield(this, true); } @Override public void keyTyped(KeyEvent e) { // only handle release } @Override public void keyPressed(KeyEvent e) { // only handle release } /* * auto-insert degree symbol when appropriate */ @Override public void keyReleased(KeyEvent e) { // return unless digit typed if (!Character.isDigit(e.getKeyChar())) { return; } JTextComponent tc = inputPanel.getTextComponent(); String text = tc.getText(); // if text already contains degree symbol or variable for (int i = 0; i < text.length(); i++) { if (!Character.isDigit(text.charAt(i))) { return; } } int caretPos = tc.getCaretPosition(); tc.setText(tc.getText() + Unicode.DEGREE); tc.setCaretPosition(caretPos); } }