diff --git a/package.json b/package.json
index 0771879..63c7436 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,8 @@
"@vaadin/vaadin-radio-button": "1.5.1",
"lit-element": "2.3.1",
"@vaadin/vaadin-core-shrinkwrap": "18.0.5",
- "@vaadin/vaadin-date-picker": "4.4.1"
+ "@vaadin/vaadin-date-picker": "4.4.1",
+ "@vaadin-component-factory/vcf-tooltip": "1.3.13"
},
"devDependencies": {
"@types/validator": "13.1.0",
@@ -115,7 +116,8 @@
"@vaadin/vaadin-time-picker": "2.4.0",
"@vaadin/vaadin-tabs": "3.2.0",
"@vaadin/vaadin-radio-button": "1.5.1",
- "@vaadin/vaadin-rich-text-editor": "1.3.0"
+ "@vaadin/vaadin-rich-text-editor": "1.3.0",
+ "@vaadin-component-factory/vcf-tooltip": "1.3.13"
},
"devDependencies": {
"webpack-babel-multi-target-plugin": "2.3.3",
@@ -141,6 +143,6 @@
"lit-css-loader": "0.0.4",
"extract-loader": "5.1.0"
},
- "hash": "62511e127eb6b94b147718eaf87963a72562a63efa45b11debd35ee61e3cd13a"
+ "hash": "9a8381007196d77745c03255bc222102472ce461f37b2742f39962e71d14929a"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ebbcc78..9ac2c01 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2,6 +2,7 @@ dependencies:
'@polymer/iron-icon': 3.0.1
'@polymer/iron-list': 3.1.0
'@polymer/polymer': 3.2.0
+ '@vaadin-component-factory/vcf-tooltip': 1.3.13
'@vaadin/flow-frontend': 'link:target/flow-frontend'
'@vaadin/form': 'link:target/flow-frontend/form'
'@vaadin/router': 1.7.2
@@ -1041,6 +1042,16 @@ packages:
dev: true
resolution:
integrity: sha512-gHUHI6pJaANIO2r6WcbT7+WMgbL9GZooR4tWpuBOETpDIqFNxwaJluE+6rj6VGYe8k6OkfhbHz2Fkm8kl06Igw==
+ /@vaadin-component-factory/vcf-tooltip/1.3.13:
+ dependencies:
+ '@polymer/polymer': 3.2.0
+ '@vaadin/vaadin-element-mixin': 2.4.2
+ '@vaadin/vaadin-license-checker': 2.1.2
+ '@vaadin/vaadin-lumo-styles': 1.6.1
+ '@vaadin/vaadin-themable-mixin': 1.6.2
+ dev: false
+ resolution:
+ integrity: sha512-UezXIbkSRapmdLw0KldI3l2VjU81kYIdpyZdC7Dpa+4XOv0e7sPaWhfbyHumQxAIN337DQrkkx0im8M6Y1f1jQ==
/@vaadin/router/1.7.2:
dependencies:
'@vaadin/vaadin-usage-statistics': 2.1.0
@@ -1323,6 +1334,12 @@ packages:
dev: false
resolution:
integrity: sha512-hG1MQ8cLaFlsoqSZFm8bqXrHxMry6vtkJrpiXArxpaZXMwPkJnfrUT3D6Qm/NG/rZHvOzZa5U/1k5+dyledlHA==
+ /@vaadin/vaadin-license-checker/2.1.2:
+ dependencies:
+ '@vaadin/vaadin-development-mode-detector': 2.0.4
+ dev: false
+ resolution:
+ integrity: sha512-oD6/MoavXyIZp6NWhkbJD5RKrpiWohhaQpgqjM0bFIthRr+1NoiG5R1w0uY3NIdMDuaXlsUFSQJ/Viz1v7F/jQ==
/@vaadin/vaadin-list-box/1.4.0:
dependencies:
'@polymer/polymer': 3.2.0
@@ -7336,6 +7353,7 @@ specifiers:
'@polymer/iron-list': 3.1.0
'@polymer/polymer': 3.2.0
'@types/validator': 13.1.0
+ '@vaadin-component-factory/vcf-tooltip': 1.3.13
'@vaadin/flow-frontend': ./target/flow-frontend
'@vaadin/form': ./target/flow-frontend/form
'@vaadin/router': 1.7.2
diff --git a/pom.xml b/pom.xml
index fc13d67..ba903ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,11 @@
5.7.0
test
+
+ com.vaadin.componentfactory
+ tooltip
+ 1.3.4
+
diff --git a/src/main/java/edu/kit/typicalc/presenter/Presenter.java b/src/main/java/edu/kit/typicalc/presenter/Presenter.java
new file mode 100644
index 0000000..bfbe837
--- /dev/null
+++ b/src/main/java/edu/kit/typicalc/presenter/Presenter.java
@@ -0,0 +1,18 @@
+package edu.kit.typicalc.presenter;
+
+import java.util.Map;
+import edu.kit.typicalc.model.Model;
+import edu.kit.typicalc.view.main.MainView;
+import edu.kit.typicalc.view.main.MainView.MainViewListener;
+
+public class Presenter implements MainViewListener {
+
+ public Presenter(final Model model, final MainView view) {
+
+ }
+
+ @Override
+ public void typeInferLambdaString(String lambdaTerm, Map typeAssumptions) {
+ // TODO Auto-generated method stub
+ }
+}
diff --git a/src/main/java/edu/kit/typicalc/view/main/InputBar.java b/src/main/java/edu/kit/typicalc/view/main/InputBar.java
index fadf132..402a9ca 100644
--- a/src/main/java/edu/kit/typicalc/view/main/InputBar.java
+++ b/src/main/java/edu/kit/typicalc/view/main/InputBar.java
@@ -1,19 +1,62 @@
package edu.kit.typicalc.view.main;
+import java.util.Optional;
+import java.util.function.Consumer;
+import org.apache.commons.lang3.StringUtils;
+import com.vaadin.componentfactory.Tooltip;
+import com.vaadin.flow.component.button.Button;
+import com.vaadin.flow.component.combobox.ComboBox;
+import com.vaadin.flow.component.icon.Icon;
+import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.i18n.LocaleChangeEvent;
import com.vaadin.flow.i18n.LocaleChangeObserver;
public class InputBar extends HorizontalLayout implements LocaleChangeObserver {
+ private final Tooltip infoTooltip;
+ private final Icon infoIcon;
+ private final Button lambdaButton;
+ private final ComboBox inputField;
+ private final Button inferTypeButton;
- public InputBar() {
- //TODO implement
+ protected InputBar(final Consumer callback) {
+ infoIcon = new Icon(VaadinIcon.INFO_CIRCLE);
+ infoTooltip = new Tooltip();
+ initInfoTooltip();
+ infoTooltip.attachToComponent(infoIcon);
+
+ lambdaButton = new Button(getTranslation("root.lambda"), event -> onlambdaButtonClick());
+ inputField = new ComboBox<>();
+ initComboBox();
+ inferTypeButton = new Button(getTranslation("root.typeInfer"), event -> onTypeInferButtonClick(callback));
+
+ //TODO add components to layout
+ }
+
+ private void onTypeInferButtonClick(final Consumer callback) {
+ final Optional currentInput = inputField.getOptionalValue();
+ currentInput.ifPresentOrElse(callback::accept, () -> callback.accept(StringUtils.EMPTY));
+ }
+
+ private void onlambdaButtonClick() {
+ final StringBuilder inputBuilder = new StringBuilder();
+ final Optional currentInput = inputField.getOptionalValue();
+ currentInput.ifPresent(inputBuilder::append);
+ inputBuilder.append(getTranslation("root.lambda"));
+ inputField.setValue(inputBuilder.toString());
+ }
+
+ private void initComboBox() {
+ // TODO add examples to the combo box here
+ }
+
+ private void initInfoTooltip() {
+ //TODO add text too info tooltip here
}
@Override
public void localeChange(LocaleChangeEvent event) {
- // TODO Auto-generated method stub
-
+ inferTypeButton.setText(getTranslation("root.typeInfer"));
}
}
diff --git a/src/main/java/edu/kit/typicalc/view/main/MainView.java b/src/main/java/edu/kit/typicalc/view/main/MainView.java
index b55a795..f55c992 100644
--- a/src/main/java/edu/kit/typicalc/view/main/MainView.java
+++ b/src/main/java/edu/kit/typicalc/view/main/MainView.java
@@ -1,5 +1,6 @@
package edu.kit.typicalc.view.main;
+import java.util.Map;
import edu.kit.typicalc.model.TypeInfererInterface;
import edu.kit.typicalc.model.parser.ParseError;
@@ -23,4 +24,9 @@ public interface MainView {
* @param error the error which is displayed to indicate invalid input
*/
void displayError(ParseError error);
+
+ public interface MainViewListener {
+
+ public void typeInferLambdaString(String lambdaTerm, Map typeAssumptions);
+ }
}
diff --git a/src/main/java/edu/kit/typicalc/view/main/MainViewImpl.java b/src/main/java/edu/kit/typicalc/view/main/MainViewImpl.java
index 00f9ce4..3ae86e3 100644
--- a/src/main/java/edu/kit/typicalc/view/main/MainViewImpl.java
+++ b/src/main/java/edu/kit/typicalc/view/main/MainViewImpl.java
@@ -17,9 +17,11 @@ import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.tabs.Tabs;
+import edu.kit.typicalc.model.ModelImpl;
import edu.kit.typicalc.model.TypeInfererInterface;
import edu.kit.typicalc.model.parser.ParseError;
import edu.kit.typicalc.view.content.typeinferencecontent.TypeInferenceView;
+import edu.kit.typicalc.presenter.Presenter;
/**
* The main view is a top-level placeholder for other views.
@@ -32,7 +34,8 @@ public class MainViewImpl extends AppLayout implements MainView {
public MainViewImpl() {
setDrawerOpened(false);
- addToNavbar(true, new UpperBar());
+ MainViewListener presenter = new Presenter(new ModelImpl(), this);
+ addToNavbar(true, new UpperBar(presenter));
addToDrawer(new DrawerContent());
}
diff --git a/src/main/java/edu/kit/typicalc/view/main/UpperBar.java b/src/main/java/edu/kit/typicalc/view/main/UpperBar.java
index eff66f4..9940ad2 100644
--- a/src/main/java/edu/kit/typicalc/view/main/UpperBar.java
+++ b/src/main/java/edu/kit/typicalc/view/main/UpperBar.java
@@ -11,6 +11,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.i18n.LocaleChangeEvent;
import com.vaadin.flow.i18n.LocaleChangeObserver;
import edu.kit.typicalc.view.content.infocontent.StartPageView;
+import edu.kit.typicalc.view.main.MainView.MainViewListener;
@CssImport("./styles/view/main/upper-bar.css")
public class UpperBar extends HorizontalLayout implements LocaleChangeObserver {
@@ -19,21 +20,30 @@ public class UpperBar extends HorizontalLayout implements LocaleChangeObserver {
private final InputBar inputBar;
private final Icon helpDialogIcon;
- public UpperBar() {
+ private final MainViewListener presenter;
+
+ protected UpperBar(final MainViewListener presenter) {
+ this.presenter = presenter;
+
+ add(new DrawerToggle());
+ this.viewTitle = new H1(getTranslation("root.typicalc"));
+ viewTitle.setId("viewTitle");
+ this.inputBar = new InputBar(null); //TODO init correctly
+ this.helpDialogIcon = new Icon(VaadinIcon.QUESTION_CIRCLE);
+ helpDialogIcon.setId("icon");
+
+ viewTitle.addClickListener(event -> this.getUI().get().navigate(StartPageView.class));
+
+ add(viewTitle, inputBar, helpDialogIcon);
setId("header");
getThemeList().set("dark", true);
setWidthFull();
setSpacing(false);
setAlignItems(FlexComponent.Alignment.CENTER);
- add(new DrawerToggle());
- this.viewTitle = new H1(getTranslation("root.typicalc"));
- viewTitle.setId("viewTitle");
- this.inputBar = new InputBar();
- this.helpDialogIcon = new Icon(VaadinIcon.QUESTION_CIRCLE);
- helpDialogIcon.setId("icon");
-
- viewTitle.addClickListener(event -> this.getUI().get().navigate(StartPageView.class));
- add(viewTitle, inputBar, helpDialogIcon);
+ }
+
+ protected void typeInfer() {
+ //TODO implement
}
private void createHelpDialog() {
diff --git a/src/main/resources/language/translation_de.properties b/src/main/resources/language/translation_de.properties
index abd5c11..77cc255 100644
--- a/src/main/resources/language/translation_de.properties
+++ b/src/main/resources/language/translation_de.properties
@@ -11,4 +11,6 @@ abs-rule=\\begin{prooftree}\
\\end{prooftree}
test=hello world
-root.typicalc=Typicalc
\ No newline at end of file
+root.typicalc=Typicalc
+root.lambda=\u03BB
+root.typeInfer=Typisieren
\ No newline at end of file