📄 projectsettingsframe.java
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: ProjectSettingsFrame.java * * Copyright (c) 2006 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.dialogs;import com.sun.electric.database.hierarchy.Library;import com.sun.electric.database.text.Setting;import com.sun.electric.technology.Technology;import com.sun.electric.tool.Job;import com.sun.electric.tool.JobException;import com.sun.electric.tool.io.IOTool;import com.sun.electric.tool.user.CircuitChangeJobs;import com.sun.electric.tool.user.CircuitChanges;import com.sun.electric.tool.user.User;import com.sun.electric.tool.user.dialogs.projsettings.AddedTechnologiesTab;import com.sun.electric.tool.user.dialogs.projsettings.CIFTab;import com.sun.electric.tool.user.dialogs.projsettings.DXFTab;import com.sun.electric.tool.user.dialogs.projsettings.GDSTab;import com.sun.electric.tool.user.dialogs.projsettings.LogicalEffortTab;import com.sun.electric.tool.user.dialogs.projsettings.NetlistsTab;import com.sun.electric.tool.user.dialogs.projsettings.ParasiticTab;import com.sun.electric.tool.user.dialogs.projsettings.ProjSettingsPanel;import com.sun.electric.tool.user.dialogs.projsettings.ScaleTab;import com.sun.electric.tool.user.dialogs.projsettings.SkillTab;import com.sun.electric.tool.user.dialogs.projsettings.TechnologyTab;import com.sun.electric.tool.user.dialogs.projsettings.VerilogTab;import com.sun.electric.tool.user.help.ManualViewer;import com.sun.electric.tool.user.projectSettings.ProjSettings;import com.sun.electric.tool.user.ui.TopLevel;import java.awt.Frame;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.swing.JButton;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTree;import javax.swing.event.TreeExpansionEvent;import javax.swing.event.TreeExpansionListener;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath;/** * Class to handle the "Project Settings" dialog. */public class ProjectSettingsFrame extends EDialog{ private JSplitPane splitPane; private JTree optionTree; private HashMap<Setting,Object> originalContext = new HashMap<Setting,Object>(); private HashMap<Setting,Object> currentContext = new HashMap<Setting,Object>(); private JButton cancel; private JButton ok; private ProjSettingsPanel currentOptionPanel; private DefaultMutableTreeNode currentDMTN; /** The name of the current tab in this dialog. */ private static String currentTabName = "Netlists"; private static String staClass = "com.sun.electric.plugins.sctiming.STAOptionsDialog"; /** * This method implements the command to show the Project Settings dialog. */ public static void projectSettingsCommand() { ProjectSettingsFrame dialog = new ProjectSettingsFrame(TopLevel.getCurrentJFrame()); dialog.setVisible(true); } /** Creates new form ProjectSettingsFrame */ public ProjectSettingsFrame(Frame parent) { super(parent, true); for (Setting setting: Setting.getSettings()) { originalContext.put(setting, setting.getValue()); currentContext.put(setting, setting.getValue()); } getContentPane().setLayout(new GridBagLayout()); setTitle("Project Settings"); setName(""); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { closeDialog(evt); } }); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Project Settings"); DefaultTreeModel treeModel = new DefaultTreeModel(rootNode); optionTree = new JTree(treeModel); TreeHandler handler = new TreeHandler(this); optionTree.addMouseListener(handler); optionTree.addTreeExpansionListener(handler); addTreeNode(rootNode, "Added Technologies"); addTreeNode(rootNode, "CIF"); addTreeNode(rootNode, "GDS"); addTreeNode(rootNode, "DXF");// addTreeNode(rootNode, "Gate Layout Generator"); addTreeNode(rootNode, "Logical Effort"); addTreeNode(rootNode, "Netlists"); addTreeNode(rootNode, "Parasitic"); addTreeNode(rootNode, "Scale"); if (IOTool.hasSkill()) addTreeNode(rootNode, "Skill"); addTreeNode(rootNode, "Technology"); addTreeNode(rootNode, "Verilog"); if (getPluginPanel(staClass, this, true) != null) addTreeNode(rootNode, "Static Timing Analysis"); // pre-expand the tree TreePath topPath = optionTree.getPathForRow(0); optionTree.expandPath(topPath); topPath = optionTree.getPathForRow(1); optionTree.expandPath(topPath); // searching for selected node openSelectedPath(rootNode); // the left side of the Project Settings dialog: a tree JPanel leftPanel = new JPanel(); leftPanel.setLayout(new GridBagLayout()); JScrollPane scrolledTree = new JScrollPane(optionTree); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 2; gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1.0; gbc.weighty = 1.0; leftPanel.add(scrolledTree, gbc);// JButton save = new JButton("Export");// save.addActionListener(new ActionListener()// {// public void actionPerformed(ActionEvent evt) { exportActionPerformed(); }// });// gbc = new GridBagConstraints();// gbc.gridx = 0; gbc.gridy = 1;// gbc.insets = new Insets(4, 4, 4, 4);// leftPanel.add(save, gbc);// JButton restore = new JButton("Import");// restore.addActionListener(new ActionListener()// {// public void actionPerformed(ActionEvent evt) { importActionPerformed(); }// });// gbc = new GridBagConstraints();// gbc.gridx = 1; gbc.gridy = 1;// gbc.insets = new Insets(4, 4, 4, 4);// leftPanel.add(restore, gbc); JButton help = new JButton("Help"); help.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { helpActionPerformed(); } }); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 2; gbc.insets = new Insets(4, 4, 4, 4); leftPanel.add(help, gbc); cancel = new JButton("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { cancelActionPerformed(); } }); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 3; gbc.insets = new Insets(4, 4, 4, 4); leftPanel.add(cancel, gbc); ok = new JButton("OK"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { okActionPerformed(); } }); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 3; gbc.insets = new Insets(4, 4, 4, 4); leftPanel.add(ok, gbc); getRootPane().setDefaultButton(ok); getRootPane().setDefaultButton(ok); // build Project Settings framework splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); loadOptionPanel(); recursivelyHighlight(optionTree, rootNode, currentDMTN, optionTree.getPathForRow(0)); splitPane.setLeftComponent(leftPanel); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1.0; gbc.weighty = 1.0; getContentPane().add(splitPane, gbc); pack(); finishInitialization(); } private void addTreeNode(DefaultMutableTreeNode rootNode, String name) { DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode(name); rootNode.add(dmtn); if (name.equals(currentTabName)) currentDMTN = dmtn; } public Map<Setting,Object> getContext() { return currentContext; } private boolean openSelectedPath(DefaultMutableTreeNode rootNode) { for (int i = 0; i < rootNode.getChildCount(); i++) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)rootNode.getChildAt(i); Object o = node.getUserObject(); if (o.toString().equals(currentTabName))//indexOf(currentTabName) != -1) { optionTree.scrollPathToVisible(new TreePath(node.getPath())); return true; } if (openSelectedPath(node)) return true; } return false; } private void cancelActionPerformed() { closeDialog(null); } private void okActionPerformed() { Setting.SettingChangeBatch changeBatch = new Setting.SettingChangeBatch();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -