UIService interfaces

cusax-fix
Yana Stamcheva 20 years ago
parent b74968a76a
commit d548018166

@ -0,0 +1,27 @@
/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.service.gui;
/**
* The <tt>DialogID</tt> wraps a string which is meant to point to an
* application dialog, like per example a "Configuration" dialog or
* "Add contact" dialog.
*
* @author Yana Stamcheva
*/
public class DialogID{
private String dialogName;
public DialogID(String dialogName){
this.dialogName = dialogName;
}
public String getID(){
return this.dialogName;
}
}

@ -0,0 +1,51 @@
/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.service.gui;
/**
* A dialog that could be shown, hidden, resized or moved. Meant to be used
* from other services to show an application window, like par example a
* "Configuration" or "Add contact" window.
*
* @author Yana Stamcheva
*/
public interface ExportedDialog {
/**
* Returns TRUE if the dialog is visible and FALSE otherwise.
*
* @return <code>true</code> if the dialog is visible and
* <code>false</code> otherwise.
*/
public boolean isDialogVisible();
/**
* Shows the dialog.
*/
public void showDialog();
/**
* Hides the dialog.
*/
public void hideDialog();
/**
* Resizes the dialog with the given width and height.
*
* @param width The new width.
* @param height The new height.
*/
public void resizeDialog(int width, int height);
/**
* Moves the dialog to the given coordinates.
*
* @param x The x coordinate.
* @param y The y coordinate.
*/
public void moveDialog(int x, int y);
}

