Package com.jbidwatcher.app

Source Code of com.jbidwatcher.app.MacFriendlyFrame

package com.jbidwatcher.app;

import com.jbidwatcher.util.config.JConfig;
import com.jbidwatcher.util.queue.MQFactory;
import com.jbidwatcher.util.Constants;
import com.jbidwatcher.util.xml.XMLElement;
import com.jbidwatcher.auction.AuctionEntry;
import com.jbidwatcher.ui.util.JMouseAdapter;
import com.jbidwatcher.ui.util.OptionUI;
import com.jbidwatcher.ui.util.ButtonMaker;
import com.jbidwatcher.ui.*;
import com.cyberfox.util.platform.Platform;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Color;
import java.net.URL;

/**
* Created by IntelliJ IDEA.
* User: Morgan
* Date: Mar 9, 2008
* Time: 1:38:29 AM
*
* Mac friendly (with mac tool menus) frame for JBidwatcher.
*/
class MacFriendlyFrame extends JFrame implements com.apple.mrj.MRJQuitHandler, com.apple.mrj.MRJAboutHandler, com.apple.mrj.MRJPrefsHandler {
  private JLabel mStatusBar;
  private JLabel mPrices;

  /**
   * @brief Constructs a new window frame, with all the sorted tables,
   * scroll bars, drag and drop targets, menu & header bar, and status
   * line.  Returns a completed frame, suitable for displaying as the primary UI of the program.
   *
   * @param title - The frame title.
   * @param myFrameAdapter - The adapter to listen to mouse events.
   * @param iconURL - The URL of the icon to associate with the frame.
   * @param tabManager - The Tab Manager to display within the frame.
   */
  public MacFriendlyFrame(String title, JMouseAdapter myFrameAdapter, URL iconURL, JTabManager tabManager) {
    super(title);

    setMinimumSize(new Dimension(1000, 320));

    com.apple.mrj.MRJApplicationUtils.registerQuitHandler(this);
    com.apple.mrj.MRJApplicationUtils.registerAboutHandler(this);
    com.apple.mrj.MRJApplicationUtils.registerPrefsHandler(this);

    addMouseListener(myFrameAdapter);
    setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
    if(!Platform.isMac()) setIconImage(new ImageIcon(iconURL).getImage());

    if (JConfig.queryConfiguration("mac.useMetal", "true").equals("true")) getRootPane().putClientProperty("apple.awt.brushMetalLook", "true");

    JPanel headerBar = JBidToolBar.getInstance().buildHeaderBar(this, tabManager);

    JPanel statusPane = buildStatusLine(tabManager);

    getContentPane().add(tabManager.getTabs());
    getContentPane().add(statusPane, BorderLayout.SOUTH);
    getContentPane().add(headerBar, BorderLayout.NORTH);

    pack();

    addWindowListener(new WindowAdapter() {
      public void windowIconified(WindowEvent we) {
        super.windowIconified(we);
        if (Platform.supportsTray() &&
            Platform.isTrayEnabled() &&
            JConfig.queryConfiguration("windows.tray", "true").equals("true") &&
            JConfig.queryConfiguration("windows.minimize", "true").equals("true")) {
          MQFactory.getConcrete("Swing").enqueue("HIDE");
        }
      }

      public void windowClosing(WindowEvent we) {
        super.windowClosing(we);
        MQFactory.getConcrete("Swing").enqueue(UIBackbone.QUIT_MSG);
      }
    });
  }

