~nicohman/signal-rs

c037da6b7b568e2d16f2074983199d75f26e5b6c — nicohman 9 months ago c837f62
Start of qt GUI
M Cargo.lock => Cargo.lock +299 -5
@@ 17,9 17,9 @@ checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"

[[package]]
name = "aho-corasick"
version = "0.7.14"
version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d"
checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
dependencies = [
 "memchr",
]


@@ 121,6 121,17 @@ dependencies = [
]

[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
 "hermit-abi",
 "libc",
 "winapi 0.3.9",
]

[[package]]
name = "autocfg"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 364,7 375,7 @@ checksum = "2913470204e9e8498a0f31f17f90a0de801ae92c8c5ac18c49af4819e6786697"
dependencies = [
 "directories",
 "serde",
 "toml",
 "toml 0.5.6",
]

[[package]]


@@ 421,6 432,66 @@ dependencies = [
]

[[package]]
name = "cpp"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4875a08600be48dcc9cb6ee07f104a3e0752e95184dede6a30044d6480bf50e8"
dependencies = [
 "cpp_macros",
]

[[package]]
name = "cpp_build"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "762705b71f4a8c5b65148de0e76bf18770c724ca2759f04ca29be9d508e1230d"
dependencies = [
 "cc",
 "cpp_common",
 "lazy_static",
 "proc-macro2 1.0.20",
 "regex",
 "syn",
 "unicode-xid 0.2.1",
]

[[package]]
name = "cpp_common"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df78ad28e5fe814285016779fb3d3b874520c799a847e6190bf2b834cc4ff283"
dependencies = [
 "lazy_static",
 "proc-macro2 1.0.20",
 "syn",
]

[[package]]
name = "cpp_core"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ebd6ba9742a158232afe2d07ec5d9d5d80d058baf700c5f9aa0e014fe3f24ad"
dependencies = [
 "libc",
]

[[package]]
name = "cpp_macros"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f93a21e618c10abc84ebb63ffa5952e1f7a4568b8141d542d5ef860e4a8fc25"
dependencies = [
 "aho-corasick",
 "byteorder",
 "cpp_common",
 "if_rust_version",
 "lazy_static",
 "proc-macro2 1.0.20",
 "quote 1.0.7",
 "syn",
]

[[package]]
name = "cpuid-bool"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 652,6 723,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b"

[[package]]
name = "dunce"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2641c4a7c0c4101df53ea572bffdc561c146f6c2eb09e4df02bc4811e3feeb4"

[[package]]
name = "either"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 679,6 756,19 @@ dependencies = [
]

[[package]]
name = "env_logger"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
dependencies = [
 "atty",
 "humantime",
 "log",
 "regex",
 "termcolor",
]

[[package]]
name = "fail"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1329,6 1419,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"

[[package]]
name = "humantime"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
dependencies = [
 "quick-error",
]

[[package]]
name = "hyper"
version = "0.13.8"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 1377,6 1476,12 @@ dependencies = [
]

[[package]]
name = "if_rust_version"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46dbcb333e86939721589d25a3557e180b52778cb33c7fdfe9e0158ff790d5ec"

[[package]]
name = "indexmap"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2190,6 2295,12 @@ dependencies = [
]

[[package]]
name = "pathdiff"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3bf70094d203e07844da868b634207e71bfab254fe713171fae9a6e751ccf31"

[[package]]
name = "percent-encoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2245,7 2356,7 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
 "toml",
 "toml 0.5.6",
]

[[package]]


@@ 2314,6 2425,106 @@ dependencies = [
]

[[package]]
name = "qmetaobject"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eab8585ec73d20ad37b118e613806c15008172152d291939c0959ede82a866"
dependencies = [
 "cpp",
 "cpp_build",
 "lazy_static",
 "qmetaobject_impl",
]

[[package]]
name = "qmetaobject_impl"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1da093791f2d883b53429170c9c69e603611d3a15652c8a2e6d2c203d8503c2c"
dependencies = [
 "proc-macro2 1.0.20",
 "quote 1.0.7",
 "syn",
]

[[package]]
name = "qt_core"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "778fa84e9ee19abcf687ff0544f9bb9cd25059fe1ac479736c04475fd8d83a7a"
dependencies = [
 "cpp_core",
 "proc-macro-hack",
 "qt_macros",
 "qt_ritual_build",
]

[[package]]
name = "qt_gui"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcc8366c6860b47084283cecc51397045e8401f492a98ac72b6bf1c7bad21837"
dependencies = [
 "cpp_core",
 "qt_core",
 "qt_ritual_build",
]

[[package]]
name = "qt_macros"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d24b7e8b6a9d551e937f8d9ed222e8f1202f3166e3d38fc6d52bfc25e39aa71"
dependencies = [
 "proc-macro-hack",
 "proc-macro2 1.0.20",
 "quote 1.0.7",
 "syn",
]

[[package]]
name = "qt_qml"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0960891ac8412b2ca1e2db8ddf069bda2728cafbad4cd05bb0061305fa171753"
dependencies = [
 "cpp_core",
 "qt_core",
 "qt_gui",
 "qt_ritual_build",
]

[[package]]
name = "qt_ritual_build"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a9c99db64e5bc0ab7404d199b7f2da51d77ea3c1d78d01a9390f01aefbd3979"
dependencies = [
 "env_logger",
 "itertools 0.8.2",
 "qt_ritual_common",
 "ritual_build",
 "semver",
]

[[package]]
name = "qt_ritual_common"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ba1c7e05524bb83823426694e918d635b82d1366f20833887d7d62ea6b12a70"
dependencies = [
 "log",
 "ritual_common",
 "semver",
]

[[package]]
name = "quick-error"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"

[[package]]
name = "quote"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2620,6 2831,40 @@ dependencies = [
]

[[package]]
name = "ritual_build"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e308b6d715de5f46f5c0980169c2813c5e3fbec42dd4938fdfbf648248fb7ea7"
dependencies = [
 "log",
 "ritual_common",
]

[[package]]
name = "ritual_common"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59377d74284596d82c84a994b6abbabd7ae9cc1c3d39fcb3421e0ffcaf112f88"
dependencies = [
 "bincode",
 "dunce",
 "failure",
 "itertools 0.8.2",
 "lazy_static",
 "log",
 "num_cpus",
 "pathdiff",
 "regex",
 "semver",
 "serde",
 "serde_derive",
 "serde_json",
 "shell-words",
 "term-painter",
 "toml 0.4.10",
]

[[package]]
name = "rust-argon2"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2823,6 3068,12 @@ dependencies = [
]

[[package]]
name = "shell-words"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a"