@ -0,0 +1,216 @@
/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.service.gui;
/**
* A configurable popup dialog, that could be used from other services for
* simple interactions with the user, throught the gui interface. This dialog
* allows showing error, warning or info messages, prompting the user for simple
* one field input or choice, or asking the user for certain confirmation.
*
* Three types of dialogs are differentiated: Message, Confirm and Input dialog.
* Each of them has several show methods corresponging, allowing additional
* specific configuration, like specifying or not a title, confirmation option
* or initial value.
*
* @author Yana Stamcheva
*/
public interface PopupDialog extends ExportedDialog {
//
// Option types
//
/** Type used for <code>showConfirmDialog</code>. */
public static final int YES_NO_OPTION = 0;
/** Type used for <code>showConfirmDialog</code>. */
public static final int YES_NO_CANCEL_OPTION = 1;
/** Type used for <code>showConfirmDialog</code>. */
public static final int OK_CANCEL_OPTION = 2;
//
// Return values.
//
/** Return value from class method if YES is chosen. */
public static final int YES_OPTION = 0;
/** Return value from class method if NO is chosen. */
public static final int NO_OPTION = 1;
/** Return value from class method if CANCEL is chosen. */
public static final int CANCEL_OPTION = 2;
/** Return value form class method if OK is chosen. */
public static final int OK_OPTION = 0;
/**
* Return value from class method if user closes window without
* selecting anything.
*/
public static final int CLOSED_OPTION = -1;
/*
* Message types. Meant to be used by the UI implementation to determine
* what icon to display and possibly what behavior to give based on the
* type.
*/
/** Used for error messages. */
public static final int ERROR_MESSAGE = 0;
/** Used for information messages. */
public static final int INFORMATION_MESSAGE = 1;
/** Used for warning messages. */
public static final int WARNING_MESSAGE = 2;
/** Used for questions. */
public static final int QUESTION_MESSAGE = 3;
/** No icon is used. */
public static final int PLAIN_MESSAGE = -1;
/**
* Shows a question-message dialog requesting input from the user.
*
* @param message the <code>Object</code> to display.
* @return user's input, or <code>null</code> meaning the user
* canceled the input
*/
public abstract String showInputPopupDialog(Object message);
/**
* Shows a question-message dialog requesting input from the user, with
* the input value initialized to <code>initialSelectionValue</code>.
*
* @param message the <code>Object</code> to display
* @param initialSelectionValue the value used to initialize the input
* field
* @return user's input, or <code>null</code> meaning the user
* canceled the input
*/
public abstract String showInputPopupDialog(Object message,
String initialSelectionValue);
/**
* Shows a dialog with title <code>title</code> and message type
* <code>messageType</code>, requesting input from the user. The message
* type is meant to be used by the ui implementation to determine the
* icon of the dialog.
*
* @param message the <code>Object</code> to display
* @param title the <code>String</code> to display in the dialog
* title bar
* @param messageType the type of message that is to be displayed:
* <code>ERROR_MESSAGE</code>,
* <code>INFORMATION_MESSAGE</code>,
* <code>WARNING_MESSAGE</code>,
* <code>QUESTION_MESSAGE</code>,
* or <code>PLAIN_MESSAGE</code>
* @return user's input, or <code>null</code> meaning the user
* canceled the input
*/
public abstract String showInputPopupDialog(Object message, String title,
int messageType);
/**
* Shows an input dialog, where all options like title, type of message
* etc., could be configured. The user will be able to choose from
* <code>selectionValues</code>, where <code>null</code> implies the
* users can input whatever they wish.
* <code>initialSelectionValue</code> is the initial value to prompt
* the user with.
* It is up to the UI implementation to decide how best to represent the
* <code>selectionValues</code>. In the case of swing per example it could
* be a <code>JComboBox</code>, <code>JList</code> or
* <code>JTextField</code>. The message type is meant to be used by the ui
* implementation to determine the icon of the dialog.
*
* @param message the <code>Object</code> to display
* @param title the <code>String</code> to display in the
* dialog title bar
* @param messageType the type of message to be displayed:
* <code>ERROR_MESSAGE</code>,
* <code>INFORMATION_MESSAGE</code>,
* <code>WARNING_MESSAGE</code>,
* <code>QUESTION_MESSAGE</code>,
* or <code>PLAIN_MESSAGE</code>
*
* @param selectionValues an array of <code>Object</code>s that
* gives the possible selections
* @param initialSelectionValue the value used to initialize the input
* field
* @return user's input, or <code>null</code> meaning the user
* canceled the input
*/
public abstract Object showInputPopupDialog(Object message, String title,
int messageType, Object[] selectionValues,
Object initialSelectionValue);
/**
* Shows an information-message dialog titled "Message".
*
* @param message the <code>Object</code> to display
*/
public abstract void showMessagePopupDialog(Object message);
/**
* Shows a dialog that displays a message using a default
* icon determined by the <code>messageType</code> parameter.
*
* @param message the <code>Object</code> to display
* @param title the title string for the dialog
* @param messageType the type of message to be displayed:
* <code>ERROR_MESSAGE</code>,
* <code>INFORMATION_MESSAGE</code>,
* <code>WARNING_MESSAGE</code>,
* <code>QUESTION_MESSAGE</code>,
* or <code>PLAIN_MESSAGE</code>
*/
public abstract void showMessagePopupDialog(Object message,
String title, int messageType);
/**
* Shows a dialog with the options <i>Yes</i>, <i>No</i> and <i>Cancel</i>.
*
* @param message the <code>Object</code> to display
* @return one of the YES_OPTION, NO_OPTION,.., XXX_OPTION, indicating the
* option selected by the user
*/
public abstract int showConfirmPopupDialog(Object message);
/**
* Shows a dialog where the number of choices is determined
* by the <code>optionType</code> parameter.
*
* @param message the <code>Object</code> to display
* @param title the title string for the dialog
* @param optionType an int designating the options available on the dialog:
* <code>YES_NO_OPTION</code>, or
* <code>YES_NO_CANCEL_OPTION</code>
* @return one of the YES_OPTION, NO_OPTION,.., XXX_OPTION, indicating the
* option selected by the user
*/
public abstract int showConfirmPopupDialog(Object message,
String title, int optionType);
/**
* Shows a dialog where the number of choices is determined
* by the <code>optionType</code> parameter, where the
* <code>messageType</code> parameter determines the icon to display.
* The <code>messageType</code> parameter is primarily used to supply
* a default icon for the dialog.
*
* @param message the <code>Object</code> to display
* @param title the title string for the dialog
* @param optionType an integer designating the options available
* on the dialog: <code>YES_NO_OPTION</code>,
* or <code>YES_NO_CANCEL_OPTION</code>
* @param messageType an integer designating the kind of message this is;
* <code>ERROR_MESSAGE</code>,
* <code>INFORMATION_MESSAGE</code>,
* <code>WARNING_MESSAGE</code>,
* <code>QUESTION_MESSAGE</code>,
* or <code>PLAIN_MESSAGE</code>
* @return one of the YES_OPTION, NO_OPTION,.., XXX_OPTION, indicating the
* option selected by the user
*/
public abstract int showConfirmPopupDialog(Object message, String title,
int optionType, int messageType);
}

