/******************************************************************************* | |
* 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 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* 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; | |
} | |
} |