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
    {
      setLayout( null );
      setName( "Calculator" );
      setTitle( "Calculator" );
      //unsup LinkTopic = "Form2";
      //unsup PaletteMode = 1;
      setScaleHeight( 4335 );
      setScaleWidth( 3510 );
      setFormLocation( 217, 143 );
      setSize( 234, 289 );
      setFormSize( 234, 289 );

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

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

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

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

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

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

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

      cmdClear.setName( "cmdClear" );
      add( cmdClear );
      cmdClear.setLabel( "C" );
      //unsup cmdClear.TabIndex = 11;
      cmdClear.setVisible( true );
      cmdClear.setLocation( 144, 112 );
      cmdClear.setSize( 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].setLocation( 56, 232 );
      cmdNumber[0].setSize( 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].setLocation( 96, 112 );
      cmdNumber[9].setSize( 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].setLocation( 56, 112 );
      cmdNumber[8].setSize( 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].setLocation( 16, 112 );
      cmdNumber[7].setSize( 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].setLocation( 96, 152 );
      cmdNumber[6].setSize( 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].setLocation( 56, 152 );
      cmdNumber[5].setSize( 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].setLocation( 16, 152 );
      cmdNumber[4].setSize( 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].setLocation( 96, 192 );
      cmdNumber[3].setSize( 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].setLocation( 56, 192 );
      cmdNumber[2].setSize( 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].setLocation( 16, 192 );
      cmdNumber[1].setSize( 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.setLocation( 16, 64 );
      txtDisplay.setSize( 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.setLocation( 16, 24 );
      Label1.setSize( 201, 17 );
      Label1.setFont( new Font("SansSerif", Font.BOLD, 14) );
    }
    catch(Exception _e_) { Err.set(_e_,"Calculator"); }

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

  // 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 );
  }
}