Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Hoegger2014-03-05 16:44:42 +0000
committerAndreas Hoegger2014-03-06 14:20:24 +0000
commit4e8bfce5858c0a150c8aad09ceeab81747c2ddc7 (patch)
treed18d987efff7afae2c44c3d62fa01bdeca36d669
parent95f5309098d92c7b054b4bdf9148548cf2cf8142 (diff)
downloadorg.eclipse.scout.rt-4e8bfce5858c0a150c8aad09ceeab81747c2ddc7.tar.gz
org.eclipse.scout.rt-4e8bfce5858c0a150c8aad09ceeab81747c2ddc7.tar.xz
org.eclipse.scout.rt-4e8bfce5858c0a150c8aad09ceeab81747c2ddc7.zip
bug 422646: Possibility to add Toolbuttons in Form
https://bugs.eclipse.org/bugs/show_bug.cgi?id=422646 Change-Id: I02211d2583b4ee171611dd7729969dc590b569a1 Reviewed-on: https://git.eclipse.org/r/22950 Tested-by: Hudson CI Reviewed-by: Andreas Hoegger <Andreas.Hoegger@bsiag.com> IP-Clean: Andreas Hoegger <Andreas.Hoegger@bsiag.com>
-rw-r--r--org.eclipse.scout.commons/src/org/eclipse/scout/commons/annotations/ConfigProperty.java5
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/action/ActionButtonBarUtility.java9
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/AbstractFormActionFetcher.java8
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormFooterActionFetcher.java5
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormHeaderActionFetcher.java18
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/IActionFetcher.java3
-rw-r--r--org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/outline/PageFormFooterActionFetcher.java3
-rw-r--r--org.eclipse.scout.rt.client.test/META-INF/MANIFEST.MF7
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionTest.java43
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionUtilityTest.java106
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/FormWithToolbuttonsFormTest.java124
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest01.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest0100.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest04.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest05.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest06.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest07.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest08.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest09.java1
-rw-r--r--org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest10.java1
-rw-r--r--org.eclipse.scout.rt.client/META-INF/MANIFEST.MF18
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/AbstractAction.java39
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/ActionUtility.java121
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IAction.java5
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IActionUIFacade.java6
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java17
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/checkbox/AbstractCheckBoxMenu.java33
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/activitymap/AbstractActivityMap.java3
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/AbstractCalendar.java5
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/provider/AbstractCalendarItemProvider.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java2
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java12
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTreeNode.java8
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/ITreeNode.java2
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java14
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/bookmark/menu/AbstractBookmarkMenu.java5
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/navigation/internal/UserNavigationHistory.java18
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutlineViewButton.java10
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/AbstractForm.java59
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/IForm.java14
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/AbstractFormField.java4
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/button/AbstractButton.java10
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/filechooserfield/AbstractFileChooserField.java7
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/AbstractGroupBox.java24
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBox.java1
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBoxBodyGrid.java (renamed from org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/IGroupBoxBodyGrid.java)16
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/AbstractGroupBoxBodyGrid.java1
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/imagebox/AbstractImageField.java8
-rw-r--r--org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/smartfield/AbstractContentAssistField.java8
-rw-r--r--org.eclipse.scout.rt.extension.client/src/org/eclipse/scout/rt/extension/client/ui/desktop/internal/OrderedMenuWrapper.java5
-rw-r--r--org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/action/RwtScoutActionButton.java10
-rw-r--r--org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/AbstractRwtScoutFormHeader.java12
-rw-r--r--org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/RwtScoutMobileFormFooter.java12
-rw-r--r--org.eclipse.scout.rt.ui.rap/plugin.xml4
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/RwtMenuUtility.java17
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/MenuFactory.java37
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutCheckboxMenu.java8
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutToolbarAction.java245
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/AbstractRwtScoutPart.java26
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/nonmodalFormBar/RwtScoutFormButton.java2
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButton.java2
-rw-r--r--org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButtonBar.java2
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/AbstractSwingScoutActionButton.java27
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/SwingScoutCheckBoxMenu.java10
-rw-r--r--org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/inject/ActionInjector.java8
-rw-r--r--org.eclipse.scout.rt.ui.swt/META-INF/MANIFEST.MF18
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/SwtMenuUtility.java483
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtMenuAction.java184
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutAction.java100
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutMenu.java (renamed from org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/AbstractSwtScoutMenu.java)5
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutAction.java137
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenu.java54
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenuItem.java (renamed from org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutCheckboxMenuItem.java)2
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuAction.java36
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuContributionItem.java249
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuGroup.java85
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuItem.java (renamed from org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuItem.java)2
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutToolbarAction.java (renamed from org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/coolbar/CoolbarButton.java)28
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/ApplicationActionBarAdvisor.java8
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/SwtScoutCalendar.java40
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCalendarItem.java53
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCell.java63
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/SwtCalendar.java6
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/table/SwtScoutTable.java9
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/tree/SwtScoutTree.java1
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/button/SwtScoutButton.java4
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/filechooserfield/SwtScoutFileChooserField.java4
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/imagebox/SwtScoutImageField.java5
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/smartfield/SwtScoutSmartField.java4
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuContributionItem.java50
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuGroup.java104
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/editor/AbstractScoutEditorPart.java24
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/tray/SwtScoutTray.java5
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/view/AbstractScoutView.java24
-rw-r--r--org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/dialog/SwtScoutDialog.java21
95 files changed, 1604 insertions, 1445 deletions
diff --git a/org.eclipse.scout.commons/src/org/eclipse/scout/commons/annotations/ConfigProperty.java b/org.eclipse.scout.commons/src/org/eclipse/scout/commons/annotations/ConfigProperty.java
index 1504d69558..ea0daf9923 100644
--- a/org.eclipse.scout.commons/src/org/eclipse/scout/commons/annotations/ConfigProperty.java
+++ b/org.eclipse.scout.commons/src/org/eclipse/scout/commons/annotations/ConfigProperty.java
@@ -219,4 +219,9 @@ public @interface ConfigProperty {
* java.math.RoundingMode
*/
String ROUNDING_MODE = "ROUNDING_MODE";
+
+ /**
+ * int one of [TOOLBAR_FORM_HEADER, TOOLBAR_VIEW_PART] of IForm
+ */
+ String TOOLBAR_LOCATION = "TOOLBAR_LOCATION";
}
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/action/ActionButtonBarUtility.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/action/ActionButtonBarUtility.java
index 121d74831c..4974df0aea 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/action/ActionButtonBarUtility.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/action/ActionButtonBarUtility.java
@@ -15,6 +15,7 @@ import java.util.LinkedList;
import java.util.List;
import org.eclipse.scout.commons.CollectionUtility;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.rt.client.mobile.ui.form.IMobileAction;
import org.eclipse.scout.rt.client.mobile.ui.form.outline.AutoLeafPageWithNodes;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
@@ -26,7 +27,7 @@ import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
*/
public class ActionButtonBarUtility {
- public static List<IMobileAction> convertButtonsToActions(List<IButton> buttons) {
+ public static List<IMobileAction> convertButtonsToActions(List<IButton> buttons) throws ProcessingException {
List<IMobileAction> menuList = new ArrayList<IMobileAction>();
for (IButton button : buttons) {
IMobileAction action = convertButtonToAction(button);
@@ -38,12 +39,14 @@ public class ActionButtonBarUtility {
return menuList;
}
- public static IMobileAction convertButtonToAction(IButton button) {
+ public static IMobileAction convertButtonToAction(IButton button) throws ProcessingException {
if (button == null) {
return null;
}
- return new ButtonWrappingAction(button);
+ ButtonWrappingAction mAction = new ButtonWrappingAction(button);
+ mAction.initAction();
+ return mAction;
}
/**
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/AbstractFormActionFetcher.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/AbstractFormActionFetcher.java
index 8fa229d5de..08397e14c8 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/AbstractFormActionFetcher.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/AbstractFormActionFetcher.java
@@ -14,8 +14,8 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.scout.commons.CollectionUtility;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.rt.client.mobile.ui.action.ActionButtonBarUtility;
-import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
@@ -30,11 +30,9 @@ public abstract class AbstractFormActionFetcher implements IActionFetcher {
return m_form;
}
- @Override
- public abstract List<IMenu> fetch();
-
- protected List<IMobileAction> convertCustomProcessButtons() {
+ protected List<IMobileAction> convertCustomProcessButtons() throws ProcessingException {
List<IButton> customProcessButtons = getForm().getRootGroupBox().getCustomProcessButtons();
+
if (CollectionUtility.hasElements(customProcessButtons)) {
return ActionButtonBarUtility.convertButtonsToActions(getForm().getRootGroupBox().getCustomProcessButtons());
}
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormFooterActionFetcher.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormFooterActionFetcher.java
index 36c5b33b11..4bf27ef7f3 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormFooterActionFetcher.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormFooterActionFetcher.java
@@ -13,6 +13,7 @@ package org.eclipse.scout.rt.client.mobile.ui.form;
import java.util.LinkedList;
import java.util.List;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.form.IForm;
@@ -28,7 +29,7 @@ public class FormFooterActionFetcher extends AbstractFormActionFetcher {
}
@Override
- public List<IMenu> fetch() {
+ public List<IMenu> fetch() throws ProcessingException {
List<IMenu> formActions = new LinkedList<IMenu>();
if (getForm().getRootGroupBox().getCustomProcessButtonCount() > 0) {
List<IMobileAction> leftActions = createLeftFooterActions();
@@ -40,7 +41,7 @@ public class FormFooterActionFetcher extends AbstractFormActionFetcher {
return formActions;
}
- protected List<IMobileAction> createLeftFooterActions() {
+ protected List<IMobileAction> createLeftFooterActions() throws ProcessingException {
return convertCustomProcessButtons();
}
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormHeaderActionFetcher.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormHeaderActionFetcher.java
index f49700c3c8..7619977f3f 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormHeaderActionFetcher.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/FormHeaderActionFetcher.java
@@ -18,6 +18,9 @@ import java.util.LinkedList;
import java.util.List;
import org.eclipse.scout.commons.CollectionUtility;
+import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.commons.logger.IScoutLogger;
+import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.mobile.ui.action.ActionButtonBarUtility;
import org.eclipse.scout.rt.client.mobile.ui.form.fields.button.IMobileButton;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
@@ -32,6 +35,7 @@ import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
* {@link #getRelevantSystemTypesForRightHeader()})
*/
public class FormHeaderActionFetcher extends AbstractFormActionFetcher {
+ private static final IScoutLogger LOG = ScoutLogManager.getLogger(FormHeaderActionFetcher.class);
public FormHeaderActionFetcher(IForm form) {
super(form);
@@ -96,7 +100,12 @@ public class FormHeaderActionFetcher extends AbstractFormActionFetcher {
List<IMobileAction> sortedActions = new ArrayList<IMobileAction>();
for (IButton scoutButton : array) {
if (relevantSystemTypes.contains(scoutButton.getSystemType())) {
- sortedActions.add(ActionButtonBarUtility.convertButtonToAction(scoutButton));
+ try {
+ sortedActions.add(ActionButtonBarUtility.convertButtonToAction(scoutButton));
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize actions.", e);
+ }
}
}
return Collections.unmodifiableList(sortedActions);
@@ -114,7 +123,12 @@ public class FormHeaderActionFetcher extends AbstractFormActionFetcher {
actions.addAll(systemActions);
}
- actions.addAll(convertCustomProcessButtons());
+ try {
+ actions.addAll(convertCustomProcessButtons());
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialze actions.", e);
+ }
return actions;
}
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/IActionFetcher.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/IActionFetcher.java
index 380499e09b..ec11095262 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/IActionFetcher.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/IActionFetcher.java
@@ -12,11 +12,12 @@ package org.eclipse.scout.rt.client.mobile.ui.form;
import java.util.List;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
/**
* @since 3.9.0
*/
public interface IActionFetcher {
- List<IMenu> fetch();
+ List<IMenu> fetch() throws ProcessingException;
}
diff --git a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/outline/PageFormFooterActionFetcher.java b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/outline/PageFormFooterActionFetcher.java
index 316e512cfc..914d9680cc 100644
--- a/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/outline/PageFormFooterActionFetcher.java
+++ b/org.eclipse.scout.rt.client.mobile/src/org/eclipse/scout/rt/client/mobile/ui/form/outline/PageFormFooterActionFetcher.java
@@ -12,6 +12,7 @@ package org.eclipse.scout.rt.client.mobile.ui.form.outline;
import java.util.List;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.rt.client.mobile.ui.action.ActionButtonBarUtility;
import org.eclipse.scout.rt.client.mobile.ui.form.AbstractMobileAction;
import org.eclipse.scout.rt.client.mobile.ui.form.FormFooterActionFetcher;
@@ -34,7 +35,7 @@ public class PageFormFooterActionFetcher extends FormFooterActionFetcher {
}
@Override
- public List<IMenu> fetch() {
+ public List<IMenu> fetch() throws ProcessingException {
List<IMenu> footerActions = super.fetch();
IPage page = getForm().getPage();
diff --git a/org.eclipse.scout.rt.client.test/META-INF/MANIFEST.MF b/org.eclipse.scout.rt.client.test/META-INF/MANIFEST.MF
index 24d6f69a18..e1aed20a6e 100644
--- a/org.eclipse.scout.rt.client.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.scout.rt.client.test/META-INF/MANIFEST.MF
@@ -7,9 +7,12 @@ Bundle-Vendor: Eclipse Scout Project
Fragment-Host: org.eclipse.scout.rt.client;bundle-version="3.10.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.easymock;version="[2.4.0,3.0.0)",
- org.hamcrest.core;version="[1.3.0,2.0.0)",
+ org.hamcrest.core;version="[1.1.0,2.0.0)",
org.junit;version="[4.9.0,5.0.0)",
- org.junit.runner;version="[4.9.0,5.0.0)"
+ org.junit.runner;version="[4.9.0,5.0.0)",
+ org.junit.runners;version="[4.9.0,5.0.0)",
+ org.mockito;version="1.9.5",
+ org.mockito.stubbing;version="1.9.5"
Require-Bundle: org.eclipse.scout.rt.testing.shared;bundle-version="[3.10.0,4.1.0)",
org.eclipse.scout.rt.testing.client;bundle-version="[3.10.0,4.1.0)",
org.eclipse.scout.rt.client.testenvironment;bundle-version="[3.10.0,4.1.0)",
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionTest.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionTest.java
index 275d0236e4..9443424855 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionTest.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionTest.java
@@ -11,7 +11,9 @@
package org.eclipse.scout.rt.client.ui.action;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
@@ -20,12 +22,17 @@ import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.annotations.ClassId;
import org.eclipse.scout.commons.annotations.Replace;
import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.commons.holders.IntegerHolder;
import org.eclipse.scout.rt.client.ui.action.fixture.TestFormWithTemplateSmartfield;
import org.eclipse.scout.rt.client.ui.action.fixture.TestFormWithTemplateSmartfield.MainBox.SmartField1;
import org.eclipse.scout.rt.client.ui.action.fixture.TestFormWithTemplateSmartfield.MainBox.SmartField2;
import org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
+import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
+import org.eclipse.scout.rt.client.ui.desktop.outline.AbstractOutlineViewButton;
+import org.eclipse.scout.rt.client.ui.desktop.outline.IOutline;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* JUnit tests for {@link AbstractAction}
@@ -36,6 +43,42 @@ public class ActionTest {
private static final String TEST_CLASS_ID = "TEST_CLASS_ID";
@Test
+ public void testOutlineButton() throws ProcessingException {
+ IDesktop desktopMock = Mockito.mock(IDesktop.class);
+ IOutline outlineMock = Mockito.mock(IOutline.class);
+
+ Mockito.when(desktopMock.getAvailableOutlines()).thenReturn(CollectionUtility.arrayList(outlineMock));
+ final IntegerHolder execActionHolder = new IntegerHolder(0);
+ final IntegerHolder execToggleHolder = new IntegerHolder(0);
+ AbstractOutlineViewButton b = new AbstractOutlineViewButton(desktopMock, outlineMock.getClass()) {
+ @Override
+ protected void execAction() throws ProcessingException {
+ execActionHolder.setValue(execActionHolder.getValue() + 1);
+ }
+
+ @Override
+ protected void execToggleAction(boolean selected) throws ProcessingException {
+ execToggleHolder.setValue(execToggleHolder.getValue() + 1);
+ }
+ };
+ b.getUIFacade().fireActionFromUI();
+ assertEquals(1, execActionHolder.getValue().intValue());
+ assertEquals(1, execToggleHolder.getValue().intValue());
+ assertTrue(b.isSelected());
+
+ b.getUIFacade().fireActionFromUI();
+ assertEquals(1, execActionHolder.getValue().intValue());
+ assertEquals(1, execToggleHolder.getValue().intValue());
+ assertTrue(b.isSelected());
+
+ b.setSelected(false);
+ assertEquals(1, execActionHolder.getValue().intValue());
+ assertEquals(2, execToggleHolder.getValue().intValue());
+ assertFalse(b.isSelected());
+
+ }
+
+ @Test
public void testGetFieldId() {
assertEquals("BaseAction", new BaseAction().getActionId());
assertEquals("BaseAction", new ExtendedTestAction().getActionId());
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionUtilityTest.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionUtilityTest.java
new file mode 100644
index 0000000000..3e43dcffd0
--- /dev/null
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/action/ActionUtilityTest.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.rt.client.ui.action;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.easymock.EasyMock;
+import org.eclipse.scout.commons.CollectionUtility;
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
+import org.junit.Test;
+
+/**
+ * Tests for {@link ActionUtility}
+ *
+ * @since 4.0.0-M6
+ */
+public class ActionUtilityTest {
+
+ @Test
+ public void testCleanupWithEmptyList() {
+ List<IMenu> cleanList = ActionUtility.visibleNormalizedActions(Collections.<IMenu> emptyList());
+ assertTrue(cleanList.isEmpty());
+ }
+
+ @Test
+ public void testCleanupWithOnlySeparators() {
+ IMenu s1 = createMenu("s1", true, true);
+ IMenu s2 = createMenu("s2", true, true);
+ IMenu s3 = createMenu("s3", true, true);
+ List<IMenu> cleanList = ActionUtility.visibleNormalizedActions(CollectionUtility.arrayList(s1, s2, s3));
+ assertTrue(cleanList.isEmpty());
+ }
+
+ @Test
+ public void testCleanupWithLeadingSeparators() {
+ IMenu s1 = createMenu("s1", true, true);
+ IMenu s2 = createMenu("s2", true, true);
+ IMenu s3 = createMenu("s3", true, true);
+ IMenu m4 = createMenu("m4", false, true);
+ List<IMenu> cleanList = ActionUtility.visibleNormalizedActions(CollectionUtility.arrayList(s1, s2, s3, m4));
+ assertEquals(1, cleanList.size());
+ assertEquals("m4", cleanList.get(0).getText());
+ }
+
+ @Test
+ public void testCleanupWithEndingSeparators() {
+
+ IMenu s1 = createMenu("s1", true, true);
+ IMenu s2 = createMenu("s2", true, true);
+ IMenu s3 = createMenu("s3", true, true);
+ IMenu m4 = createMenu("m4", false, true);
+ IMenu s5 = createMenu("s5", true, true);
+ IMenu s6 = createMenu("s6", true, true);
+ IMenu s7 = createMenu("s7", true, true);
+ List<IMenu> cleanList = ActionUtility.visibleNormalizedActions(CollectionUtility.arrayList(s1, s2, s3, m4, s5, s6, s7));
+ assertEquals(1, cleanList.size());
+ assertEquals("m4", cleanList.get(0).getText());
+ }
+
+ @Test
+ public void testCleanupWithDoubleSeparators() {
+ IMenu s1 = createMenu("s1", true, true);
+ IMenu s2 = createMenu("s2", true, true);
+ IMenu s3 = createMenu("s3", true, true);
+ IMenu m4 = createMenu("m4", false, true);
+ IMenu s5 = createMenu("s5", true, true);
+ IMenu s6 = createMenu("s6", true, true);
+ IMenu s7 = createMenu("s7", true, true);
+ IMenu m8 = createMenu("m8", false, true);
+ List<IMenu> cleanList = ActionUtility.visibleNormalizedActions(CollectionUtility.arrayList(s1, s2, s3, m4, s5, s6, s7, m8));
+ assertEquals(3, cleanList.size());
+ assertEquals("m4", cleanList.get(0).getText());
+ assertEquals("s5", cleanList.get(1).getText());
+ assertEquals("m8", cleanList.get(2).getText());
+
+ }
+
+ private IMenu createMenu(String label, boolean separator, boolean visible) {
+ IMenu menu = mock(IMenu.class);
+ when(menu.isVisible()).thenReturn(visible);
+ when(menu.isSeparator()).thenReturn(separator);
+ when(menu.getText()).thenReturn(label);
+
+ return menu;
+ }
+
+ private void setChildMenus(IMenu parentMenu, List<IMenu> childMenus) {
+ EasyMock.expect(parentMenu.getChildActions()).andReturn(childMenus);
+ EasyMock.expect(parentMenu.getChildActionCount()).andReturn(childMenus.size());
+ }
+
+}
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/FormWithToolbuttonsFormTest.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/FormWithToolbuttonsFormTest.java
new file mode 100644
index 0000000000..f132e73dfe
--- /dev/null
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/FormWithToolbuttonsFormTest.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * 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.rt.client.ui.form;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.scout.commons.annotations.Order;
+import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.rt.client.ui.action.tool.AbstractToolButton;
+import org.eclipse.scout.rt.client.ui.form.FormWithToolbuttonsFormTest.FormWithToolbuttonsForm.MainBox.CloseButton;
+import org.eclipse.scout.rt.client.ui.form.FormWithToolbuttonsFormTest.FormWithToolbuttonsForm.MainBox.GroupBox;
+import org.eclipse.scout.rt.client.ui.form.FormWithToolbuttonsFormTest.FormWithToolbuttonsForm.MainBox.GroupBox.DefaultField;
+import org.eclipse.scout.rt.client.ui.form.FormWithToolbuttonsFormTest.FormWithToolbuttonsForm.Toolbutton01;
+import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
+import org.eclipse.scout.rt.shared.AbstractIcons;
+import org.eclipse.scout.rt.shared.TEXTS;
+import org.eclipse.scout.testing.client.runner.ScoutClientTestRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(ScoutClientTestRunner.class)
+public class FormWithToolbuttonsFormTest {
+
+ @Test
+ public void testForm() throws ProcessingException {
+ FormWithToolbuttonsForm form = new FormWithToolbuttonsForm();
+ assertEquals(1, form.getToolbuttons().size());
+ assertEquals(Toolbutton01.class.getSimpleName(), form.getToolbuttons().get(0).getClass().getSimpleName());
+ }
+
+ public class FormWithToolbuttonsForm extends AbstractForm {
+
+ public FormWithToolbuttonsForm() throws ProcessingException {
+ super();
+ }
+
+ @Override
+ protected boolean getConfiguredAskIfNeedSave() {
+ return false;
+ }
+
+ @Override
+ protected String getConfiguredTitle() {
+ return TEXTS.get("StringField");
+ }
+
+ public void startPageForm() throws ProcessingException {
+ startInternal(new PageFormHandler());
+ }
+
+ public CloseButton getCloseButton() {
+ return getFieldByClass(CloseButton.class);
+ }
+
+ public DefaultField getDefaultField() {
+ return getFieldByClass(DefaultField.class);
+ }
+
+ public GroupBox getGroupBox() {
+ return getFieldByClass(GroupBox.class);
+ }
+
+ public MainBox getMainBox() {
+ return getFieldByClass(MainBox.class);
+ }
+
+ @Order(10.0)
+ public class MainBox extends AbstractGroupBox {
+
+ @Order(10.0)
+ public class GroupBox extends AbstractGroupBox {
+
+ @Order(10.0)
+ public class DefaultField extends AbstractStringField {
+
+ @Override
+ protected int getConfiguredGridW() {
+ return 2;
+ }
+
+ @Override
+ protected String getConfiguredLabel() {
+ return TEXTS.get("Default");
+ }
+ }
+ }
+
+ @Order(30.0)
+ public class CloseButton extends AbstractCloseButton {
+ }
+ }
+
+ @Order(200)
+ public class Toolbutton01 extends AbstractToolButton {
+ @Override
+ protected String getConfiguredText() {
+ return "Toolbutton";
+ }
+
+ @Override
+ protected String getConfiguredIconId() {
+ return AbstractIcons.Bookmark;
+ }
+ }
+
+ public class PageFormHandler extends AbstractFormHandler {
+
+ @Override
+ protected void execLoad() throws ProcessingException {
+ getDefaultField().setValue(TEXTS.get("Lorem"));
+ }
+ }
+ }
+}
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest01.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest01.java
index 9f50e1a033..9dcc67d1f7 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest01.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest01.java
@@ -14,6 +14,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.GroupBoxLayoutTest01.MainBox.Field01;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.GroupBoxLayoutTest01.MainBox.Field02;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.GroupBoxLayoutTest01.MainBox.Field03;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest0100.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest0100.java
index 6afb601109..2dea1d80a0 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest0100.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest0100.java
@@ -16,6 +16,7 @@ import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.GridData;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest04.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest04.java
index 2b7248da2f..2682965e0b 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest04.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest04.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest05.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest05.java
index a80b8dffa1..48e6dbc1c0 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest05.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest05.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest06.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest06.java
index 9237fc98a2..3699b836b7 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest06.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest06.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest07.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest07.java
index 9773d0703c..871e893769 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest07.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest07.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest08.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest08.java
index 99381a570a..1869617329 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest08.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest08.java
@@ -16,6 +16,7 @@ import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.basic.table.AbstractTable;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.tablefield.AbstractTableField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest09.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest09.java
index 37c6fd5983..a3fd883606 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest09.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest09.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest10.java b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest10.java
index 688ebd5ec5..a871d38159 100644
--- a/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest10.java
+++ b/org.eclipse.scout.rt.client.test/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/GroupBoxLayoutTest10.java
@@ -18,6 +18,7 @@ import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton;
import org.eclipse.scout.rt.client.ui.form.fields.button.AbstractCloseButton;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.AbstractGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.stringfield.AbstractStringField;
import org.junit.Test;
diff --git a/org.eclipse.scout.rt.client/META-INF/MANIFEST.MF b/org.eclipse.scout.rt.client/META-INF/MANIFEST.MF
index 7ea16a8fc7..a8c222b86c 100644
--- a/org.eclipse.scout.rt.client/META-INF/MANIFEST.MF
+++ b/org.eclipse.scout.rt.client/META-INF/MANIFEST.MF
@@ -13,21 +13,29 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";visibili
Import-Package: org.osgi.framework;version="[1.3.0,2.0.0)"
Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.busy,
+ org.eclipse.scout.rt.client.internal,
org.eclipse.scout.rt.client.services,
org.eclipse.scout.rt.client.services.common.bookmark,
+ org.eclipse.scout.rt.client.services.common.bookmark.internal,
org.eclipse.scout.rt.client.services.common.clientnotification,
+ org.eclipse.scout.rt.client.services.common.clientnotification.internal,
org.eclipse.scout.rt.client.services.common.clipboard,
org.eclipse.scout.rt.client.services.common.code,
org.eclipse.scout.rt.client.services.common.exceptionhandler,
+ org.eclipse.scout.rt.client.services.common.exceptionhandler.internal,
org.eclipse.scout.rt.client.services.common.file,
org.eclipse.scout.rt.client.services.common.icon,
org.eclipse.scout.rt.client.services.common.perf,
+ org.eclipse.scout.rt.client.services.common.perf.internal,
org.eclipse.scout.rt.client.services.common.platform,
+ org.eclipse.scout.rt.client.services.common.prefs,
org.eclipse.scout.rt.client.services.common.progress,
+ org.eclipse.scout.rt.client.services.common.progress.internal,
org.eclipse.scout.rt.client.services.common.pwd,
org.eclipse.scout.rt.client.services.common.search,
org.eclipse.scout.rt.client.services.common.security,
org.eclipse.scout.rt.client.services.common.session,
+ org.eclipse.scout.rt.client.services.common.session.internal,
org.eclipse.scout.rt.client.services.common.shell,
org.eclipse.scout.rt.client.services.common.spellchecker,
org.eclipse.scout.rt.client.services.common.spellchecker.forms,
@@ -36,6 +44,7 @@ Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.services.lookup,
org.eclipse.scout.rt.client.servicetunnel,
org.eclipse.scout.rt.client.servicetunnel.http,
+ org.eclipse.scout.rt.client.servicetunnel.http.internal,
org.eclipse.scout.rt.client.ui,
org.eclipse.scout.rt.client.ui.action,
org.eclipse.scout.rt.client.ui.action.keystroke,
@@ -54,6 +63,7 @@ Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.ui.basic.table.columnfilter,
org.eclipse.scout.rt.client.ui.basic.table.columns,
org.eclipse.scout.rt.client.ui.basic.table.customizer,
+ org.eclipse.scout.rt.client.ui.basic.table.internal,
org.eclipse.scout.rt.client.ui.basic.table.menus,
org.eclipse.scout.rt.client.ui.basic.tree,
org.eclipse.scout.rt.client.ui.desktop,
@@ -61,7 +71,9 @@ Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.ui.desktop.bookmark.internal,
org.eclipse.scout.rt.client.ui.desktop.bookmark.menu,
org.eclipse.scout.rt.client.ui.desktop.bookmark.view,
+ org.eclipse.scout.rt.client.ui.desktop.internal,
org.eclipse.scout.rt.client.ui.desktop.navigation,
+ org.eclipse.scout.rt.client.ui.desktop.navigation.internal,
org.eclipse.scout.rt.client.ui.desktop.outline,
org.eclipse.scout.rt.client.ui.desktop.outline.pages,
org.eclipse.scout.rt.client.ui.form,
@@ -88,9 +100,11 @@ Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.ui.form.fields.filechooserfield,
org.eclipse.scout.rt.client.ui.form.fields.groupbox,
org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal,
+ org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.matrix,
org.eclipse.scout.rt.client.ui.form.fields.htmlfield,
org.eclipse.scout.rt.client.ui.form.fields.imagebox,
org.eclipse.scout.rt.client.ui.form.fields.integerfield,
+ org.eclipse.scout.rt.client.ui.form.fields.internal,
org.eclipse.scout.rt.client.ui.form.fields.labelfield,
org.eclipse.scout.rt.client.ui.form.fields.listbox,
org.eclipse.scout.rt.client.ui.form.fields.longfield,
@@ -100,10 +114,14 @@ Export-Package: org.eclipse.scout.rt.client,
org.eclipse.scout.rt.client.ui.form.fields.placeholder,
org.eclipse.scout.rt.client.ui.form.fields.plannerfield,
org.eclipse.scout.rt.client.ui.form.fields.radiobuttongroup,
+ org.eclipse.scout.rt.client.ui.form.fields.radiobuttongroup.internal,
org.eclipse.scout.rt.client.ui.form.fields.sequencebox,
+ org.eclipse.scout.rt.client.ui.form.fields.sequencebox.internal,
org.eclipse.scout.rt.client.ui.form.fields.smartfield,
org.eclipse.scout.rt.client.ui.form.fields.snapbox,
+ org.eclipse.scout.rt.client.ui.form.fields.snapbox.internal,
org.eclipse.scout.rt.client.ui.form.fields.splitbox,
+ org.eclipse.scout.rt.client.ui.form.fields.splitbox.internal,
org.eclipse.scout.rt.client.ui.form.fields.stringfield,
org.eclipse.scout.rt.client.ui.form.fields.tabbox,
org.eclipse.scout.rt.client.ui.form.fields.tabbox.internal;x-friends:="com.bsiag.bsicase.designer",
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/AbstractAction.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/AbstractAction.java
index e7fe8f0524..bbd579c606 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/AbstractAction.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/AbstractAction.java
@@ -64,16 +64,19 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
protected void callInitializer() {
if (!m_initialized) {
initConfig();
- try {
- execInitAction();
- }
- catch (Throwable t) {
- LOG.warn("Action " + getClass().getName(), t);
- }
m_initialized = true;
}
}
+ /**
+ * This is the init of the runtime model after the environment (form, fields, ..) are built
+ * and configured
+ */
+ @Override
+ public final void initAction() throws ProcessingException {
+ execInitAction();
+ }
+
/*
* Configuration
*/
@@ -268,8 +271,7 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
if (isEnabled() && isVisible()) {
try {
setEnabledProcessingAction(false);
-
- execAction();
+ doActionInternal();
}
finally {
setEnabledProcessingAction(true);
@@ -277,6 +279,19 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
}
}
+ /**
+ * Please double check if implementing this method!
+ * Consider using {@link #execAction()} instead. If no other option ensure super call when overriding this method.
+ *
+ * @throws ProcessingException
+ */
+ protected void doActionInternal() throws ProcessingException {
+ if (isToggleAction()) {
+ setSelected(!isSelected());
+ }
+ execAction();
+ }
+
@Override
public String getIconId() {
return propertySupport.getPropertyString(PROP_ICON_ID);
@@ -407,8 +422,7 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
@Override
public void setSelected(boolean b) {
- boolean changed = propertySupport.setPropertyBool(PROP_SELECTED, b);
- if (changed) {
+ if (setSelectedInternal(b)) {
try {
execToggleAction(b);
}
@@ -418,6 +432,10 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
}
}
+ protected boolean setSelectedInternal(boolean b) {
+ return propertySupport.setPropertyBool(PROP_SELECTED, b);
+ }
+
@Override
public boolean isToggleAction() {
return m_toggleAction;
@@ -643,6 +661,7 @@ public abstract class AbstractAction extends AbstractPropertyObserver implements
}
}
+ @SuppressWarnings("deprecation")
@Override
public void setSelectedFromUI(boolean b) {
setSelected(b);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/ActionUtility.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/ActionUtility.java
new file mode 100644
index 0000000000..f3b68fda7c
--- /dev/null
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/ActionUtility.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.rt.client.ui.action;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.scout.commons.exception.ProcessingException;
+
+/**
+ *
+ */
+public final class ActionUtility {
+
+ /**
+ * Removes invisible actions. Also removes leading and trailing separators as well as multiple consecutive separators.
+ *
+ * @since 3.8.1
+ */
+ public static <T extends IAction> List<T> visibleNormalizedActions(List<T> actionNodes) {
+ if (actionNodes == null) {
+ return Collections.emptyList();
+ }
+
+ // only visible
+ ArrayList<T> cleanedActions = getVisibleActions(actionNodes);
+
+ // remove multiple and leading separators
+ T prevSeparator = null;
+ T prevAction = null;
+ ListIterator<T> it = cleanedActions.listIterator();
+ while (it.hasNext()) {
+ T actionNode = it.next();
+
+ if (actionNode.isSeparator()) {
+ if (prevAction == null || prevSeparator != null) {
+ // remove leading
+ it.remove();
+ }
+ prevAction = null;
+ prevSeparator = actionNode;
+ }
+ else {
+ prevSeparator = null;
+ prevAction = actionNode;
+ }
+ }
+ // remove ending separators
+ while (it.hasPrevious()) {
+ T previous = it.previous();
+ if (previous.isSeparator()) {
+ it.remove();
+
+ }
+ else {
+ break;
+ }
+ }
+
+ return cleanedActions;
+ }
+
+ public static <T extends IAction> ArrayList<T> getVisibleActions(List<T> actions) {
+ ArrayList<T> result = new ArrayList<T>();
+ if (actions != null) {
+ for (T a : actions) {
+ if (a.isVisible()) {
+ result.add(a);
+ }
+ }
+ }
+ return result;
+ }
+
+ public static void initActions(List<? extends IAction> actions) throws ProcessingException {
+ InitActionVisitor v = new InitActionVisitor();
+ for (IAction a : actions) {
+ a.acceptVisitor(v);
+ }
+ v.handleResult();
+ }
+
+ private static class InitActionVisitor implements IActionVisitor {
+ private ProcessingException m_firstEx;
+
+ @Override
+ public int visit(IAction action) {
+ try {
+ action.initAction();
+ }
+ catch (ProcessingException e) {
+ if (m_firstEx == null) {
+ m_firstEx = e;
+ }
+ }
+ catch (Throwable t) {
+ if (m_firstEx == null) {
+ m_firstEx = new ProcessingException("Unexpected", t);
+ }
+ }
+ return CONTINUE;
+ }
+
+ public void handleResult() throws ProcessingException {
+ if (m_firstEx != null) {
+ throw m_firstEx;
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IAction.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IAction.java
index c84ac15c8e..6fa106bed0 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IAction.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IAction.java
@@ -43,6 +43,11 @@ public interface IAction extends IPropertyObserver, ITypeWithClassId {
String PROP_SEPARATOR = "separator";
/**
+ * @throws ProcessingException
+ */
+ void initAction() throws ProcessingException;
+
+ /**
* called to perform action
*/
void doAction() throws ProcessingException;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IActionUIFacade.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IActionUIFacade.java
index 13daa5902e..2715bf25bb 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IActionUIFacade.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/IActionUIFacade.java
@@ -4,7 +4,7 @@
* 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
******************************************************************************/
@@ -12,6 +12,10 @@ package org.eclipse.scout.rt.client.ui.action;
public interface IActionUIFacade {
+ /**
+ * use {@link #fireActionFromUI()} instead
+ */
+ @Deprecated
void setSelectedFromUI(boolean b);
void fireActionFromUI();
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java
index a5d8302065..303b3e949b 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/MenuUtility.java
@@ -16,6 +16,9 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.eclipse.scout.commons.exception.ProcessingException;
+import org.eclipse.scout.commons.logger.IScoutLogger;
+import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
@@ -25,6 +28,8 @@ import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
* @since 3.10.0-M4
*/
public final class MenuUtility {
+ private static final IScoutLogger LOG = ScoutLogManager.getLogger(MenuUtility.class);
+
/**
* Collects all keyStrokes from an array of menus
*
@@ -37,9 +42,15 @@ public final class MenuUtility {
for (IMenu m : menu) {
String s = m.getKeyStroke();
if (s != null && s.trim().length() > 0) {
- KeyStroke ks = new KeyStroke(s, m);
- if (keys.add(ks.getKeyStroke())) {
- keyStrokes.add(ks);
+ try {
+ KeyStroke ks = new KeyStroke(s, m);
+ ks.initAction();
+ if (keys.add(ks.getKeyStroke())) {
+ keyStrokes.add(ks);
+ }
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize enter key stroke.", e);
}
}
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/checkbox/AbstractCheckBoxMenu.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/checkbox/AbstractCheckBoxMenu.java
index 410682320f..80d1467914 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/checkbox/AbstractCheckBoxMenu.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/action/menu/checkbox/AbstractCheckBoxMenu.java
@@ -4,7 +4,7 @@
* 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
******************************************************************************/
@@ -14,6 +14,8 @@ import org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu;
public abstract class AbstractCheckBoxMenu extends AbstractMenu implements ICheckBoxMenu {
+ private boolean m_supportedChangeToggleBehaviour;
+
public AbstractCheckBoxMenu() {
super();
}
@@ -22,13 +24,32 @@ public abstract class AbstractCheckBoxMenu extends AbstractMenu implements IChec
super(callInitializer);
}
- /*
- * Runtime
- */
+ @Override
+ protected void initConfig() {
+ // enable setToggleAction for super init
+ try {
+ m_supportedChangeToggleBehaviour = true;
+ super.initConfig();
+ }
+ finally {
+ m_supportedChangeToggleBehaviour = false;
+ }
+ }
+
+ @Override
+ protected final boolean getConfiguredToggleAction() {
+ return true;
+ }
@Override
- protected void execAction() {
- setSelected(!isSelected());
+ public final void setToggleAction(boolean b) {
+ if (m_supportedChangeToggleBehaviour) {
+ super.setToggleAction(b);
+ }
+ else {
+ throw new UnsupportedOperationException("setToggleAction on " + AbstractCheckBoxMenu.class.getSimpleName() + " is not supported!");
+ }
+ // void here
}
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/activitymap/AbstractActivityMap.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/activitymap/AbstractActivityMap.java
index 5bc3e018fc..0fe4b0ec49 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/activitymap/AbstractActivityMap.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/activitymap/AbstractActivityMap.java
@@ -40,6 +40,7 @@ import org.eclipse.scout.commons.beans.AbstractPropertyObserver;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.shared.services.common.exceptionhandler.IExceptionHandlerService;
import org.eclipse.scout.service.SERVICES;
@@ -333,6 +334,8 @@ public abstract class AbstractActivityMap<RI, AI> extends AbstractPropertyObserv
public final void initActivityMap() throws ProcessingException {
initActivityMapInternal();
execInitActivityMap();
+ // init actions
+ ActionUtility.initActions(getMenus());
}
protected void initActivityMapInternal() throws ProcessingException {
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/AbstractCalendar.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/AbstractCalendar.java
index 21695c5c5c..1140559fc8 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/AbstractCalendar.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/AbstractCalendar.java
@@ -39,6 +39,7 @@ import org.eclipse.scout.commons.beans.AbstractPropertyObserver;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.basic.calendar.provider.ICalendarItemProvider;
import org.eclipse.scout.rt.client.ui.basic.cell.Cell;
@@ -185,7 +186,7 @@ public abstract class AbstractCalendar extends AbstractPropertyObserver implemen
setMarkOutOfMonthDays(getConfiguredMarkOutOfMonthDays());
// menus
- ArrayList<IMenu> menuList = new ArrayList<IMenu>();
+ List<IMenu> menuList = new ArrayList<IMenu>();
for (Class<? extends IMenu> menuClazz : getConfiguredMenus()) {
try {
IMenu menu = ConfigurationUtility.newInnerInstance(this, menuClazz);
@@ -251,6 +252,8 @@ public abstract class AbstractCalendar extends AbstractPropertyObserver implemen
*/
@Override
public void initCalendar() throws ProcessingException {
+ // init menus
+ ActionUtility.initActions(getMenus());
execInitCalendar();
/*
* add property change listener to - reload calendar items when view range
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/provider/AbstractCalendarItemProvider.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/provider/AbstractCalendarItemProvider.java
index 02283155e1..59693143d5 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/provider/AbstractCalendarItemProvider.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/calendar/provider/AbstractCalendarItemProvider.java
@@ -156,7 +156,9 @@ public abstract class AbstractCalendarItemProvider extends AbstractPropertyObser
List<IMenu> menuList = new ArrayList<IMenu>();
for (Class<? extends IMenu> menuClazz : getConfiguredMenus()) {
try {
- menuList.add(ConfigurationUtility.newInnerInstance(this, menuClazz));
+ IMenu menu = ConfigurationUtility.newInnerInstance(this, menuClazz);
+ menu.initAction();
+ menuList.add(menu);
}
catch (Exception e) {
LOG.warn(null, e);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
index d19751b508..97ba85c4ca 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/table/AbstractTable.java
@@ -53,6 +53,7 @@ import org.eclipse.scout.rt.client.ui.ClientUIPreferences;
import org.eclipse.scout.rt.client.ui.IDNDSupport;
import org.eclipse.scout.rt.client.ui.IEventHistory;
import org.eclipse.scout.rt.client.ui.action.ActionFinder;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
@@ -977,6 +978,7 @@ public abstract class AbstractTable extends AbstractPropertyObserver implements
setTableChanging(true);
//
initTableInternal();
+ ActionUtility.initActions(getMenus());
execInitTable();
}
finally {
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
index d08c33fa9b..39871d9298 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
@@ -37,6 +37,7 @@ import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.IEventHistory;
import org.eclipse.scout.rt.client.ui.action.ActionFinder;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
@@ -434,6 +435,7 @@ public abstract class AbstractTree extends AbstractPropertyObserver implements I
@Override
public final void initTree() throws ProcessingException {
initTreeInternal();
+ ActionUtility.initActions(getMenus());
execInitTree();
}
@@ -742,8 +744,14 @@ public abstract class AbstractTree extends AbstractPropertyObserver implements I
List<IKeyStroke> ksList = new ArrayList<IKeyStroke>(m_baseKeyStrokes);
for (IMenu menu : menus) {
if (menu.getKeyStroke() != null) {
- IKeyStroke ks = new KeyStroke(menu.getKeyStroke(), menu);
- ksList.add(ks);
+ try {
+ IKeyStroke ks = new KeyStroke(menu.getKeyStroke(), menu);
+ ks.initAction();
+ ksList.add(ks);
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize key stroke '" + menu.getKeyStroke() + "'", e);
+ }
}
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTreeNode.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTreeNode.java
index f4bd94ac52..476a2baa83 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTreeNode.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTreeNode.java
@@ -27,6 +27,7 @@ import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.action.ActionFinder;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.basic.cell.Cell;
import org.eclipse.scout.rt.client.ui.basic.cell.ICell;
@@ -218,6 +219,13 @@ public abstract class AbstractTreeNode implements ITreeNode, ICellObserver {
*/
@Override
public void initTreeNode() {
+ // init menus
+ try {
+ ActionUtility.initActions(getMenus());
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize actions.", e);
+ }
execInitTreeNode();
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/ITreeNode.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/ITreeNode.java
index 8338b5da7b..ba2557d211 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/ITreeNode.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/basic/tree/ITreeNode.java
@@ -31,7 +31,7 @@ public interface ITreeNode {
int STATUS_UPDATED = 2;
int STATUS_DELETED = 3;
- void initTreeNode();
+ void initTreeNode() throws ProcessingException;
String getNodeId();
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
index d347e64739..9d6840fbb7 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
@@ -44,6 +44,7 @@ import org.eclipse.scout.rt.client.ClientSyncJob;
import org.eclipse.scout.rt.client.services.common.bookmark.internal.BookmarkUtility;
import org.eclipse.scout.rt.client.ui.DataChangeListener;
import org.eclipse.scout.rt.client.ui.action.ActionFinder;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.IAction;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
@@ -449,6 +450,7 @@ public abstract class AbstractDesktop extends AbstractPropertyObserver implement
if (menu.getKeyStroke() != null) {
try {
IKeyStroke ks = new KeyStroke(menu.getKeyStroke(), menu);
+ ks.initAction();
actionList.add(ks);
}
catch (Throwable t) {
@@ -465,6 +467,14 @@ public abstract class AbstractDesktop extends AbstractPropertyObserver implement
m_toolButtons = CollectionUtility.arrayList(ConfigurationUtility.sortByOrder(toolButtonList).toArray(new IToolButton[toolButtonList.size()]));
//add dynamic keyStrokes
List<IKeyStroke> ksList = new ActionFinder().findActions(actionList, IKeyStroke.class, true);
+ for (IKeyStroke ks : ksList) {
+ try {
+ ks.initAction();
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize key stroke '" + ks + "'.", e);
+ }
+ }
addKeyStrokes(ksList.toArray(new IKeyStroke[ksList.size()]));
//init outlines
for (IOutline o : m_availableOutlines) {
@@ -517,6 +527,10 @@ public abstract class AbstractDesktop extends AbstractPropertyObserver implement
LOG.error("extension " + ext);
}
}
+ // init actions
+ ActionUtility.initActions(getMenus());
+ ActionUtility.initActions(getToolButtons());
+ ActionUtility.initActions(getViewButtons());
}
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/bookmark/menu/AbstractBookmarkMenu.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/bookmark/menu/AbstractBookmarkMenu.java
index c2c5f5b81f..ede4fdf23d 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/bookmark/menu/AbstractBookmarkMenu.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/bookmark/menu/AbstractBookmarkMenu.java
@@ -23,7 +23,6 @@ import org.eclipse.scout.rt.client.ClientSyncJob;
import org.eclipse.scout.rt.client.services.common.bookmark.BookmarkServiceEvent;
import org.eclipse.scout.rt.client.services.common.bookmark.BookmarkServiceListener;
import org.eclipse.scout.rt.client.services.common.bookmark.IBookmarkService;
-import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.AbstractMenu;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.menu.MenuSeparator;
@@ -45,8 +44,6 @@ import org.eclipse.scout.service.SERVICES;
public abstract class AbstractBookmarkMenu extends AbstractMenu {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(AbstractBookmarkMenu.class);
- private ArrayList<IKeyStroke> m_keyStrokes;
-
public AbstractBookmarkMenu() {
}
@@ -123,7 +120,7 @@ public abstract class AbstractBookmarkMenu extends AbstractMenu {
private void handleBookmarksChanged() {
IBookmarkService service = SERVICES.getService(IBookmarkService.class);
List<IMenu> oldList = getChildActions();
- ArrayList<IMenu> newList = new ArrayList<IMenu>();
+ List<IMenu> newList = new ArrayList<IMenu>();
for (IMenu m : oldList) {
if (m.getClass() == AddUserBookmarkMenu.class) {
newList.add(m);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/navigation/internal/UserNavigationHistory.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/navigation/internal/UserNavigationHistory.java
index 258c777393..e8ee81725e 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/navigation/internal/UserNavigationHistory.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/navigation/internal/UserNavigationHistory.java
@@ -403,14 +403,20 @@ public class UserNavigationHistory {
List<Bookmark> bookmarks = getBookmarks();
Bookmark current = getActiveBookmark();
// children
- ArrayList<IMenu> newList = new ArrayList<IMenu>();
+ List<IMenu> newList = new ArrayList<IMenu>();
for (Bookmark b : bookmarks) {
- ActivateNavigationHistoryMenu m = new ActivateNavigationHistoryMenu(b);
- if (b == current) {
- m.setIconId(AbstractIcons.NavigationCurrent);
- m.setEnabled(false);
+ try {
+ ActivateNavigationHistoryMenu m = new ActivateNavigationHistoryMenu(b);
+ m.initAction();
+ if (b == current) {
+ m.setIconId(AbstractIcons.NavigationCurrent);
+ m.setEnabled(false);
+ }
+ newList.add(m);
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize menu for bookmark '" + b + "'.", e);
}
- newList.add(m);
}
return Collections.unmodifiableList(newList);
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutlineViewButton.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutlineViewButton.java
index 405d56d20b..f2848641fc 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutlineViewButton.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutlineViewButton.java
@@ -97,6 +97,16 @@ public abstract class AbstractOutlineViewButton extends AbstractViewButton {
);
}
+ /**
+ * allow only to set on true on view buttons
+ */
+ @Override
+ protected void doActionInternal() throws ProcessingException {
+ if (!isSelected()) {
+ super.doActionInternal();
+ }
+ }
+
@Override
protected boolean getConfiguredToggleAction() {
return true;
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/AbstractForm.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/AbstractForm.java
index 010eb4c197..b73d8282c8 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/AbstractForm.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/AbstractForm.java
@@ -21,6 +21,7 @@ import java.io.Serializable;
import java.nio.charset.Charset;
import java.security.Permission;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.EventListener;
import java.util.HashMap;
@@ -32,6 +33,7 @@ import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.scout.commons.BeanUtility;
+import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.ConfigurationUtility;
import org.eclipse.scout.commons.EventListenerList;
import org.eclipse.scout.commons.StoppableThread;
@@ -58,7 +60,9 @@ import org.eclipse.scout.rt.client.services.common.search.ISearchFilterService;
import org.eclipse.scout.rt.client.ui.DataChangeListener;
import org.eclipse.scout.rt.client.ui.IEventHistory;
import org.eclipse.scout.rt.client.ui.WeakDataChangeListener;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.basic.filechooser.FileChooser;
import org.eclipse.scout.rt.client.ui.desktop.AbstractDesktop;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
@@ -122,6 +126,7 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
private IGroupBox m_mainBox;
private IWrappedFormField m_wrappedFormField;
private P_SystemButtonListener m_systemButtonListener;
+ private List<IToolButton> m_toolbuttons;
private IFormHandler m_handler;
// access control
@@ -144,6 +149,8 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
private String m_classId;
+ private int m_toolbarLocation;
+
public AbstractForm() throws ProcessingException {
this(true);
}
@@ -269,6 +276,12 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
return null;
}
+ @ConfigProperty(ConfigProperty.TOOLBAR_LOCATION)
+ @Order(170)
+ public int getConfiguredToobarLocation() {
+ return TOOLBAR_FORM_HEADER;
+ }
+
/**
* This method is called to get an exclusive key of the form. The key is used
* to open the same form with the same handler only once. Obviously this
@@ -444,10 +457,28 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
return ConfigurationUtility.filterClassesWithInjectFieldAnnotation(dca, IFormField.class);
}
+ protected List<Class<? extends IToolButton>> getConfiguredToolButtons() {
+ Class[] dca = ConfigurationUtility.getDeclaredPublicClasses(getClass());
+ return ConfigurationUtility.sortFilteredClassesByOrderAnnotation(Arrays.asList(dca), IToolButton.class);
+ }
+
protected void initConfig() throws ProcessingException {
m_uiFacade = new P_UIFacade();
m_scoutTimerMap = new HashMap<String, P_Timer>();
m_autoRegisterInDesktopOnStart = true;
+ setToolbarLocation(getConfiguredToobarLocation());
+ // toolbuttons
+ List<IToolButton> toolButtonList = new ArrayList<IToolButton>();
+ for (Class<? extends IToolButton> clazz : getConfiguredToolButtons()) {
+ try {
+ IToolButton b = ConfigurationUtility.newInnerInstance(this, clazz);
+ toolButtonList.add(b);
+ }// end try
+ catch (Throwable t) {
+ SERVICES.getService(IExceptionHandlerService.class).handleException(new ProcessingException("toobutton: " + clazz.getName(), t));
+ }
+ }
+ m_toolbuttons = toolButtonList;
// prepare injected fields
Class<? extends IFormField>[] fieldArray = getConfiguredInjectedFields();
DefaultFormFieldInjection injectedFields = null;
@@ -597,6 +628,33 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
propertySupport.setPropertyString(PROP_PERSPECTIVE_ID, perspectiveId);
}
+ @Override
+ public List<IToolButton> getToolbuttons() {
+ return CollectionUtility.unmodifiableListCopy(m_toolbuttons);
+ }
+
+ /**
+ * @param configuredToolbuttonLocation
+ */
+ private void setToolbarLocation(int toolbarLocation) {
+ m_toolbarLocation = toolbarLocation;
+ }
+
+ @Override
+ public int getToolbarLocation() {
+ return m_toolbarLocation;
+ }
+
+ @Override
+ public IToolButton getToolbuttonByClass(Class<? extends IToolButton> clazz) {
+ for (IToolButton b : m_toolbuttons) {
+ if (b.getClass() == clazz) {
+ return b;
+ }
+ }
+ return null;
+ }
+
/**
* Register a {@link DataChangeListener} on the desktop for these dataTypes<br>
* Example:
@@ -1187,6 +1245,7 @@ public abstract class AbstractForm extends AbstractPropertyObserver implements I
initFormInternal();
// fields
FormUtility.initFormFields(this);
+ ActionUtility.initActions(getToolbuttons());
// custom
execInitForm();
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/IForm.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/IForm.java
index 0e195729cd..7c8795fd40 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/IForm.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/IForm.java
@@ -22,6 +22,7 @@ import org.eclipse.scout.commons.beans.IPropertyObserver;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.xmlparser.SimpleXmlElement;
import org.eclipse.scout.rt.client.ui.IEventHistory;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.desktop.AbstractDesktop;
import org.eclipse.scout.rt.client.ui.desktop.DesktopEvent;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
@@ -85,6 +86,9 @@ public interface IForm extends IPropertyObserver, ITypeWithSettableClassId {
*/
int DISPLAY_HINT_VIEW = 20;
+ int TOOLBAR_FORM_HEADER = 30;
+ int TOOLBAR_VIEW_PART = 31;
+
String VIEW_ID_N = "N";
String VIEW_ID_NE = "NE";
String VIEW_ID_E = "E";
@@ -527,6 +531,10 @@ public interface IForm extends IPropertyObserver, ITypeWithSettableClassId {
*/
void setFormStored(boolean b);
+ List<IToolButton> getToolbuttons();
+
+ IToolButton getToolbuttonByClass(Class<? extends IToolButton> clazz);
+
Object getProperty(String name);
/**
@@ -629,4 +637,10 @@ public interface IForm extends IPropertyObserver, ITypeWithSettableClassId {
IEventHistory<FormEvent> getEventHistory();
IFormUIFacade getUIFacade();
+
+ /**
+ * @return
+ */
+ int getToolbarLocation();
+
}
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/AbstractFormField.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/AbstractFormField.java
index 79edfbfbf8..0e9a58637d 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/AbstractFormField.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/AbstractFormField.java
@@ -41,6 +41,7 @@ import org.eclipse.scout.rt.client.ClientSyncJob;
import org.eclipse.scout.rt.client.services.common.search.ISearchFilterService;
import org.eclipse.scout.rt.client.ui.DataChangeListener;
import org.eclipse.scout.rt.client.ui.WeakDataChangeListener;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
import org.eclipse.scout.rt.client.ui.form.IForm;
@@ -802,6 +803,8 @@ public abstract class AbstractFormField extends AbstractPropertyObserver impleme
//
initFieldInternal();
execInitField();
+ // init key strokes
+ ActionUtility.initActions(getKeyStrokes());
}
finally {
setValueChangeTriggerEnabled(true);
@@ -1756,6 +1759,7 @@ public abstract class AbstractFormField extends AbstractPropertyObserver impleme
IKeyStroke ks;
try {
ks = ConfigurationUtility.newInnerInstance(this, keystrokeClazz);
+ ks.initAction();
ksMap.put(ks.getKeyStroke().toUpperCase(), ks);
}
catch (Throwable t) {
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/button/AbstractButton.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/button/AbstractButton.java
index 11c53ddb6a..f48df08990 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/button/AbstractButton.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/button/AbstractButton.java
@@ -26,6 +26,7 @@ import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.services.common.icon.IIconProviderService;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.menu.MenuUtility;
@@ -225,7 +226,7 @@ public abstract class AbstractButton extends AbstractFormField implements IButto
setIconId(getConfiguredIconId());
setRadioValue(getConfiguredRadioValue());
// menus
- ArrayList<IMenu> menuList = new ArrayList<IMenu>();
+ List<IMenu> menuList = new ArrayList<IMenu>();
for (Class<? extends IMenu> menuClazz : getConfiguredMenus()) {
IMenu menu;
try {
@@ -245,6 +246,13 @@ public abstract class AbstractButton extends AbstractFormField implements IButto
m_menus = menuList;
}
+ @Override
+ protected void initFieldInternal() throws ProcessingException {
+ super.initFieldInternal();
+ // init actions
+ ActionUtility.initActions(getMenus());
+ }
+
/**
* Override this internal method only in order to make use of dynamic menus<br>
* Used to manage menu list and add/remove menus
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/filechooserfield/AbstractFileChooserField.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/filechooserfield/AbstractFileChooserField.java
index 1cd50bbb03..d30f46bd8b 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/filechooserfield/AbstractFileChooserField.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/filechooserfield/AbstractFileChooserField.java
@@ -24,6 +24,7 @@ import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.menu.MenuUtility;
@@ -168,6 +169,12 @@ public abstract class AbstractFileChooserField extends AbstractValueField<String
m_menus = menuList;
}
+ @Override
+ protected void initFieldInternal() throws ProcessingException {
+ super.initFieldInternal();
+ ActionUtility.initActions(getMenus());
+ }
+
/**
* Override this internal method only in order to make use of dynamic menus<br>
* Used to manage menu list and add/remove menus
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/AbstractGroupBox.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/AbstractGroupBox.java
index ccda0f070b..69c8ad9524 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/AbstractGroupBox.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/AbstractGroupBox.java
@@ -18,6 +18,7 @@ import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.annotations.ClassId;
import org.eclipse.scout.commons.annotations.ConfigProperty;
import org.eclipse.scout.commons.annotations.Order;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.services.common.icon.IIconProviderService;
@@ -30,7 +31,6 @@ import org.eclipse.scout.rt.client.ui.form.fields.GridData;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.GroupBoxProcessButtonGrid;
-import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.VerticalSmartGroupBoxBodyGrid;
@ClassId("6a093505-c2b1-4df2-84d6-e799f91e6e7c")
@@ -81,9 +81,7 @@ public abstract class AbstractGroupBox extends AbstractCompositeField implements
}
/**
- * <code>true</code> to layout row first <code>false</code> to layout column first
- *
- * @return
+ * @return the body grid responsible to set {@link GridData} to the fields in this group box.
*/
@ConfigProperty(ConfigProperty.GROUP_BOX_BODY_GRID)
@Order(210)
@@ -318,10 +316,24 @@ public abstract class AbstractGroupBox extends AbstractCompositeField implements
}
}
if (!hasEnter) {
- list.add(new DefaultFormEnterKeyStroke(getForm()));
+ try {
+ DefaultFormEnterKeyStroke enterKeyStroke = new DefaultFormEnterKeyStroke(getForm());
+ enterKeyStroke.initAction();
+ list.add(enterKeyStroke);
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize enter key stroke.", e);
+ }
}
if (!hasEscape) {
- list.add(new DefaultFormEscapeKeyStroke(getForm()));
+ try {
+ DefaultFormEscapeKeyStroke escKeyStroke = new DefaultFormEscapeKeyStroke(getForm());
+ escKeyStroke.initAction();
+ list.add(escKeyStroke);
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialize esc key stroke.", e);
+ }
}
}
return Collections.unmodifiableList(list);
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBox.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBox.java
index 915a7e3b2c..7cdf7b28f4 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBox.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBox.java
@@ -15,7 +15,6 @@ import java.util.List;
import org.eclipse.scout.rt.client.ui.form.fields.ICompositeField;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
-import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.IGroupBoxBodyGrid;
public interface IGroupBox extends ICompositeField {
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/IGroupBoxBodyGrid.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBoxBodyGrid.java
index 5a791e7bc4..0f859df2e8 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/IGroupBoxBodyGrid.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/IGroupBoxBodyGrid.java
@@ -8,28 +8,34 @@
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
-package org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal;
+package org.eclipse.scout.rt.client.ui.form.fields.groupbox;
-import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.GridData;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.HorizontalGroupBoxBodyGrid;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.internal.VerticalSmartGroupBoxBodyGrid;
/**
+ * This class is responsible to calculate {@link GridData} for all fields in a {@link IGroupBox}. Considering each
+ * fields {@link IGroupBox#getGridDataHints()} the {@link IGroupBox#setGridDataInternal(GridData)} must be set.
+ *
* @author Andreas Hoegger
* @since 4.0.0 M6 25.02.2014
+ * @see {@link VerticalSmartGroupBoxBodyGrid}, {@link HorizontalGroupBoxBodyGrid}
*/
public interface IGroupBoxBodyGrid {
/**
- *
+ * validate the grid data of all fields in the given group box
*/
void validate(IGroupBox groupBox);
/**
- * @return
+ * @return the column count of the calculated grid
*/
int getGridColumnCount();
/**
- * @return
+ * @return the row count of the calculated grid
*/
int getGridRowCount();
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/AbstractGroupBoxBodyGrid.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/AbstractGroupBoxBodyGrid.java
index 318cede37f..450433a6ec 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/AbstractGroupBoxBodyGrid.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/groupbox/internal/AbstractGroupBoxBodyGrid.java
@@ -17,6 +17,7 @@ import org.eclipse.scout.rt.client.ui.form.fields.GridData;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBox;
+import org.eclipse.scout.rt.client.ui.form.fields.groupbox.IGroupBoxBodyGrid;
import org.eclipse.scout.rt.client.ui.form.fields.internal.GridDataBuilder;
/**
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/imagebox/AbstractImageField.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/imagebox/AbstractImageField.java
index 04445e3877..82d1ff054b 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/imagebox/AbstractImageField.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/imagebox/AbstractImageField.java
@@ -26,6 +26,7 @@ import org.eclipse.scout.commons.dnd.TransferObject;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.menu.MenuUtility;
@@ -180,6 +181,13 @@ public abstract class AbstractImageField extends AbstractFormField implements II
m_menus = Collections.unmodifiableList(menuList);
}
+ @Override
+ protected void initFieldInternal() throws ProcessingException {
+ super.initFieldInternal();
+ // init actions
+ ActionUtility.initActions(getMenus());
+ }
+
/**
* Override this internal method only in order to make use of dynamic menus<br>
* Used to manage menu list and add/remove menus
diff --git a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/smartfield/AbstractContentAssistField.java b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/smartfield/AbstractContentAssistField.java
index 24de04b18c..03431342d9 100644
--- a/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/smartfield/AbstractContentAssistField.java
+++ b/org.eclipse.scout.rt.client/src/org/eclipse/scout/rt/client/ui/form/fields/smartfield/AbstractContentAssistField.java
@@ -38,6 +38,7 @@ import org.eclipse.scout.rt.client.ClientSyncJob;
import org.eclipse.scout.rt.client.IClientSession;
import org.eclipse.scout.rt.client.services.lookup.FormFieldProvisioningContext;
import org.eclipse.scout.rt.client.services.lookup.ILookupCallProvisioningService;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.menu.MenuUtility;
@@ -448,6 +449,13 @@ public abstract class AbstractContentAssistField<VALUE_TYPE, KEY_TYPE> extends A
}
+ @Override
+ protected void initFieldInternal() throws ProcessingException {
+ super.initFieldInternal();
+ // init actions
+ ActionUtility.initActions(getMenus());
+ }
+
/**
* Override this internal method only in order to make use of dynamic menus<br>
* Used to manage menu list and add/remove menus
diff --git a/org.eclipse.scout.rt.extension.client/src/org/eclipse/scout/rt/extension/client/ui/desktop/internal/OrderedMenuWrapper.java b/org.eclipse.scout.rt.extension.client/src/org/eclipse/scout/rt/extension/client/ui/desktop/internal/OrderedMenuWrapper.java
index cba3ce225b..57054e7295 100644
--- a/org.eclipse.scout.rt.extension.client/src/org/eclipse/scout/rt/extension/client/ui/desktop/internal/OrderedMenuWrapper.java
+++ b/org.eclipse.scout.rt.extension.client/src/org/eclipse/scout/rt/extension/client/ui/desktop/internal/OrderedMenuWrapper.java
@@ -48,6 +48,11 @@ public class OrderedMenuWrapper implements IMenu, IOrdered, IWrappedObject<IMenu
}
@Override
+ public void initAction() throws ProcessingException {
+ m_menu.initAction();
+ }
+
+ @Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
m_menu.addPropertyChangeListener(listener);
}
diff --git a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/action/RwtScoutActionButton.java b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/action/RwtScoutActionButton.java
index dd3ccbffbc..73bfb2a105 100644
--- a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/action/RwtScoutActionButton.java
+++ b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/action/RwtScoutActionButton.java
@@ -10,10 +10,12 @@
*******************************************************************************/
package org.eclipse.scout.rt.ui.rap.mobile.action;
+import java.util.ArrayList;
import java.util.List;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.rt.client.ui.action.IAction;
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.tree.IActionNode;
import org.eclipse.scout.rt.ui.rap.LogicalGridData;
import org.eclipse.scout.rt.ui.rap.LogicalGridLayout;
@@ -326,9 +328,15 @@ public class RwtScoutActionButton extends RwtScoutComposite<IAction> implements
if (actions == null) {
return;
}
+ List<IMenu> scoutMenus = new ArrayList<IMenu>(actions.size());
+ for (IActionNode a : actions) {
+ if (a instanceof IMenu) {
+ scoutMenus.add((IMenu) a);
+ }
+ }
Menu menu = ((Menu) e.getSource());
- RwtMenuUtility.fillContextMenu(actions, getUiEnvironment(), menu);
+ RwtMenuUtility.fillContextMenu(scoutMenus, getUiEnvironment(), menu);
}
}
diff --git a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/AbstractRwtScoutFormHeader.java b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/AbstractRwtScoutFormHeader.java
index dc59b8cb74..bebb401fcd 100644
--- a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/AbstractRwtScoutFormHeader.java
+++ b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/AbstractRwtScoutFormHeader.java
@@ -13,6 +13,7 @@ package org.eclipse.scout.rt.ui.rap.mobile.form;
import java.util.LinkedList;
import java.util.List;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.job.JobEx;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
@@ -83,9 +84,14 @@ public class AbstractRwtScoutFormHeader extends AbstractRwtScoutActionBar<IForm>
if (actionFetcher == null) {
actionFetcher = new FormHeaderActionFetcher(getScoutObject());
}
- List<IMenu> actions = actionFetcher.fetch();
- if (actions != null) {
- actionList.addAll(actions);
+ try {
+ List<IMenu> actions = actionFetcher.fetch();
+ if (actions != null) {
+ actionList.addAll(actions);
+ }
+ }
+ catch (ProcessingException e) {
+ LOG.error("cuold not initialize actions.", e);
}
}
};
diff --git a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/RwtScoutMobileFormFooter.java b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/RwtScoutMobileFormFooter.java
index 75d32fa950..d49edf7105 100644
--- a/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/RwtScoutMobileFormFooter.java
+++ b/org.eclipse.scout.rt.ui.rap.mobile/src/org/eclipse/scout/rt/ui/rap/mobile/form/RwtScoutMobileFormFooter.java
@@ -13,6 +13,7 @@ package org.eclipse.scout.rt.ui.rap.mobile.form;
import java.util.LinkedList;
import java.util.List;
+import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.job.JobEx;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
@@ -91,9 +92,14 @@ public class RwtScoutMobileFormFooter extends AbstractRwtScoutActionBar<IForm> i
if (actionFetcher == null) {
actionFetcher = new FormFooterActionFetcher(getScoutObject());
}
- List<IMenu> actions = actionFetcher.fetch();
- if (actions != null) {
- actionList.addAll(actions);
+ try {
+ List<IMenu> actions = actionFetcher.fetch();
+ if (actions != null) {
+ actionList.addAll(actions);
+ }
+ }
+ catch (ProcessingException e) {
+ LOG.error("could not initialze actions.", e);
}
}
};
diff --git a/org.eclipse.scout.rt.ui.rap/plugin.xml b/org.eclipse.scout.rt.ui.rap/plugin.xml
index 6c4718c37a..a7f0521689 100644
--- a/org.eclipse.scout.rt.ui.rap/plugin.xml
+++ b/org.eclipse.scout.rt.ui.rap/plugin.xml
@@ -358,13 +358,13 @@
</extension>
<extension point="org.eclipse.scout.rt.server.commons.filters">
- <filter aliases="/" class="org.eclipse.scout.http.servletfilter.helper.DevelopmentAuthFilter" ranking="1000000">
+ <filter aliases="/" class="org.eclipse.scout.rt.server.commons.servletfilter.helper.DevelopmentAuthFilter" ranking="1000000">
<init-param
name="active"
value="true">
</init-param>
</filter>
- <filter aliases="/" class="org.eclipse.scout.http.servletfilter.helper.HttpAuthJaasFilter" ranking="1000010">
+ <filter aliases="/" class="org.eclipse.scout.rt.server.commons.servletfilter.helper.HttpAuthJaasFilter" ranking="1000010">
<init-param
name="active"
value="true">
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/RwtMenuUtility.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/RwtMenuUtility.java
index 8750346188..1f735f3d07 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/RwtMenuUtility.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/RwtMenuUtility.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.scout.rt.ui.rap;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -32,22 +33,14 @@ public final class RwtMenuUtility {
private RwtMenuUtility() {
}
-
- public static void fillContextMenu(IMenu[] scoutMenus, IRwtEnvironment uiEnvironment, Menu menu) {
+ public static void fillContextMenu(List<? extends IMenu> scoutMenus, IRwtEnvironment uiEnvironment, Menu menu) {
MenuFactory menuFactory = uiEnvironment.getMenuFactory();
if (menuFactory != null) {
menuFactory.fillContextMenu(menu, scoutMenus, uiEnvironment);
}
}
- public static void fillContextMenu(List<? extends IActionNode> scoutActionNodes, IRwtEnvironment uiEnvironment, Menu menu) {
- MenuFactory menuFactory = uiEnvironment.getMenuFactory();
- if (menuFactory != null) {
- menuFactory.fillContextMenu(menu, scoutActionNodes, uiEnvironment);
- }
- }
-
public static List<IMenu> collectMenus(final IButton button, IRwtEnvironment uiEnvironment) {
final List<IMenu> menuList = new LinkedList<IMenu>();
Runnable t = new Runnable() {
@@ -196,14 +189,14 @@ public final class RwtMenuUtility {
*
* @since 3.8.1
*/
- public static List<IActionNode> cleanup(List<? extends IActionNode> scoutActionNodes) {
+ public static <T extends IActionNode<?>> List<T> cleanup(List<T> scoutActionNodes) {
if (scoutActionNodes == null) {
return null;
}
- List<IActionNode> cleanedActions = new LinkedList<IActionNode>();
+ List<T> cleanedActions = new ArrayList<T>(scoutActionNodes.size());
for (int i = 0; i < scoutActionNodes.size(); i++) {
- IActionNode actionNode = scoutActionNodes.get(i);
+ T actionNode = scoutActionNodes.get(i);
//Ignore invisible actions
if (!actionNode.isVisible()) {
continue;
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/MenuFactory.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/MenuFactory.java
index f0491d2d8f..bfc078544a 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/MenuFactory.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/MenuFactory.java
@@ -10,11 +10,10 @@
******************************************************************************/
package org.eclipse.scout.rt.ui.rap.action;
-import java.util.LinkedList;
import java.util.List;
+import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
import org.eclipse.scout.rt.client.ui.action.tree.IActionNode;
import org.eclipse.scout.rt.ui.rap.IRwtEnvironment;
import org.eclipse.scout.rt.ui.rap.RwtMenuUtility;
@@ -32,49 +31,35 @@ public class MenuFactory {
m_addKeyStrokeTextEnabled = true;
}
- public void fillContextMenu(Menu menu, IMenu[] scoutMenus, IRwtEnvironment uiEnvironment) {
- if (scoutMenus == null || scoutMenus.length == 0) {
+ public void fillContextMenu(Menu menu, List<? extends IMenu> scoutActionNodes, IRwtEnvironment uiEnvironment) {
+ if (CollectionUtility.isEmpty(scoutActionNodes)) {
menu.setVisible(false);
return;
}
- List<IActionNode> scoutActionNodes = new LinkedList<IActionNode>();
- for (IMenu scoutMenu : scoutMenus) {
- scoutActionNodes.add(scoutMenu);
- }
-
- fillContextMenu(menu, scoutActionNodes, uiEnvironment);
- }
-
- public void fillContextMenu(Menu menu, List<? extends IActionNode> scoutActionNodes, IRwtEnvironment uiEnvironment) {
- if (scoutActionNodes == null || scoutActionNodes.size() == 0) {
- menu.setVisible(false);
- return;
- }
-
- List<IActionNode> cleanedScoutActions = RwtMenuUtility.cleanup(scoutActionNodes);
- for (IActionNode scoutActionNode : cleanedScoutActions) {
+ List<? extends IMenu> cleanedScoutActions = RwtMenuUtility.cleanup(scoutActionNodes);
+ for (IMenu scoutActionNode : cleanedScoutActions) {
fillContextMenuRec(menu, scoutActionNode, uiEnvironment);
}
}
- private void fillContextMenuRec(Menu menu, IActionNode<?> scoutActionNode, IRwtEnvironment uiEnvironment) {
+ private void fillContextMenuRec(Menu menu, IMenu scoutActionNode, IRwtEnvironment uiEnvironment) {
if (!scoutActionNode.isVisible()) {
return;
}
if (scoutActionNode.isSeparator()) {
new MenuItem(menu, SWT.SEPARATOR);
}
- else if (scoutActionNode instanceof ICheckBoxMenu) {
+ else if (scoutActionNode.isToggleAction()) {
createCheckBoxMenuAction(menu, scoutActionNode, uiEnvironment);
}
else if (scoutActionNode.getChildActionCount() > 0) {
AbstractRwtMenuAction group = createMenuGroup(menu, scoutActionNode, uiEnvironment);
Menu subMenu = new Menu(menu);
group.getUiMenuItem().setMenu(subMenu);
- List<IActionNode> childActions = RwtMenuUtility.cleanup(scoutActionNode.getChildActions());
- for (IActionNode<?> subAction : childActions) {
+ List<IMenu> childActions = RwtMenuUtility.cleanup(scoutActionNode.getChildActions());
+ for (IMenu subAction : childActions) {
fillContextMenuRec(subMenu, subAction, uiEnvironment);
}
}
@@ -90,8 +75,8 @@ public class MenuFactory {
return group;
}
- protected AbstractRwtMenuAction createCheckBoxMenuAction(Menu menu, IActionNode<?> scoutActionNode, IRwtEnvironment uiEnvironment) {
- RwtScoutCheckboxMenu action = new RwtScoutCheckboxMenu(menu, (ICheckBoxMenu) scoutActionNode, uiEnvironment, false);
+ protected AbstractRwtMenuAction createCheckBoxMenuAction(Menu menu, IMenu scoutActionNode, IRwtEnvironment uiEnvironment) {
+ RwtScoutCheckboxMenu action = new RwtScoutCheckboxMenu(menu, scoutActionNode, uiEnvironment, false);
action.setAddKeyStrokeTextEnabled(isAddKeyStrokeTextEnabled());
action.init();
return action;
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutCheckboxMenu.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutCheckboxMenu.java
index 95d159e7cb..31b084fd62 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutCheckboxMenu.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutCheckboxMenu.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipse.scout.rt.ui.rap.action;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.ui.rap.IRwtEnvironment;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
@@ -18,11 +18,11 @@ import org.eclipse.swt.widgets.MenuItem;
public class RwtScoutCheckboxMenu extends AbstractRwtMenuAction {
- public RwtScoutCheckboxMenu(Menu uiMenu, ICheckBoxMenu scoutMenu, IRwtEnvironment uiEnvironment, boolean callInitializer) {
+ public RwtScoutCheckboxMenu(Menu uiMenu, IMenu scoutMenu, IRwtEnvironment uiEnvironment, boolean callInitializer) {
super(uiMenu, scoutMenu, uiEnvironment, callInitializer);
}
- public RwtScoutCheckboxMenu(Menu uiMenu, ICheckBoxMenu scoutMenu, IRwtEnvironment uiEnvironment) {
+ public RwtScoutCheckboxMenu(Menu uiMenu, IMenu scoutMenu, IRwtEnvironment uiEnvironment) {
this(uiMenu, scoutMenu, uiEnvironment, true);
}
@@ -50,7 +50,7 @@ public class RwtScoutCheckboxMenu extends AbstractRwtMenuAction {
@Override
protected void handleScoutPropertyChange(String name, Object newValue) {
super.handleScoutPropertyChange(name, newValue);
- if (name.equals(ICheckBoxMenu.PROP_SELECTED)) {
+ if (name.equals(IMenu.PROP_SELECTED)) {
setSelectedFromScout();
}
}
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutToolbarAction.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutToolbarAction.java
new file mode 100644
index 0000000000..ec9f105e40
--- /dev/null
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/action/RwtScoutToolbarAction.java
@@ -0,0 +1,245 @@
+/**
+ *
+ */
+package org.eclipse.scout.rt.ui.rap.action;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.scout.commons.OptimisticLock;
+import org.eclipse.scout.commons.logger.IScoutLogger;
+import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.IAction;
+import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
+import org.eclipse.scout.rt.client.ui.action.view.IViewButton;
+import org.eclipse.scout.rt.ui.rap.IRwtEnvironment;
+import org.eclipse.scout.rt.ui.rap.util.RwtUtility;
+import org.eclipse.swt.SWT;
+
+public class RwtScoutToolbarAction extends Action {
+ private static final long serialVersionUID = 1L;
+
+ private static final IScoutLogger LOG = ScoutLogManager.getLogger(RwtScoutToolbarAction.class);
+
+ private IAction m_scoutAction;
+ private IRwtEnvironment m_swtEnvironment;
+ private final OptimisticLock m_updateSwtFromScoutLock;
+ private boolean m_updateUi = true;
+
+ private P_ScoutPropertyChangeListener m_scoutPropertyListener;
+
+ private IToolBarManager m_toolbarMananger;
+
+ public RwtScoutToolbarAction(IAction scoutAction, IToolBarManager manager, IRwtEnvironment environment) {
+ super((scoutAction.getText() == null) ? (" ") : scoutAction.getText(), transformScoutStyle(scoutAction));
+ m_toolbarMananger = manager;
+ m_swtEnvironment = environment;
+ m_updateSwtFromScoutLock = new OptimisticLock();
+ m_scoutAction = scoutAction;
+ setId(getScoutObject().getActionId());
+ attachScout();
+ m_scoutAction.addPropertyChangeListener(new P_ScoutPropertyChangeListener());
+ }
+
+ private static int transformScoutStyle(IAction scoutAction) {
+ if (scoutAction.isToggleAction()) {
+ return SWT.TOGGLE;
+ }
+ return AS_PUSH_BUTTON;
+ }
+
+ protected void attachScout() {
+ try {
+ setUpdateUi(false);
+ updateEnabledFromScout();
+ updateIconFromScout();
+ updateKeystrokeFromScout();
+ updateSelectedFromScout();
+ updateTextFromScout();
+ updateTooltipTextFromScout();
+ }
+ finally {
+ setUpdateUi(true);
+ }
+ }
+
+ /**
+ * @return the swtEnvironment
+ */
+ public IRwtEnvironment getEnvironment() {
+ return m_swtEnvironment;
+ }
+
+ protected IAction getScoutObject() {
+ return m_scoutAction;
+ }
+
+ /**
+ * @param updateUi
+ * the updateUi to set
+ */
+ public void setUpdateUi(boolean updateUi) {
+ if (updateUi != m_updateUi) {
+ m_updateUi = updateUi;
+ if (updateUi) {
+ m_toolbarMananger.update(true);
+ }
+ }
+ }
+
+ /**
+ * @return the updateUi
+ */
+ public boolean isUpdateUi() {
+ return m_updateUi;
+ }
+
+ protected void updateEnabledFromScout() {
+ setEnabled(getScoutObject().isEnabled());
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateIconFromScout() {
+ setImageDescriptor(getEnvironment().getImageDescriptor(getScoutObject().getIconId()));
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateKeystrokeFromScout() {
+ String keyStroke = getScoutObject().getKeyStroke();
+ if (keyStroke != null) {
+ int keyCode = RwtUtility.getRwtKeyCode(new KeyStroke(keyStroke));
+ int stateMask = RwtUtility.getRwtStateMask(new KeyStroke(keyStroke));
+ setAccelerator(stateMask | keyCode);
+ }
+ else {
+ setAccelerator(SWT.NONE);
+ }
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateTextFromScout() {
+
+ setText(getScoutObject().getText());
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateTooltipTextFromScout() {
+ setToolTipText(getScoutObject().getTooltipText());
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateSelectedFromScout() {
+ setChecked(getScoutObject().isSelected());
+ if (isUpdateUi()) {
+ m_toolbarMananger.update(true);
+ }
+ }
+
+ protected void updateVisibleFromScout() {
+ LOG.warn("set visible on SWT action is not supported");
+ }
+
+ @Override
+ public void run() {
+ handleSwtAction();
+ }
+
+ protected void handleSwtAction() {
+ try {
+ if (getUpdateSwtFromScoutLock().acquire()) {
+ if (getScoutObject().isToggleAction() && getScoutObject() instanceof IViewButton && getScoutObject().isSelected()) {
+ // reset UI selection
+ updateSelectedFromScout();
+ }
+ else {
+ Runnable t = new Runnable() {
+ @Override
+ public void run() {
+// if (getScoutObject().isToggleAction()) {
+// if (getScoutObject() instanceof IViewButton && getScoutObject().isSelected()) {
+// // void
+// }
+// else {
+// getScoutObject().getUIFacade().setSelectedFromUI(!getScoutObject().isSelected());
+// }
+// }
+
+ getScoutObject().getUIFacade().fireActionFromUI();
+ }
+ };
+ getEnvironment().invokeScoutLater(t, 0);
+ }
+ }
+ }
+ finally {
+ getUpdateSwtFromScoutLock().release();
+ }
+ }
+
+ /**
+ * @return the lock used in the Swt thread when applying scout changes
+ */
+ public OptimisticLock getUpdateSwtFromScoutLock() {
+ return m_updateSwtFromScoutLock;
+ }
+
+ protected void handleScoutPropertyChange(String propertyName, Object newValue) {
+ if (IAction.PROP_ENABLED.equals(propertyName)) {
+ updateEnabledFromScout();
+ }
+ else if (IAction.PROP_ICON_ID.equals(propertyName)) {
+ updateIconFromScout();
+ }
+ else if (IAction.PROP_KEYSTROKE.equals(propertyName)) {
+ updateKeystrokeFromScout();
+ }
+ else if (IAction.PROP_SELECTED.equals(propertyName)) {
+ updateSelectedFromScout();
+ }
+ else if (IAction.PROP_TEXT.equals(propertyName)) {
+ updateTextFromScout();
+ }
+ else if (IAction.PROP_TOOLTIP_TEXT.equals(propertyName)) {
+ updateTooltipTextFromScout();
+ }
+ else if (IAction.PROP_VISIBLE.equals(propertyName)) {
+ updateVisibleFromScout();
+ }
+
+ }
+
+ private class P_ScoutPropertyChangeListener implements PropertyChangeListener {
+ @Override
+ public void propertyChange(final PropertyChangeEvent evt) {
+ Runnable t = new Runnable() {
+ @Override
+ public void run() {
+ try {
+ getUpdateSwtFromScoutLock().acquire();
+ //
+ handleScoutPropertyChange(evt.getPropertyName(), evt.getNewValue());
+ }
+ finally {
+ getUpdateSwtFromScoutLock().release();
+ }
+ }
+
+ };
+ getEnvironment().invokeUiLater(t);
+
+ }
+ }
+
+}
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/AbstractRwtScoutPart.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/AbstractRwtScoutPart.java
index 73200e5e07..8c5bc10cd3 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/AbstractRwtScoutPart.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/AbstractRwtScoutPart.java
@@ -12,9 +12,13 @@ package org.eclipse.scout.rt.ui.rap.window;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.util.List;
+import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.desktop.DesktopEvent;
import org.eclipse.scout.rt.client.ui.desktop.DesktopListener;
import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
@@ -22,6 +26,8 @@ import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.ui.rap.IRwtEnvironment;
+import org.eclipse.scout.rt.ui.rap.action.RwtScoutToolbarAction;
+import org.eclipse.ui.forms.widgets.Form;
/**
* Abstract rwt scout part composite for a form.
@@ -100,6 +106,7 @@ public abstract class AbstractRwtScoutPart implements IRwtScoutPart {
}
protected void attachScout() {
+ updateToolbarActionsFromScout();
IForm form = getScoutObject();
// listeners
form.addPropertyChangeListener(m_formPropertyListener);
@@ -128,6 +135,25 @@ public abstract class AbstractRwtScoutPart implements IRwtScoutPart {
setCloseEnabledFromScout(closable);
}
+ /**
+ *
+ */
+ protected void updateToolbarActionsFromScout() {
+ Form uiForm = getUiForm();
+ if (uiForm == null) {
+ return;
+ }
+ List<IToolButton> toolbuttons = ActionUtility.visibleNormalizedActions(getScoutObject().getToolbuttons());
+ if (!toolbuttons.isEmpty()) {
+ IToolBarManager toolBarManager = uiForm.getToolBarManager();
+ for (IToolButton b : toolbuttons) {
+ toolBarManager.add(new RwtScoutToolbarAction(b, toolBarManager, getUiEnvironment()));
+ }
+ toolBarManager.update(true);
+ }
+
+ }
+
protected void detachScout() {
// listeners
getScoutObject().removePropertyChangeListener(m_formPropertyListener);
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/nonmodalFormBar/RwtScoutFormButton.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/nonmodalFormBar/RwtScoutFormButton.java
index 5548eb9d2e..d38465e968 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/nonmodalFormBar/RwtScoutFormButton.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/nonmodalFormBar/RwtScoutFormButton.java
@@ -78,11 +78,9 @@ public class RwtScoutFormButton extends RwtScoutComposite<IAction> implements IR
protected void handleUiSelection() {
//notify Scout
- final boolean selected = getUiField().getSelection();
Runnable t = new Runnable() {
@Override
public void run() {
- getScoutObject().getUIFacade().setSelectedFromUI(selected);
getScoutObject().getUIFacade().fireActionFromUI();
}
};
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButton.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButton.java
index ac2369807b..7dc222c978 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButton.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButton.java
@@ -67,11 +67,9 @@ public class RwtScoutToolButton extends RwtScoutComposite<IAction> implements IR
protected void handleUiSelection() {
//notify Scout
- final boolean selected = getUiField().getSelection();
Runnable t = new Runnable() {
@Override
public void run() {
- getScoutObject().getUIFacade().setSelectedFromUI(selected);
getScoutObject().getUIFacade().fireActionFromUI();
}
};
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButtonBar.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButtonBar.java
index ee8dcaf632..e25798b372 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButtonBar.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/window/desktop/toolbar/RwtScoutToolButtonBar.java
@@ -187,7 +187,7 @@ public class RwtScoutToolButtonBar extends RwtScoutComposite<IDesktop> implement
public void run() {
for (IToolButton scoutButton : getScoutObject().getToolButtons()) {
if (scoutButton.isSelected()) {
- scoutButton.getUIFacade().setSelectedFromUI(false);
+ scoutButton.getUIFacade().fireActionFromUI();
}
}
}
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/AbstractSwingScoutActionButton.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/AbstractSwingScoutActionButton.java
index 424c328302..2fa2428040 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/AbstractSwingScoutActionButton.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/AbstractSwingScoutActionButton.java
@@ -12,8 +12,6 @@ package org.eclipse.scout.rt.ui.swing.action;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
import javax.swing.AbstractButton;
import javax.swing.Action;
@@ -52,7 +50,6 @@ public abstract class AbstractSwingScoutActionButton<T extends IAction> extends
setSwingField(swingButton);
// attach swing listeners
swingButton.addActionListener(new P_SwingActionListener());
- swingButton.addItemListener(new P_SwingSelectionListener());
}
@Override
@@ -128,23 +125,6 @@ public abstract class AbstractSwingScoutActionButton<T extends IAction> extends
}
}
- protected void setSelectionFromSwing(final boolean b) {
- if (getUpdateSwingFromScoutLock().isAcquired()) {
- return;
- }
- //
- // notify Scout
- Runnable t = new Runnable() {
- @Override
- public void run() {
- getScoutObject().getUIFacade().setSelectedFromUI(b);
- }
- };
-
- getSwingEnvironment().invokeScoutLater(t, 0);
- // end notify
- }
-
/**
* in swing thread
*/
@@ -205,11 +185,4 @@ public abstract class AbstractSwingScoutActionButton<T extends IAction> extends
}
}// end class
- private class P_SwingSelectionListener implements ItemListener {
- @Override
- public void itemStateChanged(ItemEvent e) {
- setSelectionFromSwing(getSwingField().isSelected());
- }
- }// end private class
-
}
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/SwingScoutCheckBoxMenu.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/SwingScoutCheckBoxMenu.java
index 2c2f51e86b..5470dec6c9 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/SwingScoutCheckBoxMenu.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/action/SwingScoutCheckBoxMenu.java
@@ -4,7 +4,7 @@
* 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
******************************************************************************/
@@ -17,10 +17,10 @@ import javax.swing.Action;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.ui.swing.basic.SwingScoutComposite;
-public class SwingScoutCheckBoxMenu<T extends ICheckBoxMenu> extends SwingScoutComposite<T> implements ISwingScoutAction<T> {
+public class SwingScoutCheckBoxMenu<T extends IMenu> extends SwingScoutComposite<T> implements ISwingScoutAction<T> {
private SwingScoutAction<T> m_actionComposite;
@Override
@@ -69,7 +69,7 @@ public class SwingScoutCheckBoxMenu<T extends ICheckBoxMenu> extends SwingScoutC
@Override
protected void attachScout() {
super.attachScout();
- ICheckBoxMenu scoutAction = getScoutObject();
+ IMenu scoutAction = getScoutObject();
setSelectedFromScout(scoutAction.isSelected());
}
@@ -83,7 +83,7 @@ public class SwingScoutCheckBoxMenu<T extends ICheckBoxMenu> extends SwingScoutC
@Override
protected void handleScoutPropertyChange(String name, Object newValue) {
super.handleScoutPropertyChange(name, newValue);
- if (name.equals(ICheckBoxMenu.PROP_SELECTED)) {
+ if (name.equals(IMenu.PROP_SELECTED)) {
setSelectedFromScout(((Boolean) newValue).booleanValue());
}
}
diff --git a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/inject/ActionInjector.java b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/inject/ActionInjector.java
index 5ddc3987f7..8a2b589b8c 100644
--- a/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/inject/ActionInjector.java
+++ b/org.eclipse.scout.rt.ui.swing/src/org/eclipse/scout/rt/ui/swing/inject/ActionInjector.java
@@ -15,7 +15,7 @@ import javax.swing.JComponent;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.action.IAction;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.action.tree.IActionNode;
import org.eclipse.scout.rt.client.ui.action.view.IViewButton;
@@ -44,9 +44,9 @@ public class ActionInjector {
else if (action instanceof IViewButton) {
return createSwingScoutViewButton((IViewButton) action, env);
}
- else if (action instanceof ICheckBoxMenu) {
- ISwingScoutAction<ICheckBoxMenu> ui = new SwingScoutCheckBoxMenu<ICheckBoxMenu>();
- ui.createField((ICheckBoxMenu) action, env);
+ else if (action instanceof IMenu && action.isToggleAction()) {
+ ISwingScoutAction<IMenu> ui = new SwingScoutCheckBoxMenu<IMenu>();
+ ui.createField((IMenu) action, env);
return ui;
}
else if (action instanceof IActionNode) {
diff --git a/org.eclipse.scout.rt.ui.swt/META-INF/MANIFEST.MF b/org.eclipse.scout.rt.ui.swt/META-INF/MANIFEST.MF
index c896f7f122..b251378e3a 100644
--- a/org.eclipse.scout.rt.ui.swt/META-INF/MANIFEST.MF
+++ b/org.eclipse.scout.rt.ui.swt/META-INF/MANIFEST.MF
@@ -16,9 +16,12 @@ Export-Package: org.eclipse.scout.rt.ui.swt,
org.eclipse.scout.rt.ui.swt.action,
org.eclipse.scout.rt.ui.swt.basic,
org.eclipse.scout.rt.ui.swt.basic.application,
- org.eclipse.scout.rt.ui.swt.basic.application.coolbar,
+ org.eclipse.scout.rt.ui.swt.basic.calendar,
+ org.eclipse.scout.rt.ui.swt.basic.calendar.layout,
+ org.eclipse.scout.rt.ui.swt.basic.calendar.widgets,
org.eclipse.scout.rt.ui.swt.basic.comp,
org.eclipse.scout.rt.ui.swt.basic.table,
+ org.eclipse.scout.rt.ui.swt.basic.table.celleditor,
org.eclipse.scout.rt.ui.swt.basic.tree,
org.eclipse.scout.rt.ui.swt.busy,
org.eclipse.scout.rt.ui.swt.busy.strategy.simple,
@@ -36,7 +39,9 @@ Export-Package: org.eclipse.scout.rt.ui.swt,
org.eclipse.scout.rt.ui.swt.form.fields,
org.eclipse.scout.rt.ui.swt.form.fields.browserfield,
org.eclipse.scout.rt.ui.swt.form.fields.button,
+ org.eclipse.scout.rt.ui.swt.form.fields.calendar,
org.eclipse.scout.rt.ui.swt.form.fields.checkbox,
+ org.eclipse.scout.rt.ui.swt.form.fields.composer,
org.eclipse.scout.rt.ui.swt.form.fields.datefield,
org.eclipse.scout.rt.ui.swt.form.fields.datefield.chooser,
org.eclipse.scout.rt.ui.swt.form.fields.filechooserfield,
@@ -52,6 +57,7 @@ Export-Package: org.eclipse.scout.rt.ui.swt,
org.eclipse.scout.rt.ui.swt.form.fields.smartfield,
org.eclipse.scout.rt.ui.swt.form.fields.snapbox,
org.eclipse.scout.rt.ui.swt.form.fields.snapbox.button,
+ org.eclipse.scout.rt.ui.swt.form.fields.snapbox.layout,
org.eclipse.scout.rt.ui.swt.form.fields.splitbox,
org.eclipse.scout.rt.ui.swt.form.fields.stringfield,
org.eclipse.scout.rt.ui.swt.form.fields.tabbox,
@@ -60,11 +66,17 @@ Export-Package: org.eclipse.scout.rt.ui.swt,
org.eclipse.scout.rt.ui.swt.form.fields.treefield,
org.eclipse.scout.rt.ui.swt.form.fields.wrappedformfield,
org.eclipse.scout.rt.ui.swt.form.radiobuttongroup,
- org.eclipse.scout.rt.ui.swt.internal;x-friends:="org.eclipse.scout.james.ui.swt",
+ org.eclipse.scout.rt.ui.swt.form.radiobuttongroup.layout,
+ org.eclipse.scout.rt.ui.swt.icons,
+ org.eclipse.scout.rt.ui.swt.internal,
+ org.eclipse.scout.rt.ui.swt.internal.debug.layout.spy,
org.eclipse.scout.rt.ui.swt.keystroke,
- org.eclipse.scout.rt.ui.swt.menu,
+ org.eclipse.scout.rt.ui.swt.login.internal,
org.eclipse.scout.rt.ui.swt.services,
+ org.eclipse.scout.rt.ui.swt.services.common.clipboard,
+ org.eclipse.scout.rt.ui.swt.services.common.icon,
org.eclipse.scout.rt.ui.swt.util,
+ org.eclipse.scout.rt.ui.swt.util.debug,
org.eclipse.scout.rt.ui.swt.util.listener,
org.eclipse.scout.rt.ui.swt.window,
org.eclipse.scout.rt.ui.swt.window.desktop,
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/SwtMenuUtility.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/SwtMenuUtility.java
index 0b571da601..e41fb266ba 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/SwtMenuUtility.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/SwtMenuUtility.java
@@ -15,33 +15,19 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
+import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.job.JobEx;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
-import org.eclipse.scout.rt.client.ui.action.IAction;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
-import org.eclipse.scout.rt.client.ui.action.tree.IActionNode;
import org.eclipse.scout.rt.client.ui.basic.calendar.ICalendar;
import org.eclipse.scout.rt.client.ui.basic.table.ITable;
import org.eclipse.scout.rt.client.ui.basic.tree.ITree;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutAction;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutCheckboxMenu;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutMenuAction;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutMenuContributionItem;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutMenuGroup;
-import org.eclipse.scout.rt.ui.swt.menu.AbstractSwtScoutMenu;
-import org.eclipse.scout.rt.ui.swt.menu.SwtScoutCheckboxMenuItem;
-import org.eclipse.scout.rt.ui.swt.menu.SwtScoutMenuItem;
-import org.eclipse.swt.SWT;
+import org.eclipse.scout.rt.ui.swt.action.AbstractSwtScoutMenu;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutCheckboxMenuItem;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutMenuItem;
import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
public final class SwtMenuUtility {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(SwtMenuUtility.class);
@@ -49,14 +35,26 @@ public final class SwtMenuUtility {
private SwtMenuUtility() {
}
+ public static void fillContextMenu(List<? extends IMenu> scoutMenus, Menu menu, ISwtEnvironment environment) {
+ if (CollectionUtility.isEmpty(scoutMenus)) {
+ return;
+ }
+ for (IMenu scoutMenu : ActionUtility.visibleNormalizedActions(scoutMenus)) {
+ createMenuItem(scoutMenu, menu, environment);
+ }
+ }
+
+ /**
+ * NEW
+ */
public static AbstractSwtScoutMenu createMenuItem(IMenu scoutMenu, Menu swtMenu, ISwtEnvironment environment) {
if (!isVisible(scoutMenu)) {
return null;
}
if (scoutMenu.hasChildActions()) {
- return new org.eclipse.scout.rt.ui.swt.menu.SwtScoutMenuGroup(scoutMenu, swtMenu, environment);
+ return new org.eclipse.scout.rt.ui.swt.action.SwtScoutMenuGroup(scoutMenu, swtMenu, environment);
}
- if (scoutMenu instanceof ICheckBoxMenu) {
+ if (scoutMenu.isToggleAction()) {
return new SwtScoutCheckboxMenuItem(scoutMenu, swtMenu, environment);
}
return new SwtScoutMenuItem(scoutMenu, swtMenu, environment);
@@ -109,184 +107,173 @@ public final class SwtMenuUtility {
return consolidatedMenus;
}
- /**
- * @param scoutActionNodes
- * @param environment
- * @return
- * @deprecated since 4.0.0 use {@link org.eclipse.scout.rt.ui.swt.menu.SwtScoutMenuContributionItem} instead
- *
- * <pre>
- * IMenu[] menus = env.getClientSession().getDesktop().getMenus();
- * List&lt;IMenu&gt; consolidatedMenus = SwtMenuUtility.consolidateMenus(Arrays.asList(menus));
- * List&lt;IContributionItem&gt; swtContributionItems = new ArrayList&lt;IContributionItem&gt;();
- * for (IMenu menu : consolidatedMenus) {
- * swtContributionItems.add(new SwtScoutMenuContributionItem(menu, env));
- * }
- * return swtContributionItems.toArray(new IContributionItem[swtContributionItems.size()]);
- * </pre>
- */
- @Deprecated
- public static IContributionItem[] getMenuContribution(List<? extends IActionNode<?>> scoutActionNodes, ISwtEnvironment environment) {
- List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
- for (IActionNode<?> scoutAction : scoutActionNodes) {
- if (!scoutAction.isVisible()) {
- continue;
- }
- if (scoutAction.isSeparator()
- //ignore trailing separator
- && contributionItems.size() > 0 && contributionItems.get(contributionItems.size() - 1).isSeparator()) {
- continue;
- }
-
- contributionItems.add(getMenuContributionItem(scoutAction, environment));
- }
- return contributionItems.toArray(new IContributionItem[contributionItems.size()]);
- }
-
- private static void fillMenuManager(IActionNode<?>[] scoutActionNodes, IMenuManager manager, ISwtEnvironment environment, boolean disableChildren) {
- for (IActionNode<?> scoutAction : scoutActionNodes) {
- if (!scoutAction.isVisible()) {
- continue;
- }
- if (scoutAction.isSeparator()
- //ignore trailing separator
- && manager.getItems().length > 0 && manager.getItems()[manager.getItems().length - 1].isSeparator()) {
- continue;
- }
-
- manager.add(getMenuContributionItem(scoutAction, environment, disableChildren));
- }
- }
-
- /**
- * @param scoutAction
- * @param environment
- * @return
- * @deprecated since 4.0.0
- */
- @Deprecated
- public static IContributionItem getMenuContributionItem(IActionNode<?> scoutAction, ISwtEnvironment environment) {
- return getMenuContributionItem(scoutAction, environment, false);
- }
-
- public static IContributionItem getMenuContributionItem(IActionNode<?> scoutAction, ISwtEnvironment environment, boolean disableItem) {
-
- if (!scoutAction.isVisible()) {
- return null;
- }
-
- if (scoutAction.isSeparator()) {
- return new Separator();
- }
-
- if (scoutAction.hasChildActions()) {
- IMenuManager manager = new MenuManager(scoutAction.getTextWithMnemonic(), scoutAction.getActionId());
- //Disable children since menuManager itself can't be disabled
- boolean disableChilds = !scoutAction.isEnabled() || disableItem;
- fillMenuManager(scoutAction.getChildActions().toArray(new IActionNode<?>[scoutAction.getChildActionCount()]), manager, environment, disableChilds);
- return manager;
- }
-
- if (scoutAction instanceof IMenu) {
- return new SwtScoutMenuContributionItem((IMenu) scoutAction, environment);
- }
-
- if (scoutAction instanceof ICheckBoxMenu) {
- Action swtAction = new SwtScoutAction(scoutAction, environment, SWT.CHECK).getSwtAction();
- if (disableItem) {
- swtAction.setEnabled(false);
- }
- return new ActionContributionItem(swtAction) {
- @Override
- public void fill(Menu parent, int index) {
- super.fill(parent, index);
- }
-
- @Override
- public boolean isDynamic() {
- return true;
- }
-
- @Override
- public boolean isDirty() {
- System.out.println(getAction().getText());
- return super.isDirty();
- }
-
- @Override
- public void update(String propertyName) {
- super.update(propertyName);
- }
- };
- }
-
- Action swtAction = new SwtScoutAction(scoutAction, environment).getSwtAction();
- if (disableItem) {
- swtAction.setEnabled(false);
- }
- return new ActionContributionItem(swtAction) {
- @Override
- public boolean isDynamic() {
- return true;
- }
-
- @Override
- public void update(String propertyName) {
- MenuItem widget = (MenuItem) getWidget();
- super.update(propertyName);
- widget.setText(widget.getText() + "a");
- }
- };
- }
-
- public static void fillContextMenu(IMenu[] scoutMenus, Menu menu, ISwtEnvironment environment) {
- if (scoutMenus == null || scoutMenus.length == 0) {
- return;
- }
-
- List<IActionNode> scoutActionNodes = new LinkedList<IActionNode>();
- for (IMenu scoutMenu : scoutMenus) {
- scoutActionNodes.add(scoutMenu);
- }
-
- fillContextMenu(scoutActionNodes, menu, environment);
- }
-
- public static void fillContextMenu(List<? extends IActionNode> scoutActionNodes, Menu menu, ISwtEnvironment environment) {
- if (scoutActionNodes == null || scoutActionNodes.size() == 0) {
- return;
- }
-
- List<IActionNode> cleanedScoutActions = cleanup(scoutActionNodes);
- for (IActionNode scoutActionNode : cleanedScoutActions) {
- fillContextMenuRec(scoutActionNode, menu, environment);
- }
- }
-
- private static void fillContextMenuRec(IActionNode<?> scoutActionNode, Menu menu, ISwtEnvironment environment) {
- if (!scoutActionNode.isVisible()) {
- return;
- }
- if (scoutActionNode.isSeparator()) {
- new MenuItem(menu, SWT.SEPARATOR);
- }
- else if (scoutActionNode instanceof ICheckBoxMenu) {
- new SwtScoutCheckboxMenu(menu, (ICheckBoxMenu) scoutActionNode, environment);
-
- }
- else if (scoutActionNode.getChildActionCount() > 0) {
- SwtScoutMenuGroup group = new SwtScoutMenuGroup(menu, scoutActionNode, environment);
- Menu subMenu = new Menu(menu);
- group.getSwtMenuItem().setMenu(subMenu);
- List<IActionNode> childActions = cleanup(scoutActionNode.getChildActions());
- for (IActionNode<?> subAction : childActions) {
- fillContextMenuRec(subAction, subMenu, environment);
- }
- }
- else {
- new SwtScoutMenuAction(menu, scoutActionNode, environment);
- }
- }
+// /**
+// * @param scoutActionNodes
+// * @param environment
+// * @return
+// * @deprecated since 4.0.0 use {@link org.eclipse.scout.rt.ui.swt.menu.SwtScoutMenuContributionItem} instead
+// *
+// * <pre>
+// * IMenu[] menus = env.getClientSession().getDesktop().getMenus();
+// * List&lt;IMenu&gt; consolidatedMenus = SwtMenuUtility.consolidateMenus(Arrays.asList(menus));
+// * List&lt;IContributionItem&gt; swtContributionItems = new ArrayList&lt;IContributionItem&gt;();
+// * for (IMenu menu : consolidatedMenus) {
+// * swtContributionItems.add(new SwtScoutMenuContributionItem(menu, env));
+// * }
+// * return swtContributionItems.toArray(new IContributionItem[swtContributionItems.size()]);
+// * </pre>
+// */
+// @Deprecated
+// public static IContributionItem[] getMenuContribution(List<? extends IActionNode<?>> scoutActionNodes, ISwtEnvironment environment) {
+// List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
+// for (IActionNode<?> scoutAction : scoutActionNodes) {
+// if (!scoutAction.isVisible()) {
+// continue;
+// }
+// if (scoutAction.isSeparator()
+// //ignore trailing separator
+// && contributionItems.size() > 0 && contributionItems.get(contributionItems.size() - 1).isSeparator()) {
+// continue;
+// }
+//
+// contributionItems.add(getMenuContributionItem(scoutAction, environment));
+// }
+// return contributionItems.toArray(new IContributionItem[contributionItems.size()]);
+// }
+
+// private static void fillMenuManager(IActionNode<?>[] scoutActionNodes, IMenuManager manager, ISwtEnvironment environment, boolean disableChildren) {
+// for (IActionNode<?> scoutAction : scoutActionNodes) {
+// if (!scoutAction.isVisible()) {
+// continue;
+// }
+// if (scoutAction.isSeparator()
+// //ignore trailing separator
+// && manager.getItems().length > 0 && manager.getItems()[manager.getItems().length - 1].isSeparator()) {
+// continue;
+// }
+//
+// manager.add(getMenuContributionItem(scoutAction, environment, disableChildren));
+// }
+// }
+
+// /**
+// * @param scoutAction
+// * @param environment
+// * @return
+// * @deprecated since 4.0.0
+// */
+// @Deprecated
+// public static IContributionItem getMenuContributionItem(IActionNode<?> scoutAction, ISwtEnvironment environment) {
+// return getMenuContributionItem(scoutAction, environment, false);
+// }
+
+// public static IContributionItem getMenuContributionItem(IActionNode<?> scoutAction, ISwtEnvironment environment, boolean disableItem) {
+//
+// if (!scoutAction.isVisible()) {
+// return null;
+// }
+//
+// if (scoutAction.isSeparator()) {
+// return new Separator();
+// }
+//
+// if (scoutAction.hasChildActions()) {
+// IMenuManager manager = new MenuManager(scoutAction.getTextWithMnemonic(), scoutAction.getActionId());
+// //Disable children since menuManager itself can't be disabled
+// boolean disableChilds = !scoutAction.isEnabled() || disableItem;
+// fillMenuManager(scoutAction.getChildActions().toArray(new IActionNode<?>[scoutAction.getChildActionCount()]), manager, environment, disableChilds);
+// return manager;
+// }
+//
+// if (scoutAction instanceof IMenu) {
+// return new SwtScoutMenuContributionItem((IMenu) scoutAction, environment);
+// }
+//
+// if (scoutAction instanceof ICheckBoxMenu) {
+// Action swtAction = new SwtScoutAction(scoutAction, environment, SWT.CHECK).getSwtAction();
+// if (disableItem) {
+// swtAction.setEnabled(false);
+// }
+// return new ActionContributionItem(swtAction) {
+// @Override
+// public void fill(Menu parent, int index) {
+// super.fill(parent, index);
+// }
+//
+// @Override
+// public boolean isDynamic() {
+// return true;
+// }
+//
+// @Override
+// public boolean isDirty() {
+// System.out.println(getAction().getText());
+// return super.isDirty();
+// }
+//
+// @Override
+// public void update(String propertyName) {
+// super.update(propertyName);
+// }
+// };
+// }
+//
+// Action swtAction = new SwtScoutAction(scoutAction, environment).getSwtAction();
+// if (disableItem) {
+// swtAction.setEnabled(false);
+// }
+// return new ActionContributionItem(swtAction) {
+// @Override
+// public boolean isDynamic() {
+// return true;
+// }
+//
+// @Override
+// public void update(String propertyName) {
+// MenuItem widget = (MenuItem) getWidget();
+// super.update(propertyName);
+// widget.setText(widget.getText() + "a");
+// }
+// };
+// }
+
+// public static void fillContextMenu(IMenu[] scoutMenus, Menu menu, ISwtEnvironment environment) {
+// if (scoutMenus == null || scoutMenus.length == 0) {
+// return;
+// }
+//
+// List<IActionNode> scoutActionNodes = new LinkedList<IActionNode>();
+// for (IMenu scoutMenu : scoutMenus) {
+// scoutActionNodes.add(scoutMenu);
+// }
+//
+// fillContextMenu(scoutActionNodes, menu, environment);
+// }
+
+// private static void fillContextMenuRec(IMenu scoutActionNode, Menu menu, ISwtEnvironment environment) {
+// if (!scoutActionNode.isVisible()) {
+// return;
+// }
+// if (scoutActionNode.isSeparator()) {
+// new MenuItem(menu, SWT.SEPARATOR);
+// }
+// else if (scoutActionNode.isToggleAction()) {
+// new SwtScoutCheckboxMenu(menu, (ICheckBoxMenu) scoutActionNode, environment);
+//
+// }
+// else if (scoutActionNode.getChildActionCount() > 0) {
+// SwtScoutMenuGroup group = new SwtScoutMenuGroup(menu, scoutActionNode, environment);
+// Menu subMenu = new Menu(menu);
+// group.getSwtMenuItem().setMenu(subMenu);
+// List<IMenu> childActions = ActionUtility.visibleNormalizedActions(scoutActionNode.getChildActions());
+// for (IMenu subAction : childActions) {
+// fillContextMenuRec(subAction, subMenu, environment);
+// }
+// }
+// else {
+// new SwtScoutMenuAction(menu, scoutActionNode, environment);
+// }
+// }
public static List<IMenu> collectMenus(final ITree tree, final boolean emptySpaceActions, final boolean nodeActions, ISwtEnvironment uiEnvironment) {
final List<IMenu> menuList = new LinkedList<IMenu>();
@@ -387,54 +374,54 @@ public final class SwtMenuUtility {
return collectMenus(calendar, true, false, swtEnvironment);
}
- /**
- * Removes invisible actions. Also removes leading and trailing separators as well as multiple consecutive separators.
- *
- * @since 3.8.1
- */
- public static List<IActionNode> cleanup(List<? extends IActionNode> scoutActionNodes) {
- if (scoutActionNodes == null) {
- return null;
- }
-
- List<IActionNode> cleanedActions = new LinkedList<IActionNode>();
- for (int i = 0; i < scoutActionNodes.size(); i++) {
- IActionNode actionNode = scoutActionNodes.get(i);
- //Ignore invisible actions
- if (!actionNode.isVisible()) {
- continue;
- }
- if (actionNode.isSeparator()) {
- //Ignore leading and trailing separators
- if (i == 0 || i == scoutActionNodes.size() - 1) {
- continue;
- }
- //Ignore multiple consecutive separators
- IAction nextVisibleAction = getFirstVisibleAction(scoutActionNodes, i + 1);
- if (nextVisibleAction == null || nextVisibleAction.isSeparator()) {
- continue;
- }
- }
-
- cleanedActions.add(actionNode);
- }
-
- return cleanedActions;
- }
-
- private static IAction getFirstVisibleAction(List<? extends IActionNode> scoutActionNodes, int startIndex) {
- if (scoutActionNodes == null) {
- return null;
- }
-
- for (int i = startIndex; i < scoutActionNodes.size(); i++) {
- IActionNode action = scoutActionNodes.get(i);
- if (action.isVisible()) {
- return action;
- }
- }
-
- return null;
- }
+// /**
+// * Removes invisible actions. Also removes leading and trailing separators as well as multiple consecutive separators.
+// *
+// * @since 3.8.1
+// */
+// public static <T extends IActionNode> List<T> cleanup(List<T> scoutActionNodes) {
+// if (scoutActionNodes == null) {
+// return null;
+// }
+//
+// List<T> cleanedActions = new ArrayList<T>(scoutActionNodes.size());
+// for (int i = 0; i < scoutActionNodes.size(); i++) {
+// T actionNode = scoutActionNodes.get(i);
+// //Ignore invisible actions
+// if (!actionNode.isVisible()) {
+// continue;
+// }
+// if (actionNode.isSeparator()) {
+// //Ignore leading and trailing separators
+// if (i == 0 || i == scoutActionNodes.size() - 1) {
+// continue;
+// }
+// //Ignore multiple consecutive separators
+// IAction nextVisibleAction = getFirstVisibleAction(scoutActionNodes, i + 1);
+// if (nextVisibleAction == null || nextVisibleAction.isSeparator()) {
+// continue;
+// }
+// }
+//
+// cleanedActions.add(actionNode);
+// }
+//
+// return cleanedActions;
+// }
+
+// private static IAction getFirstVisibleAction(List<? extends IActionNode> scoutActionNodes, int startIndex) {
+// if (scoutActionNodes == null) {
+// return null;
+// }
+//
+// for (int i = startIndex; i < scoutActionNodes.size(); i++) {
+// IActionNode action = scoutActionNodes.get(i);
+// if (action.isVisible()) {
+// return action;
+// }
+// }
+//
+// return null;
+// }
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtMenuAction.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtMenuAction.java
deleted file mode 100644
index 90d60a7576..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtMenuAction.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.action;
-
-import org.eclipse.scout.commons.StringUtility;
-import org.eclipse.scout.commons.logger.IScoutLogger;
-import org.eclipse.scout.commons.logger.ScoutLogManager;
-import org.eclipse.scout.rt.client.ui.action.IAction;
-import org.eclipse.scout.rt.client.ui.action.keystroke.IKeyStroke;
-import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.scout.rt.ui.swt.keystroke.ISwtKeyStroke;
-import org.eclipse.scout.rt.ui.swt.util.SwtUtility;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-
-/**
- * Common code for the SWT widgets (sub classes of {@link MenuItem}) rendering {@link IAction}.
- */
-public class AbstractSwtMenuAction extends AbstractSwtScoutAction {
- private static final IScoutLogger LOG = ScoutLogManager.getLogger(AbstractSwtMenuAction.class);
-
- private boolean m_initialized;
- private MenuItem m_swtMenuItem;
- private final Menu m_swtMenu;
- // cache
- private ISwtKeyStroke[] m_swtKeyStrokes;
-
- private SelectionListener m_menuSelectionListener;
-
- public AbstractSwtMenuAction(Menu swtMenu, IAction action, boolean createInitial, ISwtEnvironment environment) {
- super(action, environment);
- m_swtMenu = swtMenu;
- if (createInitial) {
- callInitializers(m_swtMenu);
- }
-
- m_swtMenu.addDisposeListener(new DisposeListener() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void widgetDisposed(DisposeEvent event) {
- disconnectFromScout();
- }
- });
- }
-
- protected final void callInitializers(Menu swtMenu) {
- if (m_initialized) {
- return;
- }
- else {
- m_initialized = true;
- //
- initializeSwt(swtMenu);
- connectToScout();
- }
- }
-
- @Override
- protected void setIconFromScout(String iconId) {
- if (!getSwtMenuItem().isDisposed()) {
- getSwtMenuItem().setImage(getEnvironment().getIcon(iconId));
- }
- }
-
- @Override
- protected void setTooltipTextFromScout(String tooltipText) {
- if (!StringUtility.isNullOrEmpty(tooltipText)) {
- LOG.warn("unsuported method on swt");
- }
- }
-
- /**
- * @deprecated Use {@link #setTextWithMnemonicFromScout(String)} instead.
- * Will be removed with the M-Release.
- */
- @Deprecated
- protected void setTextFromScout(String text) {
- setTextWithMnemonicFromScout(text);
- }
-
- @Override
- protected void setTextWithMnemonicFromScout(String textWithMnemonic) {
- if (!getSwtMenuItem().isDisposed()) {
- IAction action = getScoutAction();
- if (action != null && StringUtility.hasText(action.getKeyStroke())) {
- textWithMnemonic += "\t" + SwtUtility.getKeyStrokePrettyPrinted(action);
- }
- getSwtMenuItem().setText(textWithMnemonic);
- }
- }
-
- @Override
- protected void setEnabledFromScout(boolean enabled) {
- if (!getSwtMenuItem().isDisposed()) {
- getSwtMenuItem().setEnabled(enabled);
- }
- }
-
- @Override
- protected void setKeyStrokeFromScout(String keyStroke) {
- // remove old
- if (m_swtKeyStrokes != null) {
- for (ISwtKeyStroke swtStroke : m_swtKeyStrokes) {
- getEnvironment().removeGlobalKeyStroke(swtStroke);
- }
- }
- m_swtKeyStrokes = null;
- if (keyStroke != null) {
- IKeyStroke scoutKeyStroke = new KeyStroke(getScoutAction().getKeyStroke());
- m_swtKeyStrokes = SwtUtility.getKeyStrokes(scoutKeyStroke, getEnvironment());
- for (ISwtKeyStroke swtStroke : m_swtKeyStrokes) {
- getEnvironment().addGlobalKeyStroke(swtStroke);
- }
- }
- }
-
- protected void initializeSwt(Menu swtMenu) {
- }
-
- public MenuItem getSwtMenuItem() {
- return m_swtMenuItem;
- }
-
- public void setSwtMenuItem(MenuItem swtMenuItem) {
- if (m_swtMenuItem != null) {
- m_swtMenuItem.removeSelectionListener(m_menuSelectionListener);
- }
- m_swtMenuItem = swtMenuItem;
- if (m_menuSelectionListener == null) {
- m_menuSelectionListener = new P_MenuItemSelectionListener();
- }
-
- m_swtMenuItem.addSelectionListener(m_menuSelectionListener);
- }
-
- protected Menu getSwtMenu() {
- return m_swtMenu;
- }
-
- private void handleSwtAction() {
- if (SwtUtility.runSwtInputVerifier()) {
- Runnable t = new Runnable() {
- @Override
- public void run() {
- getScoutAction().getUIFacade().fireActionFromUI();
- }
- };
- getEnvironment().invokeScoutLater(t, 0);
- }
- }
-
- @Override
- protected boolean isHandleScoutPropertyChangeSwtThread() {
- return !getSwtMenu().isDisposed();
- }
-
- private class P_MenuItemSelectionListener extends SelectionAdapter {
- @Override
- public void widgetSelected(SelectionEvent e) {
- handleSwtAction();
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- // TODO Auto-generated method stub
- super.widgetDefaultSelected(e);
- }
- }
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutAction.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutAction.java
deleted file mode 100644
index b69bcf77b8..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutAction.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * 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.rt.ui.swt.action;
-
-import org.eclipse.scout.rt.client.ui.action.IAction;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.scout.rt.ui.swt.basic.AbstractSwtScoutPropertyObserver;
-
-/**
- * Common code for SWT elements rendering the Scout model {@link IAction}.
- *
- * @since 3.10.0-M5
- */
-public abstract class AbstractSwtScoutAction extends AbstractSwtScoutPropertyObserver<IAction> {
-
- /**
- * @param scoutAction
- * @param environment
- */
- public AbstractSwtScoutAction(IAction scoutAction, ISwtEnvironment environment) {
- setScoutObjectAndSwtEnvironment(scoutAction, environment);
- }
-
- @Override
- protected void applyScoutProperties() {
- IAction scoutAction = getScoutAction();
- setEnabledFromScout(scoutAction.isEnabled());
- setTextWithMnemonicFromScout(scoutAction.getTextWithMnemonic());
- setTooltipTextFromScout(scoutAction.getTooltipText());
- setIconFromScout(scoutAction.getIconId());
- setKeyStrokeFromScout(scoutAction.getKeyStroke());
- }
-
- /**
- * @param enabled
- * value corresponding to {@link IAction#isEnabled()}
- */
- protected abstract void setEnabledFromScout(boolean enabled);
-
- /**
- * @param textWithMnemonic
- * value corresponding to {@link IAction#getTextWithMnemonic()}
- */
- protected abstract void setTextWithMnemonicFromScout(String textWithMnemonic);
-
- /**
- * @param tooltipText
- * value corresponding to {@link IAction#getTooltipText()}
- */
- protected abstract void setTooltipTextFromScout(String tooltipText);
-
- /**
- * @param iconId
- * value corresponding to {@link IAction#getIconId()}
- */
- protected abstract void setIconFromScout(String iconId);
-
- /**
- * @param keyStroke
- * value corresponding to {@link IAction#getKeyStroke()}
- */
- protected abstract void setKeyStrokeFromScout(String keyStroke);
-
- /**
- * Convenience for {@link #getScoutObject()}.
- */
- public IAction getScoutAction() {
- return getScoutObject();
- }
-
- /**
- * in swt thread
- */
- @Override
- protected void handleScoutPropertyChange(String name, Object newValue) {
- if (name.equals(IAction.PROP_ENABLED)) {
- setEnabledFromScout(((Boolean) newValue).booleanValue());
- }
- else if (name.equals(IAction.PROP_TEXT_WITH_MNEMONIC)) {
- setTextWithMnemonicFromScout((String) newValue);
- }
- else if (name.equals(IAction.PROP_TOOLTIP_TEXT)) {
- setTooltipTextFromScout((String) newValue);
- }
- else if (name.equals(IAction.PROP_ICON_ID)) {
- setIconFromScout((String) newValue);
- }
- else if (name.equals(IAction.PROP_KEYSTROKE)) {
- setKeyStrokeFromScout((String) newValue);
- }
- }
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/AbstractSwtScoutMenu.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutMenu.java
index d54a35031d..77648805e4 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/AbstractSwtScoutMenu.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/AbstractSwtScoutMenu.java
@@ -8,13 +8,12 @@
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
-package org.eclipse.scout.rt.ui.swt.menu;
+package org.eclipse.scout.rt.ui.swt.action;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
@@ -89,7 +88,7 @@ public abstract class AbstractSwtScoutMenu {
if (scoutMenu.hasChildActions()) {
flags = SWT.CASCADE;
}
- else if (getScoutMenu() instanceof ICheckBoxMenu) {
+ else if (getScoutMenu().isToggleAction()) {
flags = SWT.CHECK;
}
MenuItem swtMenuItem = new MenuItem(parentMenu, flags);
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutAction.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutAction.java
deleted file mode 100644
index 72cd1f25c7..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutAction.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.action;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.scout.commons.logger.IScoutLogger;
-import org.eclipse.scout.commons.logger.ScoutLogManager;
-import org.eclipse.scout.rt.client.ui.action.IAction;
-import org.eclipse.scout.rt.client.ui.action.keystroke.KeyStroke;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.scout.rt.ui.swt.util.SwtUtility;
-import org.eclipse.swt.SWT;
-
-/**
- * <h3>SwtScoutAction</h3> ...
- *
- * @since 1.0.0 28.03.2008
- */
-public class SwtScoutAction extends AbstractSwtScoutAction {
- private static final IScoutLogger LOG = ScoutLogManager.getLogger(SwtScoutAction.class);
-
- private boolean m_initialized;
- private final Action m_swtAction;
- //ticket 86811: avoid double-action in queue
- private boolean m_handleActionPending;
-
- public SwtScoutAction(IAction scoutAction, ISwtEnvironment environment) {
- this(scoutAction, environment, Action.AS_PUSH_BUTTON);
- }
-
- public SwtScoutAction(IAction scoutAction, ISwtEnvironment environment, int style) {
- super(scoutAction, environment);
- m_swtAction = new P_SwtAction(style);
- callInitializers(m_swtAction);
- }
-
- /**
- * @param swtAction
- */
- private void callInitializers(Action swtAction) {
- if (m_initialized) {
- return;
- }
- else {
- m_initialized = true;
- //
- initializeSwt(swtAction);
- connectToScout();
- }
- }
-
- /**
- * @param swtAction
- */
- protected void initializeSwt(Action swtAction) {
- }
-
- protected void handleSwtAction() {
- if (SwtUtility.runSwtInputVerifier()) {
- if (!m_handleActionPending) {
- m_handleActionPending = true;
- Runnable job = new Runnable() {
- @Override
- public void run() {
- try {
- getScoutAction().getUIFacade().fireActionFromUI();
- }
- finally {
- m_handleActionPending = false;
- }
- }
- };
- getEnvironment().invokeScoutLater(job, 0);
- }
- }
- }
-
- public Action getSwtAction() {
- return m_swtAction;
- }
-
- private class P_SwtAction extends Action {
- P_SwtAction(int style) {
- super("", style);
- }
-
- @Override
- public void run() {
- handleSwtAction();
- }
-
- @Override
- public boolean isChecked() {
- return super.isChecked();
- }
- } // end P_SwtAction
-
- @Override
- protected void setEnabledFromScout(boolean enabled) {
- m_swtAction.setEnabled(enabled);
- }
-
- @Override
- protected void setTextWithMnemonicFromScout(String textWithMnemonic) {
- m_swtAction.setText(textWithMnemonic);
- }
-
- @Override
- protected void setTooltipTextFromScout(String tooltipText) {
- m_swtAction.setToolTipText(tooltipText);
- }
-
- @Override
- protected void setIconFromScout(String iconId) {
- m_swtAction.setImageDescriptor(getEnvironment().getImageDescriptor(iconId));
- }
-
- @Override
- protected void setKeyStrokeFromScout(String keyStroke) {
- if (keyStroke != null) {
- int keyCode = SwtUtility.getSwtKeyCode(new KeyStroke(keyStroke));
- int stateMask = SwtUtility.getSwtStateMask(new KeyStroke(keyStroke));
- getSwtAction().setAccelerator(stateMask | keyCode);
- }
- else {
- getSwtAction().setAccelerator(SWT.NONE);
- }
- }
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenu.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenu.java
deleted file mode 100644
index a07536e351..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenu.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.action;
-
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-
-public class SwtScoutCheckboxMenu extends AbstractSwtMenuAction {
-
- public SwtScoutCheckboxMenu(Menu swtMenu, ICheckBoxMenu scoutMenu, ISwtEnvironment environment) {
- super(swtMenu, scoutMenu, true, environment);
- }
-
- @Override
- protected void initializeSwt(Menu swtMenu) {
- MenuItem item = new MenuItem(swtMenu, SWT.CHECK);
- setSwtMenuItem(item);
- }
-
- @Override
- protected void applyScoutProperties() {
- super.applyScoutProperties();
- setSelectedFromScout();
- }
-
- private void setSelectedFromScout() {
- if (!getSwtMenuItem().isDisposed()) {
- getSwtMenuItem().setSelection(getScoutAction().isSelected());
- }
- }
-
- /**
- * in swt thread
- */
- @Override
- protected void handleScoutPropertyChange(String name, Object newValue) {
- super.handleScoutPropertyChange(name, newValue);
- if (name.equals(ICheckBoxMenu.PROP_SELECTED)) {
- setSelectedFromScout();
- }
- }
-
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutCheckboxMenuItem.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenuItem.java
index b487330eae..53b9abaaef 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutCheckboxMenuItem.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutCheckboxMenuItem.java
@@ -8,7 +8,7 @@
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
-package org.eclipse.scout.rt.ui.swt.menu;
+package org.eclipse.scout.rt.ui.swt.action;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuAction.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuAction.java
deleted file mode 100644
index 52b01bf8f2..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.action;
-
-import org.eclipse.scout.rt.client.ui.action.IAction;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-
-/**
- * <h3>SwtScoutAction</h3> ...
- *
- * @since 1.0.0 14.03.2008
- */
-public class SwtScoutMenuAction extends AbstractSwtMenuAction {
-
- public SwtScoutMenuAction(Menu swtMenu, IAction action, ISwtEnvironment environment) {
- super(swtMenu, action, true, environment);
- }
-
- @Override
- protected void initializeSwt(Menu swtMenu) {
- MenuItem item = new MenuItem(swtMenu, SWT.PUSH);
- setSwtMenuItem(item);
- }
-
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuContributionItem.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuContributionItem.java
index b00febde73..81bf2008f9 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuContributionItem.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuContributionItem.java
@@ -10,46 +10,24 @@
******************************************************************************/
package org.eclipse.scout.rt.ui.swt.action;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.client.ui.action.menu.checkbox.ICheckBoxMenu;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
+import org.eclipse.scout.rt.ui.swt.SwtMenuUtility;
import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
/**
*
*/
public class SwtScoutMenuContributionItem extends ContributionItem {
-
- private final IMenu m_scoutMenu;
- private final ISwtEnvironment m_environment;
- private MenuItem m_swtMenuItem;
- private boolean m_handleSelectionPending;
-
- private PropertyChangeListener m_scoutPropertyListener;
- Listener m_uiListener;
+ private IMenu m_scoutMenu;
+ private ISwtEnvironment m_environment;
+ private AbstractSwtScoutMenu m_swtMenuItem;
public SwtScoutMenuContributionItem(IMenu scoutMenu, ISwtEnvironment environment) {
m_scoutMenu = scoutMenu;
m_environment = environment;
- // add scout prop listener
- m_scoutPropertyListener = new P_ScoutPropertyChangeListener();
- m_scoutMenu.addPropertyChangeListener(m_scoutPropertyListener);
- }
-
- @Override
- public void dispose() {
- getScoutMenu().removePropertyChangeListener(m_scoutPropertyListener);
- System.out.println("do dispose....");
- super.dispose();
}
public IMenu getScoutMenu() {
@@ -60,228 +38,13 @@ public class SwtScoutMenuContributionItem extends ContributionItem {
return m_environment;
}
- public MenuItem getSwtMenuItem() {
+ public AbstractSwtScoutMenu getSwtMenuItem() {
return m_swtMenuItem;
}
@Override
public void fill(Menu menu, int index) {
- if (m_swtMenuItem == null && menu != null) {
-
- int flags = SWT.PUSH;
- if (getScoutMenu().hasChildActions()) {
- flags = SWT.CASCADE;
- }
- else if (getScoutMenu() instanceof ICheckBoxMenu) {
- flags = SWT.CHECK;
- }
- MenuItem mi = null;
- if (index >= 0) {
- mi = new MenuItem(menu, flags, index);
- }
- else {
- mi = new MenuItem(menu, flags);
- }
- m_swtMenuItem = mi;
- // listeners
- m_uiListener = new P_SwtMenuListener();
- menu.addListener(SWT.Show, m_uiListener);
- m_swtMenuItem.addListener(SWT.Selection, m_uiListener);
- m_swtMenuItem.addListener(SWT.Dispose, m_uiListener);
-
- m_swtMenuItem.setData(getScoutMenu());
- updateEnabledFromScout();
- updateIconFromScout();
- updateKeyStrokeFromScout();
- updateTooltipTextFromScout();
- updateTextFromScout();
-
-// // child menus
-// if(flags == SWT.CASCADE){
-//
-//// just create a proxy for now, if the user shows it then
-// // fill it in
-// Menu subMenu = new Menu(parent);
-// subMenu.addListener(SWT.Show, getMenuCreatorListener());
-// subMenu.addListener(SWT.Hide, getMenuCreatorListener());
-// mi.setMenu(subMenu);
-// }
-// mi.addListener(SWT.Dispose, getMenuItemListener());
-// mi.addListener(SWT.Selection, getMenuItemListener());
-// if (action.getHelpListener() != null) {
-// mi.addHelpListener(action.getHelpListener());
-// }
-//
-// if (flags == SWT.CASCADE) {
-// // just create a proxy for now, if the user shows it then
-// // fill it in
-// Menu subMenu = new Menu(parent);
-// subMenu.addListener(SWT.Show, getMenuCreatorListener());
-// subMenu.addListener(SWT.Hide, getMenuCreatorListener());
-// mi.setMenu(subMenu);
-// }
-//
-// update(null);
-//
-// // Attach some extra listeners.
-// action.addPropertyChangeListener(propertyListener);
-// if (action != null) {
-// String commandId = action.getActionDefinitionId();
-// ExternalActionManager.ICallback callback = ExternalActionManager
-// .getInstance().getCallback();
-//
-// if ((callback != null) && (commandId != null)) {
-// callback.addPropertyChangeListener(commandId,
-// actionTextListener);
-// }
-// }
- }
- }
-
- @Override
- public boolean isDirty() {
- return true;
- }
-
- @Override
- public void update() {
-
- }
-
- @Override
- public void update(String id) {
-
- }
-
- protected void updateKeyStrokeFromScout() {
- if (getSwtMenuItem() != null) {
- // void see settext mnemonic
- }
- }
-
- protected void updateIconFromScout() {
- if (getSwtMenuItem() != null) {
- getSwtMenuItem().setImage(getEnvironment().getIcon(getScoutMenu().getIconId()));
- }
- }
-
- protected void updateTooltipTextFromScout() {
- if (getSwtMenuItem() != null) {
- // not supported in swt
- }
- }
-
- protected void updateTextFromScout() {
- if (getSwtMenuItem() != null) {
- getSwtMenuItem().setText(getScoutMenu().getTextWithMnemonic());
- }
- }
-
- protected void updateEnabledFromScout() {
- if (getSwtMenuItem() != null) {
- getSwtMenuItem().setEnabled(getScoutMenu().isEnabled());
- }
- }
-
- protected void handleSwtMenuShow() {
- //notify Scout
- Runnable t = new Runnable() {
- @Override
- public void run() {
- getScoutMenu().prepareAction();
- }
- };
- getEnvironment().invokeScoutLater(t, 0);
- //end notify
- }
-
- private void handleSwtMenuDispose() {
- }
-
- private void handleSwtMenuSelection() {
- if (!m_handleSelectionPending) {
- m_handleSelectionPending = true;
- //notify Scout
- Runnable t = new Runnable() {
- @Override
- public void run() {
- try {
- getScoutMenu().getUIFacade().fireActionFromUI();
- }
- finally {
- m_handleSelectionPending = false;
- }
- }
- };
- getEnvironment().invokeScoutLater(t, 0);
- //end notify
- }
- }
-
- private boolean isHandleScoutPropertyChange(String propertyName, Object newValue) {
- return true;
- }
-
- /**
- * in swt thread
- */
- protected void handleScoutPropertyChange(String name, Object newValue) {
- if (name.equals(IMenu.PROP_ENABLED)) {
- updateEnabledFromScout();
- }
- else if (name.equals(IMenu.PROP_TEXT_WITH_MNEMONIC)) {
- System.out.println("text[m] changed to: " + getScoutMenu().getText());
- updateTextFromScout();
- }
- else if (name.equals(IMenu.PROP_TEXT)) {
- System.out.println("text changed to: " + getScoutMenu().getText());
- }
- else if (name.equals(IMenu.PROP_TOOLTIP_TEXT)) {
- updateTooltipTextFromScout();
- }
- else if (name.equals(IMenu.PROP_ICON_ID)) {
- updateIconFromScout();
- }
- else if (name.equals(IMenu.PROP_KEYSTROKE)) {
- updateKeyStrokeFromScout();
- }
- }
-
- private class P_ScoutPropertyChangeListener implements PropertyChangeListener {
- @Override
- public void propertyChange(final PropertyChangeEvent e) {
- if (isHandleScoutPropertyChange(e.getPropertyName(), e.getNewValue())) {
- Runnable t = new Runnable() {
- @Override
- public void run() {
- handleScoutPropertyChange(e.getPropertyName(), e.getNewValue());
- }
-
- };
- getEnvironment().invokeSwtLater(t);
- }
- }
-
- }// end private class
-
- private class P_SwtMenuListener implements Listener {
- @Override
- public void handleEvent(Event event) {
- switch (event.type) {
- case SWT.Show:
- handleSwtMenuShow();
- break;
- case SWT.Selection:
- handleSwtMenuSelection();
- break;
- case SWT.Dispose:
- handleSwtMenuDispose();
- break;
-
- default:
- break;
- }
- }
+ m_swtMenuItem = SwtMenuUtility.createMenuItem(getScoutMenu(), menu, getEnvironment());
}
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuGroup.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuGroup.java
index 192a294e70..68b432921e 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuGroup.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuGroup.java
@@ -4,33 +4,96 @@
* 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.rt.ui.swt.action;
-import org.eclipse.scout.rt.client.ui.action.IAction;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
+import org.eclipse.scout.rt.ui.swt.SwtMenuUtility;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
/**
- * <h3>SwtScoutMenuGroup</h3> ...
- *
- * @since 1.0.0 14.03.2008
+ *
*/
-public class SwtScoutMenuGroup extends AbstractSwtMenuAction {
+public class SwtScoutMenuGroup extends AbstractSwtScoutMenu {
+
+ private Menu m_childMenu;
+ private List<AbstractSwtScoutMenu> m_childMenus = new ArrayList<AbstractSwtScoutMenu>();
+ private Listener m_uiMenuListener;
- public SwtScoutMenuGroup(Menu swtMenu, IAction menu, ISwtEnvironment environment) {
- super(swtMenu, menu, true, environment);
+ public SwtScoutMenuGroup(IMenu scoutMenu, Menu parentMenu, ISwtEnvironment environment) {
+ super(scoutMenu, parentMenu, environment, false);
+ createMenu(scoutMenu, parentMenu, environment);
}
@Override
- protected void initializeSwt(Menu swtMenu) {
- MenuItem item = new MenuItem(swtMenu, SWT.CASCADE);
- setSwtMenuItem(item);
+ protected void initializeUi(MenuItem swtMenuItem) {
+ super.initializeUi(swtMenuItem);
+ IMenu scoutMenu = getScoutMenu();
+ if (scoutMenu.hasChildActions()) {
+ m_childMenu = new Menu(swtMenuItem);
+ SwtMenuUtility.fillContextMenu(scoutMenu.getChildActions(), m_childMenu, getEnvironment());
+ swtMenuItem.setMenu(m_childMenu);
+ m_uiMenuListener = new P_UiMenuListener();
+ m_childMenu.addListener(SWT.Show, m_uiMenuListener);
+ m_childMenu.addListener(SWT.Hide, m_uiMenuListener);
+ m_childMenu.addListener(SWT.Dispose, m_uiMenuListener);
+ }
+ }
+
+ protected void handleSwtMenuHide() {
+ }
+
+ /**
+ *
+ */
+ protected void handleSwtMenuShow() {
+ Runnable t = new Runnable() {
+ @Override
+ public void run() {
+ for (AbstractSwtScoutMenu menuItem : m_childMenus) {
+ menuItem.getScoutMenu().prepareAction();
+ }
+ }
+ };
+ getEnvironment().invokeScoutLater(t, 0);
+ //end notify
+ }
+
+ protected void handleSwtMenuDispose() {
+ m_childMenu.removeListener(SWT.Show, m_uiMenuListener);
+ m_childMenu.removeListener(SWT.Hide, m_uiMenuListener);
+ m_childMenu.removeListener(SWT.Dispose, m_uiMenuListener);
+ m_uiMenuListener = null;
+
+ }
+
+ private class P_UiMenuListener implements Listener {
+ @Override
+ public void handleEvent(Event event) {
+ switch (event.type) {
+ case SWT.Show:
+ handleSwtMenuShow();
+ break;
+ case SWT.Hide:
+ handleSwtMenuHide();
+ break;
+ case SWT.Dispose:
+ handleSwtMenuDispose();
+ break;
+ }
+ }
}
+
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuItem.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuItem.java
index 87bddc5f35..7f6026107b 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuItem.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutMenuItem.java
@@ -8,7 +8,7 @@
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
-package org.eclipse.scout.rt.ui.swt.menu;
+package org.eclipse.scout.rt.ui.swt.action;
import java.util.ArrayList;
import java.util.List;
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/coolbar/CoolbarButton.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutToolbarAction.java
index 3edfe0b1d2..64e9ecb2d9 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/coolbar/CoolbarButton.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/action/SwtScoutToolbarAction.java
@@ -1,13 +1,13 @@
/**
*
*/
-package org.eclipse.scout.rt.ui.swt.basic.application.coolbar;
+package org.eclipse.scout.rt.ui.swt.action;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.scout.commons.OptimisticLock;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
@@ -18,8 +18,8 @@ import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
import org.eclipse.scout.rt.ui.swt.util.SwtUtility;
import org.eclipse.swt.SWT;
-public class CoolbarButton extends Action {
- private static final IScoutLogger LOG = ScoutLogManager.getLogger(CoolbarButton.class);
+public class SwtScoutToolbarAction extends Action {
+ private static final IScoutLogger LOG = ScoutLogManager.getLogger(SwtScoutToolbarAction.class);
private IAction m_scoutAction;
private ISwtEnvironment m_swtEnvironment;
@@ -28,9 +28,9 @@ public class CoolbarButton extends Action {
private P_ScoutPropertyChangeListener m_scoutPropertyListener;
- private ToolBarManager m_toolbarMananger;
+ private IToolBarManager m_toolbarMananger;
- public CoolbarButton(IAction scoutAction, ToolBarManager manager, ISwtEnvironment environment) {
+ public SwtScoutToolbarAction(IAction scoutAction, IToolBarManager manager, ISwtEnvironment environment) {
super((scoutAction.getText() == null) ? (" ") : scoutAction.getText(), transformScoutStyle(scoutAction));
m_toolbarMananger = manager;
m_swtEnvironment = environment;
@@ -165,14 +165,14 @@ public class CoolbarButton extends Action {
Runnable t = new Runnable() {
@Override
public void run() {
- if (getScoutObject().isToggleAction()) {
- if (getScoutObject() instanceof IViewButton && getScoutObject().isSelected()) {
- // void
- }
- else {
- getScoutObject().getUIFacade().setSelectedFromUI(!getScoutObject().isSelected());
- }
- }
+// if (getScoutObject().isToggleAction()) {
+// if (getScoutObject() instanceof IViewButton && getScoutObject().isSelected()) {
+// // void
+// }
+// else {
+// getScoutObject().getUIFacade().setSelectedFromUI(!getScoutObject().isSelected());
+// }
+// }
getScoutObject().getUIFacade().fireActionFromUI();
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/ApplicationActionBarAdvisor.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/ApplicationActionBarAdvisor.java
index 3f906b217d..fcb053719a 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/ApplicationActionBarAdvisor.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/application/ApplicationActionBarAdvisor.java
@@ -15,7 +15,7 @@ import org.eclipse.scout.rt.client.ui.desktop.IDesktop;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironmentListener;
import org.eclipse.scout.rt.ui.swt.SwtEnvironmentEvent;
-import org.eclipse.scout.rt.ui.swt.basic.application.coolbar.CoolbarButton;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutToolbarAction;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.application.ActionBarAdvisor;
@@ -63,16 +63,14 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
if (d != null) {
for (IViewButton scoutViewButton : d.getViewButtons()) {
if (scoutViewButton.isVisible() && scoutViewButton.isVisibleGranted()) {
- System.out.println("viewButton " + scoutViewButton.getText());
- CoolbarButton swtAction = new CoolbarButton(scoutViewButton, m_toolbar, getEnvironment());
+ SwtScoutToolbarAction swtAction = new SwtScoutToolbarAction(scoutViewButton, m_toolbar, getEnvironment());
contributeToCoolBar(swtAction);
}
}
for (IToolButton scoutToolButton : d.getToolButtons()) {
if (scoutToolButton.isVisible() && scoutToolButton.isVisibleGranted()) {
- System.out.println("toolbutton " + scoutToolButton.getText());
- CoolbarButton swtAction = new CoolbarButton(scoutToolButton, m_toolbar, getEnvironment());
+ SwtScoutToolbarAction swtAction = new SwtScoutToolbarAction(scoutToolButton, m_toolbar, getEnvironment());
contributeToCoolBar(swtAction);
}
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/SwtScoutCalendar.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/SwtScoutCalendar.java
index 50927b44dd..01c4fe8bae 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/SwtScoutCalendar.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/SwtScoutCalendar.java
@@ -17,23 +17,17 @@ import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.Separator;
import org.eclipse.scout.commons.OptimisticLock;
import org.eclipse.scout.commons.RunnableWithData;
import org.eclipse.scout.commons.WeakEventListener;
import org.eclipse.scout.commons.job.JobEx;
-import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
import org.eclipse.scout.rt.client.ui.basic.calendar.CalendarComponent;
import org.eclipse.scout.rt.client.ui.basic.calendar.ICalendar;
import org.eclipse.scout.rt.ui.swt.SwtMenuUtility;
-import org.eclipse.scout.rt.ui.swt.action.SwtScoutAction;
import org.eclipse.scout.rt.ui.swt.basic.calendar.widgets.SwtCalendar;
import org.eclipse.scout.rt.ui.swt.form.fields.calendar.SwtScoutCalendarField;
import org.eclipse.swt.SWT;
@@ -42,6 +36,7 @@ import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
/**
* @author Michael Rudolf, Andreas Hoegger
@@ -98,38 +93,13 @@ public class SwtScoutCalendar extends SwtCalendar {
}
@Override
- public void showGeneralContextMenu(IMenuManager manager) {
- // pop up with a general menu
- List<IMenu> scoutMenus = SwtMenuUtility.collectEmptySpaceMenus(m_scoutCalendarModel, m_field.getEnvironment());
- if (scoutMenus != null) {
- for (IMenu menuItem : scoutMenus) {
- if (menuItem instanceof IMenu) {
- if (menuItem.isSeparator()) {
- manager.add(new Separator());
- }
- else {
- manager.add(new SwtScoutAction(menuItem, m_field.getEnvironment(), Action.AS_PUSH_BUTTON).getSwtAction());
- }
- }
- }
- }
+ public void showGeneralContextMenu(Menu manager) {
+ SwtMenuUtility.fillContextMenu(SwtMenuUtility.collectEmptySpaceMenus(m_scoutCalendarModel, m_field.getEnvironment()), manager, m_field.getEnvironment());
}
@Override
- public void showItemContextMenu(IMenuManager manager, Object item) {
- List<IMenu> scoutMenus = SwtMenuUtility.collectComponentMenus(m_scoutCalendarModel, m_field.getEnvironment());
- if (scoutMenus != null) {
- for (IMenu menuItem : scoutMenus) {
- if (menuItem instanceof IMenu) {
- if (menuItem.isSeparator()) {
- manager.add(new Separator());
- }
- else {
- manager.add(new SwtScoutAction(menuItem, m_field.getEnvironment(), Action.AS_PUSH_BUTTON).getSwtAction());
- }
- }
- }
- }
+ public void showItemContextMenu(Menu manager, Object item) {
+ SwtMenuUtility.fillContextMenu(SwtMenuUtility.collectComponentMenus(m_scoutCalendarModel, m_field.getEnvironment()), manager, m_field.getEnvironment());
}
@Override
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCalendarItem.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCalendarItem.java
index f40f42d28e..e2e936d84e 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCalendarItem.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCalendarItem.java
@@ -1,9 +1,9 @@
package org.eclipse.scout.rt.ui.swt.basic.calendar.widgets;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
import org.eclipse.scout.rt.ui.swt.basic.calendar.CalendarItemContainer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackListener;
@@ -11,6 +11,7 @@ import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
/**
* Base class of a week or month calendar item.
@@ -25,8 +26,7 @@ public abstract class AbstractCalendarItem extends Composite implements PaintLis
/** reference to parent cell */
private AbstractCell m_cell;
- /** manager for context menu regarding this cell */
- private MenuManager m_menuManager;
+ private Menu m_contextMenu;
public AbstractCalendarItem(AbstractCell parent, int style, CalendarItemContainer item) {
super(parent, style);
@@ -68,23 +68,16 @@ public abstract class AbstractCalendarItem extends Composite implements PaintLis
}
private void setupMenu() {
- // create context menu (dynamic, gets filled when used)
- m_menuManager = new MenuManager();
- m_menuManager.setRemoveAllWhenShown(true);
- Menu contextMenu = m_menuManager.createContextMenu(this);
- this.setMenu(contextMenu);
+ // context menu
+ m_contextMenu = new Menu(getShell(), SWT.POP_UP);
+ setMenu(m_contextMenu);
}
protected void hookListeners() {
addPaintListener(this);
// menu listener for context menu
- m_menuManager.addMenuListener(new IMenuListener() {
- @Override
- public void menuAboutToShow(IMenuManager manager) {
- m_cell.getCalendar().showItemContextMenu(manager, m_item.getItem());
- }
- });
+ m_contextMenu.addMenuListener(new P_ContextMenuListener());
// intercept a mouse click
addMouseListener(new MouseAdapter() {
@@ -135,4 +128,32 @@ public abstract class AbstractCalendarItem extends Composite implements PaintLis
}
}
+
+ private class P_ContextMenuListener extends MenuAdapter {
+ @Override
+ public void menuShown(MenuEvent e) {
+ // clear all previous
+ // Windows BUG: fires menu hide before the selection on the menu item is
+ // propagated.
+ if (m_contextMenu != null) {
+ for (MenuItem item : m_contextMenu.getItems()) {
+ disposeMenuItem(item);
+ }
+ }
+ m_cell.getCalendar().showItemContextMenu(m_contextMenu, m_item.getItem());
+
+ }
+
+ private void disposeMenuItem(MenuItem item) {
+ Menu menu = item.getMenu();
+ if (menu != null) {
+ for (MenuItem childItem : menu.getItems()) {
+ disposeMenuItem(childItem);
+ }
+ menu.dispose();
+ }
+ item.dispose();
+ }
+
+ } // end class P_ContextMenuListener
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCell.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCell.java
index 7a3089e24b..cb4a4f950b 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCell.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/AbstractCell.java
@@ -20,9 +20,6 @@ import java.util.Date;
import java.util.Locale;
import java.util.TreeSet;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.basic.calendar.CalendarComponent;
@@ -31,6 +28,8 @@ import org.eclipse.scout.rt.ui.swt.basic.calendar.CalendarItemContainer;
import org.eclipse.scout.rt.ui.swt.basic.calendar.SwtColors;
import org.eclipse.scout.rt.ui.swt.util.SwtUtility;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.PaintEvent;
@@ -45,6 +44,7 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
/**
* Abstract SWT component for a calendar (week or month) cell.
@@ -77,9 +77,6 @@ public abstract class AbstractCell extends Composite implements PaintListener {
private String m_weekText = null;
private String m_dayText = null;
- /** manager for context menu regarding this cell */
- private MenuManager m_menuManager;
-
/** cached CalendarItemContainer */
private TreeSet<CalendarItemContainer> m_itemsCached;
@@ -89,6 +86,8 @@ public abstract class AbstractCell extends Composite implements PaintListener {
/** number of timeless items within that cell */
private int m_countTimeless;
+ private Menu m_contextMenu;
+
public AbstractCell(Composite parent, int style) {
super(parent, style);
@@ -96,15 +95,16 @@ public abstract class AbstractCell extends Composite implements PaintListener {
m_isSelected = false;
+ // contextMenu
setupMenu();
}
/** create context menu (dynamically, gets filled when used) */
protected void setupMenu() {
- m_menuManager = new MenuManager();
- m_menuManager.setRemoveAllWhenShown(true);
- Menu contextMenu = m_menuManager.createContextMenu(this);
- this.setMenu(contextMenu);
+ // context menu
+ m_contextMenu = new Menu(getShell(), SWT.POP_UP);
+
+ setMenu(m_contextMenu);
}
/** get calendar items corresponding to that cell */
@@ -306,18 +306,12 @@ public abstract class AbstractCell extends Composite implements PaintListener {
});
// menu listener for context menu
- m_menuManager.addMenuListener(new IMenuListener() {
- @Override
- public void menuAboutToShow(IMenuManager manager) {
- m_calendar.showGeneralContextMenu(manager);
- }
- });
+ m_contextMenu.addMenuListener(new P_ContextMenuListener());
// tab traversal of cells
this.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent e) {
-// System.out.println(toString() + " got event " + e);
switch (e.detail) {
case SWT.TRAVERSE_TAB_NEXT:
case SWT.TRAVERSE_ARROW_NEXT:
@@ -350,6 +344,13 @@ public abstract class AbstractCell extends Composite implements PaintListener {
public void handleEvent(Event e) {
}
});
+ addListener(SWT.Dispose, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ dispose();
+ }
+ });
}
public void setSelected(boolean selected) {
@@ -525,4 +526,32 @@ public abstract class AbstractCell extends Composite implements PaintListener {
return "BoundsOrganizer[" + m_cc + "]";
}
}//end class
+
+ private class P_ContextMenuListener extends MenuAdapter {
+ @Override
+ public void menuShown(MenuEvent e) {
+ // clear all previous
+ // Windows BUG: fires menu hide before the selection on the menu item is
+ // propagated.
+ if (m_contextMenu != null) {
+ for (MenuItem item : m_contextMenu.getItems()) {
+ disposeMenuItem(item);
+ }
+ }
+ m_calendar.showGeneralContextMenu(m_contextMenu);
+
+ }
+
+ private void disposeMenuItem(MenuItem item) {
+ Menu menu = item.getMenu();
+ if (menu != null) {
+ for (MenuItem childItem : menu.getItems()) {
+ disposeMenuItem(childItem);
+ }
+ menu.dispose();
+ }
+ item.dispose();
+ }
+
+ } // end class P_ContextMenuListener
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/SwtCalendar.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/SwtCalendar.java
index ee16b586aa..4f60546e21 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/SwtCalendar.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/calendar/widgets/SwtCalendar.java
@@ -15,7 +15,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Map;
-import org.eclipse.jface.action.IMenuManager;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.ui.swt.basic.calendar.CalendarConstants;
@@ -32,6 +31,7 @@ import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
/**
* This class represents an SWT calendar widget.<br>
@@ -414,14 +414,14 @@ public class SwtCalendar extends Composite implements PaintListener {
* do nothing in the JCalendar version, needs to be overriden to do smth
* e.g. in SWTScoutCalendar
*/
- public void showGeneralContextMenu(IMenuManager manager) {
+ public void showGeneralContextMenu(Menu manager) {
}
/**
* do nothing in the JCalendar version, needs to be overriden to do smth
* e.g. in SWTScoutCalendar
*/
- public void showItemContextMenu(IMenuManager manager, Object item) {
+ public void showItemContextMenu(Menu manager, Object item) {
}
@Override
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/table/SwtScoutTable.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/table/SwtScoutTable.java
index 6dd300bc5a..21cdbd556c 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/table/SwtScoutTable.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/table/SwtScoutTable.java
@@ -1246,9 +1246,7 @@ public class SwtScoutTable extends SwtScoutComposite<ITable> implements ISwtScou
}
final boolean emptySelection = getSwtTableViewer().getSelection().isEmpty();
- List<IMenu> menus = SwtMenuUtility.collectMenus(getScoutObject(), emptySelection, !emptySelection, getEnvironment());
-
- SwtMenuUtility.fillContextMenu(menus, m_contextMenu, getEnvironment());
+ SwtMenuUtility.fillContextMenu(SwtMenuUtility.collectMenus(getScoutObject(), emptySelection, !emptySelection, getEnvironment()), m_contextMenu, getEnvironment());
}
private void disposeMenuItem(MenuItem item) {
@@ -1300,9 +1298,8 @@ public class SwtScoutTable extends SwtScoutComposite<ITable> implements ISwtScou
}
// grab the actions out of the job, when the actions are providden
// within the scheduled time the popup will be handled.
- if (scoutMenusRef.get() != null) {
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_headerMenu, getEnvironment());
- }
+
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_headerMenu, getEnvironment());
}
private void disposeMenuItem(MenuItem item) {
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/tree/SwtScoutTree.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/tree/SwtScoutTree.java
index 7e01d03a3f..01752c582c 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/tree/SwtScoutTree.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/basic/tree/SwtScoutTree.java
@@ -759,7 +759,6 @@ public class SwtScoutTree extends SwtScoutComposite<ITree> implements ISwtScoutT
final boolean emptySpace = (getSwtField().getContextItem() == null);
List<IMenu> menus = SwtMenuUtility.collectMenus(getScoutObject(), emptySpace, !emptySpace, getEnvironment());
-
SwtMenuUtility.fillContextMenu(menus, m_contextMenu, getEnvironment());
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/button/SwtScoutButton.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/button/SwtScoutButton.java
index 71bbcbef8f..15bddb4737 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/button/SwtScoutButton.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/button/SwtScoutButton.java
@@ -400,9 +400,7 @@ public class SwtScoutButton extends SwtScoutFieldComposite<IButton> implements I
}
// grab the actions out of the job, when the actions are providden within
// the scheduled time the popup will be handled.
- if (scoutMenusRef.get() != null) {
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
- }
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
}
private void disposeMenuItem(MenuItem item) {
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/filechooserfield/SwtScoutFileChooserField.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/filechooserfield/SwtScoutFileChooserField.java
index 5ef5537d6e..3dd6cc99c4 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/filechooserfield/SwtScoutFileChooserField.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/filechooserfield/SwtScoutFileChooserField.java
@@ -247,9 +247,7 @@ public class SwtScoutFileChooserField extends SwtScoutValueFieldComposite<IFileC
}
// grab the actions out of the job, when the actions are providden within
// the scheduled time the popup will be handled.
- if (scoutMenusRef.get() != null) {
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
- }
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
}
private void disposeMenuItem(MenuItem item) {
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/imagebox/SwtScoutImageField.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/imagebox/SwtScoutImageField.java
index 2bea5d016b..6d3dbe602f 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/imagebox/SwtScoutImageField.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/imagebox/SwtScoutImageField.java
@@ -205,10 +205,7 @@ public class SwtScoutImageField extends SwtScoutFieldComposite<IImageField> impl
// grab the actions out of the job, when the actions are provided within
// the scheduled time the popup will be handled.
- if (scoutMenusRef.get() != null) {
- Menu menu = ((Menu) e.getSource());
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), menu, SwtScoutImageField.this.getEnvironment());
- }
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), ((Menu) e.getSource()), SwtScoutImageField.this.getEnvironment());
}
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/smartfield/SwtScoutSmartField.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/smartfield/SwtScoutSmartField.java
index 141c0814a2..1fd4735081 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/smartfield/SwtScoutSmartField.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/form/fields/smartfield/SwtScoutSmartField.java
@@ -642,9 +642,7 @@ public class SwtScoutSmartField extends SwtScoutValueFieldComposite<IContentAssi
}
// grab the actions out of the job, when the actions are providden within
// the scheduled time the popup will be handled.
- if (scoutMenusRef.get() != null) {
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
- }
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_contextMenu, getEnvironment());
}
private void disposeMenuItem(MenuItem item) {
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuContributionItem.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuContributionItem.java
deleted file mode 100644
index 73f0399523..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuContributionItem.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.menu;
-
-import org.eclipse.jface.action.ContributionItem;
-import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.scout.rt.ui.swt.SwtMenuUtility;
-import org.eclipse.swt.widgets.Menu;
-
-/**
- *
- */
-public class SwtScoutMenuContributionItem extends ContributionItem {
- private IMenu m_scoutMenu;
- private ISwtEnvironment m_environment;
- private AbstractSwtScoutMenu m_swtMenuItem;
-
- public SwtScoutMenuContributionItem(IMenu scoutMenu, ISwtEnvironment environment) {
- m_scoutMenu = scoutMenu;
- m_environment = environment;
-
- }
-
- public IMenu getScoutMenu() {
- return m_scoutMenu;
- }
-
- public ISwtEnvironment getEnvironment() {
- return m_environment;
- }
-
- public AbstractSwtScoutMenu getSwtMenuItem() {
- return m_swtMenuItem;
- }
-
- @Override
- public void fill(Menu menu, int index) {
- m_swtMenuItem = SwtMenuUtility.createMenuItem(getScoutMenu(), menu, getEnvironment());
-
- }
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuGroup.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuGroup.java
deleted file mode 100644
index e7cbee1b6f..0000000000
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/menu/SwtScoutMenuGroup.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 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.rt.ui.swt.menu;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
-import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
-import org.eclipse.scout.rt.ui.swt.SwtMenuUtility;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-
-/**
- *
- */
-public class SwtScoutMenuGroup extends AbstractSwtScoutMenu {
-
- private Menu m_childMenu;
- private List<AbstractSwtScoutMenu> m_childMenus = new ArrayList<AbstractSwtScoutMenu>();
- private Listener m_uiMenuListener;
-
- public SwtScoutMenuGroup(IMenu scoutMenu, Menu parentMenu, ISwtEnvironment environment) {
- super(scoutMenu, parentMenu, environment, false);
- createMenu(scoutMenu, parentMenu, environment);
- }
-
- @Override
- protected void initializeUi(MenuItem swtMenuItem) {
- super.initializeUi(swtMenuItem);
- IMenu scoutMenu = getScoutMenu();
- if (scoutMenu.hasChildActions()) {
- m_childMenu = new Menu(swtMenuItem);
- for (IMenu subMenu : SwtMenuUtility.consolidateMenus(scoutMenu.getChildActions())) {
- AbstractSwtScoutMenu menuItem = SwtMenuUtility.createMenuItem(subMenu, m_childMenu, getEnvironment());
- if (menuItem != null) {
- m_childMenus.add(menuItem);
- }
- }
- swtMenuItem.setMenu(m_childMenu);
- m_uiMenuListener = new P_UiMenuListener();
- m_childMenu.addListener(SWT.Show, m_uiMenuListener);
- m_childMenu.addListener(SWT.Hide, m_uiMenuListener);
- m_childMenu.addListener(SWT.Dispose, m_uiMenuListener);
- }
- }
-
- protected void handleSwtMenuHide() {
- }
-
- /**
- *
- */
- protected void handleSwtMenuShow() {
- Runnable t = new Runnable() {
- @Override
- public void run() {
- for (AbstractSwtScoutMenu menuItem : m_childMenus) {
- menuItem.getScoutMenu().prepareAction();
- }
- }
- };
- getEnvironment().invokeScoutLater(t, 0);
- //end notify
- }
-
- protected void handleSwtMenuDispose() {
- m_childMenu.removeListener(SWT.Show, m_uiMenuListener);
- m_childMenu.removeListener(SWT.Hide, m_uiMenuListener);
- m_childMenu.removeListener(SWT.Dispose, m_uiMenuListener);
- m_uiMenuListener = null;
-
- }
-
- private class P_UiMenuListener implements Listener {
- @Override
- public void handleEvent(Event event) {
- switch (event.type) {
- case SWT.Show:
- handleSwtMenuShow();
- break;
- case SWT.Hide:
- handleSwtMenuHide();
- break;
- case SWT.Dispose:
- handleSwtMenuDispose();
- break;
- }
- }
-
- }
-
-}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/editor/AbstractScoutEditorPart.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/editor/AbstractScoutEditorPart.java
index 61133a42bf..b2199771bf 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/editor/AbstractScoutEditorPart.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/editor/AbstractScoutEditorPart.java
@@ -12,18 +12,23 @@ package org.eclipse.scout.rt.ui.swt.window.desktop.editor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.scout.commons.OptimisticLock;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ClientSyncJob;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutToolbarAction;
import org.eclipse.scout.rt.ui.swt.busy.AnimatedBusyImage;
import org.eclipse.scout.rt.ui.swt.form.ISwtScoutForm;
import org.eclipse.scout.rt.ui.swt.util.ScoutFormToolkit;
@@ -91,6 +96,7 @@ public abstract class AbstractScoutEditorPart extends EditorPart implements ISwt
}
protected void attachScout() {
+ updateToolbarActionsFromScout();
IForm form = getForm();
setTitleFromScout(form.getTitle());
setImageFromScout(form.getIconId());
@@ -122,6 +128,24 @@ public abstract class AbstractScoutEditorPart extends EditorPart implements ISwt
getSite().getPage().addPartListener(m_editorListener);
}
+ /**
+ *
+ */
+ protected void updateToolbarActionsFromScout() {
+ List<IToolButton> toolbuttons = ActionUtility.visibleNormalizedActions(getForm().getToolbuttons());
+ if (!toolbuttons.isEmpty()) {
+ IToolBarManager toolBarManager = getRootForm().getToolBarManager();
+ if (getForm().getToolbarLocation() == IForm.TOOLBAR_VIEW_PART) {
+ toolBarManager = getEditorSite().getActionBars().getToolBarManager();
+ }
+ for (IToolButton b : toolbuttons) {
+ toolBarManager.add(new SwtScoutToolbarAction(b, toolBarManager, getSwtEnvironment()));
+ }
+ toolBarManager.update(true);
+ }
+
+ }
+
protected void detachScout() {
if (getForm() != null) {
// listeners
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/tray/SwtScoutTray.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/tray/SwtScoutTray.java
index feeac9acf9..904b0af2d9 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/tray/SwtScoutTray.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/tray/SwtScoutTray.java
@@ -13,7 +13,6 @@ package org.eclipse.scout.rt.ui.swt.window.desktop.tray;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
-import org.eclipse.scout.commons.CollectionUtility;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ui.action.menu.IMenu;
@@ -108,9 +107,7 @@ public class SwtScoutTray extends SwtScoutComposite<IDesktop> implements ISwtSco
//nop
}
// end notify
- if (CollectionUtility.hasElements(scoutMenusRef.get())) {
- SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_popupMenu, getEnvironment());
- }
+ SwtMenuUtility.fillContextMenu(scoutMenusRef.get(), m_popupMenu, getEnvironment());
}
}
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/view/AbstractScoutView.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/view/AbstractScoutView.java
index fc5cd7c7e2..79971748ae 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/view/AbstractScoutView.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/desktop/view/AbstractScoutView.java
@@ -12,18 +12,23 @@ package org.eclipse.scout.rt.ui.swt.window.desktop.view;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.scout.commons.OptimisticLock;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.client.ClientSyncJob;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutToolbarAction;
import org.eclipse.scout.rt.ui.swt.busy.AnimatedBusyImage;
import org.eclipse.scout.rt.ui.swt.form.ISwtScoutForm;
import org.eclipse.scout.rt.ui.swt.util.ScoutFormToolkit;
@@ -162,6 +167,7 @@ public abstract class AbstractScoutView extends ViewPart implements ISwtScoutPar
}
protected void attachScout(IForm form) {
+ updateToolbarActionsFromScout();
setTitleFromScout(form.getTitle());
setImageFromScout(form.getIconId());
setMaximizeEnabledFromScout(form.isMaximizeEnabled());
@@ -188,6 +194,24 @@ public abstract class AbstractScoutView extends ViewPart implements ISwtScoutPar
form.addPropertyChangeListener(m_formPropertyListener);
}
+ /**
+ *
+ */
+ protected void updateToolbarActionsFromScout() {
+ List<IToolButton> toolbuttons = ActionUtility.visibleNormalizedActions(getForm().getToolbuttons());
+ if (!toolbuttons.isEmpty()) {
+ IToolBarManager toolBarManager = getRootForm().getToolBarManager();
+ if (getForm().getToolbarLocation() == IForm.TOOLBAR_VIEW_PART) {
+ toolBarManager = getViewSite().getActionBars().getToolBarManager();
+ }
+ for (IToolButton b : toolbuttons) {
+ toolBarManager.add(new SwtScoutToolbarAction(b, toolBarManager, getSwtEnvironment()));
+ }
+ toolBarManager.update(true);
+ }
+
+ }
+
protected void detachScout(IForm form) {
// listeners
form.removePropertyChangeListener(m_formPropertyListener);
diff --git a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/dialog/SwtScoutDialog.java b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/dialog/SwtScoutDialog.java
index 70183b1818..4a52146aa7 100644
--- a/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/dialog/SwtScoutDialog.java
+++ b/org.eclipse.scout.rt.ui.swt/src/org/eclipse/scout/rt/ui/swt/window/dialog/SwtScoutDialog.java
@@ -13,12 +13,16 @@ package org.eclipse.scout.rt.ui.swt.window.dialog;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.reflect.Method;
+import java.util.List;
+import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.commons.exception.ProcessingException;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
+import org.eclipse.scout.rt.client.ui.action.ActionUtility;
+import org.eclipse.scout.rt.client.ui.action.tool.IToolButton;
import org.eclipse.scout.rt.client.ui.form.IForm;
import org.eclipse.scout.rt.client.ui.form.fields.IFormField;
import org.eclipse.scout.rt.client.ui.form.fields.button.IButton;
@@ -26,6 +30,7 @@ import org.eclipse.scout.rt.ui.swt.DefaultValidateRoot;
import org.eclipse.scout.rt.ui.swt.ISwtEnvironment;
import org.eclipse.scout.rt.ui.swt.IValidateRoot;
import org.eclipse.scout.rt.ui.swt.SwtShellValidateRoot;
+import org.eclipse.scout.rt.ui.swt.action.SwtScoutToolbarAction;
import org.eclipse.scout.rt.ui.swt.form.ISwtScoutForm;
import org.eclipse.scout.rt.ui.swt.util.SwtUtility;
import org.eclipse.scout.rt.ui.swt.util.VersionUtility;
@@ -131,6 +136,7 @@ public class SwtScoutDialog extends Dialog implements ISwtScoutPart {
}
protected void attachScout(IForm form) {
+ updateToolbarActionsFromScout();
setTitleFromScout(form.getTitle());
setImageFromScout(form.getIconId());
setMaximizeEnabledFromScout(form.isMaximizeEnabled());
@@ -157,6 +163,21 @@ public class SwtScoutDialog extends Dialog implements ISwtScoutPart {
form.addPropertyChangeListener(m_formPropertyListener);
}
+ /**
+ *
+ */
+ protected void updateToolbarActionsFromScout() {
+ List<IToolButton> toolbuttons = ActionUtility.visibleNormalizedActions(getForm().getToolbuttons());
+ if (!toolbuttons.isEmpty()) {
+ IToolBarManager toolBarManager = getRootForm().getToolBarManager();
+ for (IToolButton b : toolbuttons) {
+ toolBarManager.add(new SwtScoutToolbarAction(b, toolBarManager, getEnvironment()));
+ }
+ toolBarManager.update(true);
+ }
+
+ }
+
protected void detachScout(IForm form) {
// listeners
form.removePropertyChangeListener(m_formPropertyListener);

Back to the top