⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmmainframecontroller.java

📁 Gmail API for Java 一个gmail信箱的客户端
💻 JAVA
字号:
package siuying.gm.app.gmailer4j.controller;

import java.util.*;
import java.util.logging.*;
import bsh.*;
import bsh.util.*; 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import siuying.gm.app.gmailer4j.*;
import siuying.gm.app.gmailer4j.ui.*;

public class GMMainFrameController {
  private GMMainFrame frame;
  private SearchPanelController searchCtrl;
  private Logger logger = Logger.getLogger(GMMainFrameController.class.getName());
  
  /* status variables */
  private int layout = 0;
  private boolean showContent = true;

  /* listeners */
  private ArrayList windowListener;

  /* constants */
  public static int LAYOUT_HORIZONTAL = 0;
  public static int LAYOUT_VERTICAL = 1;

  public GMMainFrameController() {
    frame = new GMMainFrame();
    searchCtrl = new SearchPanelController();
    frame.toolbarTop.add(Box.createRigidArea(new Dimension(10, 0)));
    frame.toolbarTop.add(Box.createHorizontalGlue());   
    frame.toolbarTop.add(searchCtrl.getPanel());    
    frame.toolbarTop.add(Box.createRigidArea(new Dimension(4, 0)));  
    
    windowListener = new ArrayList();
    frame.btnMailbox.setSelected(true);
    frame.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(ComponentEvent e){
                resetDivider();
            }
        }
    );
  }

  public void dispose(){
      frame.dispose();
  }
  
  public void setSearchEnabled(boolean status){
    searchCtrl.setEnabled(status);    
  }

  public String getSearchString(){
    return searchCtrl.getSearchString();    
  }
  
  public void setSearchString(String search_string){
    searchCtrl.setSearchString(search_string);    
  }
  
  public void setSelectedMailboxButton(int idx){
      switch (idx){
          case 0:
            frame.btnMailbox.setSelected(true);
            break;
          case 1:
            frame.btnLabel.setSelected(true);
            break;
          case 2:
            frame.btnSearch.setSelected(true);
            break;
         default:   
         
      }
  }
  
  public void show(){
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);

    frame.show();
  }
  
  public void showConsole(){
    frame.consoleFrame.show();    
  }
  
  public JConsole getConsole(){
    return frame.consoleFrame.getConsole(); 
  }
  
  public void addActionListener(ActionListener listener){
    windowListener.add(listener);
    frame.btnToolbarRefresh.addActionListener(listener);
    frame.btnToolbarConnect.addActionListener(listener);
    frame.btnToolbarDisconnect.addActionListener(listener);
    frame.btnContentClose.addActionListener(listener);

    frame.btnMailbox.addActionListener(listener);
    frame.btnSearch.addActionListener(listener);
    frame.btnLabel.addActionListener(listener);

    frame.itmFileLogin.addActionListener(listener);
    frame.itmFileLogout.addActionListener(listener);
    frame.itmFileExit.addActionListener(listener);
    frame.itmHelpAbout.addActionListener(listener);
    frame.itmToolsOption.addActionListener(listener);
    frame.itmToolsConsole.addActionListener(listener);
    frame.itmRefresh.addActionListener(listener);
    
    searchCtrl.addActionListener(listener);
  }

  public void addMouseListener(MouseListener listener){
    frame.treeMailbox.addMouseListener(listener);
    frame.tblThreads.addMouseListener(listener);
  }

  public void resetDivider(){
     Dimension frameSize = frame.getSize();
     frame.splitVertical.setDividerLocation(frameSize.height - 350);
     frame.splitHorizon.setDividerLocation(150);
  }

  /**
   * Set the TableModel in the frame to that specified
   * @param model TableModel
   */
  public void setTableModel(TableModel model){
    frame.tblThreads.setModel(model);
    frame.tblThreads.getColumnModel().getColumn(0).setPreferredWidth(350);
    frame.tblThreads.getColumnModel().getColumn(1).setPreferredWidth(50);
    frame.tblThreads.getColumnModel().getColumn(2).setPreferredWidth(100);
  }


  /**
   * Set the TreeModel in the frame to that specified
   * @param model TreeModel
   */
  public void setTreeModel(TreeModel model){
    frame.treeMailbox.setModel(model);
  }

  /**
   * Expand the tree in the frame
   */
  public void expandTree(){
    // expand tree
    for(int i=0; i<frame.treeMailbox.getRowCount(); i++){
      frame.treeMailbox.expandRow(i);
    }
  }

  public void setBottomPanel(JPanel content){
    if (content != null){
      frame.messageArea.removeAll();
      frame.messageArea.add(content, BorderLayout.CENTER);
      frame.messageArea.validate();
    }else{
      frame.messageArea.removeAll();
      frame.messageArea.add(frame.lblBottom);
      frame.messageArea.validate();
    }
    SwingUtilities.updateComponentTreeUI(content);
  }

  public void setLeftPanel(JComponent content){
    if (content != null){
      frame.scrollLeft.getViewport().removeAll();
      frame.scrollLeft.getViewport().add(content);
      frame.scrollLeft.validate();
    }else{
      frame.scrollLeft.getViewport().removeAll();
      frame.scrollLeft.getViewport().add(frame.lblLeft);
      frame.scrollLeft.validate();
    }
    SwingUtilities.updateComponentTreeUI(content);
  }

  public void setRightPanel(JComponent content){
    if (content != null){
      frame.scrollRight.getViewport().removeAll();
      frame.scrollRight.getViewport().add(content);
      frame.scrollRight.validate();
    }else{
      frame.scrollRight.getViewport().removeAll();
      frame.scrollRight.getViewport().add(frame.lblRight);
      frame.scrollRight.validate();
    }
    SwingUtilities.updateComponentTreeUI(content);
  }

  /******************************** accessors *********************************/

  /**
   * get current display layout
   */
  public int getLayout(){
      return layout;
  }

  /**
   * get main frame
   */
  public JFrame getFrame(){
      return frame;
  }

  public void updateComponentTreeUI(){
    SwingUtilities.updateComponentTreeUI(frame.panelBottom);
    SwingUtilities.updateComponentTreeUI(frame.panelLeft);
    SwingUtilities.updateComponentTreeUI(frame.panelRight);
    SwingUtilities.updateComponentTreeUI(frame);
    SwingUtilities.updateComponentTreeUI(frame.menuBar);
    SwingUtilities.updateComponentTreeUI(frame.tblThreads.getTableHeader());

    frame.panelBottom.updateUI();
    frame.panelLeft.updateUI();
    frame.panelRight.updateUI();

  }


  /**
   * set current display layout to specified one
   */
  public void setLayout(int layout){
      if (layout != GMMainFrameController.LAYOUT_HORIZONTAL &&
          layout != GMMainFrameController.LAYOUT_VERTICAL ){
          throw new IllegalArgumentException("Layout must be horizontal or vertical!");
      }else{
        if (this.layout != layout){
          this.layout = layout;
          updateLayout();
        }
      }
  }

  public boolean isShowContent(){
      return showContent;
  }

  public void setShowContent(boolean show){
    // update show content status
    showContent = show;

    frame.splitVertical.invalidate();
    frame.splitHorizon.invalidate();
    if (!isShowContent()){
      frame.panelBottom.setVisible(false);
    }else{
      frame.panelBottom.setVisible(true);
    }

    // refresh layout
    frame.splitVertical.revalidate();
    frame.splitHorizon.revalidate();
    resetDivider();

  }

  /****** protected ******/

  /**
   * update the layout of the frame
   * @see Utils.executeTask(Runnable command)
   */
  protected void updateLayout(){
      Runnable r = new Runnable(){
          public void run(){
            frame.splitVertical.invalidate();
            frame.splitHorizon.invalidate();
            switch (layout){
              case 0:

                // remove existing panels
                frame.getContentPane().remove(frame.splitHorizon);
                frame.getContentPane().remove(frame.splitVertical);
                frame.splitHorizon.remove(frame.panelLeft);
                frame.splitHorizon.remove(frame.panelRight);
                frame.splitHorizon.remove(frame.panelBottom);
                frame.splitHorizon.remove(frame.splitVertical);
                frame.splitVertical.remove(frame.panelLeft);
                frame.splitVertical.remove(frame.panelRight);
                frame.splitVertical.remove(frame.panelBottom);
                frame.splitVertical.remove(frame.splitHorizon);

                // put them in desired orders
                frame.splitHorizon.add(frame.panelLeft, JSplitPane.TOP);
                frame.splitHorizon.add(frame.panelRight, JSplitPane.BOTTOM);
                frame.splitVertical.add(frame.splitHorizon, JSplitPane.TOP);
                frame.splitVertical.add(frame.panelBottom, JSplitPane.BOTTOM);
                frame.getContentPane().add(frame.splitVertical, BorderLayout.CENTER);
                break;
              case 1:

                // remove existing panels
                frame.getContentPane().remove(frame.splitHorizon);
                frame.getContentPane().remove(frame.splitVertical);
                frame.splitHorizon.remove(frame.panelLeft);
                frame.splitHorizon.remove(frame.panelRight);
                frame.splitHorizon.remove(frame.panelBottom);
                frame.splitHorizon.remove(frame.splitVertical);
                frame.splitVertical.remove(frame.panelLeft);
                frame.splitVertical.remove(frame.panelRight);
                frame.splitVertical.remove(frame.panelBottom);
                frame.splitVertical.remove(frame.splitHorizon);

                // put them in desired orders
                frame.splitHorizon.add(frame.panelLeft, JSplitPane.TOP);
                frame.splitHorizon.add(frame.splitVertical, JSplitPane.BOTTOM);
                frame.splitVertical.add(frame.panelRight, JSplitPane.TOP);
                frame.splitVertical.add(frame.panelBottom, JSplitPane.BOTTOM);
                frame.getContentPane().add(frame.splitHorizon, BorderLayout.CENTER);
                break;
              default:
            }

            if (!isShowContent()){
              frame.panelBottom.setVisible(false);
            }else{
              frame.panelBottom.setVisible(true);
            }

            // refresh layout
            frame.splitVertical.revalidate();
            frame.splitHorizon.revalidate();
            resetDivider();

          }

      };
      try{
          ThreadUtils.execute(r);
      }catch(InterruptedException ie){
          logger.warning("Layout Task interrupted.");
      }
  }

  public void setLogonStatus(final int status) {
    switch (status) {
      case GMailer4j.LOGON_ON:
        // frame.mailboxTree.setEnabled(true);
        frame.itmFileLogin.setEnabled(false);
        frame.itmFileLogout.setEnabled(true);
        frame.itmRefresh.setEnabled(true);
        frame.btnToolbarConnect.setEnabled(false);
        frame.btnToolbarDisconnect.setEnabled(true);
        frame.btnToolbarRefresh.setEnabled(true);
        searchCtrl.setEnabled(true);
        break;
      case GMailer4j.LOGON_OFF:
        // frame.mailboxTree.setEnabled(false);
        frame.itmFileLogin.setEnabled(true);
        frame.itmFileLogout.setEnabled(false);
        frame.itmRefresh.setEnabled(false);
        frame.btnToolbarConnect.setEnabled(true);
        frame.btnToolbarDisconnect.setEnabled(false);
        frame.btnToolbarRefresh.setEnabled(false);
        searchCtrl.setEnabled(false);
        break;
      case GMailer4j.LOGGING:
        // frame.mailboxTree.setEnabled(false);
        frame.itmFileLogin.setEnabled(false);
        frame.itmFileLogout.setEnabled(false);
        frame.itmRefresh.setEnabled(false);
        frame.btnToolbarConnect.setEnabled(false);
        frame.btnToolbarDisconnect.setEnabled(false);
        frame.btnToolbarRefresh.setEnabled(false);
        searchCtrl.setEnabled(false);
        break;
      default:
    }
  }

  /**
   * Set the message of status bar and the progress bar
   * shortMsg is used to update progress bar
   * longMsg is used to update status bar
   * if any of them is null, that section is not updated
   * @param shortMsg String
   * @param longMsg String
   */
  public void setMessages(final String shortMsg, final String longMsg){
    Runnable r = new Runnable(){
      public void run(){
        if (longMsg != null) frame.lblStatus.setText(longMsg);
        if (shortMsg != null) frame.progressBar.setString(shortMsg);
      }
    };
    SwingUtilities.invokeLater(r);
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -