Reinhard Russinger пре 7 година
комит
3bccc7c9ed
100 измењених фајлова са 8418 додато и 0 уклоњено
  1. 46 0
      .gitignore
  2. 339 0
      ADMIN_Settings.qml
  3. 72 0
      ADMIN_SettingsContainer.qml
  4. 48 0
      ButtHMI.qml
  5. 86 0
      CAM_Settings.qml
  6. 72 0
      CAM_SettingsContainer.qml
  7. 35 0
      CustomBusyIndicator.qml
  8. 78 0
      CustomBusyIndicatorStyle.qml
  9. BIN
      Fonts/HelveticaNeueLTW1G-Ex.otf
  10. BIN
      Fonts/HelveticaNeueLTW1G-LtEx.otf
  11. 43 0
      GfA-browser.pro
  12. 83 0
      Globals/Globals.qml
  13. 3 0
      Globals/qmldir
  14. 810 0
      HMI_DateTimeSettings.qml
  15. 132 0
      HMI_MainMenu.qml
  16. 446 0
      HMI_Settings.qml
  17. 73 0
      HMI_SettingsContainer.qml
  18. 188 0
      HMI_UpdatePopup.qml
  19. 348 0
      IpAddressInput.qml
  20. 6 0
      Languages/FLAG-cs_CZ.svg
  21. 85 0
      Languages/FLAG-de_DE.svg
  22. 111 0
      Languages/FLAG-en_EN.svg
  23. 25 0
      Languages/FLAG-es_ES.svg
  24. 85 0
      Languages/FLAG-fr_FR.svg
  25. 5 0
      Languages/FLAG-hu_HU.svg
  26. 6 0
      Languages/FLAG-it_IT.svg
  27. 12 0
      Languages/FLAG-ko_KR.svg
  28. 5 0
      Languages/FLAG-nl_NL.svg
  29. 1 0
      Languages/FLAG-pl_PL.svg
  30. 13 0
      Languages/FLAG-sk_SK.svg
  31. 69 0
      Languages/FLAG-sl_SI.svg
  32. 8 0
      Languages/FLAG-tr_TR.svg
  33. 12 0
      Languages/FLAG-zh_CN.svg
  34. BIN
      Languages/TR-cs_CZ.qm
  35. 139 0
      Languages/TR-cs_CZ.ts
  36. BIN
      Languages/TR-de_DE.qm
  37. 139 0
      Languages/TR-de_DE.ts
  38. BIN
      Languages/TR-en_EN.qm
  39. 139 0
      Languages/TR-en_EN.ts
  40. BIN
      Languages/TR-es_ES.qm
  41. 139 0
      Languages/TR-es_ES.ts
  42. BIN
      Languages/TR-fr_FR.qm
  43. 139 0
      Languages/TR-fr_FR.ts
  44. BIN
      Languages/TR-hu_HU.qm
  45. 139 0
      Languages/TR-hu_HU.ts
  46. BIN
      Languages/TR-it_IT.qm
  47. 139 0
      Languages/TR-it_IT.ts
  48. BIN
      Languages/TR-ko_KR.qm
  49. 139 0
      Languages/TR-ko_KR.ts
  50. BIN
      Languages/TR-nl_NL.qm
  51. 139 0
      Languages/TR-nl_NL.ts
  52. BIN
      Languages/TR-pl_PL.qm
  53. 139 0
      Languages/TR-pl_PL.ts
  54. BIN
      Languages/TR-sk_SK.qm
  55. 139 0
      Languages/TR-sk_SK.ts
  56. BIN
      Languages/TR-sl_SI.qm
  57. 139 0
      Languages/TR-sl_SI.ts
  58. BIN
      Languages/TR-tr_TR.qm
  59. 139 0
      Languages/TR-tr_TR.ts
  60. BIN
      Languages/TR-zh_CN.qm
  61. 139 0
      Languages/TR-zh_CN.ts
  62. 127 0
      Main.qml
  63. 13 0
      Menu/Background.qml
  64. 61 0
      Menu/MenuButton.qml
  65. 271 0
      Menu/MenuHeader.qml
  66. 58 0
      Menu/MenuStatus.qml
  67. 192 0
      PWD.qml
  68. 68 0
      PWD_Container.qml
  69. 42 0
      Scripts/FactoryReset.sh
  70. 5 0
      Scripts/FindUpdate.sh
  71. 16 0
      Scripts/GETSVG.sh
  72. 30 0
      Scripts/SetTimeDateZone.sh
  73. 33 0
      Scripts/UpdateAndReboot.sh
  74. 252 0
      SetNetworkInterface.qml
  75. 448 0
      Start.qml
  76. 62 0
      Start_Container.qml
  77. 67 0
      UrlInput.qml
  78. 33 0
      di_soric.h
  79. 85 0
      images/AdminSettings.svg
  80. 75 0
      images/BackButton.svg
  81. 97 0
      images/CamSettings.svg
  82. 80 0
      images/HmiSettings.svg
  83. 71 0
      images/HomeButton.svg
  84. BIN
      images/Icon Home 24x24 Rev003.png
  85. BIN
      images/Icon Lock 24x24 Rev003.png
  86. BIN
      images/Icon Undo 24x24 Rev003.png
  87. 86 0
      images/LiveMode_Button.svg
  88. 75 0
      images/LockButton.svg
  89. 87 0
      images/Logo_Gfa.svg
  90. 17 0
      images/Logo_Gfa_.svg
  91. BIN
      images/Systemhaus Schmadl Transparent HQ.png
  92. 41 0
      images/UndoButton.svg
  93. BIN
      images/di-soric-header.png
  94. BIN
      images/di-soric-logo.png
  95. 124 0
      images/di-soric.svg
  96. 270 0
      main.cpp
  97. 82 0
      resources.qrc
  98. 29 0
      settings.cpp
  99. 22 0
      settings.h
  100. 108 0
      sysinfo.cpp

+ 46 - 0
.gitignore

@@ -0,0 +1,46 @@
+# C++ objects and libs
+
+*.slo
+*.lo
+*.o
+*.a
+*.la
+*.lai
+*.so
+*.dll
+*.dylib
+
+# Qt-es
+
+object_script.*.Release
+object_script.*.Debug
+*_plugin_import.cpp
+/.qmake.cache
+/.qmake.stash
+*.pro.user
+*.pro.user.*
+*.qbs.user
+*.qbs.user.*
+*.moc
+moc_*.cpp
+moc_*.h
+qrc_*.cpp
+ui_*.h
+Makefile*
+*build-*
+
+
+# Qt unit tests
+target_wrapper.*
+
+
+# QtCreator
+
+*.autosave
+
+# QtCtreator Qml
+*.qmlproject.user
+*.qmlproject.user.*
+
+# QtCtreator CMake
+CMakeLists.txt.user*

+ 339 - 0
ADMIN_Settings.qml

@@ -0,0 +1,339 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import QtQuick.Layouts 1.0
+import ApplicationLauncher 1.0
+import "qrc:/Globals"
+
+Rectangle {
+    id: root
+    width: parent.width
+    height: parent.height
+    color: "white"
+
+    property color inputBackgrund: "lightgray"
+    property int inputRadius: 4
+    property int inputHeight: 40
+    property int inputFontSize: 22
+
+    Flickable {
+        id: flickable
+        anchors.fill: parent
+        contentWidth: content.width
+        contentHeight: content.height
+        interactive: contentHeight > height
+        flickableDirection: Flickable.VerticalFlick
+
+        Item {
+            id: content
+            x: 0
+            y: 0
+            width: flickable.width
+            //============================================================================
+            ApplicationLaunch {
+                id: factoryResetSCRIPT
+                appName: ""
+                arguments: ""
+                onAppFinished: {
+                    Qt.quit(); //Beenden und am Target neustarten
+                }
+            }
+
+            Rectangle {
+                property int factoryRestFontSize: 20
+                property int factoryResetRectHeight: 40
+                id: factoryResetRECT
+                x: ((root.width / 17) * 14) - 10
+                y: (root.height / 12)
+                width: (root.width / 17) * 3
+                height: factoryResetRectHeight
+                color: Globals.customer_color_base
+
+                border.color: "lightgray"
+                border.width: 3
+
+                Label {
+                    anchors.centerIn: parent
+                    font.pixelSize: roleFontSize
+                    //:ID: admin_factory_reset_butt buttontext for factory reset button
+                    text: qsTrId("_factory_reset")
+                }
+
+                MouseArea {
+                    anchors.fill : parent
+                    onClicked: {
+                        sysinfo.beep();
+                        factoryResetSCRIPT.appName = Globals.baseDir + "/Scripts/FactoryReset.sh " + sysinfo.currentCpuArchitecture;
+                        factoryResetSCRIPT.launchScript();
+                    }
+                }
+            }
+
+//            Rectangle {
+//                id : pwdEngRECT
+//                x: (root.width / 17) * 4
+//                y: (root.height / 6)
+//                width: (parent.width / 17) * 3
+//                height: inputHeight
+//                radius: inputRadius
+//                color: inputBackgrund
+
+//                TextInput {
+//                    id: pwdEngINPUT
+//                    y: (parent.height - font.pixelSize) / 2
+//                    x: y
+//                    width: parent.width - (parent.height - font.pixelSize)
+//                    clip: true
+//                    color: "black"
+//                    font.pixelSize: inputFontSize
+//                    echoMode: TextInput.Password
+//                    passwordMaskDelay: 250
+//                    text: ""
+//                    onAccepted: {
+//                    }
+
+//                    Keys.onPressed: {
+//                        if(event.key == Qt.Key_Left) {
+//                            pwdAdminRepeatINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Right) {
+//                            pwdEngRepeatINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Up)
+//                        {
+//                            pwdAdminINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Down)
+//                        {
+//                            pwdAdminINPUT.focus = true;
+//                        }
+//                        if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+//                        {
+//                            pwdEngRepeatINPUT.focus = true;
+//                        }
+//                    }
+
+//                }
+//            }
+
+//            Rectangle {
+//                id : pwdEngRepatRECT
+//                x: (root.width / 17) * 8
+//                y: (root.height / 6)
+//                width: (parent.width / 17) * 3
+//                height: inputHeight
+//                radius: inputRadius
+//                color: inputBackgrund
+
+//                TextInput {
+//                    id: pwdEngRepeatINPUT
+//                    x: (parent.height - font.pixelSize) / 2
+//                    y: x
+//                    width: parent.width - (parent.height - font.pixelSize)
+//                    clip: true
+//                    color: "black"
+//                    font.pixelSize: inputFontSize
+//                    echoMode: TextInput.Password
+//                    passwordMaskDelay: 250
+//                    text: ""
+//                    onAccepted: {
+//                    }
+//                    Keys.onPressed: {
+//                        if(event.key == Qt.Key_Left) {
+//                            pwdEngINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Right) {
+//                            pwdAdminINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Up)
+//                        {
+//                            pwdAdminRepeatINPUT.focus = true;
+//                        }
+//                        if(event.key == Qt.Key_Down)
+//                        {
+//                            pwdAdminRepeatINPUT.focus = true;
+//                        }
+//                        if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+//                        {
+//                            pwdAdminINPUT.focus = true;
+//                        }
+//                    }
+//                }
+//            }
+
+//            Rectangle {
+//                id : pwdEngRECTLAB
+//                x: (root.width / 17) / 3
+//                y: (root.height / 6)
+//                width: (parent.width / 17) * 3
+//                height: inputHeight
+
+//                Label {
+//                    id: pwdEngLABEL
+//                    x: (parent.height - font.pixelSize) / 2
+//                    y: x
+//                    font.pixelSize: inputFontSize
+//                    text: Globals.getActUserRoleText("eng")
+//                }
+//            }
+
+//            ButtHMI {
+//                id : pwdEngBUTT
+//                property bool isValid : ((pwdEngINPUT.length > 0) && (pwdEngINPUT.text == pwdEngRepeatINPUT.text)) ? true : false
+
+//                buttX: (root.width / 17) * 12
+//                buttY: (root.height / 6)
+//                buttWidth: inputHeight
+//                buttHeight: buttWidth
+//                text: "\uf0c7" //floppy-sign
+//                color: isValid == true ?Globals.customer_color_base:inputBackgrund  //((pwdEngINPUT.length > 0) && (pwdEngINPUT.text == pwdEngRepeatINPUT.text)) ? Globals.customer_color_base : inputBackgrund
+//                borderColor: color
+
+//                onButtPressed: {
+//                    if(isValid) {
+//                        if(pwdEngINPUT.text == "*")
+//                            settings.setValue("UserRoleEng/Password", "*");
+//                        else
+//                            settings.setValue("UserRoleEng/Password", Qt.md5(pwdEngINPUT.text));
+
+//                        pwdEngINPUT.text = pwdEngRepeatINPUT.text = "";
+//                    }
+//                }
+//            }
+
+            Rectangle {
+                id : pwdAdminRECT
+                x: (root.width / 17) * 4
+                y: (root.height / 6) * 3
+                width: (parent.width / 17) * 3
+                height: inputHeight
+                radius: inputRadius
+                color: inputBackgrund
+
+                TextInput {
+                    id: pwdAdminINPUT
+                    x: (parent.height - font.pixelSize) / 2
+                    y: x
+                    width: parent.width - (parent.height - font.pixelSize)
+                    clip: true
+                    color: "black"
+                    font.pixelSize: inputFontSize
+                    echoMode: TextInput.Password
+                    passwordMaskDelay: 250
+                    text: ""
+                    onAccepted: {
+                    }
+                    Keys.onPressed: {
+                        if(event.key == Qt.Key_Left) {
+                            pwdEngRepeatINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Right) {
+                            pwdAdminRepeatINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Up)
+                        {
+                            pwdEngINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Down)
+                        {
+                            pwdEngINPUT.focus = true;
+                        }
+                        if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+                        {
+                            pwdAdminRepeatINPUT.focus = true;
+                        }
+                    }
+                }
+            }
+
+            Rectangle {
+                id : pwdAdminRepatRECT
+                x: (root.width / 17) * 8
+                y: (root.height / 6) * 3
+                width: (parent.width / 17) * 3
+                height: inputHeight
+                radius: inputRadius
+                color: inputBackgrund
+
+                TextInput {
+                    id: pwdAdminRepeatINPUT
+                    x: (parent.height - font.pixelSize) / 2
+                    y: x
+                    width: parent.width - (parent.height - font.pixelSize)
+                    clip: true
+                    color: "black"
+                    font.pixelSize: inputFontSize
+                    passwordMaskDelay: 250
+                    echoMode: TextInput.Password
+                    text: ""
+                    onAccepted: {
+                    }
+                    Keys.onPressed: {
+                        if(event.key == Qt.Key_Left) {
+                            pwdAdminINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Right) {
+                            pwdEngINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Up)
+                        {
+                            pwdEngRepeatINPUT.focus = true;
+                        }
+                        if(event.key == Qt.Key_Down)
+                        {
+                            pwdEngRepeatINPUT.focus = true;
+                        }
+                        if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+                        {
+                            pwdEngINPUT.focus = true;
+                        }
+                    }
+                }
+            }
+
+            Rectangle {
+                id : pwdAdminRECTLAB
+                x: (root.width / 17) / 3
+                y: (root.height / 6) * 3
+                width: (parent.width / 17) * 3
+                height: inputHeight
+
+                Label {
+                    id: pwdAdminLABEL
+                    x: (parent.height - font.pixelSize) / 2
+                    y: x
+                    font.pixelSize: inputFontSize
+                    text: Globals.getActUserRoleText("admin")
+                }
+            }
+
+            ButtHMI {
+                id : pwdAdminBUTT
+                property bool isValid : ((pwdAdminINPUT.length > 0) && (pwdAdminINPUT.text == pwdAdminRepeatINPUT.text)) ? true : false
+
+                buttX: (root.width / 17) * 12
+                buttY: (root.height / 6) * 3
+                buttWidth: inputHeight
+                buttHeight: buttWidth
+                text: "\uf0c7" //floppy-sign
+                color: isValid == true ?Globals.customer_color_base:inputBackgrund
+                borderColor: color
+
+                onButtPressed: {
+                    if(isValid) {
+                        if(pwdAdminINPUT.text == "*")
+                            settings.setValue("UserRoleAdmin/Password", "*");
+                        else
+                            settings.setValue("UserRoleAdmin/Password", Qt.md5(pwdAdminINPUT.text));
+
+                        pwdAdminINPUT.text = pwdAdminRepeatINPUT.text = "";
+                    }
+                }
+            }
+
+
+            //============================================================================
+        }
+
+
+    }
+}

+ 72 - 0
ADMIN_SettingsContainer.qml

@@ -0,0 +1,72 @@
+import QtQuick 2.0
+import QtQuick.FreeVirtualKeyboard 1.0
+import QtQuick.Window 2.0
+import "qrc:/Globals"
+
+import "Menu" as Menu
+
+Rectangle {
+    id: root
+    implicitWidth: mainQml.implicitWidth
+    implicitHeight: mainQml.implicitHeight
+
+    Menu.MenuHeader {
+     //: ID:admin_sett_headline ADMIN Settings Headline
+     headerText: qsTrId("admin_sett_headline") + transLoad.emptyString
+    }
+    Menu.MenuStatus {}
+
+    Item {
+        clip: true
+        id: appContainer
+        //        width: parent.width
+        //        height: parent.height
+        x: 0
+        y: parent.height / 10.0
+        width: parent.width
+        height: parent.height - 2 * y
+        anchors.centerIn: parent
+        // ***** Body *****
+
+        ADMIN_Settings {
+            id: mainQml
+            anchors.left: parent.left
+            anchors.top: parent.top
+            anchors.right: parent.right
+            anchors.bottom: inputPanel.top
+
+            Component.onDestruction: {
+                Qt.inputMethod.hide();
+                console.debug("FENSTER ZU !!!");
+            }
+        }
+
+        InputPanel {
+            id: inputPanel
+            z: 99
+            y: appContainer.height
+            anchors.left: parent.left
+            anchors.right: parent.right
+            states: State {
+                name: "visible"
+                when: Qt.inputMethod.visible
+                PropertyChanges {
+                    target: inputPanel
+                    y: appContainer.height - inputPanel.height
+                }
+            }
+            transitions: Transition {
+                from: ""
+                to: "visible"
+                reversible: true
+                ParallelAnimation {
+                    NumberAnimation {
+                        properties: "y"
+                        duration: 150
+                        easing.type: Easing.InOutQuad
+                    }
+                }
+            }
+        }
+    }
+}

+ 48 - 0
ButtHMI.qml

@@ -0,0 +1,48 @@
+import QtQuick 2.0
+import Qt.labs.controls 1.0
+import "qrc:/Globals"
+
+
+Item {
+    id: buttITEM
+    property color borderColor: Globals.customer_color_base
+    property int borderWidth: 2
+    property alias text: buttLABEL.text
+    property alias color: buttLABEL.color
+    property int buttX: 0
+    property int buttY: 0
+    property int buttWidth: 35
+    property int buttHeight: 35
+    property int borderRadius: 3
+
+    signal buttPressed
+
+    Rectangle {
+        id: buttRECT
+        x: buttX //parent.x
+        y: buttY //parent.y
+        width: buttWidth//buttITEM.width
+        height: buttHeight
+        border.color: borderColor
+        border.width: borderWidth
+        radius: borderRadius
+
+        Label {
+            id: buttLABEL
+            anchors.centerIn: buttRECT
+            font.family: "FontAwesome"
+            font.bold: false
+            font.pixelSize: buttHeight - borderWidth
+        }
+        MouseArea{
+            anchors.fill:parent
+            onClicked: {
+                sysinfo.beep();
+                buttPressed();
+            }
+        }
+    }
+
+
+
+}

+ 86 - 0
CAM_Settings.qml

@@ -0,0 +1,86 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import QtQuick.Layouts 1.0
+import "qrc:/Globals"
+
+Rectangle {
+    property string cam1URL:  settings.value("CAM1SETTINGS/IpAddress", "0.0.0.0")
+    property string cam2URL:  settings.value("CAM2SETTINGS/IpAddress", "0.0.0.0")
+    property int textFontSize: 22 //Pixelsize
+
+    id: root
+    width: parent.width
+    height: parent.height
+    color: "white"
+
+    Flickable {
+        id: flickable
+        anchors.fill: parent
+        contentWidth: content.width
+        contentHeight: content.height
+        interactive: contentHeight > height
+        flickableDirection: Flickable.VerticalFlick
+
+        Item {
+            id: content
+            x: 0
+            y: 0
+            width: flickable.width
+            //============================================================================
+            Label {
+                id: lab1
+                x: cam1IP.posX
+                y: 100 + (textFontSize + 10) * 0
+                font.pixelSize: textFontSize
+                text: "URL 1 :"
+            }
+
+            UrlInput {
+                id: cam1IP
+                posX: 0
+                posY: 100 + (textFontSize + 10) * 1
+                urlwidth: parent.width
+                urlcolor: "black"
+                urlFontSize: textFontSize
+
+                Component.onCompleted:  {
+                    url = cam1URL;
+                    urlFocus = 0;
+                }
+
+                onKeyReturnPressed: {
+                    settings.setValue("CAM1SETTINGS/IpAddress", url);
+                    cam1URL = url;
+                }
+            }
+
+            Label {
+                id: lab2
+                x: cam2IP.posX
+                y: 100 + (textFontSize + 10) * 2
+                font.pixelSize: textFontSize
+                text: "URL 2 :"
+            }
+
+            UrlInput {
+                id: cam2IP
+                posX: 0
+                posY: 100 + (textFontSize + 10) * 3
+                urlwidth: parent.width
+                urlcolor: "black"
+                urlFontSize: textFontSize
+
+                Component.onCompleted:  {
+                    url = cam2URL;
+                    urlFocus = 0;
+                }
+
+                onKeyReturnPressed: {
+                    settings.setValue("CAM2SETTINGS/IpAddress", url);
+                    cam2URL = url;
+                }
+            }
+            //============================================================================
+        }
+    }
+}

+ 72 - 0
CAM_SettingsContainer.qml

@@ -0,0 +1,72 @@
+import QtQuick 2.0
+import QtQuick.FreeVirtualKeyboard 1.0
+import QtQuick.Window 2.0
+import "qrc:/Globals"
+
+import "Menu" as Menu
+
+Rectangle {
+    id: root
+    implicitWidth: mainQml.implicitWidth
+    implicitHeight: mainQml.implicitHeight
+
+    Menu.MenuHeader {
+     //: ID:cam_sett_headline CAM Settings Headline
+     headerText: qsTrId("cam_sett_headline") + transLoad.emptyString //qsTr("Kamera Einst.")  + transLoad.emptyString
+    }
+    Menu.MenuStatus {}
+
+    Item {
+        clip: true
+        id: appContainer
+        //        width: parent.width
+        //        height: parent.height
+        x: 0
+        y: parent.height / 10.0
+        width: parent.width
+        height: parent.height - 2 * y
+        anchors.centerIn: parent
+        // ***** Body *****
+
+        CAM_Settings {
+            id: mainQml
+            anchors.left: parent.left
+            anchors.top: parent.top
+            anchors.right: parent.right
+            anchors.bottom: inputPanel.top
+
+            Component.onDestruction: {
+                Qt.inputMethod.hide();
+                console.debug("FENSTER ZU !!!");
+            }
+        }
+
+        InputPanel {
+            id: inputPanel
+            z: 99
+            y: appContainer.height
+            anchors.left: parent.left
+            anchors.right: parent.right
+            states: State {
+                name: "visible"
+                when: Qt.inputMethod.visible
+                PropertyChanges {
+                    target: inputPanel
+                    y: appContainer.height - inputPanel.height
+                }
+            }
+            transitions: Transition {
+                from: ""
+                to: "visible"
+                reversible: true
+                ParallelAnimation {
+                    NumberAnimation {
+                        properties: "y"
+                        duration: 150
+                        easing.type: Easing.InOutQuad
+                    }
+                }
+            }
+        }
+    }
+}

+ 35 - 0
CustomBusyIndicator.qml

@@ -0,0 +1,35 @@
+import QtQuick 2.3
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.3
+
+BusyIndicator {
+    id: busy
+    property int bLines: 11
+    property real bLength: 10 // % of the width of the control
+    property real bWidth: 5 // % of the height of the control
+    property real bRadius: 13 // % of the width of the control
+    property real bCorner: 1 // between 0 and 1
+    property real bSpeed: 100 // smaller is faster
+    property real bTrail: 0.6 // between 0 and 1
+    property bool bClockWise: true
+
+    property real bOpacity: 0.7
+    property string bColor: "#7B756B"
+    property string bHighlightColor: "white"
+    property string bBgColor: "black"
+
+    style: CustomBusyIndicatorStyle {
+        lines: control.bLines
+        length: control.bLength
+        width: control.bWidth
+        radius: control.bRadius
+        corner: control.bCorner
+        speed: control.bSpeed
+        trail: control.bTrail
+        clockWise: control.bClockWise
+        opacity: control.bOpacity
+        color: control.bColor
+        highlightColor: control.bHighlightColor
+        bgColor: control.bBgColor
+    }
+}

+ 78 - 0
CustomBusyIndicatorStyle.qml

@@ -0,0 +1,78 @@
+import QtQuick 2.3
+import QtQuick.Controls.Styles 1.3
+
+BusyIndicatorStyle {
+    id: style
+    property int lines: 11
+    property real length: 10 // % of the width of the control
+    property real width: 5 // % of the height of the control
+    property real radius: 13 // % of the width of the control
+    property real corner: 1 // between 0 and 1
+    property real speed: 100 // smaller is faster
+    property real trail: 0.6 // between 0 and 1
+    property bool clockWise: true
+
+    property real opacity: 0.7
+    property string color: "#7B756B"
+    property string highlightColor: "white"
+    property string bgColor: "black"
+
+    indicator: Rectangle {
+        color: style.bgColor
+        visible: control.running
+        Repeater {
+            id: repeat
+            model: style.lines
+            Rectangle {
+                property real factor: control.width / 200
+                color: style.color
+                opacity: style.opacity
+                Behavior on color {
+                    ColorAnimation {
+                        from: style.highlightColor
+                        duration: style.speed * style.lines * style.trail
+                    }
+                }
+                radius: style.corner * height / 2
+                width: style.length * factor
+                height: style.width * factor
+                x: control.width / 2 + style.radius * factor
+                y: control.height / 2 - height / 2
+                transform: Rotation {
+                    origin.x: -style.radius * factor
+                    origin.y: height / 2
+                    angle: index * (360 / repeat.count)
+                }
+                Timer {
+                    id: reset
+                    interval: style.speed * (style.clockWise ? index : style.lines - index)
+                    onTriggered: {
+                        parent.opacity = 1
+                        parent.color = style.highlightColor
+                        reset2.start()
+                    }
+                }
+                Timer {
+                    id: reset2
+                    interval: style.speed
+                    onTriggered: {
+                        parent.opacity = style.opacity
+                        parent.color = style.color
+                    }
+                }
+                Timer {
+                    id: globalTimer // for a complete cycle
+                    interval: style.speed * style.lines
+                    onTriggered: {
+                        reset.start()
+                    }
+                    triggeredOnStart: true
+                    repeat: true
+                }
+                Component.onCompleted: {
+                    globalTimer.start()
+                }
+            }
+        }
+    }
+}

BIN
Fonts/HelveticaNeueLTW1G-Ex.otf


BIN
Fonts/HelveticaNeueLTW1G-LtEx.otf


+ 43 - 0
GfA-browser.pro

