?? gmmainframecontroller.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 + -