X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=publishing%2Forg.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fdocbook%2Fui%2FAbstractDbkViewer.java;h=cde5c7fd74fbec68528937df76d4bb6a20da2c98;hb=cc5f3a7a328e0487d0b06dd4e99b232a2e551461;hp=656dd014f64849e4567ffe9ffc1124fe43de4e94;hpb=2824e4dce1c2239500f865efaac23f2880b12277;p=gpl%2Fargeo-suite.git diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java index 656dd01..cde5c7f 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java @@ -99,6 +99,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke protected void refresh(Control control) throws RepositoryException { if (!(control instanceof Section)) return; + long begin = System.currentTimeMillis(); Section section = (Section) control; if (section instanceof TextSection) { CmsUiUtils.clear(section); @@ -109,34 +110,51 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke if (style != null) CmsUiUtils.style(textSection, style); + // Title + Node titleNode = null; + // We give priority to ./title vs ./info/title, like the DocBook XSL if (node.hasNode(DbkType.title.get())) { + titleNode = node.getNode(DbkType.title.get()); + } else if (node.hasNode(DbkType.info.get() + '/' + DbkType.title.get())) { + titleNode = node.getNode(DbkType.info.get() + '/' + DbkType.title.get()); + } + + if (titleNode != null) { boolean showTitle = getMainSection() == section ? showMainTitle : true; if (showTitle) { if (section.getHeader() == null) section.createHeader(); - Node titleNode = node.getNode(DbkType.title.get()); DocBookSectionTitle title = newSectionTitle(textSection, titleNode); title.setLayoutData(CmsUiUtils.fillWidth()); updateContent(title); } } + // content for (NodeIterator ni = node.getNodes(); ni.hasNext();) { 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)) { + // already managed } else if (isDbk(child, para)) { sectionPart = newParagraph(textSection, child); - } else { + } else if (isDbk(child, DbkType.section)) { sectionPart = newSectionPart(textSection, child); // if (sectionPart == null) // throw new IllegalArgumentException("Unsupported node " + child); // TODO list node types in exception + } else { + throw new IllegalArgumentException("Unsupported node type for " + child); } if (sectionPart != null && sectionPart instanceof Control) ((Control) sectionPart).setLayoutData(CmsUiUtils.fillWidth()); @@ -156,6 +174,8 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke refresh(s); } // section.layout(true, true); + long duration = System.currentTimeMillis() - begin; +// System.out.println(duration + " ms - " + DbkUtils.getTitle(section.getNode())); } /** To be overridden in order to provide additional SectionPart types */ @@ -199,6 +219,28 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } } + protected DbkVideo newVideo(TextSection parent, Node node) { + try { + DbkVideo video = new DbkVideo(parent,getCmsEditable().canEdit()?SWT.NONE : SWT.READ_ONLY, 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); + } else { + gd = new GridData(SWT.CENTER, SWT.FILL, false, false); +// gd.widthHint = video.getWidth(); +// gd.heightHint = video.getHeight(); + } + 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); @@ -257,7 +299,11 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke paragraph.setText(textInterpreter.readSimpleHtml(partNode)); } else if (part instanceof DbkImg) { DbkImg editableImage = (DbkImg) part; - imageManager.load(partNode, part.getControl(), editableImage.getPreferredImageSize()); + // 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; @@ -266,7 +312,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke if (title == getEdited()) title.setText(textInterpreter.read(title.getNode())); else - title.setText(textInterpreter.raw(title.getNode())); + title.setText(textInterpreter.readSimpleHtml(title.getNode())); } }