@@ -0,0 +1,43 @@
+TARGET = GfA-browser
+TEMPLATE = app
+SOURCES = main.cpp \
+    settings.cpp \
+    transload.cpp \
+    sysinfo.cpp
+QT += qml quick webengine
+
+DISTFILES +=
+
+#target.path = $$[QT_INSTALL_EXAMPLES]/webengine/quicknanobrowser
+target.path = /opt/GfA-Browser
+INSTALLS += target
+
+RESOURCES += \
+    resources.qrc
+
+HEADERS += \
+    settings.h \
+    transload.h \
+    sysinfo.h
+
+TRANSLATIONS =  Languages/TR-en_EN.ts \
+                Languages/TR-de_DE.ts \
+                Languages/TR-fr_FR.ts \
+                Languages/TR-it_IT.ts \
+                Languages/TR-es_ES.ts \
+                Languages/TR-zh_CN.ts \
+                Languages/TR-nl_NL.ts \
+                Languages/TR-cs_CZ.ts \
+                Languages/TR-pl_PL.ts \
+                Languages/TR-sk_SK.ts \
+                Languages/TR-sl_SI.ts \
+                Languages/TR-ko_KR.ts \
+                Languages/TR-tr_TR.ts \
+                Languages/TR-hu_HU.ts
+
+lupdate_only {
+SOURCES = *.qml \
+    Globals/*.qml \
+    Menu/*.qml
+}
+

+ 83 - 0
Globals/Globals.qml

@@ -0,0 +1,83 @@
+pragma Singleton
+import QtQuick 2.0
+
+Item {
+    property string versionINFO: "S0-V001"
+//    property color customer_color_base: "#FF00ADEF" // Basisfarbe Kundenabhängig
+    property color customer_color_base: "#FF559F98" // Basisfarbe Kundenabhängig
+    property string baseDir: "/opt/GfA-Browser"
+    property string logoSplash: "/images/Logo_Gfa.svg"
+    property string logoMenu: "/images/Logo_Gfa_.svg"
+
+    property string cam1Name: "---"
+    property string cam1Model: "---"
+    property string cam1Ver: "---"
+    property string cam1MAC: "---"
+
+    property string cam2Name: "---"
+    property string cam2Model: "---"
+    property string cam2Ver: "---"
+    property string cam2MAC: "---"
+    //: ID:active_user_role active user role shown in status line
+    property string actUserRole: "admin"
+
+    property string startTO: "" //"/HMI_SettingsContainer.qml"
+    property string in1Status: "-" // Input 1 Status
+    property string in2Status: "-" // Input 2 Status
+    property string in3Status: "-" // Input 3 Status
+    property string in4Status: "-" // Input 4 Status
+
+
+    function getActUserRoleText(roleid){
+        var ret;
+        switch (roleid){
+
+        default :
+            actUserRole = "oper";
+        case "oper":
+            //: ID:user_role_oper USER Role Operator text shown in status line and pwd settings
+            ret = qsTrId("user_role_oper") + transLoad.emptyString
+            break;
+
+        case "eng":
+            //: ID:user_role_eng USER Role Engineer text shown in status line and pwd settings
+            ret = qsTrId("user_role_eng") + transLoad.emptyString
+            break;
+
+        case "admin":
+            //: ID:user_role_admin USER Role Administrator text shown in status line and pwd settings
+            ret = qsTrId("user_role_admin") + transLoad.emptyString
+            break;
+        }
+        return ret;
+    }
+
+    // Auslesen Kameranamen ....
+    function jsonGetSystem(url, id) {
+        var doc = new XMLHttpRequest();
+        doc.onreadystatechange = function() {
+            if (doc.readyState === XMLHttpRequest.DONE) {
+                var linesSystem = doc.responseText.split(/[\r\n]+/g);
+
+                if (id === 1)
+                    cam1Name = cam1Model = cam1Ver = cam1MAC = "--";
+                else
+                    cam2Name = cam2Model = cam2Ver = cam2MAC = "--";
+
+                for(var ii = 0; ii < linesSystem.length; ii++) {
+                    var sysitem = linesSystem[ii].split(" ");
+                    console.debug(JSON.stringify(sysitem));
+                    if(sysitem[0] === "name") {if ( id === 1) cam1Name = sysitem[2]; else cam2Name = sysitem[2];}
+                    if(sysitem[0] === "model") {if ( id === 1) cam1Model = sysitem[2]; else cam2Model = sysitem[2];}
+                    if(sysitem[0] === "ver") {if ( id === 1) cam1Ver = sysitem[2]; else cam2Ver = sysitem[2];}
+                    if(sysitem[0] === "mac") {if ( id === 1) cam1MAC = sysitem[2]; else cam2MAC = sysitem[2];}
+                }
+            }
+        }
+        doc.open("put", url);
+        doc.setRequestHeader("Content-Type","text/plain");
+        doc.setRequestHeader("Accept","text/plain");
+        doc.send("get system");
+    }
+}
+

+ 3 - 0
Globals/qmldir

@@ -0,0 +1,3 @@
+# qmldir
+singleton Globals ./Globals.qml
+

+ 810 - 0
HMI_DateTimeSettings.qml

@@ -0,0 +1,810 @@
+import QtQuick 2.5
+import ApplicationLauncher 1.0
+import "qrc:/Globals"
+
+Item {
+    id: dateTimeSETTINGS
+    property int dateListTextFontSize: mHighlightBarHeight - 3 * mHighlightBarThickness
+    property int mHighlightBarThickness: 3
+    property int mHighlightBarHeight: (setMonthRect.height / 3)
+    property color cGreenLetterColor: "gray" //Globals.customer_color_base
+    property color bgColor: "lightgray"
+    property color selCol: Globals.customer_color_base //"black"//"white"
+    property int numITEMS: 3
+    property double pathScale: 0.5
+    property int defaultMONTHIDX: 0
+    property int defaultDAYIDX: 0
+    property int defaultYEARIDX: 0
+    property int defaultHOURIDX: 0
+    property int defaultMINIDX: 0
+    property int defaultSECIDX: 0
+    property int defaultTZIDX: 0
+    //------------------
+    property int dtDay: -1
+    property int dtMonth: -1
+    property int dtYear: -1
+    property int dtHour: -1
+    property int dtMin: -1
+    property int dtSec: -1
+    property string dtTZ: ""
+
+    function datetimeSet() {
+        dayNumSet();
+        monthNamesSet();
+        yearNumSet();
+        hourNumSet();
+        minNumSet();
+        secNumSet();
+        tzNamesSet();
+
+        defaultDAYIDX = parseInt(Qt.formatDate(new Date(), "d")) - 1;
+        dayView.currentIndex = defaultDAYIDX;
+    }
+
+    function monthNamesSet(){
+        var monthnames = transLoad.getMonthNames();
+        monthModel.clear();
+        defaultMONTHIDX = 0;
+        var i = 0;
+
+        for ( i = 0; i < monthnames.length; i++){
+            monthModel.append( {index: i,
+                                  month: monthnames[i],
+                              } );
+        }
+        defaultMONTHIDX = new Date().getMonth();
+    }
+
+    function dayNumSet(){
+
+        if ( dayModel.count === 0) {
+            dayModel.clear();
+            defaultDAYIDX = 0;
+            var i = 0;
+            for ( i = 0; i < 31; i++){
+                dayModel.append( {index: i,
+                                    day: (i + 1).toString(),
+                                } );
+            }
+        }
+        defaultDAYIDX = parseInt(Qt.formatDate(new Date(), "d")) - 1;
+    }
+
+    function dayNumSetMonth(){
+        var rows = dayModel.count;
+        if ( rows === 0) {
+            dayModel.clear();
+            defaultDAYIDX = 0;
+            var i = 0;
+            for ( i = 0; i < 31; i++){
+                dayModel.append( {index: i,
+                                    day: (i + 1).toString(),
+                                } );
+            }
+            defaultDAYIDX = parseInt(Qt.formatDate(new Date(), "d")) - 1;
+        }
+
+        if ((dtYear != -1) && (dtMonth != -1)) {
+
+            var daysinmonth = new Date(dtYear, dtMonth, 0).getDate();
+
+            if (daysinmonth > dayModel.count) {
+                for (i = dayModel.count; i < daysinmonth; i++ ) {
+                    dayModel.append( {index: i,
+                                        day: (i + 1).toString(),
+                                    } );
+                }
+            }
+
+            if (daysinmonth < dayModel.count) {
+                var rmcnt = dayModel.count;
+                for (i = daysinmonth; i < rmcnt; i++ ) {
+                    var idx = dayModel.count - 1;
+                    dayModel.remove(idx);
+                }
+            }
+        }
+    }
+
+
+
+
+    function yearNumSet(){
+        yearModel.clear();
+        defaultYEARIDX = 0;
+        var i = 0;
+        for ( i = 2010; i < 2035; i++){
+
+            yearModel.append( {index: i - 2010,
+                                 year: i.toString(),
+                             } );
+        }
+        var year = new Date().getFullYear();
+        year -= 2010;
+        defaultYEARIDX = year;
+    }
+
+
+    function hourNumSet() {
+        hourModel.clear();
+        defaultHOURIDX = 0;
+        var i = 0;
+        for ( i = 0; i < 24; i++){
+
+            hourModel.append( {index: i,
+                                 hour: i.toString(),
+                             } );
+        }
+        defaultHOURIDX = new Date().getHours();
+    }
+
+    function minNumSet() {
+        minModel.clear();
+        defaultMINIDX = 0;
+        var i = 0;
+        for ( i = 0; i < 60; i++){
+
+            minModel.append( {index: i,
+                                min: i.toString(),
+                            } );
+        }
+        defaultMINIDX = new Date().getMinutes();
+    }
+
+    function secNumSet() {
+        secModel.clear();
+        defaultSECIDX = 0;
+        var i = 0;
+        for ( i = 0; i < 60; i++){
+
+            secModel.append( {index: i,
+                                sec: i.toString(),
+                            } );
+        }
+        defaultSECIDX = new Date().getSeconds();
+    }
+
+    function tzNamesSet(){
+        var tznames = transLoad.getTimeZoneIds();
+        var idxtxt = transLoad.getSystemTimeZoneId();
+        var idx = 0;
+
+        tzModel.clear();
+        defaultTZIDX = 0;
+
+        var i = 0;
+        for ( i = 0; i < tznames.length; i++){
+            tzModel.append( {index: i,
+                               tz: tznames[i],
+                           } );
+            if (tznames[i] === idxtxt) idx = i;
+        }
+        defaultTZIDX = idx;
+    }
+
+    Rectangle {
+        id: setDayRect
+        width: (parent.width / 2) / 3
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: 0
+        y: 0
+        color: bgColor
+
+        Component.onCompleted: {
+            dayNumSet();
+        }
+
+        ListModel {
+            id: dayModel
+        }
+
+        Component {
+            id: dayDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: day
+            }
+        }
+
+        PathView{
+            id: dayView
+
+            onCurrentIndexChanged: {
+                dtDay = currentIndex + 1;
+            }
+
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: dayModel
+            delegate: dayDelegate
+            currentIndex: defaultDAYIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setMonthRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setMonthRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // END DAY
+
+    Rectangle {
+        id: setMonthRect
+        width: (parent.width / 2) * 1.15
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: (parent.width / 2) / 3
+        y: 0
+        color: bgColor
+
+        Component.onCompleted: {
+            monthNamesSet();
+        }
+
+        ListModel {
+            id: monthModel
+        }
+
+        Component {
+            id: monthDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: month
+            }
+        }
+
+
+        PathView{
+            id: monthView
+
+            onCurrentIndexChanged: {
+                dtMonth = currentIndex + 1;
+                dayNumSetMonth();
+            }
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: monthModel
+            delegate: monthDelegate
+            currentIndex: defaultMONTHIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setMonthRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setMonthRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // Month END
+
+    Rectangle {
+        id: setYearRect
+        width: parent.width - (setMonthRect.x + setMonthRect.width)
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: setMonthRect.x + setMonthRect.width
+        y: 0
+        color: bgColor
+
+        Component.onCompleted: {
+            yearNumSet();
+        }
+
+        ListModel {
+            id: yearModel
+        }
+
+        Component {
+            id: yearDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: year
+            }
+        }
+
+
+        PathView{
+            id: yearView
+
+            onCurrentIndexChanged: {
+                dtYear = currentIndex + 2010;
+                dayNumSetMonth();
+            }
+
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: yearModel
+            delegate: yearDelegate
+            currentIndex: defaultYEARIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setYearRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setYearRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // YEAR END
+
+    Rectangle {
+        id: setHourRect
+        width: (parent.width / 2) / 3
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: 0
+        y: (parent.height / 3)
+        color: bgColor
+
+        Component.onCompleted: {
+            hourNumSet();
+        }
+
+        ListModel {
+            id: hourModel
+        }
+
+        Component {
+            id: hourDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: hour
+            }
+        }
+
+        PathView{
+            id: hourView
+
+            onCurrentIndexChanged: {
+                dtHour = currentIndex;
+            }
+
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: hourModel
+            delegate: hourDelegate
+            currentIndex: defaultHOURIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setHourRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setHourRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // HOUR END
+
+    Rectangle {
+        id: setMinRect
+        width: (parent.width / 2) / 3
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: (parent.width / 2) / 3
+        y: parent.height / 3
+        color: bgColor
+
+        Component.onCompleted: {
+            minNumSet();
+        }
+
+        ListModel {
+            id: minModel
+        }
+
+        Component {
+            id: minDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: min
+            }
+        }
+
+
+        PathView{
+            id: minView
+
+            onCurrentIndexChanged: {
+                dtMin = currentIndex;
+            }
+
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: minModel
+            delegate: minDelegate
+            currentIndex: defaultMINIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setMinRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setMinRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // MIN END
+
+    Rectangle {
+        id: setSecRect
+        width: (parent.width / 2) / 3
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: 2 * ((parent.width / 2) / 3)
+        y: parent.height / 3
+        color: bgColor
+
+        Component.onCompleted: {
+            secNumSet();
+        }
+
+        ListModel {
+            id: secModel
+        }
+
+        Component {
+            id: secDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: sec
+            }
+        }
+
+        PathView{
+            id: secView
+
+            onCurrentIndexChanged: {
+                dtSec = currentIndex;
+            }
+
+            anchors.fill: parent
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: secModel
+            delegate: secDelegate
+            currentIndex: defaultSECIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: setSecRect.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: setSecRect.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // END SEC
+
+    Rectangle {
+        id: setTzRect
+        width: parent.width
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: 0
+        y: 2 * (parent.height / 3)
+        color: bgColor
+
+        Component.onCompleted: {
+            tzNamesSet();
+        }
+
+        ListModel {
+            id: tzModel
+        }
+
+        Component {
+            id: tzDelegate
+
+            Text {
+                anchors.horizontalCenter: parent.horizontalCenter
+                scale: PathView.pathScale
+                opacity: scale
+                font.pixelSize: dateListTextFontSize
+
+                onScaleChanged: {
+                    color = scale === 1.0 ? selCol:cGreenLetterColor;
+                }
+                text: tz
+            }
+        }
+
+        PathView{
+            id: tzView
+            anchors.fill: parent
+            onCurrentIndexChanged: {
+                dtTZ = tzModel.get(currentIndex).tz;
+            }
+
+            preferredHighlightBegin: 0.5
+            preferredHighlightEnd: 0.5
+            highlightRangeMode: PathView.StrictlyEnforceRange
+            highlight: Component {
+                Rectangle{
+                    visible: PathView.onPath
+                    anchors.centerIn: parent
+                    height: mHighlightBarHeight
+                    width: parent.width
+                    color: "transparent"
+                    border.color: "transparent"
+                    Rectangle{
+                        anchors.top: parent.top
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                    Rectangle{
+                        anchors.bottom: parent.bottom
+                        width: parent.width
+                        height: mHighlightBarThickness
+                        color: cGreenLetterColor
+                    }
+                }
+            }
+
+            model: tzModel
+            delegate: tzDelegate
+            currentIndex: defaultTZIDX
+            pathItemCount: numITEMS
+            path:Path{
+                startX: 0
+                startY: 0
+                PathAttribute { name: "pathScale"; value: pathScale }
+                PathLine { x:0; y: tzView.height/2}
+                PathAttribute { name: "pathScale"; value: 1.0 }
+                PathLine { x: 0; y: tzView.height }
+                PathAttribute { name: "pathScale"; value: pathScale }
+            }
+        }
+    } // END TZ
+
+    //==================================
+
+    ApplicationLaunch {
+        id: setTimeZone
+        appName: "sudo " + Globals.baseDir +  "/Scripts/SetTimeDateZone.sh " + dtTZ + " " + dtYear + " " + dtMonth + " " + dtDay + " " + dtHour + " " + dtMin + " " + dtSec + " " + sysinfo.currentCpuArchitecture;
+        onAppFinished: {
+            transLoad.reloadTimeZone();
+        }
+    }
+
+    Rectangle {
+        id: setDateTimeButtArea
+        width: parent.width / 2
+        height: (parent.height / 3) - mHighlightBarThickness
+        x: 3 * ((parent.width / 2) / 3)
+        y: parent.height / 3
+        color: bgColor
+
+        ButtHMI {
+            id: datetimeOK
+            buttY: (parent.height / 2) - (buttHeight / 2)
+            buttX: parent.width / 3 // (parent.width / 2) - (buttWidth / 2)
+            buttWidth: 35
+            buttHeight: buttWidth
+            color: Globals.customer_color_base
+            text: "\uf046" //check-sqare
+            onButtPressed: {
+                // Take selected settings and save to SystemPalette
+                console.log(dtYear+"."+dtMonth+"."+dtDay+" "+dtHour+":"+dtMin+":"+dtSec);
+                console.log(dtTZ);
+                setTimeZone.launchScript();
+            }
+        }
+
+        ButtHMI {
+            id: datetimeREDO
+            buttY: (parent.height / 2) - (buttHeight / 2)
+            buttX: parent.width - (parent.width / 3) // (parent.width / 2) - (buttWidth / 2)
+            buttWidth: 35
+            buttHeight: buttWidth
+            color: Globals.customer_color_base
+            text: "\uf01e" // redo
+            onButtPressed: {
+                datetimeSet();
+            }
+        }
+    }
+
+}

+ 132 - 0
HMI_MainMenu.qml

@@ -0,0 +1,132 @@
+import QtQuick 2.5
+import QtWebEngine 1.2
+import QtQuick.Window 2.1
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import QtQuick.Layouts 1.1
+
+import "qrc:/Globals"
+import "Menu" as Menu
+
+Item {
+    Menu.MenuHeader {}
+    Menu.MenuStatus {}
+
+    Timer {
+        interval: 1
+        running: Globals.startTO.length > 0 ? true:false
+        onTriggered: {
+            if (Globals.startTO.length > 0) {
+                stackView.push(Qt.resolvedUrl(Globals.startTO));
+                Globals.startTO = "";
+            }
+        }
+    }
+
+    Rectangle {
+        id: rectangle
+        x: 0
+        y: parent.height / 10.0
+        width: parent.width
+        height: parent.height - 2 * y
+
+        GridLayout {
+            anchors.fill: parent
+            columnSpacing: 0
+            rowSpacing: 0
+
+            rows: 2
+            columns: 4
+
+            Menu.MenuButton {
+                Layout.row: 0
+                Layout.column: 0
+                Layout.fillHeight: true
+                Layout.fillWidth: true
+                //: ID:main_menu_hmi_settings Main Menu HMI Settings text
+                menuText:  qsTrId("main_menu_hmi_settings") + transLoad.emptyString //qsTr("HMI - Einstellungen") + transLoad.emptyString
+                menuQML: "/HMI_SettingsContainer.qml"
+                menuImage:  "/images/HmiSettings.svg"
+
+                function enaHmiMenu () {
+                    if(Globals.actUserRole === "admin") {
+                        buttGreyed = 0.0
+                    } else {
+                        buttGreyed = -1.0
+                    }
+                }
+
+                buttGreyed: {enaHmiMenu();}
+                onVisibleChanged:  {enaHmiMenu();}
+
+
+                onItemClicked: {
+                    if (buttGreyed == 0.0) {
+                        stackView.push(Qt.resolvedUrl(menuQML));
+                    }
+                }
+            }
+
+            Menu.MenuButton {
+                Layout.row: 0
+                Layout.column: 1
+                Layout.fillHeight: true
+                Layout.fillWidth: true
+
+                menuImage:  "/images/CamSettings.svg"
+                //: ID:main_menu_cam_settings Main Menu CAM Settings text
+                menuText:  qsTrId("main_menu_cam_settings") + transLoad.emptyString //qsTr("Einstellungen") +transLoad.emptyString
+                menuQML: "/CAM_SettingsContainer.qml"
+
+                function enaCamMenu () {
+                    if(Globals.actUserRole != "oper") {
+                        buttGreyed = 0.0
+                    } else {
+                        buttGreyed = -1.0
+                    }
+                }
+
+                buttGreyed: {enaCamMenu();}
+                onVisibleChanged:  {enaCamMenu();}
+
+                onItemClicked: {
+                    if (buttGreyed == 0.0) {
+                        stackView.push(Qt.resolvedUrl(menuQML));
+                    }
+                }
+            }
+
+            Menu.MenuButton {
+                Layout.row: 0
+                Layout.column: 2
+                Layout.fillHeight: true
+                Layout.fillWidth: true
+
+                menuImage:  "/images/AdminSettings.svg"
+                //: ID:main_menu_admin_settings Main Menu Administrator Settings text
+                menuText: qsTrId("main_menu_admin_settings") + transLoad.emptyString //qsTr("Administrator Einstellungen") + transLoad.emptyString
+                menuQML: "/ADMIN_SettingsContainer.qml"
+
+                function enaAdminMenu () {
+                    if(Globals.actUserRole === "admin") {
+                        buttGreyed = 0.0
+                    } else {
+                        buttGreyed = -1.0
+                    }
+                }
+
+                buttGreyed: {enaAdminMenu();}
+                onVisibleChanged:  {enaAdminMenu();}
+
+                onItemClicked: {
+                    if (buttGreyed == 0.0) {
+                        stackView.push(Qt.resolvedUrl(menuQML));
+                    }
+                }
+            }
+
+        }
+    }
+}

+ 446 - 0
HMI_Settings.qml

@@ -0,0 +1,446 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.4
+
+import Qt.labs.controls 1.0
+import QtQuick.Layouts 1.1
+import QtQml 2.2
+import ApplicationLauncher 1.0
+import "qrc:/Globals"
+
+Rectangle {
+    id: root
+    width: parent.width
+    height: parent.height
+    color: "white"
+    property int ipsettingsXpos: 200
+
+    Flickable {
+        id: flickable
+        anchors.fill: parent
+        contentWidth: content.width
+        contentHeight: content.height
+        interactive: contentHeight > height
+        flickableDirection: Flickable.VerticalFlick
+
+        Item {
+            id: content
+            x: 0
+            y: 0
+            width: flickable.width
+            //============================================================================
+            Component.onCompleted: {
+                setEth0.doGetInterface();
+                hmiIP.ipFocus = 0;
+            }
+
+//            Rectangle{
+//                x: 100
+//                y: 50
+//                width:200
+//                height: 50
+//                color: "lightgray"
+
+//                Switch {
+//                    id:dhcpSWITCH
+//                    checked: false
+
+//                    text: (checked)?"DHCP":"STATIC"
+//                    font.pixelSize: 20
+
+//                    onCheckedChanged: {
+//                        hmiIP.ipvisible = !checked;
+//                        hmiNETMASK.ipvisible = !checked;
+//                        hmiGATEWAY.ipvisible = !checked;
+//                        hmiDNS.ipvisible = !checked;
+
+//                    }
+//                }
+//            }
+
+            Label {
+                id: lab1
+                x: hmiIP.posX - lab1.implicitWidth
+                y: hmiIP.posY
+//                visible: !dhcpSWITCH.checked
+                font.pixelSize: 20
+                //: ID:_sys_ipaddress Ip Address settings
+                text: qsTrId("_sys_ipaddress") + " : " + transLoad.emptyString //qsTr("IP-Adresse : ") + transLoad.emptyString
+            }
+
+            IpAddressInput {
+                id: hmiIP
+                posX: ipsettingsXpos
+                posY: 100
+                ipwidth: 200
+                ipcolor: "black"
+                ipFontSize: 20
+
+                onIpAddressChanged: {
+                    setEth0.address = ipAddress;
+                }
+
+                onKeyDownPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiNETMASK.ipFocus = foc;
+                }
+                onKeyUpPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiDNS.ipFocus = foc;
+                }
+            }
+
+            Label {
+                id: lab2
+                x: hmiNETMASK.posX - lab2.implicitWidth
+                y: hmiNETMASK.posY
+//                visible: !dhcpSWITCH.checked
+                font.pixelSize: 20
+                //: ID:_sys_netmask Ip Address settings Netmask
+                text: qsTrId("_sys_netmask") + " : " + transLoad.emptyString //qsTr("Netmask : ") + transLoad.emptyString
+            }
+
+            IpAddressInput {
+                id: hmiNETMASK
+                posX: ipsettingsXpos
+                posY: 150
+                ipwidth: 200
+                ipcolor: "black"
+                ipFontSize: 20
+
+                onIpAddressChanged: {
+                    setEth0.netmask = ipAddress;
+                }
+                onKeyDownPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiGATEWAY.ipFocus = foc;
+                }
+                onKeyUpPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiIP.ipFocus = foc;
+                }
+            }
+
+            Label {
+                id: lab3
+                x: hmiGATEWAY.posX - lab3.implicitWidth
+                y: hmiGATEWAY.posY
+//                visible: !dhcpSWITCH.checked
+                font.pixelSize: 20
+                //: ID:_sys_defaultrouter Ip Address settings Defaultrouter
+                text: qsTrId("_sys_defaultrouter") + " : " + transLoad.emptyString //qsTr("Def. Router : ") + transLoad.emptyString
+            }
+
+            IpAddressInput {
+                id: hmiGATEWAY
+                posX: ipsettingsXpos
+                posY: 200
+                ipwidth: 200
+                ipcolor: "black"
+                ipFontSize: 20
+
+                onIpAddressChanged: {
+                    setEth0.gateway = ipAddress;
+                }
+                onKeyDownPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiDNS.ipFocus = foc;
+                }
+                onKeyUpPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiNETMASK.ipFocus = foc;
+                }
+            }
+
+            Label {
+                id: lab4
+                x: hmiDNS.posX - lab4.implicitWidth
+                y: hmiDNS.posY
+//                visible: !dhcpSWITCH.checked
+                font.pixelSize: 20
+                //: ID:_sys_dns1 Ip Address settings DNS Server 1
+                text: qsTrId("_sys_dns1") + " : " + transLoad.emptyString //qsTr("DNS Server : ") + transLoad.emptyString
+            }
+
+            IpAddressInput {
+                id: hmiDNS
+                posX: ipsettingsXpos
+                posY: 250
+                ipwidth: 200
+                ipcolor: "black"
+                ipFontSize: 20
+
+                onIpAddressChanged: {
+                    setEth0.nameserver = ipAddress;
+                }
+                onKeyDownPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiIP.ipFocus = foc;
+                }
+                onKeyUpPressed: {
+                    var foc = ipFocus;
+                    ipFocus = 0;
+                    hmiGATEWAY.ipFocus = foc;
+                }
+            }
+
+            ButtHMI {
+                buttX: 50
+                buttY: 290
+                buttWidth:35
+                buttHeight: buttWidth
+                text: "\uf0c7" //floppy-sign
+                color: Globals.customer_color_base
+                onButtPressed: {
+                    hmiIP.makeIpAddress();
+                    hmiNETMASK.makeIpAddress();
+                    hmiGATEWAY.makeIpAddress();
+                    hmiDNS.makeIpAddress();
+                    setEth0.doSetInterface();
+                }
+            }
+
+            ButtHMI {
+                buttX: 150
+                buttY: 290
+                buttWidth: 35
+                buttHeight: buttWidth
+                color: Globals.customer_color_base
+                text: "\uf046" //check-sqare
+                onButtPressed: {
+                    hmiIP.makeIpAddress();
+                    hmiNETMASK.makeIpAddress();
+                    hmiGATEWAY.makeIpAddress();
+                    hmiDNS.makeIpAddress();
+                    setEth0.doRestartNetwork();
+                }
+            }
+
+            ButtHMI {
+                id: buttUPDATE
+                buttX: 250
+                buttY: 290
+                buttWidth: 35
+                buttHeight: buttWidth
+                visible: false
+                color: Globals.customer_color_base
+                text: "\uf0c5" //files -- für Update
+                onButtPressed: {
+                    console.debug("Update Button Pressed");
+                    updateHMI.popupVISIBLE = true;
+                }
+            }
+
+            HMI_UpdatePopup {
+                id: updateHMI
+                popupVISIBLE: false
+                //: ID:_sys_update_hmi Headline HMI Updatewindow
+                popupTEXT: qsTrId("_sys_update_hmi") + transLoad.emptyString
+            }
+
+            SetNetworkInterface {
+                id: setEth0
+                mode: "static"
+                ifacename: "eth0"
+                address: "192.168.0.125"
+                netmask: "255.255.0.0"
+                nameserver: "192.168.0.1"
+                gateway: "192.168.0.1"
+                infile: (sysinfo.currentCpuArchitecture == "x86_64") ?"/home/ru/IFACE/interfaces":"/etc/network/interfaces"
+                outfile: (sysinfo.currentCpuArchitecture == "x86_64") ?"/home/ru/IFACE/interfaces":"/etc/network/interfaces"
+
+                onAddressChanged: {
+                    hmiIP.ipAddress = address;
+                }
+                onNetmaskChanged:  {
+                    hmiNETMASK.ipAddress = netmask;
+                }
+                onGatewayChanged: {
+                    hmiGATEWAY.ipAddress = gateway;
+                }
+                onNameserverChanged: {
+                    hmiDNS.ipAddress = nameserver;
+                }
+
+                onCmdDone: {
+                    hmiIP.ipAddress = setEth0.address;
+                    hmiNETMASK.ipAddress = setEth0.netmask;
+                    hmiGATEWAY.ipAddress = setEth0.gateway;
+                    hmiDNS.ipAddress = setEth0.nameserver;
+
+                }
+            }
+            //============================================================================
+            //Language settings
+            Rectangle {
+                id: langSelect
+                width: (height / 5) * 1.5
+                height: root.height
+                x: root.width / 2
+                y:0
+                color: "lightgray"
+
+                function dispLang(){
+                    // setze aktive Sprache
+                    idACTLANGIMG.source = "qrc:/Languages/FLAG-" + transLoad.getActiveLanguage() + ".svg";
+                    var languages = transLoad.getLanguages();
+
+                    langData.clear();
+                    languages.forEach(function(entry) {
+                        if (entry.length > 0) {
+                            console.debug(JSON.stringify(entry));
+
+                            langData.append( {flag: "qrc:/Languages/FLAG-" + entry + ".svg",
+                                                name: entry
+                                            } );
+                        }
+                    });
+                }
+
+                Image {
+                    x: 0
+                    y: 0
+                    id: idACTLANGIMG
+                    fillMode: Image.PreserveAspectFit
+                    sourceSize.height: parent.height / 5
+                    sourceSize.width: parent.height / 5
+                }
+
+                ListModel {
+                    id: langData
+                }
+
+                Item {
+                    id: langListArea
+                    width: parent.width
+                    height: parent.height - idACTLANGIMG.sourceSize.height
+                    y: idACTLANGIMG.sourceSize.height
+
+                    Component {
+                        id: langDataDelegate
+                        Item {
+                            x:langListArea.width * 0.1
+                            width: height * 1.5
+                            height: langListArea.height / 5
+
+                            Rectangle {
+                                anchors.fill: parent
+                                radius: 4
+                                gradient: Gradient {
+                                    GradientStop { position:0 ; color: (transLoad.getActiveLanguage() === name) ? Globals.customer_color_base : "darkgray" }
+                                    GradientStop { position:1 ; color: (transLoad.getActiveLanguage() === name) ? Globals.customer_color_base : "black" }
+                                }
+                            }
+
+                            Image {
+                                id:langFLAGIMG
+                                anchors.centerIn: parent
+
+                                fillMode: Image.PreserveAspectFit
+                                sourceSize.height: parent.height - parent.height * 0.25
+                                sourceSize.width: parent.width
+
+                                source: flag
+                                smooth: true
+                            }
+
+                            MouseArea {
+                                anchors.fill: parent
+                                onClicked: {
+                                    settings.setValue("HMI/Language", name); // unbedingt vor dispLang()
+                                    transLoad.selectLanguage(name);
+                                    langSelect.dispLang();
+                                    dateTimeSettings.datetimeSet(); // aktuelle Zeit Setzen
+                                }
+                            }
+                        }
+                    }
+
+                    ListView {
+                        id: langLISTVIEW
+                        anchors.fill: parent
+                        model: langData
+                        delegate: langDataDelegate
+                        clip: true
+                        focus: true
+                    }
+                }
+
+                Component.onCompleted: {
+                    dispLang();
+                    var count = langData.rowCount();
+                    // set active item for Joblist, scroll to active job
+                    for (var i = 0, len = langData.count; i < len; i++) {
+                        var actlang = langData.get(i).name;
+                        if ( actlang === transLoad.getActiveLanguage() )
+                            langLISTVIEW.currentIndex = i;
+                    }
+                }
+            }
+            //Languagesettings end
+
+            //Test Month/Day
+            Rectangle {
+                width: root.width / 2  - langSelect.width //(root.height / 5) * 1.5
+                height: root.height
+                x: root.width / 2  + langSelect.width
+                y: 0
+                //color: Globals.customer_color_base //"blue"
+
+                HMI_DateTimeSettings {
+                    id: dateTimeSettings
+                    anchors.fill: parent
+                }
+            }
+            //Test Month/Day end
+
+            // Update tarFiles von USB
+            Item {
+                id: updateItem
+
+                ApplicationLaunch {
+                    id: appUPDATE
+                    appName: "sudo " + Globals.baseDir + "/Scripts/FindUpdate.sh "
+                    arguments: ""
+                    onAppFinished: {
+                        var lines = stdOUT.split(/[\r\n]+/g);
+                        var idx = 0;
+                        var files = [];
+
+                        lines.forEach(function(entry) {
+                            if (entry.length > 0) {
+                                if(!updateHMI.popupVISIBLE) { // Datenstruktur nur wenn nicht sichtbar aufbauen
+                                    files.push(entry);
+                                }
+                                ++idx;
+                            }
+                        });
+                        updateTIMER.interval = 5000;
+                        updateTIMER.restart();
+                        buttUPDATE.visible = (idx > 0)?true:false;
+                        if ((updateHMI.popupVISIBLE) && (idx == 0)) updateHMI.popupVISIBLE = false;
+                        if (!updateHMI.popupVISIBLE) updateHMI.listData = files;
+                    }
+                }
+
+                Timer {
+                    id: updateTIMER
+                    interval: 500
+                    running: true
+                    repeat: false
+                    onTriggered: {
+                        appUPDATE.launchScript();
+                    }
+                }
+            }
+            // Update tarFiles von USB
+        }
+    }
+}

+ 73 - 0
HMI_SettingsContainer.qml

@@ -0,0 +1,73 @@
+import QtQuick 2.0
+import QtQuick.FreeVirtualKeyboard 1.0
+import QtQuick.Window 2.0
+import "qrc:/Globals"
+import "Menu" as Menu
+
+Rectangle {
+    id: root
+    implicitWidth: mainQml.implicitWidth
+    implicitHeight: mainQml.implicitHeight
+
+    Menu.MenuHeader {
+    //: ID:hmi_settings_headline HMI-Settings headline
+    headerText: qsTrId("hmi_settings_headline") + transLoad.emptyString //qsTr("HMI EInst.") + transLoad.emptyString
+    }
+    Menu.MenuStatus {}
+
+    Item {
+        clip: true
+        id: appContainer
+        //        width: parent.width
+        //        height: parent.height
+        x: 0
+        y: parent.height / 10.0
+        width: parent.width
+        height: parent.height - 2 * y
+        anchors.centerIn: parent
+
+        // ***** Body *****
+
+        HMI_Settings {
+            id: mainQml
+            anchors.left: parent.left
+            anchors.top: parent.top
+            anchors.right: parent.right
+            anchors.bottom: inputPanel.top
+
+            Component.onDestruction: {
+                Qt.inputMethod.hide();
+                console.debug("FENSTER ZU !!!");
+            }
+
+        }
+
+        InputPanel {
+            id: inputPanel
+            z: 99
+            y: appContainer.height
+            anchors.left: parent.left
+            anchors.right: parent.right
+            states: State {
+                name: "visible"
+                when: Qt.inputMethod.visible
+                PropertyChanges {
+                    target: inputPanel
+                    y: appContainer.height - inputPanel.height
+                }
+            }
+            transitions: Transition {
+                from: ""
+                to: "visible"
+                reversible: true
+                ParallelAnimation {
+                    NumberAnimation {
+                        properties: "y"
+                        duration: 0//150
+                        easing.type: Easing.InOutQuad
+                    }
+                }
+            }
+        }
+    }
+}

+ 188 - 0
HMI_UpdatePopup.qml

@@ -0,0 +1,188 @@
+import QtQuick 2.5
+import Qt.labs.controls 1.0
+import QtQuick.Layouts 1.1
+import QtQuick.Controls.Styles 1.4
+import ApplicationLauncher 1.0
+import "qrc:/Globals"
+
+Item {
+    id: updatePOPUP
+    property bool popupVISIBLE: true
+    property string popupTEXT: ""
+    property var listData
+    property int clickedINDEX: -1
+    property string selectedFileName: ""
+
+    x: 20
+    y: 0
+
+    width: 500
+    height: 300
+    visible: popupVISIBLE
+
+    function fillData() {
+        popupData.clear();
+
+        var idx = 0;
+        console.log(JSON.stringify(listData));
+        console.log(JSON.stringify(listData.length));
+
+        for ( var i = 0; i < listData.length; i++) {
+            var entry = listData[i];
+            var filename = entry.split("/");
+            console.debug(idx + ":: " + "++++>:" + JSON.stringify(entry) + " ++ " + JSON.stringify(filename[filename.length - 1]) + " cnt:: " + JSON.stringify(filename.length));
+            popupData.append( {index: i,
+                                 name: filename[filename.length - 1].split(".")[0],
+                                 filename: entry
+                             } );
+        }
+    }
+
+    onPopupVISIBLEChanged: {
+        if (popupVISIBLE) {
+            z = 99;
+            fillData();
+        } else {
+            z = 0;
+            clickedINDEX = -1;
+            selectedFileName = "";
+            //            popupData.clear();
+        }
+    }
+
+    onListDataChanged: {
+        fillData();
+    }
+
+    Component.onCompleted: {
+       // fillData();
+    }
+
+    Rectangle {
+        id: popupWIN
+        anchors.fill: parent
+        color: "lightgray"
+        border.width: 3
+        border.color: Globals.customer_color_base
+        visible: popupVISIBLE
+
+        Label {
+            id: popupLABEL1
+            x: 10
+            y: 15
+            font.bold: true
+            font.pixelSize: 16
+            text: popupTEXT
+            clip: true
+        }
+
+        ListModel {
+            id: popupData
+        }
+
+        Item {
+            id: popupListArea
+            y: 2 * popupLABEL1.height
+            width: parent.width
+            height: parent.height - 5 * popupLABEL1.height
+            Component {
+                id: popupDelegate
+                Item {
+                    x:popupListArea.width * 0.1
+                    width: popupListArea.width * 0.8
+                    height: popupListArea.height / 5
+                    Rectangle {
+                        anchors.fill: parent
+                        radius: 4
+                        gradient: Gradient {
+                            GradientStop { position:0 ; color: (clickedINDEX == index) ? Globals.customer_color_base : "darkgray" }
+                            GradientStop { position:1 ; color: (clickedINDEX == index) ? Globals.customer_color_base : "black" }
+                        }
+                    }
+
+                    Text {
+                        anchors.centerIn: parent
+                        font.pixelSize: 14
+                        color: "white"
+                        anchors.left: parent.Left
+                        text: index + " :: " + name
+                    }
+
+                    MouseArea {
+                        anchors.fill: parent
+                        onClicked: {
+                            clickedINDEX = index;
+                            selectedFileName = filename;
+                        }
+                    }
+                }
+            }
+
+            ListView {
+                id: popupLISTVIEW
+                anchors.fill: parent
+                model: popupData
+                delegate: popupDelegate
+                clip: true
+                focus: true
+            }
+        }
+
+        CustomBusyIndicator{
+            property alias running: updateBUSY.visible
+
+            id:updateBUSY
+            //anchors.centerIn: parent
+            x: (popupWIN.width - popupWIN.height) / 2
+            width: popupWIN.height
+            height: popupWIN.height
+            bBgColor: Globals.customer_color_base
+            bLength:50
+            opacity: 0.75
+            visible: false
+        }
+
+        ApplicationLaunch {
+            id: appDoUPDATE
+            appName: ""
+            arguments: ""
+            onAppFinished: {
+                console.debug(stdOUT);
+                updateBUSY.running = false;
+            }
+        }
+
+        ButtHMI {
+            buttX: 10
+            buttY: parent.height - 40
+            buttWidth: 30
+            buttHeight: buttWidth
+            color: "green"
+            text: "\uf058" //ok-sign
+            visible: clickedINDEX >= 0 ? true:false
+            onButtPressed: {
+                //popupVISIBLE = false;
+                var appname = "/opt/di-soric/Scripts/UpdateAndReboot.sh ";
+                appname += selectedFileName + " ";
+                appname += (sysinfo.currentCpuArchitecture == "x86_64")?"/home/ru/IFACE/update":"/";
+                appname += " " + sysinfo.currentCpuArchitecture;
+                appDoUPDATE.appName = appname;
+                updateBUSY.running = true;
+                appDoUPDATE.launchScript();
+            }
+        }
+
+        ButtHMI {
+            buttX: parent.width - buttWidth - 10
+            buttY: parent.height - 40
+            buttWidth: 30
+            buttHeight: buttWidth
+            color: "red"
+            text: "\uf057" //remove-sign
+            onButtPressed:  {
+                if (updateBUSY.running == false) popupVISIBLE = false;
+                //updateBUSY.running = updateBUSY.running?false:true;
+            }
+        }
+    }
+}

+ 348 - 0
IpAddressInput.qml

@@ -0,0 +1,348 @@
+import QtQuick 2.0
+
+Item {
+    id: ipAddresInput
+    property bool ipvisible: true
+    property double space: 4
+    property double ipwidth: 200
+    property double posX: 0
+    property double posY: 0
+    property double partwidth: (ipwidth / 4) - (3 * space)
+    property color focuscolor: "green"
+    property color ipcolor: "black"
+    property color invalidcolor: "red"
+    property color ipBackColor: "silver"
+    property string ipAddress: ""
+    property double ipFontSize: 14
+    property bool isValid: false
+    property int ipRadius: 0
+    property int ipFocus: 0
+    signal keyReturnPressed
+    signal keyUpPressed
+    signal keyDownPressed
+
+    function makeIpAddress() {
+        ipAddress = parseInt(textInput1.text, 10) + "." + parseInt(textInput2.text, 10) + "." +
+                parseInt(textInput3.text, 10) + "." + parseInt(textInput4.text, 10);
+
+        if((textInput1.text >= 0) && (textInput1.text <= 255))
+            textInput1.color = (!textInput1.focus)?ipcolor:focuscolor;
+        else textInput1.color = invalidcolor;
+
+        if((textInput2.text >= 0) && (textInput2.text <= 255))
+            textInput2.color = (!textInput2.focus)?ipcolor:focuscolor;
+        else textInput2.color = invalidcolor;
+
+        if((textInput3.text >= 0) && (textInput3.text <= 255))
+            textInput3.color = (!textInput3.focus)?ipcolor:focuscolor;
+        else textInput3.color = invalidcolor;
+
+        if((textInput4.text >= 0) && (textInput4.text <= 255))
+            textInput4.color = (!textInput4.focus)?ipcolor:focuscolor;
+        else textInput4.color = invalidcolor;
+    }
+
+    function fillIpFields() {
+
+        function padDigits(number, digits) {
+            return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
+        };
+        var iplist = ipAddress.split(".");
+        var i;
+        for ( i = 0; i < iplist.length; i++) iplist[i] = padDigits(iplist[i], 3);
+
+        if(iplist.length >= 1) textInput1.text = iplist[0]; else textInput1.text ="000";
+        if(iplist.length >= 2) textInput2.text = iplist[1]; else textInput2.text ="000";
+        if(iplist.length >= 3) textInput3.text = iplist[2]; else textInput3.text ="000";
+        if(iplist.length >= 4) textInput4.text = iplist[3]; else textInput4.text ="000";
+    }
+
+    onIpAddressChanged: {
+        fillIpFields();
+    }
+
+    Component.onCompleted: {
+        fillIpFields();
+    }
+
+    onIpFocusChanged: {
+        textInput1.focus =  (ipFocus == 1)?true:false;
+        textInput2.focus =  (ipFocus == 2)?true:false;
+        textInput3.focus =  (ipFocus == 3)?true:false;
+        textInput4.focus =  (ipFocus == 4)?true:false;
+    }
+
+    Rectangle {
+        x: posX
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: textInput1.width
+        height: textInput1.height
+        radius: ipRadius
+        color: ipBackColor
+    }
+
+    TextInput {
+        id: textInput1
+        x: posX
+        y: posY
+        width: partwidth
+        font.pixelSize: ipFontSize
+        visible: ipAddresInput.ipvisible
+        KeyNavigation.tab: textInput2
+        focus: (ipAddresInput.ipFocus == 1)?true:false
+
+        color: ipcolor
+        validator: IntValidator {bottom:0; top:999}
+        inputMask: "000;"
+        inputMethodHints: Qt.ImhDigitsOnly
+        maximumLength: 3
+        Keys.onReleased:  {
+            if(cursorPosition == maximumLength){
+                textInput2.focus = true;
+            }
+        }
+        Keys.onPressed: {
+            if((event.key == Qt.Key_Left) && (cursorPosition == 0)){
+                textInput4.focus = true; textInput4.cursorPosition = 2;
+            }
+            if((event.key == Qt.Key_Right) && (cursorPosition == maximumLength)){
+                textInput2.focus = true;
+            }
+            if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+            {
+                makeIpAddress();
+                keyReturnPressed();
+            }
+            if(event.key == Qt.Key_Up)
+            {
+                makeIpAddress();
+                keyUpPressed();
+            }
+            if(event.key == Qt.Key_Down)
+            {
+                makeIpAddress();
+                keyDownPressed();
+            }
+        }
+
+        onFocusChanged: {
+            color = (focus) ? focuscolor : ipcolor;
+            makeIpAddress();
+            cursorPosition = 0;
+            if(focus) ipFocus = 1;
+        }
+    }
+
+    Text{
+        id: ipDot1
+        font.pixelSize: ipFontSize
+        x: posX + textInput1.width
+        y: textInput1.y
+        visible: ipAddresInput.ipvisible
+        color: ipcolor
+        text:"."
+    }
+
+    Rectangle {
+        x: posX + space + partwidth + ipDot1.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: textInput2.width
+        height: textInput2.height
+        radius: ipRadius
+        color: ipBackColor
+    }
+
+    TextInput {
+        id: textInput2
+        x: posX + space + partwidth + ipDot1.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: partwidth
+        font.pixelSize: ipFontSize
+        KeyNavigation.tab: textInput3
+        focus: (ipAddresInput.ipFocus == 2)?true:false
+
+        color: ipcolor
+        validator: IntValidator {bottom:0; top:999}
+        inputMask: "000;"
+        inputMethodHints: Qt.ImhDigitsOnly
+        maximumLength: 3
+        Keys.onReleased:  {
+            if(cursorPosition == maximumLength){
+                textInput3.focus = true;
+            }
+        }
+        Keys.onPressed: {
+            if((event.key == Qt.Key_Left) && (cursorPosition == 0)){
+                textInput1.focus = true; textInput1.cursorPosition = 2;
+            }
+            if((event.key == Qt.Key_Right) && (cursorPosition == maximumLength)){
+                textInput3.focus = true;
+            }
+            if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+            {
+                makeIpAddress();
+                keyReturnPressed();
+            }
+            if(event.key == Qt.Key_Up)
+            {
+                makeIpAddress();
+                keyUpPressed();
+            }
+            if(event.key == Qt.Key_Down)
+            {
+                makeIpAddress();
+                keyDownPressed();
+            }
+        }
+        onFocusChanged: {
+            color = (focus) ? focuscolor : ipcolor;
+            makeIpAddress();
+            cursorPosition = 0;
+            if(focus) ipFocus = 2;
+        }
+    }
+    Text{
+        id: ipDot2
+        font.pixelSize: ipFontSize
+        x: textInput2.x + textInput2.width
+        y: textInput1.y
+        visible: ipAddresInput.ipvisible
+        color: ipcolor
+        text:"."
+    }
+
+    Rectangle {
+        x: posX + 2*space + 2*partwidth +ipDot2.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: textInput3.width
+        height: textInput3.height
+        radius: ipRadius
+        color: ipBackColor
+    }
+
+    TextInput {
+        id: textInput3
+        x: posX + 2*space + 2*partwidth +ipDot2.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: partwidth
+        font.pixelSize: ipFontSize
+        KeyNavigation.tab: textInput4
+        focus: (ipAddresInput.ipFocus == 3)?true:false
+
+        color: ipcolor
+        validator: IntValidator {bottom:0; top:999}
+        inputMask: "000;"
+        inputMethodHints: Qt.ImhDigitsOnly
+        maximumLength: 3
+        Keys.onReleased:  {
+            if(cursorPosition == maximumLength){
+                textInput4.focus = true;
+            }
+        }
+        Keys.onPressed: {
+            if((event.key == Qt.Key_Left) && (cursorPosition == 0)){
+                textInput2.focus = true; textInput2.cursorPosition = 2;
+            }
+            if((event.key == Qt.Key_Right) && (cursorPosition == maximumLength)){
+                textInput4.focus = true;
+            }
+            if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+            {
+                makeIpAddress();
+                keyReturnPressed();
+            }
+            if(event.key == Qt.Key_Up)
+            {
+                makeIpAddress();
+                keyUpPressed();
+            }
+            if(event.key == Qt.Key_Down)
+            {
+                makeIpAddress();
+                keyDownPressed();
+            }
+        }
+        onFocusChanged: {
+            color = (focus) ? focuscolor : ipcolor;
+            makeIpAddress();
+            cursorPosition = 0;
+            if(focus) ipFocus = 3;
+
+        }
+    }
+    Text{
+        id: ipDot3
+        font.pixelSize: ipFontSize
+        x: textInput3.x + textInput3.width
+        y: textInput1.y
+        visible: ipAddresInput.ipvisible
+        color: ipcolor
+        text:"."
+    }
+
+    Rectangle {
+        x: posX + 3*space + 3*partwidth + ipDot3.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: textInput4.width
+        height: textInput4.height
+        radius: ipRadius
+        color: ipBackColor
+    }
+
+    TextInput {
+        id: textInput4
+        x: posX + 3*space + 3*partwidth + ipDot3.width
+        y: posY
+        visible: ipAddresInput.ipvisible
+        width: partwidth
+        font.pixelSize: ipFontSize
+        KeyNavigation.tab: textInput1
+        focus: (ipAddresInput.ipFocus == 4)?true:false
+
+        color: ipcolor
+        validator: IntValidator {bottom:0; top:999}
+        inputMask: "000;"
+        inputMethodHints: Qt.ImhDigitsOnly
+        maximumLength: 3
+        Keys.onReleased:  {
+            if(cursorPosition == maximumLength){
+                textInput1.focus = true;
+            }
+        }
+        Keys.onPressed: {
+            if((event.key == Qt.Key_Left) && (cursorPosition == 0)){
+                textInput3.focus = true; textInput3.cursorPosition = 2;
+            }
+            if((event.key == Qt.Key_Right) && (cursorPosition == maximumLength)){
+                textInput1.focus = true;
+            }
+            if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+            {
+                makeIpAddress();
+                keyReturnPressed();
+            }
+            if(event.key == Qt.Key_Up)
+            {
+                makeIpAddress();
+                keyUpPressed();
+            }
+            if(event.key == Qt.Key_Down)
+            {
+                makeIpAddress();
+                keyDownPressed();
+            }
+        }
+        onFocusChanged: {
+            color = (focus) ? focuscolor : ipcolor;
+            makeIpAddress();
+            cursorPosition = 0;
+            if(focus) ipFocus = 4;
+        }
+    }
+}

+ 6 - 0
Languages/FLAG-cs_CZ.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="900" height="600">
+	<rect width="900" height="600" fill="#d7141a"/>
+	<rect width="900" height="300" fill="#fff"/>
+	<path d="M 450,300 0,0 V 600 z" fill="#11457e"/>
+</svg>

+ 85 - 0
Languages/FLAG-de_DE.svg

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="800pt"
+   height="600pt"
+   viewBox="0 0 800 600"
+   id="svg2">
+
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>flag</dc:title>
+        <dc:date>09/25/2013</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>edited by Paul Sherman</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>WPClipart</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>country</rdf:li>
+            <rdf:li>flag</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:description />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs13" />
+  <g
+     id="surface1">
+    <rect
+       width="800"
+       height="600"
+       x="0"
+       y="0"
+       id="rect5"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
+    <path
+       d="m 0,200 800,0 0,400 -800,0 z m 0,0"
+       inkscape:connector-curvature="0"
+       id="path7"
+       style="fill:#dc0000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <path
+       d="m 0,400 800,0 0,200 -800,0 z m 0,0"
+       inkscape:connector-curvature="0"
+       id="path9"
+       style="fill:#ffcc00;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+  </g>
+</svg>

+ 111 - 0
Languages/FLAG-en_EN.svg

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="800pt"
+   height="600pt"
+   viewBox="0 0 800 600"
+   id="svg2">
+
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>flag</dc:title>
+        <dc:date>09/25/2013</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>edited by Paul Sherman</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>WPClipart</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>country</rdf:li>
+            <rdf:li>flag</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:description />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4">
+    <clipPath
+       id="clip1">
+      <path
+         d="m 400,300 400,0 0,300 z m 0,0 0,300 -400,0 z m 0,0 L 0,300 0,0 z m 0,0 0,-300 400,0 z m 0,0"
+         inkscape:connector-curvature="0"
+         id="path7" />
+    </clipPath>
+  </defs>
+  <g
+     id="surface1">
+    <rect
+       width="800"
+       height="600"
+       x="0"
+       y="0"
+       id="rect10"
+       style="fill:#00217d;fill-opacity:1;stroke:none" />
+    <path
+       d="m 0,0 60.000002,30 m 0,-30 L 0,30"
+       inkscape:connector-curvature="0"
+       transform="scale(13.333333,20)"
+       id="path12"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    <g
+       clip-path="url(#clip1)"
+       id="g14">
+      <path
+         d="m 0,0 60.000002,30 m 0,-30 L 0,30"
+         inkscape:connector-curvature="0"
+         transform="scale(13.333333,20)"
+         id="path16"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cf0f26;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    </g>
+    <path
+       d="m 30.000001,0 0,30 M 0,15 60.000002,15"
+       inkscape:connector-curvature="0"
+       transform="scale(13.333333,20)"
+       id="path18"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    <path
+       d="m 30.000001,0 0,30 M 0,15 60.000002,15"
+       inkscape:connector-curvature="0"
+       transform="scale(13.333333,20)"
+       id="path20"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cf0f26;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+  </g>
+</svg>

Разлика између датотеке није приказан због своје велике величине
+ 25 - 0
Languages/FLAG-es_ES.svg


+ 85 - 0
Languages/FLAG-fr_FR.svg

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="800pt"
+   height="600pt"
+   viewBox="0 0 800 600"
+   id="svg2">
+
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>flag</dc:title>
+        <dc:date>09/25/2013</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>edited by Paul Sherman</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>WPClipart</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>country</rdf:li>
+            <rdf:li>flag</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:description />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs13" />
+  <g
+     id="surface1">
+    <rect
+       width="800"
+       height="600"
+       x="0"
+       y="0"
+       id="rect5"
+       style="fill:#eb2635;fill-opacity:1;stroke:none" />
+    <path
+       d="m 0,0 533.33203,0 0,600 L 0,600 z m 0,0"
+       inkscape:connector-curvature="0"
+       id="path7"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+    <path
+       d="m 0,0 266.66797,0 0,600 L 0,600 z m 0,0"
+       inkscape:connector-curvature="0"
+       id="path9"
+       style="fill:#001e94;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+  </g>
+</svg>

+ 5 - 0
Languages/FLAG-hu_HU.svg

@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="600" viewBox="0 0 6 3">
+<rect fill="#436F4D" width="6" height="3"/>
+<rect fill="#FFF" width="6" height="2"/>
+<rect fill="#CD2A3E" width="6" height="1"/>
+</svg>

+ 6 - 0
Languages/FLAG-it_IT.svg

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="1500" height="1000" viewBox="0 0 3 2">
+<rect width="1" height="2" fill="#009246"/>
+<rect width="1" height="2" x="1" fill="#fff"/>
+<rect width="1" height="2" x="2" fill="#ce2b37"/>
+</svg>

+ 12 - 0
Languages/FLAG-ko_KR.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="900" height="600" viewBox="-36 -24 72 48">
+<title>Flag of South Korea</title>
+<rect fill="#fff" x="-36" y="-24" width="72" height="48"/>
+<g transform="rotate(-56.3099325)"><!--arctan(-3/2)-->
+<g id="b2"><path id="b" d="M-6-25H6M-6-22H6M-6-19H6" stroke="#000" stroke-width="2"/>
+<use xlink:href="#b" y="44"/></g>
+<path stroke="#fff" stroke-width="1" d="M0,17v10"/>
+<circle fill="#c60c30" r="12"/>
+<path fill="#003478" d="M0-12A6,6 0 0 0 0,0A6,6 0 0 1 0,12A12,12 0 0,1 0-12Z"/></g>
+<g transform="rotate(-123.6900675)"><use xlink:href="#b2"/>
+<path stroke="#fff" stroke-width="1" d="M0-23.5v3M0,17v3.5M0,23.5v3"/></g></svg>

+ 5 - 0
Languages/FLAG-nl_NL.svg

@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="0 0 9 6">
+<rect fill="#21468B"	width="9" height="6"/>
+<rect fill="#FFF" width="9" height="4"/>
+<rect fill="#AE1C28"	width="9" height="2"/>
+</svg>

+ 1 - 0
Languages/FLAG-pl_PL.svg

@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="1280" height="800" id="Flag of Poland" viewBox="0 0 16 10"><rect width="16" height="10" fill="#fff"/><rect width="16" height="5" fill="#dc143c" y="5"/></svg>

+ 13 - 0
Languages/FLAG-sk_SK.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600" viewBox="0 0 9 6">

+<title>Flag of Slovakia</title>

+<rect width="9" height="6" fill="#ee1c25"/>

+<rect width="9" height="4" fill="#0b4ea2"/>

+<rect width="9" height="2" fill="#fff"/>

+<g>
+<path fill="#fff" d="M3.16255,4.635c-0.53781-0.25905-1.3071-0.77323-1.3071-1.79033,0-1.01711,0.04863-1.47967,0.04863-1.47967h1.25847,1.2585s0.04864,0.46256,0.04864,1.47967c0,1.0171-0.76929,1.53128-1.30714,1.79033z"/>

+<path fill="#ee1c25" d="M3.16255,4.5c-0.4934-0.23766-1.19917-0.70938-1.19917-1.64251,0-0.933128,0.044612-1.35749,0.044612-1.35749h1.15456,1.15459s0.044626,0.424365,0.044626,1.35749c0,0.933128-0.705776,1.40485-1.19921,1.64251z"/>

+<path fill="#fff" d="m3.26808,2.61284c0.133599,0.00216,0.394255,0.00739,0.626352-0.070273,0,0-0.00613,0.083055-0.00613,0.179805,0,0.096773,0.00613,0.179822,0.00613,0.179822-0.21289-0.07125-0.4758-0.07273-0.62635-0.07082v0.515391h-0.211033v-0.515391c-0.150545-0.00191-0.41345-0.0004252-0.626352,0.070815,0,0,0.00613-0.083049,0.00613-0.179822,0-0.09675-0.00613-0.179805-0.00613-0.179805,0.2321,0.077665,0.492753,0.072432,0.626352,0.070273v-0.323676c-0.121766-0.00108-0.297234,0.00473-0.49563,0.071126,0,0,0.00613-0.083055,0.00613-0.179822,0-0.096756-0.00613-0.179811-0.00613-0.179811,0.198103,0.066283,0.373356,0.072192,0.495088,0.071137-0.00626-0.20498-0.06597-0.46332-0.06597-0.46332s0.12289,0.00959,0.172016,0.00959c0.049178,0,0.172031-0.00959,0.172031-0.00959s-0.059695,0.258346-0.065964,0.463301c0.121741,0.00106,0.296989-0.00485,0.495086-0.071137,0,0-0.00613,0.083055-0.00613,0.179811,0,0.096767,0.00613,0.179822,0.00613,0.179822-0.198388-0.066392-0.373863-0.072207-0.495627-0.071126v0.323676z"/>

+<path fill="#0b4ea2" d="m3.1625,3.29094c-0.24847,0-0.381562,0.344688-0.381562,0.344688s-0.073834-0.163438-0.276562-0.163438c-0.137161,0-0.238243,0.12201-0.3025,0.235,0.24954,0.39705,0.64768,0.64207,0.96062,0.79281,0.31299-0.15075,0.71139-0.39571,0.96094-0.79281-0.064256-0.11299-0.165339-0.235-0.3025-0.235-0.202734,0-0.276875,0.163438-0.276875,0.163438s-0.133073-0.344688-0.381562-0.344688z"/>

+</g>
+</svg>

+ 69 - 0
Languages/FLAG-sl_SI.svg

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="1200"
+   height="600"
+   id="Layer_1"
+   xml:space="preserve"><defs
+     id="defs3" /><rect
+     width="1200"
+     height="600"
+     x="0"
+     y="0"
+     id="rect3212"
+     style="fill:#ffffff" /><rect
+     width="1200"
+     height="200"
+     x="0"
+     y="400"
+     id="rect6123"
+     style="fill:#ed1c24" /><rect
+     width="1200"
+     height="200"
+     x="0"
+     y="200"
+     id="rect4183"
+     style="fill:#005da4" /><path
+     d="m 227.41468,115.3367 c -1.84803,0.8149 -3.68224,1.66088 -5.50265,2.53724 l 5.73469,90.7426 c 1.56212,24.73842 12.08262,48.15024 29.71347,65.78039 12.05638,12.05569 26.81574,20.78825 42.85477,25.60306 l 10e-4,0 c 16.03904,-4.8155 30.79909,-13.54737 42.85478,-25.60306 17.63016,-17.63015 28.15135,-41.04197 29.71278,-65.78039 l 5.73538,-90.7426 c -1.8211,-0.87636 -3.65393,-1.72234 -5.50334,-2.53724 l 0.001,6.9e-4 -5.87004,92.89102 c -1.4689,23.38143 -11.4093,45.51011 -28.07124,62.17206 -10.98044,10.98182 -24.33652,19.04241 -38.85901,23.68391 l -0.002,0 c -14.52318,-4.6415 -27.87787,-12.70209 -38.85831,-23.68391 -16.66263,-16.66195 -26.60303,-38.79063 -28.07124,-62.17206 l -5.87073,-92.89171 10e-4,0"
+     id="path13"
+     style="fill:#ed1c24" /><path
+     d="M 373.01732,115.33739 C 350.29472,105.31895 325.52936,100 300.21565,100 c -25.31439,0 -50.07976,5.31895 -72.80235,15.33739 l 5.87142,92.89102 c 1.4682,23.38143 11.40861,45.51011 28.07124,62.17206 10.98113,10.98182 24.33582,19.04241 38.85831,23.68391 l 0.002,0 c 14.52249,-4.6415 27.87857,-12.70209 38.85762,-23.68391 16.66333,-16.66195 26.60373,-38.79063 28.07124,-62.17206"
+     id="path15"
+     style="fill:#005da4" /><use
+     transform="translate(20.554822,27.406199)"
+     id="use2825"
+     x="0"
+     y="0"
+     width="1200"
+     height="600"
+     xlink:href="#polyline19" /><polyline
+     style="fill:#ffdd00;fill-opacity:1"
+     id="polyline19"
+     points="90,23.232 94.669,16.854 86.811,17.709 83.622,10.476 80.433,17.709 72.575,16.854 77.244,23.232    72.575,29.61 80.433,28.755 83.622,35.988 86.811,28.755 94.669,29.61  "
+     transform="matrix(0.6905934,0,0,0.6905934,221.91203,100)" /><use
+     transform="translate(41.108608,0)"
+     id="use2827"
+     x="0"
+     y="0"
+     width="1200"
+     height="600"
+     xlink:href="#polyline19" /><path
+     d="m 358.94372,221.75438 -29.36473,-39.1525 -11.74561,15.66127 -17.61842,-35.23683 -17.61842,35.23683 -11.74561,-15.66127 -29.36403,39.1525 c 0,5.19188 2.0628,10.17037 5.734,13.84156 3.67119,3.66981 8.64968,5.73401 13.84225,5.73401 3.46678,0 6.83895,-0.91987 9.78916,-2.62358 0.0193,-0.0124 -0.0235,0.0138 -0.005,0.003 1.47027,-0.84943 3.05657,-1.51104 4.72435,-1.95715 5.01509,-1.3432 10.35821,-0.64087 14.85466,1.95437 3.00201,1.7334 6.38247,2.62358 9.78985,2.62358 0.0145,0 -0.0179,0 -0.003,0 3.40808,0 6.78784,-0.89018 9.79054,-2.62358 4.49577,-2.59524 9.83958,-3.29896 14.85467,-1.95437 1.66709,0.44611 3.25338,1.10772 4.72366,1.95715 0.02,0.011 -0.0228,-0.0145 -0.004,-0.003 2.95091,1.70371 6.32169,2.62358 9.78847,2.62358 5.19327,0 10.17175,-2.0635 13.84295,-5.73401 3.67119,-3.67119 5.734,-8.64968 5.734,-13.84156"
+     id="path23"
+     style="fill:#ffffff" /><path
+     d="m 248.44325,243.01153 c 1.34735,2.67744 2.82867,5.28996 4.43844,7.82719 0,0 -6.9e-4,0.001 0,0.003 4.13251,1.90051 8.81819,2.31072 13.24835,1.12359 1.66847,-0.44612 3.25407,-1.1084 4.72434,-1.95715 0.0193,-0.011 -0.0235,0.0138 -0.004,0.003 2.95022,-1.70508 6.32238,-2.62358 9.78916,-2.62358 0.007,0 -0.009,0 -0.002,0 3.40739,-0.001 6.78784,0.88879 9.78985,2.62358 4.49646,2.59523 9.83958,3.29757 14.85536,1.95437 1.66709,-0.44612 3.25338,-1.1084 4.72366,-1.95715 0.02,-0.011 -0.0228,0.0138 -0.004,0.003 2.94953,-1.70508 6.3217,-2.62358 9.78986,-2.62358 0.007,0 -0.01,0 -0.003,0 3.40739,-0.001 6.78854,0.88879 9.78985,2.62358 4.49715,2.59523 9.83958,3.29757 14.85467,1.95437 1.07663,-0.28729 2.11736,-0.66643 3.11596,-1.12498 l 0,0 c 1.61046,-2.53861 3.09178,-5.15113 4.43913,-7.82718 0,-0.001 0,0 0,0 -0.97788,0.37223 -1.92607,0.82249 -2.83489,1.34734 -0.0186,0.0111 0.0242,-0.0138 0.006,-0.003 -1.47027,0.84875 -3.05657,1.50965 -4.72504,1.95715 -5.01509,1.3432 -10.35752,0.64087 -14.85467,-1.95576 -3.00131,-1.7334 -6.38246,-2.62219 -9.78985,-2.62219 -0.007,0 0.01,0 0.003,0 -3.46748,0 -6.83964,0.91987 -9.78986,2.62356 -0.0186,0.0111 0.0242,-0.0138 0.004,-0.003 -1.47028,0.84943 -3.05657,1.51101 -4.72366,1.95715 -5.01578,1.34459 -10.3589,0.64225 -14.85536,-1.95439 -3.00201,-1.73338 -6.38246,-2.62356 -9.78985,-2.62356 -0.008,0 0.009,0 0.002,0 -3.46678,0 -6.83894,0.91987 -9.78916,2.62495 -0.0193,0.011 0.0235,-0.0138 0.004,-0.003 -1.47027,0.84873 -3.05587,1.50962 -4.72434,1.95713 -5.01509,1.34322 -10.35821,0.64088 -14.85467,-1.95576 -0.91227,-0.52623 -1.85977,-0.97511 -2.83212,-1.34459 -6.9e-4,0 0,-0.001 0,0"
+     id="path25"
+     style="fill:#ffffff" /><path
+     d="m 342.47859,258.03471 c -2.28103,2.92258 -4.75059,5.72017 -7.40109,8.36929 -9.90311,9.90311 -21.8559,17.28348 -34.86254,21.72952 l -6.9e-4,0 c -13.00663,-4.44604 -24.96012,-11.82502 -34.86322,-21.72952 -2.64981,-2.64912 -5.11937,-5.44671 -7.4004,-8.36929 0,0 -6.9e-4,0 0,0 2.69953,0.43437 5.48676,0.30248 8.1787,-0.41781 1.66847,-0.44751 3.25407,-1.10841 4.72434,-1.95715 0.0193,-0.011 -0.0235,0.0138 -0.004,0.003 2.95021,-1.70507 6.32238,-2.62357 9.78916,-2.62357 0.007,0 -0.009,0 -0.002,0 3.40739,-0.001 6.78784,0.88879 9.78985,2.62219 4.49646,2.59662 9.83958,3.29895 14.85467,1.95576 1.66847,-0.44751 3.25476,-1.10841 4.72504,-1.95715 0.0186,-0.011 -0.0242,0.0138 -0.004,0.003 2.94953,-1.70507 6.3217,-2.62357 9.78847,-2.62357 0.007,0 -0.008,0 -0.001,0 3.40739,-0.001 6.78715,0.88879 9.78985,2.62219 3.91567,2.2617 8.47566,3.08627 12.90029,2.37287 0.001,0 0,0 -0.001,0.001"
+     id="path27"
+     style="fill:#ffffff" />
+  <path
+     style="opacity:1;color:black;fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+     d="M 0.31016708,0.16528936 L 0.31016708,599.63931 L 1199.85463,599.63931 L 1199.85463,0.16528936 L 0.31016708,0.16528936 z M 6.679474,6.279329 L 1192.48533,6.279329 L 1192.48533,592.52529 L 6.679474,592.52529 L 6.679474,6.279329 z "
+     id="path5361" />
+</svg>

+ 8 - 0
Languages/FLAG-tr_TR.svg

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800">
+<rect width="1200" height="800" fill="#E30A17"/>
+<circle cx="425" cy="400" r="200" style="fill:#ffffff"/>
+<circle cx="475" cy="400" r="160" style="fill:#E30A17"/>
+<polygon style="fill:#ffffff"
+   points="583.334,400 764.235,458.779 652.431,304.894 652.431,495.106 764.235,341.221"/>
+</svg>

+ 12 - 0
Languages/FLAG-zh_CN.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="900" height="600" viewBox="0 0 30 20">
+<defs>
+<path id="s" d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00"/>
+</defs>
+<rect width="30" height="20" fill="#de2910"/>
+<use xlink:href="#s" transform="translate(5,5) scale(3)"/>
+<use xlink:href="#s" transform="translate(10,2) rotate(23.036243)"/>
+<use xlink:href="#s" transform="translate(12,4) rotate(45.869898)"/>
+<use xlink:href="#s" transform="translate(12,7) rotate(69.945396)"/>
+<use xlink:href="#s" transform="translate(10,9) rotate(20.659808)"/>
+</svg>

BIN
Languages/TR-cs_CZ.qm


+ 139 - 0
Languages/TR-cs_CZ.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="cs_CZ">
+<context>
+    <name></name>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>správce nastavení</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP adresa</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>CAM nastavení</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">ostrý provoz</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">dual ostrý provoz</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operátor</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>inženýr</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>správce</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI nastavení</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>CAM nastavení</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation type="unfinished">JOB výběr</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation type="unfinished">ostrý provoz a propojení</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation type="unfinished">dual ostrý provoz a propojení</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>správce nastavení</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation type="unfinished">maska sítě</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation type="unfinished">výchozí brána</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation type="unfinished">DNS server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation type="unfinished">HMI aktualizační soubory</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI nastavení</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation type="unfinished">JOB výběr</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>heslo</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-de_DE.qm


+ 139 - 0
Languages/TR-de_DE.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de_DE">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP-Adresse</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>Kamera Einstellungen</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">Live Mode</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">Dual Live Mode</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation type="unfinished">HMI Einstellungen</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>Kamera Einstellungen</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>Job Auswahl</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>Live Mode und Linking</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>Dual Live Mode und Linking</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>Administrator Einstellungen</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>Netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>Def. Router</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS Server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>Updatedateien HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI Einsteinstellungen</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>Job Auswahl</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>Passwort</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>Admin Einstellungen</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>Bedienperson</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>Techniker</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>Administrator</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished">Fabrikseinst.</translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-en_EN.qm


+ 139 - 0
Languages/TR-en_EN.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>ip-address</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>CAM settings</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">live mode</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">dual live mode</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation type="unfinished">HMI settings</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>CAM settings</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>job select</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>live mode and linking</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>dual live mode and linking</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>administrator settings</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>def. gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>dns server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>Updatefiles HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation type="unfinished">HMI - settings</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>job select</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>password</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation type="unfinished">Admin settings</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operator</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>engineer</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>administrator</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation>factory reset</translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-es_ES.qm


+ 139 - 0
Languages/TR-es_ES.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>Dirección IP</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation type="unfinished">Ajustes de la cámara</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">Visualización en vivo</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">Visualización dual en vivo</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation type="unfinished">Configuración HMI</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation type="unfinished">Ajustes de la cámara</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation type="unfinished">Selección de programa</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation type="unfinished">Visualización en vivo y parámetros</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation type="unfinished">Visualización dual en vivo y parámetros</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation type="unfinished">Configuración de administrador</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation type="unfinished">Máscara de red</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation type="unfinished">Puerta de enlace</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation type="unfinished">Servidor DNS</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation type="unfinished">Archivos de actualización HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation type="unfinished">Configuración HMI</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation type="unfinished">Selección de programa</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation type="unfinished">Contraseña</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>la configuración del administrador</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operador</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>ingeniero</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>administrador</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-fr_FR.qm


+ 139 - 0
Languages/TR-fr_FR.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr_FR">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>adresse ip</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>réglages caméra</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">live mode</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">dual live mode</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>réglages HMI</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>réglages caméra</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation type="unfinished">sélection du Job </translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation type="unfinished">live mode et linking</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation type="unfinished">dual live mode et linking</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation type="unfinished">configuration par l’administrateur</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation type="unfinished">masque de réseau</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation type="unfinished">passerelle par défaut</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>serveur dns</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>Mise à jour des fichiers et HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>réglages HMI</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation type="unfinished">sélection du Job </translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>Mot de passe</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>administrateur</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>opérateur</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>ingénieur</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>administrateur</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-hu_HU.qm


+ 139 - 0
Languages/TR-hu_HU.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu_HU">
+<context>
+    <name></name>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>Adminisztrátori beállítások</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP Cím</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>Kamera beállítások</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>Valós idejű mérés</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>Kettős valós idejű mérés</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operátor</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>mérnök</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>adminisztrátor</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>Terminál beállítások</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>Kamera beállítások</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>Munkadarab kiválasztása</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>Valós idejű mérés és kapcsolat</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>Kettős valós idejű mérés és kapcsolat</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>Adminisztrátori beállítások</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>def.gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS szerver</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>Terminál frissítés</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>Terminál beállítások</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>Munkadarab kiválasztása</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>Jelszó</translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-it_IT.qm


+ 139 - 0
Languages/TR-it_IT.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it_IT">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>indirizzo ip</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>impostazione camera</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>visualizzazione live</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>visualizzazione live dual</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>impostazioni HMI</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>inpostazioni camera</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation type="unfinished">selezione ricetta</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>visualizzazione live e linking</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>visualizzazione live dual e linking</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>impostazioni admin</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>default gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>dns server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation type="unfinished">aggiornamento file HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>impostazioni HMI</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation type="unfinished">selezione ricetta</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>password</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>impostazioni admin</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operatore</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>ingegnere</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>amministratore</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-ko_KR.qm


+ 139 - 0
Languages/TR-ko_KR.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ko_KR">
+<context>
+    <name></name>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>관리자 설정</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>CAM 설정</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>라이브 운영</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>이중 라이브 운영</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>연산자</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>기사</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>관리자</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI 설정</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>CAM 설정</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>JOB 선택</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>라이브 운영 및 상호 연결</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>이중 라이브 운영 및 상호 연결</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>관리자 설정</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>넷 마스크</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>표준 게이트웨이</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS 서버</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>HMI 업데이트 파일</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI 설정</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>JOB 선택</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>암호</translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-nl_NL.qm


+ 139 - 0
Languages/TR-nl_NL.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="nl_NL">
+<context>
+    <name></name>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>beheerder instellingen</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP adres</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>camera instellingen</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">live mode</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">dual live mode</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operator</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>ingenieur</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>administrateur</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI instellingen</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation type="unfinished">camera instellingen</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>job selectie</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation type="unfinished">live mode en koppeling</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation type="unfinished">Dual live mode en koppeling</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>beheerder instellingen</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>standaard gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>dns server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation type="unfinished">Bestanden bijwerken HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI instellingen</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>job selectie</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>wachtwoord</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-pl_PL.qm


+ 139 - 0
Languages/TR-pl_PL.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="pl_PL">
+<context>
+    <name></name>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>ustawienia administratora</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>adres IP</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation type="unfinished">Ustawienia czujnika</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation type="unfinished">podgląd na żywo</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation type="unfinished">Podwójny podgląd na żywo</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operator</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>inżynier</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>administrator</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation type="unfinished">Ustawienia HMI</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation type="unfinished">Ustawienia czujnika</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation type="unfinished">Wybór zadania</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>Przeglądanie i łączenie na żywo</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation type="unfinished">Podwójny przeglądanie i łączenie na żywo</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>ustawienia administratora</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation type="unfinished">Maska sieciowa</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation type="unfinished">Brama domyślna</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation type="unfinished">Serwer DNS</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation type="unfinished">Pliki aktualizacji HMI</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation type="unfinished">Ustawienia HMI</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation type="unfinished">Wybór zadania</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>hasło</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-sk_SK.qm


+ 139 - 0
Languages/TR-sk_SK.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sk_SK">
+<context>
+    <name></name>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>nastavenie správcu</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP adresa</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>CAM nastavenie</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>ostrá prevádzka</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>duálna ostrá prevádzka</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operátor</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>inžinier</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>správca</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI nastavenie</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>CAM nastavenie</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>JOB výber</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>ostrá  prevádzka a prepojenie</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>duálna ostrá prevádzka a prepojenie</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>nastavenie správcu</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>maska siete</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>prednastavená brána</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>HMI aktualizačné súbory</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI nastavenie</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>JOB výber</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>heslo</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-sl_SI.qm


+ 139 - 0
Languages/TR-sl_SI.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="sl_SI">
+<context>
+    <name></name>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>nastavitve administrator</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>CAM nastavitve</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>živo operacija</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>Dual živo operacija</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operater</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>inženir</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>skrbnik</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI nastavitve</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>CAM nastavitve</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>JOB izbor</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>Živo delovanje in medsebojno</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>Dual Živo delovanje in medsebojno</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>nastavitve administrator</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>standard gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>dns server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>HMI posodabljanje datotek</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI nastavitve</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>JOB izbor</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>geslo</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-tr_TR.qm


+ 139 - 0
Languages/TR-tr_TR.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="tr_TR">
+<context>
+    <name></name>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>Yönetici Ayarları</translation>
+    </message>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP Adresi</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>Kamera Ayarları</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>Live Mod</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>Dual Live Mod</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>operatör</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>mühendis</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>yönetici</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>Operatör Panel Ayarları</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>Kamera Ayarları</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>Program Seçimi</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>Live mod ve Linking</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>Dual Live Mod ve Linking</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>Yönetici Ayarları</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>Netmask</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>Def. Gateway</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS Server</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>Operatör Panel Güncelleme</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>Operatör Panel Ayarları</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>Program Seçimi</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>Şifre</translation>
+    </message>
+</context>
+</TS>

BIN
Languages/TR-zh_CN.qm


+ 139 - 0
Languages/TR-zh_CN.ts

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de" sourcelanguage="de_DE">
+<context>
+    <name></name>
+    <message id="_sys_ipaddress">
+        <location filename="../CAM_Settings.qml" line="316"/>
+        <location filename="../HMI_Settings.qml" line="68"/>
+        <source></source>
+        <extracomment>ID:_sys_ipaddress Ip Address settings</extracomment>
+        <translation>IP地址</translation>
+    </message>
+    <message id="cam_sett_headline">
+        <location filename="../CAM_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:cam_sett_headline CAM Settings Headline</extracomment>
+        <translation>相机设置</translation>
+    </message>
+    <message id="live_mode_headline">
+        <location filename="../CamLiveContainer.qml" line="17"/>
+        <source></source>
+        <extracomment>ID:live_mode_headline Live-Mode headline</extracomment>
+        <translation>现场操作</translation>
+    </message>
+    <message id="dual_live_mode_headline">
+        <location filename="../CamLiveContainerDual.qml" line="19"/>
+        <source></source>
+        <extracomment>ID:dual_live_mode_headline Dual Live-Mode Headline</extracomment>
+        <translation>双活模式</translation>
+    </message>
+    <message id="main_menu_hmi_settings">
+        <location filename="../HMI_MainMenu.qml" line="49"/>
+        <source></source>
+        <extracomment>ID:main_menu_hmi_settings Main Menu HMI Settings text</extracomment>
+        <translation>HMI设置</translation>
+    </message>
+    <message id="main_menu_cam_settings">
+        <location filename="../HMI_MainMenu.qml" line="80"/>
+        <source></source>
+        <extracomment>ID:main_menu_cam_settings Main Menu CAM Settings text</extracomment>
+        <translation>相机设置</translation>
+    </message>
+    <message id="main_menu_job_settings">
+        <location filename="../HMI_MainMenu.qml" line="109"/>
+        <source></source>
+        <extracomment>ID:main_menu_job_settings Main Menu job settings</extracomment>
+        <translation>择业</translation>
+    </message>
+    <message id="main_menu_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="138"/>
+        <source></source>
+        <extracomment>ID: main_menu_live_mode Main Menu Live Mode text</extracomment>
+        <translation>实时模式和链接</translation>
+    </message>
+    <message id="main_menu_dual_live_mode">
+        <location filename="../HMI_MainMenu.qml" line="166"/>
+        <source></source>
+        <extracomment>ID:main_menu_dual_live_mode Main Menu dual live mode</extracomment>
+        <translation>双实时模式和链接</translation>
+    </message>
+    <message id="main_menu_admin_settings">
+        <location filename="../HMI_MainMenu.qml" line="194"/>
+        <source></source>
+        <extracomment>ID:main_menu_admin_settings Main Menu Administrator Settings text</extracomment>
+        <translation>管理员设置</translation>
+    </message>
+    <message id="_sys_netmask">
+        <location filename="../HMI_Settings.qml" line="102"/>
+        <source></source>
+        <extracomment>ID:_sys_netmask Ip Address settings Netmask</extracomment>
+        <translation>子网掩码</translation>
+    </message>
+    <message id="_sys_defaultrouter">
+        <location filename="../HMI_Settings.qml" line="135"/>
+        <source></source>
+        <extracomment>ID:_sys_defaultrouter Ip Address settings Defaultrouter</extracomment>
+        <translation>标准网关</translation>
+    </message>
+    <message id="_sys_dns1">
+        <location filename="../HMI_Settings.qml" line="168"/>
+        <source></source>
+        <extracomment>ID:_sys_dns1 Ip Address settings DNS Server 1</extracomment>
+        <translation>DNS服务器</translation>
+    </message>
+    <message id="_sys_update_hmi">
+        <location filename="../HMI_Settings.qml" line="245"/>
+        <source></source>
+        <extracomment>ID:_sys_update_hmi Headline HMI Updatewindow</extracomment>
+        <translation>更新文件</translation>
+    </message>
+    <message id="hmi_settings_headline">
+        <location filename="../HMI_SettingsContainer.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:hmi_settings_headline HMI-Settings headline</extracomment>
+        <translation>HMI设置</translation>
+    </message>
+    <message id="job_select_headline">
+        <location filename="../JobList.qml" line="85"/>
+        <source></source>
+        <extracomment>ID:job_select_headline Job Select headline</extracomment>
+        <translation>择业</translation>
+    </message>
+    <message id="login_headline">
+        <location filename="../PWD_Container.qml" line="14"/>
+        <source></source>
+        <extracomment>ID:login_headline Login Password Headline</extracomment>
+        <translation>密码</translation>
+    </message>
+    <message id="admin_sett_headline">
+        <location filename="../ADMIN_SettingsContainer.qml" line="15"/>
+        <source></source>
+        <extracomment>ID:admin_sett_headline ADMIN Settings Headline</extracomment>
+        <translation>管理员设置</translation>
+    </message>
+    <message id="user_role_oper">
+        <location filename="../Globals/Globals.qml" line="30"/>
+        <source></source>
+        <extracomment>ID:user_role_oper USER Role Operator text shown in status line and pwd settings</extracomment>
+        <translation>操作者</translation>
+    </message>
+    <message id="user_role_eng">
+        <location filename="../Globals/Globals.qml" line="35"/>
+        <source></source>
+        <extracomment>ID:user_role_eng USER Role Engineer text shown in status line and pwd settings</extracomment>
+        <translation>工程师</translation>
+    </message>
+    <message id="user_role_admin">
+        <location filename="../Globals/Globals.qml" line="40"/>
+        <source></source>
+        <extracomment>ID:user_role_admin USER Role Administrator text shown in status line and pwd settings</extracomment>
+        <translation>管理员</translation>
+    </message>
+    <message id="_factory_reset">
+        <location filename="../ADMIN_Settings.qml" line="58"/>
+        <source></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>

+ 127 - 0
Main.qml

@@ -0,0 +1,127 @@
+import QtQuick 2.5
+import QtWebEngine 1.2
+import QtQuick.Window 2.1
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import ApplicationLauncher 1.0
+
+import "qrc:/Globals"
+
+Window {
+    id: mainWIN
+    visible: true
+    property QtObject glob: Globals // zum Zugriff auf das Globals Objekt
+
+    // Startfenster
+    Rectangle {
+        id: splashRECT
+        anchors.centerIn: parent
+        width: parent.width * 0.9
+        height: parent.height * 0.9
+
+        Image {
+            anchors.centerIn: parent
+            source: Globals.logoSplash
+            fillMode: Image.PreserveAspectFit
+            sourceSize.width: parent.width
+            sourceSize.height: parent.height
+            Component.onCompleted: {
+                splashTIMER.running = true;
+            }
+        }
+    }
+
+    Timer {
+        id: splashTIMER
+        interval: 1500
+        running: false
+        repeat: false
+        onTriggered: {
+            // StackView Start
+            stackView.push("qrc:/Start_Container.qml");
+        }
+    }
+    //===================================
+
+    StackView {
+        id: stackView
+        anchors.fill: parent
+
+        pushEnter: Transition {
+            PropertyAnimation {
+                property: "opacity"
+                from: 0
+                to: 1
+                duration: 50
+            }
+        }
+        pushExit: Transition {
+            PropertyAnimation {
+                property: "opacity"
+                from: 1
+                to:0
+                duration: 50
+            }
+        }
+        popEnter: Transition {
+            PropertyAnimation {
+                property: "opacity"
+                from: 0
+                to:1
+                duration: 50
+            }
+        }
+        popExit: Transition {
+            PropertyAnimation {
+                property: "opacity"
+                from: 1
+                to:0
+                duration: 50
+            }
+        }
+    }
+
+    onWidthChanged: {
+        console.debug(">>>WIDTH : ", width);
+    }
+
+    onHeightChanged:  {
+        console.debug(">>>HEIGHT : ", height);
+    }
+
+    Component.onCompleted: {
+        var defrouter = sysinfo.defaultRouter();
+        //-- Systembeeper off
+        sysinfo.beepOn(false);
+
+        console.log("==========");
+        //console.log(JSON.stringify(sysinfo.dnsServer()));
+        console.log("==========");
+
+        settings.setValue("MAINQML/start", new Date().toLocaleString("DE-de"));
+        console.log(">>> LangLoad Start");
+        transLoad.selectLanguage(settings.value("HMI/Language", "en"));
+        console.log("<<< LangLoad End");
+
+//        if(settings.value("CAM1SETTINGS/IpAddress", "0.0.0.0") !== "0.0.0.0") {
+        if(0) {
+            Globals.jsonGetSystem("http://" + settings.value("CAM1SETTINGS/IpAddress", "0.0.0.0") + "/api/v1/command", 1);
+        }
+        else {
+            Globals.cam1Name = "--";
+            Globals.cam1Model = "--";
+            Globals.cam1Ver = "--";
+        }
+
+//        if(settings.value("CAM2SETTINGS/IpAddress", "0.0.0.0") !== "0.0.0.0") {
+        if(0) {
+            Globals.jsonGetSystem("http://" + settings.value("CAM2SETTINGS/IpAddress", "0.0.0.0") + "/api/v1/command", 2);
+        }
+        else {
+            Globals.cam2Name = "--";
+            Globals.cam2Model = "--";
+            Globals.cam2Ver = "--";
+        }
+        //splashTIMER.running = true;
+    }
+}

+ 13 - 0
Menu/Background.qml

@@ -0,0 +1,13 @@
+import QtQuick 2.2
+import QtQml 2.2
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.3
+
+Rectangle {
+    anchors.fill: parent
+    gradient: Gradient {
+        GradientStop { position: 0.0; color: "blue" }
+        GradientStop { position: 0.75; color: "black" }
+        GradientStop { position: 1.0; color: "dimgray" }
+    }
+}

+ 61 - 0
Menu/MenuButton.qml

@@ -0,0 +1,61 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import ApplicationLauncher 1.0
+
+Button {
+    property double buttGreyed: 0.0 //Saturation -1.0 greyed ... 0.0 colored
+    property int imgBorder: 20 // in percent of parent.height defaults to 20%
+    property string menuQML // next UI to goto
+    property string menuImage // Image name
+//    property string menuText // Text to display in Button Box
+    property alias menuText: menTXT.text
+
+    signal itemClicked
+
+    width: parent.width
+    height: parent.height
+
+    Image {
+        id: idIMG
+        anchors.centerIn: parent
+
+        fillMode: Image.PreserveAspectFit
+        source: menuImage
+        sourceSize.height: parent.height - parent.width * (parent.imgBorder / 100.0)
+        sourceSize.width: parent.width - parent.width * (parent.imgBorder / 100.0)
+
+        Text {
+            id: menTXT
+            anchors.bottom: parent.bottom
+            anchors.bottomMargin: 3
+            x: 2
+            width: parent.width - 2 * x
+            color: "white"
+            font.pixelSize: (parent.height * 0.21) / 2
+            wrapMode: Text.WordWrap
+            text: menuText
+        }
+    }
+
+    HueSaturation {
+        id: idSaturation
+        anchors.fill: idIMG
+        source: idIMG
+        hue: 0.0
+        saturation: buttGreyed
+        lightness: 0.0
+    }
+
+    background: Rectangle {
+        border.width: 0.0
+    }
+
+    onClicked: {
+        sysinfo.beep();
+        itemClicked();
+    }
+}
+

+ 271 - 0
Menu/MenuHeader.qml

@@ -0,0 +1,271 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import ApplicationLauncher 1.0
+
+import "qrc:/Globals"
+
+Item {
+    property int buttImgBorder: 20 // in percent of parent.height defaults to 20%
+
+    property string headerText: ""
+    property string headerLogoImage: Globals.logoMenu
+    property string buttUndoImage: "/images/UndoButton.svg"
+    property string buttHomeImage: "/images/HomeButton.svg"
+    property string buttLockImage: "/images/LockButton.svg"
+    property string buttCamImage: "/images/LiveMode_Button.svg"
+    property bool buttCam1Visible: false
+    property bool buttCam2Visible: false
+    property int camSelected: -1
+    property int buttRadius: 0
+    property color buttGradientStart: "darkgray"
+    property color buttGradientStop: "black"
+    property color buttGradientSelectedStart: Globals.customer_color_base
+    property color buttGradientSelectedStop: Globals.customer_color_base
+    property double itemMargin: height * (buttImgBorder / 200.0)
+    property int buttClicked: 0;
+
+    width: parent.width
+    height: parent.height / 10.0
+
+    function whichCamSet() {
+        var _camSelected = settings.value("COMMON/CamSelected","-");
+        var ret;
+
+        if (_camSelected.toString() === "1") {
+            camSelected = 1;
+            ret = settings.value("CAM1SETTINGS/IpAddress","0.0.0.0");
+        } else if (_camSelected.toString() === "2") {
+            camSelected = 2;
+            ret = settings.value("CAM2SETTINGS/IpAddress","0.0.0.0");
+        }
+
+        if ((_camSelected === "-" ) || (ret === "0.0.0.0")) {
+            if (settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0") {
+                settings.setValue("COMMON/CamSelected", "1");
+                camSelected = 1;
+                ret = settings.value("CAM1SETTINGS/IpAddress","0.0.0.0");
+            } else if (settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0") {
+                settings.setValue("COMMON/CamSelected", "2");
+                camSelected = 2;
+                ret = settings.value("CAM2SETTINGS/IpAddress","0.0.0.0");
+            }
+        }
+
+        buttCam1Visible =  (settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0")?true:false;
+        buttCam2Visible =  (settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0")?true:false;
+
+        return ret;
+    }
+
+    Rectangle {
+        anchors.fill: parent
+        gradient: Gradient {
+//            GradientStop { position: 0.0; color: "black" }
+//            GradientStop { position: 1.0; color: "lightgray" }
+            GradientStop { position: 0.0; color: "white" }
+            GradientStop { position: 1.0; color: "darkgray" }
+        }
+    }
+
+    Button {
+        id: buttonUndo
+
+        anchors.right: parent.right
+        anchors.rightMargin: itemMargin
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+
+        height: parent.height - parent.height * (buttImgBorder / 100.0)
+        width: height
+        Image {
+            anchors.centerIn: parent
+            fillMode: Image.PreserveAspectFit
+            source: buttUndoImage
+            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+        }
+        background: Rectangle {
+            radius: buttRadius
+            gradient: Gradient {
+                GradientStop { position:0 ; color: buttGradientStart }
+                GradientStop { position:1 ; color: buttGradientStop }
+            }
+        }
+        onClicked: {
+            buttClicked += 1;
+            sysinfo.beep();
+            stackView.pop(StackView.Transition); }
+    }
+
+    Button {
+        id: buttonHome
+        anchors.right: buttonUndo.left
+        anchors.rightMargin: itemMargin
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        height: parent.height - parent.height * (buttImgBorder / 100.0)
+        width: height
+        Image {
+            anchors.centerIn: parent
+            fillMode: Image.PreserveAspectFit
+            source: buttHomeImage
+            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+        }
+        background: Rectangle {
+            radius: buttRadius
+            gradient: Gradient {
+                GradientStop { position:0 ; color: buttGradientStart }
+                GradientStop { position:1 ; color: buttGradientStop }
+            }
+        }
+        onClicked: {
+            buttClicked += 1;
+            sysinfo.beep();
+            stackView.pop(null, StackView.Transition); }
+    }
+
+    Button {
+        id: buttonLoc
+        anchors.right: buttonHome.left
+        anchors.rightMargin: itemMargin
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        height: parent.height - parent.height * (buttImgBorder / 100.0)
+        width: height
+
+        Image {
+            anchors.centerIn: parent
+            fillMode: Image.PreserveAspectFit
+            source: buttLockImage
+            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+        }
+        background: Rectangle {
+            radius: buttRadius
+            gradient: Gradient {
+                GradientStop { position:0 ; color: buttGradientStart }
+                GradientStop { position:1 ; color: buttGradientStop }
+            }
+        }
+        onClicked: {
+            buttClicked += 1;
+            sysinfo.beep();
+            while (stackView.depth > 2) {
+                stackView.pop(StackView.Transition);
+            }
+        }
+    }
+
+    Button {
+        property string in2: Globals.in2Status
+
+        id: buttonCam2
+        anchors.right: buttonLoc.left
+        anchors.rightMargin: itemMargin * 3
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        height: parent.height - parent.height * (buttImgBorder / 100.0)
+        width: height
+        visible: buttCam2Visible
+
+        Image {
+            anchors.centerIn: parent
+            fillMode: Image.PreserveAspectFit
+            source: buttCamImage
+            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+            visible: parent.visible
+        }
+        background: Rectangle {
+            radius: buttRadius
+            visible: parent.visible
+            gradient: Gradient {
+                GradientStop { position:0 ; color: camSelected === 2?buttGradientSelectedStart:buttGradientStart }
+                GradientStop { position:1 ; color: camSelected === 2?buttGradientSelectedStop:buttGradientStop }
+            }
+        }
+        onClicked: {
+            sysinfo.beep();
+            if(settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) {
+                settings.setValue("COMMON/CamSelected", "2");
+                camSelected = 2;
+            }
+        }
+        onIn2Changed: {
+            if((settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) &&
+                    (Globals.in2Status == "2")){
+                settings.setValue("COMMON/CamSelected", "2");
+                camSelected = 2;
+            }
+        }
+
+    }
+
+    Button {
+        property string in1: Globals.in1Status
+        id: buttonCam1
+        anchors.right: buttonCam2.left
+        anchors.rightMargin: itemMargin
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        height: parent.height - parent.height * (buttImgBorder / 100.0)
+        width: height
+        visible: buttCam1Visible
+
+        Image {
+            anchors.centerIn: parent
+            fillMode: Image.PreserveAspectFit
+            source: buttCamImage
+            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+            visible: parent.visible
+        }
+        background: Rectangle {
+            radius: buttRadius
+            visible: parent.visible
+            gradient: Gradient {
+                GradientStop { position:0 ; color: camSelected === 1?buttGradientSelectedStart:buttGradientStart }
+                GradientStop { position:1 ; color: camSelected === 1?buttGradientSelectedStop:buttGradientStop }
+            }
+        }
+        onClicked: {
+            sysinfo.beep();
+            if(settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) {
+                settings.setValue("COMMON/CamSelected", "1");
+                camSelected = 1;
+            }
+        }
+        onIn1Changed: {
+            if((settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) &&
+                    (Globals.in1Status == "1")){
+                settings.setValue("COMMON/CamSelected", "1");
+                camSelected = 1;
+            }
+        }
+    }
+
+    Image {
+        anchors.left: parent.left
+        anchors.leftMargin: itemMargin
+
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        source: headerLogoImage
+        fillMode: Image.PreserveAspectFit
+        sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+        sourceSize.width: parent.width/3.0 - parent.width/3.0 * (buttImgBorder / 100.0)
+    }
+
+    Text {
+        anchors.centerIn: parent
+        anchors.top: parent.top
+        anchors.topMargin: itemMargin
+        color: "white"
+        font.pixelSize: (parent.height * 0.5)
+        text : headerText
+    }
+}

+ 58 - 0
Menu/MenuStatus.qml

@@ -0,0 +1,58 @@
+import QtQuick 2.5
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import "qrc:/Globals"
+
+Item {
+    id: item1
+    property int buttImgBorder: 20 // in percent of parent.height defaults to 20%
+    property double itemMargin: height * (buttImgBorder / 200.0)
+
+    width: parent.width
+    height: parent.height / 10.0
+
+    x: 0
+    y: parent.height - height
+
+    Rectangle {
+        anchors.fill: parent
+        gradient: Gradient {
+//            GradientStop { position: 0.0; color: "darkgray" }
+//            GradientStop { position: 1.0; color: "black" }
+            GradientStop { position: 0.0; color: "darkgray" }
+            GradientStop { position: 1.0; color: "white" }
+        }
+    }
+
+    Label {
+        id: versHMI
+        text: Globals.versionINFO + " : " +  Globals.getActUserRoleText(Globals.actUserRole) //+
+              //" IN: " + Globals.in1Status + Globals.in2Status + Globals.in3Status + Globals.in4Status
+        anchors.verticalCenter: parent.verticalCenter
+        font.pointSize: 10
+        anchors.left: parent.left
+        anchors.leftMargin: 5
+    }
+
+    Text {
+        anchors.right:  parent.right
+        anchors.top: parent.top
+        anchors.topMargin: (parent.height - font.pixelSize) / 2
+        color: "white"
+        text : ""
+        font.pixelSize: 22
+
+        Timer {
+            interval: 500
+            running: true
+            repeat: true
+            triggeredOnStart: true
+            onTriggered: {
+//                parent.text = Qt.formatDateTime(new Date(),Qt.DefaultLocaleShortDate) + " ";
+                parent.text = Qt.formatDateTime(new Date(),Qt.DefaultLocaleLongDate) + " ";
+            }
+        }
+    }
+}

+ 192 - 0
PWD.qml

@@ -0,0 +1,192 @@
+import QtQuick 2.5
+import Qt.labs.controls 1.0
+import QtQuick.Layouts 1.1
+
+import "qrc:/Globals"
+
+Rectangle {
+    property int roleFontSize: 20
+    property int roleRectHeight: 40
+
+    id: root
+    width: parent.width
+    height: parent.height
+    color: "white"
+
+    Flickable {
+        id: flickable
+        anchors.fill: parent
+        contentWidth: content.width
+        contentHeight: content.height
+        interactive: contentHeight > height
+        flickableDirection: Flickable.VerticalFlick
+
+        Item {
+            id: content
+            x: 0
+            y: 0
+            width: flickable.width
+            //============================================================================
+
+            Rectangle {
+                id: rectangle
+                x: 0
+                y: 0
+                width: root.width
+                height: root.height
+                color: "white"
+
+//                Rectangle {
+//                    property string userRole: "oper"
+//                    id: userRoleOperRECT
+//                    x: (parent.width / 17) * 2
+//                    y: (parent.height / 3) / 2
+//                    width: (parent.width / 17) * 3
+//                    height: roleRectHeight
+//                    color: Globals.actUserRole == userRole?Globals.customer_color_base:"lightgray"
+
+//                    border.color: Globals.actUserRole != userRole?Globals.customer_color_base:"lightgray"
+//                    border.width: 3
+
+//                    Label {
+//                        anchors.centerIn: parent
+//                        font.pixelSize: roleFontSize
+//                        text: Globals.getActUserRoleText(parent.userRole)
+//                    }
+
+//                    MouseArea {
+//                        anchors.fill : parent
+
+//                        onClicked: {
+//                            sysinfo.beep();
+//                            Globals.actUserRole = parent.userRole;
+//                            stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+//                        }
+//                    }
+//                }
+
+//                Rectangle {
+//                    property string userRole: "eng"
+//                    id: userRoleEngRECT
+//                    x: (parent.width / 17) * 7
+//                    y: (parent.height / 3) / 2
+//                    width: (parent.width / 17) * 3
+//                    height: roleRectHeight
+//                    color: Globals.actUserRole == userRole?Globals.customer_color_base:"lightgray"
+
+//                    border.color: Globals.actUserRole != userRole?Globals.customer_color_base:"lightgray"
+//                    border.width: 3
+
+//                    Label {
+//                        anchors.centerIn: parent
+//                        font.pixelSize: roleFontSize
+//                        text: Globals.getActUserRoleText(parent.userRole)
+//                    }
+
+//                    MouseArea {
+//                        anchors.fill : parent
+//                        onClicked: {
+//                            sysinfo.beep();
+//                            Globals.actUserRole = parent.userRole;
+//                            if (settings.value("UserRoleEng/Password", "*") === "*") {
+//                                pwdINPUT.focus = false;
+//                                Qt.inputMethod.hide();
+//                                stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+//                            } else {
+//                                pwdINPUT.focus = false;
+//                                pwdINPUT.focus = true;
+//                            }
+//                        }
+//                    }
+//                }
+
+                Rectangle {
+                    property string userRole: "admin"
+                    id: userRoleAdminRECT
+                    x: (parent.width / 17) * 7 //12
+                    y: (parent.height / 3) / 2
+                    width: (parent.width / 17) * 3
+                    height: roleRectHeight
+                    color: Globals.actUserRole == userRole?Globals.customer_color_base:"lightgray"
+
+                    border.color: Globals.actUserRole != userRole?Globals.customer_color_base:"lightgray"
+                    border.width: 3
+
+                    Label {
+                        anchors.centerIn: parent
+                        font.pixelSize: roleFontSize
+                        text: Globals.getActUserRoleText(parent.userRole)
+                    }
+
+                    MouseArea {
+                        anchors.fill : parent
+                        onClicked: {
+                            sysinfo.beep();
+                            Globals.actUserRole = parent.userRole;
+                            if (settings.value("UserRoleAdmin/Password", "*") === "*") {
+                                pwdINPUT.focus = false;
+                                Qt.inputMethod.hide();
+                                stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+                            } else {
+                                pwdINPUT.focus = false;
+                                pwdINPUT.focus = true;
+                            }
+                        }
+                    }
+                }
+
+                Rectangle {
+                    id : pwdRECT
+                    x: (parent.width / 17) * 7
+                    y: (parent.height / 6) * 3
+                    width: (parent.width / 17) * 3
+                    height: 40
+                    radius: 4
+                    color: "silver"
+
+                    TextInput {
+                        id: pwdINPUT
+                        x: (parent.height - font.pixelSize) / 2
+                        y: x
+                        width: parent.width - (parent.height - font.pixelSize)
+                        clip: true
+                        color: "black"
+                        font.pixelSize: 25
+                        echoMode: TextInput.Password
+                        passwordMaskDelay: 250
+                        text: ""
+                        onAccepted: {
+                            console.debug(" TXT " + text + "  " + Qt.md5(text));
+                            if(((settings.value("UserRoleEng/Password", "*") === Qt.md5(text)) && (Globals.actUserRole === "eng")) ||
+                               ((settings.value("UserRoleEng/Password", "*") === "*") && (Globals.actUserRole === "eng")) ) {
+                                focus = false;
+                                Qt.inputMethod.hide();
+                                stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+                            }
+
+                            if(((settings.value("UserRoleAdmin/Password", "*") === Qt.md5(text)) && (Globals.actUserRole === "admin")) ||
+                                ((settings.value("UserRoleAdmin/Password", "*") === "*") && (Globals.actUserRole === "admin")) ) {
+                                focus = false;
+                                Qt.inputMethod.hide();
+                                stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+                            }
+                            text = "";
+                        }
+                    }
+                }
+                Timer {
+                    interval: 1
+                    running: Globals.startTO.length > 0 ? true:false
+                    onTriggered: {
+                        if (Globals.startTO.length > 0) {
+                            stackView.push(Qt.resolvedUrl("HMI_MainMenu.qml"));
+                        }
+                    }
+                }
+
+            }
+            //============================================================================
+
+        }
+    }
+}

+ 68 - 0
PWD_Container.qml

@@ -0,0 +1,68 @@
+import QtQuick 2.0
+import QtQuick.FreeVirtualKeyboard 1.0
+import QtQuick.Window 2.0
+import "qrc:/Globals"
+import "Menu" as Menu
+
+Rectangle {
+    id: root
+    implicitWidth: mainQml.implicitWidth
+    implicitHeight: mainQml.implicitHeight
+
+    Menu.MenuHeader {
+    //: ID:login_headline Login Password Headline
+    headerText: qsTrId("login_headline") + transLoad.emptyString //qsTr("Passwort") + transLoad.emptyString
+    }
+    Menu.MenuStatus {}
+
+    Item {
+        clip: true
+        id: appContainer
+        x: 0
+        y: parent.height / 10.0
+        width: parent.width
+        height: parent.height - 2 * y
+        anchors.centerIn: parent
+        // ***** Body *****
+        PWD {
+            id: mainQml
+            anchors.left: parent.left
+            anchors.top: parent.top
+            anchors.right: parent.right
+            anchors.bottom: inputPanel.top
+
+            Component.onDestruction: {
+                Qt.inputMethod.hide();
+                console.debug("FENSTER ZU !!!");
+            }
+        }
+
+        InputPanel {
+            id: inputPanel
+            z: 99
+            y: appContainer.height
+            anchors.left: parent.left
+            anchors.right: parent.right
+            states: State {
+                name: "visible"
+                when: Qt.inputMethod.visible
+                PropertyChanges {
+                    target: inputPanel
+                    y: appContainer.height - inputPanel.height
+                }
+            }
+            transitions: Transition {
+                from: ""
+                to: "visible"
+                reversible: true
+                ParallelAnimation {
+                    NumberAnimation {
+                        properties: "y"
+                        duration: 150
+                        easing.type: Easing.InOutQuad
+                    }
+                }
+            }
+        }
+    }
+}

+ 42 - 0
Scripts/FactoryReset.sh

@@ -0,0 +1,42 @@
+#!/bin/sh
+# $1 arch
+
+if [ $1 != "x86_64" ]
+  then
+(\
+cat << EOF
+# Configure Loopback
+auto lo
+auto eth0
+auto usb0
+iface lo inet loopback
+#
+#iface eth0 inet dhcp
+iface eth0 inet static
+        address 192.168.0.125
+        netmask 255.255.0.0
+        gateway 192.168.0.1
+        post-up echo "nameserver 192.168.0.1" > /etc/resolv.conf
+#
+iface usb0 inet static
+        address 192.168.7.2
+        netmask 255.255.255.252
+#
+iface wlan0 inet static
+        address 192.168.8.2
+        broadcast 192.168.8.255
+        netmask 255.255.255.0
+#
+EOF
+) > /etc/network/interfaces
+ifdown eth0
+ifup eth0
+fi
+
+# --- ini default settings
+(\
+cat << EOF
+[CAM1SETTINGS]
+IpAddress=192.168.0.10
+EOF
+) > /opt/di-soric/HMI_di-soric.ini

+ 5 - 0
Scripts/FindUpdate.sh

@@ -0,0 +1,5 @@
+#!/bin/sh
+( \
+find /media -type f \( -iname 'GfA-HMI-*.tar.gz' -o -name 'UpdateDisplay001*.sh' \)
+find /GfAUpdate -type f \( -iname 'GfA-HMI-*.tar.gz' -o -name 'UpdateDisplay001*.sh' \) \
+)

+ 16 - 0
Scripts/GETSVG.sh

@@ -0,0 +1,16 @@
+#!/bin/sh
+# $1 URL
+# $2 imageid
+# $3 tmpFilename
+
+# sed 's/.*image xlink.*/\<image x=\"0\" y=\"0\" preserveAspectRatio=\"xMinYMin meet\" width\=\"640\" height\=\"480\"\/\>./' \
+# iconv -f 850 -t UTF-8 - | \
+
+
+/usr/bin/wget http://$1/api/v1/svg/$2 -q -O - |\
+ piconv -f cp850 -t UTF-8  | \
+ xmllint --nonet --format - |\
+ sed '/xml version/d' | \
+ sed '/image xlink/d' | \
+ sed 's/.*\<svg .*/\<svg xmlns=\"http\:\/\/www.w3.org\/2000\/svg\" xmlns\:xlink\=\"http\:\/\/www.w3.org\/1999\/xlink\"  width\=\"640\" height\=\"480\"\>/' \
+  > $3

+ 30 - 0
Scripts/SetTimeDateZone.sh

@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# $1 Timezonename
+# $2 YYYY
+# $3 MM
+# $4 DD
+# $5 HH
+# $6 mm
+# $7 ss
+# $8 arch
+
+#=== Timezone setzen
+cp /usr/share/zoneinfo/$1 /etc/localtime
+echo "$1"
+echo "$1" > /etc/timezone
+#==== Zeit Setzen
+date -s "$2-$3-$4 $5:$6:$7"
+
+if [ $8 != "x86_64" ]
+  then
+  BASEBOARD=`cat /tmp/BASEBOARD`
+
+  if [ "$BASEBOARD" == "DISPLAY001" ]; then
+        /root/gfa_spi -w
+  fi
+
+  if [ "$BASEBOARD" == "DISPLAY002_DI4" ]; then
+        /sbin/hwclock -uw
+  fi
+fi

+ 33 - 0
Scripts/UpdateAndReboot.sh

@@ -0,0 +1,33 @@
+#!/bin/sh
+# $1 Dateiname
+# $2 Wurzelverzeichnis für -C 
+# $3 CpuArchitektur x86_64, arm,.....
+
+
+case $1 in
+
+*.tar.gz)
+    echo ">>>>>>>>>>> Tarfile" >> /tmp/UpdateAndReboot.log
+    if [ $3 != "x86_64" ]
+      then
+      sudo tar -C $2 -xzvf $1
+      echo "sync disks"
+      sync
+      echo "reboot System"
+      reboot
+    fi
+    ;;
+
+    *.sh)
+    echo ">>>>>>>>>>> Scriptfile" >> /tmp/UpdateAndReboot.log
+    if [ $3 != "x86_64" ]
+      then
+      sudo sh $1 >> /tmp/UpdateAndReboot.log
+      echo "sync disks"
+      sync
+      echo "reboot System"
+      reboot
+    fi
+    ;;
+
+esac

+ 252 - 0
SetNetworkInterface.qml

@@ -0,0 +1,252 @@
+import QtQuick 2.5
+import ApplicationLauncher 1.0
+
+
+Item {
+    property string mode: "static"
+    property string ifacename: "eth0"
+    property string address: "192.168.0.125"
+    property string netmask: "255.255.255.0"
+    property string gateway: "192.168.0.10"
+    property string broadcast: ""
+    property string nameserver: "192.168.0.10"
+    property string infile: "/etc/network/interfaces"
+    property string outfile: "/etc/network/interfaces"
+
+    signal cmdDone
+
+
+    function doSetInterface() {
+        setInterface.interfaceMode = "Set";
+        setInterface.launchScript();
+    }
+
+    function doGetInterface() {
+        setInterface.interfaceMode = "Get";
+        setInterface.launchScript();
+    }
+
+    function doRestartNetwork() {
+        worker.appName = "ifconfig eth0 " + address + " netmask " + netmask + " broadcast " + broadcast;
+        worker.arguments = "";
+        worker.launchScript();
+    }
+
+    ApplicationLaunch{
+        id: worker
+        onAppFinished: {
+            console.debug("WorkerDone");
+        }
+
+        onAppStarted: {
+            console.debug("WorkerappStarted :");
+        }
+
+        onAppError: {
+            console.debug("WorkerappError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+
+    }
+
+    ApplicationLaunch {
+        id: writeInterfaces
+        outFName: outfile
+        onAppFinished: {
+            console.debug("IfaceDone");
+        }
+
+        onAppStarted: {
+            console.debug("IFACEappStarted :");
+        }
+
+        onAppError: {
+            console.debug("IFACEappError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+    }
+
+    ApplicationLaunch {
+        property string interfaceMode:""
+
+        id: setInterface
+        appName: "cat"
+        arguments: infile
+
+        onAppFinished: {
+            console.debug("AppFinished :");
+            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+            console.debug("stdERR :" + stdERR);
+            console.debug("stdOUT :" + stdOUT);
+            console.debug("======================================");
+
+            var lines = stdOUT.split(/[\r\n]+/g);
+            var idx = 0;
+            var iface = [];
+            var inIface = 0;
+
+            lines.forEach(function(entry) {
+                if (entry.length > 0) {
+                    if(entry.charAt(0) === '#'){
+                        //console.debug(idx + ":: " + "=======>:" + JSON.stringify(entry));
+                    } else {
+                        if (entry.indexOf("iface") !== -1){ //Interface Entry start
+                            var ifaceEntry = entry.split(" ");
+                            if ((ifaceEntry.length >= 2) && (ifaceEntry[1] === "eth0")) {
+                                //console.debug("++++:::: " + JSON.stringify(ifaceEntry));
+                                iface.push({index: idx, txt: entry});
+                                inIface = 1;
+                            } else {
+                                inIface = 0;
+                            }
+                        } else {
+                            if(inIface === 1) {
+                                //console.debug("++++:::: " + JSON.stringify(idx) + " :: " + JSON.stringify(entry));
+                                iface.push({index: idx, txt: entry.trim()});
+                            }
+                        }
+                    }
+                }
+                ++idx;
+            });
+
+            var interfaceCMD = interfaceMode;
+
+            if (interfaceCMD === "Get"){ // Auslesen der aktuellen Einstellungen
+                console.debug(">>>>>>>>>:: " + JSON.stringify(interfaceCMD));
+                mode = "";
+                address = "";
+                netmask = "";
+                nameserver = "";
+                gateway = "";
+
+                if (iface[0].txt.indexOf("dhcp") !== -1) {
+                    mode = "dhcp";
+                }
+                if (iface[0].txt.indexOf("static") !== -1) {
+                    mode = "static";
+
+                    var i;
+                    var wdata = [];
+                    for ( i = 1; i < iface.length; i++) {
+                        if ( iface[i].txt.indexOf("address") !== -1) {
+                            wdata = [];
+                            wdata = iface[i].txt.split(" ");
+                            address = wdata[1];
+                        }
+
+                        if ( iface[i].txt.indexOf("netmask") !== -1) {
+                            wdata = [];
+                            wdata = iface[i].txt.split(" ");
+                            netmask = wdata[1];
+                        }
+
+                        if ( iface[i].txt.indexOf("gateway") !== -1) {
+                            wdata = [];
+                            wdata = iface[i].txt.split(" ");
+                            gateway = wdata[1];
+                        }
+
+                        if ( iface[i].txt.indexOf("broadcast") !== -1) {
+                            wdata = [];
+                            wdata = iface[i].txt.split(" ");
+                            broadcast = wdata[1];
+                        }
+
+                        if ( iface[i].txt.indexOf("nameserver") !== -1) {
+                            wdata = [];
+                            wdata = iface[i].txt.split(" ");
+                            wdata[3] = wdata[3].replace(/\'/g, '').replace(/\"/g, '');
+                            nameserver = wdata[3];
+                        }
+                    }
+                }
+            }
+
+            if (interfaceCMD === "Set") { // Setzen der Gewälten Einstellungen
+                console.debug(">>>>>>>>>:: " + JSON.stringify(interfaceCMD));
+                lines.splice(iface[0].index, iface[iface.length - 1].index - iface[0].index + 1);
+
+                var insertIdx = iface[0].index;
+                var insertText;
+                if(mode === "static") {
+                    insertText = "iface " + ifacename + " inet " + mode;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+                    insertText = "\taddress " + address;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+                    insertText = "\tnetmask " + netmask;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+                    insertText = "\tgateway " + gateway;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+
+                    //Broadcast Adresse ausrechnen
+                    var wrkAddr = address.split(".");
+                    var ipAddress = new Uint8Array(4);
+                    //var i;
+
+                    for (i = 0; i< 4; i++) {
+                        ipAddress[i] = wrkAddr[i];
+                    }
+
+                    wrkAddr = netmask.split(".");
+                    var ipMask = new Uint8Array(4);
+                    for (i = 0; i< 4; i++) {
+                        ipMask[i] = wrkAddr[i];
+                    }
+
+                    var broadcastUINT = new Uint8Array(4);
+
+                    for (i = 0; i< 4; i++) {
+                        broadcastUINT[i] = ipAddress[i] | (~ipMask[i]);
+                    }
+
+                    var _broadcast = broadcastUINT[0] +"." +
+                            broadcastUINT[1] +"." + broadcastUINT[2] +"." +
+                            broadcastUINT[3];
+
+                    insertText = "\tbroadcast " + _broadcast;
+                    broadcast = _broadcast;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+
+                    insertText = "\tpost-up echo " + "'nameserver "  + nameserver + "' > /etc/resolv.conf";
+                    lines.splice(insertIdx, 0, insertText);
+                } else if (mode === "dhcp") {
+                    insertText = "iface " + ifacename + " inet " + mode;
+                    lines.splice(insertIdx, 0, insertText);
+                    ++insertIdx;
+                }
+
+                var cmd = "echo -e " + "\"";
+                lines.forEach(function(entry){
+                    cmd = cmd + entry + "\\n"
+                    //console.debug(JSON.stringify(entry));
+                });
+
+                cmd = cmd + "\"";
+                writeInterfaces.appName = cmd;
+                writeInterfaces.launchScript();
+            }
+
+            console.debug(">> mode     :: " + JSON.stringify(mode));
+            console.debug(">> address     :: " + JSON.stringify(address));
+            console.debug(">> netmask     :: " + JSON.stringify(netmask));
+            console.debug(">> broadcast     :: " + JSON.stringify(broadcast));
+            console.debug(">> gateway     :: " + JSON.stringify(gateway));
+            console.debug(">> nameserver     :: " + JSON.stringify(nameserver));
+            cmdDone();
+        }
+
+        onAppStarted: {
+            console.debug("appStarted :");
+            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+
+        onAppError: {
+            console.debug("appError : " + exitError + " appStatus : " + exitStatus + " appCode " + exitCode );
+        }
+    }
+
+}

+ 448 - 0
Start.qml

@@ -0,0 +1,448 @@
+import QtQuick 2.5
+import QtWebEngine 1.2
+import QtQuick.Window 2.1
+import QtQuick.Controls 1.4
+import Qt.labs.controls 1.0
+import QtQuick.Layouts 1.1
+import ApplicationLauncher 1.0
+
+import "qrc:/Globals"
+import "Menu" as Menu
+
+import QtQuick.FreeVirtualKeyboard 1.0
+
+Rectangle {
+    property int buttImgBorder: 5 // in percent of parent.height defaults to 20%
+    property string buttCamImage: "/images/LiveMode_Button.svg"
+    property string buttmenuArea: "/images/LockButton.svg"
+    property int buttRadius: 0
+    property bool buttCam1Visible: false
+    property bool buttCam2Visible: false
+    property int camSelected: -1
+    property color buttGradientStart: "darkgray"
+    property color buttGradientStop: "black"
+    property color buttGradientSelectedStart: Globals.customer_color_base
+    property color buttGradientSelectedStop: Globals.customer_color_base
+    property bool menuRightBorder: true
+    property int menuOffset: 115
+
+    function whichCamSet() {
+        var _camSelected = settings.value("COMMON/CamSelected","-");
+        var ret = "0.0.0.0";
+
+        if (_camSelected.toString() === "1") {
+            camSelected = 1;
+            ret = settings.value("CAM1SETTINGS/IpAddress","0.0.0.0");
+        } else if (_camSelected.toString() === "2") {
+            camSelected = 2;
+            ret = settings.value("CAM2SETTINGS/IpAddress","0.0.0.0");
+        }
+
+        if ((_camSelected === "-" ) || (ret === "0.0.0.0")) {
+            if (settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0") {
+                settings.setValue("COMMON/CamSelected", "1");
+                camSelected = 1;
+                ret = settings.value("CAM1SETTINGS/IpAddress","0.0.0.0");
+            } else if (settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0") {
+                settings.setValue("COMMON/CamSelected", "2");
+                camSelected = 2;
+                ret = settings.value("CAM2SETTINGS/IpAddress","0.0.0.0");
+            }
+        }
+
+        buttCam1Visible =  (settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0")?true:false;
+        buttCam2Visible =  (settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0")?true:false;
+
+        return ret;
+    }
+
+    property string camURL : ""
+
+    id: root
+    width: parent.width
+    height: parent.height
+    color: "white"
+
+    Timer {
+        id: urlTIMER
+        interval: 2500
+        running: false
+        repeat: false
+        onTriggered: {
+            testWebsite.appName = "httping -c1 -s -q -G " + camURL;
+            if(menuAREA.z === 1) {
+                testWebsite.launchScript();
+            } else {
+
+            }
+        }
+    }
+
+    CustomBusyIndicator{
+        property alias running: urlchangeBUSY.visible
+
+        id:urlchangeBUSY
+        anchors.centerIn: parent
+        //x: (popupWIN.width - popupWIN.height) / 2
+        width: parent.height * 0.75
+        height: parent.height * 0.75
+        bBgColor: Globals.customer_color_base
+        bLength:50
+        opacity: 0.75
+        visible: false
+    }
+
+    ApplicationLaunch {
+        id: testWebsite
+        arguments: ""
+
+        onAppFinished: {
+            if(exitCode != 0) {
+                console.debug("----> URL Code ", exitCode );
+                mainview.visible = false;
+                mainview.url = "";
+                mainview.url = "xx";
+                urlchangeBUSY.visible = true;
+                urlTIMER.interval = 2500;
+                if(urlTIMER.running == false) {
+                    urlTIMER.restart();
+                }
+            } else {
+                urlTIMER.stop();
+                mainview.url = "";
+                mainview.url = camURL;
+                urlchangeBUSY.visible = false;
+                mainview.visible = true;
+            }
+        }
+    }
+
+    Component.onCompleted: {
+        urlchangeBUSY.visible = true;
+        camURL = whichCamSet();
+
+        testWebsite.appName = "httping -c1 -s -q -G " + camURL;
+        testWebsite.launchScript();
+        console.debug("CAMURL Component.onCompleted :" + camURL);
+    }
+
+    onVisibleChanged: {
+        console.debug("Start.qml onVisible changed :" + visible);
+        if (visible) {
+            if (camURL !== whichCamSet()) {
+                console.debug("CAMURL onVisible changed :" + camURL);
+                camURL = whichCamSet();
+
+                testWebsite.appName = "httping -c1 -s -q -G " + camURL;
+                testWebsite.launchScript();
+                console.debug("CAMURL onVisibleChanged :" + camURL);
+            }
+            mainview.visible = mainview.focus = true
+        } else {
+            mainview.visible = mainview.focus = false
+            Qt.inputMethod.hide();
+        }
+    }
+
+    Flickable {
+        id: flickable
+        anchors.fill: parent
+        contentWidth: root.width
+        contentHeight: root.height
+        interactive: contentHeight > height
+        flickableDirection: Flickable.VerticalFlick
+        clip: true
+
+        Item {
+            id: content
+            x: 0
+            y: 0
+            width: flickable.width
+            //============================================================================
+            Rectangle {
+                id: rectangle
+                x: 0
+                y: 0
+                width: parent.width
+                height: parent.height
+                //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+                WebEngineView {
+                    id: mainview
+                    width: flickable.contentWidth
+                    height: flickable.contentHeight
+                    x: 0
+                    y: 0
+
+                    onCertificateError: {
+                        console.debug("<<<<<<<<<<<<<<<<<<<<<CERT ERROR>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                        console.log(error.description);
+                        error.ignoreCertificateError();
+                    }
+
+                    onVisibleChanged:  {
+                        console.debug("<<<<<<<<<<<<<<<<<<<<<VISIBLECHANGED>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                        console.debug("VISIBLE : " + visible);
+                    }
+
+                    onNewViewRequested: {
+                        console.debug("<<<<<<<<<<<<<<<<<<<<<NEWVIEWREQUESTED>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                        console.debug("MSG : " + message);
+
+                    }
+
+                    onFeaturePermissionRequested:  {
+                        console.debug("<<<<<<<<<<<<<<<<<<<<<FEATUREPERMISSIONREQUEST>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                        console.debug("MSG : " + message);
+                    }
+
+                    onJavaScriptConsoleMessage: {
+                        console.debug("<<<<<<<<<<<<<<<<<<<<<JSConsoleMessage>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                        console.debug("MSG : " + message);
+                    }
+
+                    Component.onCompleted: {
+                        Qt.inputMethod.hide();
+                    }
+
+                } // WebEngineView
+
+                Rectangle {
+                    id: menuHIDDEN
+                    x: 0
+                    y: 0
+                    z: menuAREA.z === 1 ? -1 : 1
+
+                    width: height
+                    height: 60
+                    color: "lightgray"
+                    opacity: 0.05
+                    visible: z === 1 ? true:false
+
+                    MouseArea {
+                        x: parent.x
+                        y: parent.y
+                        width: parent.height
+                        height: parent.width
+
+                        onClicked: {
+                            menuAREA.z = menuAREA.z === -1 ?menuAREA.z = 1: menuAREA.z = -1;
+                            menuAREATimer.start();
+                            sysinfo.beep();
+                        }
+                    }
+                }
+
+                Rectangle {
+                    id: menuAREA
+                    x: menuRightBorder?parent.width - width - menuOffset:menuOffset
+                    y: 0
+                    z: -1
+                    width: height * 4
+                    height: 60
+                    color: "lightgray"
+                    opacity: 0.75
+                    visible: z === 1 ? true:false
+
+                    Rectangle {
+                        x: parent.width - 4 * parent.height
+                        y: parent.y
+                        width: parent.height
+                        height: parent.height
+                        z: menuAREA.z
+                        visible: z === 1 ? true:false
+                        color: "lightgray"
+                        opacity: parent.opacity
+
+                        Image {
+                            anchors.centerIn: parent
+                            fillMode: Image.PreserveAspectFit
+                            source: buttmenuArea
+                            sourceSize.height: parent.height * 0.7 //- parent.height * (buttImgBorder / 100.0)
+                            sourceSize.width: parent.width * 0.7 //- parent.width * (buttImgBorder / 100.0)
+                            visible: parent.visible
+                        }
+                    }
+
+                    MouseArea {
+                        x: parent.width - 4 * parent.height
+                        y: parent.y
+                        z: menuAREA.z
+                        width: parent.height //parent.width - 3 * parent.height
+                        height: parent.height
+
+                        onPressAndHold: {
+                            camURL = whichCamSet();
+
+                            testWebsite.appName = "httping -c1 -s -q -G " + camURL;
+                            testWebsite.launchScript();
+
+                            sysinfo.beep();
+                            sysinfo.beep();
+                            console.debug("RELOAD Website:: " + mainview.url);
+                        }
+                        onClicked: {
+                            stackView.push(Qt.resolvedUrl("PWD_Container.qml"));
+                            sysinfo.beep();
+                        }
+                    }
+
+                    Timer {
+                        interval: 1
+                        running: Globals.startTO.length > 0 ? true:false
+                        onTriggered: {
+                            if (Globals.startTO.length > 0) {
+                                stackView.push(Qt.resolvedUrl("PWD_Container.qml"));
+                            }
+                        }
+                    }
+
+                    Label {
+                        id: xLABEL
+                        x: parent.width - parent.height
+                        y: parent.y
+                        z: menuAREA.z
+
+                        width: parent.height
+                        height: parent.height
+                        opacity: parent.opacity
+                        visible: z === 1 ? true:false
+
+                        font.family: "FontAwesome"
+                        font.bold: false
+                        color: "red"
+                        text: "\uf057" //remove-sign
+
+                        font.pixelSize: parent.height
+                    }
+
+                    Button {
+                        property string in2: Globals.in2Status
+
+                        id: buttonCam2
+                        x: parent.width - 2 * parent.height
+                        y: parent.y
+                        z: menuAREA.z
+
+                        height: parent.height
+                        width: height
+                        opacity: parent.opacity
+                        visible: z === 1 ? buttCam2Visible:false
+                        Image {
+                            anchors.centerIn: parent
+                            fillMode: Image.PreserveAspectFit
+                            source: buttCamImage
+                            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+                            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+                            visible: parent.visible
+                        }
+                        background: Rectangle {
+                            radius: buttRadius
+                            visible: parent.visible
+                            gradient: Gradient {
+                                GradientStop { position:0 ; color: camSelected === 2?buttGradientSelectedStart:buttGradientStart }
+                                GradientStop { position:1 ; color: camSelected === 2?buttGradientSelectedStop:buttGradientStop }
+                            }
+                        }
+                        onClicked: {
+                            if(settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) {
+                                settings.setValue("COMMON/CamSelected", "2");
+                                camSelected = 2;
+                                root.visible = false;
+                                root.visible = true;
+                            }
+                            sysinfo.beep();
+                        }
+
+                        onIn2Changed: {
+                            if((settings.value("CAM2SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) &&
+                                    (Globals.in2Status == "2")){
+                                settings.setValue("COMMON/CamSelected", "2");
+                                camSelected = 2;
+                                root.visible = false;
+                                root.visible = true;
+                            }
+                            sysinfo.beep();
+                        }
+                    }
+
+                    Button {
+                        property string in1: Globals.in1Status
+
+                        id: buttonCam1
+                        x: parent.width - 3 * parent.height
+                        y: parent.y
+                        z: menuAREA.z
+
+                        height: parent.height
+                        width: height
+                        opacity: parent.opacity
+                        visible: z === 1?buttCam1Visible:false
+
+                        Image {
+                            anchors.centerIn: parent
+                            fillMode: Image.PreserveAspectFit
+                            source: buttCamImage
+                            sourceSize.height: parent.height - parent.height * (buttImgBorder / 100.0)
+                            sourceSize.width: parent.width - parent.width * (buttImgBorder / 100.0)
+                            visible: parent.visible
+                        }
+                        background: Rectangle {
+                            radius: buttRadius
+                            visible: parent.visible
+                            gradient: Gradient {
+                                GradientStop { position:0 ; color: camSelected === 1?buttGradientSelectedStart:buttGradientStart }
+                                GradientStop { position:1 ; color: camSelected === 1?buttGradientSelectedStop:buttGradientStop }
+                            }
+                        }
+                        onClicked: {
+                            if(settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) {
+                                settings.setValue("COMMON/CamSelected", "1");
+                                camSelected = 1;
+                                root.visible = false;
+                                root.visible = true;
+                            }
+                            sysinfo.beep();
+                        }
+                        onIn1Changed: {
+                            if((settings.value("CAM1SETTINGS/IpAddress","0.0.0.0") !== "0.0.0.0" ) &&
+                                    (Globals.in1Status == "1")){
+                                settings.setValue("COMMON/CamSelected", "1");
+                                camSelected = 1;
+                                root.visible = false;
+                                root.visible = true;
+                            }
+                            sysinfo.beep();
+                        }
+
+                    }
+
+                    MouseArea {
+                        id: xAREA
+                        x: xLABEL.x
+                        y: xLABEL.y
+                        width: xLABEL.width
+                        height: xLABEL.height
+                        z: menuAREA.z
+
+                        onClicked: {
+                            menuAREA.z = menuAREA.z === 1 ? -1: 1;
+                            //menuAREATimer.start();
+                            sysinfo.beep();
+                        }
+                    }
+                }
+                Timer {
+                    id : menuAREATimer
+                    interval: 15000
+                    running: false
+                    repeat: false
+
+                    onTriggered: {
+                        menuAREA.z = menuAREA.z === 1 ? -1:  1;
+                    }
+                }
+            }
+            //============================================================================
+        }
+    }
+}

+ 62 - 0
Start_Container.qml

@@ -0,0 +1,62 @@
+import QtQuick 2.0
+import QtQuick.FreeVirtualKeyboard 1.0
+import QtQuick.Window 2.0
+
+Rectangle {
+    id: root
+    implicitWidth: mainQml.implicitWidth
+    implicitHeight: mainQml.implicitHeight
+
+    Item {
+        clip: true
+        id: appContainer
+        x: 0
+        y: parent.height
+        width: parent.width
+        height: parent.height
+        anchors.centerIn: parent
+        // ***** Body *****
+
+        Start {
+            id: mainQml
+            anchors.left: parent.left
+            anchors.top: parent.top
+            anchors.right: parent.right
+            anchors.bottom: inputPanel.top
+
+            Component.onDestruction: {
+                Qt.inputMethod.hide();
+                console.debug("Start_Container FENSTER ZU !!!");
+            }
+        }
+
+        InputPanel {
+            id: inputPanel
+            z: 99
+            y: appContainer.height
+            anchors.left: parent.left
+            anchors.right: parent.right
+
+            states: State {
+                name: "visible"
+                when: Qt.inputMethod.visible
+                PropertyChanges {
+                    target: inputPanel
+                    y: appContainer.height - inputPanel.height
+                }
+            }
+            transitions: Transition {
+                from: ""
+                to: "visible"
+                reversible: true
+                ParallelAnimation {
+                    NumberAnimation {
+                        properties: "y"
+                        duration: 150
+                        easing.type: Easing.InOutQuad
+                    }
+                }
+            }
+        }
+    }
+}

+ 67 - 0
UrlInput.qml

@@ -0,0 +1,67 @@
+import QtQuick 2.0
+
+Item {
+    id: urlInput
+    property bool urlvisible: true
+    property double urlwidth: 200
+    property double posX: 0
+    property double posY: 0
+    property color focuscolor: "green"
+    property color urlcolor: "black"
+    property color urlBackColor: "silver"
+    property string url: ""
+    property double urlFontSize: 14
+    property bool isValid: false
+    property int urlRadius: 0
+    property int urlFocus: 0
+    signal keyReturnPressed
+    signal keyUpPressed
+    signal keyDownPressed
+
+    Component.onCompleted: {
+    }
+
+    onUrlFocusChanged: {
+    }
+
+    Rectangle {
+        x: posX
+        y: posY
+        visible: urlInput.urlvisible
+        width: textInput1.width
+        height: textInput1.height
+        radius: urlRadius
+        color: urlBackColor
+    }
+
+    TextInput {
+        id: textInput1
+        x: posX
+        y: posY
+        text: url
+        width: urlwidth
+        font.pixelSize: urlFontSize
+        visible: urlInput.urlvisible
+        focus: (urlInput.urlFocus == 1)?true:false
+        maximumLength: 128
+
+        color: urlcolor
+
+        inputMethodHints: Qt.ImhUrlCharactersOnly
+        Keys.onReleased:  {
+        }
+        Keys.onPressed: {
+            if((event.key == Qt.Key_Enter) || (event.key == Qt.Key_Return))
+            {
+                url = text;
+                keyReturnPressed();
+            }
+        }
+
+        onFocusChanged: {
+            color = (focus) ? focuscolor : urlcolor;
+            if(focus) ipFocus = 1;
+        }
+    }
+
+}

+ 33 - 0
di_soric.h

@@ -0,0 +1,33 @@
+#ifndef DI_SORIC_H
+#define DI_SORIC_H
+#include <QtNetwork>
+#include <QList>
+#include <QTimer>
+#include <QObject>
+
+class Di_Soric : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QStringList cameras READ getCameras NOTIFY camerasChanged)
+
+public:
+    explicit Di_Soric(QObject *parent = 0);
+    QStringList getCameras();
+
+signals:
+    void camerasChanged();
+
+public slots:
+    void processPendingDatagrams();
+    void processTimer();
+
+private:
+      QUdpSocket *udpSocket;
+      QTimer *watchCam;
+      QStringList macList;
+      QStringList camList;
+      QList<long> lastTime;
+
+};
+
+#endif // DI_SORIC_H

+ 85 - 0
images/AdminSettings.svg

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24.99995mm"
+   height="24.99995mm"
+   viewBox="0 0 88.582501 88.582501"
+   id="svg3595"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="AdminSettings.svg">
+  <defs
+     id="defs3597" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="-9.280175"
+     inkscape:cy="50.005535"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1366"
+     inkscape:window-height="693"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3600">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-384.28018,-493.78524)">
+    <g
+       id="g824"
+       transform="matrix(1.25,0,0,-1.25,444.90305,555.24324)">
+      <g
+         id="g4411">
+        <path
+           inkscape:connector-curvature="0"
+           id="path334"
+           style="fill:#559F98;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 403.653,46.339 -70.866,0 0,70.866 70.866,0 0,-70.866 z"
+           transform="translate(-381.2853,-68.0386)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path798"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 0,0 c 0,5.08 4.133,9.212 9.213,9.212 5.08,0 9.212,-4.132 9.212,-9.212 0,-5.08 -4.132,-9.213 -9.212,-9.213 C 4.133,-9.213 0,-5.08 0,0 m 13.396,-9.771 c 3.787,1.628 6.447,5.394 6.447,9.771 0,5.861 -4.769,10.63 -10.63,10.63 C 3.352,10.63 -1.418,5.861 -1.418,0 c 0,-4.382 2.666,-8.151 6.46,-9.776 -6.556,-1.755 -11.569,-7.521 -12.07,-14.57 l -0.054,-0.758 25.19,0 0,1.417 -23.649,0 c 0.907,7.38 7.246,13.055 14.754,13.055 4.717,0 9.05,-2.17 11.888,-5.954 l 1.134,0.85 c -2.244,2.992 -5.347,5.045 -8.839,5.965"
+           transform="translate(-29.4463,32.088896)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path826"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 0,0 c -4.242,0 -7.693,3.451 -7.693,7.694 0,4.243 3.451,7.694 7.693,7.694 4.243,0 7.694,-3.451 7.694,-7.694 C 7.694,3.451 4.243,0 0,0 m 8.762,5.216 c 0.222,0.789 0.35,1.618 0.35,2.478 0,0.86 -0.128,1.689 -0.35,2.478 l 2.275,0.942 -0.814,1.965 -2.272,-0.941 C 7.128,13.606 5.912,14.822 4.444,15.645 L 5.386,17.917 3.421,18.731 2.479,16.455 C 1.689,16.678 0.86,16.806 0,16.806 c -0.859,0 -1.688,-0.128 -2.478,-0.351 l -0.942,2.276 -1.965,-0.814 0.942,-2.272 C -5.912,14.822 -7.128,13.606 -7.95,12.138 l -2.273,0.941 -0.814,-1.965 2.276,-0.942 c -0.222,-0.789 -0.35,-1.618 -0.35,-2.478 0,-0.86 0.128,-1.689 0.35,-2.478 l -2.276,-0.943 0.814,-1.964 2.273,0.941 c 0.822,-1.468 2.038,-2.684 3.507,-3.506 l -0.942,-2.272 1.965,-0.815 0.942,2.276 c 0.79,-0.223 1.619,-0.35 2.478,-0.35 0.86,0 1.689,0.127 2.479,0.35 l 0.942,-2.276 1.965,0.815 -0.942,2.272 C 5.912,0.566 7.128,1.782 7.95,3.25 l 2.273,-0.941 0.814,1.964 -2.275,0.943 z" />
+      </g>
+    </g>
+  </g>
+</svg>

+ 75 - 0
images/BackButton.svg

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="144.49777mm"
+   height="144.49654mm"
+   viewBox="0 0 511.99998 511.9956"
+   id="svg3683"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="BackButton.svg">
+  <defs
+     id="defs3685" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="164.96681"
+     inkscape:cy="184.08878"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1900"
+     inkscape:window-height="925"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3688">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-221.14286,-473.50727)">
+    <g
+       id="g18"
+       transform="matrix(42.526492,0,0,-42.526492,250.97749,729.48397)">
+      <path
+         d="M 0,0 11.338,0"
+         style="fill:none;stroke:#ffffff;stroke-width:0.99199998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         id="path20"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       d="M 492.05575,970.58775 250.97306,729.50506 492.05575,488.42237"
+       style="fill:none;stroke:#ffffff;stroke-width:42.1862793;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+       id="path24"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>

+ 97 - 0
images/CamSettings.svg

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24.99995mm"
+   height="24.99995mm"
+   viewBox="0 0 88.582501 88.582501"
+   id="svg4564"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="CamSettings.svg">
+  <defs
+     id="defs4566" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="56.434105"
+     inkscape:cy="-78.56589"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1366"
+     inkscape:window-height="693"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4569">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-318.56589,-365.21382)">
+    <g
+       id="g816"
+       transform="matrix(1.25,0,0,-1.25,385.43502,424.62669)">
+      <g
+         id="g4364">
+        <path
+           inkscape:connector-curvature="0"
+           id="path386"
+           style="fill:#559F98;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 302.74,143.7 -70.866,0 0,70.866 70.866,0 0,-70.866 z"
+           transform="translate(-285.3693,-167.0357)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path726"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 0,0 -30.437,0 c -1.955,0 -3.544,1.589 -3.544,3.543 l 0,23.515 c 0,1.954 1.589,3.543 3.544,3.543 l 38.942,0 c 1.953,0 3.543,-1.589 3.543,-3.543 l 0,-15.012 -1.418,0 0,15.012 c 0,1.172 -0.953,2.126 -2.125,2.126 l -38.942,0 c -1.173,0 -2.126,-0.954 -2.126,-2.126 l 0,-23.515 c 0,-1.172 0.953,-2.126 2.126,-2.126 L 0,1.417 0,0 Z"
+           transform="translate(-11.3389,6.986796)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path790"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 0,0 c -5.286,0 -9.586,-4.3 -9.586,-9.586 0,-5.286 4.3,-9.586 9.586,-9.586 5.286,0 9.586,4.3 9.586,9.586 C 9.586,-4.3 5.286,0 0,0 m 0,-20.589 c -6.067,0 -11.004,4.936 -11.004,11.003 0,6.067 4.937,11.003 11.004,11.003 6.067,0 11.004,-4.936 11.004,-11.003 0,-6.067 -4.937,-11.003 -11.004,-11.003"
+           transform="translate(-22.3057,31.8735)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path810"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="M 0,0 C -0.979,0 -1.772,0.793 -1.772,1.771 -1.772,2.75 -0.979,3.543 0,3.543 0.978,3.543 1.771,2.75 1.771,1.771 1.771,0.793 0.978,0 0,0"
+           transform="translate(-37.719804,28.3296)" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path818"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           d="m 0,0 c -4.243,0 -7.694,3.452 -7.694,7.694 0,4.243 3.451,7.694 7.694,7.694 4.242,0 7.693,-3.451 7.693,-7.694 C 7.693,3.452 4.242,0 0,0 m 9.111,7.694 c 0,0.86 -0.128,1.689 -0.35,2.478 l 2.276,0.943 -0.814,1.964 L 7.95,12.138 C 7.128,13.606 5.912,14.822 4.443,15.645 L 5.385,17.917 3.42,18.731 2.478,16.456 c -0.79,0.222 -1.619,0.35 -2.478,0.35 -0.86,0 -1.689,-0.128 -2.479,-0.35 l -0.942,2.275 -1.965,-0.814 0.942,-2.272 c -1.469,-0.823 -2.685,-2.039 -3.507,-3.508 l 0,10e-4 -2.272,0.941 -0.814,-1.964 2.275,-0.942 C -8.984,9.384 -9.111,8.555 -9.111,7.694 c 0,-0.861 0.127,-1.69 0.349,-2.479 l -2.275,-0.942 0.814,-1.964 2.272,0.941 0,10e-4 c 0.822,-1.469 2.039,-2.685 3.507,-3.507 l -0.942,-2.273 1.965,-0.814 0.942,2.276 c 0.79,-0.223 1.619,-0.35 2.479,-0.35 0.859,0 1.688,0.127 2.478,0.35 L 3.42,-3.343 5.385,-2.529 4.443,-0.256 C 5.912,0.566 7.128,1.782 7.95,3.25 l 2.273,-0.941 0.814,1.964 -2.276,0.943 c 0.222,0.789 0.35,1.618 0.35,2.478" />
+      </g>
+    </g>
+  </g>
+</svg>

+ 80 - 0
images/HmiSettings.svg

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24.99995mm"
+   height="24.99995mm"
+   viewBox="0 0 88.582501 88.582501"
+   id="svg4510"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="HmiSettings.svg">
+  <defs
+     id="defs4512" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="110.71982"
+     inkscape:cy="-241.42303"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1366"
+     inkscape:window-height="693"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4515">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-264.28018,-202.35667)">
+    <g
+       id="g4317"
+       transform="matrix(1.25,0,0,-1.25,226.72143,470.56417)">
+      <path
+         d="m 100.913,143.7 -70.866,0 0,70.866 70.866,0 0,-70.866 z"
+         style="fill:#559F98;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path126"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 75.1183,174.0225 -37.904,0 c -1.172,0 -2.126,0.954 -2.126,2.126 l 0,27.641 c 0,1.172 0.954,2.126 2.126,2.126 l 47.825,0 c 1.173,0 2.126,-0.954 2.126,-2.126 l 0,-17.721 -1.417,0 0,17.721 c 0,0.391 -0.318,0.709 -0.709,0.709 l -47.825,0 c -0.391,0 -0.709,-0.318 -0.709,-0.709 l 0,-27.641 c 0,-0.391 0.318,-0.709 0.709,-0.709 l 37.904,0 0,-1.417 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path786"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 86.4572,167.0357 c -4.243,0 -7.694,3.452 -7.694,7.694 0,4.243 3.451,7.694 7.694,7.694 4.242,0 7.694,-3.451 7.694,-7.694 0,-4.242 -3.452,-7.694 -7.694,-7.694 m 8.761,5.215 c 0.223,0.789 0.35,1.618 0.35,2.479 0,0.861 -0.127,1.69 -0.35,2.479 l 2.276,0.942 -0.814,1.964 -2.272,-0.941 c -0.823,1.468 -2.039,2.684 -3.508,3.507 l 0.942,2.272 -1.964,0.814 -0.942,-2.276 c -0.79,0.223 -1.619,0.351 -2.479,0.351 -0.86,0 -1.689,-0.128 -2.479,-0.351 l -0.942,2.276 -1.964,-0.814 0.941,-2.272 0.001,0 c -1.469,-0.823 -2.685,-2.039 -3.508,-3.507 l -2.272,0.941 -0.814,-1.964 2.276,-0.942 c -0.223,-0.789 -0.35,-1.618 -0.35,-2.479 0,-0.861 0.127,-1.69 0.35,-2.479 l -2.276,-0.942 0.814,-1.964 2.272,0.941 c 0.823,-1.468 2.039,-2.684 3.508,-3.507 l -0.001,0.001 -0.941,-2.273 1.964,-0.814 0.942,2.276 c 0.79,-0.223 1.619,-0.35 2.479,-0.35 0.86,0 1.689,0.127 2.479,0.35 l 0.942,-2.276 1.964,0.814 -0.942,2.272 c 1.469,0.823 2.685,2.039 3.508,3.507 l 2.272,-0.941 0.814,1.964 -2.276,0.942 z"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path802"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>

+ 71 - 0
images/HomeButton.svg

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="505.07367"
+   height="511.99997"
+   viewBox="0 0 505.07368 511.99996"
+   id="svg4050"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="HomeButton.svg">
+  <defs
+     id="defs4052" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="231.86282"
+     inkscape:cy="-4.3916709"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1093"
+     inkscape:window-height="519"
+     inkscape:window-x="743"
+     inkscape:window-y="96"
+     inkscape:window-maximized="0"
+     units="px" />
+  <metadata
+     id="metadata4055">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-221.74888,-567.79078)">
+    <g
+       id="g318"
+       transform="matrix(47.509517,0,0,-47.509517,238.591,827.25394)">
+      <path
+         d="M 0,0 4.961,4.96 9.922,0 9.922,-4.961 0,-4.961 0,0 Z"
+         style="fill:none;stroke:#ffffff;stroke-width:0.70899999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         id="path320"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>

BIN
images/Icon Home 24x24 Rev003.png


BIN
images/Icon Lock 24x24 Rev003.png


BIN
images/Icon Undo 24x24 Rev003.png


+ 86 - 0
images/LiveMode_Button.svg

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="88"
+   height="65"
+   viewBox="0 0 87.999997 64.999998"
+   id="svg4624"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="LiveMode_Button.svg">
+  <defs
+     id="defs4626" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.3763722"
+     inkscape:cx="18.683505"
+     inkscape:cy="34.052484"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1768"
+     inkscape:window-height="918"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     units="px" />
+  <metadata
+     id="metadata4629">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-321.42304,-395.93918)">
+    <path
+       inkscape:connector-curvature="0"
+       id="path438"
+       style="fill:#000000;fill-opacity:0;fill-rule:nonzero;stroke:none"
+       d="m 409.42304,460.93918 -88,0 0,-65 88,0 0,65 z" />
+    <g
+       id="g5577"
+       transform="matrix(2.1396269,0,0,2.3099367,-459.84108,-594.27579)">
+      <path
+         d="m 371.23159,433.28758 c -0.48553,0 -0.87918,0.39638 -0.87918,0.88376 l 0,17.66641 c 0,0.48738 0.39365,0.88376 0.87918,0.88376 l 28.7646,0 c 0.48554,0 0.88042,-0.39638 0.88042,-0.88376 l 0,-17.66641 c 0,-0.48738 -0.39488,-0.88376 -0.88042,-0.88376 l -28.7646,0 z m 28.7646,21.2002 -28.7646,0 c -1.45536,0 -2.64002,-1.1879 -2.64002,-2.65003 l 0,-17.66641 c 0,-1.46088 1.18466,-2.65003 2.64002,-2.65003 l 28.7646,0 c 1.45661,0 2.64127,1.18915 2.64127,2.65003 l 0,17.66641 c 0,1.46213 -1.18466,2.65003 -2.64127,2.65003"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path762"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 385.61389,435.52613 c -4.10036,0 -7.44944,3.36302 -7.44944,7.47891 0,4.11589 3.34908,7.4789 7.44944,7.4789 4.10036,0 7.45068,-3.36301 7.45068,-7.4789 0,-4.11589 -3.35032,-7.47891 -7.45068,-7.47891 m 0,1.76627 c 3.13798,0 5.69108,2.56277 5.69108,5.71264 0,3.14862 -2.5531,5.71139 -5.69108,5.71139 -3.13674,0 -5.68984,-2.56277 -5.68984,-5.71139 0,-3.14987 2.5531,-5.71264 5.68984,-5.71264"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path766"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 375.70026,437.32893 c 0,0.68806 -0.55632,1.24648 -1.24178,1.24648 -0.68546,0 -1.24178,-0.55842 -1.24178,-1.24648 0,-0.68806 0.55632,-1.24648 1.24178,-1.24648 0.68546,0 1.24178,0.55842 1.24178,1.24648"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path770"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>

+ 75 - 0
images/LockButton.svg

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   enable-background="new 0 0 48 48"
+   height="512"
+   version="1.1"
+   viewBox="0 0 384 512"
+   width="384"
+   xml:space="preserve"
+   id="svg2"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="LockButton.svg"><metadata
+     id="metadata27"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs25" /><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1595"
+     inkscape:window-height="672"
+     id="namedview23"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="152.13559"
+     inkscape:cy="256.00002"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" /><g
+     id="Expanded"
+     style="fill:#ffffff"
+     transform="matrix(10.666667,0,0,10.666667,-64.000002,0)"><g
+       id="g5"
+       style="fill:#ffffff"><g
+         id="g7"
+         style="fill:#ffffff"><circle
+           cx="24"
+           cy="30"
+           r="2"
+           id="circle9"
+           style="fill:#ffffff" /></g><g
+         id="g11"
+         style="fill:#ffffff"><path
+           d="m 24,38 c -0.553,0 -1,-0.447 -1,-1 l 0,-6 c 0,-0.553 0.447,-1 1,-1 0.553,0 1,0.447 1,1 l 0,6 c 0,0.553 -0.447,1 -1,1 z"
+           id="path13"
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0" /></g><g
+         id="g15"
+         style="fill:#ffffff"><path
+           d="M 42,48 6,48 6,18 42,18 42,48 Z M 8,46 40,46 40,20 8,20 8,46 Z"
+           id="path17"
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0" /></g><g
+         id="g19"
+         style="fill:#ffffff"><path
+           d="m 36,19 -2,0 0,-7 C 34,6.486 29.514,2 24,2 18.486,2 14,6.486 14,12 l 0,7 -2,0 0,-7 C 12,5.383 17.383,0 24,0 30.617,0 36,5.383 36,12 l 0,7 z"
+           id="path21"
+           style="fill:#ffffff"
+           inkscape:connector-curvature="0" /></g></g></g></svg>

+ 87 - 0
images/Logo_Gfa.svg

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Ebene_1"
+   x="0px"
+   y="0px"
+   width="550px"
+   height="272px"
+   viewBox="0 0 550 272"
+   enable-background="new 0 0 550 272"
+   xml:space="preserve"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="Logo_Gfa.svg"><metadata
+     id="metadata25"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+     id="defs23" /><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1617"
+     inkscape:window-height="816"
+     id="namedview21"
+     showgrid="false"
+     inkscape:zoom="1.1570838"
+     inkscape:cx="402.25654"
+     inkscape:cy="136"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Ebene_1"><inkscape:grid
+       type="xygrid"
+       id="grid3353" /></sodipodi:namedview><text
+     id="text5"
+     x="314.78519"
+     y="147.375"
+     style="-inkscape-font-specification:'DejaVu Sans, Normal';font-family:'DejaVu Sans';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:16.25px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%;"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3364">Gesellschaft für</tspan></text>
+<rect
+     style="fill:#696969"
+     id="rect11"
+     height="149.17799"
+     width="2.5209999"
+     y="59.282001"
+     x="296.32001" /><polygon
+     style="fill:#559f98"
+     id="polygon13"
+     points="56.271,145.239 56.294,145.258 84.229,108.908 "
+     transform="translate(18,-2)" /><polygon
+     style="fill:#696969"
+     id="polygon15"
+     points="169.722,83.008 158.694,97.36 237.965,200.416 260.016,200.416 "
+     transform="translate(18,-2)" /><path
+     style="fill:#008080"
+     inkscape:connector-curvature="0"
+     id="path17"
+     d="m 154.94,76.846 c 5.326,0 9.658,2.668 12.363,6.308 l 6.223,8.09 11.029,-14.353 -4.16,-5.409 c -5.727,-7.38 -14.974,-12.199 -25.456,-12.199 -10.474,0 -19.718,4.814 -25.445,12.188 l -27.267,35.438 -27.934,36.35 -0.023,-0.019 -42.454,55.177 22.14,0 35.488,-46.146 84.077,0 0,-17.564 -70.57,0 39.965,-51.967 c 2.438,-3.529 6.913,-5.894 12.024,-5.894 z" /><path
+     style="fill:#696969"
+     inkscape:connector-curvature="0"
+     id="path19"
+     d="m 88.43,180.854 c -28.624,0 -51.912,-23.287 -51.912,-51.91 0,-28.626 23.288,-51.913 51.912,-51.913 9.196,0 17.836,2.415 25.336,6.627 L 124.568,69.6 c -10.529,-6.426 -22.9,-10.131 -36.139,-10.131 -38.369,0 -69.474,31.104 -69.474,69.475 0,38.367 31.104,69.473 69.474,69.473 28.27,0 52.578,-16.894 63.424,-41.13 l -19.968,0 c -9.277,14.175 -25.285,23.567 -43.455,23.567 z" /><text
+     id="text5-4"
+     x="315.04071"
+     y="163.99344"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.25px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3362"
+       x="315.04071"
+       y="163.99344">Automatisierungstechnik</tspan></text>
+</svg>

+ 17 - 0
images/Logo_Gfa_.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="480px" height="272px" viewBox="0 0 480 272" enable-background="new 0 0 480 272" xml:space="preserve">
+<g>
+	<polygon fill="#559F98" points="154.292,95.347 102.492,162.663 102.534,162.697 	"/>
+	<polygon fill="#696969" points="312.699,47.358 292.266,73.949 439.144,264.897 480,264.897 	"/>
+	<path fill="#008080" d="M251.96,39.646c9.867,0,17.895,4.943,22.906,11.687l11.531,14.99l20.437-26.594l-7.708-10.022
+		C288.514,16.032,271.381,7.103,251.96,7.103c-19.406,0-36.536,8.921-47.147,22.584l-50.521,65.66l-51.758,67.351l-0.042-0.034
+		L23.831,264.897h41.022l65.754-85.501h155.783v-32.543H155.634l74.05-96.287C234.198,44.028,242.488,39.646,251.96,39.646z"/>
+	<path fill="#696969" d="M128.724,232.357c-53.035,0-96.184-43.147-96.184-96.183c0-53.04,43.149-96.187,96.184-96.187
+		c17.04,0,33.049,4.475,46.945,12.279l20.016-26.048c-19.508-11.906-42.431-18.771-66.96-18.771C57.632,7.448,0,65.081,0,136.175
+		c0,71.09,57.632,128.723,128.724,128.723c52.381,0,97.419-31.302,117.517-76.208h-36.999
+		C192.053,214.955,162.392,232.357,128.724,232.357z"/>
+</g>
+</svg>

BIN
images/Systemhaus Schmadl Transparent HQ.png


+ 41 - 0
images/UndoButton.svg

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 61.5 61.5" style="enable-background:new 0 0 61.5 61.5;" xml:space="preserve" width="512px" height="512px">
+<g>
+	<g id="group-30svg">
+		<path id="path-1_22_" d="M33.647,58.623c-0.828,0-1.5-0.672-1.5-1.501c0-0.829,0.672-1.501,1.5-1.501    c1.577,0,3.154-0.148,4.688-0.441c0.808-0.156,1.599,0.378,1.755,1.193c0.155,0.814-0.379,1.6-1.193,1.756    C37.178,58.457,35.412,58.623,33.647,58.623z M43.407,56.756c-0.596,0-1.159-0.358-1.393-0.945    c-0.307-0.77,0.068-1.643,0.838-1.951c1.455-0.581,2.863-1.305,4.185-2.153c0.698-0.447,1.626-0.244,2.072,0.454    c0.448,0.698,0.244,1.626-0.453,2.074c-1.482,0.95-3.061,1.762-4.693,2.414C43.781,56.721,43.593,56.756,43.407,56.756z     M51.775,51.391c-0.396,0-0.793-0.157-1.088-0.468c-0.57-0.601-0.545-1.551,0.056-2.122c1.138-1.08,2.18-2.274,3.098-3.551    c0.484-0.673,1.424-0.825,2.094-0.341c0.672,0.484,0.825,1.422,0.341,2.095c-1.027,1.428-2.194,2.766-3.468,3.975    C52.518,51.255,52.146,51.391,51.775,51.391z M57.575,43.315c-0.211,0-0.425-0.045-0.629-0.139    c-0.752-0.348-1.079-1.24-0.731-1.993c0.658-1.422,1.182-2.917,1.56-4.442c0.2-0.804,1.006-1.296,1.818-1.096    c0.803,0.199,1.294,1.013,1.094,1.818c-0.423,1.71-1.012,3.386-1.75,4.981C58.684,42.992,58.142,43.315,57.575,43.315z     M59.963,33.663c-0.027,0-0.053-0.001-0.079-0.002c-0.827-0.043-1.463-0.75-1.42-1.578c0.023-0.442,0.035-0.901,0.036-1.349    c0.002-0.828,0.673-1.511,1.5-1.511c0.001,0,0.002,0,0.003,0c0.828,0,1.499,0.688,1.497,1.517    c-0.001,0.499-0.015,1.001-0.04,1.494C61.418,33.035,60.756,33.663,59.963,33.663z" fill="#FFFFFF"/>
+		<path id="path-2_21_" d="M60,32.251c-0.828,0-1.5-0.672-1.5-1.501c0-13.714-11.148-24.871-24.853-24.871    c-12.399,0-22.989,9.259-24.632,21.536c-0.11,0.822-0.87,1.399-1.686,1.289c-0.821-0.11-1.397-0.865-1.287-1.687    c1.842-13.762,13.709-24.14,27.605-24.14C49.006,2.877,61.5,15.381,61.5,30.75C61.5,31.579,60.828,32.251,60,32.251z" fill="#FFFFFF"/>
+		<path id="path-3_20_" d="M6.881,21.383l-4.669-1.488c-1.106-0.353-2.287,0.531-2.208,1.689c0.018,0.276,0.082,0.589,0.217,0.85    l4.253,8.231c0.426,0.828,1.445,1.147,2.271,0.72l8.231-4.264c0.261-0.136,0.488-0.337,0.663-0.551    c0.733-0.9,0.281-2.305-0.825-2.658l-4.921-1.568L6.881,21.383z" fill="#FFFFFF"/>
+	</g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>

BIN
images/di-soric-header.png


BIN
images/di-soric-logo.png


+ 124 - 0
images/di-soric.svg

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   xml:space="preserve"
+   width="707.22498"
+   height="104.375"
+   viewBox="0 0 707.22498 104.375"
+   sodipodi:docname="di-soric.svg"><metadata
+     id="metadata8"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs6" /><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="640"
+     inkscape:window-height="480"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="0.63628975"
+     inkscape:cx="353.61249"
+     inkscape:cy="52.1875"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="g10" /><g
+     id="g10"
+     inkscape:groupmode="layer"
+     inkscape:label="ink_ext_XXXXXX"
+     transform="matrix(1.25,0,0,-1.25,0,104.375)"><g
+       id="g12"
+       transform="scale(0.1,0.1)"><path
+         d="m 1853.66,710.488 232.66,0 0,132.473 -232.66,0 0,-132.473 z"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path14"
+         inkscape:connector-curvature="0" /><path
+         d="m 1853.66,81.9453 232.66,0 0,522.434 -232.66,0 0,-522.434 z"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path16"
+         inkscape:connector-curvature="0" /><path
+         d="m 5665.73,415.523 c -3.73,31.887 -10.92,56.184 -23.5,79.348 -56.39,107.645 -206.96,130.211 -323.39,130.211 -115.04,0 -382.64,-27.894 -382.64,-286.844 0,-182.336 130.54,-274.7966 388.18,-274.7966 61.23,0 212.6,8.9844 295.16,92.5976 34.4,34.879 52.12,78.684 52.59,130.34 l -227.87,0 c -9.66,-66.703 -55.24,-107.84 -119.88,-107.84 -89.88,0 -143.53,59.309 -143.53,158.699 0,129.145 73.16,175.008 135.79,175.008 67.18,0 112.97,-38.609 123.23,-103.512 l 226.99,0 c -0.07,0.332 -0.14,0.598 -0.14,0.93 -0.25,1.93 -0.52,3.859 -0.99,5.859"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path18"
+         inkscape:connector-curvature="0" /><path
+         d="m 0,623.75 225.602,0 0,225.668 L 0,849.418 0,623.75 Z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path20"
+         inkscape:connector-curvature="0" /><path
+         d="m 273.531,623.75 225.602,0 0,225.668 -225.602,0 0,-225.668 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path22"
+         inkscape:connector-curvature="0" /><path
+         d="m 547.063,623.75 225.535,0 0,225.668 -225.535,0 0,-225.668 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path24"
+         inkscape:connector-curvature="0" /><path
+         d="m 0,350.285 225.602,0 0,225.602 -225.602,0 0,-225.602 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path26"
+         inkscape:connector-curvature="0" /><path
+         d="m 273.531,350.285 225.602,0 0,225.602 -225.602,0 0,-225.602 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path28"
+         inkscape:connector-curvature="0" /><path
+         d="m 547.063,350.285 225.602,0 0,225.602 -225.602,0 0,-225.602 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path30"
+         inkscape:connector-curvature="0" /><path
+         d="m 0,76.7539 225.602,0 0,225.668 -225.602,0 0,-225.668 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path32"
+         inkscape:connector-curvature="0" /><path
+         d="m 273.531,76.7539 225.602,0 0,225.668 -225.602,0 0,-225.668 z"
+         style="fill:#7b7c80;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path34"
+         inkscape:connector-curvature="0" /><path
+         d="M 547.063,77.1523 759.016,0 836.172,212.02 624.148,289.176 547.063,77.1523"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path36"
+         inkscape:connector-curvature="0" /><path
+         d="m 1393.88,176.34 c -95.33,0 -137.99,80.816 -137.99,160.832 0,110.57 51.12,173.941 140.19,173.941 69.03,0 143.39,-50.988 143.39,-163.023 0,-118.027 -75.42,-171.75 -145.59,-171.75 z m 370.73,-94.3283 0,757.6873 -230.53,0 0,-289.109 -8.39,7.125 c -59.31,50.058 -115.5,69.562 -200.44,69.562 -186.79,0 -307.48,-115.097 -307.48,-293.367 1,-172.547 111.11,-271.535 302.02,-271.535 85.81,0 153.44,25.8281 206.63,79.082 l 8.72,8.723 0,-68.1683 229.47,0"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path38"
+         inkscape:connector-curvature="0" /><path
+         d="m 2172.6,315.07 359.605,0 0,145.586 -359.605,0 0,-145.586 z"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path40"
+         inkscape:connector-curvature="0" /><path
+         d="M 2725.39,82.7461 C 2784.1,61.375 2874.1,56.918 2939.21,56.918 c 287.38,0 318.4,122.883 318.4,175.738 0,122.024 -145.98,148.715 -263.28,170.153 -84.75,15.511 -151.7,27.757 -151.7,70.562 0,23.699 13.58,51.922 78.08,51.922 53.05,0 85.8,-10.984 94.79,-66.434 l 218.14,0 0,7.989 c 0.6,39.808 -11.59,72.558 -36.07,97.457 -42.54,43.133 -121.7,64.105 -242.05,64.105 -272.13,0 -329.25,-93.797 -329.25,-172.48 0,-126.614 138.59,-148.782 249.96,-166.688 81.56,-13.051 151.98,-24.297 151.98,-72.961 0,-50.793 -72.16,-56.25 -103.1,-56.25 -23.91,0.532 -67.5,5.324 -92.08,31.289 -12.44,13.246 -18.37,30.153 -17.64,50.258 l 0,0.133 -208.42,0 c 5.18,-87.473 35.55,-127.945 118.42,-158.9649"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path42"
+         inkscape:connector-curvature="0" /><path
+         d="m 3831.7,342.629 c 0,-88.203 -45.07,-176.008 -145.65,-176.008 l -5.07,-0.066 c -90.79,2.465 -144.85,69.5 -144.85,180.468 0,79.215 37.55,171.747 143.39,171.747 95.26,0 152.18,-65.836 152.18,-176.141 z m -535.94,-4.324 c 0,-184.532 135.72,-278.1253 403.34,-278.1253 180.27,0 372.9,75.3553 372.9,286.8433 -1.26,261.082 -292.43,282.45 -381.62,282.45 l -5.07,0 c -258.48,-1.262 -389.55,-99.254 -389.55,-291.168"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path44"
+         inkscape:connector-curvature="0" /><path
+         d="m 4594.18,445.41 -1.01,164.492 c -11.24,0.934 -22.7,1.797 -34.15,1.797 -87.8,-1.133 -147.38,-34.547 -187.32,-105.242 l -9.72,-17.242 1.2,116.297 -245.3,0 c 6.32,-92 7.26,-183.797 7.26,-269.407 0,-43.734 -0.34,-87.203 -0.61,-130.542 -0.19,-41.27 -0.46,-82.411 -0.53,-123.6177 l 234.92,-1.0625 c -0.07,27.0232 -0.87,53.1212 -1.65,78.4842 -0.81,26.957 -1.61,54.852 -1.61,83.809 0,37.211 1.47,76.023 12.25,108.375 32.42,91.73 151.64,93.859 226.27,93.859"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path46"
+         inkscape:connector-curvature="0" /><path
+         d="m 4652.02,710.488 232.727,0 0,132.473 -232.727,0 0,-132.473 z"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path48"
+         inkscape:connector-curvature="0" /><path
+         d="m 4652.02,81.9453 232.727,0 0,522.434 -232.727,0 0,-522.434 z"
+         style="fill:#00adef;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         id="path50"
+         inkscape:connector-curvature="0" /></g></g></svg>

+ 270 - 0
main.cpp

@@ -0,0 +1,270 @@
+#include <QObject>
+#include <QDebug>
+#include <QSysInfo>
+#include <QFile>
+#include <QDir>
+#include <QScreen>
+#include <QQuickView>
+#include <QQuickItem>
+#include <QtGui/QGuiApplication>
+#include <QtQml/QQmlApplicationEngine>
+#include <QSettings>
+#include <QtWebEngine/qtwebengineglobal.h>
+#include <QFont>
+#include <QFontDatabase>
+#include <QtQml>
+#include <QEvent>
+#include <QKeyEvent>
+
+// Settings Wrapper damit auch aus QML vernünftig auf das INI File zugegriffen werden kann
+#include "settings.h"
+
+#include "transload.h"
+#include "sysinfo.h"
+
+class kbdEventFilter: public QObject
+{
+public:
+    QObject *mGlobals = NULL;
+    kbdEventFilter(QObject *glob):QObject() {mGlobals = glob;}
+    ~kbdEventFilter(){}
+
+    bool eventFilter(QObject *object, QEvent *event) {
+        switch(event->type())
+        {
+        static char F1 = 0, F2 = 0, F3 = 0, F4 = 0;
+
+        case QEvent::KeyPress:
+        {
+            QKeyEvent *KeyEvent = static_cast<QKeyEvent *>(event);
+            if ( KeyEvent->isAutoRepeat() == false) {
+                //qDebug() << "keypress";
+                int keyv = KeyEvent->key();
+                switch(keyv) {
+
+                case Qt::Key_F1:
+                    if (!F1) {
+                        qDebug() << "+F1";
+                        F1 = 1;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in1Status", "1");
+                        }
+                    }
+                    break;
+                case Qt::Key_F2:
+                    if (!F2) {
+                        qDebug() << "+F2";
+                        F2 = 1;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in2Status", "2");
+                        }
+                    }
+                    break;
+                case Qt::Key_F3:
+                    if(!F3) {
+                        qDebug() << "+F3";
+                        F3 = 1;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in3Status", "3");
+                        }
+                    }
+                    break;
+                case Qt::Key_F4:
+                    if(!F4) {
+                        qDebug() << "+F4";
+                        F4 = 1;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in4Status", "4");
+                        }
+                    }
+                    break;
+                default:
+                    qDebug() << "???? " << keyv;
+                    break;
+                }
+            }
+        }
+            break;
+
+        case QEvent::KeyRelease:
+        {
+
+            QKeyEvent *KeyEvent = static_cast<QKeyEvent *>(event);
+            if ( KeyEvent->isAutoRepeat() == false) {
+                //qDebug() << "keyrelease";
+                int keyv = KeyEvent->key();
+                switch(keyv) {
+                case Qt::Key_F1:
+                    if(F1){
+                        qDebug() << "-F1";
+                        F1 = 0;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in1Status", "-");
+                        }
+                    }
+                    break;
+                case Qt::Key_F2:
+                    if(F2){
+                        qDebug() << "-F2";
+                        F2 = 0;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in2Status", "-");
+                        }
+                    }
+                    break;
+                case Qt::Key_F3:
+                    if(F3){
+                        qDebug() << "-F3";
+                        F3 = 0;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in3Status", "-");
+                        }
+                    }
+                    break;
+                case Qt::Key_F4:
+                    if(F4){
+                        qDebug() << "-F4";
+                        F4 = 0;
+                        if(mGlobals != NULL) {
+                            mGlobals->setProperty("in4Status", "-");
+                        }
+                    }
+                    break;
+                default:
+                    //qDebug() << "???? " << keyv;
+                    break;
+                }
+            }
+        }
+            break;
+
+        default:
+            //qDebug() << "EV :: " << event->type();
+            break;
+        }
+
+        return QObject::eventFilter(object, event);
+    }
+};
+
+//--------------------------------------------------------
+
+
+
+int main(int argc, char *argv[])
+{
+    // Load virtualkeyboard input context plugin
+    qputenv("QT_IM_MODULE", QByteArray("QtFreeVirtualKeyboard"));
+    QGuiApplication app(argc, argv);
+    QtWebEngine::initialize();
+
+
+    qDebug() << QSysInfo::kernelVersion() << " CPU Arc " << QSysInfo::currentCpuArchitecture();
+
+    QQmlApplicationEngine appEngine;
+    //transload klasse in QML Context
+    TransLoad transLoad;
+    appEngine.rootContext()->setContextProperty("transLoad", &transLoad);
+    SysInfo sysinfo;
+    appEngine.rootContext()->setContextProperty("sysinfo", &sysinfo);
+
+    // IniFileformat und Pfad setzen
+    //Settings settings(QSettings::IniFormat, baseDir + "/GfA-Browser.ini" );
+    Settings settings(QSettings::IniFormat, "/opt/GfA-Browser/GfA-Browser.ini" );
+    // settings Klasse für QML exportieren
+    appEngine.rootContext()->setContextProperty("settings", &settings);
+
+    appEngine.load(QUrl("qrc:/Main.qml"));
+
+    QQuickWindow *item = (QQuickWindow *)appEngine.rootObjects().first();
+    QSize availSize = app.primaryScreen()->availableSize();
+
+    if(QSysInfo::currentCpuArchitecture() == "x86_64") {
+        item->setProperty("width", 800);
+        item->setProperty("height", 480);
+        //        item->setProperty("width", 1280);
+        //        item->setProperty("height", 800);
+    } else {
+        item->setProperty("width", availSize.width());
+        item->setProperty("height", availSize.height());
+    }
+    item->setProperty("visibilty", "FullScreen");
+    QObject *glob = qvariant_cast<QObject *>(appEngine.rootObjects().first()->property("glob"));
+
+    QString baseDir =  QQmlProperty::read(glob, "baseDir").toString();
+    qDebug() << baseDir;
+
+
+    //======================================================
+    // Logos prüfen in baseDir [Logo_Splash|Logo_Menu].[svg|png|jpg]
+    // ugly boilerplate
+    if(!QFile(baseDir + "/Logo_Splash.svg").exists()) {
+        if(!QFile(baseDir + "/Logo_Splash.png").exists()) {
+            if(!QFile(baseDir + "/Logo_Splash.jpg").exists()) {
+            } else {
+                glob->setProperty("logoSplash", "file://" + baseDir + "/Logo_Splash.jpg");
+            }
+        } else {
+            glob->setProperty("logoSplash", "file://" + baseDir + "/Logo_Splash.png");
+        }
+    } else {
+        glob->setProperty("logoSplash", "file://" + baseDir + "/Logo_Splash.svg");
+    }
+
+    if(!QFile(baseDir + "/Logo_Menu.svg").exists()) {
+        if(!QFile(baseDir + "/Logo_Menu.png").exists()) {
+            if(!QFile(baseDir + "/Logo_Menu.jpg").exists()) {
+            } else {
+                glob->setProperty("logoMenu", "file://" + baseDir + "/Logo_Menu.jpg");
+            }
+        } else {
+            glob->setProperty("logoMenu", "file://" + baseDir + "/Logo_Menu.png");
+        }
+    } else {
+        glob->setProperty("logoMenu", "file://" + baseDir + "/Logo_Menu.svg");
+    }
+    // =====================================================================================
+    // Scriptordner erstellen und Script(e) kopieren
+    if (!QDir(baseDir).exists()) {
+        QDir().mkdir(baseDir);
+    }
+
+    if (!QDir(baseDir + "/Scripts").exists()) {
+        QDir().mkdir(baseDir + "/Scripts");
+    }
+
+    QFile::remove(baseDir + "/Scripts/GETSVG.sh");
+    QFile::copy(":/Scripts/GETSVG.sh", baseDir + "/Scripts/GETSVG.sh");
+    QFile::setPermissions(baseDir + "/Scripts/GETSVG.sh",
+                          QFileDevice::ExeOwner|QFileDevice::ReadOwner|QFileDevice::WriteOwner |
+                          QFileDevice::ExeGroup|QFileDevice::ReadGroup|QFileDevice::WriteGroup |
+                          QFileDevice::ReadOther);
+    QFile::remove(baseDir + "/Scripts/UpdateAndReboot.sh");
+    QFile::copy(":/Scripts/UpdateAndReboot.sh", baseDir + "/Scripts/UpdateAndReboot.sh");
+    QFile::setPermissions(baseDir + "/Scripts/UpdateAndReboot.sh",
+                          QFileDevice::ExeOwner|QFileDevice::ReadOwner|QFileDevice::WriteOwner |
+                          QFileDevice::ExeGroup|QFileDevice::ReadGroup|QFileDevice::WriteGroup |
+                          QFileDevice::ReadOther);
+    QFile::remove(baseDir + "/Scripts/SetTimeDateZone.sh");
+    QFile::copy(":/Scripts/SetTimeDateZone.sh", baseDir + "/Scripts/SetTimeDateZone.sh");
+    QFile::setPermissions(baseDir + "/Scripts/SetTimeDateZone.sh",
+                          QFileDevice::ExeOwner|QFileDevice::ReadOwner|QFileDevice::WriteOwner |
+                          QFileDevice::ExeGroup|QFileDevice::ReadGroup|QFileDevice::WriteGroup |
+                          QFileDevice::ReadOther);
+    QFile::remove(baseDir + "/Scripts/FactoryReset.sh");
+    QFile::copy(":/Scripts/FactoryReset.sh", baseDir + "/Scripts/FactoryReset.sh");
+    QFile::setPermissions(baseDir + "/Scripts/FactoryReset.sh",
+                          QFileDevice::ExeOwner|QFileDevice::ReadOwner|QFileDevice::WriteOwner |
+                          QFileDevice::ExeGroup|QFileDevice::ReadGroup|QFileDevice::WriteGroup |
+                          QFileDevice::ReadOther);
+    QFile::remove(baseDir + "/Scripts/FindUpdate.sh");
+    QFile::copy(":/Scripts/FindUpdate.sh", baseDir + "/Scripts/FindUpdate.sh");
+    QFile::setPermissions(baseDir + "/Scripts/FindUpdate.sh",
+                          QFileDevice::ExeOwner|QFileDevice::ReadOwner|QFileDevice::WriteOwner |
+                          QFileDevice::ExeGroup|QFileDevice::ReadGroup|QFileDevice::WriteGroup |
+                          QFileDevice::ReadOther);
+
+    app.installEventFilter(new kbdEventFilter(glob));
+
+    return app.exec();
+}

+ 82 - 0
resources.qrc

@@ -0,0 +1,82 @@
+<RCC>
+    <qresource prefix="/">
+        <file>Main.qml</file>
+        <file>HMI_SettingsContainer.qml</file>
+        <file>images/Icon Home 24x24 Rev003.png</file>
+        <file>images/Icon Lock 24x24 Rev003.png</file>
+        <file>images/Icon Undo 24x24 Rev003.png</file>
+        <file>images/di-soric-logo.png</file>
+        <file>images/HmiSettings.svg</file>
+        <file>HMI_MainMenu.qml</file>
+        <file>images/AdminSettings.svg</file>
+        <file>images/CamSettings.svg</file>
+        <file>Menu/MenuButton.qml</file>
+        <file>Menu/MenuHeader.qml</file>
+        <file>images/BackButton.svg</file>
+        <file>images/HomeButton.svg</file>
+        <file>images/UndoButton.svg</file>
+        <file>images/LockButton.svg</file>
+        <file>Menu/Background.qml</file>
+        <file>images/di-soric.svg</file>
+        <file>Menu/MenuStatus.qml</file>
+        <file>HMI_Settings.qml</file>
+        <file>CAM_SettingsContainer.qml</file>
+        <file>CAM_Settings.qml</file>
+        <file>PWD_Container.qml</file>
+        <file>PWD.qml</file>
+        <file>Start_Container.qml</file>
+        <file>Start.qml</file>
+        <file>IpAddressInput.qml</file>
+        <file>SetNetworkInterface.qml</file>
+        <file>Scripts/GETSVG.sh</file>
+        <file>settings.cpp</file>
+        <file>settings.h</file>
+        <file>images/LiveMode_Button.svg</file>
+        <file>Globals/Globals.qml</file>
+        <file>Globals/qmldir</file>
+        <file>Fonts/HelveticaNeueLTW1G-Ex.otf</file>
+        <file>Fonts/HelveticaNeueLTW1G-LtEx.otf</file>
+        <file>Languages/TR-de_DE.qm</file>
+        <file>Languages/TR-en_EN.qm</file>
+        <file>Languages/TR-fr_FR.qm</file>
+        <file>Languages/FLAG-de_DE.svg</file>
+        <file>Languages/FLAG-en_EN.svg</file>
+        <file>Languages/FLAG-fr_FR.svg</file>
+        <file>Languages/FLAG-zh_CN.svg</file>
+        <file>Languages/FLAG-es_ES.svg</file>
+        <file>Languages/FLAG-it_IT.svg</file>
+        <file>Languages/TR-zh_CN.qm</file>
+        <file>Languages/TR-es_ES.qm</file>
+        <file>Languages/TR-it_IT.qm</file>
+        <file>ButtHMI.qml</file>
+        <file>HMI_UpdatePopup.qml</file>
+        <file>Scripts/UpdateAndReboot.sh</file>
+        <file>CustomBusyIndicator.qml</file>
+        <file>CustomBusyIndicatorStyle.qml</file>
+        <file>HMI_DateTimeSettings.qml</file>
+        <file>Scripts/SetTimeDateZone.sh</file>
+        <file>ADMIN_SettingsContainer.qml</file>
+        <file>ADMIN_Settings.qml</file>
+        <file>Languages/FLAG-nl_NL.svg</file>
+        <file>Languages/FLAG-pl_PL.svg</file>
+        <file>Languages/TR-nl_NL.qm</file>
+        <file>Languages/TR-pl_PL.qm</file>
+        <file>Languages/TR-sl_SI.qm</file>
+        <file>Languages/TR-sk_SK.qm</file>
+        <file>Languages/FLAG-cs_CZ.svg</file>
+        <file>Languages/TR-cs_CZ.qm</file>
+        <file>Languages/FLAG-ko_KR.svg</file>
+        <file>Languages/TR-ko_KR.qm</file>
+        <file>Scripts/FactoryReset.sh</file>
+        <file>Languages/TR-tr_TR.qm</file>
+        <file>Languages/FLAG-tr_TR.svg</file>
+        <file>Languages/FLAG-hu_HU.svg</file>
+        <file>Languages/TR-hu_HU.qm</file>
+        <file>Languages/FLAG-sk_SK.svg</file>
+        <file>Scripts/FindUpdate.sh</file>
+        <file>images/Systemhaus Schmadl Transparent HQ.png</file>
+        <file>images/Logo_Gfa_.svg</file>
+        <file>images/Logo_Gfa.svg</file>
+        <file>UrlInput.qml</file>
+    </qresource>
+</RCC>

+ 29 - 0
settings.cpp

@@ -0,0 +1,29 @@
+#include "settings.h"
+Settings::Settings(QSettings::Format format, const QString &path, QObject *parent) :
+    QObject(parent)
+{
+    settings_ = new QSettings(path, format);
+}
+
+Settings::~Settings() {
+    delete settings_;
+}
+
+void Settings::setIniName(const QString &iniName) {
+    settings_->sync();
+    delete settings_;
+    settings_ = new QSettings(iniName, QSettings::IniFormat);
+}
+
+void Settings::setValue(const QString &key, const QVariant &value) {
+    settings_->setValue(key, value);
+    settings_->sync();
+}
+
+void Settings::sync(void) {
+    settings_->sync();
+}
+
+QVariant Settings::value(const QString &key, const QVariant &defaultValue) const {
+    return settings_->value(key, defaultValue);
+}

+ 22 - 0
settings.h

@@ -0,0 +1,22 @@
+#ifndef SETTINGS_H
+#define SETTINGS_H
+#include <QObject>
+#include <QSettings>
+class Settings : public QObject
+{
+    Q_OBJECT
+public:
+    explicit Settings(QSettings::Format format, const QString &path, QObject *parent = 0);
+    ~Settings();
+    Q_INVOKABLE void setValue(const QString & key, const QVariant & value);
+    Q_INVOKABLE void setIniName(const QString & iniName);
+    Q_INVOKABLE void sync(void);
+    Q_INVOKABLE QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
+
+signals:
+
+public slots:
+private:
+    QSettings *settings_;
+};
+#endif // SETTINGS_H

+ 108 - 0
sysinfo.cpp

@@ -0,0 +1,108 @@
+#include <QDebug>
+#include <QSysInfo>
+#include <QObject>
+#include <QProcess>
+#include <QNetworkInterface>
+#include "sysinfo.h"
+
+SysInfo::SysInfo(QObject *parent) : QObject(parent)
+{
+    kernVersion = QSysInfo::kernelVersion();
+    currCpuArchitecture = QSysInfo::currentCpuArchitecture();
+    emit currentCpuArchitectureChanged();
+    emit kernelVersionChanged();
+    beepStatus = false;
+}
+
+QString SysInfo::getCurrentCpuArchitecture(){
+    return currCpuArchitecture;
+}
+
+QString SysInfo::getKernelVersion(){
+    return kernVersion;
+}
+
+QStringList SysInfo::ifconfig(){
+    QStringList ret;
+    QNetworkInterface interface;
+    QList<QNetworkInterface> interfaceList = interface.allInterfaces();
+
+    for( int i =0; i < interfaceList.size(); i++) {
+        QString iface;
+
+        QList<QNetworkAddressEntry> IPList = interfaceList.at(i).addressEntries();
+
+        if(IPList.size() > 0) {
+            iface = interfaceList.at(i).humanReadableName() +"|" + interfaceList.at(i).hardwareAddress() + "|" +
+                    IPList.at(0).ip().toString() + "|" + IPList.at(0).netmask().toString() + "|" + IPList.at(0).broadcast().toString();
+            ret.append(iface);
+        }
+    }
+    return ret;
+}
+
+QString SysInfo::defaultRouter() {
+    QProcess proc;
+    QString ret = "";
+
+    proc.start("sudo route -n");
+    proc.waitForFinished(-1);
+
+    QString stdout = proc.readAllStandardOutput();
+    QStringList lines = stdout.split(QRegExp("\n|\r\n|\r"));
+    if(lines.length() > 1) {
+        for ( int i = 1; i < lines.length(); i++) {
+            QStringList cc = lines.at(i).split(QRegExp(" "),QString::SkipEmptyParts);
+
+            if(cc.at(0) == "0.0.0.0") {
+                ret = cc.at(1);
+                break;
+            }
+        }
+    }
+    return ret;
+}
+
+QStringList SysInfo::dnsServer() {
+    QProcess proc;
+    QStringList ret;
+
+    proc.start("sudo nslookup .");
+    proc.waitForFinished(-1);
+
+    QString stdout = proc.readAllStandardOutput();
+    QStringList lines = stdout.split(QRegExp("\n|\r\n|\r"));
+    if(lines.length() > 0) {
+        bool doit = false;
+        for ( int i = 0; i < lines.length(); i++) {
+            QStringList cc = lines.at(i).split(QRegExp(" |\t"),QString::SkipEmptyParts);
+
+            if((cc.length() > 1) && (cc.at(0) == "Name:") && (cc.at(1) == ".")) {
+                doit = true;
+            }
+
+            if((cc.length() > 0) && (cc.at(0) == "Server:")) {
+                ret.append(cc.at(cc.length() - 1));
+            }
+
+            if ( (cc.length() > 0) && doit && lines.at(i).contains("Address")) {
+                ret.append(cc.at(cc.length() - 1));
+            }
+        }
+    }
+    return ret;
+}
+
+void SysInfo::beep() {
+    if(this->beepStatus) {
+        QProcess proc;
+        proc.start("sudo beep");
+        proc.waitForFinished(-1);
+    }
+    return;
+}
+
+bool SysInfo::beepOn(bool status) {
+    beepStatus = status;
+    return beepStatus;
+}

Неке датотеке нису приказане због велике количине промена