You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/06/24 22:41:52 UTC

[isis] branch master updated: ISIS-2340: fx: menu action handler stub

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 9f79879  ISIS-2340: fx: menu action handler stub
9f79879 is described below

commit 9f798797813c7a878b025f7056074fdf3eb6c7a8
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jun 25 00:41:35 2020 +0200

    ISIS-2340: fx: menu action handler stub
---
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  9 +++++++-
 .../viewer/javafx/ui/main/UiController.java        | 16 ++++++++++++--
 .../viewers/javafx/ui/src/main/resources/ui.fxml   |  8 +++----
 .../ui/pages/main/MainView_createHeader.java       |  6 +++---
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       | 25 +++++++++++++++++++---
 5 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
index 32acbee..1c3ab10 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.incubator.viewer.javafx.ui.main;
 
+import java.util.function.Consumer;
+
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
@@ -35,6 +38,7 @@ import javafx.scene.control.SeparatorMenuItem;
 public class MenuBuilderFx implements MenuVisitor {
     
     private final MenuBar menuBar;
+    private final Consumer<ManagedAction> menuActionEventHandler;
     
     private Menu currentTopLevelMenu = null;
     private ActionUiModelFactoryFx actionUiModelFactory = new ActionUiModelFactoryFx();
@@ -54,7 +58,10 @@ public class MenuBuilderFx implements MenuVisitor {
         log.info("sub menu {}", menuDto.getName());
         
         val actionUiModel = actionUiModelFactory.newActionUiModel(managedAction);
-        currentTopLevelMenu.getItems().add(actionUiModel.createMenuUiComponent());
+        val menuItem = actionUiModel.createMenuUiComponent();
+        menuItem.setOnAction(e->menuActionEventHandler.accept(managedAction));
+        
+        currentTopLevelMenu.getItems().add(menuItem);
     }
     
     @Override
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
index 7ebd01e..675478f 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiController.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
 import org.apache.isis.viewer.common.model.header.HeaderUiModelProvider;
@@ -33,6 +34,8 @@ import lombok.extern.log4j.Log4j2;
 
 import javafx.fxml.FXML;
 import javafx.scene.control.MenuBar;
+import javafx.scene.control.ScrollPane;
+import javafx.scene.control.TextArea;
 
 @Component
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
@@ -45,6 +48,10 @@ public class UiController {
 
     @FXML private MenuBar menuBarLeft;
     @FXML private MenuBar menuBarRight;
+    @FXML private ScrollPane contentView;
+    @FXML private TextArea sampleTextArea;
+    
+    
     
     @FXML
     public void initialize() {
@@ -57,13 +64,18 @@ public class UiController {
         
         val commonContext = IsisAppCommonContext.of(metaModelContext);
         
-        val leftMenuBuilder = MenuBuilderFx.of(menuBarLeft);
-        val rightMenuBuilder = MenuBuilderFx.of(menuBarRight);
+        val leftMenuBuilder = MenuBuilderFx.of(menuBarLeft, this::onMenuAction);
+        val rightMenuBuilder = MenuBuilderFx.of(menuBarRight, this::onMenuAction);
         
         header.getPrimary().buildMenuItems(commonContext, leftMenuBuilder);
         header.getSecondary().buildMenuItems(commonContext, rightMenuBuilder);
         header.getTertiary().buildMenuItems(commonContext, rightMenuBuilder);
     }
 
+    private void onMenuAction(ManagedAction managedAction) {
+        log.info("about to invoke action {}", managedAction.getIdentifier());
+        // TODO get an ActionPrompt, then on invocation show the result in the contentView
+        sampleTextArea.setText(String.format("action result to be rendered here\nfor %s", managedAction.getIdentifier()));
+    }
     
 }
diff --git a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml b/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
index ea25941..c207008 100644
--- a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
+++ b/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Button?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.control.MenuBar?>
 <?import javafx.scene.control.ScrollPane?>
@@ -36,15 +35,14 @@
                 <Color blue="0.624" green="0.624" red="0.624" fx:id="x2" />
               </textFill>
             </Label>
-                  <Button layoutX="11.0" layoutY="88.0" mnemonicParsing="false" text="Button" />
-                  <TextArea layoutX="11.0" layoutY="122.0" prefHeight="200.0" prefWidth="200.0" />
           </children>
         </AnchorPane>
-        <ScrollPane prefHeight="-1.0" prefWidth="-1.0">
+        <ScrollPane fx:id="contentView" prefHeight="-1.0" prefWidth="-1.0">
           <content>
-            <AnchorPane id="Content" minHeight="-1.0" minWidth="-1.0" prefHeight="545.0" prefWidth="430.0">
+            <AnchorPane id="Content" minHeight="-1.0" minWidth="-1.0" prefHeight="772.0" prefWidth="592.0">
               <children>
                 <Label alignment="CENTER" font="$x1" layoutX="14.0" layoutY="14.0" style="&#10;" text="View" textAlignment="CENTER" textFill="$x2" wrapText="false" />
+                        <TextArea fx:id="sampleTextArea" layoutX="26.0" layoutY="81.0" prefHeight="678.0" prefWidth="549.0" />
               </children>
             </AnchorPane>
           </content>
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java
index 79db90b..33e02bf 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MainView_createHeader.java
@@ -41,7 +41,7 @@ final class MainView_createHeader {
     static Component createHeader(
             final IsisAppCommonContext commonContext, 
             final HeaderUiModel headerUiModel,
-            final Consumer<ManagedAction> subMenuEventHandler) {
+            final Consumer<ManagedAction> menuActionEventHandler) {
 
         val titleOrLogo = createTitleOrLogo(commonContext, headerUiModel.getBranding());
         val leftMenuBar = new MenuBar();
@@ -64,8 +64,8 @@ final class MainView_createHeader {
 
         menuBarContainer.setWidthFull();
 
-        val leftMenuBuilder = MenuBuilderVaa.of(commonContext, subMenuEventHandler, leftMenuBar);
-        val rightMenuBuilder = MenuBuilderVaa.of(commonContext, subMenuEventHandler, rightMenuBar);
+        val leftMenuBuilder = MenuBuilderVaa.of(commonContext, menuActionEventHandler, leftMenuBar);
+        val rightMenuBuilder = MenuBuilderVaa.of(commonContext, menuActionEventHandler, rightMenuBar);
 
         headerUiModel.getPrimary().buildMenuItems(commonContext, leftMenuBuilder);
         headerUiModel.getSecondary().buildMenuItems(commonContext, rightMenuBuilder);
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
index d9a7887..a1bb1cb 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/pages/main/MenuBuilderVaa.java
@@ -1,3 +1,21 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
 package org.apache.isis.incubator.viewer.vaadin.ui.pages.main;
 
 import java.util.function.Consumer;
@@ -9,6 +27,7 @@ import com.vaadin.flow.component.menubar.MenuBar;
 
 import org.apache.isis.core.metamodel.interactions.managed.ManagedAction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
+import org.apache.isis.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa;
 import org.apache.isis.incubator.viewer.vaadin.model.decorator.Decorators;
 import org.apache.isis.viewer.common.model.menu.MenuItemDto;
 import org.apache.isis.viewer.common.model.menu.MenuVisitor;
@@ -20,11 +39,11 @@ import lombok.val;
 class MenuBuilderVaa implements MenuVisitor {
 
     private final IsisAppCommonContext commonContext; 
-    private final Consumer<ManagedAction> subMenuEventHandler;
+    private final Consumer<ManagedAction> menuActionEventHandler;
     private final MenuBar menuBar;
 
     private MenuItem currentTopLevelMenu = null;
-    private org.apache.isis.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa actionUiModelFactory = new org.apache.isis.incubator.viewer.vaadin.model.action.ActionUiModelFactoryVaa();
+    private ActionUiModelFactoryVaa actionUiModelFactory = new ActionUiModelFactoryVaa();
 
     @Override
     public void addTopLevel(MenuItemDto menuDto) {
@@ -44,7 +63,7 @@ class MenuBuilderVaa implements MenuVisitor {
                 
         val actionUiModel = actionUiModelFactory.newActionUiModel(managedAction);
         currentTopLevelMenu.getSubMenu()
-        .addItem(actionUiModel.createMenuUiComponent(), e->subMenuEventHandler.accept(managedAction));
+        .addItem(actionUiModel.createMenuUiComponent(), e->menuActionEventHandler.accept(managedAction));
     }
 
     @Override