From 33777ee43fe5c43c53643241aba2d7673a1bc4ef Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 1 Oct 2004 01:19:12 +0000 Subject: [PATCH] Initial import. --- .classpath | 6 + .cvsignore | 3 + .eclipseme | 2 + .project | 23 ++ TipME.jad | 10 + build.xml | 49 +++ cmd.bat | 2 + res/tipme.png | Bin 0 -> 229 bytes src/net/thauvin/j2me/tipme/MainScreen.java | 95 ++++++ src/net/thauvin/j2me/tipme/ResultScreen.java | 93 +++++ src/net/thauvin/j2me/tipme/TipME.java | 336 +++++++++++++++++++ tipme.gif | Bin 0 -> 22047 bytes tipme.wml | 16 + 13 files changed, 635 insertions(+) create mode 100755 .classpath create mode 100755 .cvsignore create mode 100755 .eclipseme create mode 100755 .project create mode 100755 TipME.jad create mode 100755 build.xml create mode 100755 cmd.bat create mode 100755 res/tipme.png create mode 100755 src/net/thauvin/j2me/tipme/MainScreen.java create mode 100755 src/net/thauvin/j2me/tipme/ResultScreen.java create mode 100755 src/net/thauvin/j2me/tipme/TipME.java create mode 100755 tipme.gif create mode 100755 tipme.wml diff --git a/.classpath b/.classpath new file mode 100755 index 0000000..f7b02b6 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.cvsignore b/.cvsignore new file mode 100755 index 0000000..6327664 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,3 @@ +build +verified +deployed \ No newline at end of file diff --git a/.eclipseme b/.eclipseme new file mode 100755 index 0000000..9a667a8 --- /dev/null +++ b/.eclipseme @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.project b/.project new file mode 100755 index 0000000..1d9a6a4 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + TipME + + + + + + org.eclipse.jdt.core.javabuilder + + + + + eclipseme.core.preverifier + + + + + + org.eclipse.jdt.core.javanature + eclipseme.core.nature + + diff --git a/TipME.jad b/TipME.jad new file mode 100755 index 0000000..2f4bdc6 --- /dev/null +++ b/TipME.jad @@ -0,0 +1,10 @@ +MIDlet-1: TipME,/tipme.png,net.thauvin.j2me.tipme.TipME +MIDlet-Jar-URL: TipME.jar +MIDlet-Icon: /tipme.png +MicroEdition-Configuration: CLDC-1.0 +MIDlet-Version: 0.1.0 +MIDlet-Vendor: Erik C. Thauvin +MIDlet-Name: TipME +MIDlet-Description: TipME +MIDlet-Info-URL: http://www.thauvin.net/erik/j2me/ +MicroEdition-Profile: MIDP-2.0 diff --git a/build.xml b/build.xml new file mode 100755 index 0000000..b0bf93a --- /dev/null +++ b/build.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmd.bat b/cmd.bat new file mode 100755 index 0000000..1b04a7b --- /dev/null +++ b/cmd.bat @@ -0,0 +1,2 @@ +@echo off +cmd.exe \ No newline at end of file diff --git a/res/tipme.png b/res/tipme.png new file mode 100755 index 0000000000000000000000000000000000000000..e2be0d50047754f34ad0ac909ef720e4c9ec5d53 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=-3?y@QpIZW?7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~uBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaffh zPlzkS%(Vai|ED(MainScreen class implements a form used to gather the data needed to calculate the tip. + * + * @author Erik C. Thauvin + * @version $Revision$, $Date$ + * + * @created September 16, 2004 + * @since 1.0 + */ +public class MainScreen extends Form +{ + /** + * The tip rate popup. + */ + protected /* final */ ChoiceGroup tipPopup; + + /** + * The tax total field. + */ + protected /* final */ TextField taxFld; + + /** + * The bill total field. + */ + protected /* final */ TextField totalFld; + + /** + * Creates a new MainScreen object. + * + * @param midlet The MIDlet instance. + */ + public MainScreen(TipME midlet) + { + super(midlet.appName); + + taxFld = new TextField("Tax Amount: ", midlet.taxAmount, 10, TextField.DECIMAL); + totalFld = new TextField("Bill Amount: ", midlet.totalAmount, 10, TextField.DECIMAL); + tipPopup = + new ChoiceGroup("Tip %:", ChoiceGroup.POPUP, new String[] { "5", "10", "15", "20", "25", "30" }, null); + tipPopup.setSelectedIndex(2, true); + append(taxFld); + append(totalFld); + append(tipPopup); + + addCommand(midlet.aboutCommand); + addCommand(midlet.clearCommand); + addCommand(midlet.exitCommand); + addCommand(midlet.calcCommand); + + setCommandListener(midlet); + } +} diff --git a/src/net/thauvin/j2me/tipme/ResultScreen.java b/src/net/thauvin/j2me/tipme/ResultScreen.java new file mode 100755 index 0000000..05a6afd --- /dev/null +++ b/src/net/thauvin/j2me/tipme/ResultScreen.java @@ -0,0 +1,93 @@ +/* + * @(#)ResultScreen.java + * + * Copyright (c) 2004, Erik C. Thauvin (http://www.thauvin.net/erik/) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the authors nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + * + */ +package net.thauvin.j2me.tipme; + +import javax.microedition.lcdui.Form; +import javax.microedition.lcdui.StringItem; + + +/** + * The ResultScreen class inplements the form used to display the results. + * + * @author Erik C. Thauvin + * @version $Revision$, $Date$ + * + * @created September 16, 2004 + * @since 1.0 + */ +public class ResultScreen extends Form +{ + /** + * The subtotal item. + */ + protected /* final */ StringItem subtotalItem = new StringItem("Subtotal:", "\n"); + + /** + * The tax item. + */ + protected /* final */ StringItem taxItem = new StringItem("Tax:", "\n"); + + /** + * The tip item. + */ + protected /* final */ StringItem tipItem = new StringItem("Tip:", "\n"); + + /** + * The total item. + */ + protected /* final */ StringItem totalItem = new StringItem("Total:", ""); + + /** + * Creates a new ResultForm object. + * + * @param midlet The MIDlet instance. + */ + public ResultScreen(TipME midlet) + { + super(midlet.appName); + + append(subtotalItem); + append(taxItem); + append(tipItem); + append(totalItem); + + addCommand(midlet.exitCommand); + addCommand(midlet.backCommand); + + setCommandListener(midlet); + } +} diff --git a/src/net/thauvin/j2me/tipme/TipME.java b/src/net/thauvin/j2me/tipme/TipME.java new file mode 100755 index 0000000..f43a695 --- /dev/null +++ b/src/net/thauvin/j2me/tipme/TipME.java @@ -0,0 +1,336 @@ +/* + * @(#)TipME.java + * + * Copyright (c) 2004, Erik C. Thauvin (http://www.thauvin.net/erik/) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the authors nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + * + */ +package net.thauvin.j2me.tipme; + +import javax.microedition.lcdui.*; +import javax.microedition.midlet.MIDlet; +import javax.microedition.midlet.MIDletStateChangeException; + + +/** + * The TipME class implements a simple Tip calculator. + * + * @author Erik C. Thauvin + * @version $Revision$, $Date$ + * + * @created September 16, 2004 + * @since 1.0 + */ +public class TipME extends MIDlet implements CommandListener +{ + /** + * The application name. + */ + protected /* final */ String appName = "TipME"; + + /** + * The application version. + */ + protected /* final */ String appVersion = "0.1"; + + /** + * The About command. + */ + protected /* final */ Command aboutCommand = new Command("About", Command.SCREEN, 4); + + /** + * The Back command. + */ + protected /* final */ Command backCommand = new Command("Back", Command.BACK, 2); + + /** + * The Calculate command. + */ + protected /* final */ Command calcCommand = new Command("Calculate", Command.SCREEN, 2); + + /** + * The Clear command. + */ + protected /* final */ Command clearCommand = new Command("Clear", Command.SCREEN, 3); + + /** + * The Exit command. + */ + protected /* final */ Command exitCommand = new Command("Exit", Command.EXIT, 2); + + /** + * The tax amount. + */ + protected String taxAmount; + + /** + * The tip rate. + */ + protected String tipRate; + + /** + * The total amount. + */ + protected String totalAmount; + private Display display; + + /** + * DOCUMENT ME! + */ + private /* final */ MainScreen mainScreen; + + /** + * DOCUMENT ME! + */ + private /* final */ ResultScreen resultScreen; + private int billTotal = 0; + private int subTotal = 0; + private int taxTotal = 0; + private int tipTotal = 0; + + /** + * Creates a new TipME object. + */ + public TipME() + { + super(); + + mainScreen = new MainScreen(this); + resultScreen = new ResultScreen(this); + } + + /** + * Performs a command. + * + * @param c The command action. + * @param d The diplayable screen. + */ + public void commandAction(Command c, Displayable d) + { + if (c == exitCommand) + { + exit(); + } + else if (c == clearCommand) + { + mainScreen.taxFld.setString(""); + mainScreen.totalFld.setString(""); + display.setCurrentItem(mainScreen.taxFld); + } + else if (c == aboutCommand) + { + /* final */ Alert about = + new Alert("About " + appName, + appName + ' ' + appVersion + "\nCopyright 2004\nErik C. Thauvin\nerik@thauvin.net", null, + AlertType.INFO); + about.setTimeout(Alert.FOREVER); + display.setCurrent(about, d); + } + else if (c == calcCommand) + { + totalAmount = mainScreen.totalFld.getString(); + taxAmount = mainScreen.taxFld.getString(); + tipRate = mainScreen.tipPopup.getString(mainScreen.tipPopup.getSelectedIndex()); + + if ((totalAmount.length() == 0) || (totalAmount.charAt(0) == '0')) + { + error("Please specify a valid bill amount.", d); + } + else + { + calcTip(); + resultScreen.subtotalItem.setText(getSubTotalAmount() + '\n'); + resultScreen.taxItem.setText(getTaxAmount() + '\n'); + resultScreen.tipItem.setText(getTipAmount() + " (" + tipRate + "%)\n"); + resultScreen.totalItem.setText(getBillAmount()); + display.setCurrent(resultScreen); + display.setCurrentItem(resultScreen.tipItem); + } + } + else if (c == backCommand) + { + display.setCurrent(mainScreen); + display.setCurrentItem(mainScreen.tipPopup); + } + } + + /** + * Returns to total bill amount after tip. + * + * @return The bill amount. + */ + protected String getBillAmount() + { + return parseStr(billTotal); + } + + /** + * Returns the subtotal amount after calculation. + * + * @return The subtotal amount. + */ + protected String getSubTotalAmount() + { + return parseStr(subTotal); + } + + /** + * Returns the tax amount after calculation. + * + * @return the tax amount. + */ + protected String getTaxAmount() + { + if (taxTotal > 0) + { + return parseStr(taxTotal); + } + + return "0.00"; + } + + /** + * Returns the tip amount after calculation. + * + * @return The tip amount. + */ + protected String getTipAmount() + { + return parseStr(tipTotal); + } + + /** + * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) + */ + protected void destroyApp(boolean b) + throws MIDletStateChangeException + { + notifyDestroyed(); + } + + /** + * @see javax.microedition.midlet.MIDlet#pauseApp() + */ + protected void pauseApp() + { + ; + } + + /** + * @see javax.microedition.midlet.MIDlet#startApp() + */ + protected void startApp() + throws MIDletStateChangeException + { + display = Display.getDisplay(this); + display.setCurrent(mainScreen); + } + + // Calulates the tip. + private void calcTip() + { + taxTotal = parseInt(taxAmount); + subTotal = parseInt(totalAmount) - taxTotal; + tipTotal = (subTotal * Integer.parseInt(tipRate)) / 100; + billTotal = subTotal + tipTotal + taxTotal; + + if ((billTotal % 100) < 50) + { + while ((billTotal % 100) != 0) + { + tipTotal--; + billTotal = subTotal + tipTotal + taxTotal; + } + } + else + { + while ((billTotal % 100) != 0) + { + tipTotal++; + billTotal = subTotal + tipTotal + taxTotal; + } + } + } + + // Displays an error dialog. + private void error(String msg, Displayable d) + { + /* final */ Alert error = new Alert("Error", msg, null, AlertType.ERROR); + error.setTimeout(Alert.FOREVER); + display.setCurrent(error, d); + } + + // Exits the application. + private void exit() + { + try + { + destroyApp(false); + } + catch (MIDletStateChangeException e) + { + ; // Do nothing + } + } + + // Parses a given string to an int, the decimal point is removed. + private int parseInt(String s) + { + /* final */ int dec = s.lastIndexOf('.'); + int len = s.length(); + + if (dec == -1) + { + return Integer.parseInt(s + "00"); + } + else if (dec == (len - 1)) + { + return Integer.parseInt(s.substring(0, dec) + "00"); + } + else if (dec == (len - 2)) + { + return Integer.parseInt(s.substring(0, dec) + s.substring(dec + 1) + '0'); + } + else + { + return Integer.parseInt(s.substring(0, dec) + s.substring(dec + 1, dec + 3)); + } + } + + // Parse the given into to a string, the decimal point is added. + private String parseStr(int i) + { + /* final */ String s = String.valueOf(i); + + return s.substring(0, s.length() - 2) + '.' + s.substring(s.length() - 2); + } +} diff --git a/tipme.gif b/tipme.gif new file mode 100755 index 0000000000000000000000000000000000000000..97cde43aa234918b8c06afc06a8d9aa5fe405397 GIT binary patch literal 22047 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 fod!kkou9QV+^{?K*>?Vh=C6g1)_M>Ku + + + + +

+ TipME 0.1 (5Kb)
+ Download Jad
+ Download Jar
+

+
+