Эх сурвалжийг харах

mit plugins, freevirtualkeyboard, applauncher, myswl

Reinhard Russinger 7 жил өмнө
parent
commit
700133dc69
30 өөрчлөгдсөн 794 нэмэгдсэн , 2 устгасан
  1. 17 0
      GfA-buildroot_SetRightDisplayResolution_OnUpdate_add5_7inch_display.patch
  2. 2 0
      MakeBuildrootEnv.sh
  3. 1 1
      board/GfA/Display001/BUILD
  4. 8 0
      board/GfA/Display001/Display001.dts
  5. 8 0
      board/GfA/Display001/Display001_10.dts
  6. 8 0
      board/GfA/Display001/Display001_4.dts
  7. 8 0
      board/GfA/Display001/Display001_4_nopruss.dts
  8. 8 0
      board/GfA/Display001/Display001_5.dts
  9. 8 0
      board/GfA/Display001/Display001_7.dts
  10. 8 0
      board/GfA/Display001/Display001_7_bitbang.dts
  11. 8 0
      board/GfA/Display001/Display001_7_gain1.dts
  12. 8 0
      board/GfA/Display001/Display001_7_i2c2.dts
  13. 8 0
      board/GfA/Display001/Display001_rru.dts
  14. BIN
      board/GfA/Display001/rootfs/root/gfa_spi
  15. BIN
      board/GfA/Display001/rootfs/usr/lib/qt/plugins/platforminputcontexts/libFreeVirtualKeyboard.so
  16. BIN
      board/GfA/Display001/rootfs/usr/qml/ApplicationLauncher/libApplicationLauncher.so
  17. 3 0
      board/GfA/Display001/rootfs/usr/qml/ApplicationLauncher/qmldir
  18. BIN
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/FontAwesome.otf
  19. 263 0
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/InputPanel.qml
  20. 149 0
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyButton.qml
  21. 191 0
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyModel.qml
  22. 81 0
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyPopup.qml
  23. 2 0
      board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/qmldir
  24. BIN
      board/GfA/Display001/rootfs/usr/qml/gfa/plugins/qml/libSqlDatabase.so
  25. 4 0
      board/GfA/Display001/rootfs/usr/qml/gfa/plugins/qml/qmldir
  26. BIN
      board/GfA/Display001/rootfs/usr/sbin/fbvncserver
  27. BIN
      board/GfA/Display001/rootfs/usr/sbin/vncpasswd
  28. BIN
      board/GfA/Display001/rootfs/var/GfA/Display_GSM
  29. BIN
      board/GfA/Display001/rootfs/var/GfA/gsmMuxd
  30. 1 1
      configs/Display001_3.12.30_defconfig

+ 17 - 0
GfA-buildroot_SetRightDisplayResolution_OnUpdate_add5_7inch_display.patch

@@ -0,0 +1,17 @@
+diff --git a/UpdateRootfs.sh.in b/UpdateRootfs.sh.in
+index 0318ad0915..97d46256b2 100644
+--- a/UpdateRootfs.sh.in
++++ b/UpdateRootfs.sh.in
+@@ -143,6 +143,12 @@ if [ "$XRES" == "1280" -a "$YRES" == "800" ]; then
+   DONE=1
+ fi
+ 
++if [ "$XRES" == "640" -a "$YRES" == "480" ]; then
++  echo "5.7 Inch"
++  sh /root/DisplayTo_5_7inch.sh
++  DONE=1
++fi
++
+ if [ "$DONE" == "0" ]; then
+   echo "Unknown Display Resolution"
+ fi

+ 2 - 0
MakeBuildrootEnv.sh

@@ -17,6 +17,8 @@ patch -p1 < ../GfA/GfA-buildroot_force_mutt_to_bind_openssl.patch
 patch -p1 < ../GfA/GfA-buildroot_remove_hostapd_and_wpa_supplicant_from_update.patch
 patch -p1 < ../GfA/GfA-buildroot_qt57-qt5quickcontrols_mk.patch
 patch -p1 < ../GfA/GfA-buildroot_qt57-qt5quickcontrols2_mk.patch
