diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 5f54ed42..8a3e3822 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -1,8 +1,222 @@ import QtQuick 2.9 -Rectangle { +import QtQuick.Controls 2.2 + +ScrollView { id: settingsPage - color: "#333333" objectName: "Settings" - // TODO - add settings + Column { + x: 10 + y: 10 + width: settingsPage.width + height: 400 + + GroupBox { + // TODO save the settings + id: basicSettingsGroupBox + width: (parent.width - 20) + padding: 12 + title: "Basic Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + Label { + width: parent.width + id: resFPStitle + text: qsTr("Resolution and FPS target") + font.pointSize: 12 + wrapMode: Text.Wrap + color: "white" + } + + Label { + width: parent.width + id: resFPSdesc + text: qsTr("Setting values too high for your device may cause lag or crashing") + font.pointSize: 9 + wrapMode: Text.Wrap + color: "white" + } + + ComboBox { + id: resolutionComboBox + currentIndex : 4 + width: Math.min(bitrateDesc.implicitWidth, parent.width) + font.pointSize: 9 + model: ListModel { + id: resolutionListModel + // TODO have values associated with the text. + ListElement { text: "360p 30 FPS" } + ListElement { text: "360p 60 FPS" } + ListElement { text: "720p 30 FPS" } + ListElement { text: "720p 60 FPS" } + ListElement { text: "1080p 30 FPS" } + ListElement { text: "1080p 60 FPS" } + ListElement { text: "4K 30 FPS" } + ListElement { text: "4K 60 FPS" } + } + onCurrentIndexChanged: console.debug(resolutionListModel.get(currentIndex).text + " selected resolution") + } + + Label { + width: parent.width + id: bitrateTitle + text: qsTr("Video bitrate target") + font.pointSize: 12 + wrapMode: Text.Wrap + color: "white" + } + + Label { + width: parent.width + id: bitrateDesc + text: qsTr("Lower bitrate to reduce stuttering. Raise bitrate to increase image quality.") + font.pointSize: 9 + wrapMode: Text.Wrap + color: "white" + } + + Slider { + id: slider + wheelEnabled: true + + // TODO value should be loaded as the current value. + value: 500 + stepSize: 500 + from : 500 + to: 10000 + snapMode: "SnapOnRelease" + width: Math.min(bitrateDesc.implicitWidth, parent.width) + + // TODO store the value + // TODO display the current value to the user + onValueChanged: + { + console.debug(slider.value + " Slider moved") + } + } + + CheckBox { + id: fullScreenCheck + text: "Stretch video to full-screen" + font.pointSize: 12 + } + + CheckBox { + id: pipObserverCheck + text: "Enable Picture-in-Picture observer mode" + font.pointSize: 12 + } + } + } + + GroupBox { + id: audioSettingsGroupBox + width: (parent.width - 20) + padding: 12 + title: "Audio Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + CheckBox { + id: surroundSoundCheck + text: "Enable 5.1 surround sound" + font.pointSize: 12 + } + } + } + + GroupBox { + id: gamepadSettingsGroupBox + width: (parent.width - 20) + padding: 12 + title: "Gamepad Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + CheckBox { + id: multiControllerCheck + text: "Multiple controller support" + font.pointSize: 12 + } + CheckBox { + id: mouseEmulationCheck + text: "Mouse emulation via gamepad" + font.pointSize: 12 + } + } + } + + GroupBox { + id: onScreenControlsGroupBox + width: (parent.width - 20) + padding: 12 + title: "On-screen Controls Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + CheckBox { + id: onScreenControlsCheck + text: "Show on-screen controls" + font.pointSize: 12 + } + } + } + + GroupBox { + id: hostSettingsGroupBox + width: (parent.width - 20) + padding: 12 + title: "Host Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + CheckBox { + id: optimizeGameSettingsCheck + text: "Optimize game settings" + font.pointSize: 12 + } + + CheckBox { + id: audioPcCheck + text: "Play audio on PC" + font.pointSize: 12 + } + } + } + + GroupBox { + id: advancedSettingsGroupBox + width: (parent.width - 20) + padding: 12 + title: "Advanced Settings" + font.pointSize: 12 + + Column { + anchors.fill: parent + spacing: 5 + + CheckBox { + id: neverDropFramesCheck + text: "Never drop frames" + font.pointSize: 12 + } + } + } + } } diff --git a/app/main.cpp b/app/main.cpp index 21f378df..c9ab990c 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -1,5 +1,6 @@ #include #include +#include // Don't let SDL hook our main function, since Qt is already // doing the same thing. This needs to be before any headers @@ -29,6 +30,9 @@ int main(int argc, char *argv[]) QGuiApplication app(argc, argv); + // FIXME this icon is low-resolution and appears a little fuzzy. + app.setWindowIcon(QIcon(":/res/icon128.png")); + // Register our C++ types for QML qmlRegisterType("ComputerModel", 1, 0, "ComputerModel"); qmlRegisterType("AppModel", 1, 0, "AppModel");