com.sun.electric.tool.DialogJob Maven / Gradle / Ivy
/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: DialogJob.java
*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
*
* 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;
import com.sun.electric.database.*;
import com.sun.electric.tool.Job.Type;
import com.sun.electric.tool.*;
import com.sun.electric.tool.user.*;
import com.sun.electric.tool.user.dialogs.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* A Job which takes parameters; the parameters may be specified
* programmatically or via a dialog box which is constructed on the
* fly using reflection. In the future this class will also handle
* the drudgery of remembering the last values in all of the dialog's
* fields so the programmer doesn't have to write that code by hand.
*
* Much like emacs, most of Electric's functionality can be invoked
* in two different ways: programmatically from scripts/code, or
* interactively via a graphical user interface. It is rather
* tedious to have to maintain these two interfaces separately and
* keeping them consistent is error-prone. Therefore, the DialogJob
* class lets a programmer write only the programmatic interface (the
* Job's constructor), annotate it appropriately, and have the
* graphical user interface be generated automatically (like emacs
* does). The added advantage is that the dialog box acts as
* documentation for the scripting API: a script-writer who wants to
* know how to script some feature need only look at the dialog box's
* field labels in order to know how to invoke that feature
* programmatically.
*
* This code will scan the public fields of the class in which it
* finds itself (subclasses are expected to add fields); any field
* whose name both begins and ends with an underscore is treated as a
* dialog field. The type of user interface component to instantiate
* is determined by the field's type; the following types are
* understood, any other type is illegal:
*
* String - a JTextArea
* int - a JTextArea
* long - a JTextArea
* float - a JTextArea
* double - a JTextArea
* File - a button which pops up a "choose file" dialog
*
* There are a few special fields which are used to indicate that the
* Job is only meaningful when the current window is looking at a
* particular kind of thing. Error handling (for the case where the
* user invokes the Job in another situation) is handled in this
* class so that it need not be repeated.
*
* public Cell _thisCell_;
* public WaveformWindow _thisWaveformWindow_;
*
* @author Adam Megacz
*/
public abstract class DialogJob extends Job {
public DialogJob(String jobName, Job.Type jobType) {
super(jobName, User.getUserTool(), jobType, null, null, Job.Priority.USER);
/*
new DialogJobDialog().show();
*/
}
private class DialogJobDialog extends EDialog {
public DialogJobDialog() {
super(/*parentFrame*/null, false);
}
public void submit() {
DialogJob.this.startJob();
}
}
/** subclasses should override this */
public abstract boolean doIt() throws JobException;
}