home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / BoardOptions.java < prev    next >
Text File  |  1998-05-08  |  9KB  |  254 lines

  1. /*
  2.  * Copyright (c) 1997-1998 Borland International, Inc. All Rights Reserved.
  3.  * 
  4.  * This SOURCE CODE FILE, which has been provided by Borland as part
  5.  * of a Borland product for use ONLY by licensed users of the product,
  6.  * includes CONFIDENTIAL and PROPRIETARY information of Borland.  
  7.  *
  8.  * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
  9.  * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
  10.  * THE PRODUCT.
  11.  *
  12.  * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD BORLAND, ITS RELATED
  13.  * COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY CLAIMS
  14.  * OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR DISTRIBUTION
  15.  * OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES ARISING OUT OF
  16.  * OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION OF PROGRAMS
  17.  * OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS SOURCE
  18.  * CODE FILE.
  19.  */
  20. package borland.samples.apps.chess.client;
  21.  
  22. import java.awt.*;
  23. import java.awt.event.ActionEvent;
  24. import java.awt.event.WindowEvent;
  25. import java.awt.event.ActionListener;
  26. import borland.jbcl.control.ColorChooserPanel;
  27. import borland.samples.apps.chess.client.board.*;
  28. import java.net.URL;
  29. import java.util.ResourceBundle;
  30.  
  31. /**Dialog for modifying the appearance of the Chessboard
  32. */
  33. public class BoardOptions extends Dialog implements OkCancelDialog{
  34.   ResourceBundle res = ResourceBundle.getBundle("borland.samples.apps.chess.client.Res");
  35.   ColorChooserPanel lightColorPanel ;
  36.   ColorChooserPanel darkColorPanel  ;
  37.   Panel dlgPanel = new Panel();
  38.   //ColorChooserPanel lightColorPanel = new ColorChooserPanel() ;
  39.   //ColorChooserPanel darkColorPanel  = new ColorChooserPanel() ;
  40.   Choice pieces = new Choice();
  41.   ChessViewer myParent;
  42.   Chessboard board;
  43.   Frame theframe;
  44.   URL[] imageNames;
  45.   Checkbox switchSides = new Checkbox();
  46.   Label eastLabel = new Label();
  47.   Label westLabel = new Label();
  48.   Label temp = new Label();
  49.   Label centerTitleText = new Label();
  50.   Label centerTitleText2 = new Label();
  51.   Panel northPanel    = new Panel();
  52.   Panel internalPanel = new Panel();
  53.   Panel centerPanel   = new Panel();
  54.   Panel centerTitle   = new Panel();
  55.   Panel bottomPanel   = new Panel();
  56.   Panel buttonBar     = new Panel();
  57.   Panel buttonBarGrid = new Panel();
  58.   GridLayout buttonBarGridLayout = new GridLayout();
  59.   FlowLayout buttonBarLayout = new FlowLayout()  ;
  60.   Button okButton     = new Button();
  61.   Button cancelButton = new Button() ;
  62.   BorderLayout internalPanelBorderLayout = new BorderLayout();
  63.   BorderLayout dialogBorderLayout        = new BorderLayout();
  64.   GridLayout northPanelGridLayout      = new GridLayout();
  65.   GridLayout centerTitleGridLayout     = new GridLayout();
  66.   GridLayout centerPanelGridLayout     = new GridLayout();
  67.   GridLayout bottomPanelGridLayout     = new GridLayout();
  68.   //Color lightColor = null;
  69.  // Color darkColor = null;
  70.   String text = res.getString("BLACK_AT_TOP");
  71.   /** Constructor
  72.   *@param ChessViewer myParent gives access back to the Applet
  73.   *@param Frame  theframe  the frame that parents this dialog
  74.   *@URL[] imageNames an array of Chesspiece image files
  75.   *  Image files are 6 by 2 squares in size in Rook,Knight,Bishop,Queen,King,Pawn
  76.   *  order. The first row has the white pieces, the second has the black pieces.
  77.   *  all pieces have the same background color which is not otherwise used in
  78.   *  the image. The Chessboard Object makes this background transparent when
  79.   *  rendering the pieces.
  80.   */
  81.  
  82.   public BoardOptions(ChessViewer myParent,Frame theframe,URL[] imageNames,Chessboard board)  {
  83.     super(theframe,"",false);
  84.     try {
  85.       setTitle(res.getString("CHESSBOARD_OPTIONS"));
  86.       System.out.println("BoardOptions xtor...");
  87.       this.myParent = myParent;
  88.       this.board = board;
  89.       this.theframe = theframe;
  90.       this.imageNames = imageNames;
  91.       myParent.setModal(true);
  92.       enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  93.  
  94.  
  95.       if (board.isBlackOnTop())
  96.         text = res.getString("WHITE_AT_TOP") ;
  97.       jbInit();
  98.       add(dlgPanel);
  99.       lightColorPanel.setColorValue(board.getLightSquareColor());
  100.       darkColorPanel.setColorValue(board.getDarkSquareColor());
  101.  
  102.     }
  103.     catch (Exception e) {
  104.       System.out.println("BoardOptions xtor" + e);
  105.       e.printStackTrace();
  106.     }
  107.   }
  108.   private void jbInit() {
  109.     //Color lightColor = board.getLightSquareColor();
  110.     //Color darkColor = board.getDarkSquareColor();
  111.     lightColorPanel = new ColorChooserPanel() ;
  112.     darkColorPanel  = new ColorChooserPanel() ;
  113.     dlgPanel.setLayout(dialogBorderLayout);
  114.     northPanelGridLayout.setRows(3);
  115.     northPanelGridLayout.setColumns(1);
  116.     centerTitleGridLayout.setRows(1) ;
  117.     centerTitleGridLayout.setColumns(2) ;
  118.     centerPanelGridLayout.setRows(1) ;
  119.     centerPanelGridLayout.setColumns(2) ;
  120.     bottomPanelGridLayout.setRows(2) ;
  121.     bottomPanelGridLayout.setColumns(1) ;
  122.     internalPanel.setLayout(internalPanelBorderLayout);
  123.     centerPanel.setLayout(centerPanelGridLayout);
  124.     bottomPanel.setLayout(bottomPanelGridLayout);
  125.     buttonBar.setLayout(buttonBarLayout);
  126.     buttonBarGridLayout.setColumns(2);
  127.     buttonBarGridLayout.setHgap(6);
  128.     buttonBarGrid.setLayout(buttonBarGridLayout);
  129.  
  130.     northPanel.setLayout(northPanelGridLayout);
  131.     temp.setText(res.getString("PIECES_"));
  132.     northPanel.add(temp);
  133.     northPanel.add(pieces);
  134.     for (int i = 0; i< imageNames.length;i++)
  135.       pieces.addItem(imageNames[i].toString());
  136.     centerTitle.setLayout(centerTitleGridLayout );
  137.     centerTitleText.setText(res.getString("LIGHT_SQUARES"));
  138.     centerTitle.add(centerTitleText);
  139.     centerTitleText2.setText(res.getString("DARK_SQUARES"));
  140.     centerTitle.add(centerTitleText2);
  141.     northPanel.add(centerTitle);
  142.     lightColorPanel.setColorValue(Color.red);
  143.     darkColorPanel.setColorValue(Color.yellow );
  144.     centerPanel.add(lightColorPanel);
  145.     centerPanel.add(darkColorPanel);
  146.     System.out.println("BoardOptions xtor1");
  147.     buttonBarGrid.add(okButton);
  148.     okButton.addActionListener(new OkButtonListener(this));
  149.     buttonBarGrid.add(cancelButton);
  150.     cancelButton.setLabel(res.getString("CANCEL"));
  151.     okButton.setLabel(res.getString("OK"));
  152.     cancelButton.addActionListener(new CancelButtonListener(this));
  153.     buttonBar.add(buttonBarGrid);
  154.     System.out.println("BoardOptions xtor2");
  155.  
  156.     switchSides.setLabel(text);
  157.     bottomPanel.add(switchSides);
  158.     bottomPanel.add(buttonBar);
  159.     internalPanel.add(northPanel,BorderLayout.NORTH);
  160.     internalPanel.add(bottomPanel,BorderLayout.SOUTH);
  161.     internalPanel.add(centerPanel,BorderLayout.CENTER);
  162.     eastLabel.setText("  ");
  163.     westLabel.setText("  ");
  164.     dlgPanel.add(eastLabel,BorderLayout.EAST);
  165.     dlgPanel.add(westLabel,BorderLayout.WEST);
  166.     dlgPanel.add(internalPanel,BorderLayout.CENTER);
  167.   }
  168.    protected void processWindowEvent(WindowEvent e)  {
  169.  
  170.     if (e.getID() == WindowEvent.WINDOW_CLOSING)
  171.       cancel(null);
  172.     else
  173.       super.processWindowEvent(e);
  174.   }
  175.    public void setVisible(boolean isVisible) {
  176.     super.setVisible(isVisible);
  177.     if (isVisible)
  178.       pieces.requestFocus();
  179.   }
  180.   /**Treat System Close the same as cancel
  181.  
  182.   protected void processWindowEvent(WindowEvent e)  {
  183.     if ((e.getID() == WindowEvent.WINDOW_CLOSED || e.getID() == WindowEvent.WINDOW_CLOSING)) {
  184.       dispose();
  185.       myParent.setModal(false);
  186.     }
  187.     else
  188.       super.processWindowEvent( e);
  189.   }  */
  190.   /**this OkCancelDialog interface method is called by the OkButtonListener
  191.   *   when it receives an ActionEvent
  192.   */
  193.  
  194.   public void ok(ActionEvent evt) {
  195.     try {
  196.       if (lightColorPanel.isChanged())
  197.         board.setLightSquareColor(lightColorPanel.getColorValue());
  198.       if (darkColorPanel.isChanged())
  199.         board.setDarkSquareColor(darkColorPanel.getColorValue());
  200.       int index = pieces.getSelectedIndex();
  201.       dispose();
  202.       if (index > 0){
  203.         board.setImageURL(imageNames[index]);
  204.         System.out.println("resize frame to" + theframe.getPreferredSize());
  205.         theframe.setSize(theframe.getPreferredSize());
  206.       }  
  207.       else
  208.         board.setPosition();
  209.       if (switchSides.getState())
  210.         myParent.switchSides();
  211.       theframe.validate();
  212.       myParent.setModal(false);
  213.     }
  214.     catch (Exception e) {
  215.       String message = e.toString() ;
  216.       e.printStackTrace();
  217.     }
  218.   }
  219.  
  220.   /**this OkCancelDialog interface method is called by the CancelButtonListener
  221.   *   when it receives an ActionEvent
  222.   */
  223.   public void cancel(ActionEvent evt) {
  224.     dispose();
  225.     myParent.setModal(false);
  226.   }
  227. }
  228.  
  229.  
  230.  
  231.   class CancelButtonListener implements ActionListener {
  232.     OkCancelDialog adaptee;
  233.     CancelButtonListener(OkCancelDialog adaptee) {
  234.       this.adaptee = adaptee;
  235.     }
  236.     public void actionPerformed(ActionEvent e) {
  237.       adaptee.cancel(e);
  238.     }
  239.     public void actionUIUpdate(ActionEvent e)
  240.     {}
  241.   }
  242.  
  243.   class OkButtonListener implements ActionListener {
  244.     OkCancelDialog adaptee;
  245.     OkButtonListener(OkCancelDialog adaptee) {
  246.       this.adaptee = adaptee;
  247.     }
  248.     public void actionPerformed(ActionEvent e) {
  249.       adaptee.ok(e);
  250.     }
  251.     public void actionUIUpdate(ActionEvent e)
  252.     {}
  253.   }
  254.