import diamondedge.util.*;
import diamondedge.ado.*;
import diamondedge.vb.*;
import java.awt.*;
import java.awt.event.*;

public class Calculator extends AwtForm
             implements ActionListener
{
  static final int NUMBER = -1;
  static final int CLEAR = 0;
  static final int ADD = 1;
  static final int SUBTRACT = 2;
  static final int TOTAL = 3;
  static final int MEMORY = 4;
  static final String OFFMSG = "Power Off";
  private int nValue = 0;
  private int nTotal = 0;
  private int nMemory = 0;
  private int nAction = 0;
  private int nPrevious = 0;
  private boolean bOn = false;
  public Button cmdSubtract = new Button();
  public Button cmdClear = new Button();
  public Button cmdAdd = new Button();
  public TextField txtDisplay = new TextField();
  public Button cmdMRecall = new Button();
  public Button cmdMSubtract = new Button();
  public Button cmdTotal = new Button();
  public Button cmdMAdd = new Button();
  public Button cmdPower = new Button();
  public AwtLabel Label1 = new AwtLabel();
  public Button cmdNumber[] = new Button[10];

  public Calculator()
  {
  }

  public void initialize()
  {
    if( initialized )
      return;
    try
    {
      jbInit();
    }
    catch(Exception _e_) { Err.set(_e_,"Calculator"); }

    if( !unloaded )
      enableEvents();
    super.initialize();
    initialized = true;
  }

  private void jbInit() throws Exception
  {
    setLayout( null );
    setName( "Calculator" );
    setTitle( "Calculator" );
    //unsup LinkTopic = "Form2";
    //unsup PaletteMode = 1;
    setScaleHeight( 4335 );
    setScaleWidth( 3510 );
    setFormLocation( 217, 143 );
    setSize( new Dimension(234, 289) );
    setFormSize( 234, 289 );

    cmdPower.setName( "cmdPower" );
    add( cmdPower );
    cmdPower.setLabel( "ON/OFF" );
    //unsup cmdPower.TabIndex = 18;
    cmdPower.setVisible( true );
    cmdPower.setBounds( new Rectangle(144, 64, 73, 37) );

    cmdMSubtract.setName( "cmdMSubtract" );
    add( cmdMSubtract );
    cmdMSubtract.setLabel( "M-" );
    //unsup cmdMSubtract.TabIndex = 17;
    cmdMSubtract.setVisible( true );
    cmdMSubtract.setBounds( new Rectangle(184, 152, 33, 33) );

    cmdMAdd.setName( "cmdMAdd" );
    add( cmdMAdd );
    cmdMAdd.setLabel( "M+" );
    //unsup cmdMAdd.TabIndex = 16;
    cmdMAdd.setVisible( true );
    cmdMAdd.setBounds( new Rectangle(184, 192, 33, 33) );

    cmdMRecall.setName( "cmdMRecall" );
    add( cmdMRecall );
    cmdMRecall.setLabel( "M" );
    //unsup cmdMRecall.TabIndex = 15;
    cmdMRecall.setVisible( true );
    cmdMRecall.setBounds( new Rectangle(184, 112, 33, 33) );

    cmdTotal.setName( "cmdTotal" );
    add( cmdTotal );
    cmdTotal.setLabel( "=" );
    //unsup cmdTotal.TabIndex = 14;
    cmdTotal.setVisible( true );
    cmdTotal.setBounds( new Rectangle(144, 232, 73, 33) );

    cmdAdd.setName( "cmdAdd" );
    add( cmdAdd );
    cmdAdd.setLabel( "+" );
    //unsup cmdAdd.TabIndex = 13;
    cmdAdd.setVisible( true );
    cmdAdd.setBounds( new Rectangle(144, 192, 33, 33) );

    cmdSubtract.setName( "cmdSubtract" );
    add( cmdSubtract );
    cmdSubtract.setLabel( "-" );
    //unsup cmdSubtract.TabIndex = 12;
    cmdSubtract.setVisible( true );
    cmdSubtract.setBounds( new Rectangle(144, 152, 33, 33) );

    cmdClear.setName( "cmdClear" );
    add( cmdClear );
    cmdClear.setLabel( "C" );
    //unsup cmdClear.TabIndex = 11;
    cmdClear.setVisible( true );
    cmdClear.setBounds( new Rectangle(144, 112, 33, 33) );

    if( cmdNumber[0] == null )
      cmdNumber[0] = new Button();
    cmdNumber[0].setName( "cmdNumber[0]" );
    add( cmdNumber[0] );
    cmdNumber[0].setLabel( "0" );
    //unsup cmdNumber[0].TabIndex = 10;
    cmdNumber[0].setVisible( true );
    cmdNumber[0].setBounds( new Rectangle(56, 232, 33, 33) );

    if( cmdNumber[9] == null )
      cmdNumber[9] = new Button();
    cmdNumber[9].setName( "cmdNumber[9]" );
    add( cmdNumber[9] );
    cmdNumber[9].setLabel( "9" );
    //unsup cmdNumber[9].TabIndex = 9;
    cmdNumber[9].setVisible( true );
    cmdNumber[9].setBounds( new Rectangle(96, 112, 33, 33) );

    if( cmdNumber[8] == null )
      cmdNumber[8] = new Button();
    cmdNumber[8].setName( "cmdNumber[8]" );
    add( cmdNumber[8] );
    cmdNumber[8].setLabel( "8" );
    //unsup cmdNumber[8].TabIndex = 8;
    cmdNumber[8].setVisible( true );
    cmdNumber[8].setBounds( new Rectangle(56, 112, 33, 33) );

    if( cmdNumber[7] == null )
      cmdNumber[7] = new Button();
    cmdNumber[7].setName( "cmdNumber[7]" );
    add( cmdNumber[7] );
    cmdNumber[7].setLabel( "7" );
    //unsup cmdNumber[7].TabIndex = 7;
    cmdNumber[7].setVisible( true );
    cmdNumber[7].setBounds( new Rectangle(16, 112, 33, 33) );

    if( cmdNumber[6] == null )
      cmdNumber[6] = new Button();
    cmdNumber[6].setName( "cmdNumber[6]" );
    add( cmdNumber[6] );
    cmdNumber[6].setLabel( "6" );
    //unsup cmdNumber[6].TabIndex = 6;
    cmdNumber[6].setVisible( true );
    cmdNumber[6].setBounds( new Rectangle(96, 152, 33, 33) );

    if( cmdNumber[5] == null )
      cmdNumber[5] = new Button();
    cmdNumber[5].setName( "cmdNumber[5]" );
    add( cmdNumber[5] );
    cmdNumber[5].setLabel( "5" );
    //unsup cmdNumber[5].TabIndex = 5;
    cmdNumber[5].setVisible( true );
    cmdNumber[5].setBounds( new Rectangle(56, 152, 33, 33) );

    if( cmdNumber[4] == null )
      cmdNumber[4] = new Button();
    cmdNumber[4].setName( "cmdNumber[4]" );
    add( cmdNumber[4] );
    cmdNumber[4].setLabel( "4" );
    //unsup cmdNumber[4].TabIndex = 4;
    cmdNumber[4].setVisible( true );
    cmdNumber[4].setBounds( new Rectangle(16, 152, 33, 33) );

    if( cmdNumber[3] == null )
      cmdNumber[3] = new Button();
    cmdNumber[3].setName( "cmdNumber[3]" );
    add( cmdNumber[3] );
    cmdNumber[3].setLabel( "3" );
    //unsup cmdNumber[3].TabIndex = 3;
    cmdNumber[3].setVisible( true );
    cmdNumber[3].setBounds( new Rectangle(96, 192, 33, 33) );

    if( cmdNumber[2] == null )
      cmdNumber[2] = new Button();
    cmdNumber[2].setName( "cmdNumber[2]" );
    add( cmdNumber[2] );
    cmdNumber[2].setLabel( "2" );
    //unsup cmdNumber[2].TabIndex = 2;
    cmdNumber[2].setVisible( true );
    cmdNumber[2].setBounds( new Rectangle(56, 192, 33, 33) );

    if( cmdNumber[1] == null )
      cmdNumber[1] = new Button();
    cmdNumber[1].setName( "cmdNumber[1]" );
    add( cmdNumber[1] );
    cmdNumber[1].setLabel( "1" );
    //unsup cmdNumber[1].TabIndex = 1;
    cmdNumber[1].setVisible( true );
    cmdNumber[1].setBounds( new Rectangle(16, 192, 33, 33) );

    txtDisplay.setName( "txtDisplay" );
    add( txtDisplay );
    //unsup txtDisplay.Alignment = 1;
    //unsup txtDisplay.FontUnderline = false;
    //unsup txtDisplay.FontStrikethrough = false;
    txtDisplay.setForeground( new Color( 0x80 ) );
    txtDisplay.repaint();
    //unsup txtDisplay.TabIndex = 0;
    txtDisplay.setVisible( true );
    txtDisplay.setText( "" );
    txtDisplay.setBounds( new Rectangle(16, 64, 113, 37) );
    txtDisplay.setFont( new Font("SansSerif", Font.PLAIN, 19) );

    Label1.setName( "Label1" );
    add( Label1 );
    Label1.setAlignment( AwtLabel.CENTER );
    Label1.setText( "CALCULATOR APPLET" );
    //unsup Label1.FontUnderline = false;
    //unsup Label1.FontStrikethrough = false;
    //unsup Label1.TabIndex = 19;
    Label1.setVisible( true );
    Label1.setBounds( new Rectangle(16, 24, 201, 17) );
    Label1.setFont( new Font("SansSerif", Font.BOLD, 14) );
  }

  // methods

  public void Calculate()
  {
    try
    {
      nValue = (int)Math.rint( VB.val( txtDisplay.getText() ) );

      if( nAction == ADD )
      {
        nTotal = nTotal + nValue;
      }
      else if( nAction == SUBTRACT )
      {
        nTotal = nTotal - nValue;
      }
      else
      {
        nTotal = nValue;
      }

      txtDisplay.setText( String.valueOf( nTotal ) );
    }
    catch(Exception _e_) { Err.set(_e_,"Calculate"); }
  }

  public void KeyPressed( String szKey )
  {
    try
    {
      if( bOn )
      {
        if( nPrevious == NUMBER )
        {
          txtDisplay.setText( txtDisplay.getText() + szKey );
        }
        else
        {
          txtDisplay.setText( szKey );
        }

        nPrevious = NUMBER;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"KeyPressed"); }
  }

  public void Form_Load()
  {
    try
    {
      txtDisplay.setEditable( !true );
      txtDisplay.setText( "Power Off" );
    }
    catch(Exception _e_) { Err.set(_e_,"Form_Load"); }
  }

  // events

  private void cmdSubtract_Click()
  {
    try
    {
      if( bOn )
      {
        Calculate();
        nPrevious = SUBTRACT;
        nAction = SUBTRACT;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdSubtract_Click"); }
  }

  private void cmdClear_Click()
  {
    try
    {
      if( bOn )
      {
        nValue = 0;
        nTotal = 0;
        nMemory = 0;

        txtDisplay.setText( String.valueOf( nTotal ) );
        nPrevious = CLEAR;
        nAction = CLEAR;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdClear_Click"); }
  }

  private void cmdAdd_Click()
  {
    try
    {
      if( bOn )
      {
        Calculate();
        nPrevious = ADD;
        nAction = ADD;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdAdd_Click"); }
  }

  private void cmdMRecall_Click()
  {
    try
    {
      if( bOn )
      {
        txtDisplay.setText( String.valueOf( nMemory ) );
        nPrevious = MEMORY;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdMRecall_Click"); }
  }

  private void cmdMSubtract_Click()
  {
    try
    {
      if( bOn )
      {
        nMemory = (int)Math.rint( nMemory - VB.val( txtDisplay.getText() ) );
        nPrevious = MEMORY;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdMSubtract_Click"); }
  }

  private void cmdNumber_Click( int Index )
  {
    try
    {
      KeyPressed( String.valueOf( Index ) );
    }
    catch(Exception _e_) { Err.set(_e_,"cmdNumber_Click"); }
  }

  private void cmdTotal_Click()
  {
    try
    {
      if( bOn )
      {
        Calculate();
        nPrevious = TOTAL;
        nAction = TOTAL;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdTotal_Click"); }
  }

  private void cmdMAdd_Click()
  {
    try
    {
      if( bOn )
      {
        nMemory = (int)Math.rint( nMemory + VB.val( txtDisplay.getText() ) );
        nPrevious = MEMORY;
      }
    }
    catch(Exception _e_) { Err.set(_e_,"cmdMAdd_Click"); }
  }

  private void cmdPower_Click()
  {
    try
    {
      if( bOn )
      {
        txtDisplay.setText( OFFMSG );
        bOn = false;
      }
      else
      {
        txtDisplay.setText( " 0" );
        bOn = true;
      }

      nMemory = 0;
      nTotal = 0;
      nValue = 0;
    }
    catch(Exception _e_) { Err.set(_e_,"cmdPower_Click"); }
  }

  // implementation of Listener interfaces

  public void actionPerformed( ActionEvent e )
  {
    if( e.getSource() == cmdSubtract )
    {
      cmdSubtract_Click();
    }
    else if( e.getSource() == cmdClear )
    {
      cmdClear_Click();
    }
    else if( e.getSource() == cmdAdd )
    {
      cmdAdd_Click();
    }
    else if( e.getSource() == cmdMRecall )
    {
      cmdMRecall_Click();
    }
    else if( e.getSource() == cmdMSubtract )
    {
      cmdMSubtract_Click();
    }
    else if( e.getSource() == cmdNumber[0] )
    {
      cmdNumber_Click( 0);
    }
    else if( e.getSource() == cmdNumber[1] )
    {
      cmdNumber_Click( 1);
    }
    else if( e.getSource() == cmdNumber[2] )
    {
      cmdNumber_Click( 2);
    }
    else if( e.getSource() == cmdNumber[3] )
    {
      cmdNumber_Click( 3);
    }
    else if( e.getSource() == cmdNumber[4] )
    {
      cmdNumber_Click( 4);
    }
    else if( e.getSource() == cmdNumber[5] )
    {
      cmdNumber_Click( 5);
    }
    else if( e.getSource() == cmdNumber[6] )
    {
      cmdNumber_Click( 6);
    }
    else if( e.getSource() == cmdNumber[7] )
    {
      cmdNumber_Click( 7);
    }
    else if( e.getSource() == cmdNumber[8] )
    {
      cmdNumber_Click( 8);
    }
    else if( e.getSource() == cmdNumber[9] )
    {
      cmdNumber_Click( 9);
    }
    else if( e.getSource() == cmdTotal )
    {
      cmdTotal_Click();
    }
    else if( e.getSource() == cmdMAdd )
    {
      cmdMAdd_Click();
    }
    else if( e.getSource() == cmdPower )
    {
      cmdPower_Click();
    }
  }

  public void enableEvents()
  {
    cmdSubtract.addActionListener( this );
    cmdClear.addActionListener( this );
    cmdAdd.addActionListener( this );
    cmdMRecall.addActionListener( this );
    cmdMSubtract.addActionListener( this );
    cmdNumber[0].addActionListener( this );
    cmdNumber[1].addActionListener( this );
    cmdNumber[2].addActionListener( this );
    cmdNumber[3].addActionListener( this );
    cmdNumber[4].addActionListener( this );
    cmdNumber[5].addActionListener( this );
    cmdNumber[6].addActionListener( this );
    cmdNumber[7].addActionListener( this );
    cmdNumber[8].addActionListener( this );
    cmdNumber[9].addActionListener( this );
    cmdTotal.addActionListener( this );
    cmdMAdd.addActionListener( this );
    cmdPower.addActionListener( this );
  }
}