Node child = ni.nextNode();
SectionPart sectionPart = null;
if (isDbk(child, DbkType.mediaobject)) {
- sectionPart = newImg(textSection, child);
-// if (child.hasNode(DbkType.imageobject.get())) {
-// Node imageDataNode = child.getNode(DbkType.imageobject.get()).getNode(DbkType.imagedata.get());
-// sectionPart = newImg(textSection, imageDataNode);
-// }
+ if (child.hasNode(DbkType.imageobject.get())) {
+ sectionPart = newImg(textSection, child);
+ } else if (child.hasNode(DbkType.videoobject.get())) {
+ sectionPart = newVideo(textSection, child);
+ } else {
+ throw new IllegalArgumentException("Unsupported media object " + child);
+ }
} else if (isDbk(child, DbkType.info)) {
// TODO enrich UI based on info
} else if (isDbk(child, DbkType.title)) {
// throw new IllegalArgumentException("Unsupported node " + child);
// TODO list node types in exception
} else {
- throw new IllegalArgumentException("Unsupported node type for "+child);
+ throw new IllegalArgumentException("Unsupported node type for " + child);
}
if (sectionPart != null && sectionPart instanceof Control)
((Control) sectionPart).setLayoutData(CmsUiUtils.fillWidth());
}
}
+ protected DbkVideo newVideo(TextSection parent, Node node) {
+ try {
+// node.getSession();
+// Composite wrapper = new Composite(parent, SWT.NONE);
+// new Label(wrapper,SWT.NONE).setText("TEST");
+ DbkVideo video = new DbkVideo(parent, SWT.BORDER, node);
+ GridData gd;
+ if (maxMediaWidth != null) {
+ gd = new GridData(SWT.CENTER, SWT.FILL, false, false);
+ // TODO, manage size
+ gd.widthHint = maxMediaWidth;
+ gd.heightHint = (int) (gd.heightHint * 0.5625);
+// img.setPreferredSize(new Point(maxMediaWidth, 0));
+ } else {
+ gd = new GridData(SWT.CENTER, SWT.FILL, false, false);
+ gd.widthHint = video.getWidth();
+ gd.heightHint = video.getHeight();
+// gd = new GridData(video.getWidth(),video.getHeight());
+ }
+// wrapper.setLayoutData(gd);
+ video.setLayoutData(gd);
+ updateContent(video);
+ return null;
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot add new image " + node, e);
+ }
+ }
+
protected DocBookSectionTitle newSectionTitle(TextSection parent, Node titleNode) throws RepositoryException {
int style = parent.getStyle();
Composite titleParent = newSectionHeader(parent);
} else if (part instanceof DbkImg) {
DbkImg editableImage = (DbkImg) part;
imageManager.load(partNode, part.getControl(), editableImage.getPreferredImageSize());
+ } else if (part instanceof DbkVideo) {
+ DbkVideo video = (DbkVideo) part;
+ video.load(part.getControl());
}
} else if (part instanceof DocBookSectionTitle) {
DocBookSectionTitle title = (DocBookSectionTitle) part;
--- /dev/null
+package org.argeo.docbook.ui;
+
+import javax.jcr.Item;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.ValueFormatException;
+
+import org.argeo.cms.ui.util.CmsUiUtils;
+import org.argeo.cms.ui.viewers.NodePart;
+import org.argeo.cms.ui.viewers.Section;
+import org.argeo.cms.ui.viewers.SectionPart;
+import org.argeo.cms.ui.widgets.StyledControl;
+import org.argeo.docbook.DbkAttr;
+import org.argeo.docbook.DbkType;
+import org.argeo.jcr.JcrException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class DbkVideo extends StyledControl implements SectionPart, NodePart {
+ private static final long serialVersionUID = -8753232181570351880L;
+ private Section section;
+
+ private int width = 640;
+ private int height = 360;
+
+ public DbkVideo(Composite parent, int style, Node node) {
+ this(Section.findSection(parent), parent, style, node);
+ }
+
+ DbkVideo(Section section, Composite parent, int style, Node node) {
+ super(parent, style, node);
+ this.section = section;
+ setStyle(DbkType.videoobject.name());
+ }
+
+ @Override
+ protected Control createControl(Composite box, String style) {
+ Browser browser = new Browser(box, SWT.NONE);
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd.widthHint = getWidth();
+ gd.heightHint = getHeight();
+ browser.setLayoutData(gd);
+ return browser;
+ }
+
+ public void load(Control control) {
+ Browser browser = (Browser) control;
+ try {
+ getNode().getSession();
+ String src = getNode().getNode(DbkType.videoobject.get()).getNode(DbkType.videodata.get())
+ .getProperty(DbkAttr.fileref.name()).getString();
+ // TODO manage self-hosted videos
+ // TODO for YouTube videos, check whether the URL starts with
+ // https://www.youtube.com/embed/ and not https://www.youtube.com/watch?v=
+ StringBuilder html = new StringBuilder();
+ html.append(
+ "<iframe frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen=\"true\"");
+ // TODO make size configurable
+ html.append("width=\"").append(width).append("\" height=\"").append(height).append("\" ");
+ html.append("src=\"").append(src).append("\" ");
+ html.append("/>");
+ browser.setText(html.toString());
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot retrieve src for video " + getNode(), e);
+ }
+ }
+
+ @Override
+ protected void setContainerLayoutData(Composite composite) {
+ composite.setLayoutData(CmsUiUtils.fillAll());
+ }
+
+ @Override
+ protected void setControlLayoutData(Control control) {
+ control.setLayoutData(CmsUiUtils.fillAll());
+ }
+
+ @Override
+ public Item getItem() throws RepositoryException {
+ return getNode();
+ }
+
+ @Override
+ public String getPartId() {
+ return getNodeId();
+ }
+
+ @Override
+ public Section getSection() {
+ return section;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+}