1 package org.simantics.views.swt.client.impl;
\r
3 import java.io.IOException;
\r
5 import org.eclipse.jface.layout.GridDataFactory;
\r
6 import org.eclipse.jface.layout.GridLayoutFactory;
\r
7 import org.eclipse.mylyn.wikitext.core.parser.MarkupParser;
\r
8 import org.eclipse.swt.browser.Browser;
\r
9 import org.eclipse.swt.widgets.Composite;
\r
10 import org.simantics.Simantics;
\r
11 import org.simantics.browsing.ui.common.ErrorLogger;
\r
12 import org.simantics.db.ReadGraph;
\r
13 import org.simantics.db.exception.DatabaseException;
\r
14 import org.simantics.db.layer0.variable.Variable;
\r
15 import org.simantics.db.request.Read;
\r
16 import org.simantics.scl.runtime.function.Function1;
\r
17 import org.simantics.utils.FileUtils;
\r
18 import org.simantics.utils.datastructures.map.Tuple;
\r
19 import org.simantics.utils.ui.BundleUtils;
\r
20 import org.simantics.views.swt.client.base.SingleSWTViewNode;
\r
21 import org.simantics.wiki.ui.SimanticsDialect;
\r
22 import org.simantics.wiki.ui.language.MediaWikiLanguage;
\r
24 public class SWTWikiBrowser extends SingleSWTViewNode<Browser> {
\r
26 private static final long serialVersionUID = 5826022972081217837L;
\r
28 public String document;
\r
29 public Variable variable;
\r
30 public Function1<String, Boolean> navigate;
\r
31 public Variable edited;
\r
33 private Tuple lastAppliedParametrization;
\r
36 public void reset() {
\r
38 lastAppliedParametrization = null;
\r
42 public void createControls(Composite parent) {
\r
44 GridDataFactory.fillDefaults().grab(true, true).applyTo(parent);
\r
45 GridLayoutFactory.fillDefaults().applyTo(parent);
\r
47 control = new Browser(parent, style);
\r
48 GridDataFactory.fillDefaults().grab(true, true).applyTo(control);
\r
54 public void synchronizeVariable(Variable variable) {
\r
58 public void synchronizeEdited(Variable edited) {
\r
59 propertyCallback.apply("edited", edited);
\r
62 public void synchronizeDocument(final String document) {
\r
64 if(document != null) {
\r
66 final Variable variable = SWTWikiBrowser.this.variable;
\r
67 if (variable == null) {
\r
71 Tuple checkParam = new Tuple(document, variable);
\r
72 if (checkParam.equals(lastAppliedParametrization))
\r
75 lastAppliedParametrization = checkParam;
\r
79 String markup = Simantics.getSession().syncRequest(new Read<String>() {
\r
81 public String perform(ReadGraph graph) throws DatabaseException {
\r
82 return SimanticsDialect.INSTANCE.apply(graph, variable, document);
\r
86 MarkupParser markupParser = new MarkupParser();
\r
87 MediaWikiLanguage language = new MediaWikiLanguage();
\r
88 markupParser.setMarkupLanguage(language);
\r
89 String htmlContent = markupParser.parseToHtml(markup);
\r
90 if (htmlContent == null)
\r
93 final Browser control = this.control;
\r
94 if (control == null)
\r
96 control.setText(htmlContent);
\r
98 } catch (DatabaseException e) {
\r
99 ErrorLogger.defaultLogError(e);
\r