/* GeoGebra - Dynamic Mathematics for Everyone http://www.geogebra.org This file is part of GeoGebra. 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. */ package org.geogebra.desktop.gui.dialog; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; import javax.swing.JRadioButton; import org.geogebra.common.gui.InputHandler; import org.geogebra.common.gui.view.algebra.DialogType; import org.geogebra.common.util.AsyncOperation; import org.geogebra.desktop.main.AppD; /** * Input Dialog for a GeoAngle object with additional option to choose between * "clock wise" and "counter clockwise" * * @author hohenwarter */ public class AngleInputDialogD extends InputDialogD { protected JRadioButton rbCounterClockWise, rbClockWise; /** * Input Dialog for a GeoAngle object. */ public AngleInputDialogD(AppD app, String message, String title, String initString, boolean autoComplete, InputHandler handler, boolean modal) { super(app.getFrame(), modal, app.getLocalization()); this.app = app; setInputHandler(handler); this.setInitString(initString); // create radio buttons for "clockwise" and "counter clockwise" ButtonGroup bg = new ButtonGroup(); rbCounterClockWise = new JRadioButton(loc.getMenu("counterClockwise")); rbClockWise = new JRadioButton(loc.getMenu("clockwise")); bg.add(rbCounterClockWise); bg.add(rbClockWise); rbCounterClockWise.setSelected(true); JPanel rbPanel = new JPanel(new BorderLayout()); rbPanel.add(rbCounterClockWise, BorderLayout.NORTH); rbPanel.add(rbClockWise, BorderLayout.SOUTH); rbPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 0)); createGUI(title, message, autoComplete, DEFAULT_COLUMNS, 1, true, false, false, false, DialogType.GeoGebraEditor); JPanel centerPanel = new JPanel(new BorderLayout()); centerPanel.add(inputPanel, BorderLayout.CENTER); centerPanel.add(rbPanel, BorderLayout.SOUTH); wrappedDialog.getContentPane().add(centerPanel, BorderLayout.CENTER); centerOnScreen(); app.setComponentOrientation(wrappedDialog); } public boolean isCounterClockWise() { return rbCounterClockWise.isSelected(); } @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); try { if (source == btOK || source == inputPanel.getTextComponent()) { inputText = inputPanel.getText(); // negative orientation ? if (rbClockWise.isSelected()) { inputText = "-(" + inputText + ")"; } getInputHandler().processInput(inputText, this, new AsyncOperation<Boolean>() { @Override public void callback(Boolean ok) { setVisible(!ok); } }); } else if (source == btCancel) { setVisible(false); } } catch (Exception ex) { // do nothing on uninitializedValue setVisible(false); } } @Override public void handleDialogVisibilityChange(boolean isVisible) { // nothing to do } }