home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JSAMPLES.Z / WelcomeFrame.java < prev    next >
Text File  |  1998-05-08  |  16KB  |  419 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.intl.gui;
  21.  
  22. import java.awt.*;
  23. import java.awt.event.*;
  24. import java.text.*;
  25. import java.util.*;
  26. import borland.jbcl.control.*;
  27. import borland.jbcl.layout.*;
  28.  
  29. import borland.samples.intl.*;
  30. import borland.samples.intl.beans.*;
  31. import borland.samples.intl.beans.event.*;
  32. import borland.samples.intl.application.*;
  33.  
  34. import borland.samples.intl.gui.resources.TextRes_en;
  35.  
  36. public class WelcomeFrame extends DecoratedFrame implements LocaleChangeListener{
  37.   private static WelcomeFrame welcomeFrame = null;
  38.  
  39.   BevelPanel bevelPanel1 = new BevelPanel();
  40.   BevelPanel bevelPanel2 = new BevelPanel();
  41.   GridLayout gridLayout1 = new GridLayout();
  42.   SplitPanel splitPanel1 = new SplitPanel();
  43.   BorderLayout borderLayout1 = new BorderLayout();
  44.   ButtonControl browseButton = new ButtonControl();
  45.   ButtonControl viewButton = new ButtonControl();
  46.   ButtonControl exitButton = new ButtonControl();
  47.   GridLayout gridLayout2 = new GridLayout();
  48.   LabelControl labelControl1 = new LabelControl();
  49.  
  50.   LocaleChooser localeChooser1 = new LocaleChooser();
  51.   WrappingTextViewer wrappingTextViewer1 = new WrappingTextViewer();
  52.   InternationalClock internationalClock1 = new InternationalClock();
  53.  
  54.   private static AppDataModule appDataModule = AppDataModule.getDataModule();
  55.   ResourceBundle textRes = java.util.ResourceBundle.getBundle("borland.samples.intl.gui.resources.TextRes",
  56.                                                               LocaleChangeManager.getLocale());
  57.  
  58.   private static boolean runningAsApplet = false;
  59.  
  60.   /**                                            
  61.    * Returns the single instance of the WelcomeFrame for the application.
  62.    * Also packs and centers the frame.
  63.    *
  64.    * @return instance of WelcomeFrame
  65.    */
  66.   public static WelcomeFrame getInstance() {
  67.     if (welcomeFrame == null) {
  68.       welcomeFrame = new WelcomeFrame();
  69.     }
  70.     return welcomeFrame;
  71.   }
  72.  
  73.   //Construct the frame
  74.   public WelcomeFrame() {
  75.     try {
  76.       jbInit();
  77.     }
  78.     catch (Exception e) {
  79.       e.printStackTrace();
  80.     };
  81.   }
  82.  
  83.   public void addNotify() {
  84.     super.addNotify();
  85.     welcomeFrame.pack();
  86.     //Center the window
  87.     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  88.     Dimension frameSize = welcomeFrame.getPreferredSize();
  89.     if (frameSize.height > screenSize.height) {
  90.       frameSize.height = screenSize.height / 2;
  91.     }
  92.     if (frameSize.width > screenSize.width) {
  93.       frameSize.width = screenSize.width;
  94.     }
  95.     welcomeFrame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
  96.     welcomeFrame.setSize(frameSize.width, frameSize.height);
  97.   }
  98.  
  99.   /**
  100.    * Contains component initialization code generated by the visual designer.
  101.    */
  102.   public void jbInit() throws Exception{
  103.     this.setLayout(borderLayout1);
  104.  
  105.     browseButton.setLabel(textRes.getString("Browse"));
  106.     viewButton.setLabel(textRes.getString("View"));
  107.     exitButton.setLabel(textRes.getString("Exit"));
  108.  
  109.     gridLayout2.setColumns(3);
  110.     gridLayout2.setHgap(20);
  111.  
  112.     bevelPanel1.setLayout(gridLayout2);
  113.     bevelPanel1.setMargins(new Insets(10, 10, 10, 10));
  114.     bevelPanel1.add(browseButton, null);
  115.     bevelPanel1.add(viewButton, null);
  116.     bevelPanel1.add(exitButton, null);
  117.  
  118.     gridLayout1.setRows(2);
  119.     gridLayout1.setColumns(1);
  120.  
  121.     bevelPanel2.setLayout(gridLayout1);
  122.     bevelPanel2.add(bevelPanel1, null);
  123.     bevelPanel2.add(internationalClock1, null);
  124.  
  125.     this.add(bevelPanel2, BorderLayout.SOUTH);
  126.  
  127.     wrappingTextViewer1.setText(textRes.getString("WelcomeText"));
  128.     wrappingTextViewer1.setFont(new Font("Dialog", 0, 14));
  129.  
  130.     splitPanel1.add(localeChooser1, new PaneConstraints("localeChooser1", "localeChooser1", PaneConstraints.ROOT, 0.35f));
  131.     splitPanel1.add(wrappingTextViewer1, new PaneConstraints("wrappingTextViewer1", "localeChooser1", PaneConstraints.RIGHT, 0.65f));
  132.     this.add(splitPanel1, BorderLayout.CENTER);
  133.  
  134.     // The following locale choices were initially set using the property
  135.     // inspector.  However, since the LocaleChooser obtains its list of
  136.     // available locales from the JDK and the JDK's locale data is
  137.     // incomplete, we added additional locales by hand.
  138.     // In JDK 1.1.6, the NumberFormat.getAvailableLocales() method didn't
  139.     // return any locales if the JDK classes were in a .ZIP file.  Thus
  140.     // when the LocaleChooser is used in the designer, no locales are displayed.
  141.     localeChooser1.setLocaleChoices(new Locale [] { new java.util.Locale("de", "CH"),
  142. new java.util.Locale("de", "DE"),
  143. new java.util.Locale("en", "CA"),
  144. new java.util.Locale("en", "GB"),
  145. new java.util.Locale("en", "US"),
  146. new java.util.Locale("es", "ES"),
  147. new java.util.Locale("fr", "FR"),
  148. new java.util.Locale("fr", "CA"),
  149. new java.util.Locale("fr", "CH"),
  150. new java.util.Locale("it", "IT"),
  151. new java.util.Locale("it", "CH"),
  152. new java.util.Locale("ja", "JP"),
  153. new java.util.Locale("ko", "KR"),
  154. new java.util.Locale("zh", "TW"),
  155. new java.util.Locale("cs", "CZ"),
  156. new java.util.Locale("hr", "HR"),
  157. new java.util.Locale("tr", "TR"),
  158. new java.util.Locale("sh", "YU"),
  159. new java.util.Locale("sr", "YU"),
  160. new java.util.Locale("pl", "PL"),
  161. new java.util.Locale("el", "GR"),
  162.  
  163.  } );
  164.  
  165.     localeChooser1.addLocaleChangeListener(LocaleChangeManager.getLocaleChangeManager());
  166.  
  167.     browseButton.addActionListener(new WelcomeFrame_browseButton_actionAdapter(this));
  168.     viewButton.addActionListener(new WelcomeFrame_viewButton_ActionAdapter(this));
  169.     exitButton.addActionListener(new WelcomeFrame_exitButton_ActionAdapter(this));
  170.  
  171.     labelControl1.setText(textRes.getString("Welcome"));
  172.     labelControl1.setFont(new Font("Dialog", 2, 24));
  173.     this.add(labelControl1, BorderLayout.NORTH);
  174.     LocaleChangeManager.getLocaleChangeManager().addLocaleChangeListener(this);
  175.  
  176.     this.setSize(new Dimension(588, 459));
  177.     this.setTitle(textRes.getString("WelcomeTitle"));
  178.  
  179.     internationalClock1.setDateStyle(java.text.DateFormat.FULL);
  180.     internationalClock1.setTimeStyle(java.text.DateFormat.MEDIUM);
  181.     internationalClock1.setAlignment(Label.RIGHT);
  182.     internationalClock1.setMargins(new Insets(0, 0, 0, 10));
  183.  
  184.   }
  185.  
  186.   public Dimension getPreferredSize() {
  187.     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  188.     return new Dimension(super.getPreferredSize().width, screenSize.height / 2);
  189.   }
  190.  
  191.   /**
  192.    * Enables or disables the 'Browse products' button.
  193.    * Set false when a user clicks on the 'View previous orders' button
  194.    * since product browsing should be disabled in that mode.
  195.    * Set true by OrderFrame.java once a user closes the frame
  196.    * after having browsed previous orders.
  197.    *
  198.    * @param allowProductBrowsing enables or disables 'Browse products' button
  199.    */
  200.   public void setAllowProductBrowsing(boolean allowProductBrowsing) {
  201.     browseButton.setEnabled(allowProductBrowsing);
  202.   }
  203.  
  204.   /**
  205.    * Enables or disables the 'View previous orders' button.
  206.    * Set false by ProductFrame.java once a user has begun entering
  207.    * an order since viewing previous orders should be disabled in that mode.
  208.    * Set true by OrderFrame.java once a user has completed (either
  209.    * cancelled or saved) an order.
  210.    *
  211.    * @param allowOrderViewing enables or disables 'View previous orders' button
  212.    */
  213.   public void setAllowOrderViewing(boolean allowOrderViewing) {
  214.     viewButton.setEnabled(allowOrderViewing);
  215.   }
  216.  
  217.   /**
  218.    * Enables or disables background activity of beans used within the frame.
  219.    * Primarily intended for use when run as an applet and the applet's stop()
  220.    * method is called, to disable the LocaleChooser bean's spinning globe
  221.    * animation and InternationalClock bean's clock.
  222.    * 
  223.    * @param enabled if false, disables frame's background activity
  224.    */
  225.   public void setBackgroundActivityEnabled(boolean enabled) {
  226.     localeChooser1.setAnimationEnabled(enabled);
  227.     internationalClock1.setClockEnabled(enabled);
  228.   }
  229.  
  230.   /**
  231.    * Resolves any as yet unresolved data when user closes the frame.
  232.    * If running as an applet, just hides the frame, otherwise exits.
  233.    * <B>NOTE</B> When using a DecoratedFrame, a registered
  234.    * WINDOW_CLOSING event listener will NOT be called.  Thus to
  235.    * perform custom processing upon window close events for frames
  236.    * extending DecoratedFrame, it is necessary to override
  237.    * DecoratedFrame's processWindowEvent method.
  238.    *
  239.    * @param e WindowEvent describing the event to be processed 
  240.    */
  241.   protected void processWindowEvent(WindowEvent e) {
  242.     if (e.getID() == WindowEvent.WINDOW_CLOSING) {
  243.       appDataModule.resolveData();
  244.       // If we're running as an applet, hide the
  245.       // window but don't exit
  246.       if (runningAsApplet) {
  247.         if (OrderFrame.getInstance().getViewingOrders()) {
  248.           appDataModule.browseCustomerOrders(false);
  249.           OrderFrame.getInstance().setViewingOrders(false);
  250.         }
  251.         appDataModule.cancelOrder();
  252.         setAllowProductBrowsing(true);
  253.         setAllowOrderViewing(true);
  254.  
  255.         this.setVisible(false);
  256.         ProductFrame.getInstance().setVisible(false);
  257.         OrderFrame.getInstance().setVisible(false);
  258.       } else {
  259.         this.dispose();
  260.         ProductFrame.getInstance().dispose();
  261.         OrderFrame.getInstance().dispose();
  262.         System.exit(0);
  263.       }
  264.     }
  265.   }
  266.  
  267.   /**
  268.    * Launches the product browsing frame (ProductFrame.java).
  269.    * 
  270.    * @param e ActionEvent describing the action performed
  271.    */
  272.   void browseButton_actionPerformed(java.awt.event.ActionEvent e) {
  273.     this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  274.     ProductFrame.getInstance().setVisible(true);
  275.     this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  276.   }
  277.  
  278.   /**
  279.    * Prompts the user to select an existing customer (via CustomerLookupDialog.java),
  280.    * and initializes the OrderFrame for viewing the selected customer's previous orders.
  281.    * 
  282.    * @param e ActionEvent describing the action performed
  283.    */
  284.   void viewButton_actionPerformed(java.awt.event.ActionEvent e) {
  285.      try {
  286.        this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  287.        // Create and display the modal customer lookup dialog.  Selection of
  288.        // a customer row, password verification, and setting up of the
  289.        // data module to retrieve the customer's orders all takes place 
  290.        // within CustomerLookupDialog.java.  
  291.        CustomerLookupDialog customerLookupDialog = new CustomerLookupDialog(this, true);
  292.        customerLookupDialog.show();
  293.        this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  294.        if (customerLookupDialog.isValidCustomer()) {
  295.          this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  296.          appDataModule.browseCustomerOrders(true);
  297.          setAllowProductBrowsing(false);
  298.          ProductFrame.getInstance().setVisible(false);
  299.          OrderFrame.getInstance().setViewingOrders(true);
  300.          OrderFrame.getInstance().setVisible(true);
  301.          this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  302.        }
  303.      } catch (Exception ex) {
  304.        borland.jbcl.util.Diagnostic.printStackTrace(ex);
  305.      }
  306.   }
  307.  
  308.   // When user presses 'Exit' button, resolve any as of yet
  309.   // unresolved data.  If running as an applet, just hide
  310.   // the frame, otherwise exit.
  311.   void exitButton_actionPerformed(java.awt.event.ActionEvent e) {
  312.     appDataModule.resolveData();
  313.     if (runningAsApplet) {
  314.       if (OrderFrame.getInstance().getViewingOrders()) {
  315.         appDataModule.browseCustomerOrders(false);
  316.         OrderFrame.getInstance().setViewingOrders(false);
  317.       }
  318.       appDataModule.cancelOrder();
  319.       setAllowProductBrowsing(true);
  320.       setAllowOrderViewing(true);
  321.  
  322.       this.setVisible(false);
  323.       ProductFrame.getInstance().setVisible(false);
  324.       OrderFrame.getInstance().setVisible(false);
  325.     } else {
  326.       this.dispose();
  327.       ProductFrame.getInstance().dispose();
  328.       OrderFrame.getInstance().dispose();
  329.       System.exit(0);
  330.     }
  331.   }
  332.  
  333.   /**
  334.    * Resets WelcomeFrame components for newly selected locale.
  335.    * Updates resource bundle for new locale and resizes and centers
  336.    * frame based on new preferred size of localizable elements.
  337.    *
  338.    * @param e LocaleChangeEvent specifying new locale
  339.    */
  340.   public void localeChanged(LocaleChangeEvent e) {
  341.     textRes = java.util.ResourceBundle.getBundle("borland.samples.intl.gui.resources.TextRes", e.getLocale());
  342.     browseButton.setLabel(textRes.getString("Browse"));
  343.     browseButton.invalidate();
  344.     viewButton.setLabel(textRes.getString("View"));
  345.     viewButton.invalidate();
  346.     exitButton.setLabel(textRes.getString("Exit"));
  347.     exitButton.invalidate();
  348.     wrappingTextViewer1.setText(textRes.getString("WelcomeText"));
  349.     wrappingTextViewer1.setLocale(e.getLocale());
  350.     wrappingTextViewer1.invalidate();
  351.     labelControl1.setText(textRes.getString("Welcome"));
  352.     labelControl1.invalidate();
  353.     internationalClock1.setLocale(e.getLocale());
  354.     localeChooser1.invalidate();
  355.     setTitle(textRes.getString("WelcomeTitle"));
  356.  
  357.     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  358.     Dimension frameSize = welcomeFrame.getPreferredSize();
  359.     if (frameSize.height > screenSize.height) {
  360.       frameSize.height = screenSize.height / 2;
  361.     }
  362.     if (frameSize.width > screenSize.width) {
  363.       frameSize.width = screenSize.width;
  364.     }
  365.     setSize(frameSize.width, frameSize.height);
  366.     validate();
  367.   }
  368.  
  369.   /**
  370.    * Sets WelcomeFrame to run in applet mode.
  371.    * Must be called before WelcomeFrame is initialized.
  372.    * When run in applet mode, closing the frame or
  373.    * pressing 'Exit' does not invoke System.exit(),
  374.    * which would cause an applet security violation.
  375.    *
  376.    * @param runningAsApplet if true, sets applet mode
  377.    */
  378.   public static void setRunningAsApplet(boolean runAsApplet) {
  379.     runningAsApplet = runAsApplet;
  380.   }
  381.  
  382. }
  383.  
  384. class WelcomeFrame_viewButton_ActionAdapter implements ActionListener{
  385.   WelcomeFrame adaptee;
  386.  
  387.   WelcomeFrame_viewButton_ActionAdapter(WelcomeFrame adaptee) {
  388.     this.adaptee = adaptee;
  389.   }
  390.  
  391.   public void actionPerformed(java.awt.event.ActionEvent e) {
  392.     adaptee.viewButton_actionPerformed(e);
  393.   }
  394. }
  395.  
  396. class WelcomeFrame_exitButton_ActionAdapter implements ActionListener{
  397.   WelcomeFrame adaptee;
  398.  
  399.   WelcomeFrame_exitButton_ActionAdapter(WelcomeFrame adaptee) {
  400.     this.adaptee = adaptee;
  401.   }
  402.  
  403.   public void actionPerformed(java.awt.event.ActionEvent e) {
  404.     adaptee.exitButton_actionPerformed(e);
  405.   }
  406. }
  407.  
  408. class WelcomeFrame_browseButton_actionAdapter implements java.awt.event.ActionListener{
  409.   WelcomeFrame adaptee;
  410.  
  411.   WelcomeFrame_browseButton_actionAdapter(WelcomeFrame adaptee) {
  412.     this.adaptee = adaptee;
  413.   }
  414.  
  415.   public void actionPerformed(java.awt.event.ActionEvent e) {
  416.     adaptee.browseButton_actionPerformed(e);
  417.   }
  418. }
  419.