Improve theming.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / docbook / ui / AbstractDbkViewer.java
index 44e6f547a4088f6ff59f642c30a7cf58df1e7102..044b675d3f0e530cd98cc4c73e9a7e36c0121e9d 100644 (file)
@@ -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,11 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke
 
        private final boolean flat;
 
+       private boolean showMainTitle = true;
+
+       private Integer maxMediaWidth = null;
+       private String defaultSectionStyle;
+
        protected AbstractDbkViewer(Section parent, int style, CmsEditable cmsEditable) {
                super(parent, style, cmsEditable);
 //             CmsView cmsView = CmsView.getCmsView(parent);
@@ -101,13 +107,21 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke
                        CmsUiUtils.clear(section);
                        Node node = section.getNode();
                        TextSection textSection = (TextSection) section;
+                       String style = node.hasProperty(DbkAttr.role.name()) ? node.getProperty(DbkAttr.role.name()).getString()
+                                       : getDefaultSectionStyle();
+                       if (style != null)
+                               CmsUiUtils.style(textSection, style);
+
                        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();) {
@@ -135,7 +149,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke
                        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);
                                }
@@ -147,6 +161,11 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke
                // section.layout(true, true);
        }
 
+       /** 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 SectionPart newSectionPart(TextSection textSection, Node node) {
                return null;
@@ -165,7 +184,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());
@@ -922,6 +949,22 @@ 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;
+       }
+
+       public String getDefaultSectionStyle() {
+               return defaultSectionStyle;
+       }
+
+       public void setDefaultSectionStyle(String defaultSectionStyle) {
+               this.defaultSectionStyle = defaultSectionStyle;
+       }
+
        // FILE UPLOAD LISTENER
        private class FUL implements FileUploadListener {
                public void uploadProgress(FileUploadEvent event) {