bug 411266: Allow context menus on all FormFields
https://bugs.eclipse.org/bugs/show_bug.cgi?id=411266
Tooling support for the new context menus.
diff --git a/org.eclipse.scout.sdk.ui/resources/sdkPropertyViewConfig.xml b/org.eclipse.scout.sdk.ui/resources/sdkPropertyViewConfig.xml
index 4c5bd0a..342f52d 100644
--- a/org.eclipse.scout.sdk.ui/resources/sdkPropertyViewConfig.xml
+++ b/org.eclipse.scout.sdk.ui/resources/sdkPropertyViewConfig.xml
@@ -24,6 +24,20 @@
<config name="getConfiguredPercent" type="Advanced" category="Appearance" />
<config name="getConfiguredMultiplier" type="Advanced" category="Appearance" />
</type>
+ <type name="org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu">
+ <config name="getConfiguredMenuTypes" type="Normal" category="Behavior" />
+ </type>
+ <type name="org.eclipse.scout.rt.client.ui.action.AbstractAction">
+ <config name="getConfiguredText" type="Normal" category="Appearance" />
+ <config name="getConfiguredKeyStroke" type="Normal" category="Behavior" />
+ <config name="getConfiguredTooltipText" type="Advanced" category="Appearance" />
+ <config name="getConfiguredEnabled" type="Advanced" category="Behavior" />
+ <config name="getConfiguredVisible" type="Advanced" category="Appearance" />
+ <config name="getConfiguredInheritAccessibility" type="Normal" category="Behavior" />
+ <config name="getConfiguredToggleAction" type="Advanced" category="Behavior" />
+ <config name="getConfiguredSeparator" type="Normal" category="Behavior" />
+ <config name="getConfiguredIconId" type="Advanced" category="Appearance" />
+ </type>
<type name="org.eclipse.scout.rt.client.ui.desktop.bookmark.menu.AbstractBookmarkMenu">
<config name="getConfiguredText" type="Advanced" category="Appearance" />
<config name="getConfiguredBookmarkForm" type="Advanced" category="Data" />
@@ -245,6 +259,7 @@
<config name="getConfiguredCacheBounds" type="Advanced" category="Behavior" />
<config name="getConfiguredAskIfNeedSave" type="Normal" category="Behavior" />
<config name="getConfiguredIconId" type="Advanced" category="Appearance" />
+ <config name="getConfiguredToolbarLocation" type="Advanced" category="Appearance" />
<config name="execInitForm" type="Normal" category="BusinessLogic" />
<config name="execFormActivated" type="Advanced" category="BusinessLogic" />
<config name="execDataChanged" type="Advanced" category="BusinessLogic" />
@@ -259,6 +274,7 @@
<config name="execTimer" type="Advanced" category="BusinessLogic" />
<config name="execAddSearchTerms" type="Advanced" category="BusinessLogic" />
<config name="execResetSearchFilter" type="Advanced" category="BusinessLogic" />
+ <config name="execCreateFormData" type="Advanced" category="BusinessLogic" />
</type>
<type name="org.eclipse.scout.rt.client.ui.form.fields.AbstractFormField">
<config name="getConfiguredLabel" type="Normal" category="Appearance" />
@@ -685,6 +701,7 @@
<config name="execResolveVirtualChildNode" type="Advanced" category="BusinessLogic" />
</type>
<type name="org.eclipse.scout.rt.client.ui.form.fields.AbstractValueField">
+ <config name="getConfiguredAutoAddDefaultMenus" type="Advanced" category="Behavior" />
<config name="getConfiguredAutoDisplayText" type="Advanced" category="Behavior" />
<config name="execValidateValue" type="Normal" category="BusinessLogic" />
<config name="execChangedValue" type="Normal" category="BusinessLogic" />
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/dialog/MenuTypeDialog.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/dialog/MenuTypeDialog.java
new file mode 100644
index 0000000..41c25de
--- /dev/null
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/dialog/MenuTypeDialog.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.sdk.ui.internal.dialog;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.scout.sdk.ScoutSdkCore;
+import org.eclipse.scout.sdk.Texts;
+import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
+import org.eclipse.scout.sdk.ui.fields.bundletree.CheckableTree;
+import org.eclipse.scout.sdk.ui.fields.bundletree.ICheckStateListener;
+import org.eclipse.scout.sdk.ui.fields.bundletree.ITreeNode;
+import org.eclipse.scout.sdk.ui.fields.bundletree.ITreeNodeFilter;
+import org.eclipse.scout.sdk.ui.fields.bundletree.TreeNode;
+import org.eclipse.scout.sdk.ui.fields.bundletree.TreeUtility;
+import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.util.UiUtility;
+import org.eclipse.scout.sdk.util.signature.SignatureCache;
+import org.eclipse.scout.sdk.util.type.TypeComparators;
+import org.eclipse.scout.sdk.util.type.TypeFilters;
+import org.eclipse.scout.sdk.util.type.TypeUtility;
+import org.eclipse.scout.sdk.util.typecache.ICachedTypeHierarchy;
+import org.eclipse.scout.sdk.workspace.type.config.parser.MenuTypesConfig;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * <h3>{@link MenuTypeDialog}</h3>
+ *
+ * @author Matthias Villiger
+ * @since 4.0.0 03.06.2014
+ */
+@SuppressWarnings("restriction")
+public class MenuTypeDialog extends TitleAreaDialog {
+
+ private static final String TREE_NODE_TYPE = "type";
+ private static final String TREE_NODE_ENUM = "enum";
+
+ private final MenuTypesConfig m_config;
+ private final IType m_menu;
+ private CheckableTree m_tree;
+
+ public MenuTypeDialog(Shell parentShell, MenuTypesConfig config, IType menu) {
+ super(parentShell);
+ m_config = config;
+ m_menu = menu;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ setHelpAvailable(false);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText(Texts.get("ChooseMenuTypes"));
+ setTitle(Texts.get("ChooseMenuTypes"));
+ setMessage(Texts.get("ChooseTheTypesForMenu", m_menu.getFullyQualifiedName('.')));
+ Composite rootArea = new Composite(parent, SWT.BORDER);
+
+ ITreeNode root = createTree();
+ m_tree = new CheckableTree(rootArea, root);
+ m_tree.setChecked(TreeUtility.findNodes(root, new ITreeNodeFilter() {
+ @Override
+ public boolean accept(ITreeNode node) {
+ if (TREE_NODE_ENUM.equals(node.getType())) {
+ IField f = (IField) node.getData();
+ IType enumType = (IType) node.getParent().getData();
+ return m_config.getValuesFor(enumType).contains(f.getElementName());
+ }
+ return false;
+ }
+ }));
+ m_tree.addCheckSelectionListener(new ICheckStateListener() {
+ @Override
+ public void fireNodeCheckStateChanged(ITreeNode node, boolean checkState) {
+ IType enumType = (IType) node.getParent().getData();
+ IField f = (IField) node.getData();
+ if (checkState) {
+ m_config.add(enumType, f.getElementName());
+ }
+ else {
+ m_config.remove(enumType, f.getElementName());
+ }
+ }
+ });
+
+ if (parent.getLayout() instanceof GridLayout) {
+ rootArea.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL | GridData.GRAB_VERTICAL));
+ }
+ rootArea.setLayout(new GridLayout(1, true));
+ m_tree.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_VERTICAL));
+
+ return rootArea;
+ }
+
+ private ITreeNode createTree() {
+ ITreeNode rootNode = new TreeNode(CheckableTree.TYPE_ROOT, "root");
+ rootNode.setVisible(false);
+
+ ICachedTypeHierarchy menuTypeHierarchy = ScoutSdkCore.getHierarchyCache().getPrimaryTypeHierarchy(TypeUtility.getType(IRuntimeClasses.IMenuType));
+ IType[] menuTypeEnums = menuTypeHierarchy.getAllTypes(TypeFilters.getEnumTypesFilter(), TypeComparators.getTypeNameComparator());
+ int i = 0;
+ for (IType m : menuTypeEnums) {
+ ITreeNode typeNode = TreeUtility.createNode(rootNode, TREE_NODE_TYPE, m.getElementName(), UiUtility.getTypeImageDescriptor(m, false), i++, m, false, false);
+ String enumSig = SignatureCache.createTypeSignature(m.getFullyQualifiedName());
+ try {
+ for (IField f : m.getFields()) {
+ if (f.getTypeSignature().equals(enumSig)) {
+ int flags = f.getFlags();
+ if (Flags.isPublic(flags) && Flags.isStatic(flags) && Flags.isFinal(flags) && !Flags.isDeprecated(flags)) {
+ TreeUtility.createNode(typeNode, TREE_NODE_ENUM, f.getElementName(), JavaElementImageProvider.getFieldImageDescriptor(false, flags), i++, f, false, true);
+ }
+ }
+ }
+ }
+ catch (CoreException e) {
+ ScoutSdkUi.logError("Unable to get the available menu types", e);
+ }
+ }
+
+ return rootNode;
+ }
+
+ public MenuTypesConfig openDialog() {
+ if (open() == OK) {
+ return m_config;
+ }
+ return null;
+ }
+}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigDecimalFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigDecimalFieldNodePage.java
index b9c4bc6..8904cb1 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigDecimalFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigDecimalFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.BIG_DECIMAL_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigIntegerFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigIntegerFieldNodePage.java
index d1f7a97..19782d2 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigIntegerFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BigIntegerFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.BIG_INTEGER_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BooleanFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BooleanFieldNodePage.java
index 615571e..d6d9496 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BooleanFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/BooleanFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.BOOLEAN_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ButtonNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ButtonNodePage.java
index 173c23c..d79d22b 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ButtonNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ButtonNodePage.java
@@ -35,9 +35,9 @@
}
@Override
- public void loadChildrenImpl() {
- new KeyStrokeTablePage(this, getType());
+ protected void loadChildrenImpl() {
new MenuTablePage(this, getType());
+ new KeyStrokeTablePage(this, getType());
}
@Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/CheckBoxNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/CheckBoxNodePage.java
index 614e58b..9c6ca72 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/CheckBoxNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/CheckBoxNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.CHECK_BOX_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DateFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DateFieldNodePage.java
index 8a5b02e..8560852 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DateFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DateFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.DATE_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DoubleFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DoubleFieldNodePage.java
index 9aa9faf..fae1dff 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DoubleFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/DoubleFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.DOUBLE_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/FileChooserFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/FileChooserFieldNodePage.java
index 2d40b08..2d73c33 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/FileChooserFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/FileChooserFieldNodePage.java
@@ -30,9 +30,9 @@
}
@Override
- public void loadChildrenImpl() {
- new KeyStrokeTablePage(this, getType());
+ protected void loadChildrenImpl() {
new MenuTablePage(this, getType());
+ new KeyStrokeTablePage(this, getType());
}
@Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ImageFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ImageFieldNodePage.java
index 30f72d9..8730723 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ImageFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ImageFieldNodePage.java
@@ -30,9 +30,9 @@
}
@Override
- public void loadChildrenImpl() {
- new KeyStrokeTablePage(this, getType());
+ protected void loadChildrenImpl() {
new MenuTablePage(this, getType());
+ new KeyStrokeTablePage(this, getType());
}
@Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/IntegerFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/IntegerFieldNodePage.java
index f2e28d1..2db7e69 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/IntegerFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/IntegerFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -26,6 +27,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.INTEGER_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LabelFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LabelFieldNodePage.java
index d86c6cc..d0abea7 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LabelFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LabelFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.LABEL_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ListBoxNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ListBoxNodePage.java
index 5aa4879..b643d55 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ListBoxNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ListBoxNodePage.java
@@ -15,6 +15,7 @@
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.KeyStrokeTablePage;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.table.TableNodePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -32,7 +33,8 @@
}
@Override
- public void loadChildrenImpl() {
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
new KeyStrokeTablePage(this, getType());
IType[] tables = ScoutTypeUtility.getTables(getType());
if (tables.length > 0) {
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LongFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LongFieldNodePage.java
index bb9acb5..d076e10 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LongFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/LongFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.LONG_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ProposalFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ProposalFieldNodePage.java
index a61996c..24a6082 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ProposalFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/ProposalFieldNodePage.java
@@ -30,9 +30,9 @@
}
@Override
- public void loadChildrenImpl() {
- new KeyStrokeTablePage(this, getType());
+ protected void loadChildrenImpl() {
new MenuTablePage(this, getType());
+ new KeyStrokeTablePage(this, getType());
}
@Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/RadioButtonGroupNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/RadioButtonGroupNodePage.java
index b64ef87..f8b4830 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/RadioButtonGroupNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/RadioButtonGroupNodePage.java
@@ -17,6 +17,7 @@
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.action.rename.FormFieldRenameAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
/**
@@ -38,7 +39,7 @@
@Override
protected void loadChildrenImpl() {
- // TODO check only subtypes of IRadioButton
+ new MenuTablePage(this, getType());
super.loadChildrenImpl();
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/SmartFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/SmartFieldNodePage.java
index 655c25f..d60956c 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/SmartFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/SmartFieldNodePage.java
@@ -31,9 +31,9 @@
}
@Override
- public void loadChildrenImpl() {
- new KeyStrokeTablePage(this, getType());
+ protected void loadChildrenImpl() {
new MenuTablePage(this, getType());
+ new KeyStrokeTablePage(this, getType());
}
@Override
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/StringFieldNodePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/StringFieldNodePage.java
index 71cde07..324778d 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/StringFieldNodePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/outline/pages/project/client/form/field/StringFieldNodePage.java
@@ -13,6 +13,7 @@
import org.eclipse.scout.sdk.ui.action.IScoutHandler;
import org.eclipse.scout.sdk.ui.action.delete.FormFieldDeleteAction;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.view.outline.pages.project.client.MenuTablePage;
import org.eclipse.scout.sdk.ui.view.outline.pages.IScoutPageConstants;
import org.eclipse.scout.sdk.ui.view.outline.pages.project.client.ui.form.field.AbstractFormFieldNodePage;
@@ -23,6 +24,11 @@
}
@Override
+ protected void loadChildrenImpl() {
+ new MenuTablePage(this, getType());
+ }
+
+ @Override
public String getPageId() {
return IScoutPageConstants.STRING_FIELD_NODE_PAGE;
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/FontPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/FontPresenter.java
index ab3a19d..ed5f3cd 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/FontPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/FontPresenter.java
@@ -10,8 +10,6 @@
******************************************************************************/
package org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single;
-import java.util.StringTokenizer;
-
import org.eclipse.core.runtime.CoreException;
import org.eclipse.scout.commons.CompareUtility;
import org.eclipse.scout.sdk.jobs.OperationJob;
@@ -21,7 +19,6 @@
import org.eclipse.scout.sdk.ui.view.properties.presenter.single.AbstractValuePresenter;
import org.eclipse.scout.sdk.util.SdkProperties;
import org.eclipse.scout.sdk.workspace.type.config.ConfigPropertyUpdateOperation;
-import org.eclipse.scout.sdk.workspace.type.config.PropertyMethodSourceUtility;
import org.eclipse.scout.sdk.workspace.type.config.parser.FontPropertySourceParser;
import org.eclipse.scout.sdk.workspace.type.config.parser.IPropertySourceParser;
import org.eclipse.scout.sdk.workspace.type.config.property.FontSpec;
@@ -37,8 +34,7 @@
import org.eclipse.swt.widgets.Control;
/**
- * <h3>StringPresenter</h3> Representing a plain text property method. References like 'm_value' or
- * 'IConstants.ASTRING' are handled.
+ * <h3>FontPresenter</h3>
*/
public class FontPresenter extends AbstractValuePresenter<FontSpec> {
@@ -147,46 +143,17 @@
@Override
protected FontSpec parseSourceInput(String input) throws CoreException {
- String value = PropertyMethodSourceUtility.parseReturnParameterString(input, getMethod().peekMethod(), getMethod().getSuperTypeHierarchy());
- if (value == null) {
- value = "";
+ if (input.equals("")) {
+ return getDefaultValue();
}
- return parseDisplayInput(value);
+ else {
+ return getParser().parseSourceValue(input, getMethod().peekMethod(), getMethod().getSuperTypeHierarchy());
+ }
}
@Override
protected FontSpec parseDisplayInput(String input) throws CoreException {
- FontSpec fontSpec = new FontSpec();
- StringTokenizer tok = new StringTokenizer(input, "-_,/.;");
- while (tok.hasMoreTokens()) {
- String nextToken = tok.nextToken();
- String s = nextToken.toUpperCase();
- // styles
- if (s.equals("PLAIN")) {
- fontSpec.addStyle(SWT.NORMAL);
- // nop
- }
- else if (s.equals("BOLD")) {
- fontSpec.addStyle(SWT.BOLD);
- }
- else if (s.equals("ITALIC")) {
- fontSpec.addStyle(SWT.ITALIC);
- }
- else {
- // size or name
- try {
-
- // size
- int size = Integer.parseInt(s);
- fontSpec.setHeight(size);
- }
- catch (NumberFormatException nfe) {
- // name
- fontSpec.setName(nextToken);
- }
- }
- }
- return fontSpec;
+ return parseSourceInput(input);
}
@Override
@@ -211,8 +178,7 @@
job.schedule();
}
catch (Exception e) {
- ScoutSdkUi.logError("could not parse default value of method '" + getMethod().getMethodName() + "' in type '" + getMethod().getType().getFullyQualifiedName() + "'.", e);
+ ScoutSdkUi.logError("could not update method '" + getMethod().getMethodName() + "' in type '" + getMethod().getType().getFullyQualifiedName() + "'.", e);
}
}
-
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/MenuTypePresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/MenuTypePresenter.java
new file mode 100644
index 0000000..4e76b17
--- /dev/null
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/MenuTypePresenter.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.scout.commons.CompareUtility;
+import org.eclipse.scout.sdk.jobs.OperationJob;
+import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.internal.dialog.MenuTypeDialog;
+import org.eclipse.scout.sdk.ui.view.properties.PropertyViewFormToolkit;
+import org.eclipse.scout.sdk.ui.view.properties.presenter.single.AbstractValuePresenter;
+import org.eclipse.scout.sdk.util.SdkProperties;
+import org.eclipse.scout.sdk.workspace.type.config.ConfigPropertyUpdateOperation;
+import org.eclipse.scout.sdk.workspace.type.config.parser.IPropertySourceParser;
+import org.eclipse.scout.sdk.workspace.type.config.parser.MenuTypeParsers;
+import org.eclipse.scout.sdk.workspace.type.config.parser.MenuTypesConfig;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * <h3>{@link MenuTypePresenter}</h3>
+ *
+ * @author Matthias Villiger
+ * @since 4.0.0 03.06.2014
+ */
+public class MenuTypePresenter extends AbstractValuePresenter<MenuTypesConfig> {
+
+ private Button m_chooserButton;
+ private IPropertySourceParser<MenuTypesConfig> m_parser;
+
+ public MenuTypePresenter(PropertyViewFormToolkit toolkit, Composite parent) {
+ super(toolkit, parent, null);
+ m_parser = new MenuTypeParsers();
+ }
+
+ public IPropertySourceParser<MenuTypesConfig> getParser() {
+ return m_parser;
+ }
+
+ @Override
+ protected Control createContent(Composite container) {
+ Composite rootPane = getToolkit().createComposite(container);
+ super.createContent(rootPane);
+
+ m_chooserButton = getToolkit().createButton(rootPane, "", SWT.PUSH);
+ m_chooserButton.setImage(ScoutSdkUi.getImage(ScoutSdkUi.ToolMagnifier));
+ m_chooserButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ showDialog();
+ }
+ });
+
+ // layout
+ GridLayout gLayout = new GridLayout(3, false);
+ gLayout.horizontalSpacing = 3;
+ gLayout.marginHeight = 0;
+ gLayout.marginWidth = 0;
+ rootPane.setLayout(gLayout);
+ getTextComponent().setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL | GridData.FILL_VERTICAL | GridData.GRAB_VERTICAL));
+ getTextComponent().setEditable(false);
+ m_chooserButton.setLayoutData(new GridData(SdkProperties.TOOL_BUTTON_SIZE, SdkProperties.TOOL_BUTTON_SIZE));
+ return rootPane;
+ }
+
+ private void showDialog() {
+ MenuTypeDialog menuTypesDialog = new MenuTypeDialog(getContainer().getShell(), getCurrentSourceValue().clone(), getMethod().getType());
+ MenuTypesConfig menuTypesSpec = menuTypesDialog.openDialog();
+ if (menuTypesSpec != null) {
+ try {
+ if (!CompareUtility.equals(getCurrentSourceValue(), menuTypesSpec)) {
+ storeValue(menuTypesSpec);
+ }
+ }
+ catch (CoreException e1) {
+ ScoutSdkUi.logWarning("could not parse menu types: " + menuTypesSpec, e1);
+ }
+ }
+ }
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ if (!isDisposed()) {
+ m_chooserButton.setEnabled(enabled);
+ }
+ super.setEnabled(enabled);
+ }
+
+ @Override
+ public boolean isMultiLine() {
+ return true;
+ }
+
+ @Override
+ protected String formatDisplayValue(MenuTypesConfig value) throws CoreException {
+ if (value == null) {
+ return "";
+ }
+ else {
+ return getParser().formatSourceValue(value, null, null).replace(", ", "\r\n");
+ }
+ }
+
+ @Override
+ protected MenuTypesConfig parseSourceInput(String input) throws CoreException {
+ if (input.equals("")) {
+ return getDefaultValue();
+ }
+ else {
+ return getParser().parseSourceValue(input, getMethod().peekMethod(), getMethod().getSuperTypeHierarchy());
+ }
+ }
+
+ @Override
+ protected MenuTypesConfig parseDisplayInput(String input) throws CoreException {
+ return parseSourceInput(input);
+ }
+
+ @Override
+ protected void storeValue(MenuTypesConfig value) throws CoreException {
+ try {
+ ConfigPropertyUpdateOperation<MenuTypesConfig> updateOp = new ConfigPropertyUpdateOperation<MenuTypesConfig>(getMethod(), getParser());
+ updateOp.setValue(value);
+ OperationJob job = new OperationJob(updateOp);
+ job.setDebug(true);
+ job.schedule();
+ }
+ catch (Exception e) {
+ ScoutSdkUi.logError("could update method '" + getMethod().getMethodName() + "' in type '" + getMethod().getType().getFullyQualifiedName() + "'.", e);
+ }
+ }
+}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/pages/AbstractScoutTypePage.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/pages/AbstractScoutTypePage.java
index 50282e9..0ed53d0 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/pages/AbstractScoutTypePage.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/pages/AbstractScoutTypePage.java
@@ -90,7 +90,6 @@
public boolean handleDoubleClickedDelegate() {
try {
IEditorPart editor = JavaUI.openInEditor(getType());
- // JavaUI.revealInEditor(editor, (IJavaElement)jdtMember);
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
IRegion reg = textEditor.getHighlightRange();
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/part/singlepage/JdtTypePropertyPart.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/part/singlepage/JdtTypePropertyPart.java
index a8ca62f..7204430 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/part/singlepage/JdtTypePropertyPart.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/part/singlepage/JdtTypePropertyPart.java
@@ -61,6 +61,7 @@
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.LookupServiceProposalPresenter;
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.MasterFieldPresenter;
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.MenuProposalPresenter;
+import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.MenuTypePresenter;
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.MultiLineStringPresenter;
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.NlsTextPresenter;
import org.eclipse.scout.sdk.ui.internal.view.properties.presenter.single.OutlineRootPagePresenter;
@@ -488,6 +489,10 @@
presenter = new GroupBoxBodyGridPresenter(getFormToolkit(), parent);
presenter.setMethod(method);
}
+ else if ("MENU_TYPE".equals(propertyType)) {
+ presenter = new MenuTypePresenter(getFormToolkit(), parent);
+ presenter.setMethod(method);
+ }
else {
// fall back for all other property types
presenter = new ExecMethodPresenter(getFormToolkit(), parent);
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractJavaElementListPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractJavaElementListPresenter.java
index 6aaada5..7905774 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractJavaElementListPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractJavaElementListPresenter.java
@@ -14,9 +14,12 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
@@ -110,7 +113,18 @@
m_viewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
- // TODO select the current oultine in the outline view
+ if (event.getSelection() instanceof IStructuredSelection) {
+ IStructuredSelection s = (IStructuredSelection) event.getSelection();
+ if (s.getFirstElement() instanceof IType) {
+ IType outline = (IType) s.getFirstElement();
+ try {
+ JavaUI.openInEditor(outline);
+ }
+ catch (Exception ex) {
+ ScoutSdkUi.logWarning("could not open java element '" + outline.getFullyQualifiedName() + "' in editor.", ex);
+ }
+ }
+ }
}
});
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractMethodPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractMethodPresenter.java
index 74b51e4..19c5bca 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractMethodPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractMethodPresenter.java
@@ -126,8 +126,11 @@
linkCompData.widthHint = 180;
m_linkComposite.setLayoutData(linkCompData);
- GridData contentData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
if (content != null) {
+ GridData contentData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
+ if (isMultiLine()) {
+ contentData.heightHint = 100;
+ }
content.setLayoutData(contentData);
}
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractValuePresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractValuePresenter.java
index 91c8e32..0be27fd 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractValuePresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/properties/presenter/single/AbstractValuePresenter.java
@@ -90,7 +90,6 @@
String initialText = formatDisplayValue(getCurrentSourceValue());
m_textComponent.setText(initialText);
m_textComponent.setEnabled(true);
-
}
/**
diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeFilters.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeFilters.java
index 17d53ad..fb43bb3 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeFilters.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/type/TypeFilters.java
@@ -73,6 +73,19 @@
return !TypeUtility.isGenericType(type);
}
};
+ private static final ITypeFilter ENUM_TYPE_FILTER = new ITypeFilter() {
+ @Override
+ public boolean accept(IType type) {
+ try {
+ int flags = type.getFlags();
+ return Flags.isEnum(flags) && !Flags.isDeprecated(flags) && !Flags.isAbstract(flags);
+ }
+ catch (JavaModelException e) {
+ SdkUtilActivator.logWarning("could not evalutate flags of type '" + type.getFullyQualifiedName() + "'.", e);
+ return false;
+ }
+ }
+ };
protected TypeFilters() {
}
@@ -350,6 +363,13 @@
return NO_GENERIC_FILTER;
}
+ /**
+ * @return An {@link ITypeFilter} that accepts all non-abstract and non-deprecated {@link Enum}s.
+ */
+ public static ITypeFilter getEnumTypesFilter() {
+ return ENUM_TYPE_FILTER;
+ }
+
public static ITypeFilter getMultiTypeFilterOr(final ITypeFilter... filters) {
return new ITypeFilter() {
@Override
diff --git a/org.eclipse.scout.sdk/resources/texts/Texts.properties b/org.eclipse.scout.sdk/resources/texts/Texts.properties
index 5c67ec5..275cbb5 100644
--- a/org.eclipse.scout.sdk/resources/texts/Texts.properties
+++ b/org.eclipse.scout.sdk/resources/texts/Texts.properties
@@ -66,7 +66,9 @@
ChooseATemplateForYourSequenceBox=Choose a Template for your Sequence Box.
ChooseATemplateForYourTableColumn=Choose a Template for your Table Column.
ChooseATemplateForYourToolButton=Choose a Template for your Tool Button.
+ChooseMenuTypes=Choose Menu Types
ChooseProducts=Choose the preferred products.
+ChooseTheTypesForMenu=Choose the types for menu '{0}'.
ClientBundleMissing=Client Bundle missing
ClientDownloadLocation=Client Download Location
ClientProductToInclude=Client Product to include
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/extensions/runtime/classes/IRuntimeClasses.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/extensions/runtime/classes/IRuntimeClasses.java
index 015ec1a..c67d9df 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/extensions/runtime/classes/IRuntimeClasses.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/extensions/runtime/classes/IRuntimeClasses.java
@@ -94,6 +94,9 @@
String ResourceServlet = "org.eclipse.scout.rt.server.ResourceServlet"; // NO_UCD
String UserAgentUtility = "org.eclipse.scout.rt.shared.ui.UserAgentUtility"; // NO_UCD
String CollectionUtility = "org.eclipse.scout.commons.CollectionUtility"; // NO_UCD
+ String TableMenuType = "org.eclipse.scout.rt.client.ui.action.menu.TableMenuType"; // NO_UCD
+ String TreeMenuType = "org.eclipse.scout.rt.client.ui.action.menu.TreeMenuType"; // NO_UCD
+ String ValueFieldMenuType = "org.eclipse.scout.rt.client.ui.action.menu.ValueFieldMenuType"; // NO_UCD
String AbstractFormData = "org.eclipse.scout.rt.shared.data.form.AbstractFormData"; // NO_UCD
String AbstractFormFieldData = "org.eclipse.scout.rt.shared.data.form.fields.AbstractFormFieldData"; // NO_UCD
@@ -186,6 +189,7 @@
String ITextProviderService = "org.eclipse.scout.rt.shared.services.common.text.ITextProviderService"; // NO_UCD
String IDocumentationTextProviderService = "org.eclipse.scout.rt.shared.services.common.text.IDocumentationTextProviderService"; // NO_UCD
String IMenu = "org.eclipse.scout.rt.client.ui.action.menu.IMenu"; // NO_UCD
+ String IMenuType = "org.eclipse.scout.rt.client.ui.action.menu.IMenuType"; // NO_UCD
String IOutline = "org.eclipse.scout.rt.client.ui.desktop.outline.IOutline"; // NO_UCD
String IPage = "org.eclipse.scout.rt.client.ui.desktop.outline.pages.IPage"; // NO_UCD
String IPageWithNodes = "org.eclipse.scout.rt.client.ui.desktop.outline.pages.IPageWithNodes"; // NO_UCD
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/operation/MenuNewOperation.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/operation/MenuNewOperation.java
index b7da33d..ba05c7f 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/operation/MenuNewOperation.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/operation/MenuNewOperation.java
@@ -67,7 +67,7 @@
@Override
public void validate() throws IllegalArgumentException {
if (getDeclaringType() == null) {
- throw new IllegalArgumentException("declaring type can not be null.");
+ throw new IllegalArgumentException("declaring type cannot be null.");
}
if (StringUtility.isNullOrEmpty(getTypeName())) {
throw new IllegalArgumentException("type name is null or empty.");
@@ -88,17 +88,33 @@
menuNewOp.addSortedMethodSourceBuilder(SortedMemberKeyFactory.createMethodGetConfiguredKey(nlsMethodBuilder), nlsMethodBuilder);
}
final boolean isNewFormHandler = getFormHandler() != null && getFormHandler().getElementName().matches("^New.*");
+ final ITypeHierarchy superTypeHierarchy = ScoutTypeUtility.getSuperTypeHierarchy(getDeclaringType());
if (isNewFormHandler) {
- // getConfiguredEmptySpaceAction method
- IMethodSourceBuilder getConfiguredEmptySpaceActionBuilder = MethodSourceBuilderFactory.createOverrideMethodSourceBuilder(menuNewOp.getSourceBuilder(), "getConfiguredEmptySpaceAction");
- getConfiguredEmptySpaceActionBuilder.setMethodBodySourceBuilder(MethodBodySourceBuilderFactory.createSimpleMethodBody("return true;"));
- menuNewOp.addSortedMethodSourceBuilder(SortedMemberKeyFactory.createMethodGetConfiguredKey(getConfiguredEmptySpaceActionBuilder), getConfiguredEmptySpaceActionBuilder);
+ // getConfiguredMenuTypes
+ IMethodSourceBuilder getConfiguredMenuTypes = MethodSourceBuilderFactory.createOverrideMethodSourceBuilder(menuNewOp.getSourceBuilder(), "getConfiguredMenuTypes");
+ getConfiguredMenuTypes.setMethodBodySourceBuilder(new IMethodBodySourceBuilder() {
+ @Override
+ public void createSource(IMethodSourceBuilder methodBuilder, StringBuilder source, String lineDelimiter, IJavaProject ownerProject, IImportValidator validator) throws CoreException {
+ String collUtilityName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.CollectionUtility));
+ String iMenuTypeName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.IMenuType));
+ String tableMenuTypeName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.TableMenuType));
+ String treeMenuTypeName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.TreeMenuType));
+ String valueFieldMenuTypeName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.ValueFieldMenuType));
- // getConfiguredSingleSelectionAction method
- IMethodSourceBuilder getConfiguredSingleSelectionActionBuilder = MethodSourceBuilderFactory.createOverrideMethodSourceBuilder(menuNewOp.getSourceBuilder(), "getConfiguredSingleSelectionAction");
- getConfiguredSingleSelectionActionBuilder.setMethodBodySourceBuilder(MethodBodySourceBuilderFactory.createSimpleMethodBody("return false;"));
- menuNewOp.addSortedMethodSourceBuilder(SortedMemberKeyFactory.createMethodGetConfiguredKey(getConfiguredSingleSelectionActionBuilder), getConfiguredSingleSelectionActionBuilder);
-
+ source.append("return ").append(collUtilityName).append(".<").append(iMenuTypeName).append("> hashSet(");
+ if (superTypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.ITable))) {
+ source.append(tableMenuTypeName).append(".EmptySpace");
+ }
+ else if (superTypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.ITree))) {
+ source.append(treeMenuTypeName).append(".EmptySpace");
+ }
+ else if (superTypeHierarchy.contains(TypeUtility.getType(IRuntimeClasses.IValueField))) {
+ source.append(valueFieldMenuTypeName).append(".NotNull");
+ }
+ source.append(");");
+ }
+ });
+ menuNewOp.addSortedMethodSourceBuilder(SortedMemberKeyFactory.createMethodGetConfiguredKey(getConfiguredMenuTypes), getConfiguredMenuTypes);
}
if (getFormToOpen() != null) {
// execAction method
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypeParsers.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypeParsers.java
new file mode 100644
index 0000000..296dcfc
--- /dev/null
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypeParsers.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.sdk.workspace.type.config.parser;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.Signature;
+import org.eclipse.scout.sdk.ScoutSdkCore;
+import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
+import org.eclipse.scout.sdk.util.signature.IImportValidator;
+import org.eclipse.scout.sdk.util.signature.SignatureCache;
+import org.eclipse.scout.sdk.util.type.TypeComparators;
+import org.eclipse.scout.sdk.util.type.TypeFilters;
+import org.eclipse.scout.sdk.util.type.TypeUtility;
+import org.eclipse.scout.sdk.util.typecache.ICachedTypeHierarchy;
+
+/**
+ * <h3>{@link MenuTypeParsers}</h3>
+ *
+ * @author Matthias Villiger
+ * @since 4.0.0 03.06.2014
+ */
+public class MenuTypeParsers implements IPropertySourceParser<MenuTypesConfig> {
+
+ @Override
+ public MenuTypesConfig parseSourceValue(String source, IMethod context, ITypeHierarchy superTypeHierarchy) throws CoreException {
+ ICachedTypeHierarchy menuTypeHierarchy = ScoutSdkCore.getHierarchyCache().getPrimaryTypeHierarchy(TypeUtility.getType(IRuntimeClasses.IMenuType));
+ IType[] menuTypeEnums = menuTypeHierarchy.getAllTypes(TypeFilters.getEnumTypesFilter(), TypeComparators.getTypeNameComparator());
+ MenuTypesConfig ret = new MenuTypesConfig();
+ for (IType menuType : menuTypeEnums) {
+ String fqn = menuType.getFullyQualifiedName('.');
+ String simpleName = Signature.getSimpleName(fqn);
+ String qualifier = Signature.getQualifier(fqn);
+
+ Pattern p = Pattern.compile("(?:" + qualifier.replace(".", "\\.") + "\\.)?" + simpleName + "\\.([a-zA-Z0-9_]+)");
+ Matcher m = p.matcher(source);
+ while (m.find()) {
+ String curVal = m.group(1);
+ ret.add(menuType, curVal);
+ }
+ }
+
+ return ret;
+ }
+
+ @Override
+ public String formatSourceValue(MenuTypesConfig value, String lineDelimiter, IImportValidator validator) throws CoreException {
+ StringBuilder source = new StringBuilder();
+ if (validator != null) {
+ String iMenuTypeName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.IMenuType));
+ String collUtilityName = validator.getTypeName(SignatureCache.createTypeSignature(IRuntimeClasses.CollectionUtility));
+ source.append(collUtilityName).append(".<").append(iMenuTypeName).append("> hashSet(");
+ }
+
+ boolean itemFound = false;
+ Map<IType, Set<String>> all = value.getAll();
+ for (Entry<IType, Set<String>> entry : all.entrySet()) {
+ for (String enumVal : entry.getValue()) {
+ itemFound = true;
+ String typeName = null;
+ if (validator != null) {
+ typeName = validator.getTypeName(SignatureCache.createTypeSignature(entry.getKey().getFullyQualifiedName()));
+ }
+ else {
+ typeName = entry.getKey().getElementName();
+ }
+ source.append(typeName).append('.').append(enumVal).append(", ");
+ }
+ }
+
+ if (itemFound) {
+ source.delete(source.length() - 2, source.length());
+ }
+ if (validator != null) {
+ source.append(")");
+ }
+
+ return source.toString();
+ }
+
+}
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypesConfig.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypesConfig.java
new file mode 100644
index 0000000..e802e75
--- /dev/null
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/parser/MenuTypesConfig.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2013 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.sdk.workspace.type.config.parser;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.jdt.core.IType;
+
+/**
+ * <h3>{@link MenuTypesConfig}</h3>
+ *
+ * @author Matthias Villiger
+ * @since 4.0.0 03.06.2014
+ */
+public class MenuTypesConfig implements Cloneable {
+ private final Map<IType, Set<String>> m_activeMenuTypes;
+
+ public MenuTypesConfig() {
+ this(new HashMap<IType, Set<String>>());
+ }
+
+ private MenuTypesConfig(Map<IType, Set<String>> data) {
+ m_activeMenuTypes = data;
+ }
+
+ @Override
+ public MenuTypesConfig clone() {
+ return new MenuTypesConfig(getAll());
+ }
+
+ public void add(IType menuType, String val) {
+ Set<String> set = m_activeMenuTypes.get(menuType);
+ if (set == null) {
+ set = new TreeSet<String>();
+ m_activeMenuTypes.put(menuType, set);
+ }
+ set.add(val);
+ }
+
+ public void remove(IType menuType, String val) {
+ Set<String> set = m_activeMenuTypes.get(menuType);
+ if (set != null) {
+ set.remove(val);
+ }
+ }
+
+ public Set<String> getValuesFor(IType menuType) {
+ Set<String> set = m_activeMenuTypes.get(menuType);
+ if (set != null) {
+ return new TreeSet<String>(set);
+ }
+ else {
+ return new TreeSet<String>();
+ }
+ }
+
+ public Map<IType, Set<String>> getAll() {
+ Map<IType, Set<String>> ret = new HashMap<IType, Set<String>>(m_activeMenuTypes.size());
+ for (Entry<IType, Set<String>> entry : m_activeMenuTypes.entrySet()) {
+ ret.put(entry.getKey(), new TreeSet<String>(entry.getValue()));
+ }
+ return ret;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((m_activeMenuTypes == null) ? 0 : m_activeMenuTypes.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof MenuTypesConfig)) {
+ return false;
+ }
+ MenuTypesConfig other = (MenuTypesConfig) obj;
+ if (m_activeMenuTypes == null) {
+ if (other.m_activeMenuTypes != null) {
+ return false;
+ }
+ }
+ else if (!m_activeMenuTypes.equals(other.m_activeMenuTypes)) {
+ return false;
+ }
+ return true;
+ }
+}