📄 toolfactory.java
字号:
/**
* $Id:ToolFactory.java $
*
* Copyright 2004 ~ 2005 JingFei International Cooperation LTD. All rights reserved. *
*/
package com.jfimagine.jfdraw.gui;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.KeyStroke;
import javax.swing.JSeparator;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.ListCellRenderer;
import javax.swing.JList;
import javax.swing.JColorChooser;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Component;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import com.jfimagine.jfdraw.action.ActionConst;
import com.jfimagine.jfdraw.gui.resource.CADResource;
import com.jfimagine.jfdraw.gui.GUIConst;
import com.jfimagine.jfdraw.gui.DrawAdapter;
import com.jfimagine.jfdraw.gui.DrawCanvas;
import com.jfimagine.jfdraw.draw.Selection;
import com.jfimagine.jfdraw.draw.GraphEventDispatcher;
import com.jfimagine.jfgraph.shape.base.AbstractShape;
import com.jfimagine.jfgraph.shape.base.ObjectList;
import com.jfimagine.jfgraph.shape.union.JFLayer;
import com.jfimagine.jfgraph.shape.decorate.FontFormat;
import com.jfimagine.jfgraph.shape.decorate.LineFormat;
import com.jfimagine.jfgraph.shape.decorate.FillFormat;
import com.jfimagine.jfgraph.shape.decorate.Arrow;
import com.jfimagine.jfdraw.gui.dialog.LineFormatDialog;
import com.jfimagine.jfdraw.gui.dialog.FontFormatDialog;
import com.jfimagine.jfdraw.gui.dialog.FillFormatDialog;
import com.jfimagine.jfdraw.gui.dialog.ArrowDialog;
import com.jfimagine.utils.commonutil.CommonUtil;
/**
* Tool factory is a class used to create menus, tool bars and other tools for cad drawing.
*
* @author CookieMaker
*
* @version $Revision: 1.00 $
*/
public class ToolFactory{
private static final String CMD_LINECOLOR_MODIFIER ="CMD_LineColor_Modifier";
private static final String CMD_FONTCOLOR_MODIFIER ="CMD_FontColor_Modifier";
private static final String CMD_FILLCOLOR_MODIFIER ="CMD_FillColor_Modifier";
private static final String CMD_FILLCOLOR2_MODIFIER ="CMD_FillColor2_Modifier";
private static final String CMD_FILLLINECOLOR_MODIFIER="CMD_FillLineColor_Modifier";
/** two ruler radio menu item that will be checked dynamically*/
private static JRadioButtonMenuItem rulerEnglish;
private static JRadioButtonMenuItem rulerMetric;
private static JTextField layerTextField;
/**line format combo boxes*/
private static JComboBox lineStyleCombo;
private static JComboBox lineWidthCombo;
private static JButton lineColorButton;
/**font format combo boxes*/
private static JComboBox fontNameCombo;
private static JComboBox fontStyleCombo;
private static JComboBox fontSizeCombo;
private static JButton fontColorButton;
/**arrow format combo boxes*/
private static JComboBox startArrowCombo;
private static JComboBox endArrowCombo;
/**fill format combo boxes*/
private static JComboBox fillStyleCombo;
private static JButton fillColorButton;
private static JButton fillColorButton2;
private static JComboBox fillLineStyleCombo;
private static JButton fillLineColorButton;
/** Graph event dispatcher**/
private GraphEventDispatcher m_graphEventDispatcher;
/**Prevent triggering item state changed event**/
private static boolean m_preventItemStateChanged=false;
/** window menus **/
private static JMenu windowMenu;
/** set the current the ruler is under metric or english
* @param isMetric True if metric, false english.
*/
public void setIsMetricRuler(boolean isMetric){
if (rulerEnglish==null || rulerMetric==null)
return;
rulerMetric.setSelected(isMetric);
rulerEnglish.setSelected(!isMetric);
}
/** set current layer name
* @param layerName Current layername
*/
public void setLayerName(String layerName){
layerTextField.setText(layerName);
}
/** get current layer name
* @return Current layername showed
*/
public String getLayerName(){
return layerTextField.getText();
}
/**
* Append all internal window titles to window menu, so we can toggle these internal windows.
* @param titleList Title list of internal windows.
*/
public void appendTitlesToWindowMenu(List titleList,ActionListener listener){
windowMenu.removeAll();
addWindowMenus(windowMenu,listener);
if (titleList==null || titleList.size()==0)
return;
windowMenu.add(new JSeparator());
Iterator it =titleList.iterator();
while (it!=null && it.hasNext()){
String title =(String)it.next();
windowMenu.add(createMenuItem(title,"",(char)0,(char)0,"",ActionConst.CMD_WINDOW_TOGGLE,listener));
}
}
/**
* Create a main menu bar.
*/
public static JMenuBar createMenuBar(ActionListener listener) {
JMenuBar mBar = new JMenuBar();
mBar.add(createDocMenu(listener));
mBar.add(createEditMenu(listener,false));
mBar.add(createViewMenu(listener));
mBar.add(createShapeMenu(listener));
mBar.add(createDrawMenu(listener));
mBar.add(createSetMenu(listener));
mBar.add(createWindowMenu(listener));
mBar.add(createHelpMenu(listener));
return mBar;
}
//create document menu items.
public static JMenu createDocMenu(ActionListener listener){
return createDocMenu(listener,false);
}
//create document menu items.
public static JMenu createDocMenu(ActionListener listener,boolean hideExit){
//A title FILE menu.
JMenu docMenu = createMenu(CADResource.getString("menu.file.label"),
CADResource.getChar("menu.file.mnemonic"),
CADResource.getChar("menu.file.accelerator"),
CADResource.getString("menu.file.keymask")
);
//new file,open file, save file, save as file menu items.
docMenu.add(createMenuItem(CADResource.getString("menuitem.newfile.label"),
"general/new16",
CADResource.getChar("menuitem.newfile.mnemonic"),
CADResource.getChar("menuitem.newfile.accelerator"),
CADResource.getString("menuitem.newfile.keymask"),
ActionConst.CMD_FILE_NEW,
listener));
docMenu.add(createMenuItem(CADResource.getString("menuitem.openfile.label"),
"general/open16",
CADResource.getChar("menuitem.openfile.mnemonic"),
CADResource.getChar("menuitem.openfile.accelerator"),
CADResource.getString("menuitem.openfile.keymask"),
ActionConst.CMD_FILE_OPEN,
listener));
docMenu.add(createMenuItem(CADResource.getString("menuitem.openurlfile.label"),
"general/open16",
CADResource.getChar("menuitem.openurlfile.mnemonic"),
CADResource.getChar("menuitem.openurlfile.accelerator"),
CADResource.getString("menuitem.openurlfile.keymask"),
ActionConst.CMD_FILE_OPENURL,
listener));
docMenu.add(new JSeparator());
docMenu.add(createMenuItem(CADResource.getString("menuitem.savefile.label"),
"general/save16",
CADResource.getChar("menuitem.savefile.mnemonic"),
CADResource.getChar("menuitem.savefile.accelerator"),
CADResource.getString("menuitem.savefile.keymask"),
ActionConst.CMD_FILE_SAVE,
listener));
//* demo
docMenu.add(createMenuItem(CADResource.getString("menuitem.saveasfile.label"),
"general/save16",
CADResource.getChar("menuitem.saveasfile.mnemonic"),
CADResource.getChar("menuitem.saveasfile.accelerator"),
CADResource.getString("menuitem.saveasfile.keymask"),
ActionConst.CMD_FILE_SAVEAS,
listener));
//*/
//* trial version
docMenu.add(createMenuItem(CADResource.getString("menuitem.saveasxmlfile.label"),
CADResource.getChar("menuitem.saveasxmlfile.mnemonic"),
CADResource.getChar("menuitem.saveasxmlfile.accelerator"),
CADResource.getString("menuitem.saveasxmlfile.keymask"),
ActionConst.CMD_FILE_SAVEASXML,
listener));
//*/
//* demo
//An export menu.
JMenu exportMenu = createMenu(CADResource.getString("menu.exporting.label"),
CADResource.getChar("menu.exporting.mnemonic"),
CADResource.getChar("menu.exporting.accelerator"),
CADResource.getString("menu.exporting.keymask")
);
addExportMenus(exportMenu,listener,false);
docMenu.add(exportMenu);
docMenu.add(new JSeparator());
docMenu.add(createMenuItem(CADResource.getString("menuitem.pagesetup.label"),
CADResource.getChar("menuitem.pagesetup.mnemonic"),
CADResource.getChar("menuitem.pagesetup.accelerator"),
CADResource.getString("menuitem.pagesetup.keymask"),
ActionConst.CMD_FILE_PAGESETUP,
listener));
docMenu.add(createMenuItem(CADResource.getString("menuitem.printpreview.label"),
CADResource.getChar("menuitem.printpreview.mnemonic"),
CADResource.getChar("menuitem.printpreview.accelerator"),
CADResource.getString("menuitem.printpreview.keymask"),
ActionConst.CMD_FILE_PRINTPREVIEW,
listener));
docMenu.add(createMenuItem(CADResource.getString("menuitem.print.label"),
CADResource.getChar("menuitem.print.mnemonic"),
CADResource.getChar("menuitem.print.accelerator"),
CADResource.getString("menuitem.print.keymask"),
ActionConst.CMD_FILE_PRINT,
listener));
//*/
if (!hideExit){
docMenu.add(new JSeparator());
//quit menu items.
docMenu.add(createMenuItem(CADResource.getString("menuitem.quit.label"),
CADResource.getChar("menuitem.quit.mnemonic"),
CADResource.getChar("menuitem.quit.accelerator"),
CADResource.getString("menuitem.quit.keymask"),
ActionConst.CMD_QUIT,
listener));
}
return docMenu;
}
/** create edit menu items.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -