diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index ecacedba..71c61697 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -1,9 +1,9 @@ +import "./voip" import QtQuick 2.9 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 import QtQuick.Window 2.2 import im.nheko 1.0 -import "./voip" Rectangle { color: colors.window @@ -26,6 +26,7 @@ Rectangle { ImageButton { visible: CallManager.callsSupported + opacity: CallManager.haveCallInvite ? 0.3 : 1.0 Layout.alignment: Qt.AlignBottom hoverEnabled: true width: 22 @@ -46,7 +47,7 @@ Rectangle { } else { var dialog = placeCallDialog.createObject(timelineRoot); - dialog.show(); + dialog.open(); } } } diff --git a/resources/qml/voip/ActiveCallBar.qml b/resources/qml/voip/ActiveCallBar.qml index 86fe37f6..0e932e13 100644 --- a/resources/qml/voip/ActiveCallBar.qml +++ b/resources/qml/voip/ActiveCallBar.qml @@ -1,8 +1,8 @@ +import "../" import QtQuick 2.9 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 import im.nheko 1.0 -import "../" Rectangle { @@ -38,7 +38,7 @@ Rectangle { Layout.leftMargin: 8 font.pointSize: fontMetrics.font.pointSize * 1.1 text: CallManager.callParty - color: colors.windowText + color: "#000000" } Image { @@ -52,7 +52,7 @@ Rectangle { id: callStateLabel font.pointSize: fontMetrics.font.pointSize * 1.1 - color: colors.windowText + color: "#000000" } Item { @@ -163,11 +163,9 @@ Rectangle { onClicked: CallManager.toggleCameraView() } - Item { - implicitWidth: 8 - } - ImageButton { + Layout.leftMargin: 8 + Layout.rightMargin: 16 width: 24 height: 24 buttonTextColor: "#000000" @@ -177,11 +175,5 @@ Rectangle { ToolTip.text: CallManager.isMicMuted ? qsTr("Unmute Mic") : qsTr("Mute Mic") onClicked: CallManager.toggleMicMute() } - - Item { - implicitWidth: 16 - } - } - } diff --git a/resources/qml/voip/CallDevices.qml b/resources/qml/voip/CallDevices.qml index ee3503ca..b07412c7 100644 --- a/resources/qml/voip/CallDevices.qml +++ b/resources/qml/voip/CallDevices.qml @@ -1,31 +1,44 @@ -import QtQuick 2.3 +import QtQuick 2.9 import QtQuick.Controls 2.3 -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.2 import im.nheko 1.0 -import "../" -ApplicationWindow { +Popup { - flags: Qt.Dialog - modality: Qt.ApplicationModal - palette: colors - width: columnLayout.implicitWidth - height: columnLayout.implicitHeight + modal: true + anchors.centerIn: parent + background: Rectangle { + color: colors.window + border.color: colors.windowText + } + + // palette: colors + // colorize controls correctly + palette.base: colors.base + palette.brightText: colors.brightText + palette.button: colors.button + palette.buttonText: colors.buttonText + palette.dark: colors.dark + palette.highlight: colors.highlight + palette.highlightedText: colors.highlightedText + palette.light: colors.light + palette.mid: colors.mid + palette.text: colors.text + palette.window: colors.window + palette.windowText: colors.windowText ColumnLayout { - id: columnLayout spacing: 16 ColumnLayout { spacing: 8 - RowLayout { + Layout.topMargin: 8 + Layout.leftMargin: 8 + Layout.rightMargin: 8 - Layout.topMargin: 8 - Layout.leftMargin: 8 - Layout.rightMargin: 8 + RowLayout { Image { Layout.preferredWidth: 22 @@ -42,9 +55,7 @@ ApplicationWindow { RowLayout { - visible: CallManager.cameras.length > 0 - Layout.leftMargin: 8 - Layout.rightMargin: 8 + visible: CallManager.isVideo && CallManager.cameras.length > 0 Image { Layout.preferredWidth: 22 @@ -60,31 +71,21 @@ ApplicationWindow { } } - RowLayout { + DialogButtonBox { - Layout.rightMargin: 8 - Layout.bottomMargin: 8 + Layout.leftMargin: 128 + standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel - Item { - implicitWidth: 128 + onAccepted: { + Settings.microphone = micCombo.currentText + if (cameraCombo.visible) { + Settings.camera = cameraCombo.currentText + } + close(); } - Button { - text: qsTr("Ok") - onClicked: { - Settings.microphone = micCombo.currentText - if (cameraCombo.visible) { - Settings.camera = cameraCombo.currentText - } - close(); - } - } - - Button { - text: qsTr("Cancel") - onClicked: { - close(); - } + onRejected: { + close(); } } } diff --git a/resources/qml/voip/CallInviteBar.qml b/resources/qml/voip/CallInviteBar.qml index 93ff1042..8c3a8f6a 100644 --- a/resources/qml/voip/CallInviteBar.qml +++ b/resources/qml/voip/CallInviteBar.qml @@ -1,9 +1,8 @@ +import "../" import QtQuick 2.9 import QtQuick.Controls 2.3 -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.2 import im.nheko 1.0 -import "../" Rectangle { @@ -11,15 +10,15 @@ Rectangle { color: "#2ECC71" implicitHeight: visible ? rowLayout.height + 8 : 0 - MessageDialog { - id: warningDialog - icon: StandardIcon.Warning + Component { + id: devicesDialog + CallDevices { + } } Component { - id: devicesDialog - - CallDevices { + id: deviceError + DeviceError { } } @@ -42,7 +41,7 @@ Rectangle { Layout.leftMargin: 8 font.pointSize: fontMetrics.font.pointSize * 1.1 text: CallManager.callParty - color: colors.windowText + color: "#000000" } Image { @@ -55,7 +54,7 @@ Rectangle { Label { font.pointSize: fontMetrics.font.pointSize * 1.1 text: CallManager.isVideo ? qsTr("Video Call") : qsTr("Voice Call") - color: colors.windowText + color: "#000000" } Item { @@ -63,8 +62,9 @@ Rectangle { } ImageButton { - width: 24 - height: 24 + Layout.rightMargin: 16 + width: 20 + height: 20 buttonTextColor: "#000000" image: ":/icons/icons/ui/settings.png" hoverEnabled: true @@ -72,53 +72,56 @@ Rectangle { ToolTip.text: qsTr("Devices") onClicked: { var dialog = devicesDialog.createObject(timelineRoot); - dialog.show(); + dialog.open(); } } - Item { - implicitWidth: 8 - } - Button { + Layout.rightMargin: 4 icon.source: CallManager.isVideo ? "qrc:/icons/icons/ui/video-call.png" : "qrc:/icons/icons/ui/place-call.png" - palette: colors text: qsTr("Accept") + palette.button: colors.button + palette.buttonText: colors.buttonText + onClicked: { if (CallManager.mics.length == 0) { - warningDialog.text = qsTr("No microphone found."); - warningDialog.open(); + var dialog = deviceError.createObject(timelineRoot, { + "errorString": qsTr("No microphone found."), + "iconSource": "qrc:/icons/icons/ui/place-call.png" + }); + dialog.open(); return; } else if (!CallManager.mics.includes(Settings.microphone)) { - warningDialog.text = qsTr("Unknown microphone: ") + Settings.microphone; - warningDialog.open(); + var dialog = deviceError.createObject(timelineRoot, { + "errorString": qsTr("Unknown microphone: ") + Settings.microphone, + "iconSource": "qrc:/icons/icons/ui/place-call.png" + }); + dialog.open(); return; } if (CallManager.isVideo && CallManager.cameras.length > 0 && !CallManager.cameras.includes(Settings.camera)) { - warningDialog.text = qsTr("Unknown camera: ") + Settings.camera; - warningDialog.open(); + var dialog = deviceError.createObject(timelineRoot, { + "errorString": qsTr("Unknown camera: ") + Settings.camera, + "iconSource": "qrc:/icons/icons/ui/video-call.png" + }); + dialog.open(); return; } CallManager.acceptInvite(); } } - Item { - implicitWidth: 4 - } - Button { + Layout.rightMargin: 16 icon.source: "qrc:/icons/icons/ui/end-call.png" - palette: colors text: qsTr("Decline") + palette.button: colors.button + palette.buttonText: colors.buttonText + onClicked: { CallManager.hangUp(); } } - - Item { - implicitWidth: 16 - } } } diff --git a/resources/qml/voip/DeviceError.qml b/resources/qml/voip/DeviceError.qml new file mode 100644 index 00000000..c88c7faa --- /dev/null +++ b/resources/qml/voip/DeviceError.qml @@ -0,0 +1,31 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 +import im.nheko 1.0 + +Popup { + + property string errorString + property var iconSource + + modal: true + anchors.centerIn: parent + background: Rectangle { + color: colors.window + border.color: colors.windowText + } + + RowLayout { + + Image { + Layout.preferredWidth: 16 + Layout.preferredHeight: 16 + source: iconSource + } + + Label { + text: errorString + color: colors.windowText + } + } +} diff --git a/resources/qml/voip/PlaceCall.qml b/resources/qml/voip/PlaceCall.qml index 4e29c1ae..8dc7d781 100644 --- a/resources/qml/voip/PlaceCall.qml +++ b/resources/qml/voip/PlaceCall.qml @@ -1,23 +1,39 @@ -import QtQuick 2.3 +import "../" +import QtQuick 2.9 import QtQuick.Controls 2.3 -import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.2 import im.nheko 1.0 -import "../" -ApplicationWindow { +Popup { - flags: Qt.Dialog - modality: Qt.ApplicationModal - palette: colors - width: columnLayout.implicitWidth - height: columnLayout.implicitHeight - - MessageDialog { - id: warningDialog - icon: StandardIcon.Warning + modal: true + anchors.centerIn: parent + background: Rectangle { + color: colors.window + border.color: colors.windowText } + Component { + id: deviceError + DeviceError { + } + } + + // palette: colors + // colorize controls correctly + palette.base: colors.base + palette.brightText: colors.brightText + palette.button: colors.button + palette.buttonText: colors.buttonText + palette.dark: colors.dark + palette.highlight: colors.highlight + palette.highlightedText: colors.highlightedText + palette.light: colors.light + palette.mid: colors.mid + palette.text: colors.text + palette.window: colors.window + palette.windowText: colors.windowText + ColumnLayout { id: columnLayout @@ -25,11 +41,10 @@ ApplicationWindow { RowLayout { - Layout.topMargin: 16 + Layout.topMargin: 8 Layout.leftMargin: 8 Label { - font.pointSize: fontMetrics.font.pointSize * 1.1 text: qsTr("Place a call to ") + TimelineManager.timeline.roomName + "?" color: colors.windowText } @@ -47,24 +62,24 @@ ApplicationWindow { function validateMic() { if (CallManager.mics.length == 0) { - warningDialog.text = qsTr("No microphone found."); - warningDialog.open(); + var dialog = deviceError.createObject(timelineRoot, { + "errorString": qsTr("No microphone found."), + "iconSource": "qrc:/icons/icons/ui/place-call.png" + }); + dialog.open(); return false; } return true; } Avatar { + Layout.rightMargin: cameraCombo.visible ? 16 : 64 width: avatarSize height: avatarSize url: TimelineManager.timeline.roomAvatarUrl.replace("mxc://", "image://MxcImage/") displayName: TimelineManager.timeline.roomName } - Item { - implicitWidth: cameraCombo.visible ? 16 : 64 - } - Button { text: qsTr("Voice") icon.source: "qrc:/icons/icons/ui/place-call.png" @@ -106,7 +121,7 @@ ApplicationWindow { Layout.leftMargin: 8 Layout.rightMargin: 8 - Layout.bottomMargin: cameraCombo.visible ? 0 : 16 + Layout.bottomMargin: cameraCombo.visible ? 0 : 8 Image { Layout.preferredWidth: 22 @@ -126,7 +141,7 @@ ApplicationWindow { visible: CallManager.cameras.length > 0 Layout.leftMargin: 8 Layout.rightMargin: 8 - Layout.bottomMargin: 16 + Layout.bottomMargin: 8 Image { Layout.preferredWidth: 22 diff --git a/resources/res.qrc b/resources/res.qrc index ca333978..bceeb298 100644 --- a/resources/res.qrc +++ b/resources/res.qrc @@ -160,6 +160,7 @@ qml/voip/ActiveCallBar.qml qml/voip/CallDevices.qml qml/voip/CallInviteBar.qml + qml/voip/DeviceError.qml qml/voip/PlaceCall.qml qml/voip/VideoCall.qml diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 7c7ef9ab..f133c87d 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -464,7 +464,7 @@ UserSettings::applyTheme() stylefile.setFileName(":/styles/styles/nheko.qss"); QPalette lightActive( /*windowText*/ QColor("#333"), - /*button*/ QColor("#333"), + /*button*/ QColor("white"), /*light*/ QColor(0xef, 0xef, 0xef), /*dark*/ QColor(110, 110, 110), /*mid*/ QColor(220, 220, 220), @@ -477,7 +477,7 @@ UserSettings::applyTheme() lightActive.setColor(QPalette::ToolTipBase, lightActive.base().color()); lightActive.setColor(QPalette::ToolTipText, lightActive.text().color()); lightActive.setColor(QPalette::Link, QColor("#0077b5")); - lightActive.setColor(QPalette::ButtonText, QColor("#495057")); + lightActive.setColor(QPalette::ButtonText, QColor("#333")); QApplication::setPalette(lightActive); } else if (this->theme() == "dark") { stylefile.setFileName(":/styles/styles/nheko-dark.qss");