|
From: <pat...@us...> - 2011-02-18 15:44:59
|
Revision: 1224
http://cishell.svn.sourceforge.net/cishell/?rev=1224&view=rev
Author: pataphil
Date: 2011-02-18 15:44:52 +0000 (Fri, 18 Feb 2011)
Log Message:
-----------
* Trying to fix the build.
Modified Paths:
--------------
trunk/core/org.cishell.reference/META-INF/MANIFEST.MF
trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/FileFormatSelector.java
Added Paths:
-----------
trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/AbstractDialog.java
Modified: trunk/core/org.cishell.reference/META-INF/MANIFEST.MF
===================================================================
--- trunk/core/org.cishell.reference/META-INF/MANIFEST.MF 2011-02-18 15:27:33 UTC (rev 1223)
+++ trunk/core/org.cishell.reference/META-INF/MANIFEST.MF 2011-02-18 15:44:52 UTC (rev 1224)
@@ -8,9 +8,6 @@
org.cishell.framework;version="1.0.0",
org.cishell.framework.algorithm;version="1.0.0",
org.cishell.framework.data;version="1.0.0",
- org.cishell.reference.gui.guibuilder.swt,
- org.cishell.reference.gui.guibuilder.swt.builder,
- org.cishell.reference.gui.guibuilder.swt.builder.components,
org.cishell.service.algorithminvocation,
org.cishell.service.conversion;version="1.0.0",
org.cishell.service.guibuilder;version="1.0.0",
Added: trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/AbstractDialog.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/AbstractDialog.java (rev 0)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/AbstractDialog.java 2011-02-18 15:44:52 UTC (rev 1224)
@@ -0,0 +1,490 @@
+/*
+ * InfoVis CyberInfrastructure: A Data-Code-Compute Resource for Research
+ * and Education in Information Visualization (http://iv.slis.indiana.edu/).
+ *
+ * Created on Feb 22, 2005 at Indiana University.
+ */
+package org.cishell.reference.app.service.fileloader;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Dialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * This class provides a DialogBox structure that can be extended to create Dialogs for CIShell.
+ * This framework will enforce consistency in the look and feel of Dialogs in CIShell by providing a
+ * standard layout of description, content, and buttons[, along with a choice of icon images
+ * defined as constants in this class]. An optional details section allows the Dialog designer
+ * to provide additional information when the details button is pressed.
+ *
+ * @author Team IVC
+ */
+public abstract class AbstractDialog extends Dialog {
+ private static final int DETAILS_HEIGHT = 75;
+
+ public static Image INFORMATION;
+ public static Image WARNING;
+ public static Image ERROR;
+ public static Image QUESTION;
+ public static Image WORKING;
+
+ static {
+ Runnable runner = new Runnable() {
+ public void run() {
+ INFORMATION = Display.getDefault().getSystemImage(SWT.ICON_INFORMATION);
+ WARNING = Display.getDefault().getSystemImage(SWT.ICON_WARNING);
+ ERROR = Display.getDefault().getSystemImage(SWT.ICON_ERROR);
+ QUESTION = Display.getDefault().getSystemImage(SWT.ICON_QUESTION);
+ WORKING = Display.getDefault().getSystemImage(SWT.ICON_WORKING);
+ }};
+
+ if (Display.getDefault().getThread() == Thread.currentThread()) {
+ runner.run();
+ } else {
+ Display.getDefault().asyncExec(runner);
+ }
+ }
+
+
+ private String description = "";
+ private String detailsString = "";
+ private Text detailsText;
+ private Shell shell;
+ private Image image;
+ private boolean success;
+ private Composite header;
+ private Composite content;
+ private Composite buttons;
+ private Shell parent;
+
+ /**
+ * Creates a new AbstractDialog object.
+ *
+ * @param parent the parent Shell of this AbstractDialog
+ * @param title the title to put in the title bar of this AbstractDialog
+ * @param image the Image to display to the left of the description specified
+ * for this AbstractDialog. This will usually be one of:
+ * <ul>
+ * <li>AbstractDialog.WARNING</li>
+ * <li>AbstractDialog.INFORMATION</li>
+ * <li>AbstractDialog.ERROR</li>
+ * <li>AbstractDialog.WORKING</li>
+ * <li>AbstractDialog.QUESTION</li>
+ * </ul>
+ */
+ public AbstractDialog(Shell parent, String title, Image image) {
+ super(parent, 0);
+ setText(title);
+ this.image = image;
+ this.parent = parent;
+ init();
+ }
+
+ /**
+ * Closes this AbstractDialog.
+ *
+ * @param success true if the dialog was successful, false if it
+ * was cancelled by the user (or closed prematurely)
+ */
+ public void close(boolean success){
+ shell.dispose();
+ this.success = success;
+ }
+
+ /**
+ * Returns the shell used by this AbstractDialog
+ *
+ * @return the shell used by this AbstractDialog
+ */
+ public Shell getShell(){
+ return shell;
+ }
+
+ /**
+ * Initializes this AbstractDialog. This consists of resetting all of the
+ * customizable components like the content area, details pane, buttons,
+ * and description label, and readying the dialog to be refilled with
+ * new content.
+ */
+ public void init(){
+ if(shell != null)
+ shell.dispose();
+
+ shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
+
+ if (parent != null)
+ shell.setImage(parent.getImage());
+
+ shell.setText(getText());
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ shell.setLayout(layout);
+ }
+
+ /**
+ * Opens this AbstractDialog.
+ *
+ * @return true if this AbstractDialog was closed by clicking the 'x' in the upper right
+ * corner of the window, signifying a cancellation, false if the dialog is exited otherwise.
+ */
+ public boolean open() {
+ if (shell.getDisplay().getThread() == Thread.currentThread()) {
+ doOpen();
+ } else {
+ shell.getDisplay().syncExec(new Runnable() {
+ public void run() {
+ doOpen();
+ }});
+ }
+
+ Display display = getParent().getDisplay();
+
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+
+ return success;
+ }
+
+ protected void doOpen() {
+ success = true;
+
+ setupHeader();
+ setupContent();
+ setupButtons();
+
+ shell.pack();
+ setLocation();
+ shell.open();
+ shell.addShellListener(new ShellAdapter(){
+ public void shellClosed(ShellEvent e) {
+ success = false;
+ }
+ });
+ }
+
+ /*
+ * centers the dialog on its parents shell
+ */
+ private void setLocation(){
+ Point parentLocation = parent.getLocation();
+ int parentWidth = parent.getSize().x;
+ int parentHeight = parent.getSize().y;
+ int shellWidth = shell.getSize().x;
+ int shellHeight = shell.getSize().y;
+
+ int x = parentLocation.x + (parentWidth - shellWidth)/2;
+ int y = parentLocation.y + (parentHeight - shellHeight)/2;
+ shell.setLocation(x, y);
+ }
+
+ /**
+ * Sets the Description of this AbstractDialog. This is the textField that is displayed in the
+ * top section of the Dialog window, giving information about the question that is being
+ * asked or the information that is being given.
+ *
+ * @param description the description for this AbstractDialog to use
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Sets the details textField of this AbstractDialog. This is the textField that is displayed in the lower
+ * section of the Dialog window when the user presses the "Details >>" button. If this String
+ * is null or the empty string, the details button will be disabled.
+ *
+ * @param details DOCUMENT ME!
+ */
+ public void setDetails(String details) {
+ this.detailsString = details;
+ }
+
+ /**
+ * Creates the Buttons to use in this AbstractDialog based on the given parent. These are
+ * the buttons that show up at the bottom of the dialog for user input, such as a
+ * "Yes/No" group or "Continue/Cancel" or something like that. This does not encompass all
+ * Buttons created in the dialog (such as those created in the content section), just those
+ * to display at the bottom of the dialog.
+ *
+ * @param parent the parent to be used to create the Buttons for this AbstractDialog
+ */
+ public abstract void createDialogButtons(Composite parent);
+
+ /**
+ * Creates the content section of this AbstractDialog based on the given parent.
+ * This section is where all of the "guts" of the AbstractDialog go, specifying the controls
+ * that are needed to interact with the user and provide whatever questions or information
+ * are needed.
+ *
+ * @param parent the parent to be used to create the Buttosn for this AbstractDialog
+ *
+ * @return the Composite that is created to display the content of this AbstractDialog
+ */
+ public abstract Composite createContent(Composite parent);
+
+ /*
+ * Sets up the header section of the dialog. This section contains the image for the
+ * type of dialog it is, as well as the description label
+ */
+ private void setupHeader() {
+ header = new Composite(shell, SWT.NONE);
+ header.setLayoutData(new GridData(GridData.FILL_BOTH));
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ header.setLayout(layout);
+
+ Label canvas = new Label(header, SWT.NONE);
+ if (image != null) {
+ canvas.setImage(image);
+ }
+ GridData canvasData = new GridData();
+ canvasData.heightHint = image.getBounds().height;
+ canvas.setLayoutData(canvasData);
+
+ Label desc = new Label(header, SWT.WRAP);
+
+ if ((description != null) && !description.equals("")) {
+ desc.setText(description);
+ }
+ }
+
+ /*
+ * sets up the content section of the dialog, this calls the abstract method to
+ * create the content that must be implemented by all subclasses
+ */
+ private void setupContent() {
+ content = createContent(shell);
+
+ if (content != null) {
+ content.setLayoutData(new GridData(GridData.FILL_BOTH));
+ }
+ }
+
+ /*
+ * sets up the button section in the bottom of the dialog. These buttons
+ * are created in the abstract method createDialogButtons(parent). In addition to
+ * any created buttons, a "Details >>" button is added to allow the user to see any
+ * details that are available in the current Dialog.
+ */
+ private void setupButtons() {
+ buttons = new Composite(shell, SWT.NONE);
+ buttons.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END));
+
+ //there are two sections, all the user stuff to the left, and
+ //then the details button on the far right
+ //User Buttons Section
+ createDialogButtons(buttons);
+ Control[] controls = buttons.getChildren();
+ GridLayout buttonsLayout = new GridLayout();
+ buttonsLayout.numColumns = controls.length + 1;
+ buttonsLayout.makeColumnsEqualWidth = true;
+ buttons.setLayout(buttonsLayout);
+
+ //setup the grid data for each button for standard look
+ for (int i = 0; i < controls.length; i++) {
+ controls[i].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ //Details Button section
+ final Button details = new Button(buttons, SWT.PUSH);
+ details.setText("Details >>");
+ details.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ details.addSelectionListener(new SelectionAdapter() {
+ public synchronized void widgetSelected(SelectionEvent e) {
+ GridData data = (GridData) detailsText.getLayoutData();
+
+ if (detailsText.getVisible()) {
+ detailsText.setText("");
+ details.setText("Details >>");
+ data.heightHint = 0;
+ data.grabExcessHorizontalSpace = false;
+ data.grabExcessVerticalSpace = false;
+ } else {
+ detailsText.setText(detailsString);
+ details.setText("Details <<");
+ data.heightHint = DETAILS_HEIGHT;
+ data.grabExcessHorizontalSpace = true;
+ data.grabExcessVerticalSpace = true;
+ }
+
+ detailsText.setLayoutData(data);
+ detailsText.setVisible(!detailsText.getVisible());
+
+ shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ shell.layout();
+ }
+ });
+
+ setupDetails();
+ details.setEnabled(detailsString != null && !detailsString.equals(""));
+ }
+
+ /*
+ * creates the details textField box when the "Details >>" button is toggled
+ */
+ private void setupDetails() {
+ detailsText = new Text(shell, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+ detailsText.setEditable(false);
+ detailsText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+
+ GridData data = new GridData(GridData.FILL_BOTH |
+ GridData.GRAB_VERTICAL | GridData.GRAB_HORIZONTAL);
+ data.widthHint = 400;
+
+ detailsText.setLayoutData(data);
+ detailsText.setVisible(false);
+ }
+
+ /**
+ * Open a standard error dialog with OK button
+ *
+ * @param parent the parent Shell of this dialog
+ * @param title the textField to display in the title bar of this dialog
+ * @param message the message to give in the dialog's body
+ * @param details the textField to put in the details pane to be visible when the
+ * "Details >>" button is pressed (can be null or empty, resulting
+ * in the "Details >>" button not being enabled)
+ * @return true if the dialog was exited by pressing the OK button, false
+ * if it was cancelled by pressing the 'x' in the title bar
+ */
+ public static boolean openError(Shell parent, String title, String message, String details){
+ return openOKDialog(parent, ERROR, title, message, details);
+ }
+
+ /**
+ * Open a standard information dialog with OK button
+ *
+ * @param parent the parent Shell of this dialog
+ * @param title the textField to display in the title bar of this dialog
+ * @param message the message to give in the dialog's body
+ * @param details the textField to put in the details pane to be visible when the
+ * "Details >>" button is pressed (can be null or empty, resulting
+ * in the "Details >>" button not being enabled) * @return true if the dialog was exited by pressing the OK button, false
+ * if it was cancelled by pressing the 'x' in the title bar
+ */
+ public static boolean openInformation(Shell parent, String title, String message, String details){
+ return openOKDialog(parent, INFORMATION, title, message, details);
+ }
+
+ /**
+ * Open a standard warning dialog with OK button
+ *
+ * @param parent the parent Shell of this dialog
+ * @param title the textField to display in the title bar of this dialog
+ * @param message the message to give in the dialog's body
+ * @param details the textField to put in the details pane to be visible when the
+ * "Details >>" button is pressed (can be null or empty, resulting
+ * in the "Details >>" button not being enabled) * @return true if the dialog was exited by pressing the OK button, false
+ * if it was cancelled by pressing the 'x' in the title bar
+ */
+ public static boolean openWarning(Shell parent, String title, String message, String details){
+ return openOKDialog(parent, WARNING, title, message, details);
+ }
+
+ /**
+ * Open a standard question dialog with Yes/No buttons
+ *
+ * @param parent the parent Shell of this dialog
+ * @param title the textField to display in the title bar of this dialog
+ * @param message the message to give in the dialog's body
+ * @param details the textField to put in the details pane to be visible when the
+ * "Details >>" button is pressed (can be null or empty, resulting
+ * in the "Details >>" button not being enabled) * @return true if the dialog was exited by pressing the OK button, false
+ * if it was cancelled by pressing the 'x' in the title bar or pressing the
+ * No button
+ */
+ public static boolean openQuestion(Shell parent, String title, String message, String details){
+ return openConfirmDenyDialog(parent, QUESTION, title, message, details, "Yes", "No");
+ }
+
+ /**
+ * Open a standard confirmation dialog with OK/Cancel buttons
+ *
+ * @param parent the parent Shell of this dialog
+ * @param title the textField to display in the title bar of this dialog
+ * @param message the message to give in the dialog's body
+ * @param details the textField to put in the details pane to be visible when the
+ * "Details >>" button is pressed (can be null or empty, resulting
+ * in the "Details >>" button not being enabled) * @return true if the dialog was exited by pressing the OK button, false
+ * if it was cancelled by pressing the 'x' in the title bar or pressing
+ * the Cancel button
+ */
+ public static boolean openConfirm(Shell parent, String title, String message, String details){
+ return openConfirmDenyDialog(parent, QUESTION, title, message, details, "OK", "Cancel");
+ }
+
+ /*
+ * helper to create OK dialogs: error, warning, information
+ */
+ private static boolean openOKDialog(Shell parent, Image image, String title, String message, String details){
+ AbstractDialog okDialog = new AbstractDialog(parent, title, image){
+ public void createDialogButtons(Composite parent) {
+ Button ok = new Button(parent, SWT.PUSH);
+ ok.setText("OK");
+ ok.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e) {
+ close(true);
+ }
+ });
+ }
+
+ public Composite createContent(Composite parent) {
+ return null;
+ }
+ };
+ okDialog.setDescription(message);
+ okDialog.setDetails(details);
+ return okDialog.open();
+ }
+
+ /*
+ * helper to create confirm/deny dialogs: question, confirmation
+ */
+ private static boolean openConfirmDenyDialog(Shell parent, Image image, String title, String message, String details, final String confirmLabel, final String denyLabel){
+ AbstractDialog dialog = new AbstractDialog(parent, title, image){
+ public void createDialogButtons(Composite parent) {
+ Button confirm = new Button(parent, SWT.PUSH);
+ if(confirmLabel != null)
+ confirm.setText(confirmLabel);
+ confirm.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e) {
+ close(true);
+ }
+ });
+ Button deny = new Button(parent, SWT.PUSH);
+ if(denyLabel != null)
+ deny.setText(denyLabel);
+ deny.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e) {
+ close(false);
+ }
+ });
+ }
+
+ public Composite createContent(Composite parent) {
+ return null;
+ }
+ };
+ dialog.setDescription(message);
+ dialog.setDetails(details);
+ return dialog.open();
+ }
+}
Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/FileFormatSelector.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/FileFormatSelector.java 2011-02-18 15:27:33 UTC (rev 1223)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/fileloader/FileFormatSelector.java 2011-02-18 15:44:52 UTC (rev 1224)
@@ -3,7 +3,6 @@
import java.io.File;
import org.cishell.framework.algorithm.AlgorithmFactory;
-import org.cishell.reference.gui.guibuilder.swt.builder.AbstractDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|