@ -8,14 +8,48 @@
import java.util.Iterator;
import net.java.sip.communicator.service.protocol.Contact;
/**
* Plugins using the service in order to add featuress to the user interface
* may do that using one of the addXxx() methods.
*
* The <tt>UIService</tt> offers generic access to the graphical user interface
* for all modules that would like to interact with the user.
* <p>
* Through the <tt>UIService</tt> all modules can add their own components in
* different menus, toolbars, etc. within the ui. Each <tt>UIService</tt>
* implementation should export its supported "plugable" containers - a set of
* <tt>ContainerID</tt>s corresponding to different "places", where a module
* can add a component.
* <p>
* The <tt>UIService</tt> provides also methods that would allow to other
* modules to control the visibility, size and position of the main application
* window. Some of these methods are: setVisible, minimize, maximize, resize,
* move, etc.
* <p>
* A way to show different types of simple dialogs is provided to allow other
* modules to show different simple messages, like warning or error messages.
* In order to show a simple warning message, a module should invoke the
* getPopupDialog method and then one of the showXXX methods, which corresponds
* best to the required dialog.
* <p>
* Certain application dialogs within the GUI, like "Configuration" or
* "AddContact" dialogs, could be also shown from outside the ui. To make one of
* these dialogs showable, the <tt>UIService</tt> implementation should attach to
* it a <tt>DialogID</tt> and export it. A dialog then could be shown, by
* invoking <code>getApplicationDialog(DialogID)</code> and then
* <code>show</code>. The <tt>DialogID</tt> above should be one of the exported
* <tt>DialogID</tt>s obtained from <code>getExportedDialogs</code>.
* <p>
* Each <code>UIService</code> implementation should implement the method
* <code>getChatDialog(Contact contact)</code>, which is meant to provide an
* access to the chat component for the given contact in the form of
* <code>ExportedDialog</code>.
*
* @author Yana Stamcheva
*/
public interface UIService
{
/*
* ContainerID-s
*/
public static final ContainerID CONTAINER_FILE_MENU
= new ContainerID("File");
public static final ContainerID CONTAINER_TOOLS_MENU
@ -47,6 +81,9 @@ public interface UIService
public static final ContainerID CONTAINER_CHAT_HELP_MENU
= new ContainerID("ChatHelpMenu");
/*
* Constraints
*/
public static final String START = "Start";
public static final String END = "End";
public static final String TOP = "Top";
@ -54,20 +91,144 @@ public interface UIService
public static final String LEFT = "Left";
public static final String RIGHT = "Right";
/*
* DialogID-s
*/
public static final DialogID DIALOG_MAIN_CONFIGURATION
= new DialogID("MainConfigurationDialog");
public static final DialogID DIALOG_CONFIGURATION1
= new DialogID("Configuration1Dialog");
public static final DialogID DIALOG_CONFIGURATION2
= new DialogID("Configuration2Dialog");
public static final DialogID DIALOG_CONFIGURATION3
= new DialogID("Configuration3Dialog");
public static final DialogID DIALOG_ADD_CONTACT
= new DialogID("AddContactDialog");
/**
* Returns TRUE if the application is visible and FALSE otherwise.
* This method is meant to be used by the systray service in order to
* detect the visibility of the application.
*
* @return <code>true</code> if the application is visible and
* <code>false</code> otherwise.
*
* @see #setVisible(boolean)
*/
public boolean isVisible();
/**
* Shows or hides the main application window depending on the value of
* parameter <code>visible</code>. Meant to be used by the systray when it
* needs to show or hide the application.
*
* @param visible if <code>true</code>, shows the main application window;
* otherwise, hides the main application window.
*
* @see #isVisible()
*/
public void setVisible(boolean visible);
/**
* Minimizes the main application window.
*/
public void minimize();
/**
* Mawimizes the main application window.
*/
public void maximize();
/**
* Restores the main application window.
*/
public void restore();
/**
* Resizes the main application window with the given width and height.
*
* @param width The new width.
* @param height The new height.
*/
public void resize(int width, int height);
/**
* Moves the main application window to the given coordinates.
*
* @param x The x coordinate.
* @param y The y coordinate.
*/
public void move(int x, int y);
/**
* Returns a common application dialog given by DialogID. This
* could be per example a "Configuration" dialog, "Add contact" dialog
* or any other dialog within the application, which could be simply shown
* without need of additional arguments. The <tt>dialogID</tt> SHOULD be
* one of the DIALOG_XXX obtained by the getExportedDialogs method.
*
* @param dialogID One of the DIALOG_XXX DialogID-s.
* @return the dialog to be shown
* @see #getExportedDialogs()
*/
public ExportedDialog getApplicationDialog(DialogID dialogID);
/**
* Returns a configurable popup dialog, that could be used to show either
* a warning message, error message, information message, etc. or to prompt
* user for simple one field input or to question the user.
*
* @return a <code>PopupDialog</code>.
* @see PopupDialog
*/
public PopupDialog getPopupDialog();
/**
* Returns the <code>ExportedDialog</code> corresponding to the component
* representing the chat for the given contact. Meant to be used from other
* bundles to allow them to check the visibility of a chat, hide it or show
* it.
* @param contact
* @return The <code>ExportedDialog</code> corresponding to the component
* representing the chat for the given contact.
*/
public ExportedDialog getChatDialog(Contact contact);
/**
* Returns an iterator over a set of dialogID-s. Each DialogID points to
* a common dialog in the current UI implementation that could be shown
* using the <code>showApplicationDialog</code> method. Each
* DialogID in the set is one of the DIALOG_XXX constants.
* The method is meant to be used by bundles that would like to show common
* dialogs like "Configuration" or "Add contact" dialog. Before showing any
* dialog they should use this method to obtain all possible dialogs, which
* could be shown for the current ui implementation.
*
* @return Iterator An iterator to a set containing containerID-s
* representing all containers supported by the current UI implementation.
*/
public Iterator getExportedDialogs();
/**
* Adds the specified UI component to the container given by ContainerID.
* The method is meant to be used by plugins or bundles that would like to add
* components to the user interface. The <tt>containerID</tt> is used by the
* implementation to determine the place where the component should be added.
* The <tt>containerID</tt> SHOULD be one of the CONTAINER_XXX constants. It is up
* to the service implementation to verify that <tt>component</tt> is an
* instance of a class compatible with the gui library used by it. If this
* is not the case and adding the requested object would not be possible the
* implementation MUST through a ClassCastException exception.
* Implementations of this service MUST understand and know how to handle
* all ContainerID-s defined by this interface, they MAY also define additional constraints.
* In case the addComponent method is called with a <tt>containerID</tt> that the
* implementation does not understand it MUST through a java.lang.IllegalArgumentException
* The method is meant to be used by plugins or bundles that would like to
* add components to the user interface. The <tt>containerID</tt> is used
* by the implementation to determine the place where the component should
* be added. The <tt>containerID</tt> SHOULD be one of the CONTAINER_XXX
* constants. It is up to the service implementation to verify that
* <tt>component</tt> is an instance of a class compatible with the gui
* library used by it. If this is not the case and adding the requested
* object would not be possible the implementation MUST through a
* ClassCastException exception. Implementations of this service MUST
* understand and know how to handle all ContainerID-s defined by this
* interface, they MAY also define additional constraints. In case the
* addComponent method is called with a <tt>containerID</tt> that the
* implementation does not understand it MUST through a
* java.lang.IllegalArgumentException.
* <br>
* @param containerID One of the CONTAINER_XXX ContainerID-s.
* @param component The component to be added.
@ -83,26 +244,29 @@ public void addComponent(ContainerID containerID, Object component)
throws ClassCastException, IllegalArgumentException;
/**
* Adds the specified UI component to the container given by <tt>containerID</tt> at
* the position specified by <tt>constraint</tt> String. The method is meant to be used
* by plugins or bundles that would like to add components to the user interface.
* The <tt>containerID</tt> is used by the implementation to determine the place where
* the component should be added. The <tt>containerID</tt> SHOULD be one of the
* CONTAINER_XXX constants. The <tt>constraint</tt> String is used to determine the
* exact position of the component in the container (LEFT, RIGHT, START, etc.). The
* <tt>constraint</tt> String SHOULD be one of the START, END, TOP, BOTTOM, etc.
* String constants.
* Adds the specified UI component to the container given by
* <tt>containerID</tt> at the position specified by <tt>constraint</tt>
* String. The method is meant to be used by plugins or bundles that would
* like to add components to the user interface. The <tt>containerID</tt>
* is used by the implementation to determine the place where the component
* should be added. The <tt>containerID</tt> SHOULD be one of the
* CONTAINER_XXX constants. The <tt>constraint</tt> String is used to
* determine the exact position of the component in the container (LEFT,
* RIGHT, START, etc.). The <tt>constraint</tt> String SHOULD be one of the
* START, END, TOP, BOTTOM, etc. String constants.
* <br>
* It is up to the service implementation to verify that <tt>component</tt> is an
* instance of a class compatible with the gui library used by it. If this
* is not the case and adding the requested object would not be possible the
* implementation MUST through a ClassCastException exception.
* It is up to the service implementation to verify that <tt>component</tt>
* is an instance of a class compatible with the gui library used by it. If
* this is not the case and adding the requested object would not be
* possible the implementation MUST through a ClassCastException exception.
* Implementations of this service MUST understand and know how to handle
* all ContainerID-s defined by this interface, they MAY also define additional constraints.
* In case the addComponent method is called with a <tt>containerID</tt> that the
* implementation does not understand it MUST through a java.lang.IllegalArgumentException
* all ContainerID-s defined by this interface, they MAY also define
* additional constraints. In case the addComponent method is called with a
* <tt>containerID</tt> that the implementation does not understand it MUST
* through a java.lang.IllegalArgumentException
* <br>
* @param containerID One of the CONTAINER_XXX ContainerID-s.
* @param containerID One of the CONTAINER_XXX ContainerID-s.
* @param constraint One of the START, END, BOTTOM, etc. String constants.
* @param component The component to be added.
* @throws ClassCastException if <tt>component</tt> is not an
* instance of a class supported by the service implementation. An SWT impl
@ -112,40 +276,46 @@ public void addComponent(ContainerID containerID, Object component)
* is not recognized by the implementation (note that implementations
* MUST properly handle all CONTAINER_XXX containerID-s.
*/
public void addComponent(ContainerID containerID, String constraint, Object component)
public void addComponent(ContainerID containerID,
String constraint, Object component)
throws ClassCastException, IllegalArgumentException;
/**
* Returns an iterator to a set containing containerID-s pointing to containers
* supported by the current UI implementation. Each containerID in the set
* is one of the CONTAINER_XXX constants. The method is meant to be used by plugins
* or bundles that would like to add components to the user interface. Before adding
* any component they should use this method to obtain all possible places, which could
* contain external components, like different menus, toolbars, etc.
* Returns an iterator over a set containing containerID-s pointing to
* containers supported by the current UI implementation. Each containerID
* in the set is one of the CONTAINER_XXX constants. The method is meant to
* be used by plugins or bundles that would like to add components to the
* user interface. Before adding any component they should use this method
* to obtain all possible places, which could contain external components,
* like different menus, toolbars, etc.
*
* @return Iterator An iterator to a set containing containerID-s representing all
* containers supported by the current UI implementation.
* @return Iterator An iterator to a set containing containerID-s
* representing all containers supported by the current UI implementation.
*/
public Iterator getSupportedContainers();
/**
* Returns an iterator to a set containing all constraints supported by the given
* <tt>containerID</tt>. Each constraint in the set is one of the START, END, TOP,
* BOTTOM, etc. constants. This method is meant to be used to obtain all layout
* constraints supported by a given container.
* Returns an iterator over a set of all constraints supported by the
* given <tt>containerID</tt>. Each constraint in the set is one of the
* START, END, TOP, BOTTOM, etc. constants. This method is meant to be used
* to obtain all layout constraints supported by a given container.
*
* @param containerID The containerID pointing to the desired container.
* @return Iterator An iterator to a set containing all component constraints
* @return Iterator An iterator to a set containing all component
* constraints
*/
public Iterator getConstraintsForContainer(ContainerID containerID);
/**
* Returns an Iterator to a set containing all components added to a given constraint.
* Meant to be called in the process of initialization of the container, defined by the
* given constraint in order to obtain all external components that should be added in it.
* Returns an Iterator over a set of all components added to a given
* constraint. Meant to be called in the process of initialization of the
* container, defined by the given constraint in order to obtain all
* external components that should be added in it.
*
* @param containerID One of the containerID-s supported by the current UI implementation.
* @return An Iterator to a set containing all components added to a given constraint.
* @param containerID One of the containerID-s supported by the current UI
* implementation.
* @return An Iterator to a set containing all components added to a given
* constraint.
*/
public Iterator getComponentsForContainer(ContainerID containerID)
throws IllegalArgumentException;

Loading…
Cancel
Save