Package com.google.gwt.sample.stockwatcher.StockWatcher.client

Source Code of com.google.gwt.sample.stockwatcher.StockWatcher.client.StockWatcher

package com.google.gwt.sample.stockwatcher.StockWatcher.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;

import java.util.ArrayList;
import com.google.gwt.user.client.Timer;

import com.google.gwt.user.client.Random;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;
import java.util.Date;
import com.google.gwt.user.client.ui.Image;


/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class StockWatcher implements EntryPoint {
  private VerticalPanel mainPanel;
  private FlexTable stocksFlexTable;
  private HorizontalPanel addPanel;
  private TextBox newSymbolTextBox;
  private Button addButton;
  private Label lastUpdatedLabel;
  private ArrayList <String> stocks = new ArrayList<String>()
  private static final int REFRESH_INTERVAL = 5000;
  private Image image;
  private Label lblStockWatcher;
 
  public void onModuleLoad() {
    RootPanel rootPanel = RootPanel.get();
    {
      mainPanel = new VerticalPanel();
      rootPanel.add(mainPanel, 5, 5);
      mainPanel.setSize("440px", "290px");
      {
        image = new Image("images/googlecode.png");
        mainPanel.add(image);
      }
      {
        lblStockWatcher = new Label("Stock Watcher");
        lblStockWatcher.setStyleName("gwt-Label-StockWatcher");
       
        mainPanel.add(lblStockWatcher);
      }
      {
        stocksFlexTable = new FlexTable();
        //Add these lines
        stocksFlexTable.setText(0, 0, "Symbol");
        stocksFlexTable.setText(0, 1, "Price");
        stocksFlexTable.setText(0, 2, "Change");
        stocksFlexTable.setText(0, 3, "Remove");
       
        // Add styles to elements in the stock list table.
        stocksFlexTable.setCellPadding(6);
          stocksFlexTable.getRowFormatter().addStyleName(0, "watchListHeader");
          stocksFlexTable.addStyleName("watchList");
          stocksFlexTable.getCellFormatter().addStyleName(0, 1, "watchListNumericColumn");
          stocksFlexTable.getCellFormatter().addStyleName(0, 2, "watchListNumericColumn");
          stocksFlexTable.getCellFormatter().addStyleName(0, 3, "watchListRemoveColumn");
         
        mainPanel.add(stocksFlexTable);
      }
      {
        addPanel = new HorizontalPanel();
        addPanel.addStyleName("addPanel");
        mainPanel.add(addPanel);
        {
          newSymbolTextBox = new TextBox();
          newSymbolTextBox.addKeyPressHandler(new KeyPressHandler() {
            public void onKeyPress(KeyPressEvent event) {
              if (event.getCharCode() == KeyCodes.KEY_ENTER){
                addStock();
              }
            }
          });
          newSymbolTextBox.setFocus(true);
          addPanel.add(newSymbolTextBox);
        }
        {
          addButton = new Button("New button");
          addButton.setStyleName("gwt-Button-Add");
          addButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
              addStock();
            }
          });
          addButton.setText("Add");
          addPanel.add(addButton);
        }
      }
      {
        lastUpdatedLabel = new Label("New label");
        mainPanel.add(lastUpdatedLabel);
      }
    }
   
    // setup timer to refresh list automatically
    Timer refreshTimer = new Timer() {
      public void run()
      {
        refreshWatchList();
      }
    };
    refreshTimer.scheduleRepeating(REFRESH_INTERVAL);

   
  }
  private void refreshWatchList() {
    final double MAX_PRICE = 100.0; // $100.00
    final double MAX_PRICE_CHANGE = 0.02; // +/- 2%

    StockPrice[] prices = new StockPrice[stocks.size()];
    for (int i = 0; i < stocks.size(); i++)
    {
      double price = Random.nextDouble() * MAX_PRICE;
      double change = price * MAX_PRICE_CHANGE
          * (Random.nextDouble() * 2.0 - 1.0);

      prices[i] = new StockPrice((String) stocks.get(i), price, change);
    }

    updateTable(prices);

   
  }
  private void updateTable(StockPrice[] prices)
  {
    if (prices == null)
      return;
   
    for (int i = 0; i < prices.length; i++)
    {
      updateTable(prices[i]);
    }

    // change the last update timestamp
    lastUpdatedLabel.setText("Last update : "
        + DateTimeFormat.getMediumDateTimeFormat().format(new Date()));
  }

  private void updateTable(StockPrice stockPrice) {
    // make sure the stock is still in our watch list
    if (!stocks.contains(stockPrice.getSymbol()))
    {
      return;
    }

    int row = stocks.indexOf(stockPrice.getSymbol()) + 1;
   
      // Format the data in the Price and Change fields.
      String priceText = NumberFormat.getFormat("#,##0.00").format(stockPrice.getPrice());
      NumberFormat changeFormat = NumberFormat.getFormat("+#,##0.00;-#,##0.00");
      String changeText = changeFormat.format(stockPrice.getChange());
      String changePercentText = changeFormat.format(stockPrice.getChangePercent());

      // Populate the Price and Change fields with new data.
      stocksFlexTable.setText(row, 1, priceText);
      //Use the line of code without styling
      //stocksFlexTable.setText(row, 2, changeText + " (" + changePercentText + "%)");
     
      //Use this with styling
      Label changeWidget = (Label)stocksFlexTable.getWidget(row, 2);
      changeWidget.setText(changeText + " (" + changePercentText + "%)");
     
   // Change the color of text in the Change field based on its value.
      String changeStyleName = "noChange";
      if (stockPrice.getChangePercent() < -0.1f) {
        changeStyleName = "negativeChange";
      }
      else if (stockPrice.getChangePercent() > 0.1f) {
        changeStyleName = "positiveChange";
      }

      changeWidget.setStyleName(changeStyleName);
  }
  private void addStock() {
    final String symbol = newSymbolTextBox.getText().toUpperCase().trim();
      newSymbolTextBox.setFocus(true);

      // Stock code must be between 1 and 10 chars that are numbers, letters, or dots.
      if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) {
        Window.alert("'" + symbol + "' is not a valid symbol.");
        newSymbolTextBox.selectAll();
        return;
      }

      newSymbolTextBox.setText("");

   // don't add the stock if it's already in the watch list
      if (stocks.contains(symbol))
          return;

      // add the stock to the list
      int row = stocksFlexTable.getRowCount();
      stocks.add(symbol);
      stocksFlexTable.setText(row, 0, symbol);
      stocksFlexTable.setWidget(row, 2, new Label());
      stocksFlexTable.getCellFormatter().addStyleName(row, 1, "watchListNumericColumn");
      stocksFlexTable.getCellFormatter().addStyleName(row, 2, "watchListNumericColumn");
      stocksFlexTable.getCellFormatter().addStyleName(row, 3, "watchListRemoveColumn");
     
      // add button to remove this stock from the list
      Button removeStock = new Button("x");
      removeStock.addStyleDependentName("remove");
      removeStock.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {         
          int removedIndex = stocks.indexOf(symbol);
          stocks.remove(removedIndex);
          stocksFlexTable.removeRow(removedIndex + 1);
      }
      });
      stocksFlexTable.setWidget(row, 3, removeStock)
   
  }
}
TOP

Related Classes of com.google.gwt.sample.stockwatcher.StockWatcher.client.StockWatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.