blob: fd0d59d66d11864744fa48575cfb82f6b583e569 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2012 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.ui.dnd;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.bpel.ui.Templates;
import org.eclipse.bpel.ui.Templates.Template;
import org.eclipse.bpel.ui.Templates.TemplateResource;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.jface.internal.text.html.HTMLTextPresenter;
import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.TextPresentation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.StatusTextEvent;
import org.eclipse.swt.browser.StatusTextListener;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
/**
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Aug 16, 2007
*
*/
public class DropPopup extends PopupDialog implements StatusTextListener, MenuDetectListener, KeyListener {
interface CommandListener {
/**
* @param cmd
*/
void execute (String cmd) ;
}
CommandListener fTarget;
protected HTMLTextPresenter fPresenter;
protected TextPresentation fPresentation = new TextPresentation();
protected StyledText fText;
void setCommandListener ( CommandListener listener ) {
fTarget = listener;
}
/**
* @param parentShell
* @param shellStyle
* @param title
* @param statusFieldText
*/
public DropPopup (Shell parentShell, int shellStyle, String title, String statusFieldText) {
super(parentShell,shellStyle | SWT.TOOL, true, true, false, false, title, statusFieldText);
}
@Override
protected Control createDialogArea (Composite parent) {
fText= new StyledText(parent, SWT.V_SCROLL | SWT.H_SCROLL);
fText.setEditable(false);
fPresenter= new HTMLTextPresenter(false);
fText.addControlListener(new ControlAdapter() {
/*
* @see org.eclipse.swt.events.ControlAdapter#controlResized(org.eclipse.swt.events.ControlEvent)
*/
@Override
public void controlResized(ControlEvent e) {
fText.setText(fText.getText());
}
});
return fText;
}
protected void setInput (String html) {
Template template = getViewTemplate();
TemplateResource resource = template.getResources().get(0);
Map<String,Object> args = new HashMap<String,Object>();
args.put("content",html);
args.put("background-color", toCSS("background-color", getShell().getBackground() ));
args.put("font", toCSS( getShell().getFont() ));
fPresentation.clear();
Rectangle size= fText.getClientArea();
html = resource.process(args);
System.out.println("Text: " + html);
html = ((DefaultInformationControl.IInformationPresenterExtension)fPresenter).updatePresentation(getShell(), html, fPresentation, size.width, size.height);
fText.setText(html);
TextPresentation.applyTextPresentation(fPresentation, fText);
// fBrowser.setText( resource.process(args) );
}
String toCSS ( String name, Color color ) {
StringBuilder sb = new StringBuilder();
sb.append(name).append(": rgb(").append(color.getRed()).append(",");
sb.append(color.getGreen()).append(",");
sb.append(color.getBlue()).append(");");
return sb.toString();
}
String toCSS ( Font font ) {
FontData fd[] = font.getFontData();
StringBuilder sb = new StringBuilder ();
if (fd.length < 1) {
return sb.toString();
}
sb.append("font-size: ").append(fd[0].getHeight()).append("pt;");
sb.append("font-family: ").append(fd[0].getName()).append(";");
return sb.toString();
}
@SuppressWarnings("nls")
Template getViewTemplate () {
Template t = dropTemplates.getTemplateByKey("dropPopupTemplate");
if (t == null || true ) {
dropTemplates.initializeFrom("/html/");
t = dropTemplates.getTemplateByKey("dropPopupTemplate");
}
return t;
}
static Templates dropTemplates = new Templates();
/** (non-Javadoc)
* @see org.eclipse.swt.browser.StatusTextListener#changed(org.eclipse.swt.browser.StatusTextEvent)
*/
public void changed (StatusTextEvent event) {
String cmd = event.text;
if (cmd == null || cmd.startsWith("event://") == false) {
return ;
}
cmd = cmd.substring(8);
if (fTarget != null) {
fTarget.execute(cmd);
}
close();
}
/**
* @see org.eclipse.swt.events.MenuDetectListener#menuDetected(org.eclipse.swt.events.MenuDetectEvent)
*/
public void menuDetected (MenuDetectEvent e) {
e.doit = false;
}
/**
* @see org.eclipse.swt.events.KeyListener#keyPressed(org.eclipse.swt.events.KeyEvent)
*/
public void keyPressed (KeyEvent e) {
e.doit = false;
close();
}
/**
* @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
*/
public void keyReleased(KeyEvent e) {
e.doit = false;
}
}