+patch -p1 < ../GfA/GfA-buildroot_SetRightDisplayResolution_OnUpdate.patch
+patch -p1 < ../GfA/GfA-buildroot_SetRightDisplayResolution_OnUpdate_add5_7inch_display.patch
 #
 chmod a+x *.sh
 cp ../GfA/configs/* ./configs

+ 1 - 1
board/GfA/Display001/BUILD

@@ -1 +1 @@
-370
+372

+ 8 - 0
board/GfA/Display001/Display001.dts

@@ -274,6 +274,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_10.dts

@@ -275,6 +275,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_4.dts

@@ -274,6 +274,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_4_nopruss.dts

@@ -274,6 +274,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_5.dts

@@ -274,6 +274,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_7.dts

@@ -308,6 +308,14 @@ i2c@3 {
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_7_bitbang.dts

@@ -308,6 +308,14 @@ i2c@3 {
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_7_gain1.dts

@@ -309,6 +309,14 @@ i2c@3 {
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_7_i2c2.dts

@@ -271,6 +271,14 @@
 };
 */
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &uart4 {
 	pinctrl-names = "default", "sleep";
         pinctrl-0 = <&uart4_pins_default>;

+ 8 - 0
board/GfA/Display001/Display001_rru.dts

@@ -194,6 +194,14 @@
 	};
 };
 