  private JPanel buildStatusLine(JTabManager tabManager) {
    final JPanel statusPane = new JPanel();
    Border myBorder = BorderFactory.createCompoundBorder(
        BorderFactory.createCompoundBorder(
            BorderFactory.createEmptyBorder(0, 2, 0, 2),
            BorderFactory.createMatteBorder(1, 0, 0, 0, Color.DARK_GRAY)),
        BorderFactory.createEmptyBorder(1, 5, 1, 5));
    statusPane.setBorder(myBorder);
    statusPane.setLayout(new BoxLayout(statusPane, BoxLayout.X_AXIS));

    JSeparator vert1 = new JSeparator(SwingConstants.VERTICAL);
    vert1.setForeground(Color.DARK_GRAY);
    vert1.setMinimumSize(new Dimension(10, 5));
    vert1.setMaximumSize(new Dimension(10, 20));
    statusPane.add(vert1);

    mStatusBar = new JLabel("Ready!");
    final Dimension statusBarSize = new Dimension(600, 16);
    mStatusBar.setMaximumSize(statusBarSize);
    mStatusBar.setMinimumSize(statusBarSize);
    mStatusBar.setPreferredSize(statusBarSize);
    statusPane.add(mStatusBar);

    statusPane.add(Box.createHorizontalGlue());

    JSeparator vert2 = new JSeparator(SwingConstants.VERTICAL);
    vert2.setForeground(Color.DARK_GRAY);
    vert2.setMinimumSize(new Dimension(10, 5));
    vert2.setMaximumSize(new Dimension(10, 20));
    statusPane.add(vert2);

    mPrices = new JLabel(" ");
    Dimension priceSize = new Dimension(300, 16);
    mPrices.setMinimumSize(priceSize);
    mPrices.setPreferredSize(priceSize);
    statusPane.add(mPrices);

    statusPane.add(Box.createHorizontalStrut(10));

    final int baseSize = 14 + 2 + 10 + 10 + 300 + 10;
    addComponentListener(new ComponentAdapter() {
      public void componentResized(ComponentEvent e) {
        int textWidthAllowed = statusPane.getWidth() - baseSize;
        statusBarSize.setSize(textWidthAllowed - 15, 16);
        mStatusBar.setMaximumSize(statusBarSize);
        mStatusBar.setMinimumSize(statusBarSize);
        mStatusBar.setPreferredSize(statusBarSize);
      }
    });

    return statusPane;
  }

  public void handleQuit() {
    if (!(JConfig.queryConfiguration("prompt.snipe_quit", "false").equals("true")) &&
        (AuctionEntry.snipedCount() != 0)) {
      MQFactory.getConcrete("Swing").enqueue(UIBackbone.QUIT_MSG);
      //  Please wait, we'll be ready to quit shortly.
      throw new IllegalStateException("Ne changez pas mains, il viendra bient?t.");
    } else {
      MQFactory.getConcrete("jbidwatcher").enqueue("EXIT");
    }
  }

  public void handleAbout() {
    MQFactory.getConcrete("user").enqueue("About " + Constants.PROGRAM_NAME);
  }

  public void handlePrefs() {
    MQFactory.getConcrete("user").enqueue("Configure");
  }

  /**
   * author: Dan Caprioara on java-dev at lists.apple.com.
   * <p/>
   * There is a bug on Mac OS X, when a WindowAdapter
   * (apple.laf.AquaMenuBarUI$FixupMenuBarWindowAdapter) is
   * registered repeatedly to the frame, without checking it was
   * already added. This is done by the apple LF.<p>
   * <p/>
   * Here the window listener is first removed, and then added.
   */
  public synchronized void addWindowListener(WindowListener listen) {
    super.removeWindowListener(listen);
    super.addWindowListener(listen);
  }

  public void setStatus(String status) {
    mStatusBar.setText(XMLElement.decodeString(status));
    mStatusBar.paintImmediately(mStatusBar.getVisibleRect());
  }

  public void setPrice(String price) {
    mPrices.setText(price);
    mPrices.paintImmediately(mPrices.getVisibleRect());
  }

  /**
   * @brief Save the display properties, the configuration, the
   * auctions, and exit.  This exists to prompt for shutdown
   * if there are any outstanding snipes.
   */
  public void shutdown() {
    try {
      if (AuctionEntry.snipedCount() != 0) {
        OptionUI oui = new OptionUI();
        //  Use the right parent!  FIXME -- mrs: 17-February-2003 23:53
        int rval = oui.promptWithCheckbox(null, "There are outstanding snipes that will not be able to fire while " + Constants.PROGRAM_NAME +
            " is not running.  Are you sure you want to quit?", "Pending Snipes confirmation",
            "prompt.snipe_quit");
        if (rval == JOptionPane.CANCEL_OPTION) return;
      }
    } catch(Exception e) {
      JConfig.log().logDebug("Skipping snipe check due to exception!");
    }
    MQFactory.getConcrete("jbidwatcher").enqueue("EXIT");
  }
}
TOP

Related Classes of com.jbidwatcher.app.MacFriendlyFrame

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.