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%2FDbkContextMenu.java;h=bccdbb8986c02246a57a574bdc8fa20a9fc36e99;hp=928fb7701fcfe755624febe18d0696561ec021be;hb=4f4e2b4985cc4cc910da83398e8a9cd37645ef9c;hpb=12715aaf68a7dcaf97efe3895f41f0c7a9440dd2 diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkContextMenu.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkContextMenu.java index 928fb77..bccdbb8 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkContextMenu.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkContextMenu.java @@ -4,8 +4,9 @@ import java.util.ArrayList; import java.util.List; import org.argeo.cms.text.Paragraph; +import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.cms.ui.viewers.EditablePart; -import org.argeo.cms.ui.viewers.SectionPart; +import org.argeo.cms.ui.widgets.EditableText; import org.argeo.cms.ui.widgets.TextStyles; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; @@ -16,63 +17,74 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** Dialog to edit a text part. */ class DbkContextMenu implements TextStyles { - private final static String[] DEFAULT_TEXT_STYLES = { TextStyles.TEXT_DEFAULT, TextStyles.TEXT_PRE, - TextStyles.TEXT_QUOTE }; +// private final static String[] DEFAULT_TEXT_STYLES = { TextStyles.TEXT_DEFAULT, TextStyles.TEXT_PRE, +// TextStyles.TEXT_QUOTE }; private final AbstractDbkViewer textViewer; - private List styleButtons = new ArrayList(); - - private Label deleteButton, publishButton, editButton; +// private List styleButtons = new ArrayList(); +// +// private Label deleteButton, publishButton, editButton; private EditablePart currentTextPart; private Shell shell; - public DbkContextMenu(AbstractDbkViewer textViewer, Display display) { - shell = new Shell(display, SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP); + public DbkContextMenu(AbstractDbkViewer textViewer, Shell parentShell) { +// shell = new Shell(display, SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP); + shell = new Shell(parentShell, SWT.BORDER); // super(display, SWT.NO_TRIM | SWT.BORDER | SWT.ON_TOP); this.textViewer = textViewer; shell.setLayout(new GridLayout()); - shell.setData(RWT.CUSTOM_VARIANT, TEXT_STYLED_TOOLS_DIALOG); + // shell.setData(RWT.CUSTOM_VARIANT, TEXT_STYLED_TOOLS_DIALOG); + + shell.addShellListener(new ToolsShellListener()); + } + + public void show(EditablePart source, Point location, List availableStyles) { + if (shell.isVisible()) + shell.setVisible(false); + CmsUiUtils.clear(shell); + + if (availableStyles.isEmpty()) + return; StyledToolMouseListener stml = new StyledToolMouseListener(); + List styleButtons = new ArrayList(); if (textViewer.getCmsEditable().isEditing()) { - for (String style : DEFAULT_TEXT_STYLES) { + for (String style : availableStyles) { StyleButton styleButton = new StyleButton(shell, SWT.WRAP); - styleButton.getLabel().setData(RWT.CUSTOM_VARIANT, style); - styleButton.getLabel().setData(RWT.MARKUP_ENABLED, true); - styleButton.getLabel().addMouseListener(stml); + if (!"".equals(style)) + styleButton.setStyle(style); + else + styleButton.setStyle(null); +// if (!"".equals(style)) +// styleButton.getLabel().setData(RWT.CUSTOM_VARIANT, style); +// styleButton.getLabel().setData(RWT.MARKUP_ENABLED, true); + styleButton.setMouseListener(stml); styleButtons.add(styleButton); } - // Delete - deleteButton = new Label(shell, SWT.NONE); - deleteButton.setText("Delete"); - deleteButton.addMouseListener(stml); - - // Publish - publishButton = new Label(shell, SWT.NONE); - publishButton.setText("Publish"); - publishButton.addMouseListener(stml); +// // Delete +// deleteButton = new Label(shell, SWT.NONE); +// deleteButton.setText("Delete"); +// deleteButton.addMouseListener(stml); +// +// // Publish +// publishButton = new Label(shell, SWT.NONE); +// publishButton.setText("Publish"); +// publishButton.addMouseListener(stml); } else if (textViewer.getCmsEditable().canEdit()) { // Edit - editButton = new Label(shell, SWT.NONE); + Label editButton = new Label(shell, SWT.NONE); editButton.setText("Edit"); editButton.addMouseListener(stml); } - shell.addShellListener(new ToolsShellListener()); - } - - public void show(EditablePart source, Point location) { - if (shell.isVisible()) - shell.setVisible(false); this.currentTextPart = source; @@ -81,29 +93,50 @@ class DbkContextMenu implements TextStyles { String text = textViewer.getRawParagraphText((Paragraph) currentTextPart); String textToShow = text.length() > size ? text.substring(0, size - 3) + "..." : text; for (StyleButton styleButton : styleButtons) { - styleButton.getLabel().setText(textToShow); + styleButton.setText((styleButton.style == null ? "default" : styleButton.style) + " : " + textToShow); } } shell.pack(); shell.layout(); - if (source instanceof Control) - shell.setLocation(((Control) source).toDisplay(location.x, location.y)); + if (source instanceof Control) { + int height = shell.getSize().y; + int parentShellHeight = shell.getShell().getSize().y; + if ((location.y + height) < parentShellHeight) { + shell.setLocation(((Control) source).toDisplay(location.x, location.y)); + } else { + shell.setLocation(((Control) source).toDisplay(location.x, location.y - parentShellHeight)); + } + } shell.open(); } - class StyleButton extends Composite { + class StyleButton extends EditableText { private static final long serialVersionUID = 7731102609123946115L; - private Label label; - public StyleButton(Composite parent, int swtStyle) { - super(parent, SWT.NONE); - label = new Label(this, swtStyle); + String style; + + public StyleButton(Composite parent, int style) { + super(parent, style); } - public Label getLabel() { - return label; + @Override + public void setStyle(String style) { + this.style = style; + super.setStyle(style); } +// private Label label; +// +// public StyleButton(Composite parent, int swtStyle) { +// super(parent, SWT.NONE); +// setLayout(new GridLayout()); +// label = new Label(this, swtStyle); +// } +// +// public Label getLabel() { +// return label; +// } + } class StyledToolMouseListener extends MouseAdapter { @@ -111,18 +144,19 @@ class DbkContextMenu implements TextStyles { @Override public void mouseDown(MouseEvent e) { - Object eventSource = e.getSource(); - if (eventSource instanceof StyleButton) { - StyleButton sb = (StyleButton) e.getSource(); - String style = sb.getData(RWT.CUSTOM_VARIANT).toString(); - textViewer.setParagraphStyle((Paragraph) currentTextPart, style); - } else if (eventSource == deleteButton) { - textViewer.deletePart((SectionPart) currentTextPart); - } else if (eventSource == editButton) { - textViewer.getCmsEditable().startEditing(); - } else if (eventSource == publishButton) { - textViewer.getCmsEditable().stopEditing(); - } +// Object eventSource = e.getSource(); +//// if (eventSource instanceof StyleButton) { + // TODO make it more robust. + Label sb = (Label) e.getSource(); + Object style = sb.getData(RWT.CUSTOM_VARIANT); + textViewer.setParagraphStyle((Paragraph) currentTextPart, style == null ? null : style.toString()); +// } +// } else if (eventSource == deleteButton) { +// textViewer.deletePart((SectionPart) currentTextPart); +// } else if (eventSource == editButton) { +// textViewer.getCmsEditable().startEditing(); +// } else if (eventSource == publishButton) { +// textViewer.getCmsEditable().stopEditing(); shell.setVisible(false); } }