+&tscadc {
+        status = "okay";
+};
+
+&am335x_adc {
+        ti,adc-channels = <0 1 2 3 4 5 6 7>;
+};
+
 &i2c0 {
 	status = "okay";
 	clock-frequency = <400000>;

BIN
board/GfA/Display001/rootfs/root/gfa_spi


BIN
board/GfA/Display001/rootfs/usr/lib/qt/plugins/platforminputcontexts/libFreeVirtualKeyboard.so


BIN
board/GfA/Display001/rootfs/usr/qml/ApplicationLauncher/libApplicationLauncher.so


+ 3 - 0
board/GfA/Display001/rootfs/usr/qml/ApplicationLauncher/qmldir

@@ -0,0 +1,3 @@
+module ApplicationLauncher
+plugin ApplicationLauncher
+

BIN
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/FontAwesome.otf


+ 263 - 0
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/InputPanel.qml

@@ -0,0 +1,263 @@
+import QtQuick 2.0
+import "."
+import FreeVirtualKeyboard 1.0
+
+/**
+ * This is the QML input panel that provides the virtual keyboard UI
+ * The code has been copied from
+ * http://tolszak-dev.blogspot.de/2013/04/qplatforminputcontext-and-virtual.html
+ */
+Item {
+    id:root
+    objectName: "inputPanel"
+    width: parent.width
+    height: width / 4
+
+    signal hideKeyPressed
+
+    // Report actual keyboard rectangle to input engine
+    onYChanged: InputEngine.setKeyboardRectangle(Qt.rect(x, y, width, height))
+
+    KeyModel {
+        id:keyModel
+        kbdLayout: settings.value("COMMON/KbdLayout") //"de"
+    }
+
+    FontLoader {
+        source: "FontAwesome.otf"
+    }
+    QtObject {
+        id:pimpl
+        property bool shiftModifier: false
+        property bool symbolModifier: false
+        property int verticalSpacing: keyboard.height / 40
+        property int horizontalSpacing: verticalSpacing
+        property int rowHeight: keyboard.height/24*5 - verticalSpacing
+        property int buttonWidth:  (keyboard.width-column.anchors.margins)/12 - horizontalSpacing
+    }
+
+    // The delegate that paints the key buttons
+    Component {
+        id: keyButtonDelegate
+        KeyButton {
+            id: button
+            width: pimpl.buttonWidth
+            height: pimpl.rowHeight
+            text: (pimpl.shiftModifier) ? letter.toUpperCase() : (pimpl.symbolModifier)?firstSymbol : letter
+            inputPanel: root
+        }
+    }
+
+    Component {
+        id: numberButtonDelegate
+        KeyButton {
+            id: button
+            width: pimpl.buttonWidth
+            height: pimpl.rowHeight  * 4 / 5
+            text: (pimpl.shiftModifier) ? letter.toUpperCase() : (pimpl.symbolModifier)?firstSymbol : letter
+            inputPanel: root
+            color: "grey"
+        }
+    }
+
+    Connections {
+        target: InputEngine
+        // Switch the keyboard layout to Numeric if the input mode of the InputEngine changes
+        onInputModeChanged: {
+            pimpl.symbolModifier = ((InputEngine.inputMode == InputEngine.Numeric)
+                                 || (InputEngine.inputMode == InputEngine.Dialable))
+            if (pimpl.symbolModifier) {
+                pimpl.shiftModifier = false
+            }
+        }
+    }
+
+    // This function shows the character preview popup for each key button
+    function showKeyPopup(keyButton)
+    {
+        // console.log("showKeyPopup");
+        keyPopup.popup(keyButton, root);
+    }
+
+    // The key popup for character preview
+    KeyPopup {
+        id: keyPopup
+        visible: false
+        z: 100
+    }
+
+    Rectangle {
+        id: background
+        color: "black"
+        width: keyboard.width
+        height: keyboard.height + 4 * pimpl.verticalSpacing
+    }
+
+    Rectangle {
+        id:keyboard
+        color: "black"
+        anchors.fill: parent;
+        MouseArea {
+            anchors.fill: parent
+        }
+
+        Column {
+            id:column
+            anchors.margins: 5
+            anchors.fill: parent
+            spacing: pimpl.verticalSpacing
+            Row {
+                height: pimpl.rowHeight
+                spacing: pimpl.horizontalSpacing
+                anchors.horizontalCenter:parent.horizontalCenter
+                Repeater {
+                    model: keyModel.numbersRowModel
+                    delegate: numberButtonDelegate
+                }
+            }
+
+            Row {
+                height: pimpl.rowHeight
+                spacing: pimpl.horizontalSpacing
+                anchors.horizontalCenter:parent.horizontalCenter
+                Repeater {
+                    model: keyModel.firstRowModel
+                    delegate: keyButtonDelegate
+                }
+            }
+            Row {
+                height: pimpl.rowHeight
+                spacing: pimpl.horizontalSpacing
+                anchors.horizontalCenter:parent.horizontalCenter
+                Repeater {
+                    model: keyModel.secondRowModel
+                    delegate: keyButtonDelegate
+                }
+            }
+            Item {
+                height: pimpl.rowHeight
+                width:parent.width
+                KeyButton {
+                    id: shiftKey
+                    color: (pimpl.shiftModifier)? "#1e6fa7": "#1e1b18"
+                    anchors.left: parent.left
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.family: "FontAwesome"
+                    font.bold: true
+                    text: "\u21ea" //"\uf062"
+                    functionKey: true
+                    onClicked: {
+                        if (pimpl.symbolModifier) {
+                            pimpl.symbolModifier = false
+                        }
+                        pimpl.shiftModifier = !pimpl.shiftModifier
+                    }
+                    inputPanel: root
+                }
+                Row {
+                    height: pimpl.rowHeight
+                    spacing: pimpl.horizontalSpacing
+                    anchors.horizontalCenter:parent.horizontalCenter
+                    Repeater {
+                        anchors.horizontalCenter: parent.horizontalCenter
+                        model: keyModel.thirdRowModel
+                        delegate: keyButtonDelegate
+                    }
+                }
+                KeyButton {
+                    id: backspaceKey
+                    font.family: "FontAwesome"
+                    color: "#1e1b18"
+                    anchors.right: parent.right
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    text: "\x7F"
+                    displayText: "\u27f5" //"\uf177"
+                    inputPanel: root
+                    repeat: true
+                }
+            }
+            Row {
+                height: pimpl.rowHeight
+                spacing: pimpl.horizontalSpacing
+                anchors.horizontalCenter:parent.horizontalCenter
+                KeyButton {
+                    id: hideKey
+                    color: "#1e1b18"
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.family: "FontAwesome"
+                    text: "\uf11c" //"\uf078"
+                    functionKey: true
+                    onClicked: {
+                        Qt.inputMethod.hide();
+                        hideKeyPressed();
+                    }
+                    inputPanel: root
+                    showPreview: false
+                }
+                KeyButton {
+                    color: "#1e1b18"
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.family: "FontAwesome"
+                    font.bold: true
+                    text:  (pimpl.shiftModifier) ? "\u21a4":"\u21a6"
+                    inputPanel: root
+                    //functionKey: true
+                }
+                KeyButton {
+                    color: "#1e1b18"
+                    width: pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.family: "FontAwesome"
+                    text: (pimpl.shiftModifier) ? "\u2191":"\u2190" //"\uf060" // arrow left
+                    //onClicked: InputEngine.sendKeyToFocusItem(text)
+                    inputPanel: root
+                }
+                KeyButton {
+                    id: spaceKey
+                    width: 3*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    text: " "
+                    inputPanel: root
+                    showPreview: false
+                }
+                KeyButton {
+                    color: "#1e1b18"
+                    width: pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.family: "FontAwesome"
+                    text: (pimpl.shiftModifier) ?"\u2193":"\u2192" //"\uf061"  //pimpl.symbolModifier ? ":" :"."
+                    inputPanel: root
+                }
+                KeyButton {
+                    id: symbolKey
+                    color: "#1e1b18"
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    text: (!pimpl.symbolModifier)? "12#" : "ABC"
+                    functionKey: true
+                    onClicked: {
+                        if (pimpl.shiftModifier) {
+                            pimpl.shiftModifier = false
+                        }
+                        pimpl.symbolModifier = !pimpl.symbolModifier
+                    }
+                    inputPanel: root
+                }
+                KeyButton {
+                    id: enterKey
+                    color: "#1e1b18"
+                    width: 1.25*pimpl.buttonWidth
+                    height: pimpl.rowHeight
+                    font.bold: true
+                    displayText: "\u23ce" //"Enter"
+                    text: "\n"
+                    inputPanel: root
+                }
+            }
+        }
+    }
+}

+ 149 - 0
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyButton.qml

@@ -0,0 +1,149 @@
+import QtQuick 2.0
+import FreeVirtualKeyboard 1.0
+
+/**
+ * This is the type implements one single key button in the InputPanel
+ * The code has been copied from
+ * http://tolszak-dev.blogspot.de/2013/04/qplatforminputcontext-and-virtual.html
+ */
+Item {
+    id:root
+
+    // The background color of this button
+    property color color: "#35322f"
+
+    // The key text to show in this button
+    property string text
+
+    // The font for rendering of text
+    property alias font: txt.font
+
+    // The color of the text in this button
+    property alias textColor: txt.color
+
+    // This property holds the pressed status of the key.
+    property alias isPressed: buttonMouseArea.pressed
+
+    // This property holds a reference to the input panel.
+    // A key can only show the charcter preview popup if this property contains
+    // a valid refernce to the input panel
+    property var inputPanel
+
+    // This property holds the highlighted status of the key
+    // The highlighted status is a little bit different from the pressed status
+    // If the user releases the key, it is not pressed anymore, but it is still
+    // highlighted for some milliseconds
+    property bool isHighlighted: false
+
+    // Sets the show preview attribute for the character preview key popup
+    property bool showPreview: true
+
+    // Sets the key repeat attribute.
+    // If the repeat is enabled, the key will repeat the input events while held down.
+    // The default is false.
+    property bool repeat: false
+
+    // Sets the key code for input method processing.
+    property int key
+
+    // Sets the display text - this string is rendered in the keyboard layout.
+    // The default value is the key text.
+    property alias displayText: txt.text
+
+    // Sets the function key attribute.
+    property bool functionKey: false
+
+    signal clicked()
+    signal pressed()
+    signal released()
+
+    Rectangle {
+        anchors.fill: parent
+        radius: height / 20
+        color: isHighlighted ? Qt.tint(root.color, "#801e6fa7") : root.color
+        Text {
+            id: txt
+            color: "white"
+            anchors.margins: parent.height / 6
+            anchors.fill: parent
+            fontSizeMode: Text.Fit
+            font.pixelSize: height
+            horizontalAlignment: Text.AlignHCenter
+            verticalAlignment: Text.AlignVCenter
+            text: root.text
+        }
+        MouseArea {
+            id: buttonMouseArea
+            anchors.fill: parent
+            onClicked: root.clicked()
+            onPressed: root.pressed()
+            onReleased: root.released()
+        }
+    }
+
+    Timer {
+        id: highlightTimer
+        interval: 100
+        running: !isPressed
+        repeat: false
+
+        onTriggered: {
+            isHighlighted = false;
+        }
+    }
+
+    Timer {
+        id: repeatTimer
+        interval: 500
+        repeat: true
+        running: root.repeat && root.isPressed
+
+        onTriggered: {
+            if (root.state == "")
+            {
+                root.state = "REPEATING"
+                console.log("switching to repeating");
+            }
+            else if (root.state == "REPEATING")
+            {
+                console.log("repeating");
+            }
+
+            if (!functionKey)
+            {
+                InputEngine.sendKeyToFocusItem(text)
+            }
+        }
+    }
+
+    onInputPanelChanged: {
+        console.log("onInputPanelChanged: " + inputPanel.objectName);
+    }
+
+    // If the InputPanel property has a valid InputPanel reference and if
+    // showPreview is true, then this function calls showKeyPopup() to
+    // show the character preview popup.
+    onPressed: {
+        if (inputPanel != null && showPreview)
+        {
+            inputPanel.showKeyPopup(root);
+        }
+        isHighlighted = true;
+    }
+
+    onReleased: {
+        state = ""
+        console.log("onReleased - functionKey = " + functionKey)
+        if (!functionKey)
+        {
+            InputEngine.sendKeyToFocusItem(text)
+        }
+    }
+
+    states: [
+        State {
+            name: "REPEATING"
+            PropertyChanges { target: repeatTimer; interval: 50}
+        }
+    ]
+}

+ 191 - 0
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyModel.qml

@@ -0,0 +1,191 @@
+import QtQuick 2.0
+
+/**
+ * This is quick and dirty model for the keys of the InputPanel *
+ * The code has been copied from
+ * http://tolszak-dev.blogspot.de/2013/04/qplatforminputcontext-and-virtual.html
+ */
+
+
+/********************************************************
+                English Keyboard Layout
+ ********************************************************/
+
+
+Item {
+    property QtObject firstRowModel: first
+    property QtObject secondRowModel: second
+    property QtObject thirdRowModel: third
+    property QtObject numbersRowModel: numbers
+    property string kbdLayout: ""
+
+    ListModel {
+        id:numbers
+
+
+        Component.onCompleted: {
+
+            switch (kbdLayout){
+            default:
+            case "de":
+            append ({ letter: "1", firstSymbol: "1"});
+            append ({ letter: "2", firstSymbol: "2"});
+            append ({ letter: "3", firstSymbol: "3"});
+            append ({ letter: "4", firstSymbol: "4"});
+            append ({ letter: "5", firstSymbol: "5"});
+            append ({ letter: "6", firstSymbol: "6"});
+            append ({ letter: "7", firstSymbol: "7"});
+            append ({ letter: "8", firstSymbol: "8"});
+            append ({ letter: "9", firstSymbol: "9"});
+            append ({ letter: "0", firstSymbol: "0"});
+            append ({ letter: "@", firstSymbol: "€"});
+            break;
+
+            case "en":
+            append ({ letter: "1", firstSymbol: "1"});
+            append ({ letter: "2", firstSymbol: "2"});
+            append ({ letter: "3", firstSymbol: "3"});
+            append ({ letter: "4", firstSymbol: "4"});
+            append ({ letter: "5", firstSymbol: "5"});
+            append ({ letter: "6", firstSymbol: "6"});
+            append ({ letter: "7", firstSymbol: "7"});
+            append ({ letter: "8", firstSymbol: "8"});
+            append ({ letter: "9", firstSymbol: "9"});
+            append ({ letter: "0", firstSymbol: "0"});
+            append ({ letter: "$", firstSymbol: "$"});
+            break;
+
+            }
+
+        }
+
+//        ListElement { letter: "1"; firstSymbol: "1"}
+//        ListElement { letter: "2"; firstSymbol: "2"}
+//        ListElement { letter: "3"; firstSymbol: "3"}
+//        ListElement { letter: "4"; firstSymbol: "4"}
+//        ListElement { letter: "5"; firstSymbol: "5"}
+//        ListElement { letter: "6"; firstSymbol: "6"}
+//        ListElement { letter: "7"; firstSymbol: "7"}
+//        ListElement { letter: "8"; firstSymbol: "8"}
+//        ListElement { letter: "9"; firstSymbol: "9"}
+//        ListElement { letter: "0"; firstSymbol: "0"}
+//        ListElement { letter: "@"; firstSymbol: "@"}
+//        // ListElement { letter: "="; firstSymbol: "+"}
+    }
+
+    ListModel {
+        id:first
+        ListElement { letter: "q"; firstSymbol: "!"}
+        ListElement { letter: "w"; firstSymbol: "°"}
+        ListElement { letter: "e"; firstSymbol: "#"}
+        ListElement { letter: "r"; firstSymbol: "$"}
+        ListElement { letter: "t"; firstSymbol: "%"}
+        ListElement { letter: "y"; firstSymbol: "^"}
+        ListElement { letter: "u"; firstSymbol: "&"}
+        ListElement { letter: "i"; firstSymbol: "+"}
+        ListElement { letter: "o"; firstSymbol: "-"}
+        ListElement { letter: "p"; firstSymbol: "*"}
+        ListElement { letter: "("; firstSymbol: "/"}
+        ListElement { letter: ")"; firstSymbol: "="}
+    }
+    ListModel {
+        id:second
+        ListElement { letter: "a"; firstSymbol: "{"}
+        ListElement { letter: "s"; firstSymbol: "}"}
+        ListElement { letter: "d"; firstSymbol: "["}
+        ListElement { letter: "f"; firstSymbol: "]"}
+        ListElement { letter: "g"; firstSymbol: "("}
+        ListElement { letter: "h"; firstSymbol: ")"}
+        ListElement { letter: "j"; firstSymbol: ":"}
+        ListElement { letter: "k"; firstSymbol: "\""}
+        ListElement { letter: "l"; firstSymbol: "'"}
+        ListElement { letter: "'"; firstSymbol: "|"}
+        ListElement { letter: "/"; firstSymbol: "\\"}
+    }
+    ListModel {
+        id:third
+        ListElement { letter: "z"; firstSymbol: "<"}
+        ListElement { letter: "x"; firstSymbol: ">"}
+        ListElement { letter: "c"; firstSymbol: "€"}
+        ListElement { letter: "v"; firstSymbol: "µ"}
+        ListElement { letter: "b"; firstSymbol: "?"}
+        ListElement { letter: "n"; firstSymbol: ".com"}
+        ListElement { letter: "m"; firstSymbol: ";"}
+        ListElement { letter: ","; firstSymbol: ","}
+        ListElement { letter: "."; firstSymbol: "."}
+    }
+}
+
+
+
+/********************************************************
+                German Keyboard Layout
+ ********************************************************/
+/*
+
+Item {
+    property QtObject firstRowModel: first
+    property QtObject secondRowModel: second
+    property QtObject thirdRowModel: third
+    property QtObject numbersRowModel: numbers
+
+    ListModel {
+        id:numbers
+        ListElement { letter: "1"; firstSymbol: "1"}
+        ListElement { letter: "2"; firstSymbol: "2"}
+        ListElement { letter: "3"; firstSymbol: "3"}
+        ListElement { letter: "4"; firstSymbol: "4"}
+        ListElement { letter: "5"; firstSymbol: "5"}
+        ListElement { letter: "6"; firstSymbol: "6"}
+        ListElement { letter: "7"; firstSymbol: "7"}
+        ListElement { letter: "8"; firstSymbol: "8"}
+        ListElement { letter: "9"; firstSymbol: "9"}
+        ListElement { letter: "0"; firstSymbol: "0"}
+        ListElement { letter: "ß"; firstSymbol: "@"}
+        // ListElement { letter: "="; firstSymbol: "+"}
+    }
+
+    ListModel {
+        id:first
+        ListElement { letter: "q"; firstSymbol: "!"}
+        ListElement { letter: "w"; firstSymbol: "°"}
+        ListElement { letter: "e"; firstSymbol: "#"}
+        ListElement { letter: "r"; firstSymbol: "$"}
+        ListElement { letter: "t"; firstSymbol: "%"}
+        ListElement { letter: "z"; firstSymbol: "^"}
+        ListElement { letter: "u"; firstSymbol: "&"}
+        ListElement { letter: "i"; firstSymbol: "+"}
+        ListElement { letter: "o"; firstSymbol: "-"}
+        ListElement { letter: "p"; firstSymbol: "*"}
+        ListElement { letter: "ü"; firstSymbol: "/"}
+        ListElement { letter: ""; firstSymbol: "="}
+    }
+    ListModel {
+        id:second
+        ListElement { letter: "a"; firstSymbol: "{"}
+        ListElement { letter: "s"; firstSymbol: "}"}
+        ListElement { letter: "d"; firstSymbol: "["}
+        ListElement { letter: "f"; firstSymbol: "]"}
+        ListElement { letter: "g"; firstSymbol: "("}
+        ListElement { letter: "h"; firstSymbol: ")"}
+        ListElement { letter: "j"; firstSymbol: ":"}
+        ListElement { letter: "k"; firstSymbol: "\""}
+        ListElement { letter: "l"; firstSymbol: "'"}
+        ListElement { letter: "ö"; firstSymbol: "|"}
+        ListElement { letter: "ä"; firstSymbol: "\\"}
+    }
+    ListModel {
+        id:third
+        ListElement { letter: "y"; firstSymbol: "<"}
+        ListElement { letter: "x"; firstSymbol: ">"}
+        ListElement { letter: "c"; firstSymbol: "€"}
+        ListElement { letter: "v"; firstSymbol: "µ"}
+        ListElement { letter: "b"; firstSymbol: "?"}
+        ListElement { letter: "n"; firstSymbol: ".de"}
+        ListElement { letter: "m"; firstSymbol: ";"}
+        ListElement { letter: ","; firstSymbol: ","}
+        ListElement { letter: "."; firstSymbol: "."}
+    }
+}
+
+*/

+ 81 - 0
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/KeyPopup.qml

@@ -0,0 +1,81 @@
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+/**
+ * This is the key popup that shows a character preview above the
+ * pressed key button like it is known from keyboards on phones.
+ */
+
+Item {
+    id: root
+    property alias text: txt.text
+    property alias font: txt.font
+
+    width: 40
+    height: 40
+    visible: false
+
+    Rectangle {
+        id: popup
+        anchors.fill: parent
+        radius: Math.round(height / 30)
+        z: shadow.z + 1
+
+        gradient: Gradient {
+                 GradientStop { position: 0.0; color: Qt.lighter(Qt.lighter("#35322f"))}
+                 GradientStop { position: 1.0; color: Qt.lighter("#35322f")}
+
+        }
+
+        Text {
+            id: txt
+            color: "white"
+            anchors.fill: parent
+            fontSizeMode: Text.Fit
+            font.pixelSize: height
+            horizontalAlignment: Text.AlignHCenter
+            verticalAlignment: Text.AlignVCenter
+        }
+    }
+
+    Rectangle {
+        id: shadow
+        width: root.width
+        height: root.height
+        color: "#3F000000"
+        x: 4
+        y: 4
+    }
+
+    function popup(keybutton, inputPanel) {
+        // console.log("popup: " + inputPanel.objectName);
+        // console.log("keybutton.text: " + keybutton.text);
+        width = keybutton.width * 1.4;
+        height = keybutton.height * 1.4;
+        var KeyButtonGlobalLeft = keybutton.mapToItem(inputPanel, 0, 0).x;
+        var KeyButtonGlobalTop = keybutton.mapToItem(inputPanel, 0, 0).y;
+        var PopupGlobalLeft = KeyButtonGlobalLeft - (width - keybutton.width) / 2;
+        var PopupGlobalTop = KeyButtonGlobalTop - height - pimpl.verticalSpacing * 1.5;
+        // console.log("Popup position left: " + KeyButtonGlobalLeft);
+        var PopupLeft = root.parent.mapFromItem(inputPanel, PopupGlobalLeft, PopupGlobalTop).x;
+        y = root.parent.mapFromItem(inputPanel, PopupGlobalLeft, PopupGlobalTop).y;
+        if (PopupGlobalLeft < 0)
+        {
+            x = 0;
+        }
+        else if ((PopupGlobalLeft + width) > inputPanel.width)
+        {
+            x = PopupLeft - (PopupGlobalLeft + width - inputPanel.width);
+        }
+        else
+        {
+            x = PopupLeft;
+        }
+
+        text = keybutton.displayText;
+        font.family = keybutton.font.family
+        visible = Qt.binding(function() {return keybutton.isHighlighted});
+    }
+}
+
+

+ 2 - 0
board/GfA/Display001/rootfs/usr/qml/QtQuick/FreeVirtualKeyboard/qmldir

@@ -0,0 +1,2 @@
+module QtQuick.FreeVirtualKeyboard
+InputPanel 1.0 InputPanel.qml

BIN
board/GfA/Display001/rootfs/usr/qml/gfa/plugins/qml/libSqlDatabase.so


+ 4 - 0
board/GfA/Display001/rootfs/usr/qml/gfa/plugins/qml/qmldir

@@ -0,0 +1,4 @@
+module gfa.plugins.qml
+plugin SqlDatabase
+classname SqlDatabase
+typeinfo plugins.qmltypes

BIN
board/GfA/Display001/rootfs/usr/sbin/fbvncserver


BIN
board/GfA/Display001/rootfs/usr/sbin/vncpasswd


BIN
board/GfA/Display001/rootfs/var/GfA/Display_GSM


BIN
board/GfA/Display001/rootfs/var/GfA/gsmMuxd


+ 1 - 1
configs/Display001_3.12.30_defconfig

@@ -38,7 +38,7 @@ BR2_LINUX_KERNEL_UIMAGE=y
 BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x80008000"
 BR2_LINUX_KERNEL_DTS_SUPPORT=y
 BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
-BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="../GfA/board/GfA/Display001/Display001.dts ../GfA/board/GfA/Display001/Display001_4.dts ../GfA/board/GfA/Display001/Display001_7.dts ../GfA/board/GfA/Display001/Display001_10.dts ../GfA/board/GfA/Display001/Display001_rru.dts ../GfA/board/GfA/Display001/Display001_4_nopruss.dts ../GfA/board/GfA/Display001/Display001_7_gain1.dts ../GfA/board/GfA/Display001_5.dts"
+BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="../GfA/board/GfA/Display001/Display001.dts ../GfA/board/GfA/Display001/Display001_4.dts ../GfA/board/GfA/Display001/Display001_7.dts ../GfA/board/GfA/Display001/Display001_10.dts ../GfA/board/GfA/Display001/Display001_rru.dts ../GfA/board/GfA/Display001/Display001_4_nopruss.dts ../GfA/board/GfA/Display001/Display001_7_gain1.dts ../GfA/board/GfA/Display001/Display001_5.dts"
 BR2_PACKAGE_BUSYBOX_CONFIG="../GfA/board/GfA/Display001/busybox.config"
 BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
 BR2_PACKAGE_FFMPEG_GPL=y