X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=publishing%2Forg.argeo.publishing.ui%2Fsrc%2Forg%2Fargeo%2Fdocbook%2Fui%2FAbstractDbkViewer.java;h=814cfb3415e129dcdc28164e27ad72f03d7f78ed;hp=02509f25732bec1b037f840a9b81526e94e3c68b;hb=44909f08709dd0bde1284e203a2495f03a613ed8;hpb=39eca97feb1f090d10059bab25e9fa5bf2e35cf3 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 02509f2..814cfb3 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 @@ -51,6 +51,7 @@ import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; @@ -71,6 +72,10 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke private final boolean flat; + private boolean showMainTitle = true; + + private Integer maxMediaWidth = null; + protected AbstractDbkViewer(Section parent, int style, CmsEditable cmsEditable) { super(parent, style, cmsEditable); // CmsView cmsView = CmsView.getCmsView(parent); @@ -102,22 +107,26 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke Node node = section.getNode(); TextSection textSection = (TextSection) section; if (node.hasNode(DbkType.title.get())) { - if (section.getHeader() == null) - section.createHeader(); - Node titleNode = node.getNode(DbkType.title.get()); - DocBookSectionTitle title = newSectionTitle(textSection, titleNode); - title.setLayoutData(CmsUiUtils.fillWidth()); - updateContent(title); + 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); + } } for (NodeIterator ni = node.getNodes(); ni.hasNext();) { Node child = ni.nextNode(); SectionPart sectionPart = null; if (isDbk(child, DbkType.mediaobject)) { - if (child.hasNode(DbkType.imageobject.get())) { - Node imageDataNode = child.getNode(DbkType.imageobject.get()).getNode(DbkType.imagedata.get()); - sectionPart = newImg(textSection, imageDataNode); - } + 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); +// } } else if (isDbk(child, para)) { sectionPart = newParagraph(textSection, child); } else { @@ -164,7 +173,15 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke protected DbkImg newImg(TextSection parent, Node node) { try { DbkImg img = new DbkImg(parent, parent.getStyle(), node, imageManager); - img.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT)); + GridData imgGd; + if (maxMediaWidth != null) { + imgGd = new GridData(SWT.CENTER, SWT.FILL, false, false); + imgGd.widthHint = maxMediaWidth; + img.setPreferredSize(new Point(maxMediaWidth, 0)); + } else { + imgGd = CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT); + } + img.setLayoutData(imgGd); updateContent(img); img.setMouseListener(getMouseListener()); img.setFocusListener(getFocusListener()); @@ -356,22 +373,47 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } } - void insertPart(Section section, Node node) { + SectionPart insertPart(Section section, Node node) { try { refresh(section); layoutPage(); + for (Control control : section.getChildren()) { + if (control instanceof SectionPart) { + SectionPart sectionPart = (SectionPart) control; + Node partNode = sectionPart.getNode(); + if (partNode.getPath().equals(node.getPath())) + return sectionPart; + } + } + throw new IllegalStateException("New section part " + node + "not found"); } catch (RepositoryException e) { throw new JcrException("Cannot insert part " + node + " in section " + section.getNode(), e); } } + void addParagraph(SectionPart partBefore, String txt) { + Section section = partBefore.getSection(); + SectionPart nextSectionPart = section.nextSectionPart(partBefore); + Node newNode = addDbk(section.getNode(), para); + textInterpreter.write(newNode, txt != null ? txt : ""); + if (nextSectionPart != null) { + try { + Node nextNode = nextSectionPart.getNode(); + section.getNode().orderBefore(Jcr.getIndexedName(newNode), Jcr.getIndexedName(nextNode)); + } catch (RepositoryException e) { + throw new JcrException("Cannot order " + newNode + " before " + nextSectionPart.getNode(), e); + } + } + Jcr.save(newNode); + Paragraph paragraph = (Paragraph) insertPart(partBefore.getSection(), newNode); + edit(paragraph, 0); + } + void deletePart(SectionPart sectionPart) { try { Node node = sectionPart.getNode(); Session session = node.getSession(); if (sectionPart instanceof DbkImg) { - // FIXME make it more robust - node = node.getParent().getParent(); if (!isDbk(node, DbkType.mediaobject)) throw new IllegalArgumentException("Node " + node + " is not a media object."); } @@ -862,8 +904,8 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke float height = bounds.height; float textLength = lbl.getText().length(); float area = width * height; - float charArea = area/textLength; - float lines = textLength/width; + float charArea = area / textLength; + float lines = textLength / width; float proportion = point.y * width + point.x; int pos = (int) (textLength * (proportion / area)); // TODO refine it @@ -896,6 +938,14 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke return new ArrayList<>(); } + public void setMaxMediaWidth(Integer maxMediaWidth) { + this.maxMediaWidth = maxMediaWidth; + } + + public void setShowMainTitle(boolean showMainTitle) { + this.showMainTitle = showMainTitle; + } + // FILE UPLOAD LISTENER private class FUL implements FileUploadListener { public void uploadProgress(FileUploadEvent event) {