import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.argeo.cms.text.Paragraph;
-import org.argeo.cms.text.TextInterpreter;
-import org.argeo.cms.text.TextSection;
import org.argeo.cms.ui.CmsEditable;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.cms.ui.viewers.AbstractPageViewer;
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);
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());
for (NodeIterator ni = section.getNode().getNodes(DbkType.section.get()); ni.hasNext();) {
Node child = ni.nextNode();
if (isDbk(child, DbkType.section)) {
- TextSection newSection = new TextSection(section, SWT.NONE, child);
+ TextSection newSection = newTextSection(section, child);
newSection.setLayoutData(CmsUiUtils.fillWidth());
refresh(newSection);
}
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 */
+ protected TextSection newTextSection(Section section, Node node) {
+ return new TextSection(section, SWT.NONE, node);
}
/** To be overridden in order to provide additional SectionPart types */
}
}
+ 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);
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;
if (title == getEdited())
title.setText(textInterpreter.read(title.getNode()));
else
- title.setText(textInterpreter.raw(title.getNode()));
+ title.setText(textInterpreter.readSimpleHtml(title.getNode()));
}
}