├── .DS_Store ├── BottomDrawer.qml ├── Components ├── CCTVTile.qml ├── CircularSlider.qml ├── CustumPrefsLabelSelector.qml ├── DevicesTile.qml ├── EffectButton.qml ├── IconImage.qml ├── IconLabel.qml ├── ImageButton.qml ├── LeftPane.qml ├── LightingTile.qml ├── MiddlePane.qml ├── MiddlePaneWidget.qml ├── OutlinedButtonWithicon.qml ├── OutlinedLabel.qml ├── PrefsCircularProgressBar.qml ├── PrefsLabel.qml ├── PrefsLabelSelector.qml ├── PrefsProgressBar.qml ├── PrefsSlider.qml ├── PrefsSwitch.qml ├── PrefsTabButton.qml ├── RightPane.qml ├── RightPaneLightSwitchComponent.qml ├── RoundRectangle.qml ├── Tile.qml ├── TimeShow.qml └── WizardStepper.qml ├── HomeApplication.pro ├── HomeApplication.pro.user ├── HomePage.qml ├── LabDelegate.qml ├── README.md ├── RightDrawer.qml ├── RightSideDrawerDelegate.qml ├── ShadowRectangle.qml ├── Style.qml ├── appliancesdetails.cpp ├── appliancesdetails.h ├── appliancesmodel.cpp ├── appliancesmodel.h ├── assets ├── .DS_Store ├── Cover.png ├── Rectangle 2.png ├── SmartHome │ ├── Icon_BBQ.svg │ ├── Icon_armchair.svg │ ├── Icon_closet.svg │ ├── Icon_coffee maker.svg │ ├── Icon_comfy sofa.svg │ ├── Icon_dishwater.svg │ ├── Icon_electric stove.svg │ ├── Icon_electricity.svg │ ├── Icon_microwave.svg │ ├── Icon_mirror closet.svg │ ├── Icon_refrigerator.svg │ ├── Icon_router.svg │ ├── Icon_sockets.svg │ ├── Icon_sofa.svg │ ├── Icon_stairs.svg │ ├── Icon_stove.svg │ ├── Icon_table.svg │ ├── Icon_television.svg │ ├── Icon_washing machine.svg │ └── Icon_water.svg ├── brasero.svg ├── brave-browser.svg ├── check-solid.svg ├── fan-solid.svg ├── icon _flash_.svg ├── icons │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── Rectangle 11.png │ ├── Rectangle 11.svg │ ├── Rectangle 13.png │ ├── airdrop.svg │ ├── drop.svg │ ├── electricity.svg │ ├── fault.svg │ ├── faultindi.svg │ ├── flash.svg │ ├── keyboard-open.svg │ ├── keyboard.svg │ ├── monitor.svg │ ├── moon.svg │ ├── sliderToolTip.svg │ ├── speaker.jpg │ ├── speaker.svg │ ├── sun 2.svg │ ├── sun.svg │ └── wind.svg ├── itunes.svg ├── light1.png ├── light2.png ├── new icons │ ├── 1786492-01 1.png │ ├── AC.png │ ├── AC.svg │ ├── AMZ030101-main 1.png │ ├── Lights.svg │ ├── image 1.png │ ├── pngegg 2.svg │ ├── pngwing 1.svg │ └── sensor.png ├── others │ ├── Ellipse 44.png │ ├── Ellipse 45.png │ ├── Ellipse 46.png │ ├── Ellipse 47.png │ ├── Subtract.png │ └── Subtract.svg ├── reload.svg ├── spotify-client.svg ├── system-run.svg ├── wrench.svg ├── youtube-to-mp3.svg ├── youtube.svg └── 🦆 icon _flash_.svg ├── fonts ├── CodecPro-Italic.ttf ├── CodecPro-Regular.ttf ├── Lato-Bold.ttf ├── Lato-Regular.ttf └── fontawesome.otf ├── main.cpp ├── main.qml ├── qml.qrc └── screenshots ├── Home-Screen-2.png ├── Home-Screen-3.png └── Home-Screen.png /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/.DS_Store -------------------------------------------------------------------------------- /BottomDrawer.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import QtQuick.Controls.impl 5 | import QtQuick.Templates as T 6 | import "Components" 7 | Drawer { 8 | edge: Qt.BottomEdge 9 | width: parent.width * 0.3 10 | height: 80 11 | background: RoundRectangle { 12 | width: parent.width; height: parent.height 13 | color: Style.white 14 | radius: 30 15 | corners: Qt.AlignRight | Qt.AlignTop 16 | } 17 | 18 | T.Overlay.modal: Rectangle { 19 | color: "#00000000" 20 | } 21 | 22 | T.Overlay.modeless: Rectangle { 23 | color: "#00000000" 24 | } 25 | 26 | contentItem: Item { 27 | anchors.fill: parent 28 | RowLayout { 29 | anchors.centerIn: parent 30 | width: parent.width 31 | OutlinedButtonWithicon { 32 | Layout.alignment: Qt.AlignHCenter 33 | textIcon: "\uf015" 34 | text: qsTr("Room") 35 | backgroundColor: Style.black 36 | } 37 | 38 | OutlinedLabel { 39 | Layout.alignment: Qt.AlignHCenter 40 | textIcon: "\uf03d" 41 | iconSize: 18 42 | radius: 24 43 | color: Style.iconColor 44 | backgroundColor: Style.alphaColor("#000000",0.2) 45 | borderColor: backgroundColor 46 | implicitHeight: 48 47 | implicitWidth: 48 48 | } 49 | 50 | OutlinedButtonWithicon { 51 | iconSize: 16 52 | Layout.alignment: Qt.AlignHCenter 53 | textIcon: "\uf6ff" 54 | text: qsTr("Device") 55 | backgroundColor: Style.black 56 | } 57 | 58 | OutlinedLabel { 59 | Layout.alignment: Qt.AlignHCenter 60 | textIcon: "\uf130" 61 | color: Style.iconColor 62 | iconSize: 18 63 | radius: 24 64 | backgroundColor: "#00000000" 65 | borderColor: Style.iconColor 66 | implicitHeight: 48 67 | implicitWidth: 48 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Components/CCTVTile.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Window 2.15 3 | import QtQuick.Layouts 4 | import QtQuick.Controls 5 | import Qt5Compat.GraphicalEffects 6 | import QtMultimedia 7 | import Style 1.0 8 | import "." 9 | 10 | Rectangle { 11 | id: control 12 | 13 | property bool on: false 14 | property string icon: '\uf1eb' 15 | property string cctv: "\uf030" 16 | property color iconColor: "#e7e7e9" 17 | property string title: qsTr("Smart Lamp") 18 | property string subTitle: qsTr("Living Room") 19 | property string tag: qsTr("Wi-Fi") 20 | 21 | width: 160 22 | height: 160 23 | radius: 14 24 | color: Style.alphaColor("#000000",0.5) 25 | 26 | Rectangle{ 27 | anchors.top: parent.top 28 | anchors.topMargin: 10 29 | anchors.left: parent.left 30 | anchors.leftMargin: 10 31 | visible: control.on 32 | color: Style.granite 33 | width: contentLive.implicitWidth + 10 34 | height: 16 35 | radius: 8 36 | 37 | RowLayout{ 38 | id: contentLive 39 | anchors.centerIn: parent 40 | Rectangle{ 41 | color: "Red" 42 | width: 6 43 | height: 6 44 | radius: 6 45 | } 46 | 47 | Text { 48 | text: "Live" 49 | font.pixelSize: 8 50 | color: Style.alphaColor("#000000",0.6) 51 | } 52 | } 53 | } 54 | 55 | PrefsSwitch { 56 | id: switchOn 57 | checked: control.on 58 | anchors.top: parent.top 59 | anchors.topMargin: 5 60 | anchors.right: parent.right 61 | anchors.rightMargin: 5 62 | onToggled: control.on = !control.on 63 | } 64 | 65 | MediaDevices { 66 | id: mediaDevices 67 | } 68 | 69 | CaptureSession { 70 | camera: Camera { 71 | cameraDevice: mediaDevices.defaultVideoInput 72 | } 73 | } 74 | 75 | ColumnLayout { 76 | anchors.bottom: parent.bottom 77 | anchors.bottomMargin: 10 78 | anchors.left: parent.left 79 | anchors.leftMargin: 10 80 | 81 | IconLabel { 82 | visible: !control.on 83 | Layout.leftMargin: 10 84 | size: 42 85 | icon: control.cctv 86 | color: control.iconColor 87 | opacity: switchOn.checked ? 1 : 0.5 88 | } 89 | 90 | Text { 91 | text: control.title 92 | font.pixelSize: 16 93 | font.bold: Font.DemiBold 94 | color: "#FFFFFF" 95 | } 96 | 97 | Text { 98 | text: control.subTitle 99 | font.pixelSize: 12 100 | color: Style.alphaColor("#FFFFFF",0.9) 101 | } 102 | 103 | Rectangle{ 104 | visible: !control.on 105 | color: Style.granite 106 | width: content.implicitWidth + 10 107 | height: 18 108 | radius: 8 109 | RowLayout{ 110 | id: content 111 | anchors.centerIn: parent 112 | IconLabel { 113 | size: 8 114 | icon: control.icon 115 | color: Style.alphaColor("#000000",0.6) 116 | } 117 | Text { 118 | text: control.tag 119 | font.pixelSize: 8 120 | color: Style.alphaColor("#000000",0.6) 121 | } 122 | } 123 | } 124 | } 125 | } 126 | 127 | -------------------------------------------------------------------------------- /Components/CustumPrefsLabelSelector.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import QtQuick.Controls 4 | import QtQuick.Controls.impl 5 | import Qt5Compat.GraphicalEffects 6 | import Style 1.0 7 | import "." 8 | import ".." 9 | 10 | Pane{ 11 | id:control 12 | property real radius: 4 13 | property int allowMaxTags: 5 14 | property var lableList: ["ON","OFF"] 15 | property var lableListColors: [Style.blue,Style.red,Style.blueGreen,Style.green,Style.yellowLight] 16 | property bool appicon: true 17 | 18 | property int iconWidth :24 19 | property int iconHeight :24 20 | 21 | implicitWidth: layout.implicitWidth 22 | implicitHeight: 55 23 | padding: 8 24 | horizontalPadding: padding 25 | spacing: 0 26 | 27 | background: ShadowRectangle { 28 | color: "#e4e4e4d9" 29 | radius: control.implicitHeight/2 30 | } 31 | 32 | contentItem: Item{ 33 | anchors.fill: parent 34 | RowLayout{ 35 | id:layout 36 | anchors.centerIn: parent 37 | spacing: 10 38 | Repeater { 39 | id:rep 40 | Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter 41 | width: parent.width 42 | model: lableList 43 | delegate: RadioButton { 44 | id: labelIndicator 45 | Layout.alignment: Qt.AlignVCenter 46 | checked: index === 0 47 | indicator: null 48 | text: modelData 49 | 50 | background: ShadowRectangle { 51 | color: checked ? "#FFFFFF" : "#00000000" 52 | radius: control.implicitHeight/2 53 | Rectangle { 54 | anchors.centerIn: parent 55 | width: parent.width - 10 56 | height: parent.height - 10 57 | radius: height / 2 58 | color: checked ? Style.alphaColor(lableListColors[index],0.1) : "#00000000" 59 | Rectangle { 60 | id: indicator 61 | property int mx 62 | property int my 63 | x: mx - width / 2 64 | y: my - height / 2 65 | height: width 66 | radius: width / 2 67 | color: Qt.lighter("#B8FF01") 68 | } 69 | } 70 | } 71 | 72 | ParallelAnimation { 73 | id: anim 74 | NumberAnimation { 75 | target: indicator 76 | property: 'width' 77 | from: 0 78 | to: labelIndicator.width * 1.5 79 | duration: 200 80 | } 81 | NumberAnimation { 82 | target: indicator; 83 | property: 'opacity' 84 | from: 0.9 85 | to: 0 86 | duration: 200 87 | } 88 | } 89 | 90 | MouseArea { 91 | id: mouseArea 92 | hoverEnabled: true 93 | acceptedButtons: Qt.NoButton 94 | cursorShape: Qt.PointingHandCursor 95 | anchors.fill: parent 96 | } 97 | 98 | onPressed: { 99 | indicator.mx = mouseArea.mouseX 100 | indicator.my = mouseArea.mouseY 101 | anim.restart(); 102 | } 103 | 104 | implicitWidth: 55 105 | implicitHeight: 55 106 | padding: 0 107 | spacing: 0 108 | font.family: "Arial" 109 | font.pixelSize: 15 110 | font.bold: Font.DemiBold 111 | 112 | contentItem: Item { 113 | anchors.fill: parent 114 | Image { 115 | id: bug 116 | anchors.centerIn: parent 117 | horizontalAlignment: Qt.AlignHCenter 118 | verticalAlignment: Qt.AlignVCenter 119 | source: modelData 120 | sourceSize: Qt.size(iconWidth,iconHeight) 121 | smooth: true 122 | visible: false 123 | } 124 | 125 | ColorOverlay { 126 | anchors.fill: bug 127 | source: bug 128 | color: lableListColors[index] 129 | } 130 | } 131 | } 132 | } 133 | } 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /Components/DevicesTile.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Window 2.15 3 | import QtQuick.Layouts 4 | import QtQuick.Controls 5 | import Qt5Compat.GraphicalEffects 6 | 7 | import Style 1.0 8 | import "." 9 | import ".." 10 | ShadowRectangle { 11 | id: control 12 | 13 | property bool on: false 14 | property string icon: '\uf1eb' 15 | property color iconColor: "#e7e7e9" 16 | property string title: qsTr("Smart Lamp") 17 | property string subTitle: qsTr("Living Room") 18 | property string tag: qsTr("Wi-Fi") 19 | property string iconImage: "qrc:/assets/icons/sun.svg" 20 | 21 | property bool inActive: false 22 | 23 | width: 160 24 | height: 160 25 | radius: 16 26 | 27 | PrefsSwitch { 28 | id: switchOn 29 | checked: control.on 30 | anchors.top: parent.top 31 | anchors.topMargin: 5 32 | anchors.right: parent.right 33 | anchors.rightMargin: 5 34 | onToggled: { 35 | if(!inActive){ 36 | control.on = !control.on 37 | } 38 | } 39 | } 40 | 41 | ShadowRectangle { 42 | anchors.top: parent.top 43 | anchors.topMargin: 5 44 | anchors.left: parent.left 45 | anchors.leftMargin: 5 46 | implicitHeight: 52 47 | implicitWidth: 52 48 | radius: implicitHeight / 2 49 | ImageButton { 50 | anchors.centerIn: parent 51 | iconImage: control.iconImage 52 | iconWidth: 24 53 | iconHeight: 24 54 | color: inActive ? Style.red : control.on ? Style.green : Style.blue 55 | backgroundColor: Style.alphaColor(color,0.1) 56 | } 57 | } 58 | 59 | ColumnLayout { 60 | anchors.bottom: parent.bottom 61 | anchors.bottomMargin: 5 62 | anchors.right: parent.right 63 | anchors.rightMargin: 5 64 | spacing: 5 65 | 66 | OutlinedLabel { 67 | visible: inActive 68 | Layout.alignment: Qt.AlignHCenter 69 | textIcon: "\uf06a" 70 | iconSize: 14 71 | implicitHeight: 28 72 | implicitWidth: 28 73 | radius: 18 74 | color: Style.red 75 | backgroundColor: Style.alphaColor(Style.red,0.2) 76 | } 77 | 78 | OutlinedLabel { 79 | Layout.alignment: Qt.AlignHCenter 80 | textIcon: "\uf1e6" 81 | iconSize: 14 82 | implicitHeight: 28 83 | implicitWidth: 28 84 | radius: 18 85 | color: Style.green 86 | backgroundColor: Style.alphaColor(Style.green,0.2) 87 | } 88 | OutlinedLabel { 89 | Layout.alignment: Qt.AlignHCenter 90 | textIcon: "\uf1eb" 91 | iconSize: 12 92 | implicitHeight: 28 93 | implicitWidth: 28 94 | radius: 18 95 | color: Style.blue 96 | backgroundColor: Style.alphaColor(Style.blue,0.2) 97 | } 98 | } 99 | 100 | ColumnLayout { 101 | anchors.bottom: parent.bottom 102 | anchors.bottomMargin: 10 103 | anchors.left: parent.left 104 | anchors.leftMargin: 10 105 | 106 | Text { 107 | text: control.title 108 | font.pixelSize: 16 109 | font.bold: Font.DemiBold 110 | color: "#505050" 111 | } 112 | 113 | Text { 114 | text: control.subTitle 115 | font.pixelSize: 12 116 | color: "#505050" 117 | } 118 | } 119 | } 120 | 121 | -------------------------------------------------------------------------------- /Components/EffectButton.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import Qt5Compat.GraphicalEffects 5 | import Style 1.0 6 | 7 | Button { 8 | property string setIcon : "" 9 | property string setIconText : "" 10 | property string setIconColor : Style.textColor 11 | property string iconBackground: "transparent" 12 | 13 | property real setIconSize: 25 14 | property real radius: height /2 15 | property real iconWidth: 28 16 | property real iconHeight: 28 17 | 18 | property bool isMirror: false 19 | property bool isGlow: false 20 | property bool roundIcon: false 21 | property alias iconSource: iconSource 22 | property alias roundIconSource: roundIconSource 23 | 24 | id: control 25 | implicitHeight: 55 26 | implicitWidth: 55 27 | contentItem: PrefsLabel { 28 | text: control.text 29 | } 30 | 31 | Image { 32 | id:iconSource 33 | z:2 34 | visible: !roundIcon && !setIconText 35 | mirror: isMirror 36 | anchors.centerIn: parent 37 | source: setIcon 38 | scale: control.pressed ? 0.9 : 1.0 39 | Behavior on scale { NumberAnimation { duration: 200; } } 40 | } 41 | 42 | Image { 43 | id:roundIconSource 44 | z:2 45 | visible: roundIcon && !setIconText 46 | mirror: isMirror 47 | sourceSize: Qt.size(iconWidth,iconHeight) 48 | anchors.centerIn: parent 49 | source: setIcon 50 | scale: control.pressed ? 0.9 : 1.0 51 | Behavior on scale { NumberAnimation { duration: 200; } } 52 | } 53 | 54 | background: Rectangle { 55 | z:1 56 | anchors.fill: parent 57 | radius: control.radius 58 | color: control.iconBackground 59 | visible: true 60 | Behavior on color { 61 | ColorAnimation { 62 | duration: 200; 63 | easing.type: Easing.Linear; 64 | } 65 | } 66 | 67 | Rectangle { 68 | id: indicator 69 | property int mx 70 | property int my 71 | x: mx - width / 2 72 | y: my - height / 2 73 | height: width 74 | radius: width / 2 75 | color: isGlow ? Qt.lighter("#29BEB6") : Qt.lighter("#B8FF01") 76 | } 77 | } 78 | 79 | Rectangle { 80 | id: mask 81 | radius: height /2 82 | anchors.fill: parent 83 | visible: false 84 | } 85 | 86 | OpacityMask { 87 | anchors.fill: background 88 | source: background 89 | maskSource: mask 90 | } 91 | 92 | MouseArea { 93 | id: mouseArea 94 | hoverEnabled: true 95 | acceptedButtons: Qt.NoButton 96 | cursorShape: Qt.PointingHandCursor 97 | anchors.fill: parent 98 | } 99 | 100 | ParallelAnimation { 101 | id: anim 102 | NumberAnimation { 103 | target: indicator 104 | property: 'width' 105 | from: 0 106 | to: control.width * 1.5 107 | duration: 200 108 | } 109 | NumberAnimation { 110 | target: indicator; 111 | property: 'opacity' 112 | from: 0.9 113 | to: 0 114 | duration: 200 115 | } 116 | } 117 | 118 | onPressed: { 119 | indicator.mx = mouseArea.mouseX 120 | indicator.my = mouseArea.mouseY 121 | anim.restart(); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /Components/IconImage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.5 3 | import QtQuick.Controls.impl 2.12 as Impl 4 | import Qt5Compat.GraphicalEffects 5 | import Style 1.0 6 | 7 | import "." 8 | Pane { 9 | id: control 10 | 11 | property color color: isTextIcon ? "#000000" : Style.textColor 12 | property color backgroundColor: icon ? Style.textColor : "#0D0D0D" 13 | property color borderColor: "#00000000" 14 | property string text 15 | property real radius: icon ? backgroundHeight/2 : 10 16 | property string icon 17 | property int iconSize: 18 18 | property real backgroundHeight: icon ? 42 : 38 19 | property real backgroundWidth: icon ? 42 : 38 20 | property bool isTextIcon: false 21 | 22 | signal clicked() 23 | 24 | visible: text || icon 25 | font.pixelSize: 20 26 | implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, 27 | implicitContentWidth + leftPadding + rightPadding) 28 | implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, 29 | implicitContentHeight + topPadding + bottomPadding) 30 | 31 | horizontalPadding: { 32 | if(icon) { 33 | return padding 34 | } 35 | return padding + 8 36 | } 37 | 38 | padding: 6 39 | spacing: 6 40 | 41 | background: Rectangle{ 42 | implicitWidth: control.backgroundWidth 43 | implicitHeight: control.backgroundHeight 44 | radius: control.radius 45 | color: control.backgroundColor 46 | border.color: control.borderColor 47 | } 48 | 49 | contentItem: { 50 | if(isTextIcon) { 51 | return textIconOnly.createObject() 52 | } else if(icon) { 53 | return iconOnly.createObject() 54 | } 55 | return textOnly.createObject() 56 | } 57 | 58 | Component { 59 | id: textOnly 60 | Impl.IconLabel { 61 | opacity: 1 62 | text: control.text 63 | font: control.font 64 | color: control.color 65 | display: AbstractButton.TextOnly 66 | spacing: control.spacing 67 | mirrored: control.mirrored 68 | } 69 | } 70 | 71 | Component { 72 | id: iconOnly 73 | Image { 74 | anchors.centerIn: parent 75 | source: control.icon 76 | sourceSize: Qt.size(control.iconSize,control.iconSize) 77 | 78 | MouseArea { 79 | id: sensor 80 | anchors.fill: parent 81 | onClicked: { 82 | control.clicked() 83 | } 84 | } 85 | } 86 | } 87 | 88 | 89 | Component { 90 | id: textIconOnly 91 | IconLabel { 92 | icon: control.icon 93 | size: control.iconSize 94 | color: control.color 95 | horizontalAlignment: Qt.AlignHCenter 96 | verticalAlignment: Qt.AlignVCenter 97 | 98 | MouseArea { 99 | id: sensor 100 | anchors.fill: parent 101 | onClicked: { 102 | control.clicked() 103 | } 104 | } 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /Components/IconLabel.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import Style 1.0 4 | 5 | Label { 6 | property real size: 24 7 | property string icon 8 | property bool appicon: true 9 | 10 | text: icon 11 | font.pixelSize: size 12 | font.family: appicon ? Style.fontawesomefont : "Lato" 13 | } 14 | -------------------------------------------------------------------------------- /Components/ImageButton.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.5 3 | import QtQuick.Controls.impl 2.12 as Impl 4 | import QtQuick.Layouts 5 | import Qt5Compat.GraphicalEffects 6 | import Style 1.0 7 | 8 | import "." 9 | Button { 10 | id: control 11 | 12 | property color color: Style.textColor 13 | property color backgroundColor: Style.granite 14 | property color borderColor: backgroundColor 15 | property real radius: implicitHeight /2 16 | property string iconImage 17 | property int iconWidth: 24 18 | property int iconHeight: 24 19 | 20 | font.pixelSize: 20 21 | implicitHeight: 42 22 | implicitWidth: 42 23 | background: Rectangle{ 24 | implicitHeight: control.implicitHeight 25 | implicitWidth: control.implicitWidth 26 | radius: control.radius 27 | color: control.backgroundColor 28 | border.color: control.borderColor 29 | 30 | Rectangle { 31 | id: indicator 32 | property int mx 33 | property int my 34 | x: mx - width / 2 35 | y: my - height / 2 36 | height: width 37 | radius: width / 2 38 | color: Qt.lighter("#B8FF01") 39 | } 40 | } 41 | 42 | contentItem: Item { 43 | anchors.fill: parent 44 | Image { 45 | id: bug 46 | anchors.centerIn: parent 47 | horizontalAlignment: Qt.AlignHCenter 48 | verticalAlignment: Qt.AlignVCenter 49 | source: control.iconImage 50 | sourceSize: Qt.size(iconWidth,iconHeight) 51 | smooth: true 52 | visible: false 53 | } 54 | 55 | ColorOverlay { 56 | anchors.fill: bug 57 | source: bug 58 | color: control.color 59 | } 60 | } 61 | 62 | MouseArea { 63 | id: mouseArea 64 | hoverEnabled: true 65 | acceptedButtons: Qt.NoButton 66 | cursorShape: Qt.PointingHandCursor 67 | anchors.fill: parent 68 | } 69 | 70 | ParallelAnimation { 71 | id: anim 72 | NumberAnimation { 73 | target: indicator 74 | property: 'width' 75 | from: 0 76 | to: control.width * 1.5 77 | duration: 200 78 | } 79 | NumberAnimation { 80 | target: indicator; 81 | property: 'opacity' 82 | from: 0.9 83 | to: 0 84 | duration: 200 85 | } 86 | } 87 | 88 | onPressed: { 89 | indicator.mx = mouseArea.mouseX 90 | indicator.my = mouseArea.mouseY 91 | anim.restart(); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /Components/LeftPane.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import Style 1.0 3 | Item { 4 | id: leftItem 5 | width: 370 6 | height: parent.height 7 | anchors.left: parent.left 8 | 9 | TimeShow { 10 | id: dateitem 11 | } 12 | 13 | Rectangle { 14 | id: todaysweatheritem 15 | radius: 16 16 | width: parent.width 17 | color: glassyBgColor 18 | anchors.top: dateitem.bottom 19 | anchors.bottom: locationitem.top 20 | anchors.topMargin: 17 21 | anchors.bottomMargin: 17 22 | 23 | Text { 24 | text: qsTr('Today') 25 | font.pixelSize: 14 26 | color: Style.textColor 27 | anchors.top: parent.top 28 | anchors.left: parent.left 29 | anchors.margins: 24 30 | } 31 | 32 | Column { 33 | anchors.centerIn: parent 34 | spacing: 24 35 | 36 | Row { 37 | spacing: 24 38 | height: tmptxt.height 39 | anchors.horizontalCenter: parent.horizontalCenter 40 | 41 | IconLabel { 42 | id: cloudicon 43 | icon: '\uf746' 44 | size: 24 45 | color: Style.textColor 46 | anchors.baseline: tmptxt.baseline 47 | } 48 | 49 | Text { 50 | id: tmptxt 51 | text: ambientTemperature 52 | font.pixelSize: 82 53 | color: Style.textColor 54 | 55 | Text { 56 | text: qsTr('°C') 57 | font.pixelSize: 12 58 | color: Style.textColor 59 | anchors.top: parent.top 60 | anchors.left: parent.right 61 | } 62 | } 63 | 64 | Text { 65 | id: minmaxtxt 66 | text: qsTr('24/16') 67 | font.pixelSize: 14 68 | color: Style.textColor 69 | anchors.baseline: tmptxt.baseline 70 | } 71 | } 72 | 73 | Text { 74 | id: weathercommentxt 75 | text: qsTr('Partially Clouded') 76 | font.pixelSize: 16 77 | color: Style.textColor 78 | anchors.horizontalCenter: parent.horizontalCenter 79 | } 80 | } 81 | } 82 | 83 | Rectangle { 84 | id: locationitem 85 | radius: 16 86 | height: 126 87 | color: glassyBgColor 88 | width: parent.width 89 | anchors.bottom: parent.bottom 90 | 91 | Row { 92 | id: locationitempadded 93 | anchors.fill: parent 94 | anchors.margins: 24 95 | 96 | Repeater { 97 | id: locationrepeater 98 | model: roomsModel 99 | 100 | delegate: Item { 101 | id: roomdelegateitem 102 | height: locationitempadded.height 103 | width: locationitempadded.width / locationrepeater.model.count 104 | 105 | property string label 106 | property bool isActive: label===activeRoomLabel 107 | property alias icon: iconlabel.icon 108 | property alias size: iconlabel.size 109 | 110 | signal clicked() 111 | 112 | label: model.label 113 | icon: model.icon 114 | size: model.size 115 | onClicked: activeRoomLabel=label 116 | 117 | Column { 118 | anchors.fill: parent 119 | spacing: 8 120 | 121 | IconLabel { 122 | id: iconlabel 123 | width: parent.height * 0.5 124 | height: width 125 | anchors.horizontalCenter: parent.horizontalCenter 126 | horizontalAlignment: IconLabel.AlignHCenter 127 | verticalAlignment: IconLabel.AlignVCenter 128 | opacity: roomdelegateitem.isActive ? 1 : 0.5 129 | color: Style.textColor 130 | Behavior on opacity { NumberAnimation { duration: 300 }} 131 | } 132 | 133 | Text { 134 | text: roomdelegateitem.label 135 | font.pixelSize: 12 136 | color: Style.textColor 137 | anchors.horizontalCenter: parent.horizontalCenter 138 | opacity: roomdelegateitem.isActive ? 1 : 0.5 139 | 140 | Behavior on opacity { NumberAnimation { duration: 300 }} 141 | 142 | Rectangle { 143 | width: parent.parent.width * 0.8 144 | height: 4 145 | radius: 2 146 | color: Style.textColor 147 | anchors.horizontalCenter: parent.horizontalCenter 148 | anchors.bottom: parent.bottom 149 | anchors.bottomMargin: -8 150 | opacity: roomdelegateitem.isActive ? 1 : 0.5 151 | 152 | Behavior on opacity { NumberAnimation { duration: 300 }} 153 | } 154 | } 155 | } 156 | 157 | MouseArea { 158 | anchors.fill: parent 159 | onClicked: roomdelegateitem.clicked() 160 | } 161 | } 162 | } 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /Components/LightingTile.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Window 2.15 3 | import QtQuick.Layouts 4 | import QtQuick.Controls 5 | import Qt5Compat.GraphicalEffects 6 | 7 | import Style 1.0 8 | import "." 9 | 10 | Rectangle { 11 | id: control 12 | 13 | property bool on: false 14 | property string icon: '\uf1eb' 15 | property color iconColor: "#e7e7e9" 16 | property string title: qsTr("Smart Lamp") 17 | property string subTitle: qsTr("Living Room") 18 | property string tag: qsTr("Wi-Fi") 19 | 20 | width: 160 21 | height: 160 22 | radius: 14 23 | color: Style.alphaColor("#000000",0.5) 24 | 25 | PrefsSwitch { 26 | id: switchOn 27 | checked: control.on 28 | anchors.top: parent.top 29 | anchors.topMargin: 5 30 | anchors.right: parent.right 31 | anchors.rightMargin: 5 32 | } 33 | 34 | ColumnLayout { 35 | anchors.bottom: parent.bottom 36 | anchors.bottomMargin: 10 37 | anchors.left: parent.left 38 | anchors.leftMargin: 10 39 | 40 | IconLabel { 41 | Layout.leftMargin: 10 42 | size: 42 43 | icon: '\uf0eb' //e5a7 44 | color: control.iconColor 45 | opacity: switchOn.checked ? 1 : 0.5 46 | } 47 | 48 | Text { 49 | text: control.title 50 | font.pixelSize: 16 51 | font.bold: Font.DemiBold 52 | color: "#FFFFFF" 53 | } 54 | 55 | Text { 56 | text: control.subTitle 57 | font.pixelSize: 12 58 | color: Style.alphaColor("#FFFFFF",0.9) 59 | } 60 | 61 | Rectangle{ 62 | color: Style.granite 63 | width: content.implicitWidth + 10 64 | height: 18 65 | radius: 8 66 | RowLayout{ 67 | id: content 68 | anchors.centerIn: parent 69 | IconLabel { 70 | size: 8 71 | icon: control.icon 72 | color: Style.alphaColor("#000000",0.6) 73 | } 74 | Text { 75 | text: control.tag 76 | font.pixelSize: 8 77 | color: Style.alphaColor("#000000",0.6) 78 | } 79 | } 80 | } 81 | } 82 | } 83 | 84 | -------------------------------------------------------------------------------- /Components/MiddlePane.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | 4 | Item { 5 | id: middleItem 6 | width: 152 7 | height: parent.height 8 | anchors.left: leftItem.right 9 | anchors.leftMargin: 22 10 | 11 | ColumnLayout { 12 | anchors.fill: parent 13 | spacing: 16 14 | 15 | MiddlePaneWidget { 16 | label: qsTr('Temperature') 17 | units: qsTr('°C') 18 | value: temperature 19 | } 20 | 21 | MiddlePaneWidget { 22 | label: qsTr('Humidity') 23 | units: qsTr('%') 24 | value: humidity 25 | } 26 | 27 | MiddlePaneWidget { 28 | label: qsTr('Heating') 29 | units: qsTr('°C') 30 | value: heating 31 | } 32 | 33 | MiddlePaneWidget { 34 | label: qsTr('Water') 35 | units: qsTr('kpa') 36 | value: water 37 | alignUnitsRight: false 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Components/MiddlePaneWidget.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import Style 1.0 4 | Rectangle { 5 | id: root 6 | color: glassyBgColor 7 | radius: 16 8 | 9 | Layout.fillWidth: true 10 | Layout.fillHeight: true 11 | 12 | property string label 13 | property real value 14 | property string units 15 | property bool alignUnitsRight: true 16 | 17 | Item { 18 | anchors.fill: parent 19 | anchors.margins: 24 20 | 21 | Text { 22 | text: label 23 | font.pixelSize: 14 24 | color: Style.textColor 25 | anchors.top: parent.top 26 | anchors.left: parent.left 27 | } 28 | 29 | Text { 30 | id: valuetxt 31 | text: value 32 | font.pixelSize: 56 33 | color: Style.textColor 34 | anchors.bottom: parent.bottom 35 | anchors.bottomMargin: alignUnitsRight ? 0 : 16 36 | anchors.horizontalCenter: parent.horizontalCenter 37 | 38 | Text { 39 | text: units 40 | font.pixelSize: 16 41 | color: Style.textColor 42 | anchors.top: parent.top 43 | anchors.left: parent.right 44 | visible: alignUnitsRight 45 | } 46 | } 47 | 48 | Text { 49 | text: units 50 | font.pixelSize: 16 51 | color: Style.textColor 52 | visible: !alignUnitsRight 53 | anchors.top: valuetxt.bottom 54 | anchors.right: valuetxt.right 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Components/OutlinedButtonWithicon.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.5 3 | import QtQuick.Layouts 4 | import QtQuick.Controls.impl 2.12 as Impl 5 | import Style 1.0 6 | 7 | import "." 8 | 9 | Button { 10 | id: control 11 | 12 | property color color: Style.textColor 13 | property color backgroundColor: Style.granite 14 | property color borderColor: backgroundColor 15 | property real radius: 24 16 | property string textIcon 17 | property int iconSize: 18 18 | 19 | implicitHeight: 48 20 | 21 | font.pixelSize: 18 22 | font.bold: Font.Bold 23 | font.weight: Font.Medium 24 | 25 | horizontalPadding: padding + 12 26 | spacing: 6 27 | 28 | background: Rectangle{ 29 | implicitHeight: control.implicitHeight 30 | radius: control.radius 31 | color: control.backgroundColor 32 | border.color: control.borderColor 33 | 34 | Rectangle { 35 | id: indicator 36 | property int mx 37 | property int my 38 | x: mx - width / 2 39 | y: my - height / 2 40 | height: width 41 | radius: width / 2 42 | color: Qt.lighter("#B8FF01") 43 | } 44 | } 45 | 46 | contentItem: RowLayout { 47 | spacing: control.spacing 48 | IconLabel { 49 | icon: control.textIcon 50 | size: control.iconSize 51 | color: control.color 52 | horizontalAlignment: Qt.AlignHCenter 53 | verticalAlignment: Qt.AlignVCenter 54 | } 55 | 56 | Impl.IconLabel { 57 | text: control.text 58 | font: control.font 59 | color: control.color 60 | display: AbstractButton.TextOnly 61 | spacing: control.spacing 62 | mirrored: control.mirrored 63 | } 64 | } 65 | 66 | MouseArea { 67 | id: mouseArea 68 | hoverEnabled: true 69 | acceptedButtons: Qt.NoButton 70 | cursorShape: Qt.PointingHandCursor 71 | anchors.fill: parent 72 | } 73 | 74 | ParallelAnimation { 75 | id: anim 76 | NumberAnimation { 77 | target: indicator 78 | property: 'width' 79 | from: 0 80 | to: control.width * 1.5 81 | duration: 200 82 | } 83 | NumberAnimation { 84 | target: indicator; 85 | property: 'opacity' 86 | from: 0.9 87 | to: 0 88 | duration: 200 89 | } 90 | } 91 | 92 | onPressed: { 93 | indicator.mx = mouseArea.mouseX 94 | indicator.my = mouseArea.mouseY 95 | anim.restart(); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Components/OutlinedLabel.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.5 3 | import QtQuick.Controls.impl 2.12 as Impl 4 | import QtQuick.Layouts 5 | 6 | import Style 1.0 7 | 8 | import "." 9 | Button { 10 | id: control 11 | 12 | property color color: Style.textColor 13 | property color backgroundColor: Style.granite 14 | property color borderColor: backgroundColor 15 | property real radius: implicitHeight /2 16 | property string textIcon 17 | property int iconSize: 18 18 | property bool appicon: true 19 | 20 | font.pixelSize: 20 21 | implicitHeight: 42 22 | implicitWidth: 42 23 | background: Rectangle{ 24 | implicitHeight: control.implicitHeight 25 | implicitWidth: control.implicitWidth 26 | radius: control.radius 27 | color: control.backgroundColor 28 | border.color: control.borderColor 29 | 30 | Rectangle { 31 | id: indicator 32 | property int mx 33 | property int my 34 | x: mx - width / 2 35 | y: my - height / 2 36 | height: width 37 | radius: width / 2 38 | color: Qt.lighter("#B8FF01") 39 | } 40 | } 41 | 42 | contentItem: IconLabel { 43 | icon: control.textIcon 44 | size: control.iconSize 45 | color: control.color 46 | horizontalAlignment: Qt.AlignHCenter 47 | verticalAlignment: Qt.AlignVCenter 48 | appicon: control.appicon 49 | } 50 | 51 | MouseArea { 52 | id: mouseArea 53 | hoverEnabled: true 54 | acceptedButtons: Qt.NoButton 55 | cursorShape: Qt.PointingHandCursor 56 | anchors.fill: parent 57 | } 58 | 59 | ParallelAnimation { 60 | id: anim 61 | NumberAnimation { 62 | target: indicator 63 | property: 'width' 64 | from: 0 65 | to: control.width * 1.5 66 | duration: 200 67 | } 68 | NumberAnimation { 69 | target: indicator; 70 | property: 'opacity' 71 | from: 0.9 72 | to: 0 73 | duration: 200 74 | } 75 | } 76 | 77 | onPressed: { 78 | indicator.mx = mouseArea.mouseX 79 | indicator.my = mouseArea.mouseY 80 | anim.restart(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Components/PrefsCircularProgressBar.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | 3 | Item { 4 | id: knob 5 | transformOrigin: Item.Center 6 | 7 | property var metaData : ["from", "to", "value", 8 | "reverse", 9 | "fromAngle", "toAngle", 10 | "lineWidth", "fontSize", 11 | "knobBackgroundColor", "knobColor", 12 | "title", "titleFont", "titleFontSize", "titleFontColor"] 13 | 14 | //value parameters 15 | property double from:0 16 | property double value: 1 17 | property double to: 100 18 | 19 | //progress from right to left 20 | property bool reverse: false 21 | 22 | //progress circle angle 23 | property double fromAngle: Math.PI - 1 24 | property double toAngle: Math.PI *2 + 1 25 | 26 | property int lineWidth: height / 10 27 | property int fontSize: height / 7 28 | 29 | property color knobBackgroundColor: Qt.rgba(0.1, 0.1, 0.1, 0.1) 30 | property color knobColor: Qt.rgba(1, 0, 0, 1) 31 | 32 | property string title: "" 33 | property alias titleFont: labelTitle.font.family 34 | property alias titleFontSize: labelTitle.font.pointSize 35 | property alias titleFontColor: labelTitle.color 36 | 37 | function update(value) { 38 | knob.value = value 39 | canvas.requestPaint() 40 | background.requestPaint() 41 | label.text = value.toFixed(2); 42 | } 43 | 44 | Text { 45 | id: labelTitle 46 | y: 0 47 | visible: title !== '' 48 | text: knob.title 49 | color: Qt.rgba(0, 0, 0., 0.5) 50 | horizontalAlignment: Text.AlignHCenter 51 | anchors.horizontalCenter: parent.horizontalCenter 52 | } 53 | 54 | Canvas { 55 | id: background 56 | width: parent.height 57 | height: parent.height 58 | antialiasing: true 59 | 60 | property int radius: background.width/2 61 | 62 | onPaint: { 63 | 64 | if (knob.title !== "") { 65 | background.y = labelTitle.height 66 | background.x = labelTitle.height/2 67 | background.height = parent.height - labelTitle.height/2 68 | background.width = parent.height - labelTitle.height/2 69 | background.radius = background.height /2 70 | } 71 | 72 | var centreX = background.width / 2.0; 73 | var centreY = background.height / 2.0; 74 | 75 | var ctx = background.getContext('2d'); 76 | ctx.strokeStyle = knob.knobBackgroundColor; 77 | ctx.lineWidth = knob.lineWidth; 78 | ctx.lineCap = "round" 79 | ctx.beginPath(); 80 | ctx.clearRect(0, 0, background.width, background.height); 81 | ctx.arc(centreX, centreY, radius - knob.lineWidth, knob.fromAngle, knob.toAngle, false); 82 | ctx.stroke(); 83 | } 84 | } 85 | 86 | Canvas { 87 | id:canvas 88 | width: parent.height 89 | height: parent.height 90 | antialiasing: true 91 | 92 | property double step: knob.value / (knob.to - knob.from) * (knob.toAngle - knob.fromAngle) 93 | property int radius: height/2 94 | 95 | Text { 96 | id: label 97 | width: 40 98 | height: 12 99 | font.bold: true 100 | z: 1 101 | font.pointSize: knob.fontSize 102 | text: knob.value.toFixed(2) 103 | horizontalAlignment: Text.AlignHCenter 104 | verticalAlignment: Text.AlignVCenter 105 | anchors.fill: parent 106 | visible: false 107 | } 108 | 109 | onPaint: { 110 | 111 | if (knob.title !== "") { 112 | canvas.y = labelTitle.height 113 | canvas.x = labelTitle.height/2 114 | canvas.height = parent.height - labelTitle.height/2 115 | canvas.width = parent.height - labelTitle.height/2 116 | canvas.radius = canvas.height /2 117 | } 118 | 119 | var centreX = canvas.width / 2.0; 120 | var centreY = canvas.height / 2.0; 121 | 122 | var ctx = canvas.getContext('2d'); 123 | ctx.strokeStyle = knob.knobColor; 124 | ctx.lineWidth = knob.lineWidth; 125 | ctx.lineCap = "round" 126 | ctx.beginPath(); 127 | ctx.clearRect(0, 0, canvas.width, canvas.height); 128 | if (knob.reverse) { 129 | ctx.arc(centreX, centreY, radius - knob.lineWidth, knob.toAngle, knob.toAngle - step, true); 130 | } else { 131 | ctx.arc(centreX, centreY, radius - knob.lineWidth, knob.fromAngle, knob.fromAngle + step, false); 132 | } 133 | ctx.stroke(); 134 | } 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /Components/PrefsLabel.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import Style 1.0 3 | 4 | Text{ 5 | font.family: "Lato" 6 | color: Style.textColor 7 | font.pixelSize: 20 8 | } 9 | -------------------------------------------------------------------------------- /Components/PrefsLabelSelector.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import QtQuick.Controls 4 | import QtQuick.Controls.impl 5 | import Style 1.0 6 | import "." 7 | import ".." 8 | Pane{ 9 | id:control 10 | property real radius: 4 11 | property int allowMaxTags: 5 12 | property var lableList: ["ON","OFF"] 13 | property bool appicon: true 14 | 15 | implicitWidth: layout.implicitWidth 16 | implicitHeight: 55 17 | padding: 8 18 | horizontalPadding: padding 19 | spacing: 0 20 | 21 | background: ShadowRectangle{ 22 | color: "#e4e4e4d9" 23 | radius: control.implicitHeight/2 24 | } 25 | 26 | contentItem: Item{ 27 | anchors.fill: parent 28 | RowLayout{ 29 | id:layout 30 | anchors.centerIn: parent 31 | spacing: 10 32 | Repeater { 33 | id:rep 34 | Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter 35 | width: parent.width 36 | model: lableList 37 | delegate: RadioButton { 38 | id: labelIndicator 39 | Layout.alignment: Qt.AlignVCenter 40 | checked: index === 0 41 | indicator: null 42 | text: modelData 43 | 44 | background: Rectangle{ 45 | border.color: color 46 | color: checked ? "#FFFFFF" : "#00000000" 47 | radius: control.implicitHeight/2 48 | Rectangle { 49 | id: indicator 50 | property int mx 51 | property int my 52 | x: mx - width / 2 53 | y: my - height / 2 54 | height: width 55 | radius: width / 2 56 | color: Qt.lighter("#B8FF01") 57 | } 58 | } 59 | 60 | ParallelAnimation { 61 | id: anim 62 | NumberAnimation { 63 | target: indicator 64 | property: 'width' 65 | from: 0 66 | to: labelIndicator.width * 1.5 67 | duration: 200 68 | } 69 | NumberAnimation { 70 | target: indicator; 71 | property: 'opacity' 72 | from: 0.9 73 | to: 0 74 | duration: 200 75 | } 76 | } 77 | 78 | MouseArea { 79 | id: mouseArea 80 | hoverEnabled: true 81 | acceptedButtons: Qt.NoButton 82 | cursorShape: Qt.PointingHandCursor 83 | anchors.fill: parent 84 | } 85 | 86 | onPressed: { 87 | indicator.mx = mouseArea.mouseX 88 | indicator.my = mouseArea.mouseY 89 | anim.restart(); 90 | } 91 | 92 | implicitWidth: 55 93 | implicitHeight: 55 94 | padding: 0 95 | spacing: 0 96 | font.family: "Arial" 97 | font.pixelSize: 15 98 | font.bold: Font.DemiBold 99 | 100 | contentItem: Item{ 101 | anchors.fill: parent 102 | IconLabel { 103 | anchors.centerIn: parent 104 | icon: modelData 105 | size: 18 106 | color: labelIndicator.checked ? Style.black : Style.iconColor 107 | appicon: control.appicon 108 | } 109 | } 110 | } 111 | } 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /Components/PrefsProgressBar.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Controls 3 | 4 | ProgressBar { 5 | id: control 6 | value: 0.5 7 | height: 16 8 | 9 | background: Rectangle { 10 | implicitWidth: 200 11 | implicitHeight: 6 12 | color: "#494F56" 13 | radius: height/2 14 | } 15 | 16 | contentItem: Item { 17 | implicitWidth: 200 18 | implicitHeight: 4 19 | 20 | Rectangle { 21 | width: control.visualPosition * parent.width 22 | height: parent.height 23 | radius: height/2 24 | color: "#6CE5E8" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Components/PrefsSlider.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Controls.impl 3 | import QtQuick.Templates as T 4 | import Style 1.0 5 | import Qt5Compat.GraphicalEffects 6 | import QtQuick.Controls 7 | 8 | T.Slider { 9 | id: control 10 | property bool toolTipVisible: false 11 | implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, 12 | implicitHandleWidth + leftPadding + rightPadding) 13 | implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, 14 | implicitHandleHeight + topPadding + bottomPadding) 15 | 16 | padding: 6 17 | 18 | handle: Rectangle { 19 | id: handler 20 | x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) 21 | y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) 22 | implicitWidth: 24 23 | implicitHeight: 24 24 | radius: width / 2 25 | color: "#FFFFFF" 26 | border.width: 4 27 | border.color: "#FFA500" 28 | 29 | ToolTip { 30 | id: tooltip 31 | 32 | x: control.vertical ? control.spacing + parent.width : (15 - width)/2 + 30 33 | y: control.horizontal ? - control.spacing - parent.width - 30 : (15 - height)/2 34 | 35 | padding: 3 36 | opacity: 0.8 37 | visible: control.pressed && control.toolTipVisible 38 | parent: control.handle 39 | font.pixelSize: parent.width/2 40 | delay: 100 41 | timeout: 0 42 | 43 | contentItem: Item { 44 | anchors.fill: parent 45 | PrefsLabel { 46 | font.pixelSize: 16 47 | anchors.centerIn: parent 48 | anchors.verticalCenterOffset: - 8 49 | font.bold: Font.DemiBold 50 | color: "#000000" 51 | text: control.value.toFixed(0) + "%" 52 | } 53 | } 54 | 55 | background: Image { 56 | source: "qrc:/assets/icons/sliderToolTip.svg" 57 | } 58 | } 59 | } 60 | 61 | RectangularGlow { 62 | id: effect 63 | anchors.fill: handler 64 | glowRadius: 10 65 | spread: 0.1 66 | color: Style.alphaColor("#D99315",0.5) 67 | cornerRadius: handler.radius + glowRadius 68 | } 69 | 70 | background: Rectangle { 71 | x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) 72 | y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) 73 | implicitWidth: control.horizontal ? 200 : 6 74 | implicitHeight: control.horizontal ? 6 : 200 75 | width: control.horizontal ? control.availableWidth : implicitWidth 76 | height: control.horizontal ? implicitHeight : control.availableHeight 77 | radius: 3 78 | color: control.palette.dark 79 | scale: control.horizontal && control.mirrored ? -1 : 1 80 | 81 | Rectangle { 82 | y: control.horizontal ? 0 : control.visualPosition * parent.height 83 | width: control.horizontal ? control.position * parent.width : 6 84 | height: control.horizontal ? 6 : control.position * parent.height 85 | 86 | radius: 3 87 | color: "#FFA500" 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /Components/PrefsSwitch.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.5 3 | import QtQuick.Layouts 1.3 4 | import Style 1.0 5 | 6 | Switch { 7 | id: control 8 | 9 | rightPadding: 0 10 | indicator: Rectangle { 11 | implicitHeight: 32 12 | implicitWidth: 56 13 | x: control.leftPadding 14 | y: parent.height / 2 - height / 2 15 | radius: width / 2 16 | color: control.checked ? "#E4A11B" : "#505050" 17 | 18 | Rectangle { 19 | x: control.checked ? (parent.width - width) - 2 : 2 20 | width: 28 21 | height: 28 22 | radius: height / 2 23 | color: "#FFFFFF" 24 | anchors.verticalCenter: parent.verticalCenter 25 | } 26 | } 27 | 28 | contentItem: Text { 29 | color: "#FFFFFF" 30 | text: control.text 31 | verticalAlignment: Text.AlignVCenter 32 | leftPadding: control.indicator.width + control.spacing 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Components/PrefsTabButton.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import Style 1.0 5 | import ".." 6 | TabButton { 7 | id: root 8 | 9 | property string title: "" 10 | property string textIcon: "" 11 | property color iconColor: Style.blue 12 | 13 | implicitWidth: 65 14 | implicitHeight: 110 15 | 16 | background: ShadowRectangle { 17 | anchors.fill: parent 18 | radius: parent.height /2 19 | visible: root.checked 20 | } 21 | 22 | contentItem: Item { 23 | width: parent.width 24 | height: layout.implicitHeight 25 | ColumnLayout { 26 | id: layout 27 | anchors.centerIn: parent 28 | spacing: 10 29 | ShadowRectangle { 30 | Layout.alignment: Qt.AlignHCenter 31 | implicitHeight: 60 32 | implicitWidth: 60 33 | radius: parent.height /2 34 | color: !root.checked ? Style.white : "#00000000" 35 | 36 | OutlinedLabel { 37 | anchors.centerIn: parent 38 | textIcon: root.textIcon 39 | iconSize: 18 40 | radius: implicitHeight /2 41 | borderColor: backgroundColor 42 | color: root.iconColor 43 | backgroundColor: Style.alphaColor(root.iconColor,0.2) 44 | implicitHeight: root.checked ? 55 : 45 45 | implicitWidth: root.checked ? 55 : 45 46 | } 47 | } 48 | 49 | Text { 50 | Layout.alignment: Qt.AlignHCenter 51 | Layout.bottomMargin: 10 52 | font.pixelSize: 14 53 | font.bold: Font.Bold 54 | font.weight: Font.Medium 55 | text: root.title 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Components/RightPane.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import QtQuick.Controls as QQC2 4 | import Style 1.0 5 | Item { 6 | id: rightItem 7 | height: parent.height 8 | anchors.left: middleItem.right 9 | anchors.right: parent.right 10 | anchors.leftMargin: 35 11 | 12 | ColumnLayout { 13 | anchors.fill: parent 14 | spacing: 16 15 | 16 | Rectangle { 17 | color: glassyBgColor 18 | radius: 16 19 | Layout.fillWidth: true 20 | Layout.preferredHeight: 200 21 | 22 | Item { 23 | anchors.fill: parent 24 | anchors.margins: 24 25 | 26 | PrefsCircularProgressBar { 27 | width: 190 28 | height: 190 29 | anchors.centerIn: parent 30 | knobBackgroundColor: '#48709F' 31 | knobColor: '#5CE1E6' 32 | from: 0 33 | to: 100 34 | value: 50 35 | lineWidth: 16 36 | 37 | Item { 38 | anchors.fill: parent 39 | anchors.margins: 16 40 | 41 | Text { 42 | text: commafy(powerConsumed) 43 | font.pixelSize: 36 44 | color: Style.textColor 45 | anchors.centerIn: parent 46 | 47 | Text { 48 | text: qsTr('Power') 49 | font.pixelSize: 16 50 | color: Style.textColor 51 | 52 | anchors.bottom: parent.top 53 | anchors.bottomMargin: 8 54 | anchors.left: parent.left 55 | } 56 | 57 | Text { 58 | text: qsTr('kW') 59 | font.pixelSize: 14 60 | color: Style.textColor 61 | 62 | anchors.top: parent.bottom 63 | anchors.right: parent.right 64 | } 65 | } 66 | } 67 | } 68 | } 69 | } 70 | 71 | Rectangle { 72 | color: glassyBgColor 73 | radius: 16 74 | Layout.fillWidth: true 75 | Layout.preferredHeight: lightswitchescol.height + 28 76 | 77 | Item { 78 | anchors.fill: parent 79 | anchors.margins: 24 80 | height: lightswitchescol.height 81 | 82 | ColumnLayout { 83 | id: lightswitchescol 84 | width: parent.width 85 | spacing: 16 86 | 87 | RightPaneLightSwitchComponent { 88 | label: qsTr('Windows') 89 | checked: true 90 | } 91 | 92 | Item { Layout.fillHeight: true } 93 | 94 | RightPaneLightSwitchComponent { 95 | label: qsTr('Blinders') 96 | checked: true 97 | } 98 | 99 | Item { Layout.fillHeight: true } 100 | 101 | RightPaneLightSwitchComponent { 102 | label: qsTr('Curtains') 103 | checked: false 104 | } 105 | } 106 | } 107 | } 108 | 109 | Rectangle { 110 | color: glassyBgColor 111 | radius: 16 112 | Layout.fillWidth: true 113 | Layout.preferredHeight: lightintensityitemcol.height + 48 114 | 115 | Item { 116 | anchors.fill: parent 117 | anchors.margins: 24 118 | height: lightintensityitemcol.height 119 | 120 | ColumnLayout { 121 | id: lightintensityitemcol 122 | width: parent.width 123 | spacing: 16 124 | 125 | RowLayout { 126 | width: parent.width 127 | height: 20 128 | 129 | Text { 130 | text: qsTr('Light Intensity') 131 | font.pixelSize: 14 132 | color: Style.textColor 133 | Layout.fillWidth: true 134 | Layout.alignment: Qt.AlignVCenter 135 | } 136 | 137 | PrefsSwitch { 138 | checked: true 139 | Layout.alignment: Qt.AlignVCenter 140 | } 141 | } 142 | 143 | Item { Layout.fillHeight: true } 144 | 145 | PrefsProgressBar { 146 | id: pb 147 | width: parent.width 148 | value: lightIntensity/100 149 | } 150 | 151 | Text { 152 | text: Math.round(pb.value * 100) 153 | font.pixelSize: 14 154 | color: Style.textColor 155 | width: parent.width 156 | horizontalAlignment: Text.AlignRight 157 | } 158 | } 159 | } 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /Components/RightPaneLightSwitchComponent.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import Style 1.0 4 | RowLayout { 5 | width: parent.width 6 | height: 20 7 | 8 | property string label 9 | property alias checked: _switch.checked 10 | 11 | Text { 12 | text: label 13 | font.pixelSize: 14 14 | color: Style.textColor 15 | Layout.fillWidth: true 16 | Layout.alignment: Qt.AlignVCenter 17 | } 18 | 19 | PrefsSwitch { 20 | id: _switch 21 | checked: true 22 | Layout.alignment: Qt.AlignVCenter 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Components/RoundRectangle.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Rectangle { 4 | id: root 5 | property int corners: Qt.AlignLeft | Qt.AlignRight | Qt.AlignTop | Qt.AlignBottom /* Default: */ 6 | /* 7 | Qt.AlignLeft | Qt.AlignLeft | Qt.AlignRight | Qt.AlignLeft | Qt.AlignLeft | 8 | Qt.AlignRight | Qt.AlignTop | Qt.AlignTop | Qt.AlignRight | Qt.AlignRight | 9 | None:0 Qt.AlignTop | Qt.AlignBottom Qt.AlignBottom Qt.AlignTop Qt.AlignBottom 10 | Qt.AlignBottom 11 | ***************** ************* *************** *************** ************* ***************** 12 | * * * * * * * * * * * * 13 | * * * * * * * * * * * * 14 | * * * * * * * * * * * * 15 | * * * * * * * * * * * * 16 | * * * * * * * * * * * * 17 | * * * * * * * * * * * * 18 | * * * * * * * * * * * * 19 | ***************** ************* *************** *************** ***************** ************* 20 | */ 21 | 22 | Repeater { 23 | model: [ { 24 | x: 0, 25 | y: 0, 26 | visible: internal.aligns(Qt.AlignLeft | Qt.AlignTop), 27 | radius: root.radius 28 | }, 29 | { 30 | x: root.width - root.radius, 31 | y: 0, 32 | visible: internal.aligns(Qt.AlignRight | Qt.AlignTop), 33 | radius: root.radius 34 | }, 35 | { 36 | x: 0, 37 | y: root.height - root.radius, 38 | visible: internal.aligns(Qt.AlignLeft | Qt.AlignBottom), 39 | radius: root.radius 40 | }, 41 | { 42 | x: root.width - root.radius, 43 | y: root.height - root.radius, 44 | visible: internal.aligns(Qt.AlignRight | Qt.AlignBottom), 45 | radius: root.radius 46 | } ] 47 | 48 | Rectangle { 49 | x: modelData.x; y: modelData.y 50 | width: modelData.radius; height: width 51 | visible: !modelData.visible 52 | color: parent.color 53 | } 54 | } 55 | 56 | QtObject { 57 | id: internal 58 | 59 | function aligns(direction) { 60 | return (root.corners & direction) === direction 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Components/Tile.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import Style 1.0 4 | 5 | Pane { 6 | id:root 7 | 8 | property string source: "qrc:/assets/others/Ellipse 46.png" 9 | property string title 10 | 11 | padding: 0 12 | width: 701 13 | height: 265 14 | 15 | background: Rectangle { 16 | anchors.fill: parent 17 | color: "#00000000"//Style.alphaColor("#000000",0.5) 18 | radius: 18 19 | 20 | Text { 21 | text: root.title 22 | anchors.left: parent.left 23 | anchors.top: parent.top 24 | anchors.leftMargin: 10 25 | anchors.topMargin: 5 26 | 27 | font.pixelSize: 24 28 | font.bold: Font.DemiBold 29 | color: Style.seashell 30 | } 31 | } 32 | 33 | Image{ 34 | anchors.left: parent.left 35 | anchors.top: parent.top 36 | anchors.leftMargin: 50 37 | source: root.source 38 | fillMode: Image.PreserveAspectFit 39 | } 40 | 41 | Image{ 42 | id: pallet 43 | source: "qrc:/assets/others/Subtract.svg" 44 | fillMode: Image.PreserveAspectFit 45 | anchors.centerIn: parent 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Components/TimeShow.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import Style 1.0 3 | Item { 4 | id: dateitem 5 | height: 150 6 | width: parent.width 7 | anchors.top: parent.top 8 | 9 | Text { 10 | text: Qt.formatDate(currentTime, 'yyyy-MM-dd') 11 | font.pixelSize: 16 12 | color: Style.textColor 13 | anchors.top: parent.top 14 | anchors.left: parent.left 15 | anchors.leftMargin: 24 16 | anchors.topMargin: 24 17 | } 18 | 19 | Text { 20 | text: Qt.formatDate(currentTime, 'ddd') 21 | font.pixelSize: 16 22 | color: Style.textColor 23 | anchors.top: parent.top 24 | anchors.right: ampmtxt.right 25 | anchors.topMargin: 24 26 | } 27 | 28 | Text { 29 | id: timetxt 30 | text: Qt.formatTime(currentTime, 'hh:mm') 31 | font.pixelSize: 64 32 | color: Style.textColor 33 | anchors.bottom: parent.bottom 34 | anchors.left: parent.left 35 | anchors.leftMargin: 24 36 | anchors.bottomMargin: 24 37 | } 38 | 39 | Text { 40 | id: sectxt 41 | width: 50 42 | text: ':' + Qt.formatTime(currentTime, 'ss') 43 | font.pixelSize: 24 44 | color: Style.textColor 45 | anchors.baseline: timetxt.baseline 46 | anchors.left: timetxt.right 47 | } 48 | 49 | Text { 50 | id: ampmtxt 51 | text: Qt.formatTime(currentTime, 'AP') 52 | font.pixelSize: 16 53 | color: Style.textColor 54 | anchors.baseline: timetxt.baseline 55 | anchors.left: sectxt.right 56 | anchors.leftMargin: 8 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Components/WizardStepper.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2 | import QtQuick.Layouts 3 | import QtQuick.Controls 4 | import Style 1.0 5 | 6 | import "." 7 | 8 | Item { 9 | id: root 10 | width: parent.width 11 | height: 45 12 | property ListModel stepsModel: ListModel { } 13 | 14 | ListView { 15 | id: repeat 16 | width: childrenRect.width 17 | height: parent.height 18 | anchors.horizontalCenter: parent.horizontalCenter 19 | orientation: ListView.Horizontal 20 | interactive : false 21 | model: stepsModel 22 | 23 | spacing: 2 24 | delegate: RowLayout { 25 | id: delegate 26 | height: root.height 27 | spacing: repeat.spacing 28 | 29 | Rectangle { 30 | id: icon 31 | Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter 32 | width: root.height 33 | height: root.height 34 | radius: width/2 35 | 36 | color: stepCompleted ? "#00000000" : Style.charcoalGrey 37 | border.color: Style.charcoalGrey 38 | border.width: 2 39 | 40 | Text { 41 | anchors.centerIn: parent 42 | visible: !stepCompleted 43 | text: index+1 44 | font.pixelSize: 17 45 | color: Style.textColor 46 | } 47 | 48 | IconLabel { 49 | anchors.centerIn: parent 50 | visible: stepCompleted 51 | icon: "\uf00c" 52 | size: 18 53 | color: Style.textColor 54 | } 55 | } 56 | 57 | Rectangle { 58 | id: line 59 | Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter 60 | Layout.preferredWidth: root.height 61 | height: visible ? 2 : 0 62 | 63 | visible: (index !== repeat.count - 1) 64 | color: Style.charcoalGrey 65 | radius: 5 66 | } 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /HomeApplication.pro: -------------------------------------------------------------------------------- 1 | QT += quick qml core svg quickcontrols2 multimedia 2 | 3 | # You can make your code fail to compile if it uses deprecated APIs. 4 | # In order to do so, uncomment the following line. 5 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 6 | 7 | SOURCES += \ 8 | appliancesdetails.cpp \ 9 | appliancesmodel.cpp \ 10 | main.cpp 11 | 12 | RESOURCES += qml.qrc 13 | 14 | # Additional import path used to resolve QML modules in Qt Creator's code model 15 | QML_IMPORT_PATH = 16 | 17 | # Additional import path used to resolve QML modules just for Qt Quick Designer 18 | QML_DESIGNER_IMPORT_PATH = 19 | 20 | # Default rules for deployment. 21 | qnx: target.path = /tmp/$${TARGET}/bin 22 | else: unix:!android: target.path = /opt/$${TARGET}/bin 23 | !isEmpty(target.path): INSTALLS += target 24 | 25 | HEADERS += \ 26 | appliancesdetails.h \ 27 | appliancesmodel.h 28 | -------------------------------------------------------------------------------- /HomePage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | 5 | Item { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /LabDelegate.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import Style 5 | 6 | import "Components" 7 | 8 | ShadowRectangle { 9 | 10 | property bool showInfo: false 11 | property string icon: "\uf03d" 12 | property string title: "Study Lanp" 13 | property bool isAvaible: false 14 | property bool isOpen: false 15 | 16 | id: control 17 | Layout.fillWidth: true 18 | Layout.preferredHeight: 60 19 | 20 | IconLabel { 21 | visible: showInfo && !isAvaible 22 | icon: "\uf06a" 23 | size: 18 24 | color: Style.alphaColor(Style.red,0.6) 25 | anchors.right: parent.right 26 | anchors.rightMargin: 8 27 | anchors.top: parent.top 28 | anchors.topMargin: 8 29 | } 30 | 31 | RowLayout { 32 | anchors.centerIn: parent 33 | width: parent.width 34 | spacing: 10 35 | 36 | ShadowRectangle { 37 | Layout.leftMargin: 5 38 | Layout.alignment: Qt.AlignVCenter 39 | implicitHeight: 52 40 | implicitWidth: 52 41 | radius: implicitHeight / 2 42 | OutlinedLabel { 43 | anchors.centerIn: parent 44 | textIcon: control.icon 45 | iconSize: 18 46 | radius: 24 47 | color: isAvaible && isOpen ? Style.green : Style.iconColor 48 | backgroundColor: Style.alphaColor(color,0.2) 49 | borderColor: backgroundColor 50 | implicitHeight: 42 51 | implicitWidth: 42 52 | } 53 | } 54 | 55 | ColumnLayout { 56 | Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft 57 | Text { 58 | font.pixelSize: 16 59 | font.bold: Font.Bold 60 | font.weight: Font.Medium 61 | text: title 62 | } 63 | Text { 64 | font.pixelSize: 12 65 | text: isAvaible ? isOpen ? qsTr("Opened") : qsTr("Closed") : qsTr("Unavaible") 66 | color: Style.alphaColor("#000000",0.2) 67 | } 68 | } 69 | 70 | Item { Layout.fillWidth: true } 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Qt Version Qt 6.5.x 2 | 3 | ## Screens 4 | ![Home Screen ](https://github.com/cppqtdev/QT-Modern-Home-Automation/blob/main/screenshots/Home-Screen.png) 5 | ![Home Screen 2 ](https://github.com/cppqtdev/QT-Modern-Home-Automation/blob/main/screenshots/Home-Screen-2.png) 6 | ![Home Screen 3 ](https://github.com/cppqtdev/QT-Modern-Home-Automation/blob/main/screenshots/Home-Screen-3.png) 7 | 8 | # Youtube Video 9 | ### Link : [Home Automation Youtube Video ](https://www.youtube.com/watch?v=CAEyq1-oNPI&t=12s) 10 | -------------------------------------------------------------------------------- /RightDrawer.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import QtQuick.Controls.impl 5 | import QtQuick.Templates as T 6 | 7 | Drawer { 8 | id: root 9 | height: parent.height 10 | width: 200 11 | edge: Qt.RightEdge 12 | 13 | padding: 0 14 | background: Rectangle { 15 | anchors.fill: parent 16 | color: Style.white 17 | } 18 | 19 | T.Overlay.modal: Rectangle { 20 | color: "#00000000" 21 | } 22 | 23 | T.Overlay.modeless: Rectangle { 24 | color: "#00000000" 25 | } 26 | 27 | contentItem: Item { 28 | anchors.fill: parent 29 | 30 | Rectangle { 31 | height: 40 32 | width: 4 33 | radius: 2 34 | color: "#bfbfbfd9" 35 | anchors.verticalCenter: parent.verticalCenter 36 | anchors.left: parent.left 37 | anchors.leftMargin: 5 38 | } 39 | 40 | ListView { 41 | id: applianceView 42 | clip: true 43 | anchors.topMargin: 25 44 | anchors.bottomMargin: 20 45 | anchors.fill: parent 46 | model: 10//gAppliancesModel 47 | spacing: 20 48 | delegate: RightSideDrawerDelegate { 49 | anchors.horizontalCenter: parent.horizontalCenter 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /RightSideDrawerDelegate.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import Qt5Compat.GraphicalEffects 5 | import "Components" 6 | 7 | ItemDelegate { 8 | width: 160 9 | height: 160 10 | background: Rectangle { 11 | id: backgroundID 12 | anchors.fill: parent 13 | color: Style.white 14 | radius: 16 15 | } 16 | 17 | DropShadow { 18 | anchors.fill: backgroundID 19 | horizontalOffset: 2 20 | verticalOffset: 2 21 | radius: 8.0 22 | samples: 18 23 | color: Style.alphaColor("#80000000",0.3) 24 | source: backgroundID 25 | } 26 | 27 | DropShadow { 28 | anchors.fill: backgroundID 29 | horizontalOffset: -1 30 | verticalOffset: -1 31 | radius: 8.0 32 | samples: 18 33 | color: Style.alphaColor("#80000000",0.2) 34 | source: backgroundID 35 | } 36 | 37 | contentItem: Item{ 38 | anchors.fill: parent 39 | ColumnLayout { 40 | anchors.right: parent.right 41 | anchors.rightMargin: 8 42 | anchors.top: parent.top 43 | anchors.topMargin: 8 44 | spacing: 5 45 | 46 | OutlinedLabel { 47 | Layout.alignment: Qt.AlignHCenter 48 | textIcon: "\uf1e6" 49 | iconSize: 14 50 | implicitHeight: 28 51 | implicitWidth: 28 52 | radius: 18 53 | color: Style.green 54 | backgroundColor: Style.alphaColor(Style.green,0.2) 55 | } 56 | OutlinedLabel { 57 | Layout.alignment: Qt.AlignHCenter 58 | textIcon: "\uf1eb" 59 | iconSize: 12 60 | implicitHeight: 28 61 | implicitWidth: 28 62 | radius: 18 63 | color: Style.blue 64 | backgroundColor: Style.alphaColor(Style.blue,0.2) 65 | } 66 | } 67 | 68 | ColumnLayout { 69 | width: parent.width * 0.7 70 | anchors.left: parent.left 71 | anchors.leftMargin: 8 72 | anchors.top: parent.top 73 | anchors.topMargin: 8 74 | 75 | Text { 76 | Layout.preferredWidth: parent.width 77 | Layout.alignment: Qt.AlignHCenter | Qt.AlignLeft 78 | text: qsTr("Google Home Max Charcol") 79 | font.pixelSize: 14 80 | font.bold: Font.Bold 81 | font.weight: Font.ExtraBold 82 | wrapMode: Text.WrapAtWordBoundaryOrAnywhere 83 | } 84 | 85 | Text { 86 | Layout.alignment: Qt.AlignHCenter | Qt.AlignLeft 87 | text: qsTr("Opening") 88 | font.pixelSize: 14 89 | } 90 | } 91 | 92 | Image{ 93 | source: "qrc:/assets/icons/1.png" 94 | anchors.horizontalCenter: parent.horizontalCenter 95 | anchors.bottom: parent.bottom 96 | sourceSize: Qt.size(160,160) 97 | } 98 | 99 | OutlinedLabel { 100 | anchors.left: parent.left 101 | anchors.leftMargin: 8 102 | anchors.bottom: parent.bottom 103 | anchors.bottomMargin: 8 104 | 105 | textIcon: "\uf06a" 106 | iconSize: 14 107 | implicitHeight: 28 108 | implicitWidth: 28 109 | radius: 18 110 | color: Style.red 111 | backgroundColor: Style.alphaColor(Style.red,0.2) 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /ShadowRectangle.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 3 | import QtQuick.Layouts 4 | import Qt5Compat.GraphicalEffects 5 | import "Components" 6 | import Style 7 | 8 | Pane { 9 | id: control 10 | padding: 0 11 | property real radius: 16 12 | property var gradient: null 13 | property color color: Style.white 14 | 15 | background: Item { 16 | Rectangle { 17 | id: backgroundID 18 | anchors.fill: parent 19 | color: control.color 20 | radius: control.radius 21 | gradient: control.gradient 22 | } 23 | DropShadow { 24 | anchors.fill: backgroundID 25 | horizontalOffset: 2 26 | verticalOffset: 2 27 | radius: 8.0 28 | samples: 18 29 | color: Style.alphaColor("#80000000",0.3) 30 | source: backgroundID 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Style.qml: -------------------------------------------------------------------------------- 1 | pragma Singleton 2 | import QtQuick 2.15 3 | 4 | QtObject { 5 | readonly property color background: "#e2e2e2" 6 | 7 | readonly property color white: "#fafafa" 8 | readonly property color black: "#050506" 9 | readonly property color red: "#e25141" 10 | readonly property color blue: "#405ff5" 11 | readonly property color blueGreen: "#5b32f5" 12 | readonly property color green: "#5ac461" 13 | readonly property color yello: "#f19537" 14 | readonly property color yellowLight: "#e29155" 15 | readonly property color iconColor: "#4a4a4a" 16 | 17 | 18 | property color textColor: "#FFFFFF" 19 | property color charcoalGrey: "#404040" 20 | property color granite: "#808080" 21 | property color paleSlate: "#BFBFBF" 22 | property color lightColor4: "#000000" 23 | 24 | property color lightLime: "#A5FF5D" 25 | property color pastelBlue: "#96C6FF" 26 | property color cinder: "#151515" 27 | property color seashell: "#F1F1F1" 28 | 29 | property var fontawesomefont: fontawesome.name 30 | property FontLoader fontawesome: FontLoader{ 31 | source: "qrc:/fonts/fontawesome.otf" 32 | } 33 | 34 | function alphaColor(color, alpha) { 35 | let actualColor = Qt.darker(color, 1) 36 | actualColor.a = alpha 37 | return actualColor 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /appliancesdetails.cpp: -------------------------------------------------------------------------------- 1 | #include "appliancesdetails.h" 2 | #include 3 | 4 | AppliancesDetails::AppliancesDetails(QObject *parent) 5 | : QObject{parent} 6 | { 7 | qDebug() << "Appliance Added :: " << m_title; 8 | } 9 | 10 | QString AppliancesDetails::title() const 11 | { 12 | return m_title; 13 | } 14 | 15 | void AppliancesDetails::setTitle(const QString &newTitle) 16 | { 17 | if (m_title == newTitle) 18 | return; 19 | m_title = newTitle; 20 | emit titleChanged(); 21 | } 22 | 23 | bool AppliancesDetails::onOff() const 24 | { 25 | return m_onOff; 26 | } 27 | 28 | void AppliancesDetails::setOnOff(bool newOnOff) 29 | { 30 | if (m_onOff == newOnOff) 31 | return; 32 | m_onOff = newOnOff; 33 | emit onOffChanged(); 34 | } 35 | 36 | bool AppliancesDetails::wifiConnected() const 37 | { 38 | return m_wifiConnected; 39 | } 40 | 41 | void AppliancesDetails::setWifiConnected(bool newWifiConnected) 42 | { 43 | if (m_wifiConnected == newWifiConnected) 44 | return; 45 | m_wifiConnected = newWifiConnected; 46 | emit wifiConnectedChanged(); 47 | } 48 | 49 | bool AppliancesDetails::fault() const 50 | { 51 | return m_fault; 52 | } 53 | 54 | void AppliancesDetails::setFault(bool newFault) 55 | { 56 | if (m_fault == newFault) 57 | return; 58 | m_fault = newFault; 59 | emit faultChanged(); 60 | } 61 | 62 | bool AppliancesDetails::batteryPowered() const 63 | { 64 | return m_batteryPowered; 65 | } 66 | 67 | void AppliancesDetails::setBatteryPowered(bool newBatteryPowered) 68 | { 69 | if (m_batteryPowered == newBatteryPowered) 70 | return; 71 | m_batteryPowered = newBatteryPowered; 72 | emit batteryPoweredChanged(); 73 | } 74 | 75 | QString AppliancesDetails::icon() const 76 | { 77 | return m_icon; 78 | } 79 | 80 | void AppliancesDetails::setIcon(const QString &newIcon) 81 | { 82 | if (m_icon == newIcon) 83 | return; 84 | m_icon = newIcon; 85 | emit iconChanged(); 86 | } 87 | 88 | bool AppliancesDetails::wifiOn() const 89 | { 90 | return m_wifiOn; 91 | } 92 | 93 | void AppliancesDetails::setWifiOn(bool newWifiOn) 94 | { 95 | if (m_wifiOn == newWifiOn) 96 | return; 97 | m_wifiOn = newWifiOn; 98 | emit wifiOnChanged(); 99 | } 100 | 101 | bool AppliancesDetails::switchOnOff() const 102 | { 103 | return m_switchOnOff; 104 | } 105 | 106 | void AppliancesDetails::setSwitchOnOff(bool newSwitchOnOff) 107 | { 108 | if (m_switchOnOff == newSwitchOnOff) 109 | return; 110 | m_switchOnOff = newSwitchOnOff; 111 | emit switchOnOffChanged(); 112 | } 113 | -------------------------------------------------------------------------------- /appliancesdetails.h: -------------------------------------------------------------------------------- 1 | #ifndef APPLIANCESDETAILS_H 2 | #define APPLIANCESDETAILS_H 3 | 4 | #include 5 | 6 | class AppliancesDetails : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit AppliancesDetails(QObject *parent = nullptr); 11 | Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) 12 | Q_PROPERTY(bool onOff READ onOff WRITE setOnOff NOTIFY onOffChanged FINAL) 13 | Q_PROPERTY(bool wifiConnected READ wifiConnected WRITE setWifiConnected NOTIFY 14 | wifiConnectedChanged FINAL) 15 | Q_PROPERTY(bool wifiOn READ wifiOn WRITE setWifiOn NOTIFY wifiOnChanged FINAL) 16 | Q_PROPERTY(bool fault READ fault WRITE setFault NOTIFY faultChanged FINAL) 17 | Q_PROPERTY(bool batteryPowered READ batteryPowered WRITE setBatteryPowered NOTIFY 18 | batteryPoweredChanged FINAL) 19 | Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged FINAL) 20 | Q_PROPERTY(bool switchOnOff READ switchOnOff WRITE setSwitchOnOff NOTIFY switchOnOffChanged FINAL) 21 | 22 | QString title() const; 23 | bool onOff() const; 24 | bool wifiConnected() const; 25 | bool fault() const; 26 | bool batteryPowered() const; 27 | QString icon() const; 28 | bool wifiOn() const; 29 | bool switchOnOff() const; 30 | 31 | public slots: 32 | void setTitle(const QString &newTitle); 33 | void setOnOff(bool newOnOff); 34 | void setWifiConnected(bool newWifiConnected); 35 | void setWifiOn(bool newWifiOn); 36 | void setFault(bool newFault); 37 | void setBatteryPowered(bool newBatteryPowered); 38 | void setIcon(const QString &newIcon); 39 | void setSwitchOnOff(bool newSwitchOnOff); 40 | 41 | signals: 42 | void titleChanged(); 43 | void onOffChanged(); 44 | void wifiConnectedChanged(); 45 | void faultChanged(); 46 | void batteryPoweredChanged(); 47 | void iconChanged(); 48 | void wifiOnChanged(); 49 | 50 | void switchOnOffChanged(); 51 | 52 | private: 53 | QString m_title; 54 | bool m_onOff; 55 | bool m_wifiConnected; 56 | bool m_fault; 57 | bool m_batteryPowered; 58 | QString m_icon; 59 | bool m_wifiOn; 60 | bool m_switchOnOff; 61 | }; 62 | 63 | #endif // APPLIANCESDETAILS_H 64 | -------------------------------------------------------------------------------- /appliancesmodel.cpp: -------------------------------------------------------------------------------- 1 | #include "appliancesmodel.h" 2 | #include "appliancesdetails.h" 3 | 4 | AppliancesModel::AppliancesModel(QObject *parent) 5 | : QAbstractListModel(parent) 6 | {} 7 | 8 | int AppliancesModel::rowCount(const QModelIndex &parent) const 9 | { 10 | Q_UNUSED(parent) 11 | return mAppliancesList.size(); 12 | } 13 | 14 | QHash AppliancesModel::roleNames() const 15 | { 16 | QHash roles; 17 | 18 | roles[NameRole] = "title"; 19 | roles[AppliancesRole] = "icon"; 20 | roles[OpenCloseRole] = "isOpen"; 21 | roles[WifiConnectedRole] = "isWifiConnected"; 22 | roles[WifiOnOffRole] = "isWifiOn"; 23 | roles[SwitchOnRole] = "isOn"; 24 | roles[BatteryPowerRole] = "isBatteryPowered"; 25 | roles[WarningRole] = "isWarning"; 26 | 27 | return roles; 28 | } 29 | 30 | QVariant AppliancesModel::data(const QModelIndex &index, int role) const 31 | { 32 | if (!index.isValid() || index.row() > mAppliancesList.size()) { 33 | return {}; 34 | } 35 | 36 | AppliancesDetails *appliance = mAppliancesList[index.row()]; 37 | 38 | switch (role) { 39 | case NameRole: 40 | return appliance->title(); 41 | break; 42 | case AppliancesRole: 43 | return appliance->icon(); 44 | break; 45 | case OpenCloseRole: 46 | return appliance->onOff(); 47 | break; 48 | case WifiConnectedRole: 49 | return appliance->wifiConnected(); 50 | break; 51 | case WifiOnOffRole: 52 | return appliance->wifiOn(); 53 | break; 54 | case SwitchOnRole: 55 | return appliance->switchOnOff(); 56 | break; 57 | case BatteryPowerRole: 58 | return appliance->batteryPowered(); 59 | break; 60 | case WarningRole: 61 | return appliance->fault(); 62 | break; 63 | default: 64 | break; 65 | } 66 | 67 | return {}; 68 | } 69 | 70 | bool AppliancesModel::setData(const QModelIndex &index, const QVariant &value, int role) 71 | { 72 | bool isChanged = false; 73 | if (!index.isValid() || index.row() > mAppliancesList.size()) { 74 | return isChanged; 75 | } 76 | 77 | AppliancesDetails *appliance = mAppliancesList[index.row()]; 78 | 79 | switch (role) { 80 | case NameRole: 81 | if (appliance->title() != value.toString()) { 82 | appliance->setTitle(value.toString()); 83 | isChanged = true; 84 | } 85 | break; 86 | case AppliancesRole: 87 | if (appliance->title() != value.toString()) { 88 | appliance->setIcon(value.toString()); 89 | isChanged = true; 90 | } 91 | break; 92 | case OpenCloseRole: 93 | if (appliance->onOff() != value.toBool()) { 94 | appliance->setOnOff(value.toBool()); 95 | isChanged = true; 96 | } 97 | break; 98 | case WifiConnectedRole: 99 | if (appliance->wifiConnected() != value.toBool()) { 100 | appliance->setWifiConnected(value.toBool()); 101 | isChanged = true; 102 | } 103 | break; 104 | case WifiOnOffRole: 105 | if (appliance->wifiOn() != value.toBool()) { 106 | appliance->setWifiOn(value.toBool()); 107 | isChanged = true; 108 | } 109 | break; 110 | case SwitchOnRole: 111 | if (appliance->switchOnOff() != value.toBool()) { 112 | appliance->setSwitchOnOff(value.toBool()); 113 | isChanged = true; 114 | } 115 | break; 116 | case BatteryPowerRole: 117 | if (appliance->batteryPowered() != value.toBool()) { 118 | appliance->setBatteryPowered(value.toBool()); 119 | isChanged = true; 120 | } 121 | break; 122 | case WarningRole: 123 | if (appliance->fault() != value.toBool()) { 124 | appliance->setFault(value.toBool()); 125 | isChanged = true; 126 | } 127 | break; 128 | default: 129 | break; 130 | } 131 | 132 | if (isChanged) { 133 | emit dataChanged(index, index, QVector() << role); 134 | } 135 | 136 | return isChanged; 137 | } 138 | 139 | Qt::ItemFlags AppliancesModel::flags(const QModelIndex &index) const 140 | { 141 | if (index.isValid()) { 142 | return Qt::ItemIsEditable; 143 | } 144 | return Qt::NoItemFlags; 145 | } 146 | 147 | void AppliancesModel::addAppliances(AppliancesDetails *appliances) 148 | { 149 | const int size = mAppliancesList.size(); 150 | beginInsertRows(QModelIndex(), size, size); 151 | mAppliancesList.append(appliances); 152 | endInsertRows(); 153 | } 154 | 155 | void AppliancesModel::deleteAppliances(int index) 156 | { 157 | const int size = mAppliancesList.size(); 158 | beginRemoveRows(QModelIndex(), size, size); 159 | mAppliancesList.removeAt(index); 160 | endRemoveRows(); 161 | } 162 | -------------------------------------------------------------------------------- /appliancesmodel.h: -------------------------------------------------------------------------------- 1 | #ifndef APPLIANCESMODEL_H 2 | #define APPLIANCESMODEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class AppliancesDetails; 9 | class AppliancesModel : public QAbstractListModel 10 | { 11 | public: 12 | enum AppliancesRoles { 13 | NameRole = Qt::DisplayRole + 1, 14 | AppliancesRole, 15 | OpenCloseRole, 16 | WifiConnectedRole, 17 | WifiOnOffRole, 18 | SwitchOnRole, 19 | BatteryPowerRole, 20 | WarningRole 21 | }; 22 | 23 | explicit AppliancesModel(QObject *parent = nullptr); 24 | 25 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; 26 | QHash roleNames() const override; 27 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 28 | bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 29 | Qt::ItemFlags flags(const QModelIndex &index) const override; 30 | 31 | void addAppliances(AppliancesDetails *appliances); 32 | void deleteAppliances(int index); 33 | 34 | private: 35 | QList mAppliancesList; 36 | }; 37 | 38 | #endif // APPLIANCESMODEL_H 39 | -------------------------------------------------------------------------------- /assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/.DS_Store -------------------------------------------------------------------------------- /assets/Cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/Cover.png -------------------------------------------------------------------------------- /assets/Rectangle 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/Rectangle 2.png -------------------------------------------------------------------------------- /assets/SmartHome/Icon_BBQ.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_comfy sofa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_dishwater.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_electricity.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_microwave.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_mirror closet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_refrigerator.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_router.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_sockets.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_sofa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_stairs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_table.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_television.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_washing machine.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /assets/SmartHome/Icon_water.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /assets/brasero.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/brave-browser.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/check-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /assets/fan-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icon _flash_.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/1.png -------------------------------------------------------------------------------- /assets/icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/2.png -------------------------------------------------------------------------------- /assets/icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/3.png -------------------------------------------------------------------------------- /assets/icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/4.png -------------------------------------------------------------------------------- /assets/icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/5.png -------------------------------------------------------------------------------- /assets/icons/Rectangle 11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/Rectangle 11.png -------------------------------------------------------------------------------- /assets/icons/Rectangle 13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/Rectangle 13.png -------------------------------------------------------------------------------- /assets/icons/airdrop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/drop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/electricity.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/fault.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/faultindi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/flash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/keyboard-open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/keyboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/monitor.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/moon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/sliderToolTip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /assets/icons/speaker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/icons/speaker.jpg -------------------------------------------------------------------------------- /assets/icons/speaker.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/sun 2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/icons/sun.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/icons/wind.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/itunes.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/light1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/light1.png -------------------------------------------------------------------------------- /assets/light2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/light2.png -------------------------------------------------------------------------------- /assets/new icons/1786492-01 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/new icons/1786492-01 1.png -------------------------------------------------------------------------------- /assets/new icons/AC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/new icons/AC.png -------------------------------------------------------------------------------- /assets/new icons/AMZ030101-main 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/new icons/AMZ030101-main 1.png -------------------------------------------------------------------------------- /assets/new icons/image 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/new icons/image 1.png -------------------------------------------------------------------------------- /assets/new icons/sensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/new icons/sensor.png -------------------------------------------------------------------------------- /assets/others/Ellipse 44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/others/Ellipse 44.png -------------------------------------------------------------------------------- /assets/others/Ellipse 45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/others/Ellipse 45.png -------------------------------------------------------------------------------- /assets/others/Ellipse 46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/others/Ellipse 46.png -------------------------------------------------------------------------------- /assets/others/Ellipse 47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/others/Ellipse 47.png -------------------------------------------------------------------------------- /assets/others/Subtract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/assets/others/Subtract.png -------------------------------------------------------------------------------- /assets/others/Subtract.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/reload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/spotify-client.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/system-run.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/wrench.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/youtube-to-mp3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/🦆 icon _flash_.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fonts/CodecPro-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/fonts/CodecPro-Italic.ttf -------------------------------------------------------------------------------- /fonts/CodecPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/fonts/CodecPro-Regular.ttf -------------------------------------------------------------------------------- /fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /fonts/fontawesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/fonts/fontawesome.otf -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "appliancesmodel.h" 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 14 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 15 | #endif 16 | QGuiApplication app(argc, argv); 17 | 18 | QQuickStyle::setStyle("Basic"); 19 | QFontDatabase::addApplicationFont(":/fonts/Lato-Regular.ttf"); 20 | QFont font("Lato"); 21 | QGuiApplication::setFont(font); 22 | 23 | QQmlApplicationEngine engine; 24 | 25 | const QUrl style(QStringLiteral("qrc:/Style.qml")); 26 | qmlRegisterSingletonType(style, "Style", 1, 0, "Style"); 27 | 28 | AppliancesModel *appliancesModel = new AppliancesModel(); 29 | engine.rootContext()->setContextProperty("gAppliancesModel", appliancesModel); 30 | const QUrl url(QStringLiteral("qrc:/main.qml")); 31 | QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, 32 | &app, [url](QObject *obj, const QUrl &objUrl) { 33 | if (!obj && url == objUrl) 34 | QCoreApplication::exit(-1); 35 | }, Qt::QueuedConnection); 36 | engine.load(url); 37 | 38 | return app.exec(); 39 | } 40 | -------------------------------------------------------------------------------- /qml.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | main.qml 4 | HomePage.qml 5 | Style.qml 6 | assets/icons/fault.svg 7 | assets/icons/faultindi.svg 8 | assets/icons/sliderToolTip.svg 9 | assets/others/Ellipse 44.png 10 | assets/others/Ellipse 45.png 11 | assets/others/Ellipse 46.png 12 | assets/others/Ellipse 47.png 13 | assets/others/Subtract.png 14 | assets/others/Subtract.svg 15 | assets/brasero.svg 16 | assets/brave-browser.svg 17 | assets/check-solid.svg 18 | assets/Cover.png 19 | assets/fan-solid.svg 20 | assets/itunes.svg 21 | assets/light1.png 22 | assets/light2.png 23 | assets/reload.svg 24 | assets/spotify-client.svg 25 | assets/system-run.svg 26 | assets/wrench.svg 27 | assets/youtube-to-mp3.svg 28 | assets/youtube.svg 29 | assets/icon _flash_.svg 30 | Components/CCTVTile.qml 31 | Components/CircularSlider.qml 32 | Components/EffectButton.qml 33 | Components/IconImage.qml 34 | Components/IconLabel.qml 35 | Components/LeftPane.qml 36 | Components/LightingTile.qml 37 | Components/MiddlePane.qml 38 | Components/MiddlePaneWidget.qml 39 | Components/OutlinedLabel.qml 40 | Components/PrefsCircularProgressBar.qml 41 | Components/PrefsLabel.qml 42 | Components/PrefsLabelSelector.qml 43 | Components/PrefsProgressBar.qml 44 | Components/PrefsSlider.qml 45 | Components/PrefsSwitch.qml 46 | Components/PrefsTabButton.qml 47 | Components/RightPane.qml 48 | Components/RightPaneLightSwitchComponent.qml 49 | Components/Tile.qml 50 | Components/TimeShow.qml 51 | Components/WizardStepper.qml 52 | fonts/CodecPro-Italic.ttf 53 | fonts/CodecPro-Regular.ttf 54 | fonts/fontawesome.otf 55 | fonts/Lato-Bold.ttf 56 | fonts/Lato-Regular.ttf 57 | RightDrawer.qml 58 | RightSideDrawerDelegate.qml 59 | assets/icons/speaker.jpg 60 | assets/icons/Rectangle 11.png 61 | assets/icons/Rectangle 11.svg 62 | assets/icons/Rectangle 13.png 63 | assets/icons/1.png 64 | assets/icons/2.png 65 | assets/icons/3.png 66 | assets/icons/4.png 67 | assets/icons/5.png 68 | Components/RoundRectangle.qml 69 | BottomDrawer.qml 70 | Components/OutlinedButtonWithicon.qml 71 | ShadowRectangle.qml 72 | LabDelegate.qml 73 | assets/SmartHome/Icon_armchair.svg 74 | assets/SmartHome/Icon_BBQ.svg 75 | assets/SmartHome/Icon_closet.svg 76 | assets/SmartHome/Icon_coffee maker.svg 77 | assets/SmartHome/Icon_comfy sofa.svg 78 | assets/SmartHome/Icon_dishwater.svg 79 | assets/SmartHome/Icon_electric stove.svg 80 | assets/SmartHome/Icon_electricity.svg 81 | assets/SmartHome/Icon_microwave.svg 82 | assets/SmartHome/Icon_mirror closet.svg 83 | assets/SmartHome/Icon_refrigerator.svg 84 | assets/SmartHome/Icon_router.svg 85 | assets/SmartHome/Icon_sockets.svg 86 | assets/SmartHome/Icon_sofa.svg 87 | assets/SmartHome/Icon_stairs.svg 88 | assets/SmartHome/Icon_stove.svg 89 | assets/SmartHome/Icon_table.svg 90 | assets/SmartHome/Icon_television.svg 91 | assets/SmartHome/Icon_washing machine.svg 92 | assets/SmartHome/Icon_water.svg 93 | assets/new icons/1786492-01 1.png 94 | assets/new icons/AC.png 95 | assets/new icons/AC.svg 96 | assets/new icons/AMZ030101-main 1.png 97 | assets/new icons/image 1.png 98 | assets/new icons/Lights.svg 99 | assets/new icons/pngegg 2.svg 100 | assets/new icons/pngwing 1.svg 101 | assets/new icons/sensor.png 102 | Components/ImageButton.qml 103 | assets/icons/airdrop.svg 104 | assets/icons/drop.svg 105 | assets/icons/electricity.svg 106 | assets/icons/flash.svg 107 | assets/icons/keyboard-open.svg 108 | assets/icons/keyboard.svg 109 | assets/icons/monitor.svg 110 | assets/icons/moon.svg 111 | assets/icons/speaker.svg 112 | assets/icons/sun 2.svg 113 | assets/icons/sun.svg 114 | assets/icons/wind.svg 115 | Components/CustumPrefsLabelSelector.qml 116 | Components/DevicesTile.qml 117 | assets/Rectangle 2.png 118 | 119 | 120 | -------------------------------------------------------------------------------- /screenshots/Home-Screen-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/screenshots/Home-Screen-2.png -------------------------------------------------------------------------------- /screenshots/Home-Screen-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/screenshots/Home-Screen-3.png -------------------------------------------------------------------------------- /screenshots/Home-Screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cppqtdev/QT-Modern-Home-Automation/4ecc1075832f44bed6def53662426e77ae6a6231/screenshots/Home-Screen.png --------------------------------------------------------------------------------