You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by mc...@apache.org on 2022/05/28 11:33:14 UTC

[hop] branch master updated: HOP-3480 changed StyledText to StyledTextComp for Hop Web compatibility, removed CTRL-space

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 069d70d94b HOP-3480 changed StyledText to StyledTextComp for Hop Web compatibility, removed CTRL-space
     new 84b403f118 Merge pull request #1507 from bamaer/HOP-3480
069d70d94b is described below

commit 069d70d94b90cde40ac931a37936a6f6df82406b
Author: Bart Maertens <ba...@know.bi>
AuthorDate: Fri May 27 13:23:01 2022 +0200

    HOP-3480 changed StyledText to StyledTextComp for Hop Web compatibility, removed CTRL-space
---
 .../pipeline/transforms/formula/FormulaDialog.java |   1 +
 .../transforms/formula/editor/FormulaEditor.java   | 147 ++-------------------
 2 files changed, 10 insertions(+), 138 deletions(-)

diff --git a/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/FormulaDialog.java b/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/FormulaDialog.java
index fb16816994..b5c18777d1 100644
--- a/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/FormulaDialog.java
+++ b/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/FormulaDialog.java
@@ -201,6 +201,7 @@ public class FormulaDialog extends BaseTransformDialog implements ITransformDial
               if (!shell.isDisposed()) {
                 FormulaEditor libFormulaEditor =
                     new FormulaEditor(
+                        variables,
                         shell,
                         SWT.APPLICATION_MODAL | SWT.SHEET,
                         Const.NVL(formula, ""),
diff --git a/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/editor/FormulaEditor.java b/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/editor/FormulaEditor.java
index ad11a7f11b..39374a4469 100644
--- a/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/editor/FormulaEditor.java
+++ b/plugins/transforms/formula/src/main/java/org/apache/hop/pipeline/transforms/formula/editor/FormulaEditor.java
@@ -17,31 +17,23 @@
 
 package org.apache.hop.pipeline.transforms.formula.editor;
 
-import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.pipeline.transforms.formula.FormulaMeta;
-import org.apache.hop.pipeline.transforms.formula.editor.util.CompletionProposal;
 import org.apache.hop.pipeline.transforms.formula.function.FunctionDescription;
 import org.apache.hop.pipeline.transforms.formula.function.FunctionLib;
-import org.apache.hop.ui.core.gui.GuiResource;
+import org.apache.hop.ui.core.widget.StyledTextComp;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.browser.Browser;
 import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
 import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.*;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.hop.core.plugins.PluginRegistry.log;
-
 public class FormulaEditor extends Dialog implements KeyListener {
   public static final Class<?> PKG = FormulaMeta.class; // For Translator
   public static final String FUNCTIONS_FILE = "functions.xml";
@@ -49,7 +41,7 @@ public class FormulaEditor extends Dialog implements KeyListener {
   private Shell shell;
   private Tree tree;
   private SashForm sashForm;
-  private StyledText expressionEditor;
+  private StyledTextComp expressionEditor;
   private String formula;
   private Browser message;
 
@@ -71,10 +63,12 @@ public class FormulaEditor extends Dialog implements KeyListener {
   private String[] categories;
 
   private SashForm rightSash;
+  private IVariables variables;
 
-  public FormulaEditor(Shell parent, int style, String formula, String[] inputFields)
+  public FormulaEditor(IVariables variables, Shell parent, int style, String formula, String[] inputFields)
       throws Exception {
     super(parent, style);
+    this.variables = variables;
     this.formula = formula;
     this.inputFields = inputFields;
 
@@ -184,7 +178,7 @@ public class FormulaEditor extends Dialog implements KeyListener {
 
     // An expression editor on the right
     //
-    expressionEditor = new StyledText(rightSash, SWT.NONE);
+    expressionEditor = new StyledTextComp(variables, rightSash, SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
     expressionEditor.setText(this.formula);
     expressionEditor.addModifyListener(event -> setStyles());
     expressionEditor.addKeyListener(this);
@@ -278,6 +272,7 @@ public class FormulaEditor extends Dialog implements KeyListener {
     };
     FormulaEditor lbe =
         new FormulaEditor(
+                null,
             new Shell(display, SWT.NONE),
             SWT.NONE,
             "MID(UPPER([name] & \" \" & [firstname]);5;10)",
@@ -286,131 +281,7 @@ public class FormulaEditor extends Dialog implements KeyListener {
   }
 
   public void keyPressed(KeyEvent e) {
-    // TODO
-    boolean ctrl = ((e.stateMask & SWT.CONTROL) != 0);
-
-    List<CompletionProposal> proposals = new ArrayList<>();
-
-    // CTRL-SPACE?
-    //
-    if (ctrl && e.character == ' ') {
-      // Gab the content before the cursor position...
-      //
-      StringBuilder beforeBuffer = new StringBuilder();
-      String editor = expressionEditor.getText();
-      int pos = expressionEditor.getCaretOffset() - 1;
-      while (pos >= 0 && pos < editor.length()) {
-        char c = editor.charAt(pos);
-        if (Character.isWhitespace(c)) {
-          break;
-        }
-        if (Character.isLetterOrDigit(c) || c == '[') {
-          beforeBuffer.insert(0, c);
-          pos--;
-        } else {
-          break;
-        }
-      }
-
-      String before = beforeBuffer.toString();
-      log.logBasic("BEFORE = " + before);
-
-      // if we just have [ we display only the field names...
-      //
-      if (before.equals("[")) {
-        for (String fieldName : inputFields) {
-          proposals.add(
-              new CompletionProposal(
-                  "[" + fieldName + "] (input field)", fieldName + "]", fieldName.length() + 1));
-        }
-      } else if (Utils.isEmpty(before)) {
-        for (String fieldName : inputFields) {
-          proposals.add(
-              new CompletionProposal(
-                  "[" + fieldName + "] (input field)",
-                  "[" + fieldName + "]",
-                  fieldName.length() + 2));
-        }
-      } else {
-        // Only add those where "before" matches the start of the keyword or function
-        //
-        for (String fieldName : inputFields) {
-          String key = "[" + fieldName;
-          if (key.startsWith(before) && !key.equalsIgnoreCase(before)) {
-            proposals.add(
-                new CompletionProposal(
-                    "[" + fieldName + "] (keyword)",
-                    fieldName.substring(before.length()) + "]",
-                    fieldName.length() - before.length() + 1));
-          }
-        }
-        for (String function : functions) {
-          if (function.startsWith(before) && !function.equalsIgnoreCase(before)) {
-            proposals.add(
-                new CompletionProposal(
-                    function + "() (Function)",
-                    function.substring(before.length()) + "()",
-                    function.length() - before.length() + 1));
-          }
-        }
-      }
-
-      if (helperMenu == null) {
-        helperMenu = new Menu(shell, SWT.POP_UP);
-      } else {
-        for (MenuItem item : helperMenu.getItems()) {
-          item.dispose();
-        }
-      }
-      final int offset = expressionEditor.getCaretOffset();
-      Point p = expressionEditor.getLocationAtOffset(offset);
-      int h = expressionEditor.getLineHeight(offset);
-      Point l = GuiResource.calculateControlPosition(expressionEditor);
-
-      MenuItem first = null;
-      if (proposals.size() == 1) {
-        MenuItem item = new MenuItem(helperMenu, SWT.NONE);
-        if (first == null) {
-          first = item;
-        }
-        final CompletionProposal proposal = proposals.get(0);
-        item.setText(proposal.getMenuText());
-        item.addSelectionListener(
-            new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent se) {
-                expressionEditor.insert(proposal.getCompletionString());
-                expressionEditor.setSelection(offset + proposal.getOffset());
-              }
-            });
-        helperMenu.setLocation(l.x + p.x, l.y + p.y + h);
-        helperMenu.setDefaultItem(first);
-        helperMenu.setVisible(true);
-      } else if (proposals.size() > 0) {
-        int nr = 0;
-        for (final CompletionProposal proposal : proposals) {
-          MenuItem item = new MenuItem(helperMenu, SWT.NONE);
-          if (first == null) {
-            first = item;
-          }
-          item.setText(proposal.getMenuText());
-          item.addSelectionListener(
-              new SelectionAdapter() {
-                @Override
-                public void widgetSelected(SelectionEvent se) {
-                  expressionEditor.insert(proposal.getCompletionString());
-                  expressionEditor.setSelection(offset + proposal.getOffset());
-                }
-              });
-          if (nr++ > 5) {
-            break;
-          }
-        }
-        helperMenu.setLocation(l.x + p.x, l.y + p.y + h);
-        helperMenu.setDefaultItem(first);
-        helperMenu.setVisible(true);
-      }
-    }
+    // implement later
   }
 
   @Override