/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: ViewMenu.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.Main;
import com.sun.electric.database.hierarchy.Cell;
import com.sun.electric.database.hierarchy.View;
import com.sun.electric.tool.Job;
import com.sun.electric.tool.user.User;
import com.sun.electric.tool.user.ViewChanges;
import com.sun.electric.tool.user.dialogs.ViewControl;
import com.sun.electric.tool.user.ui.WindowFrame;
import java.util.List;
import javax.swing.JOptionPane;
/**
* Class to handle the commands in the "View" pulldown menu.
*/
public class ViewMenu {
static EMenu makeMenu() {
/****************************** THE VIEW MENU ******************************/
// mnemonic keys available: B DEF J MN PQR X Z
return new EMenu("_View",
new EMenuItem("View _Control...") { public void run() {
viewControlCommand(); }},
new EMenuItem("Chan_ge Cell's View...") { public void run() {
changeViewCommand(); }},
SEPARATOR,
new EMenuItem("Edit La_yout View") { public void run() {
editLayoutViewCommand(); }},
new EMenuItem("Edit Schema_tic View") { public void run() {
editSchematicViewCommand(); }},
new EMenuItem("Edit Ic_on View") { public void run() {
editIconViewCommand(); }},
new EMenuItem("Edit V_HDL View") { public void run() {
editVHDLViewCommand(); }},
new EMenuItem("Edit Document_ation View") { public void run() {
editDocViewCommand(); }},
new EMenuItem("Edit S_keleton View") { public void run() {
editSkeletonViewCommand(); }},
new EMenuItem("Edit Other Vie_w...") { public void run() {
editOtherViewCommand(); }},
SEPARATOR,
new EMenuItem("Make _Icon View") { public void run() {
ViewChanges.makeIconViewCommand(); }},
new EMenuItem("Make _Schematic View") { public void run() {
ViewChanges.makeSchematicView(); }},
new EMenuItem("Make Alternate Layo_ut View...") { public void run() {
ViewChanges.makeLayoutView(); }},
new EMenuItem("Make Ske_leton View") { public void run() {
ViewChanges.makeSkeletonViewCommand(); }},
new EMenuItem("Make _VHDL View") { public void run() {
ToolMenu.makeVHDL(); }});
}
/**
* This method implements the command to control Views.
*/
public static void viewControlCommand()
{
ViewControl dialog = new ViewControl(Main.getCurrentJFrame());
dialog.setVisible(true);
}
public static void changeViewCommand()
{
Cell cell = WindowFrame.getCurrentCell();
if (cell == null) return;
if (cell.getView() == View.ICON)
{
Job.getUserInterface().showErrorMessage("Icon cells are special and cannot have their views changed",
"Cannot change view");
return;
}
List<View> views = View.getOrderedViews();
String [] viewNames = new String[views.size()];
int j = 0;
for(int i=0; i<views.size(); i++)
{
if (views.get(i) == View.ICON) continue;
viewNames[j++] = views.get(i).getFullName();
}
viewNames[j] = "Icon (cannot change into Icon view)";
Object newName = JOptionPane.showInputDialog(Main.getCurrentJFrame(), "New view for this cell",
"Choose alternate view", JOptionPane.QUESTION_MESSAGE, null, viewNames, cell.getView().getFullName());
if (newName == null) return;
String newViewName = (String)newName;
View newView = View.findView(newViewName);
if (newView != null && newView != cell.getView())
{
ViewChanges.changeCellView(cell, newView);
}
}
public static void editLayoutViewCommand()
{
editView(View.LAYOUT);
}
public static void editSchematicViewCommand()
{
editView(View.SCHEMATIC);
}
public static void editIconViewCommand()
{
editView(View.ICON);
}
public static void editVHDLViewCommand()
{
editView(View.VHDL);
}
public static void editDocViewCommand()
{
editView(View.DOC);
}
public static void editSkeletonViewCommand()
{
editView(View.LAYOUTSKEL);
}
public static void editOtherViewCommand()
{
Cell curCell = WindowFrame.needCurCell();
if (curCell == null) return;
List<View> views = View.getOrderedViews();
String [] viewNames = new String[views.size()];
for(int i=0; i<views.size(); i++)
viewNames[i] = views.get(i).getFullName();
Object newName = JOptionPane.showInputDialog(Main.getCurrentJFrame(), "Which associated view do you want to see?",
"Choose alternate view", JOptionPane.QUESTION_MESSAGE, null, viewNames, curCell.getView().getFullName());
if (newName == null) return;
String newViewName = (String)newName;
View newView = View.findView(newViewName);
editView(newView);
}
private static void editView(View v)
{
Cell curCell = WindowFrame.needCurCell();
if (curCell == null) return;
if (curCell.getView() == v)
{
System.out.println("Cell " + curCell.describe(false) + " is already the " + v.getFullName() + " view");
return;
}
Cell otherCell = curCell.otherView(v);
if (otherCell != null)
{
WindowFrame wf = WindowFrame.getCurrentWindowFrame();
if (User.isShowCellsInNewWindow()) wf = null;
if (wf == null) wf = WindowFrame.createEditWindow(otherCell);
wf.setCellWindow(otherCell, null);
return;
}
String [] options = {"Yes", "No"};
int ret = Job.getUserInterface().askForChoice("There is no " + v.getFullName() + " view of " + curCell +
"\nDo you want to create an empty cell?", "Create " + v.getFullName() + " View", options, "No");
if (ret == 1) return;
new ViewChanges.CreateAndViewCell(curCell.getName() + "{" + v.getAbbreviation() + "}", curCell.getLibrary());
}
}