[[package]]
name = "signal-hook-registry"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 2839,6 3090,7 @@ dependencies = [
 "anyhow",
 "cairo-rs",
 "confy",
 "cpp_core",
 "crossbeam-channel 0.4.4",
 "dbus",
 "dbus-tokio",


@@ 2859,6 3111,11 @@ dependencies = [
 "pallet",
 "pango",
 "pangocairo",
 "qmetaobject",
 "qt_core",
 "qt_gui",
 "qt_qml",
 "qt_ritual_build",
 "regex",
 "reqwest",
 "serde",


@@ 3009,7 3266,7 @@ dependencies = [
 "strum",
 "strum_macros",
 "thiserror",
 "toml",
 "toml 0.5.6",
 "version-compare",
]



@@ 3112,6 3369,34 @@ dependencies = [
]

[[package]]
name = "term"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1"
dependencies = [
 "kernel32-sys",
 "winapi 0.2.8",
]

[[package]]
name = "term-painter"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcaa948f0e3e38470cd8dc8dcfe561a75c9e43f28075bb183845be2b9b3c08cf"
dependencies = [
 "term",
]

[[package]]
name = "termcolor"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
dependencies = [
 "winapi-util",
]

[[package]]
name = "thiserror"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"


@@ 3231,6 3516,15 @@ dependencies = [

[[package]]
name = "toml"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
dependencies = [
 "serde",
]

[[package]]
name = "toml"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"

M Cargo.toml => Cargo.toml +8 -1
@@ 38,4 38,11 @@ dbus = "0.9.0"
home = "0.5.3"	
pallet = "0.6.1"
anyhow  = "1.0"
tempfile = "3.1.0"
\ No newline at end of file
tempfile = "3.1.0"
cpp_core = "0.6.0"
qt_core = "0.5.0"
qt_qml = "0.5.0"
qt_gui = "0.5.0"
qmetaobject = "0.1"
[build-dependencies]
qt_ritual_build = "0.5.0"

A assets/Chat.qml => assets/Chat.qml +4 -0
@@ 0,0 1,4 @@
import QtQuick 2.4

ChatForm {
}

A assets/ChatForm.ui.qml => assets/ChatForm.ui.qml +6 -0
@@ 0,0 1,6 @@
import QtQuick 2.4

Item {
    width: 400
    height: 400
}

A assets/ChatForm.ui.qml.autosave => assets/ChatForm.ui.qml.autosave +6 -0
@@ 0,0 1,6 @@
import QtQuick 2.4

Item {
    width: 400
    height: 250
}

A assets/ChatHistory.qml => assets/ChatHistory.qml +22 -0
@@ 0,0 1,22 @@
import QtQuick 2.0
import QtQuick.Controls 2.5

Page {
    width: 600
    height: 400
    id: chatHistory
    title: qsTr("Messages")
    ListView {
        id: chatView
        x: 0
        y: 0
        width: 600
        height: 400
        delegate:
            MessageUI {
                messagetext: Message
            }

        model: signalState.messagesModel
    }
}

A assets/ChatList.qml => assets/ChatList.qml +53 -0
@@ 0,0 1,53 @@
import QtQuick 2.12
import QtQuick.Controls 2.5

Page {
    width: 600
    height: 400

    title: qsTr("Chats")
    ListView {
        id: chatView
        x: 0
        y: 0
        width: 600
        height: 400
        delegate: ItemDelegate {
            x: 5
            width: 80
            height: 40
            onClicked: {
                console.log(Tel);
                signalState.setCurrent(Tel);
                signal.show_chat(qsTr(Tel));
                signalState.messagesModel.clear();
                stackView.push(messagesViewStack);
            }
            Row {
                id: row1
                spacing: 10
                Rectangle {
                    width: 40
                    height: 40
                    color: "red"

                }

                Text {
                    text: Name
                    anchors.verticalCenter: parent.verticalCenter
                    font.bold: true
                }

            }
        }
        model: signalState.chatModel
    }
}

/*##^##
Designer {
    D{i:0;autoSize:true;height:480;width:640}
}
##^##*/


A assets/Home.ui.qml => assets/Home.ui.qml +14 -0
@@ 0,0 1,14 @@
import QtQuick 2.12
import QtQuick.Controls 2.5

Page {
    width: 600
    height: 400
    objectName: "homeobb"
    title: qsTr("Page 1")

    Label {
        text: textHome
        anchors.centerIn: parent
    }
}

A assets/Makefile => assets/Makefile +1079 -0
@@ 0,0 1,1079 @@
#############################################################################
# Makefile for building: signal-qt
# Generated by qmake (3.1) (Qt 5.15.2)
# Project:  signal-qt.pro
# Template: app
# Command: /usr/bin/qmake -o Makefile signal-qt.pro
#############################################################################

MAKEFILE      = Makefile

EQ            = =

####### Compiler, tools and options

CC            = gcc
CXX           = g++
DEFINES       = -DQT_NO_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
CFLAGS        = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS      = -pipe -O2 -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
INCPATH       = -I. -I/usr/include/qt -I/usr/include/qt/QtQuick -I/usr/include/qt/QtGui -I/usr/include/qt/QtQmlModels -I/usr/include/qt/QtQml -I/usr/include/qt/QtNetwork -I/usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++
QMAKE         = /usr/bin/qmake
DEL_FILE      = rm -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p
COPY          = cp -f
COPY_FILE     = cp -f
COPY_DIR      = cp -f -R
INSTALL_FILE  = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR   = cp -f -R
QINSTALL      = /usr/bin/qmake -install qinstall
QINSTALL_PROGRAM = /usr/bin/qmake -install qinstall -exe
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
TAR           = tar -cf
COMPRESS      = gzip -9f
DISTNAME      = signal-qt1.0.0
DISTDIR = /home/nicohman/signal-qt/.tmp/signal-qt1.0.0
LINK          = g++
LFLAGS        = -Wl,-O1
LIBS          = $(SUBLIBS) /usr/lib/libQt5Quick.so /usr/lib/libQt5Gui.so /usr/lib/libQt5QmlModels.so /usr/lib/libQt5Qml.so /usr/lib/libQt5Network.so /usr/lib/libQt5Core.so -lGL -lpthread   
AR            = ar cqs
RANLIB        = 
SED           = sed
STRIP         = strip

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = main.cpp qrc_qml.cpp
OBJECTS       = main.o \
		qrc_qml.o
DIST          = /usr/lib/qt/mkspecs/features/spec_pre.prf \
		/usr/lib/qt/mkspecs/common/unix.conf \
		/usr/lib/qt/mkspecs/common/linux.conf \
		/usr/lib/qt/mkspecs/common/sanitize.conf \
		/usr/lib/qt/mkspecs/common/gcc-base.conf \
		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
		/usr/lib/qt/mkspecs/common/g++-base.conf \
		/usr/lib/qt/mkspecs/common/g++-unix.conf \
		/usr/lib/qt/mkspecs/qconfig.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiCalendar.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiMime.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiNotes.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \
		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
		/usr/lib/qt/mkspecs/modules/qt_Baloo.pri \
		/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \
		/usr/lib/qt/mkspecs/modules/qt_CalendarSupport.pri \
		/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_EventViews.pri \
		/usr/lib/qt/mkspecs/modules/qt_GrantleeTheme.pri \
		/usr/lib/qt/mkspecs/modules/qt_Gravatar.pri \
		/usr/lib/qt/mkspecs/modules/qt_IncidenceEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
		/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \
		/usr/lib/qt/mkspecs/modules/qt_KaddressbookGrantlee.pri \
		/usr/lib/qt/mkspecs/modules/qt_KaddressbookImportExport.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAlarmCal.pri \
		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCalUtils.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCddb.pri \
		/usr/lib/qt/mkspecs/modules/qt_KChart.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCompactDisc.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KContacts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
		/usr/lib/qt/mkspecs/modules/qt_kdav.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \
		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGantt.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIBlogger.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPICalendar.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIContacts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPICore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIDrive.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPILatitude.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIMaps.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPITasks.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \
		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIdentityManagement.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIMAP.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \
		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMailTransport.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMailTransportAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KManageSieve.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMime.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
		/usr/lib/qt/mkspecs/modules/qt_KontactInterface.pri \
		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPeople.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPIMTextEdit.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
		/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSieve.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSieveUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSMTP.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTNef.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_Ldap.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3d.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3d_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_Libkdepim.pri \
		/usr/lib/qt/mkspecs/modules/qt_Libkleo.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailCommon.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailImporter.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailImporterAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Marble.pri \
		/usr/lib/qt/mkspecs/modules/qt_Mbox.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageComposer.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageList.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageViewer.pri \
		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
		/usr/lib/qt/mkspecs/modules/qt_PimCommon.pri \
		/usr/lib/qt/mkspecs/modules/qt_PimCommonAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Prison.pri \
		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Syndication.pri \
		/usr/lib/qt/mkspecs/modules/qt_TemplateParser.pri \
		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
		/usr/lib/qt/mkspecs/modules/qt_WebEngineViewer.pri \
		/usr/lib/qt/mkspecs/features/qt_functions.prf \
		/usr/lib/qt/mkspecs/features/qt_config.prf \
		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
		/usr/lib/qt/mkspecs/features/spec_post.prf \
		.qmake.stash \
		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
		/usr/lib/qt/mkspecs/features/toolchain.prf \
		/usr/lib/qt/mkspecs/features/default_pre.prf \
		/usr/lib/qt/mkspecs/features/resolve_config.prf \
		/usr/lib/qt/mkspecs/features/default_post.prf \
		/usr/lib/qt/mkspecs/features/warn_on.prf \
		/usr/lib/qt/mkspecs/features/qt.prf \
		/usr/lib/qt/mkspecs/features/resources_functions.prf \
		/usr/lib/qt/mkspecs/features/resources.prf \
		/usr/lib/qt/mkspecs/features/moc.prf \
		/usr/lib/qt/mkspecs/features/unix/opengl.prf \
		/usr/lib/qt/mkspecs/features/unix/thread.prf \
		/usr/lib/qt/mkspecs/features/qmake_use.prf \
		/usr/lib/qt/mkspecs/features/file_copies.prf \
		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
		/usr/lib/qt/mkspecs/features/exceptions.prf \
		/usr/lib/qt/mkspecs/features/yacc.prf \
		/usr/lib/qt/mkspecs/features/lex.prf \
		signal-qt.pro  main.cpp
QMAKE_TARGET  = signal-qt
DESTDIR       = 
TARGET        = signal-qt


first: all
####### Build rules

signal-qt:  $(OBJECTS)  
	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)

Makefile: signal-qt.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \
		/usr/lib/qt/mkspecs/common/unix.conf \
		/usr/lib/qt/mkspecs/common/linux.conf \
		/usr/lib/qt/mkspecs/common/sanitize.conf \
		/usr/lib/qt/mkspecs/common/gcc-base.conf \
		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
		/usr/lib/qt/mkspecs/common/g++-base.conf \
		/usr/lib/qt/mkspecs/common/g++-unix.conf \
		/usr/lib/qt/mkspecs/qconfig.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiCalendar.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiMime.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiNotes.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \
		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
		/usr/lib/qt/mkspecs/modules/qt_Baloo.pri \
		/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \
		/usr/lib/qt/mkspecs/modules/qt_CalendarSupport.pri \
		/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_EventViews.pri \
		/usr/lib/qt/mkspecs/modules/qt_GrantleeTheme.pri \
		/usr/lib/qt/mkspecs/modules/qt_Gravatar.pri \
		/usr/lib/qt/mkspecs/modules/qt_IncidenceEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
		/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \
		/usr/lib/qt/mkspecs/modules/qt_KaddressbookGrantlee.pri \
		/usr/lib/qt/mkspecs/modules/qt_KaddressbookImportExport.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAlarmCal.pri \
		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
		/usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCalUtils.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCddb.pri \
		/usr/lib/qt/mkspecs/modules/qt_KChart.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCompactDisc.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KContacts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
		/usr/lib/qt/mkspecs/modules/qt_kdav.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
		/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \
		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGantt.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIBlogger.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPICalendar.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIContacts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPICore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIDrive.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPILatitude.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPIMaps.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGAPITasks.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \
		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIdentityManagement.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIMAP.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \
		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMailTransport.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMailTransportAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KManageSieve.pri \
		/usr/lib/qt/mkspecs/modules/qt_KMime.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
		/usr/lib/qt/mkspecs/modules/qt_KontactInterface.pri \
		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPeople.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPIMTextEdit.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
		/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSieve.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSieveUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSMTP.pri \
		/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KTNef.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
		/usr/lib/qt/mkspecs/modules/qt_Ldap.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3d.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3d_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
		/usr/lib/qt/mkspecs/modules/qt_Libkdepim.pri \
		/usr/lib/qt/mkspecs/modules/qt_Libkleo.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailCommon.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailImporter.pri \
		/usr/lib/qt/mkspecs/modules/qt_MailImporterAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Marble.pri \
		/usr/lib/qt/mkspecs/modules/qt_Mbox.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageComposer.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageList.pri \
		/usr/lib/qt/mkspecs/modules/qt_MessageViewer.pri \
		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
		/usr/lib/qt/mkspecs/modules/qt_PimCommon.pri \
		/usr/lib/qt/mkspecs/modules/qt_PimCommonAkonadi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Prison.pri \
		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
		/usr/lib/qt/mkspecs/modules/qt_Syndication.pri \
		/usr/lib/qt/mkspecs/modules/qt_TemplateParser.pri \
		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
		/usr/lib/qt/mkspecs/modules/qt_WebEngineViewer.pri \
		/usr/lib/qt/mkspecs/features/qt_functions.prf \
		/usr/lib/qt/mkspecs/features/qt_config.prf \
		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
		/usr/lib/qt/mkspecs/features/spec_post.prf \
		.qmake.stash \
		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
		/usr/lib/qt/mkspecs/features/toolchain.prf \
		/usr/lib/qt/mkspecs/features/default_pre.prf \
		/usr/lib/qt/mkspecs/features/resolve_config.prf \
		/usr/lib/qt/mkspecs/features/default_post.prf \
		/usr/lib/qt/mkspecs/features/warn_on.prf \
		/usr/lib/qt/mkspecs/features/qt.prf \
		/usr/lib/qt/mkspecs/features/resources_functions.prf \
		/usr/lib/qt/mkspecs/features/resources.prf \
		/usr/lib/qt/mkspecs/features/moc.prf \
		/usr/lib/qt/mkspecs/features/unix/opengl.prf \
		/usr/lib/qt/mkspecs/features/unix/thread.prf \
		/usr/lib/qt/mkspecs/features/qmake_use.prf \
		/usr/lib/qt/mkspecs/features/file_copies.prf \
		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
		/usr/lib/qt/mkspecs/features/exceptions.prf \
		/usr/lib/qt/mkspecs/features/yacc.prf \
		/usr/lib/qt/mkspecs/features/lex.prf \
		signal-qt.pro \
		qml.qrc
	$(QMAKE) -o Makefile signal-qt.pro
/usr/lib/qt/mkspecs/features/spec_pre.prf:
/usr/lib/qt/mkspecs/common/unix.conf:
/usr/lib/qt/mkspecs/common/linux.conf:
/usr/lib/qt/mkspecs/common/sanitize.conf:
/usr/lib/qt/mkspecs/common/gcc-base.conf:
/usr/lib/qt/mkspecs/common/gcc-base-unix.conf:
/usr/lib/qt/mkspecs/common/g++-base.conf:
/usr/lib/qt/mkspecs/common/g++-unix.conf:
/usr/lib/qt/mkspecs/qconfig.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiCalendar.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiMime.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiNotes.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri:
/usr/lib/qt/mkspecs/modules/qt_Attica.pri:
/usr/lib/qt/mkspecs/modules/qt_Baloo.pri:
/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri:
/usr/lib/qt/mkspecs/modules/qt_CalendarSupport.pri:
/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri:
/usr/lib/qt/mkspecs/modules/qt_EventViews.pri:
/usr/lib/qt/mkspecs/modules/qt_GrantleeTheme.pri:
/usr/lib/qt/mkspecs/modules/qt_Gravatar.pri:
/usr/lib/qt/mkspecs/modules/qt_IncidenceEditor.pri:
/usr/lib/qt/mkspecs/modules/qt_KActivities.pri:
/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri:
/usr/lib/qt/mkspecs/modules/qt_KaddressbookGrantlee.pri:
/usr/lib/qt/mkspecs/modules/qt_KaddressbookImportExport.pri:
/usr/lib/qt/mkspecs/modules/qt_KAlarmCal.pri:
/usr/lib/qt/mkspecs/modules/qt_KArchive.pri:
/usr/lib/qt/mkspecs/modules/qt_KAuth.pri:
/usr/lib/qt/mkspecs/modules/qt_KAuthCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri:
/usr/lib/qt/mkspecs/modules/qt_KCalendarCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KCalUtils.pri:
/usr/lib/qt/mkspecs/modules/qt_KCddb.pri:
/usr/lib/qt/mkspecs/modules/qt_KChart.pri:
/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri:
/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri:
/usr/lib/qt/mkspecs/modules/qt_KCompactDisc.pri:
/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KContacts.pri:
/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KCrash.pri:
/usr/lib/qt/mkspecs/modules/qt_kdav.pri:
/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri:
/usr/lib/qt/mkspecs/modules/qt_KDESu.pri:
/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri:
/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri:
/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri:
/usr/lib/qt/mkspecs/modules/qt_KGantt.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPIBlogger.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPICalendar.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPIContacts.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPICore.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPIDrive.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPILatitude.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPIMaps.pri:
/usr/lib/qt/mkspecs/modules/qt_KGAPITasks.pri:
/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri:
/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri:
/usr/lib/qt/mkspecs/modules/qt_KHtml.pri:
/usr/lib/qt/mkspecs/modules/qt_KI18n.pri:
/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri:
/usr/lib/qt/mkspecs/modules/qt_KIdentityManagement.pri:
/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri:
/usr/lib/qt/mkspecs/modules/qt_KIMAP.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri:
/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri:
/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri:
/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KJS.pri:
/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri:
/usr/lib/qt/mkspecs/modules/qt_KMailTransport.pri:
/usr/lib/qt/mkspecs/modules/qt_KMailTransportAkonadi.pri:
/usr/lib/qt/mkspecs/modules/qt_KManageSieve.pri:
/usr/lib/qt/mkspecs/modules/qt_KMime.pri:
/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri:
/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri:
/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri:
/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri:
/usr/lib/qt/mkspecs/modules/qt_KontactInterface.pri:
/usr/lib/qt/mkspecs/modules/qt_KParts.pri:
/usr/lib/qt/mkspecs/modules/qt_KPeople.pri:
/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KPIMTextEdit.pri:
/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri:
/usr/lib/qt/mkspecs/modules/qt_KPty.pri:
/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri:
/usr/lib/qt/mkspecs/modules/qt_KRunner.pri:
/usr/lib/qt/mkspecs/modules/qt_KScreen.pri:
/usr/lib/qt/mkspecs/modules/qt_KService.pri:
/usr/lib/qt/mkspecs/modules/qt_KSieve.pri:
/usr/lib/qt/mkspecs/modules/qt_KSieveUi.pri:
/usr/lib/qt/mkspecs/modules/qt_KSMTP.pri:
/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri:
/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri:
/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KTNef.pri:
/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri:
/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KUserFeedbackWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KWallet.pri:
/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri:
/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri:
/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri:
/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri:
/usr/lib/qt/mkspecs/modules/qt_Ldap.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_core.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_help.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_location.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_network.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_pdf.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_pdf_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3d.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3d_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3drender_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_script.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
/usr/lib/qt/mkspecs/modules/qt_Libkdepim.pri:
/usr/lib/qt/mkspecs/modules/qt_Libkleo.pri:
/usr/lib/qt/mkspecs/modules/qt_MailCommon.pri:
/usr/lib/qt/mkspecs/modules/qt_MailImporter.pri:
/usr/lib/qt/mkspecs/modules/qt_MailImporterAkonadi.pri:
/usr/lib/qt/mkspecs/modules/qt_Marble.pri:
/usr/lib/qt/mkspecs/modules/qt_Mbox.pri:
/usr/lib/qt/mkspecs/modules/qt_MessageComposer.pri:
/usr/lib/qt/mkspecs/modules/qt_MessageCore.pri:
/usr/lib/qt/mkspecs/modules/qt_MessageList.pri:
/usr/lib/qt/mkspecs/modules/qt_MessageViewer.pri:
/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri:
/usr/lib/qt/mkspecs/modules/qt_PimCommon.pri:
/usr/lib/qt/mkspecs/modules/qt_PimCommonAkonadi.pri:
/usr/lib/qt/mkspecs/modules/qt_Prison.pri:
/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_Solid.pri:
/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri:
/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri:
/usr/lib/qt/mkspecs/modules/qt_Syndication.pri:
/usr/lib/qt/mkspecs/modules/qt_TemplateParser.pri:
/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri:
/usr/lib/qt/mkspecs/modules/qt_WebEngineViewer.pri:
/usr/lib/qt/mkspecs/features/qt_functions.prf:
/usr/lib/qt/mkspecs/features/qt_config.prf:
/usr/lib/qt/mkspecs/linux-g++/qmake.conf:
/usr/lib/qt/mkspecs/features/spec_post.prf:
.qmake.stash:
/usr/lib/qt/mkspecs/features/exclusive_builds.prf:
/usr/lib/qt/mkspecs/features/toolchain.prf:
/usr/lib/qt/mkspecs/features/default_pre.prf:
/usr/lib/qt/mkspecs/features/resolve_config.prf:
/usr/lib/qt/mkspecs/features/default_post.prf:
/usr/lib/qt/mkspecs/features/warn_on.prf:
/usr/lib/qt/mkspecs/features/qt.prf:
/usr/lib/qt/mkspecs/features/resources_functions.prf:
/usr/lib/qt/mkspecs/features/resources.prf:
/usr/lib/qt/mkspecs/features/moc.prf:
/usr/lib/qt/mkspecs/features/unix/opengl.prf:
/usr/lib/qt/mkspecs/features/unix/thread.prf:
/usr/lib/qt/mkspecs/features/qmake_use.prf:
/usr/lib/qt/mkspecs/features/file_copies.prf:
/usr/lib/qt/mkspecs/features/testcase_targets.prf:
/usr/lib/qt/mkspecs/features/exceptions.prf:
/usr/lib/qt/mkspecs/features/yacc.prf:
/usr/lib/qt/mkspecs/features/lex.prf:
signal-qt.pro:
qml.qrc:
qmake: FORCE
	@$(QMAKE) -o Makefile signal-qt.pro

qmake_all: FORCE


all: Makefile signal-qt

dist: distdir FORCE
	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)

distdir: FORCE
	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
	$(COPY_FILE) --parents qml.qrc $(DISTDIR)/
	$(COPY_FILE) --parents /usr/lib/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/
	$(COPY_FILE) --parents main.cpp $(DISTDIR)/
	$(COPY_FILE) --parents signal-qt_en_US.ts $(DISTDIR)/


clean: compiler_clean 
	-$(DEL_FILE) $(OBJECTS)
	-$(DEL_FILE) *~ core *.core


distclean: clean 
	-$(DEL_FILE) $(TARGET) 
	-$(DEL_FILE) .qmake.stash
	-$(DEL_FILE) Makefile


####### Sub-libraries

mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all

check: first

benchmark: first

compiler_rcc_make_all: qrc_qml.cpp
compiler_rcc_clean:
	-$(DEL_FILE) qrc_qml.cpp
qrc_qml.cpp: qml.qrc \
		/usr/bin/rcc \
		Page1Form.ui.qml \
		Page2Form.ui.qml \
		HomeForm.ui.qml \
		qtquickcontrols2.conf \
		main.qml
	/usr/bin/rcc -name qml qml.qrc -o qrc_qml.cpp

compiler_moc_predefs_make_all: moc_predefs.h
compiler_moc_predefs_clean:
	-$(DEL_FILE) moc_predefs.h
moc_predefs.h: /usr/lib/qt/mkspecs/features/data/dummy.cpp
	g++ -pipe -O2 -std=gnu++11 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/qt/mkspecs/features/data/dummy.cpp

compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_moc_objc_header_make_all:
compiler_moc_objc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean 

####### Compile

main.o: main.cpp 
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp

qrc_qml.o: qrc_qml.cpp 
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_qml.o qrc_qml.cpp

####### Install

install_target: first FORCE
	@test -d $(INSTALL_ROOT)/opt/signal-qt/bin || mkdir -p $(INSTALL_ROOT)/opt/signal-qt/bin
	$(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/signal-qt/bin/$(QMAKE_TARGET)
	-$(STRIP) $(INSTALL_ROOT)/opt/signal-qt/bin/$(QMAKE_TARGET)

uninstall_target: FORCE
	-$(DEL_FILE) $(INSTALL_ROOT)/opt/signal-qt/bin/$(QMAKE_TARGET)
	-$(DEL_DIR) $(INSTALL_ROOT)/opt/signal-qt/bin/ 


install: install_target  FORCE

uninstall: uninstall_target  FORCE

FORCE:


A assets/MessageForm.ui.qml => assets/MessageForm.ui.qml +29 -0
@@ 0,0 1,29 @@
import QtQuick 2.4
import QtQuick.Controls 2.5

ItemDelegate {
    id: message
    x: 5
    width: 80
    height: 40
    property string messagetext: "none.none"

    Row {
        id: row
        x: 0
        y: 0
        anchors.top: parent.top
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 0
        anchors.topMargin: 0
        anchors.horizontalCenterOffset: 0
        anchors.horizontalCenter: parent.horizontalCenter

        Text {
            anchors.verticalCenter: parent.verticalCenter
            font.bold: true
            id: text1
            text: messagetext
        }
    }
}

A assets/MessageUI.qml => assets/MessageUI.qml +4 -0
@@ 0,0 1,4 @@
import QtQuick 2.4

MessageForm {
}

A assets/Settings.ui.qml => assets/Settings.ui.qml +14 -0
@@ 0,0 1,14 @@
import QtQuick 2.12
import QtQuick.Controls 2.5

Page {
    width: 600
    height: 400

    title: qsTr("Page 2")

    Label {
        text: qsTr("You are on Page 2.")
        anchors.centerIn: parent
    }
}

A assets/SignalState.qml => assets/SignalState.qml +54 -0
@@ 0,0 1,54 @@
import QtQuick 2.0
import QtQuick.Controls 2.5

Item {
    id: signalState
    property var chats: {
        return {};
    }
    property ListModel chatModel: ListModel {}
    property var messages: ({})
    property ListModel messagesModel : ListModel {}
    property string current: ""
    function setCurrent(cur) {
        console.log("setCur"+cur);

        signalState.current = cur;
        console.log("setCurrent"+signalState.current);
        signalState.messagesModel.clear();
        console.log(signalState.messages[cur]);
        console.log(JSON.stringify(signalState.messages));
        if (signalState.messages[cur]) {
            console.log("go");
            signalState.messages[cur].forEach(function(msg) {
                console.log("msg"+msg.Message);
                signalState.messagesModel.append({Source: qsTr(msg.Source), Message: qsTr(msg.Message)});
            });
        }
    }
    Connections {
        target: signal
        function onSignalResponse(response) {
            console.log(response);
            var parsed = JSON.parse(response);
            if (parsed.HistoryMessage) {
                signalState.messages[parsed.HistoryMessage.phone] = parsed.HistoryMessage.messages;
                console.log(JSON.stringify(signalState.messages));
                console.log("parsed"+parsed.HistoryMessage.phone);
                console.log("cur"+signalState.cur);
                if (parsed.HistoryMessage.phone === signalState.current) {
                    signalState.setCurrent(signalState.current);
                }
            } else if (parsed.AddHist){
                signalState.messages[parsed.AddHist[0].Source].push(parsed.AddHist[0]);
                if (parsed.AddHist[1]) {
                    signalState.messagesModel.append({Source: qsTr(parsed.AddHist[0].Source), Message: qsTr(parsed.AddHist[0].Message)});

                } else {
                    signalState.messagesModel.insert(0, {Source: qsTr(parsed.AddHist[0].Source), Message: qsTr(parsed.AddHist[0].Message)});

                }
            }
        }
    }
}

A assets/loading.qml => assets/loading.qml +14 -0
@@ 0,0 1,14 @@
import QtQuick 2.12
import QtQuick.Controls 2.5

Page {
    width: 600
    height: 400
    objectName: "loadingpage"
    title: qsTr("Loading")

    Label {
        text: qsTr("Loading")
        anchors.centerIn: parent
    }
}

A assets/main.cpp => assets/main.cpp +22 -0
@@ 0,0 1,22 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

A assets/main.o => assets/main.o +0 -0
A assets/main.qml => assets/main.qml +102 -0
@@ 0,0 1,102 @@
import QtQuick 2.12
import QtQuick.Controls 2.5
import SignalUI 0.1
ApplicationWindow {
    id: window
    width: 640
    height: 471
    visible: true
    title: signal.name
    SignalState {
        id: signalState
    }
    SignalUI {
        id: signal
        Component.onCompleted: {
            console.log("hi");
            console.log(signal);
            signal.init_state();
            console.log("inited");
            console.log(signalState);
            stackView.replace("loading.qml", chatViewStack);
        }
        name: "name"
        onSignalResponse: {
            console.log(response);
            var parsed = JSON.parse(response);
            console.log(parsed);
            if (parsed.ChatList) {
                console.log("chatlist");
                //signal.chatList(parsed.ChatList);
                signalState.chatModel.clear();
                parsed.ChatList.forEach(function(x) {
                    console.log(x.Tel);
                    signalState.chatModel.append({Name: qsTr(x.Name), Tel:x.Tel});
                });
            }
        }

    }

    header: ToolBar {
        contentHeight: toolButton.implicitHeight

        ToolButton {
            id: toolButton
            text: stackView.depth > 1 ? "\u25C0" : "\u2630"
            font.pixelSize: Qt.application.font.pixelSize * 1.6
            onClicked: {
                if (stackView.depth > 1) {
                    stackView.pop()
                } else {
                    drawer.open()
                }
            }
        }

        Label {
            text: stackView.currentItem.title
            anchors.centerIn: parent
        }
    }

    Drawer {
        id: drawer
        width: window.width * 0.66
        height: window.height

        Column {
            anchors.fill: parent

            ItemDelegate {
                text: qsTr("Page 1")
                width: parent.width
                onClicked: {
                    stackView.push(chatViewStack)
                    drawer.close()
                }
            }
            ItemDelegate {
                text: qsTr("Page 2")
                width: parent.width
                onClicked: {
                    stackView.push("Page2Form.ui.qml")
                    drawer.close()
                }
            }
        }
    }
    Component {
        id: chatViewStack
        ChatList {}
    }
    Component {
        id: messagesViewStack
        ChatHistory {}
    }
    StackView {
        id: stackView
        initialItem: "loading.qml"
        anchors.fill: parent
    }
}

A assets/qml.qrc => assets/qml.qrc +16 -0
@@ 0,0 1,16 @@
<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>ChatList.qml</file>
        <file>Home.ui.qml</file>
        <file>Settings.ui.qml</file>
        <file>qtquickcontrols2.conf</file>
        <file>loading.qml</file>
        <file>SignalState.qml</file>
        <file>Chat.qml</file>
        <file>ChatForm.ui.qml</file>
        <file>ChatHistory.qml</file>
        <file>MessageUI.qml</file>
        <file>MessageForm.ui.qml</file>
    </qresource>
</RCC>

A assets/qrc_qml.cpp => assets/qrc_qml.cpp +283 -0
@@ 0,0 1,283 @@
/****************************************************************************
** Resource object code
**
** Created by: The Resource Compiler for Qt version 5.15.2
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

static const unsigned char qt_resource_data[] = {
  // /home/nicohman/signal-qt/Page1Form.ui.qml
  0x0,0x0,0x0,0xd1,
  0x69,
  0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,0x6b,0x20,0x32,0x2e,
  0x31,0x32,0xa,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,
  0x6b,0x2e,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x32,0x2e,0x35,0xa,0xa,
  0x50,0x61,0x67,0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,
  0x3a,0x20,0x36,0x30,0x30,0xa,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,
  0x3a,0x20,0x34,0x30,0x30,0xa,0xa,0x20,0x20,0x20,0x20,0x74,0x69,0x74,0x6c,0x65,
  0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,0x50,0x61,0x67,0x65,0x20,0x31,0x22,0x29,
  0xa,0xa,0x20,0x20,0x20,0x20,0x4c,0x61,0x62,0x65,0x6c,0x20,0x7b,0xa,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x3a,0x20,0x71,0x73,0x54,0x72,
  0x28,0x22,0x59,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x6f,0x6e,0x20,0x50,0x61,0x67,
  0x65,0x20,0x31,0x2e,0x22,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,
  0x6e,0x63,0x68,0x6f,0x72,0x73,0x2e,0x63,0x65,0x6e,0x74,0x65,0x72,0x49,0x6e,0x3a,
  0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0x7d,0xa,
  
    // /home/nicohman/signal-qt/Page2Form.ui.qml
  0x0,0x0,0x0,0xd1,
  0x69,
  0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,0x6b,0x20,0x32,0x2e,
  0x31,0x32,0xa,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,
  0x6b,0x2e,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x32,0x2e,0x35,0xa,0xa,
  0x50,0x61,0x67,0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,
  0x3a,0x20,0x36,0x30,0x30,0xa,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,
  0x3a,0x20,0x34,0x30,0x30,0xa,0xa,0x20,0x20,0x20,0x20,0x74,0x69,0x74,0x6c,0x65,
  0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,0x50,0x61,0x67,0x65,0x20,0x32,0x22,0x29,
  0xa,0xa,0x20,0x20,0x20,0x20,0x4c,0x61,0x62,0x65,0x6c,0x20,0x7b,0xa,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x3a,0x20,0x71,0x73,0x54,0x72,
  0x28,0x22,0x59,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x6f,0x6e,0x20,0x50,0x61,0x67,
  0x65,0x20,0x32,0x2e,0x22,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,
  0x6e,0x63,0x68,0x6f,0x72,0x73,0x2e,0x63,0x65,0x6e,0x74,0x65,0x72,0x49,0x6e,0x3a,
  0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0x7d,0xa,
  
    // /home/nicohman/signal-qt/HomeForm.ui.qml
  0x0,0x0,0x0,0xd6,
  0x69,
  0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,0x6b,0x20,0x32,0x2e,
  0x31,0x32,0xa,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,
  0x6b,0x2e,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x32,0x2e,0x35,0xa,0xa,
  0x50,0x61,0x67,0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,
  0x3a,0x20,0x36,0x30,0x30,0xa,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,
  0x3a,0x20,0x34,0x30,0x30,0xa,0xa,0x20,0x20,0x20,0x20,0x74,0x69,0x74,0x6c,0x65,
  0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,0x48,0x6f,0x6d,0x65,0x22,0x29,0xa,0xa,
  0x20,0x20,0x20,0x20,0x4c,0x61,0x62,0x65,0x6c,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,
  0x59,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x68,
  0x6f,0x6d,0x65,0x20,0x70,0x61,0x67,0x65,0x2e,0x22,0x29,0xa,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x61,0x6e,0x63,0x68,0x6f,0x72,0x73,0x2e,0x63,0x65,0x6e,0x74,
  0x65,0x72,0x49,0x6e,0x3a,0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,
  0x20,0x7d,0xa,0x7d,0xa,
    // /home/nicohman/signal-qt/qtquickcontrols2.conf
  0x0,0x0,0x1,0x32,
  0x3b,
  0x20,0x54,0x68,0x69,0x73,0x20,0x66,0x69,0x6c,0x65,0x20,0x63,0x61,0x6e,0x20,0x62,
  0x65,0x20,0x65,0x64,0x69,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x63,0x68,0x61,0x6e,
  0x67,0x65,0x20,0x74,0x68,0x65,0x20,0x73,0x74,0x79,0x6c,0x65,0x20,0x6f,0x66,0x20,
  0x74,0x68,0x65,0x20,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0xa,
  0x3b,0x20,0x52,0x65,0x61,0x64,0x20,0x22,0x51,0x74,0x20,0x51,0x75,0x69,0x63,0x6b,
  0x20,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x32,0x20,0x43,0x6f,0x6e,0x66,
  0x69,0x67,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x20,0x46,0x69,0x6c,0x65,0x22,0x20,
  0x66,0x6f,0x72,0x20,0x64,0x65,0x74,0x61,0x69,0x6c,0x73,0x3a,0xa,0x3b,0x20,0x68,
  0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x64,0x6f,0x63,0x2e,0x71,0x74,0x2e,0x69,0x6f,
  0x2f,0x71,0x74,0x2f,0x71,0x74,0x71,0x75,0x69,0x63,0x6b,0x63,0x6f,0x6e,0x74,0x72,
  0x6f,0x6c,0x73,0x32,0x2d,0x63,0x6f,0x6e,0x66,0x69,0x67,0x75,0x72,0x61,0x74,0x69,
  0x6f,0x6e,0x2e,0x68,0x74,0x6d,0x6c,0xa,0xa,0x5b,0x43,0x6f,0x6e,0x74,0x72,0x6f,
  0x6c,0x73,0x5d,0xa,0x53,0x74,0x79,0x6c,0x65,0x3d,0x4d,0x61,0x74,0x65,0x72,0x69,
  0x61,0x6c,0xa,0xa,0x5b,0x4d,0x61,0x74,0x65,0x72,0x69,0x61,0x6c,0x5d,0xa,0x54,
  0x68,0x65,0x6d,0x65,0x3d,0x4c,0x69,0x67,0x68,0x74,0xa,0x3b,0x41,0x63,0x63,0x65,
  0x6e,0x74,0x3d,0x42,0x6c,0x75,0x65,0x47,0x72,0x65,0x79,0xa,0x3b,0x50,0x72,0x69,
  0x6d,0x61,0x72,0x79,0x3d,0x42,0x6c,0x75,0x65,0x47,0x72,0x61,0x79,0xa,0x3b,0x46,
  0x6f,0x72,0x65,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x42,0x72,0x6f,0x77,0x6e,0xa,
  0x3b,0x42,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x47,0x72,0x65,0x79,
  0xa,
    // /home/nicohman/signal-qt/main.qml
  0x0,0x0,0x5,0xe3,
  0x69,
  0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,0x6b,0x20,0x32,0x2e,
  0x31,0x32,0xa,0x69,0x6d,0x70,0x6f,0x72,0x74,0x20,0x51,0x74,0x51,0x75,0x69,0x63,
  0x6b,0x2e,0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x20,0x32,0x2e,0x35,0xa,0xa,
  0x41,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x57,0x69,0x6e,0x64,0x6f,
  0x77,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x69,0x64,0x3a,0x20,0x77,0x69,0x6e,0x64,
  0x6f,0x77,0xa,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x36,0x34,
  0x30,0xa,0x20,0x20,0x20,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x34,0x38,
  0x30,0xa,0x20,0x20,0x20,0x20,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x3a,0x20,0x74,
  0x72,0x75,0x65,0xa,0x20,0x20,0x20,0x20,0x74,0x69,0x74,0x6c,0x65,0x3a,0x20,0x71,
  0x73,0x54,0x72,0x28,0x22,0x53,0x74,0x61,0x63,0x6b,0x22,0x29,0xa,0xa,0x20,0x20,
  0x20,0x20,0x68,0x65,0x61,0x64,0x65,0x72,0x3a,0x20,0x54,0x6f,0x6f,0x6c,0x42,0x61,
  0x72,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6e,0x74,
  0x65,0x6e,0x74,0x48,0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x74,0x6f,0x6f,0x6c,0x42,
  0x75,0x74,0x74,0x6f,0x6e,0x2e,0x69,0x6d,0x70,0x6c,0x69,0x63,0x69,0x74,0x48,0x65,
  0x69,0x67,0x68,0x74,0xa,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x54,0x6f,
  0x6f,0x6c,0x42,0x75,0x74,0x74,0x6f,0x6e,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3a,0x20,0x74,0x6f,0x6f,0x6c,0x42,
  0x75,0x74,0x74,0x6f,0x6e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x74,0x65,0x78,0x74,0x3a,0x20,0x73,0x74,0x61,0x63,0x6b,0x56,0x69,0x65,
  0x77,0x2e,0x64,0x65,0x70,0x74,0x68,0x20,0x3e,0x20,0x31,0x20,0x3f,0x20,0x22,0x5c,
  0x75,0x32,0x35,0x43,0x30,0x22,0x20,0x3a,0x20,0x22,0x5c,0x75,0x32,0x36,0x33,0x30,
  0x22,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,
  0x6e,0x74,0x2e,0x70,0x69,0x78,0x65,0x6c,0x53,0x69,0x7a,0x65,0x3a,0x20,0x51,0x74,
  0x2e,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x74,0x69,0x6f,0x6e,0x2e,0x66,0x6f,0x6e,
  0x74,0x2e,0x70,0x69,0x78,0x65,0x6c,0x53,0x69,0x7a,0x65,0x20,0x2a,0x20,0x31,0x2e,
  0x36,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,
  0x43,0x6c,0x69,0x63,0x6b,0x65,0x64,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x73,
  0x74,0x61,0x63,0x6b,0x56,0x69,0x65,0x77,0x2e,0x64,0x65,0x70,0x74,0x68,0x20,0x3e,
  0x20,0x31,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x63,0x6b,0x56,
  0x69,0x65,0x77,0x2e,0x70,0x6f,0x70,0x28,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x20,0x65,0x6c,0x73,0x65,
  0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x64,0x72,0x61,0x77,0x65,0x72,0x2e,0x6f,0x70,
  0x65,0x6e,0x28,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0xa,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x4c,0x61,0x62,0x65,0x6c,0x20,0x7b,0xa,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,
  0x3a,0x20,0x73,0x74,0x61,0x63,0x6b,0x56,0x69,0x65,0x77,0x2e,0x63,0x75,0x72,0x72,
  0x65,0x6e,0x74,0x49,0x74,0x65,0x6d,0x2e,0x74,0x69,0x74,0x6c,0x65,0xa,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x6e,0x63,0x68,0x6f,0x72,
  0x73,0x2e,0x63,0x65,0x6e,0x74,0x65,0x72,0x49,0x6e,0x3a,0x20,0x70,0x61,0x72,0x65,
  0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,
  0x20,0x7d,0xa,0xa,0x20,0x20,0x20,0x20,0x44,0x72,0x61,0x77,0x65,0x72,0x20,0x7b,
  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3a,0x20,0x64,0x72,0x61,
  0x77,0x65,0x72,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,
  0x68,0x3a,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x77,0x69,0x64,0x74,0x68,0x20,
  0x2a,0x20,0x30,0x2e,0x36,0x36,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,
  0x65,0x69,0x67,0x68,0x74,0x3a,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x2e,0x68,0x65,
  0x69,0x67,0x68,0x74,0xa,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x43,0x6f,
  0x6c,0x75,0x6d,0x6e,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x61,0x6e,0x63,0x68,0x6f,0x72,0x73,0x2e,0x66,0x69,0x6c,0x6c,0x3a,
  0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0xa,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x49,0x74,0x65,0x6d,0x44,0x65,0x6c,0x65,0x67,0x61,0x74,
  0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,
  0x50,0x61,0x67,0x65,0x20,0x31,0x22,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,
  0x70,0x61,0x72,0x65,0x6e,0x74,0x2e,0x77,0x69,0x64,0x74,0x68,0xa,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,0x43,
  0x6c,0x69,0x63,0x6b,0x65,0x64,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,
  0x61,0x63,0x6b,0x56,0x69,0x65,0x77,0x2e,0x70,0x75,0x73,0x68,0x28,0x22,0x50,0x61,
  0x67,0x65,0x31,0x46,0x6f,0x72,0x6d,0x2e,0x75,0x69,0x2e,0x71,0x6d,0x6c,0x22,0x29,
  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x64,0x72,0x61,0x77,0x65,0x72,0x2e,0x63,0x6c,0x6f,0x73,
  0x65,0x28,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x49,0x74,0x65,0x6d,0x44,0x65,0x6c,0x65,0x67,0x61,0x74,0x65,0x20,0x7b,0xa,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,
  0x65,0x78,0x74,0x3a,0x20,0x71,0x73,0x54,0x72,0x28,0x22,0x50,0x61,0x67,0x65,0x20,
  0x32,0x22,0x29,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x77,0x69,0x64,0x74,0x68,0x3a,0x20,0x70,0x61,0x72,0x65,0x6e,
  0x74,0x2e,0x77,0x69,0x64,0x74,0x68,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6f,0x6e,0x43,0x6c,0x69,0x63,0x6b,0x65,
  0x64,0x3a,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x63,0x6b,0x56,0x69,
  0x65,0x77,0x2e,0x70,0x75,0x73,0x68,0x28,0x22,0x50,0x61,0x67,0x65,0x32,0x46,0x6f,
  0x72,0x6d,0x2e,0x75,0x69,0x2e,0x71,0x6d,0x6c,0x22,0x29,0xa,0x20,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  0x64,0x72,0x61,0x77,0x65,0x72,0x2e,0x63,0x6c,0x6f,0x73,0x65,0x28,0x29,0xa,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,
  0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0xa,
  0x20,0x20,0x20,0x20,0x53,0x74,0x61,0x63,0x6b,0x56,0x69,0x65,0x77,0x20,0x7b,0xa,
  0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x64,0x3a,0x20,0x73,0x74,0x61,0x63,
  0x6b,0x56,0x69,0x65,0x77,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x6e,
  0x69,0x74,0x69,0x61,0x6c,0x49,0x74,0x65,0x6d,0x3a,0x20,0x22,0x48,0x6f,0x6d,0x65,
  0x46,0x6f,0x72,0x6d,0x2e,0x75,0x69,0x2e,0x71,0x6d,0x6c,0x22,0xa,0x20,0x20,0x20,
  0x20,0x20,0x20,0x20,0x20,0x61,0x6e,0x63,0x68,0x6f,0x72,0x73,0x2e,0x66,0x69,0x6c,
  0x6c,0x3a,0x20,0x70,0x61,0x72,0x65,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,
  0x7d,0xa,
  
};

static const unsigned char qt_resource_name[] = {
  // Page1Form.ui.qml
  0x0,0x10,
  0x5,0x17,0x1a,0xdc,
  0x0,0x50,
  0x0,0x61,0x0,0x67,0x0,0x65,0x0,0x31,0x0,0x46,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x2e,0x0,0x75,0x0,0x69,0x0,0x2e,0x0,0x71,0x0,0x6d,0x0,0x6c,
    // Page2Form.ui.qml
  0x0,0x10,
  0x5,0x77,0x1a,0xdc,
  0x0,0x50,
  0x0,0x61,0x0,0x67,0x0,0x65,0x0,0x32,0x0,0x46,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x2e,0x0,0x75,0x0,0x69,0x0,0x2e,0x0,0x71,0x0,0x6d,0x0,0x6c,
    // HomeForm.ui.qml
  0x0,0xf,
  0x2,0x83,0xbc,0xbc,
  0x0,0x48,
  0x0,0x6f,0x0,0x6d,0x0,0x65,0x0,0x46,0x0,0x6f,0x0,0x72,0x0,0x6d,0x0,0x2e,0x0,0x75,0x0,0x69,0x0,0x2e,0x0,0x71,0x0,0x6d,0x0,0x6c,
    // qtquickcontrols2.conf
  0x0,0x15,
  0x8,0x1e,0x16,0x66,
  0x0,0x71,
  0x0,0x74,0x0,0x71,0x0,0x75,0x0,0x69,0x0,0x63,0x0,0x6b,0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x74,0x0,0x72,0x0,0x6f,0x0,0x6c,0x0,0x73,0x0,0x32,0x0,0x2e,
  0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x66,
    // main.qml
  0x0,0x8,
  0x8,0x1,0x5a,0x5c,
  0x0,0x6d,
  0x0,0x61,0x0,0x69,0x0,0x6e,0x0,0x2e,0x0,0x71,0x0,0x6d,0x0,0x6c,
  
};

static const unsigned char qt_resource_struct[] = {
  // :
  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  // :/HomeForm.ui.qml
  0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0xaa,
0x0,0x0,0x1,0x76,0xf3,0x8d,0xbf,0xc7,
  // :/Page1Form.ui.qml
  0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
0x0,0x0,0x1,0x76,0xf3,0x8d,0xbf,0xc7,
  // :/Page2Form.ui.qml
  0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xd5,
0x0,0x0,0x1,0x76,0xf3,0x8d,0xbf,0xd1,
  // :/main.qml
  0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0xba,
0x0,0x0,0x1,0x76,0xf3,0x8d,0xbf,0xc7,
  // :/qtquickcontrols2.conf
  0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2,0x84,
0x0,0x0,0x1,0x76,0xf3,0x8d,0xbf,0xd1,

};

#ifdef QT_NAMESPACE
#  define QT_RCC_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name
#  define QT_RCC_MANGLE_NAMESPACE0(x) x
#  define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b
#  define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)
#  define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \
        QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))
#else
#   define QT_RCC_PREPEND_NAMESPACE(name) name
#   define QT_RCC_MANGLE_NAMESPACE(name) name
#endif

#ifdef QT_NAMESPACE
namespace QT_NAMESPACE {
#endif

bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);

#ifdef QT_NAMESPACE
}
#endif

int QT_RCC_MANGLE_NAMESPACE(qInitResources_qml)();
int QT_RCC_MANGLE_NAMESPACE(qInitResources_qml)()
{
    int version = 3;
    QT_RCC_PREPEND_NAMESPACE(qRegisterResourceData)
        (version, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
}

int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qml)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qml)()
{
    int version = 3;
    QT_RCC_PREPEND_NAMESPACE(qUnregisterResourceData)
       (version, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
}

namespace {
   struct initializer {
       initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_qml)(); }
       ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qml)(); }
   } dummy;
}

A assets/qrc_qml.o => assets/qrc_qml.o +0 -0
A assets/qtquickcontrols2.conf => assets/qtquickcontrols2.conf +13 -0
@@ 0,0 1,13 @@
; This file can be edited to change the style of the application
; Read "Qt Quick Controls 2 Configuration File" for details:
; https://doc.qt.io/qt/qtquickcontrols2-configuration.html

[Controls]
Style=Material

[Material]
Theme=Light
;Accent=BlueGrey
;Primary=BlueGray
;Foreground=Brown
;Background=Grey

A assets/resources.qrc => assets/resources.qrc +9 -0
@@ 0,0 1,9 @@
<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>HomeForm.ui.qml</file>
        <file>Home.ui.qml</file>
        <file>Settings.ui.qml</file>
        <file>qtquickcontrols2.conf</file>
    </qresource>
</RCC>

A assets/signal-qt => assets/signal-qt +0 -0
A assets/signal-qt.pro => assets/signal-qt.pro +26 -0
@@ 0,0 1,26 @@
QT += quick

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

TRANSLATIONS += \
    signal-qt_en_US.ts

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

A assets/signal-qt.pro.user => assets/signal-qt.pro.user +319 -0
@@ 0,0 1,319 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.14.0, 2021-01-12T14:02:15. -->
<qtcreator>
 <data>
  <variable>EnvironmentId</variable>
  <value type="QByteArray">{6fcda43f-4cba-46e4-9b31-0a9824371065}</value>
 </data>
 <data>
  <variable>ProjectExplorer.Project.ActiveTarget</variable>
  <value type="int">0</value>
 </data>
 <data>
  <variable>ProjectExplorer.Project.EditorSettings</variable>
  <valuemap type="QVariantMap">
   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
    <value type="QString" key="language">Cpp</value>
    <valuemap type="QVariantMap" key="value">
     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
    </valuemap>
   </valuemap>
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
    <value type="QString" key="language">QmlJS</value>
    <valuemap type="QVariantMap" key="value">
     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
    </valuemap>
   </valuemap>
   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
   <value type="int" key="EditorConfiguration.IndentSize">4</value>
   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
   <value type="int" key="EditorConfiguration.TabSize">8</value>
   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
   <value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
   <value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
  </valuemap>
 </data>
 <data>
  <variable>ProjectExplorer.Project.PluginSettings</variable>
  <valuemap type="QVariantMap">
   <valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
    <value type="bool" key="AutoTest.Framework.Boost">true</value>
    <value type="bool" key="AutoTest.Framework.Catch">true</value>
    <value type="bool" key="AutoTest.Framework.GTest">true</value>
    <value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
    <value type="bool" key="AutoTest.Framework.QtTest">true</value>
   </valuemap>
   <valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
   <value type="int" key="AutoTest.RunAfterBuild">0</value>
   <value type="bool" key="AutoTest.UseGlobal">true</value>
   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
   <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
   <valuemap type="QVariantMap" key="ClangTools">
    <value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
    <value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
    <value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
    <value type="int" key="ClangTools.ParallelJobs">4</value>
    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
   </valuemap>
  </valuemap>
 </data>
 <data>
  <variable>ProjectExplorer.Project.Target.0</variable>
  <valuemap type="QVariantMap">
   <value type="QString" key="DeviceType">Desktop</value>
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{3c84af6e-d8b8-4ab0-beda-7f5bce525caf}</value>
   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
    <value type="int" key="EnableQmlDebugging">0</value>
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/nicohman/build-signal-qt-Desktop-Debug</value>
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/nicohman/build-signal-qt-Desktop-Debug</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
     </valuemap>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
    <value type="int" key="RunSystemFunction">0</value>
   </valuemap>
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/nicohman/build-signal-qt-Desktop-Release</value>
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/nicohman/build-signal-qt-Desktop-Release</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
     </valuemap>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
    <value type="int" key="QtQuickCompiler">0</value>
    <value type="int" key="RunSystemFunction">0</value>
   </valuemap>
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
    <value type="int" key="EnableQmlDebugging">0</value>
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/nicohman/build-signal-qt-Desktop-Profile</value>
    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/nicohman/build-signal-qt-Desktop-Profile</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
     </valuemap>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
    <value type="int" key="QtQuickCompiler">0</value>
    <value type="int" key="RunSystemFunction">0</value>
    <value type="int" key="SeparateDebugInfo">0</value>
   </valuemap>
   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
    <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
   </valuemap>
   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
     <value type="QString">cpu-cycles</value>
    </valuelist>
    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
    <value type="int" key="Analyzer.Perf.Frequency">250</value>
    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
     <value type="QString">-e</value>
     <value type="QString">cpu-cycles</value>
     <value type="QString">--call-graph</value>
     <value type="QString">dwarf,4096</value>
     <value type="QString">-F</value>
     <value type="QString">250</value>
    </valuelist>
    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
     <value type="int">0</value>
     <value type="int">1</value>
     <value type="int">2</value>
     <value type="int">3</value>
     <value type="int">4</value>
     <value type="int">5</value>
     <value type="int">6</value>
     <value type="int">7</value>
     <value type="int">8</value>
     <value type="int">9</value>
     <value type="int">10</value>
     <value type="int">11</value>
     <value type="int">12</value>
     <value type="int">13</value>
     <value type="int">14</value>
    </valuelist>
    <valuelist type="QVariantList" key="CustomOutputParsers"/>
    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/nicohman/signal-rs/assets/signal-qt.pro</value>
    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/nicohman/signal-rs/assets/signal-qt.pro</value>
    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/nicohman/build-signal-qt-Desktop-Debug</value>
   </valuemap>
   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
  </valuemap>
 </data>
 <data>
  <variable>ProjectExplorer.Project.TargetCount</variable>
  <value type="int">1</value>
 </data>
 <data>
  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
  <value type="int">22</value>
 </data>
 <data>
  <variable>Version</variable>
  <value type="int">22</value>
 </data>
</qtcreator>

A assets/signal-qt_en_US.ts => assets/signal-qt_en_US.ts +3 -0
@@ 0,0 1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="signal-qt_en_US"></TS>

A build.rs => build.rs +5 -0
@@ 0,0 1,5 @@
fn main() {
    qt_ritual_build::add_resources(concat!(env!("CARGO_MANIFEST_DIR"),                                           "/assets/qml.qrc"));
     
  
 } 
\ No newline at end of file

M src/axolotl.rs => src/axolotl.rs +1 -2
@@ 43,8 43,7 @@ impl AxolotlSession {
            msg_p.insert(message.sent_at, message.clone());
            self.res_sender
                .send(SignalResponse::AddHist(
                    message.source.clone(),
                    message.sent_at,
                    message.clone(),
                    new,
                ))
                .expect("Couldn't send AddHist");

M src/main.rs => src/main.rs +223 -221
@@ 4,11 4,7 @@ extern crate crossbeam_channel;
extern crate dbus;
extern crate enum_variant_type;
extern crate futures_util;
extern crate gdk_pixbuf;
extern crate gio;
extern crate glib;
extern crate gtk;
extern crate libhandy;
extern crate mio;
extern crate reqwest;
extern crate serde;


@@ 20,21 16,31 @@ extern crate serde_json;
extern crate tempfile;
extern crate tokio;
extern crate tokio_tungstenite;
use std::ffi::CStr;
extern crate qt_core;
extern crate qt_qml;
extern crate tungstenite;
extern crate url;
use cpp_core::{Ptr, Ref, StaticUpcast};
extern crate qmetaobject;
extern crate qt_gui;
#[macro_use]
extern crate lazy_static;
use futures_util::StreamExt;
use qmetaobject::QAbstractListModel;
use qt_core::{cpp_core::DynamicCast, QPtr};
use qt_core::{q_init_resource, qs};
//use qt_core::*;
use qmetaobject::*;
//use qt_qml::*;
use qt_gui::QGuiApplication;
use qt_qml::QQmlApplicationEngine;
use tokio::io::{AsyncBufReadExt, BufReader};
use tokio::sync::mpsc::*;
use tokio_tungstenite::connect_async;
const CONNECTION: &str = "ws://localhost:9080/ws";
#[allow(non_snake_case)]
mod signal;
use gio::prelude::*;
use glib::clone;
use gtk::prelude::*;
use gtk::*;
use signal::*;
use std::collections::*;
use std::env::args;


@@ 50,7 56,6 @@ use std::cell::*;
use std::process::Command;
use std::rc::*;
use widgets::ChatList;
use widgets::Settings;
use widgets::*;
mod axolotl;
use axolotl::*;


@@ 68,32 73,110 @@ pub trait SignalBackend {
    fn process_response(&mut self, response: SignalResponse);
    fn new(res_sender: glib::Sender<SignalResponse>, config: Config) -> Self;
}
#[derive(QObject, Default)]
pub struct SignalUI {
    base: qt_base_class!(trait QObject),
    state: Option<SignalState<scli::SCLISession>>,
    name: qt_property!(QString),
    init_state: qt_method!(fn(&mut self)),
    show_view: qt_method!(fn(&mut self, view: String)),
    signalResponse: qt_signal!(response: String),
    chats: qt_property!(QVariant),
    show_chat: qt_method!(fn(&self, tel: String)),
}
impl SignalUI {
    fn show_view(&mut self, view: String) {
        self.state.as_mut().unwrap().show_view(view);
    }
    fn show_chat(&mut self, view: String) {
        self.state.as_ref().unwrap().show_chat(view);
    }
    fn init_state(&mut self) {
        println!("init");
        let config: Config = confy::load("signal-rs").expect("Couldn't handle config file");

        let qptr = QPointer::from(&*self);
        let process_res = queued_callback(move |res: SignalResponse| {
            qptr.as_pinned().map(move |self_| {
                let ref mut slf = self_.borrow_mut();
                slf.signalResponse(serde_json::to_string(&res).unwrap());
                slf.state.as_mut().unwrap().process_response(res.clone());
            });
        });

        let (res_sender, res_receiver) =
            glib::MainContext::channel::<SignalResponse>(glib::PRIORITY_DEFAULT);
        let l_res_sender = res_sender.clone();
        let (req_sender, req_receiver) = unbounded_channel::<SignalRequest>();
        let clconf = config.clone();
        match config.backend {
            /*Backend::Axolotl => {
                let mut state: SignalState<AxolotlSession> =
                    SignalState::new(req_sender.clone(), l_res_sender.clone(), config.clone());
                //state.change_theme(config.theme);
                state.user_tel = config.number.clone();
                state.connect_signals();
                //window.add(&state.app_box);
                state.show_view(View::Chats);
                res_receiver.attach(None, move |value| {
                    process_res(value);
                    glib::Continue(true)
                });
            }*/
            Backend::SignalCLI => {
                let mut state: SignalState<scli::SCLISession> =
                    SignalState::new(req_sender.clone(), l_res_sender.clone(), config.clone());
                state.user_tel = config.number.clone();
                state.show_view("chats".to_string());
                self.state = Some(state);
                res_receiver.attach(None, move |value| {
                    process_res(value);
                    glib::Continue(true)
                });
            }
            _ => {}
        };

        req_sender
            .send(SignalRequest::GetChatList)
            .expect("Couldn't send GetChatList");
        if config.backend == Backend::Axolotl {
            req_sender
                .send(SignalRequest::GetContacts)
                .expect("Couldn't send GetContacts");
        }
        tokio::spawn(async move {
            match clconf.backend {
                Backend::Axolotl => {
                    AxolotlSession::run(res_sender, req_receiver).await;
                }
                // Inspired in part by https://github.com/boxdot/gurk-rs
                Backend::SignalCLI => {
                    scli::SCLISession::run(res_sender, req_receiver, clconf.scli.unwrap()).await;
                }
            }
        });
    }
}
/// The main state manager/UI controller
pub struct SignalState<T: SignalBackend> {
    pub message_box: Box,
    pub app_box: Box,
pub struct SignalState<T: SignalBackend + ?Sized> {
    pub current: Option<String>,
    pub history: Option<ChatHistory>,
    pub scroll: ScrolledWindow,
    //pub history: Option<ChatHistory>,
    pub req_sender: UnboundedSender<SignalRequest>,
    pub last_id: Rc<RefCell<Option<String>>>,
    pub chat_list: ChatList,
    pub stack: Stack,
    pub res_sender: glib::Sender<SignalResponse>,
    pub current_chat: Rc<RefCell<Option<String>>>,
    pub button: Button,
    pub input: Entry,
    pub pw: PasswordDialog,
    pub cc: CreateChat,
    pub ccontact: CreateContact,
    pub edit_contact: EditContact,
    //pub pw: PasswordDialog,
    //pub cc: CreateChat,
    //pub ccontact: CreateContact,
    //pub edit_contact: EditContact,
    pub user_tel: Option<String>,
    pub backend: Backend,
    pub sbackend: T,
    pub headerbar: Header,
    pub sbackend: std::boxed::Box<T>,
    //pub headerbar: Header,
    pub config: Rc<RefCell<Config>>,
    pub settings: Settings,
    pub providers: HashMap<Theme, CssProvider>,
    //pub settings: Settings,
}
/// An enum that represents a view that can be displayed.
#[derive(Clone, Debug)]


@@ 118,76 201,38 @@ where
        res_sender: glib::Sender<SignalResponse>,
        config: Config,
    ) -> SignalState<T> {
        let message_box = Box::new(Orientation::Vertical, 6);
        let scroll = ScrolledWindow::new::<Adjustment, Adjustment>(None, None);
        scroll.set_min_content_height(300);
        add_class(&message_box, "msg-box");
        add_class(&scroll, "msg-scroll");
        let app_box = Box::new(Orientation::Vertical, 0);
        let stack = Stack::new();
        let chat_list = ChatList::new();
        let input = EntryBuilder::new().build();
        let button = Button::with_label("Send message");
        let headerbar = Header::new(&res_sender);
        app_box.add(&headerbar.headerbar);
        let msg_box = Box::new(Orientation::Vertical, 8);
        msg_box.pack_start(&scroll, true, true, 0);
        scroll.set_vexpand(true);
        scroll.set_policy(PolicyType::Never, PolicyType::Always);
        msg_box.pack_start(&input, false, false, 0);
        msg_box.pack_start(&button, false, false, 0);
        let pw = PasswordDialog::new();
        let chat_list = ChatList::default();
        //let headerbar = Header::new(&res_sender);

        /*let pw = PasswordDialog::new();
        let cc = CreateChat::new();
        let create_contact = CreateContact::new();
        let edit_contact = EditContact::new();
        let settings = widgets::Settings::new(config.clone());
        stack.add_named(&settings.cbox, "settings");
        stack.add_named(&msg_box, "messages");
        stack.add_named(&chat_list.listbox, "chats");
        stack.add_named(&pw.container, "password");
        stack.add_named(&cc.container, "create-chat");
        stack.add_named(&create_contact.container, "create-contact");
        stack.add_named(&edit_contact.container, "edit-contact");
        add_class(&app_box, "app-box");
        scroll.add(&message_box);
        app_box.add(&stack);
        let mut providers = HashMap::new();
        let style_prov = CssProvider::new();
        style_prov.load_from_data(&STYLE_CSS.as_bytes()).unwrap();
        let signal_prov = CssProvider::new();
        signal_prov.load_from_data(&SIGNAL_CSS.as_bytes()).unwrap();
        providers.insert(Theme::Base, style_prov);
        providers.insert(Theme::Signal, signal_prov);
        let settings = widgets::Settings::new(config.clone());*/

        SignalState {
            message_box,
            app_box,
            stack,
            current: None,
            history: None,
            scroll,
            //history: None,
            req_sender,
            last_id: Rc::new(RefCell::new(None)),
            chat_list,
            res_sender: res_sender.clone(),
            current_chat: Rc::new(RefCell::new(None)),
            button,
            input,
            headerbar,
            pw,
            cc,
            ccontact: create_contact,
            edit_contact,
            //headerbar,
            //pw,
            //cc,
            //ccontact: create_contact,
            //edit_contact,
            user_tel: None,
            backend: config.backend,
            config: Rc::new(RefCell::new(config.clone())),
            sbackend: T::new(res_sender, config),
            settings,
            providers,
            sbackend: std::boxed::Box::new(T::new(res_sender, config)),
            //settings,
        }
    }
    /// Connects the gtk event signals to the relevant callbacks
    pub fn connect_signals(&mut self) {
        self.chat_list.connect(&self);
    /*pub fn connect_signals(&mut self) {
        //self.chat_list.connect(&self);
        self.connect_scroll();
        self.connect_send_button();
        self.cc.connect(&self);


@@ 208,9 253,17 @@ where
            req_sender.send(SignalRequest::GetMessageList{id: to}).expect("Couldn't send GetMessageList");
            scroll.emit_scroll_child(ScrollType::End, false);
        }));
    }
    }*/
    /// Shows the given view in the app_box
    pub fn show_view(&mut self, view: View) {
    pub fn show_view(&mut self, view: String) {
        match view.as_ref() {
            "chats" => {
                self.update_chats();
            }
            _ => {}
        }
    }
    /*pub fn show_view(&mut self, view: View) {
        match view.clone() {
            View::Chats => {
                self.req_sender


@@ 218,13 271,13 @@ where
                    .expect("Couldn't send GetChatList");
                self.hide_history();
                self.update_chats();
                self.chat_list.update_chats();
                self.chat_list.set_enabled(true);
                self.chat_list.listbox.unselect_all();
                //self.chat_list.update_chats();
                //self.chat_list.set_enabled(true);
                //self.chat_list.listbox.unselect_all();
                self.stack.set_visible_child_name("chats");
            }
            View::Messages(tel) => {
                self.chat_list.set_enabled(false);
                //self.chat_list.set_enabled(false);
                self.show_chat(tel);
                self.stack.set_visible_child_name("messages");
            }


@@ 250,29 303,42 @@ where
        };
        self.headerbar
            .set_view(view, &self.req_sender, &self.res_sender);
    }
    }*/
    pub fn update_chats(&mut self) {
        self.chat_list.chats = HashMap::new();
        //self.chat_list.chats = HashMap::new();
        println!("{:?}", self.sbackend.contacts());
        for (i, contact) in self.sbackend.contacts().values().enumerate() {
            if let Some(msgs) = self.sbackend.messages_tel(&contact.tel).ok() {
                if msgs.len() > 0 {
                    let latest = msgs.values().max_by_key(|x| x.sent_at).unwrap();
                    self.chat_list.add_chat(Chat {
                        ID: i as i32,
                        name: contact.name.clone(),
                        tel: contact.tel.clone(),
                        is_group: false,
                        last: latest.message.clone(),
                        timestamp: latest.sent_at,
                        messages: vec![latest.clone()],
                    });

        let chats: Vec<Chat> = self
            .sbackend
            .contacts()
            .values()
            .enumerate()
            .filter_map(|(i, contact)| {
                println!("{:?}", contact);
                if let Some(msgs) = self.sbackend.messages_tel(&contact.tel).ok() {
                    println!("{:?}", msgs);
                    if msgs.len() > 0 {
                        let latest = msgs.values().max_by_key(|x| x.sent_at).unwrap();
                        return Some(Chat {
                            ID: i as i32,
                            name: contact.name.clone(),
                            tel: contact.tel.clone(),
                            is_group: false,
                            last: latest.message.clone(),
                            timestamp: latest.sent_at,
                            messages: vec![latest.clone()],
                        });
                    }
                }
            }
        }
                None
            })
            .collect();
        println!("{:?}", chats);
        //self.chat_list.add_chats(chats.clone());
        self.res_sender.send(SignalResponse::ChatList(chats));
    }
    /// Hides message history
    pub fn hide_history(&mut self) {
    /*pub fn hide_history(&mut self) {
        if self.history.is_some() {
            for child in self.message_box.get_children().iter() {
                self.message_box.remove(child);


@@ 294,39 360,35 @@ where
                }
            };
        }));
    }
    }*/
    /// Shows a given chat by tel
    pub fn show_chat(&mut self, tel: String) {
        self.hide_history();
        let mut history = ChatHistory::new(tel.clone());
    pub fn show_chat(&self, tel: String) {
        //self.hide_history();
        if let Some(map) = self.sbackend.messages_tel(&tel).ok() {
            for m in map.values() {
                history.insert_bottom(Element::Message(Message::new(m.clone())));
            }
            self.res_sender
                .send(SignalResponse::HistoryMessage {
                    phone: tel,
                    messages: map.values().cloned().collect(),
                })
                .expect("Couldn't send HistoryMessage");
        }
        self.current_chat.replace(Some(tel.clone()));
        self.last_id.replace(history.get_last_id());
        self.message_box.add(&history.listbox);
        self.message_box.show_all();
        self.scroll.show_all();
        history.listbox.show_all();
        self.history = Some(history);
        //self.last_id.replace(history.get_last_id());
    }
    /// Processes an incoming SignalResponse and modifies state/UI accordingly
    pub fn process_response(&mut self, response: SignalResponse) {
        self.sbackend.process_response(response.clone());
        match response {
            SignalResponse::Quit => {
                self.headerbar
                    .headerbar
                    .get_toplevel()
                    .unwrap()
                    .downcast::<gtk::Window>()
                    .unwrap()
                    .close();
                /*self.headerbar
                .headerbar
                .get_toplevel()
                .unwrap()
                .downcast::<gtk::Window>()
                .unwrap()
                .close();*/
            }
            SignalResponse::ShowTheme(theme) => {
                self.change_theme(theme);
                //self.change_theme(theme);
            }
            SignalResponse::ShowView(to_show) => {
                self.show_view(to_show);


@@ 336,17 398,17 @@ where
            }
            SignalResponse::Type(typ) => match typ.as_ref() {
                "getEncryptionPw" => {
                    self.show_view(View::Password);
                    //self.show_view(View::Password);
                }
                "registrationDone" => {
                    self.show_view(View::Chats);
                    //self.show_view(View::Chats);
                }
                _ => {
                    println!("Type: {}", typ);
                }
            },
            SignalResponse::AddHist(tel, id, new) => {
                let msg = self.sbackend.message(&tel, id).unwrap();
            SignalResponse::AddHist(msg,  new) => {
                /*let msg = self.sbackend.message(&tel, id).unwrap();
                if let Some(hist) = self.history.as_mut() {
                    if hist.tel == msg.source {
                        if new {


@@ 356,7 418,7 @@ where
                        }
                        self.last_id.replace(hist.get_last_id());
                    }
                }
                }*/
            }
            _ => {}
        }


@@ 369,19 431,8 @@ where
            .filter(|x| x.tel == tel)
            .next()
    }
    pub fn change_theme(&self, theme: Theme) {
        let screen = gdk::Screen::get_default().expect("Error initializing gtk css provider.");
        for prov in &self.providers {
            StyleContext::remove_provider_for_screen(&screen, prov.1);
        }
        StyleContext::add_provider_for_screen(
            &screen,
            self.providers.get(&theme).unwrap(),
            STYLE_PROVIDER_PRIORITY_APPLICATION,
        );
        StyleContext::reset_widgets(&screen);
    }
}
/*
/// A container struct with a Signal Message and a built UI
#[derive(Clone, Debug)]
pub struct Message {


@@ 395,91 446,42 @@ impl Message {
            msg,
        }
    }
}*/
impl StaticUpcast<qt_core::QObject> for SignalUI {
    unsafe fn static_upcast(ptr: Ptr<Self>) -> Ptr<qt_core::QObject> {
        ptr.static_upcast()
    }
}
impl DynamicCast<SignalUI> for qt_core::QObject {
    unsafe fn dynamic_cast(ptr: Ptr<Self>) -> Ptr<SignalUI> {
        ptr.dynamic_cast()
    }
}
#[tokio::main]
async fn main() -> Result<(), std::boxed::Box<dyn std::error::Error>> {
    let config: Config = confy::load("signal-rs").expect("Couldn't handle config file");
    let _total: Vec<SignalResponse> = vec![];
    let application = Application::new(Some("com.nicohman"), Default::default()).unwrap();
    application.connect_activate(move |app| {
        let icon = gdk_pixbuf::Pixbuf::from_file("src/icon.png").unwrap();
        let provider = CssProvider::new();
        provider.load_from_data(BASE_CSS.as_bytes()).unwrap();
        let (res_sender, res_receiver) =
            glib::MainContext::channel::<SignalResponse>(glib::PRIORITY_DEFAULT);
        let l_res_sender = res_sender.clone();
        let (req_sender, req_receiver) = unbounded_channel::<SignalRequest>();
        let clconf = config.clone();
        let window = ApplicationWindow::new(app);
        match config.backend {
            Backend::Axolotl => {
                let mut state: SignalState<AxolotlSession> =
                    SignalState::new(req_sender.clone(), l_res_sender.clone(), config.clone());
                state.change_theme(config.theme);
                state.user_tel = config.number.clone();
                state.connect_signals();
                window.add(&state.app_box);
                state.show_view(View::Chats);
                res_receiver.attach(None, move |value| {
                    state.process_response(value);
                    glib::Continue(true)
                });
            }
            Backend::SignalCLI => {
                let mut state: SignalState<scli::SCLISession> =
                    SignalState::new(req_sender.clone(), l_res_sender.clone(), config.clone());
                state.change_theme(config.theme);
                state.user_tel = config.number.clone();
                state.connect_signals();
                window.add(&state.app_box);
                state.show_view(View::Chats);
                res_receiver.attach(None, move |value| {
                    state.process_response(value);
                    glib::Continue(true)
                });
            }
        };
        StyleContext::add_provider_for_screen(
            &gdk::Screen::get_default().expect("Error initializing gtk css provider."),
            &provider,
            STYLE_PROVIDER_PRIORITY_APPLICATION,
    QGuiApplication::init(|_| unsafe {
        qml_register_type::<SignalUI>(
            CStr::from_bytes_with_nul(b"SignalUI\0").unwrap(),
            0,
            1,
            CStr::from_bytes_with_nul(b"SignalUI\0").unwrap(),
        );
        let _total: Vec<SignalResponse> = vec![];

        window.set_title("Signal");
        window.set_icon(Some(&icon));
        window.set_border_width(10);
        window.set_position(WindowPosition::Center);
        window.set_default_size(400, 800);
        q_init_resource!("qml");
        let _engine = QQmlApplicationEngine::from_q_string(&qs("qrc:/main.qml"));

        req_sender
            .send(SignalRequest::GetChatList)
            .expect("Couldn't send GetChatList");
        if config.backend == Backend::Axolotl {
            req_sender
                .send(SignalRequest::GetContacts)
                .expect("Couldn't send GetContacts");
        }
        tokio::spawn(async move {
            match clconf.backend {
                Backend::Axolotl => {
                    AxolotlSession::run(res_sender, req_receiver).await;
                }
                // Inspired in part by https://github.com/boxdot/gurk-rs
                Backend::SignalCLI => {
                    scli::SCLISession::run(res_sender, req_receiver, clconf.scli.unwrap()).await;
                }
            }
        });
        //std::thread::sleep_ms(1000);
        window.show_all();
        l_res_sender
            .send(SignalResponse::ShowView(View::Chats))
            .expect("Couldn't send ShowChats");
        std::thread::sleep_ms(1000);
        /*let ui: &mut SignalUI = _engine
            .find_child::<SignalUI>("signal")
            .unwrap()
            .as_mut_raw_ref()
            .unwrap();
        ui.init_state();*/
        QGuiApplication::exec();

        1
    });
    application.run(&args().collect::<Vec<_>>());

    Ok(())
}
pub fn add_class(widget: &impl WidgetExt, class: impl Into<String>) {
    let ctx = widget.get_style_context();
    ctx.add_class(class.into().as_str());
}

M src/scli.rs => src/scli.rs +1 -2
@@ 201,8 201,7 @@ impl SCLISession {
                .expect("Couldn't add message to store");
            self.res_sender
                .send(SignalResponse::AddHist(
                    message.source.clone(),
                    message.sent_at,
                    message.clone(),
                    new,
                ))
                .expect("Couldn't send AddHist");

M src/signal.rs => src/signal.rs +19 -9
@@ 2,6 2,7 @@ use crate::Message;
use enum_variant_type::EnumVariantType;
use futures_util::sink::SinkExt;
use futures_util::stream::*;
use qmetaobject::*;
use futures_util::{future, StreamExt};
use gio::subclass::BoxedType;
use glib_macros::*;


@@ 84,20 85,26 @@ pub enum SignalResponse {
    #[serde(rename = "MessageRecieved")]
    MessageReceived(SignalMessage),
    #[evt(derive(Clone, Debug))]
    #[serde(skip)]
    ShowView(crate::View),
    ShowView(String),
    #[evt(derive(Clone, Serialize, Deserialize, Debug))]
    Type(String),
    #[serde(skip)]
    AddHist(String, i64, bool),
    #[serde(skip)]
    AddHist(SignalMessage, bool),
    ShowTheme(crate::config::Theme),
    IDLessMessage(SignalMessage),
    RmContact(String),
    #[serde(skip)]
    Quit
    Quit,
    DefaultOp,
    HistoryMessage{
        phone: String,
        messages: Vec<SignalMessage>
    }
}

impl Default for SignalResponse {
    fn default() -> Self{
        SignalResponse::DefaultOp
    }
}
impl QMetaType for SignalResponse {}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct SignalMessageList {


@@ 105,7 112,7 @@ pub struct SignalMessageList {
    pub ID: String,
    pub messages: Vec<SignalMessage>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct Chat {
    #[serde(rename = "ID")]


@@ 124,9 131,11 @@ pub struct Chat {
    /*#[serde(default)]
    pub force_enable: bool,*/
}
impl QMetaType for Chat {}
fn parse_messages<'de, D>(d: D) -> Result<Vec<SignalMessage>, D::Error>
where
    D: Deserializer<'de>,

{
    Deserialize::deserialize(d).map(|x: Option<_>| x.unwrap_or(vec![]))
}


@@ 137,6 146,7 @@ where
    let msgs : Result<Vec<SignalMessage>, D::Error> = Deserialize::deserialize(d).map(|x: Option<_>| x.unwrap_or(vec![]));
    Ok(msgs?.len())
}*/

#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct SignalCLIContainer {
    pub envelope: SignalCLIMessage,

M src/widgets/chat_list.rs => src/widgets/chat_list.rs +52 -8
@@ 1,44 1,64 @@
use crate::util::parse_time;
use crate::*;
use gdk_pixbuf::*;
use qmetaobject::*;
use std::time::SystemTime;
/// The list of chats
#[derive(QObject, Default)]
pub struct ChatList {
    pub listbox: ListBox,
    base: qt_base_class!(trait QAbstractListModel), //pub listbox: ListBox,
    pub chats: HashMap<i32, Chat>,
    /// Whether the ChatList is enabled
    pub enabled: bool,
    /// Holds the fetched avatars
    pub avatars: HashMap<String, Pixbuf>,
    add_chat: qt_method!(fn(&mut self, chat: Chat))
}
impl StaticUpcast<qt_core::QObject> for ChatList {
    unsafe fn static_upcast(ptr: Ptr<Self>) -> Ptr<qt_core::QObject> {
        ptr.static_upcast()
    }
}
impl DynamicCast<ChatList> for qt_core::QObject {
    unsafe fn dynamic_cast(ptr: Ptr<Self>) -> Ptr<ChatList> {
        ptr.dynamic_cast()
    }
}

// Use Contacts instead of Chats
impl ChatList {
    pub fn new() -> ChatList {
    /*pub fn new() -> ChatList {
        let listbox = ListBoxBuilder::new().build();
        let style = listbox.get_style_context();
        style.add_class("chat-list");
        ChatList {
            listbox,
            //listbox,
            chats: HashMap::new(),
            enabled: false,
            avatars: HashMap::new(),
        }
    }
    }*/
    /// Add a chat to the ChatList
    pub fn add_chat(&mut self, chat: Chat) {
        println!("add {}", chat.name);
        (self as &mut dyn QAbstractListModel).begin_reset_model();

        if let Some(c) = self.chats.get_mut(&chat.ID) {
            *c = chat;
        } else {
            self.chats.insert(chat.ID, chat);
        }
        (self as &mut dyn QAbstractListModel).end_reset_model();
    }
    pub fn add_chats(&mut self, chats: Vec<Chat>) {
        (self as &mut dyn QAbstractListModel).begin_reset_model();
        for chat in chats.into_iter() {
            self.add_chat(chat);
        }
        (self as &mut dyn QAbstractListModel).end_reset_model();
    }
    /// Update the rendered ChatList
    pub fn update_chats(&mut self) {
    // Update the rendered ChatList
    /*pub fn update_chats(&mut self) {
        for child in self.listbox.get_children() {
            self.listbox.remove(&child);
        }


@@ 72,10 92,33 @@ impl ChatList {
            req_sender.send(SignalRequest::GetMessageList{ id: tel.clone()}).expect("Couldn't send GetMessageList");
            res_sender.send(SignalResponse::ShowView(View::Messages(tel))).expect("Couldn't send ShowView");
        }));
    }*/
}


impl QAbstractListModel for ChatList {
    fn row_count(&self) -> i32 {
        self.chats.len() as i32
    }
    fn data(&self, index: QModelIndex, role: i32) -> QVariant {
        println!("printing");
        let idx = index.row() as i32;
        if let Some(chat) = self.chats.get(&idx) {
            //if role == USER_ROLE {
            return QString::from(chat.name.clone()).into();
            //  }
        }
        return QVariant::default();
    }

    fn role_names(&self) -> std::collections::HashMap<i32, QByteArray> {
        let mut map = std::collections::HashMap::new();
        map.insert(USER_ROLE, "chatName".into());
        map
    }
}
/// Builds the row for a single chat
fn build_chat_ui(chat: &Chat) -> ListBoxRow {
// Builds the row for a single chat
/*fn build_chat_ui(chat: &Chat) -> ListBoxRow {
    let row = ListBoxRow::new();
    let b = Box::new(Orientation::Horizontal, 6);
    add_class(&row, "chat-entry");


@@ 129,3 172,4 @@ fn build_chat_ui(chat: &Chat) -> ListBoxRow {
    row.hide();
    row
}
*/

M src/widgets/mod.rs => src/widgets/mod.rs +16 -16
@@ 1,18 1,18 @@
mod chat_history;
//mod chat_history;
mod chat_list;
mod create_chat;
mod create_contact;
mod edit_contact;
mod header;
mod message;
mod password;
mod settings;
pub use chat_history::{ChatHistory, Element};
//mod create_chat;
//mod create_contact;
//mod edit_contact;
//mod header;
//mod message;
//mod password;
//mod settings;
//pub use chat_history::{ChatHistory, Element};
pub use chat_list::ChatList;
pub use create_chat::CreateChat;
pub use create_contact::CreateContact;
pub use edit_contact::EditContact;
pub use header::Header;
pub use message::MessageUi;
pub use password::PasswordDialog;
pub use settings::Settings;
//pub use create_chat::CreateChat;
//pub use create_contact::CreateContact;
//pub use edit_contact::EditContact;
//pub use header::Header;
//pub use message::MessageUi;
//pub use password::PasswordDialog;
//pub use settings::Settings;

M src/widgets/password.rs => src/widgets/password.rs +1 -0
@@ 23,6 23,7 @@ impl PasswordDialog {
            clone!(@weak self.entry as entry, @strong state.req_sender as req_sender => move |_| {
                req_sender.send(SignalRequest::SendPassword{ pw: entry.get_buffer().get_text()}).expect("Couldn't send SendPassword");
            }),
            
        );
    }
}