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

📄 librarydialog.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: Project.java * Project management tool * Written by: Steven M. Rubin * * Copyright (c) 2005 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.project;import com.sun.electric.database.hierarchy.Library;import com.sun.electric.database.text.TextUtils;import com.sun.electric.tool.Job;import com.sun.electric.tool.JobException;import com.sun.electric.tool.user.dialogs.EDialog;import com.sun.electric.tool.user.ui.WindowFrame;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.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JList;import javax.swing.JScrollPane;import javax.swing.ListSelectionModel;/** * This is the Project Management tool. */public class LibraryDialog extends EDialog{	private JList libList;	private DefaultListModel libModel;	/**	 * Method to prompt for all libraries in the repository and	 * choose one to retrieve.	 */	public static void getALibrary()	{		Project.pmActive = true;		// find a list of files (libraries) in the repository		String dirName = Project.getRepositoryLocation();		File dir = new File(dirName);		File [] filesInDir = dir.listFiles();		if (filesInDir == null && dirName.length() == 0)		{			Job.getUserInterface().showInformationMessage("No repository location is set.  Use the 'Project Management' Preferences to set it.", "Warning");			return;		}		// choose one and read it in		new LibraryDialog(filesInDir);	}	LibraryDialog(File [] filesInDir)	{		super(null, true);		initComponents(filesInDir);		setVisible(true);	}	protected void escapePressed() { doButton(false); }	private void doButton(boolean retrieve)	{		if (retrieve)		{			int index = libList.getSelectedIndex();			String libName = (String)libModel.getElementAt(index);			new RetrieveLibraryFromRepositoryJob(libName);		}		dispose();	}	private void initComponents(File [] filesInDir)	{		getContentPane().setLayout(new GridBagLayout());		setTitle("Retrieve a Library from the Repository");		setName("");		addWindowListener(new WindowAdapter()		{			public void windowClosing(WindowEvent evt) { doButton(false); }		});		JScrollPane libPane = new JScrollPane();		libModel = new DefaultListModel();		libList = new JList(libModel);		libList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);		libPane.setViewportView(libList);		libList.clearSelection();		libList.addMouseListener(new MouseAdapter()		{			public void mouseClicked(MouseEvent e)			{				if (e.getClickCount() == 2) doButton(true);			}		});		// consider the files in the repository, too//		String dirName = Project.getRepositoryLocation();//		File dir = new File(dirName);//		File [] filesInDir = dir.listFiles();//		if (filesInDir == null && dirName.length() == 0)//		{//			Job.getUserInterface().showInformationMessage("No repository location is set.  Use the 'Project Management' Preferences to set it.", "Warning");//		}//		if (filesInDir != null)		{			List<String> libNames = new ArrayList<String>();			for(int i=0; i<filesInDir.length; i++)			{				File subFile = filesInDir[i];				if (subFile.isDirectory())					libNames.add(subFile.getName());			}			Collections.sort(libNames, new TextUtils.ObjectsByToString());			for(String libName : libNames)			{				libModel.addElement(libName);			}		}		GridBagConstraints gbc = new GridBagConstraints();		gbc.gridx = 0;   gbc.gridy = 0;		gbc.gridwidth = 2;		gbc.weightx = gbc.weighty = 1;		gbc.fill = GridBagConstraints.BOTH;		gbc.insets = new Insets(4, 4, 4, 4);		getContentPane().add(libPane, gbc);		// OK and Cancel		JButton ok = new JButton("OK");		getRootPane().setDefaultButton(ok);		gbc = new GridBagConstraints();		gbc.gridx = 1;   gbc.gridy = 1;		gbc.anchor = GridBagConstraints.CENTER;		gbc.insets = new Insets(4, 4, 4, 4);		getContentPane().add(ok, gbc);		ok.addActionListener(new ActionListener()		{			public void actionPerformed(ActionEvent evt) { doButton(true); }		});		JButton cancel = new JButton("Cancel");		gbc = new GridBagConstraints();		gbc.gridx = 0;   gbc.gridy = 1;		gbc.anchor = GridBagConstraints.CENTER;		gbc.insets = new Insets(4, 4, 4, 4);		getContentPane().add(cancel, gbc);		cancel.addActionListener(new ActionListener()		{			public void actionPerformed(ActionEvent evt) { doButton(false); }		});		pack();	}	/**	 * This class gets a library from the Project Management repository.	 */	private static class RetrieveLibraryFromRepositoryJob extends Job	{		private ProjectDB pdb;		private String libName;		private RetrieveLibraryFromRepositoryJob(String libName)		{			super("Retrieve Library from Repository", Project.getProjectTool(), Job.Type.CHANGE, null, null, Job.Priority.USER);			this.pdb = Project.projectDB;			this.libName = libName;			startJob();		}		public boolean doIt() throws JobException		{			Library lib = Library.findLibrary(libName);			if (lib != null)				throw new JobException("Library '" + lib.getName() + "' already exists");			lib = Library.newInstance(libName, null);			String projFile = Project.getRepositoryLocation() + File.separator + libName + File.separator + Project.PROJECTFILE;			File pf = new File(projFile);			if (!pf.exists())				throw new JobException("Cannot find project file '" + projFile + "'...retrieve aborted.");			lib.newVar(Project.PROJPATHKEY, projFile);			ProjectLibrary pl = pdb.findProjectLibrary(lib);			// prevent tools (including this one) from seeing the change			Project.setChangeStatus(true);			// make a list of the most recent cells that are not checked-out			List<ProjectCell> cellsToGet = new ArrayList<ProjectCell>();			String lastName = "";			for(Iterator<ProjectCell> it = pl.getProjectCells(); it.hasNext(); )			{				ProjectCell pc = it.next();				String name = pc.describe();				if (pc.getOwner().length() > 0) continue;				if (name.equals(lastName)) cellsToGet.remove(cellsToGet.size()-1);				cellsToGet.add(pc);				lastName = name;			}//System.out.println("BEFORE:================================");//for(ProjectLibrary pll : pdb.getProjectLibraries())//{//	for(Iterator<ProjectCell> it = pll.getProjectCells(); it.hasNext(); )//	{//		ProjectCell pc = it.next();//		System.out.println("PL="+pll.getLibrary().getName()+" PC="+pc.describe());//	}//}			// check them out			String userName = Project.getCurrentUserName();			for(ProjectCell pc : cellsToGet)			{				if (pc.getCell() == null)				{					Project.getCellFromRepository(pdb, pc, lib, true, true);		// CHANGES DATABASE					if (pc.getCell() == null)					{						Project.setChangeStatus(false);						throw new JobException("Error retrieving old version of cell");					}				}				if (pc.getCell() != null)				{					boolean youOwn = userName.length() > 0 && pc.getOwner().equals(userName);					Project.markLocked(pc.getCell(), !youOwn);		// CHANGES DATABASE				}			}			// allow changes			Project.setChangeStatus(false);//System.out.println("AFTER:================================");//for(ProjectLibrary pll : pdb.getProjectLibraries())//{//	for(Iterator<ProjectCell> it = pll.getProjectCells(); it.hasNext(); )//	{//		ProjectCell pc = it.next();//		System.out.println("PL="+pll.getLibrary().getName()+" PC="+pc.describe());//	}//}			System.out.println("Library " + lib.getName() + " has been retrieved from the repository");			fieldVariableChanged("pdb");			return true;		}	    public void terminateOK()        {        	// take the new version of the project database from the server			Project.projectDB = pdb;			// update explorer tree			WindowFrame.wantToRedoLibraryTree();        }	}}

⌨️ 快捷键说明

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