blob: a41a0c78e3cbbab558e3cf8a806deb1a9758866b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
*******************************************************************************/
package org.eclipse.scout.rt.ui.rap;
import java.util.Collection;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.scout.commons.job.JobEx;
import org.eclipse.scout.rt.client.ClientJob;
import org.eclipse.scout.rt.client.IClientSession;
import org.eclipse.scout.rt.client.ui.basic.filechooser.IFileChooser;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
import org.eclipse.scout.rt.client.ui.desktop.IUrlTarget;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.messagebox.IMessageBox;
import org.eclipse.scout.rt.shared.data.basic.FontSpec;
import org.eclipse.scout.rt.shared.servicetunnel.DefaultServiceTunnelContentHandler;
import org.eclipse.scout.rt.ui.rap.basic.IRwtScoutComposite;
import org.eclipse.scout.rt.ui.rap.basic.IRwtScoutHtmlValidator;
import org.eclipse.scout.rt.ui.rap.form.IRwtScoutForm;
import org.eclipse.scout.rt.ui.rap.form.fields.IRwtScoutFormField;
import org.eclipse.scout.rt.ui.rap.form.fields.RwtScoutFieldComposite;
import org.eclipse.scout.rt.ui.rap.html.HtmlAdapter;
import org.eclipse.scout.rt.ui.rap.keystroke.IKeyStrokeManager;
import org.eclipse.scout.rt.ui.rap.keystroke.IRwtKeyStroke;
import org.eclipse.scout.rt.ui.rap.util.ScoutFormToolkit;
import org.eclipse.scout.rt.ui.rap.window.IRwtScoutPart;
import org.eclipse.scout.rt.ui.rap.window.desktop.IRwtScoutFormFooter;
import org.eclipse.scout.rt.ui.rap.window.desktop.IRwtScoutFormHeader;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
/**
* In order to use rap with a scout application simply setup securtity as follows:
* <ol>
* <li>Add a servlet security filter to the /rap client webapp to give the user a rap client Subject</li>
* <li>Optional:
* {@link DefaultServiceTunnelContentHandler#createDefaultWsSecurityElement(org.eclipse.scout.rt.shared.servicetunnel.ServiceTunnelRequest)}
* creates a default ws security element for this client subject and sends it with every soap request</li>
* <li>Add a servlet security filter to the /ajax server webapp to detect the WSSE security token and create a user
* principal as well as a VirtualSessioIdPrincipal. A default filter is in scout server
* DefaultVirtualSessionSecurityFilter</li>
* </ol>
*/
public interface IRwtEnvironment {
/**
* key for {@link IClientSession#setData(String, Object)} holding the environment
*/
String ENVIRONMENT_KEY = "ui.environment";
/**
* @param modalities
* combination of {@link SWT#SYSTEM_MODAL}, {@link SWT#APPLICATION_MODAL}, {@link SWT#MODELESS}
* @return best effort to get the "current" parent shell. Never null. ticket
* 79624
*/
Shell getParentShellIgnoringPopups(int modalities);
boolean isInitialized();
/**
* Must be called in display thread
*/
void ensureInitialized();
Image getIcon(String name);
ImageDescriptor getImageDescriptor(String iconId);
ScoutFormToolkit getFormToolkit();
/**
* Called from scout job/thread to post an immediate rwt job into the waiting queue.
* <p>
* These jobs are run when calling {@link #dispatchImmediateUiJobs()}. Normally this kind of code is only used to
* early apply visible and enabled properties in {@link RwtScoutFieldComposite#handleUiInputVerifier()} in order to
* have before-focus-traversal visible/enabled state-update
*/
void postImmediateUiJob(Runnable r);
void dispatchImmediateUiJobs();
Color getColor(String scoutColor);
Color getColor(RGB rgb);
/**
* global key strokes will be executed when and only when no key stroke of the
* control hierarchy starting at the event's source control consumed
* (event.doit = false) the event.
*
* @param stroke
* @return
*/
void addGlobalKeyStroke(IRwtKeyStroke stroke, boolean exclusive);
/**
* global key strokes will be executed when and only when no key stroke of the
* control hierarchy starting at the event's source control consumed
* (event.doit = false) the event.
*
* @param stroke
* @return
*/
boolean removeGlobalKeyStroke(IRwtKeyStroke stroke);
/**
* @see IKeyStrokeManager#addKeyStroke(Widget, IRwtKeyStroke)
*/
void addKeyStroke(Control control, IRwtKeyStroke stroke, boolean exclusive);
/**
* @see IKeyStrokeManager#removeKeyStroke(Widget, IRwtKeyStroke)
*/
boolean removeKeyStroke(Control control, IRwtKeyStroke stroke);
/**
* @see IKeyStrokeManager#removeKeyStrokes(Widget)
*/
boolean removeKeyStrokes(Control control);
/**
* @see IKeyStrokeManager#hasKeyStroke(Widget, IRwtKeyStroke)
* @since 3.10.0-M3
*/
boolean hasKeyStroke(Control control, IRwtKeyStroke stroke);
/**
* @return a font based on templateFont with style, name and size from scoutFont (if not null).
* The result is cached for re-use. Dispose is done automatically and must not be done by the caller
*/
Font getFont(FontSpec scoutFont, Font templateFont);
/**
* @return a font based on templateFont with different style, name and size (if not null).
* The result is cached for re-use. Dispose is done automatically and must not be done by the caller
*/
Font getFont(Font templateFont, String newName, Integer newStyle, Integer newSize);
IDesktop getScoutDesktop();
// Gui factory
IRwtScoutForm createForm(Composite parent, IForm scoutForm);
IRwtScoutFormHeader createFormHeader(Composite parent, IForm scoutForm);
IRwtScoutFormFooter createFormFooter(Composite parent, IForm scoutForm);
IRwtScoutFormField createFormField(Composite parent, IFormField model);
void checkThread();
void ensureFormPartVisible(IForm form);
void hideFormPart(IForm form);
void showFormPart(IForm form);
Collection<IRwtScoutPart> getOpenFormParts();
void showFileChooserFromScout(IFileChooser fileChooser);
/**
* Open a browser window with some url or address.
* <p>
* If the address is a file path, this will trigger a file download from the browser.
*/
void openBrowserWindowFromScout(String path, IUrlTarget target);
void showMessageBoxFromScout(IMessageBox messageBox);
void setClipboardText(String text);
/**
* @return the popupOwner for the (next) popup that is displayed
*/
Control getPopupOwner();
/**
* @return the popupOwnerBounds used for the (next) popup that is displayed
*/
Rectangle getPopupOwnerBounds();
void setPopupOwner(Control owner, Rectangle ownerBounds);
/**
* Convenience for {@link HtmlAdapter#adaptHtmlCell(IRwtScoutComposite, String)}.
*/
String adaptHtmlCell(IRwtScoutComposite<?> uiComposite, String rawHtml);
/**
* Convenience for {@link HtmlAdapter#convertLinksInHtmlCell(IRwtScoutComposite, String)}
*/
String convertLinksInHtmlCell(IRwtScoutComposite<?> uiComposite, String rawHtml);
/**
* Convenience for {@link HtmlAdapter#styleHtmlText(IRwtScoutFormField, String)}.
*/
String styleHtmlText(IRwtScoutFormField<?> uiComposite, String rawHtml);
HtmlAdapter getHtmlAdapter();
Display getDisplay();
IClientSession getClientSession();
LayoutValidateManager getLayoutValidateManager();
/**
* calling from swt thread
* <p>
* The job is only run when it reaches the model within the cancelTimeout. This means if the job is delayed longer
* than cancelTimeout millis when the model job runs it, then the job is ignored.
*
* @return the created and scheduled job, a {@link ClientJob}
*/
JobEx invokeScoutLater(Runnable job, long cancelTimeout);
void invokeUiLater(Runnable job);
void addEnvironmentListener(IRwtEnvironmentListener listener);
void removeEnvironmentListener(IRwtEnvironmentListener listener);
IRwtScoutHtmlValidator getHtmlValidator();
}