blob: 6f81ba65b5fd62e3ac5795794f322149433b5cea [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.ofbiz.pos.screen;
import java.util.Locale;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.pos.PosTransaction;
import net.xoetrope.swing.XButton;
import net.xoetrope.swing.XDialog;
import net.xoetrope.swing.XEdit;
import net.xoetrope.xui.PageSupport;
import net.xoetrope.xui.XPage;
import net.xoetrope.xui.events.XEventHelper;
@SuppressWarnings("serial")
public class NumericKeypad extends XPage
{
public static final String module = NumericKeypad.class.getName();
XEdit m_edit = null;
XDialog m_dialog = null;
PosScreen m_pos = null;
PageSupport m_pageSupport = null;
boolean m_minus = false;
boolean m_percent = false;
String originalText;
public NumericKeypad(PosScreen pos) {
m_pos = pos;
m_pageSupport = pageMgr.loadPage(m_pos.getScreenLocation() + "/dialog/numerickeypad");
m_dialog = (XDialog) m_pageSupport;
m_edit = (XEdit) m_pageSupport.findComponent("numeric_input");
m_edit.setText("");
m_dialog.setCaption(UtilProperties.getMessage(PosTransaction.resource, "PosVirtualNumPadTitle", Locale.getDefault()));
}
public String openDlg() {
setupEvents();
originalText = getText();
m_dialog.pack();
m_dialog.showDialog(this);
return m_edit.getText();
}
// call before openDlg
public void setText(String text) {
clear();
m_edit.setText(text);
}
public String getText() {
return m_edit.getText();
}
//call before openDlg
public void setMinus(boolean minus) {
m_minus = minus;
}
public boolean getMinus() {
return m_minus;
}
//call before openDlg
public void setPercent(boolean percent) {
if (percent) {
disableButton("menuCancel");
}
m_percent = percent;
}
public boolean getPercent() {
return m_percent;
}
private void disableButton(String button) {
XButton xbutton = (XButton) m_dialog.findComponent(button);
xbutton.setVisible(false);
}
private void setupEvents() {
XButton button = (XButton) m_dialog.findComponent("numOne");
XEventHelper.addMouseHandler(this, button, "triggerOne");
button = (XButton) m_dialog.findComponent("numTwo");
XEventHelper.addMouseHandler(this, button, "triggerTwo");
button = (XButton) m_dialog.findComponent("numThree");
XEventHelper.addMouseHandler(this, button, "triggerThree");
button = (XButton) m_dialog.findComponent("numFour");
XEventHelper.addMouseHandler(this, button, "triggerFour");
button = (XButton) m_dialog.findComponent("numFive");
XEventHelper.addMouseHandler(this, button, "triggerFive");
button = (XButton) m_dialog.findComponent("numSix");
XEventHelper.addMouseHandler(this, button, "triggerSix");
button = (XButton) m_dialog.findComponent("numSeven");
XEventHelper.addMouseHandler(this, button, "triggerSeven");
button = (XButton) m_dialog.findComponent("numEight");
XEventHelper.addMouseHandler(this, button, "triggerEight");
button = (XButton) m_dialog.findComponent("numNine");
XEventHelper.addMouseHandler(this, button, "triggerNine");
button = (XButton) m_dialog.findComponent("numZero");
XEventHelper.addMouseHandler(this, button, "triggerZero");
button = (XButton) m_dialog.findComponent("numDZero");
XEventHelper.addMouseHandler(this, button, "triggerDoubleZero");
button = (XButton) m_dialog.findComponent("menuClear");
XEventHelper.addMouseHandler(this, button, "triggerClear");
button = (XButton) m_dialog.findComponent("menuEnter");
XEventHelper.addMouseHandler(this, button, "triggerEnter");
button = (XButton) m_dialog.findComponent("menuCancel");
XEventHelper.addMouseHandler(this, button, "triggerCancel");
if (getMinus()) {
button = (XButton) m_dialog.findComponent("numMinus");
XEventHelper.addMouseHandler(this, button, "triggerMinus");
} else {
disableButton("numMinus");
}
if (getPercent()) {
button = (XButton) m_dialog.findComponent("numPercent");
XEventHelper.addMouseHandler(this, button, "triggerMinus");
} else {
disableButton("numPercent");
}
return;
}
public void triggerOne()
{
append('1');
}
public void triggerTwo()
{
append('2');
}
public void triggerThree()
{
append('3');
}
public void triggerFour()
{
append('4');
}
public void triggerFive()
{
append('5');
}
public void triggerSix()
{
append('6');
}
public void triggerSeven()
{
append('7');
}
public void triggerEight()
{
append('8');
}
public void triggerNine()
{
append('9');
}
public void triggerZero()
{
append('0');
}
public void triggerDoubleZero()
{
append("00");
}
public void triggerClear()
{
clear();
}
public void triggerEnter()
{
close();
}
public void triggerCancel()
{
cancel();
}
public void triggerMinus()
{
prependUnique('-');
}
public void triggerPercent()
{
prependUnique('%');
}
private synchronized void prependUnique(char c) {
if (wasMouseClicked()) {
String text = "";
try {
text = m_edit.getText();
} catch (NullPointerException e) {
// getText throws exception if no text
text = "";
} finally {
text=c+text;
}
if (countChars(text, c) > 1) {
text = stripChars(text, c);
}
m_edit.setText(text);
m_dialog.repaint();
return;
}
}
private int countChars(String string, char c) {
int count = 0;
for (int i=0; i<string.length(); i++) {
if (string.charAt(i) == c) {
count++;
}
}
return count;
}
private String stripChars(String string, char c) {
StringBuffer buf = new StringBuffer();
for (int i=0; i<string.length(); i++) {
char current = string.charAt(i);
if (current != c) {
buf.append(current);
}
}
return buf.toString();
}
private synchronized void close() {
if (wasMouseClicked()) {
m_dialog.closeDlg();
return;
}
}
private synchronized void clear() {
if (wasMouseClicked()) {
String text = "";
m_edit.setText(text);
m_dialog.repaint();
return;
}
}
private synchronized void append(char c) {
if (wasMouseClicked()) {
String text = "";
try {
text = m_edit.getText();
} catch (NullPointerException e) {
// getText throws exception if no text
text = "";
} finally {
m_edit.setText(text + c);
}
m_dialog.repaint();
//update the screen?
return;
}
}
private synchronized void cancel() {
if (wasMouseClicked()) {
this.setText(originalText);
m_dialog.closeDlg();
return;
}
}
private synchronized void append(String c) {
if (wasMouseClicked()) {
String text = "";
try {
text = m_edit.getText();
} catch (NullPointerException e) {
// getText throws exception if no text
text = "";
} finally {
m_edit.setText(text + c);
}
m_dialog.repaint();
//update the screen?
return;
}
}
}