home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / WelcomeFrame.java < prev    next >
Encoding:
Java Source  |  1997-07-30  |  12.9 KB  |  349 lines

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