📄 editmenu.java
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: EditMenu.java * * Copyright (c) 2003 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.tool.user.menus;import static com.sun.electric.tool.user.menus.EMenuItem.SEPARATOR;import com.sun.electric.database.change.Undo;import com.sun.electric.database.geometry.DBMath;import com.sun.electric.database.geometry.EPoint;import com.sun.electric.database.hierarchy.Cell;import com.sun.electric.database.hierarchy.Export;import com.sun.electric.database.hierarchy.Library;import com.sun.electric.database.network.Network;import com.sun.electric.database.prototype.NodeProto;import com.sun.electric.database.prototype.PortCharacteristic;import com.sun.electric.database.topology.ArcInst;import com.sun.electric.database.topology.Geometric;import com.sun.electric.database.topology.NodeInst;import com.sun.electric.database.topology.PortInst;import com.sun.electric.database.variable.ElectricObject;import com.sun.electric.database.variable.TextDescriptor;import com.sun.electric.database.variable.Variable;import com.sun.electric.database.variable.Variable.Key;import com.sun.electric.technology.ArcProto;import com.sun.electric.technology.PrimitiveNode;import com.sun.electric.technology.Technology;import com.sun.electric.technology.Xml;import com.sun.electric.technology.technologies.FPGA;import com.sun.electric.technology.technologies.Generic;import com.sun.electric.tool.Client;import com.sun.electric.tool.Job;import com.sun.electric.tool.JobException;import com.sun.electric.tool.io.FileType;import com.sun.electric.tool.sandbox.TechExplorerDriver;import com.sun.electric.tool.user.ActivityLogger;import com.sun.electric.tool.user.CircuitChangeJobs;import com.sun.electric.tool.user.CircuitChanges;import com.sun.electric.tool.user.Clipboard;import com.sun.electric.tool.user.Highlight2;import com.sun.electric.tool.user.Highlighter;import com.sun.electric.tool.user.User;import com.sun.electric.tool.user.dialogs.Array;import com.sun.electric.tool.user.dialogs.ArtworkLook;import com.sun.electric.tool.user.dialogs.Attributes;import com.sun.electric.tool.user.dialogs.BusParameters;import com.sun.electric.tool.user.dialogs.Change;import com.sun.electric.tool.user.dialogs.ChangeText;import com.sun.electric.tool.user.dialogs.EditKeyBindings;import com.sun.electric.tool.user.dialogs.FindText;import com.sun.electric.tool.user.dialogs.GetInfoArc;import com.sun.electric.tool.user.dialogs.GetInfoExport;import com.sun.electric.tool.user.dialogs.GetInfoMulti;import com.sun.electric.tool.user.dialogs.GetInfoNode;import com.sun.electric.tool.user.dialogs.GetInfoOutline;import com.sun.electric.tool.user.dialogs.GetInfoText;import com.sun.electric.tool.user.dialogs.MoveBy;import com.sun.electric.tool.user.dialogs.OpenFile;import com.sun.electric.tool.user.dialogs.SelectObject;import com.sun.electric.tool.user.dialogs.SpecialProperties;import com.sun.electric.tool.user.dialogs.Spread;import com.sun.electric.tool.user.tecEdit.LibToTech;import com.sun.electric.tool.user.tecEdit.Manipulate;import com.sun.electric.tool.user.tecEdit.TechToLib;import com.sun.electric.tool.user.tecEditWizard.TechEditWizard;import com.sun.electric.tool.user.ui.CurveListener;import com.sun.electric.tool.user.ui.EditWindow;import com.sun.electric.tool.user.ui.ErrorLoggerTree;import com.sun.electric.tool.user.ui.OutlineListener;import com.sun.electric.tool.user.ui.PaletteFrame;import com.sun.electric.tool.user.ui.SizeListener;import com.sun.electric.tool.user.ui.TextWindow;import com.sun.electric.tool.user.ui.ToolBar;import com.sun.electric.tool.user.ui.TopLevel;import com.sun.electric.tool.user.ui.WindowFrame;import com.sun.electric.tool.user.waveform.WaveformWindow;import java.awt.Dimension;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.EventListener;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import javax.swing.JOptionPane;import javax.swing.KeyStroke;/** * Class to handle the commands in the "Edit" pulldown menu. */public class EditMenu { static EMenu makeMenu() {// int ctrl = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();// int ctrlShift = ctrl | InputEvent.SHIFT_DOWN_MASK; /****************************** THE EDIT MENU ******************************/ // mnemonic keys available: B JK Q // still don't have mnemonic for "Repeat Last Action" return new EMenu("_Edit", new EMenuItem("Cu_t", 'X') { public void run() { Clipboard.cut(); }}, new EMenuItem("Cop_y", 'C') { public void run() { Clipboard.copy(); }}, new EMenuItem("_Paste", 'V') { public void run() { Clipboard.paste(); }}, new EMenuItem("Dup_licate", 'M') { public void run() { Clipboard.duplicate(); }}, SEPARATOR, // TODO: figure out how to remove this property change listener for correct garbage collection ToolBar.undoCommand, // U ToolBar.redoCommand, // D new EMenuItem("Sho_w Undo List") { public void run() { showUndoListCommand(); }}, new EMenuItem("Repeat Last Action", KeyStroke.getKeyStroke('&')) { public void run() { EMenuItem.repeatLastCommand(); }}, SEPARATOR, // mnemonic keys available: AB EFGHIJKLMN PQRSTUV XYZ new EMenu("_Rotate", new EMenuItem("90 Degrees Clock_wise") { public void run() { CircuitChanges.rotateObjects(2700); }}, new EMenuItem("90 Degrees _Counterclockwise", 'J') { public void run() { CircuitChanges.rotateObjects(900); }}, new EMenuItem("180 _Degrees") { public void run() { CircuitChanges.rotateObjects(1800); }}, new EMenuItem("_Other...") { public void run() { CircuitChanges.rotateObjects(0); }}), // mnemonic keys available: ABCDEFGHIJK MNOPQRST VWXYZ new EMenu("_Mirror", new EMenuItem("_Up <-> Down") { public void run() { CircuitChanges.mirrorObjects(true); }}, new EMenuItem("_Left <-> Right") { public void run() { CircuitChanges.mirrorObjects(false); }}), // mnemonic keys available: BCDEFGH JKLM OPQRSTUVWXYZ new EMenu("Si_ze", new EMenuItem("_Interactively", 'B') { public void run() { SizeListener.sizeObjects(); }}, new EMenuItem("All Selected _Nodes...") { public void run() { SizeListener.sizeAllNodes(); }}, new EMenuItem("All Selected _Arcs...") { public void run() { SizeListener.sizeAllArcs(); }}), // mnemonic keys available: DEFGHIJK NOPQ U WXYZ new EMenu("Mo_ve", new EMenuItem("_Spread...") { public void run() { Spread.showSpreadDialog(); }}, new EMenuItem("_Move Objects By...") { public void run() { MoveBy.showMoveByDialog(); }}, new EMenuItem("_Align to Grid") { public void run() { CircuitChanges.alignToGrid(); }},// SEPARATOR,// new EMenuItem("Move Objects Left", KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)) { public void run() {// moveSelected(-1, 0, false, false); }},// new EMenuItem("Move Objects Right", KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0)) { public void run() {// moveSelected(1, 0, false, false); }},// new EMenuItem("Move Objects Up", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)) { public void run() {// moveSelected(0, 1, false, false); }},// new EMenuItem("Move Objects Down", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)) { public void run() {// moveSelected(0, -1, false, false); }},// SEPARATOR,// new EMenuItem("Move Objects More Left", new KeyStroke [] { KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_DOWN_MASK),// KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, ctrl)}) { public void run() {// moveSelected(-1, 0, false, false); }},// new EMenuItem("Move Objects More Right", new KeyStroke [] { KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_DOWN_MASK),// KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, ctrl)}) { public void run() {// moveSelected(1, 0, false, false); }},// new EMenuItem("Move Objects More Up", new KeyStroke [] { KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_DOWN_MASK),// KeyStroke.getKeyStroke(KeyEvent.VK_UP, ctrl)}) { public void run() {// moveSelected(0, 1, false, false); }},// new EMenuItem("Move Objects More Down", new KeyStroke [] { KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.SHIFT_DOWN_MASK),// KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, ctrl)}) { public void run() {// moveSelected(0, -1, false, false); }},// SEPARATOR,// new EMenuItem("Move Objects Most Left", KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, ctrlShift)) { public void run() {// moveSelected(-1, 0, false, false); }},// new EMenuItem("Move Objects Most Right", KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, ctrlShift)) { public void run() {// moveSelected(1, 0, false, false); }},// new EMenuItem("Move Objects Most Up", KeyStroke.getKeyStroke(KeyEvent.VK_UP, ctrlShift)) { public void run() {// moveSelected(0, 1, false, false); }},// new EMenuItem("Move Objects Most Down", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, ctrlShift)) { public void run() {// moveSelected(0, -1, false, false); }}, SEPARATOR, new EMenuItem("Align Horizontally to _Left") { public void run() { CircuitChanges.alignNodes(true, 0); }}, new EMenuItem("Align Horizontally to _Right") { public void run() { CircuitChanges.alignNodes(true, 1); }}, new EMenuItem("Align Horizontally to _Center") { public void run() { CircuitChanges.alignNodes(true, 2); }}, SEPARATOR, new EMenuItem("Align Vertically to _Top") { public void run() { CircuitChanges.alignNodes(false, 0); }}, new EMenuItem("Align Vertically to _Bottom") { public void run() { CircuitChanges.alignNodes(false, 1); }}, new EMenuItem("Align _Vertically to Center") { public void run() { CircuitChanges.alignNodes(false, 2); }}), SEPARATOR, // mnemonic keys available: CDEFGHIJKLMNOPQR TUVWXYZ new EMenu("_Erase", new EMenuItem("_Selected", KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)) { public void run() { CircuitChanges.deleteSelected(); }}, new EMenuItem("_Arcs Connected to Selected Nodes") { public void run() { CircuitChanges.deleteArcsOnSelected(false); }}, new EMenuItem("Arcs Connected _Between Selected Nodes") { public void run() { CircuitChanges.deleteArcsOnSelected(true); }}), new EMenuItem("_Array...", KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0)) { public void run() { Array.showArrayDialog(); }}, new EMenuItem("C_hange...", KeyStroke.getKeyStroke('C', 0)) { public void run() { Change.showChangeDialog(); }}, SEPARATOR, // mnemonic keys available: A CD FGHIJK M QRSTUVWXYZ new EMenu("Propert_ies", new EMenuItem("_Object Properties...", 'I') { public void run() { getInfoCommand(false); }}, SEPARATOR, new EMenuItem("Cell _Parameters...") { public void run() { Attributes.showDialog(); }}, new EMenuItem("Update Parameters on _Node") { public void run() { updateParameters(false); }}, new EMenuItem("Update Parameters all _Libraries") { public void run() { updateParameters(true); }}, SEPARATOR, new EMenuItem("Parameterize _Bus Name") { public void run() { BusParameters.makeBusParameter(); }}, new EMenuItem("_Edit Bus Parameters...") { public void run() { BusParameters.showBusParametersDialog(); }}), // mnemonic keys available: E G I KL PQ S VWXYZ new EMenu("Ar_c", new EMenuItem("_Rigid") { public void run() { CircuitChanges.arcRigidCommand(); }}, new EMenuItem("_Not Rigid") { public void run() { CircuitChanges.arcNotRigidCommand(); }}, new EMenuItem("_Fixed Angle") { public void run() { CircuitChanges.arcFixedAngleCommand(); }}, new EMenuItem("Not Fixed _Angle") { public void run() { CircuitChanges.arcNotFixedAngleCommand(); }}, SEPARATOR, new EMenuItem("Toggle _Directionality") { public void run() { CircuitChanges.arcDirectionalCommand(); }}, new EMenuItem("Toggle End Extension _of Both Head/Tail") { public void run() { CircuitChanges.arcHeadExtendCommand(); CircuitChanges.arcTailExtendCommand();}}, new EMenuItem("Toggle End Extension of _Head") { public void run() { CircuitChanges.arcHeadExtendCommand(); }}, new EMenuItem("Toggle End Extension of _Tail") { public void run() { CircuitChanges.arcTailExtendCommand(); }}, SEPARATOR, new EMenuItem("Insert _Jog In Arc") { public void run() { insertJogInArcCommand(); }}, new EMenuItem("Rip _Bus") { public void run() { CircuitChanges.ripBus(); }}, SEPARATOR, new EMenuItem("_Curve through Cursor") { public void run() { CurveListener.setCurvature(true); }}, new EMenuItem("Curve abo_ut Cursor") { public void run() { CurveListener.setCurvature(false); }}, new EMenuItem("Re_move Curvature") { public void run() { CurveListener.removeCurvature(); }}), ToolBar.modesSubMenu, // O // mnemonic keys available: AB GH JKLMNOPQRS UVWXYZ new EMenu("Te_xt", new EMenuItem("_Find Text...", 'L') { public void run() { FindText.findTextDialog(); }}, new EMenuItem("_Change Text Size...") { public void run() { ChangeText.changeTextDialog(); }}, new EMenuItem("_Increase All Text Size", '=') { public void run() { changeGlobalTextSize(1.25); }}, new EMenuItem("_Decrease All Text Size", '-') { public void run() { changeGlobalTextSize(0.8); }}, new EMenuItem("Add _Text Annotation", KeyStroke.getKeyStroke('T', 0)) { public void run() { PaletteFrame.placeInstance("ART_message", null, false); }}, new EMenuItem("Edit Text Cell _Externally...") { public void run() { editExternally(); }}), // mnemonic keys available: ABCD FGHIJK M O Q TUVWXYZ new EMenu("Clea_nup Cell", new EMenuItem("Cleanup _Pins") { public void run() { CircuitChanges.cleanupPinsCommand(false); }}, new EMenuItem("Cleanup Pins _Everywhere") { public void run() { CircuitChanges.cleanupPinsCommand(true); }}, new EMenuItem("Show _Nonmanhattan") { public void run() { CircuitChanges.showNonmanhattanCommand(); }}, new EMenuItem("Show Pure _Layer Nodes") { public void run() { CircuitChanges.showPureLayerCommand(); }}, new EMenuItem("_Shorten Selected Arcs") { public void run() { CircuitChanges.shortenArcsCommand(); }}, new EMenuItem("Show _Redundant Pure-Layer Nodes") { public void run() { CircuitChanges.showRedundantPureLayerNodes(); }}), // mnemonic keys available: DE GHIJKLM OPQRSTUVWXYZ new EMenu("Technology Speci_fic", new EMenuItem("Toggle Port _Negation", 'T') { public void run() { CircuitChanges.toggleNegatedCommand(); }}, new EMenuItem("_Artwork Color and Pattern...") { public void run() { ArtworkLook.showArtworkLookDialog(); }}, SEPARATOR, new EMenuItem("Descri_be this Technology") { public void run() { describeTechnologyCommand(); }}, new EMenuItem("Do_cument Current Technology") { public void run() { Manipulate.describeTechnology(Technology.getCurrent()); }}, new EMenuItem("Write XML of Current Technology...") { public void run() { Technology tech = Technology.getCurrent(); Xml.Technology xmlTech = tech.getXmlTech(); if (xmlTech == null) xmlTech = tech.makeXml(); String fileName = tech.getTechName() + ".xml"; fileName = OpenFile.chooseOutputFile(FileType.XML, "Technology XML File", fileName);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -