mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2025-01-18 12:15:27 +00:00
Migrate from QtQuick.Controls 1.x to QtQuick.Controls 2.x. Updated QMLTermWidget submodule.
This commit is contained in:
parent
dac2b4ff16
commit
dae1a56691
@ -79,6 +79,9 @@ int main(int argc, char *argv[])
|
||||
app.setWindowIcon(QIcon(":../icons/32x32/cool-retro-term.png"));
|
||||
#endif
|
||||
|
||||
app.setOrganizationName("cool-retro-term");
|
||||
app.setOrganizationDomain("cool-retro-term");
|
||||
|
||||
// Manage command line arguments from the cpp side
|
||||
QStringList args = app.arguments();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Window 2.0
|
||||
|
||||
@ -86,24 +86,28 @@ Window{
|
||||
}
|
||||
Component{
|
||||
id: licenseComponent
|
||||
TextArea{
|
||||
ScrollView {
|
||||
anchors.fill: parent
|
||||
readOnly: true
|
||||
text: "Copyright (c) 2013 Filippo Scognamiglio <flscogna@gmail.com>\n\n" +
|
||||
"https://github.com/Swordfish90/cool-retro-term\n\n" +
|
||||
clip: true
|
||||
TextArea{
|
||||
readOnly: true
|
||||
wrapMode: TextEdit.Wrap
|
||||
text: "Copyright (c) 2013 Filippo Scognamiglio <flscogna@gmail.com>\n\n" +
|
||||
"https://github.com/Swordfish90/cool-retro-term\n\n" +
|
||||
|
||||
"cool-retro-term is free software: you can redistribute it and/or modify " +
|
||||
"it under the terms of the GNU General Public License as published by " +
|
||||
"the Free Software Foundation, either version 3 of the License, or " +
|
||||
"(at your option) any later version.\n\n" +
|
||||
"cool-retro-term is free software: you can redistribute it and/or modify " +
|
||||
"it under the terms of the GNU General Public License as published by " +
|
||||
"the Free Software Foundation, either version 3 of the License, or " +
|
||||
"(at your option) any later version.\n\n" +
|
||||
|
||||
"This program is distributed in the hope that it will be useful, " +
|
||||
"but WITHOUT ANY WARRANTY; without even the implied warranty of " +
|
||||
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " +
|
||||
"GNU General Public License for more details.\n\n" +
|
||||
"This program is distributed in the hope that it will be useful, " +
|
||||
"but WITHOUT ANY WARRANTY; without even the implied warranty of " +
|
||||
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " +
|
||||
"GNU General Public License for more details.\n\n" +
|
||||
|
||||
"You should have received a copy of the GNU General Public License " +
|
||||
"along with this program. If not, see <http://www.gnu.org/licenses/>."
|
||||
"You should have received a copy of the GNU General Public License " +
|
||||
"along with this program. If not, see <http://www.gnu.org/licenses/>."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.0
|
||||
import QtQuick.Controls 2.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
@ -336,6 +336,7 @@ QtObject{
|
||||
|
||||
_margin = settings.margin !== undefined ? settings.margin : _margin;
|
||||
|
||||
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
@ -28,8 +28,8 @@ RowLayout {
|
||||
property alias name: check.text
|
||||
|
||||
property double value
|
||||
property alias min_value: slider.minimumValue
|
||||
property alias max_value: slider.maximumValue
|
||||
property alias min_value: slider.from
|
||||
property alias max_value: slider.to
|
||||
property alias stepSize: slider.stepSize
|
||||
|
||||
signal newValue(real newValue);
|
||||
@ -67,7 +67,6 @@ RowLayout {
|
||||
}
|
||||
}
|
||||
SizedLabel {
|
||||
Layout.fillHeight: true
|
||||
text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
|
||||
}
|
||||
}
|
||||
|
@ -42,8 +42,7 @@ Item {
|
||||
anchors.fill: parent
|
||||
radius: 10
|
||||
color: rootItem.color
|
||||
border.color: "black"
|
||||
Glossy {}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
anchors.margins: parent.height * 0.25
|
||||
|
@ -20,16 +20,14 @@
|
||||
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.0
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.0
|
||||
|
||||
// This component is simply a label with a predefined size.
|
||||
// Used to improve alignment.
|
||||
|
||||
Item {
|
||||
property alias text: textfield.text
|
||||
Label {
|
||||
id: textfield
|
||||
Layout.minimumWidth: appSettings.labelWidth
|
||||
width: appSettings.labelWidth
|
||||
Label{
|
||||
id: textfield
|
||||
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +0,0 @@
|
||||
import QtQuick 2.2
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - parent.border.width
|
||||
height: parent.height - parent.border.width
|
||||
radius:parent.radius - parent.border.width/2
|
||||
smooth: true
|
||||
|
||||
border.width: parent.border.width/2
|
||||
border.color: "#22FFFFFF"
|
||||
|
||||
gradient: Gradient {
|
||||
GradientStop { position: 0; color: "#88FFFFFF" }
|
||||
GradientStop { position: .1; color: "#55FFFFFF" }
|
||||
GradientStop { position: .5; color: "#33FFFFFF" }
|
||||
GradientStop { position: .501; color: "#11000000" }
|
||||
GradientStop { position: .8; color: "#11FFFFFF" }
|
||||
GradientStop { position: 1; color: "#55FFFFFF" }
|
||||
}
|
||||
}
|
@ -20,7 +20,7 @@
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
|
@ -19,10 +19,11 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
|
||||
import QMLTermWidget 1.0
|
||||
|
||||
import "menus"
|
||||
import "utils.js" as Utils
|
||||
|
||||
Item{
|
||||
@ -156,31 +157,23 @@ Item{
|
||||
Component.onCompleted: {
|
||||
appSettings.terminalFontChanged.connect(handleFontChanged);
|
||||
appSettings.initializedSettings.connect(startSession);
|
||||
appSettings.handleFontChanged()
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: linuxContextMenu
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem { action: copyAction }
|
||||
MenuItem { action: pasteAction }
|
||||
MenuSeparator { visible: !appSettings.showMenubar }
|
||||
MenuItem { action: showsettingsAction ; visible: !appSettings.showMenubar}
|
||||
MenuSeparator { visible: !appSettings.showMenubar }
|
||||
CRTMainMenuBar { visible: !appSettings.showMenubar }
|
||||
}
|
||||
id: shortContextMenu
|
||||
ShortContextMenu { }
|
||||
}
|
||||
|
||||
Component {
|
||||
id: osxContextMenu
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem{action: copyAction}
|
||||
MenuItem{action: pasteAction}
|
||||
}
|
||||
id: fullContextMenu
|
||||
FullContextMenu { }
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: menuLoader
|
||||
sourceComponent: (Qt.platform.os === "osx" ? osxContextMenu : linuxContextMenu)
|
||||
sourceComponent: (Qt.platform.os === "osx" || appSettings.showMenubar ? shortContextMenu : fullContextMenu)
|
||||
}
|
||||
property alias contextmenu: menuLoader.item
|
||||
|
||||
|
@ -19,127 +19,128 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQml 2.0
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
GroupBox{
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Command")
|
||||
|
||||
GroupBox{
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Command")
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: useCustomCommand
|
||||
text: qsTr("Use custom command instead of shell at startup")
|
||||
checked: appSettings.useCustomCommand
|
||||
onCheckedChanged: appSettings.useCustomCommand = checked
|
||||
}
|
||||
// Workaround for QTBUG-31627 for pre 5.3.0
|
||||
Binding{
|
||||
target: useCustomCommand
|
||||
property: "checked"
|
||||
value: appSettings.useCustomCommand
|
||||
}
|
||||
TextField{
|
||||
id: customCommand
|
||||
Layout.fillWidth: true
|
||||
text: appSettings.customCommand
|
||||
enabled: useCustomCommand.checked
|
||||
onEditingFinished: appSettings.customCommand = text
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: useCustomCommand
|
||||
text: qsTr("Use custom command instead of shell at startup")
|
||||
checked: appSettings.useCustomCommand
|
||||
onCheckedChanged: appSettings.useCustomCommand = checked
|
||||
}
|
||||
// Workaround for QTBUG-31627 for pre 5.3.0
|
||||
Binding{
|
||||
target: useCustomCommand
|
||||
property: "checked"
|
||||
value: appSettings.useCustomCommand
|
||||
}
|
||||
TextField{
|
||||
id: customCommand
|
||||
Layout.fillWidth: true
|
||||
text: appSettings.customCommand
|
||||
enabled: useCustomCommand.checked
|
||||
onEditingFinished: appSettings.customCommand = text
|
||||
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Performance")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
rows: 2
|
||||
columns: 3
|
||||
GroupBox{
|
||||
title: qsTr("Performance")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 4
|
||||
|
||||
Label{text: qsTr("Effects FPS")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: fpsSlider
|
||||
onValueChanged: {
|
||||
if (enabled) {
|
||||
appSettings.fps = value !== 60 ? value + 1 : 0;
|
||||
}
|
||||
}
|
||||
stepSize: 1
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0;
|
||||
maximumValue = 60;
|
||||
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
|
||||
enabled = true;
|
||||
Label{text: qsTr("Effects FPS")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
id: fpsSlider
|
||||
onValueChanged: {
|
||||
if (enabled) {
|
||||
appSettings.fps = value !== 60 ? value + 1 : 0;
|
||||
}
|
||||
}
|
||||
stepSize: 1
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0;
|
||||
to = 60;
|
||||
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
|
||||
Label{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: txtslider
|
||||
onValueChanged: if (enabled) appSettings.windowScaling = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25 //Without this value gets set to 0.5
|
||||
value = appSettings.windowScaling;
|
||||
enabled = true;
|
||||
}
|
||||
Label{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
|
||||
Label{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
id: txtslider
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
onValueChanged: if (enabled) appSettings.windowScaling = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0.25 //Without this value gets set to 0.5
|
||||
value = appSettings.windowScaling;
|
||||
enabled = true;
|
||||
}
|
||||
SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
|
||||
}
|
||||
Label{text: Math.round(txtslider.value * 100) + "%"}
|
||||
|
||||
Label{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: bloomSlider
|
||||
onValueChanged: if (enabled) appSettings.bloomQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25
|
||||
value = appSettings.bloomQuality;
|
||||
enabled = true;
|
||||
}
|
||||
Label{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
id: bloomSlider
|
||||
onValueChanged: if (enabled) appSettings.bloomQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0.25
|
||||
value = appSettings.bloomQuality;
|
||||
enabled = true;
|
||||
}
|
||||
SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
|
||||
}
|
||||
Label{text: Math.round(bloomSlider.value * 100) + "%"}
|
||||
|
||||
Label{text: qsTr("BurnIn Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: burnInSlider
|
||||
onValueChanged: if (enabled) appSettings.burnInQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25
|
||||
value = appSettings.burnInQuality;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||
CheckBox{
|
||||
Layout.columnSpan: 2
|
||||
text: qsTr("Burnin optimization (Might display timing artifacts)")
|
||||
checked: appSettings.useFastBurnIn
|
||||
onCheckedChanged: appSettings.useFastBurnIn = checked
|
||||
Label{text: qsTr("BurnIn Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: burnInSlider
|
||||
Layout.columnSpan: 2
|
||||
onValueChanged: if (enabled) appSettings.burnInQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0.25
|
||||
value = appSettings.burnInQuality;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
Label{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||
CheckBox{
|
||||
Layout.columnSpan: 2
|
||||
text: qsTr("Burnin optimization (Might display timing artifacts)")
|
||||
checked: appSettings.useFastBurnIn
|
||||
onCheckedChanged: appSettings.useFastBurnIn = checked
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,72 +19,69 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
spacing: 2
|
||||
ColumnLayout{
|
||||
spacing: 2
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Effects")
|
||||
Layout.fillWidth: true
|
||||
GroupBox{
|
||||
title: qsTr("Effects")
|
||||
Layout.fillWidth: true
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
CheckableSlider{
|
||||
name: qsTr("Bloom")
|
||||
onNewValue: appSettings.bloom = newValue
|
||||
value: appSettings.bloom
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("BurnIn")
|
||||
onNewValue: appSettings.burnIn = newValue
|
||||
value: appSettings.burnIn
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Static Noise")
|
||||
onNewValue: appSettings.staticNoise = newValue
|
||||
value: appSettings.staticNoise
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Jitter")
|
||||
onNewValue: appSettings.jitter = newValue
|
||||
value: appSettings.jitter
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Glow Line")
|
||||
onNewValue: appSettings.glowingLine = newValue;
|
||||
value: appSettings.glowingLine
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Screen Curvature")
|
||||
onNewValue: appSettings.screenCurvature = newValue;
|
||||
value: appSettings.screenCurvature;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Ambient Light")
|
||||
onNewValue: appSettings.ambientLight = newValue;
|
||||
value: appSettings.ambientLight
|
||||
enabled: appSettings.framesIndex !== 0
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Flickering")
|
||||
onNewValue: appSettings.flickering = newValue;
|
||||
value: appSettings.flickering;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Horizontal Sync")
|
||||
onNewValue: appSettings.horizontalSync = newValue;
|
||||
value: appSettings.horizontalSync;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("RGB Shift")
|
||||
onNewValue: appSettings.rbgShift = newValue;
|
||||
value: appSettings.rbgShift;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Bloom")
|
||||
onNewValue: appSettings.bloom = newValue
|
||||
value: appSettings.bloom
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("BurnIn")
|
||||
onNewValue: appSettings.burnIn = newValue
|
||||
value: appSettings.burnIn
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Static Noise")
|
||||
onNewValue: appSettings.staticNoise = newValue
|
||||
value: appSettings.staticNoise
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Jitter")
|
||||
onNewValue: appSettings.jitter = newValue
|
||||
value: appSettings.jitter
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Glow Line")
|
||||
onNewValue: appSettings.glowingLine = newValue;
|
||||
value: appSettings.glowingLine
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Screen Curvature")
|
||||
onNewValue: appSettings.screenCurvature = newValue;
|
||||
value: appSettings.screenCurvature;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Ambient Light")
|
||||
onNewValue: appSettings.ambientLight = newValue;
|
||||
value: appSettings.ambientLight
|
||||
enabled: appSettings.framesIndex !== 0
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Flickering")
|
||||
onNewValue: appSettings.flickering = newValue;
|
||||
value: appSettings.flickering;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Horizontal Sync")
|
||||
onNewValue: appSettings.horizontalSync = newValue;
|
||||
value: appSettings.horizontalSync;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("RGB Shift")
|
||||
onNewValue: appSettings.rbgShift = newValue;
|
||||
value: appSettings.rbgShift;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,216 +19,217 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
GroupBox{
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
title: qsTr("Profile")
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
TableView {
|
||||
id: profilesView
|
||||
ColumnLayout{
|
||||
GroupBox{
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Profile")
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
ListView {
|
||||
id: profilesView
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
model: appSettings.profilesList
|
||||
delegate: Rectangle {
|
||||
width: label.width
|
||||
height: label.height
|
||||
color: (index == profilesView.currentIndex) ? palette.highlight : palette.base
|
||||
Label {
|
||||
id: label
|
||||
text: appSettings.profilesList.get(index).text
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: profilesView.currentIndex = index
|
||||
onDoubleClicked: appSettings.loadProfile(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ColumnLayout {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: false
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Save")
|
||||
onClicked: {
|
||||
insertname.profileName = "";
|
||||
insertname.show()
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
enabled: currentIndex >= 0
|
||||
text: qsTr("Load")
|
||||
onClicked: {
|
||||
var index = currentIndex;
|
||||
if (index >= 0)
|
||||
appSettings.loadProfile(index);
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Remove")
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
appSettings.profilesList.remove(currentIndex);
|
||||
profilesView.selection.clear();
|
||||
|
||||
// TODO This is a very ugly workaround. The view didn't update on Qt 5.3.2.
|
||||
profilesView.model = 0;
|
||||
profilesView.model = appSettings.profilesList;
|
||||
}
|
||||
}
|
||||
Item {
|
||||
// Spacing
|
||||
Layout.fillHeight: true
|
||||
model: appSettings.profilesList
|
||||
headerVisible: false
|
||||
TableViewColumn {
|
||||
title: qsTr("Profile")
|
||||
role: "text"
|
||||
width: parent.width * 0.5
|
||||
}
|
||||
onActivated: {
|
||||
appSettings.loadProfile(row);
|
||||
}
|
||||
}
|
||||
ColumnLayout {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: false
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Save")
|
||||
onClicked: {
|
||||
insertname.profileName = "";
|
||||
insertname.show()
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Import")
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = true;
|
||||
fileDialog.callBack = function (url) {loadFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
enabled: currentIndex >= 0
|
||||
text: qsTr("Load")
|
||||
onClicked: {
|
||||
var index = profilesView.currentRow;
|
||||
if (index >= 0)
|
||||
appSettings.loadProfile(index);
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Remove")
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
function loadFile(url) {
|
||||
try {
|
||||
if (appSettings.verbose)
|
||||
console.log("Loading file: " + url);
|
||||
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
appSettings.profilesList.remove(currentIndex);
|
||||
profilesView.selection.clear();
|
||||
var profileObject = JSON.parse(fileIO.read(url));
|
||||
var name = profileObject.name;
|
||||
|
||||
// TODO This is a very ugly workaround. The view didn't update on Qt 5.3.2.
|
||||
profilesView.model = 0;
|
||||
profilesView.model = appSettings.profilesList;
|
||||
}
|
||||
}
|
||||
Item {
|
||||
// Spacing
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Import")
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = true;
|
||||
fileDialog.callBack = function (url) {loadFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
function loadFile(url) {
|
||||
try {
|
||||
if (appSettings.verbose)
|
||||
console.log("Loading file: " + url);
|
||||
if (!name)
|
||||
throw "Profile doesn't have a name";
|
||||
|
||||
var profileObject = JSON.parse(fileIO.read(url));
|
||||
var name = profileObject.name;
|
||||
var version = profileObject.version !== undefined ? profileObject.version : 1;
|
||||
if (version !== appSettings.profileVersion)
|
||||
throw "This profile is not supported on this version of CRT.";
|
||||
|
||||
if (!name)
|
||||
throw "Profile doesn't have a name";
|
||||
delete profileObject.name;
|
||||
|
||||
var version = profileObject.version !== undefined ? profileObject.version : 1;
|
||||
if (version !== appSettings.profileVersion)
|
||||
throw "This profile is not supported on this version of CRT.";
|
||||
|
||||
delete profileObject.name;
|
||||
|
||||
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
|
||||
} catch (err) {
|
||||
messageDialog.text = qsTr(err)
|
||||
messageDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
Button{
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Export")
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = false;
|
||||
fileDialog.callBack = function (url) {storeFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
function storeFile(url) {
|
||||
try {
|
||||
var urlString = url.toString();
|
||||
|
||||
// Fix the extension if it's missing.
|
||||
var extension = urlString.substring(urlString.length - 5, urlString.length);
|
||||
var urlTail = (extension === ".json" ? "" : ".json");
|
||||
url += urlTail;
|
||||
|
||||
if (true)
|
||||
console.log("Storing file: " + url);
|
||||
|
||||
var profileObject = appSettings.profilesList.get(currentIndex);
|
||||
var profileSettings = JSON.parse(profileObject.obj_string);
|
||||
profileSettings["name"] = profileObject.text;
|
||||
profileSettings["version"] = appSettings.profileVersion;
|
||||
|
||||
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
|
||||
if (!result)
|
||||
throw "The file could not be written.";
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
messageDialog.text = qsTr("There has been an error storing the file.")
|
||||
messageDialog.open();
|
||||
}
|
||||
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
|
||||
} catch (err) {
|
||||
messageDialog.text = qsTr(err)
|
||||
messageDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Button{
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Screen")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.brightness = value
|
||||
value: appSettings.brightness
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Export")
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = false;
|
||||
fileDialog.callBack = function (url) {storeFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
function storeFile(url) {
|
||||
try {
|
||||
var urlString = url.toString();
|
||||
|
||||
// Fix the extension if it's missing.
|
||||
var extension = urlString.substring(urlString.length - 5, urlString.length);
|
||||
var urlTail = (extension === ".json" ? "" : ".json");
|
||||
url += urlTail;
|
||||
|
||||
if (true)
|
||||
console.log("Storing file: " + url);
|
||||
|
||||
var profileObject = appSettings.profilesList.get(currentIndex);
|
||||
var profileSettings = JSON.parse(profileObject.obj_string);
|
||||
profileSettings["name"] = profileObject.text;
|
||||
profileSettings["version"] = appSettings.profileVersion;
|
||||
|
||||
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
|
||||
if (!result)
|
||||
throw "The file could not be written.";
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
messageDialog.text = qsTr("There has been an error storing the file.")
|
||||
messageDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
Label{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.contrast = value
|
||||
value: appSettings.contrast
|
||||
}
|
||||
Label{ text: qsTr("Margin") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings._margin = value
|
||||
value: appSettings._margin
|
||||
}
|
||||
Label{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.windowOpacity = value
|
||||
value: appSettings.windowOpacity
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DIALOGS ////////////////////////////////////////////////////////////////
|
||||
InsertNameDialog{
|
||||
id: insertname
|
||||
onNameSelected: {
|
||||
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
|
||||
}
|
||||
}
|
||||
MessageDialog {
|
||||
id: messageDialog
|
||||
title: qsTr("File Error")
|
||||
onAccepted: {
|
||||
messageDialog.close();
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
property var callBack
|
||||
property bool selectExisting: false
|
||||
id: fileDialog
|
||||
|
||||
sourceComponent: FileDialog{
|
||||
nameFilters: ["Json files (*.json)"]
|
||||
selectMultiple: false
|
||||
selectFolder: false
|
||||
selectExisting: fileDialog.selectExisting
|
||||
onAccepted: callBack(fileUrl);
|
||||
}
|
||||
|
||||
onSelectExistingChanged: reload()
|
||||
|
||||
function open() {
|
||||
item.open();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
active = false;
|
||||
active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Screen")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.brightness = value
|
||||
value: appSettings.brightness
|
||||
}
|
||||
Label{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.contrast = value
|
||||
value: appSettings.contrast
|
||||
}
|
||||
Label{ text: qsTr("Margin") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings._margin = value
|
||||
value: appSettings._margin
|
||||
}
|
||||
Label{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.windowOpacity = value
|
||||
value: appSettings.windowOpacity
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DIALOGS ////////////////////////////////////////////////////////////////
|
||||
InsertNameDialog{
|
||||
id: insertname
|
||||
onNameSelected: {
|
||||
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
|
||||
}
|
||||
}
|
||||
MessageDialog {
|
||||
id: messageDialog
|
||||
title: qsTr("File Error")
|
||||
onAccepted: {
|
||||
messageDialog.close();
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
property var callBack
|
||||
property bool selectExisting: false
|
||||
id: fileDialog
|
||||
|
||||
sourceComponent: FileDialog{
|
||||
nameFilters: ["Json files (*.json)"]
|
||||
selectMultiple: false
|
||||
selectFolder: false
|
||||
selectExisting: fileDialog.selectExisting
|
||||
onAccepted: callBack(fileUrl);
|
||||
}
|
||||
|
||||
onSelectExistingChanged: reload()
|
||||
|
||||
function open() {
|
||||
item.open();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
active = false;
|
||||
active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,154 +19,142 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQml 2.0
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Font")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label { text: qsTr("Rasterization") }
|
||||
ComboBox {
|
||||
id: rasterizationBox
|
||||
GroupBox{
|
||||
title: qsTr("Font")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label { text: qsTr("Rasterization") }
|
||||
ComboBox {
|
||||
id: rasterizationBox
|
||||
|
||||
property string selectedElement: model[currentIndex]
|
||||
property string selectedElement: model[currentIndex]
|
||||
|
||||
Layout.fillWidth: true
|
||||
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
|
||||
currentIndex: appSettings.rasterization
|
||||
onCurrentIndexChanged: {
|
||||
appSettings.rasterization = currentIndex
|
||||
}
|
||||
Layout.fillWidth: true
|
||||
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
|
||||
currentIndex: appSettings.rasterization
|
||||
onCurrentIndexChanged: {
|
||||
appSettings.rasterization = currentIndex
|
||||
}
|
||||
Label{ text: qsTr("Name") }
|
||||
ComboBox{
|
||||
id: fontChanger
|
||||
Layout.fillWidth: true
|
||||
model: appSettings.fontlist
|
||||
onActivated: {
|
||||
var name = appSettings.fontlist.get(index).name;
|
||||
appSettings.fontNames[appSettings.rasterization] = name;
|
||||
appSettings.handleFontChanged();
|
||||
}
|
||||
function updateIndex(){
|
||||
var name = appSettings.fontNames[appSettings.rasterization];
|
||||
var index = appSettings.getIndexByName(name);
|
||||
if (index !== undefined)
|
||||
currentIndex = index;
|
||||
}
|
||||
Connections{
|
||||
target: appSettings
|
||||
onTerminalFontChanged: fontChanger.updateIndex();
|
||||
}
|
||||
Component.onCompleted: updateIndex();
|
||||
}
|
||||
Label{ text: qsTr("Name") }
|
||||
ComboBox{
|
||||
id: fontChanger
|
||||
Layout.fillWidth: true
|
||||
model: appSettings.fontlist
|
||||
textRole: "text"
|
||||
onActivated: {
|
||||
var name = appSettings.fontlist.get(index).name;
|
||||
appSettings.fontNames[appSettings.rasterization] = name;
|
||||
appSettings.handleFontChanged();
|
||||
}
|
||||
Label{ text: qsTr("Scaling") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: fontScalingChanger
|
||||
onValueChanged: if(enabled) appSettings.fontScaling = value
|
||||
stepSize: 0.05
|
||||
enabled: false // Another trick to fix initial bad behavior.
|
||||
Component.onCompleted: {
|
||||
minimumValue = appSettings.minimumFontScaling;
|
||||
maximumValue = appSettings.maximumFontScaling;
|
||||
value = appSettings.fontScaling;
|
||||
enabled = true;
|
||||
}
|
||||
Connections{
|
||||
target: appSettings
|
||||
onFontScalingChanged: fontScalingChanger.value = appSettings.fontScaling;
|
||||
}
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(fontScalingChanger.value * 100) + "%"
|
||||
}
|
||||
function updateIndex(){
|
||||
var name = appSettings.fontNames[appSettings.rasterization];
|
||||
var index = appSettings.getIndexByName(name);
|
||||
if (index !== undefined)
|
||||
currentIndex = index;
|
||||
}
|
||||
Label{ text: qsTr("Font Width") }
|
||||
RowLayout{
|
||||
Connections{
|
||||
target: appSettings
|
||||
onTerminalFontChanged: fontChanger.updateIndex();
|
||||
}
|
||||
Component.onCompleted: updateIndex();
|
||||
}
|
||||
Label{ text: qsTr("Scaling") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: widthChanger
|
||||
onValueChanged: appSettings.fontWidth = value;
|
||||
value: appSettings.fontWidth
|
||||
stepSize: 0.05
|
||||
Component.onCompleted: {
|
||||
// This is needed to avoid unnecessary chnaged events.
|
||||
minimumValue = 0.5;
|
||||
maximumValue = 1.5;
|
||||
}
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(widthChanger.value * 100) + "%"
|
||||
}
|
||||
id: fontScalingChanger
|
||||
onValueChanged: appSettings.fontScaling = value
|
||||
value: appSettings.fontScaling
|
||||
stepSize: 0.05
|
||||
from: appSettings.minimumFontScaling;
|
||||
to: appSettings.maximumFontScaling;
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(fontScalingChanger.value * 100) + "%"
|
||||
}
|
||||
}
|
||||
Label{ text: qsTr("Font Width") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: widthChanger
|
||||
onValueChanged: appSettings.fontWidth = value;
|
||||
value: appSettings.fontWidth
|
||||
stepSize: 0.05
|
||||
from: 0.5
|
||||
to: 1.5
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(widthChanger.value * 100) + "%"
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Cursor")
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: blinkingCursor
|
||||
text: qsTr("Blinking Cursor")
|
||||
checked: appSettings.blinkingCursor
|
||||
onCheckedChanged: appSettings.blinkingCursor = checked
|
||||
}
|
||||
Binding{
|
||||
target: blinkingCursor
|
||||
property: "checked"
|
||||
value: appSettings.blinkingCursor
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Cursor")
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: blinkingCursor
|
||||
text: qsTr("Blinking Cursor")
|
||||
checked: appSettings.blinkingCursor
|
||||
onCheckedChanged: appSettings.blinkingCursor = checked
|
||||
}
|
||||
Binding{
|
||||
target: blinkingCursor
|
||||
property: "checked"
|
||||
value: appSettings.blinkingCursor
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Colors")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Colors")
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
Layout.fillWidth: true
|
||||
CheckableSlider{
|
||||
name: qsTr("Chroma Color")
|
||||
onNewValue: appSettings.chromaColor = newValue
|
||||
value: appSettings.chromaColor
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Saturation Color")
|
||||
onNewValue: appSettings.saturationColor = newValue
|
||||
value: appSettings.saturationColor
|
||||
enabled: appSettings.chromaColor !== 0
|
||||
}
|
||||
Layout.fillWidth: true
|
||||
CheckableSlider{
|
||||
name: qsTr("Chroma Color")
|
||||
onNewValue: appSettings.chromaColor = newValue
|
||||
value: appSettings.chromaColor
|
||||
}
|
||||
RowLayout{
|
||||
CheckableSlider{
|
||||
name: qsTr("Saturation Color")
|
||||
onNewValue: appSettings.saturationColor = newValue
|
||||
value: appSettings.saturationColor
|
||||
enabled: appSettings.chromaColor !== 0
|
||||
}
|
||||
}
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
ColorButton{
|
||||
name: qsTr("Font")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
ColorButton{
|
||||
name: qsTr("Font")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._fontColor = color;
|
||||
color: appSettings._fontColor
|
||||
}
|
||||
ColorButton{
|
||||
name: qsTr("Background")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._backgroundColor = color;
|
||||
color: appSettings._backgroundColor
|
||||
}
|
||||
onColorSelected: appSettings._fontColor = color;
|
||||
color: appSettings._fontColor
|
||||
}
|
||||
ColorButton{
|
||||
name: qsTr("Background")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._backgroundColor = color;
|
||||
color: appSettings._backgroundColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,46 +19,50 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
Window {
|
||||
id: settings_window
|
||||
title: qsTr("Settings")
|
||||
width: 580
|
||||
height: 400
|
||||
width: 800
|
||||
height: 600
|
||||
|
||||
property int tabmargins: 15
|
||||
|
||||
TabView{
|
||||
id: tabView
|
||||
anchors.fill: parent
|
||||
anchors.margins: 10
|
||||
SettingsGeneralTab {
|
||||
id: generalTab
|
||||
title: qsTr("General")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
TabBar {
|
||||
id: bar
|
||||
width: parent.width
|
||||
TabButton {
|
||||
text: qsTr("General")
|
||||
}
|
||||
SettingsTerminalTab {
|
||||
id: terminalTab
|
||||
title: qsTr("Terminal")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
TabButton {
|
||||
text: qsTr("Terminal")
|
||||
}
|
||||
SettingsEffectsTab {
|
||||
id: effectsTab
|
||||
title: qsTr("Effects")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
TabButton {
|
||||
text: qsTr("Effects")
|
||||
}
|
||||
SettingsAdvancedTab {
|
||||
id: performanceTab
|
||||
title: qsTr("Advanced")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
TabButton {
|
||||
text: qsTr("Advanced")
|
||||
}
|
||||
}
|
||||
|
||||
StackLayout {
|
||||
anchors {
|
||||
top: bar.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
margins: tabmargins
|
||||
}
|
||||
|
||||
currentIndex: bar.currentIndex
|
||||
|
||||
SettingsGeneralTab { }
|
||||
SettingsTerminalTab { }
|
||||
SettingsEffectsTab { }
|
||||
SettingsAdvancedTab { }
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
@ -27,8 +27,8 @@ import "Components"
|
||||
RowLayout {
|
||||
property alias value: slider.value
|
||||
property alias stepSize: slider.stepSize
|
||||
property alias minimumValue: slider.minimumValue
|
||||
property alias maximumValue: slider.maximumValue
|
||||
property alias minimumValue: slider.from
|
||||
property alias maximumValue: slider.to
|
||||
property real maxMultiplier: 100
|
||||
|
||||
id: setting_component
|
||||
|
@ -20,8 +20,9 @@
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Controls 1.1
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
import "menus"
|
||||
|
||||
ApplicationWindow{
|
||||
id: terminalWindow
|
||||
@ -37,8 +38,6 @@ ApplicationWindow{
|
||||
|
||||
// Load saved window geometry and show the window
|
||||
Component.onCompleted: {
|
||||
appSettings.handleFontChanged();
|
||||
|
||||
x = appSettings.x
|
||||
y = appSettings.y
|
||||
width = appSettings.width
|
||||
@ -55,11 +54,9 @@ ApplicationWindow{
|
||||
property bool fullscreen: appSettings.fullscreen
|
||||
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
|
||||
|
||||
//Workaround: Without __contentItem a ugly thin border is visible.
|
||||
menuBar: CRTMainMenuBar{
|
||||
menuBar: WindowMenu {
|
||||
id: mainMenu
|
||||
visible: (Qt.platform.os === "osx" || appSettings.showMenubar)
|
||||
__contentItem.visible: mainMenu.visible
|
||||
}
|
||||
|
||||
property string wintitle: appSettings.wintitle
|
||||
@ -136,7 +133,6 @@ ApplicationWindow{
|
||||
}
|
||||
TerminalContainer{
|
||||
id: terminalContainer
|
||||
y: appSettings.showMenubar ? 0 : -2 // Workaroud to hide the margin in the menubar.
|
||||
width: parent.width
|
||||
height: (parent.height + Math.abs(y))
|
||||
}
|
||||
|
72
app/qml/menus/FullContextMenu.qml
Normal file
72
app/qml/menus/FullContextMenu.qml
Normal file
@ -0,0 +1,72 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
*
|
||||
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem { action: copyAction }
|
||||
MenuItem { action: pasteAction }
|
||||
MenuItem { action: showsettingsAction }
|
||||
|
||||
MenuSeparator { }
|
||||
|
||||
Menu {
|
||||
title: qsTr("File")
|
||||
MenuItem {
|
||||
action: quitAction
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
title: qsTr("Edit")
|
||||
MenuItem {action: copyAction}
|
||||
MenuItem {action: pasteAction}
|
||||
MenuSeparator { }
|
||||
MenuItem {action: showsettingsAction}
|
||||
}
|
||||
Menu{
|
||||
title: qsTr("View")
|
||||
MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled}
|
||||
MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled}
|
||||
MenuItem {action: zoomIn}
|
||||
MenuItem {action: zoomOut}
|
||||
}
|
||||
Menu{
|
||||
id: profilesMenu
|
||||
title: qsTr("Profiles")
|
||||
Instantiator{
|
||||
model: appSettings.profilesList
|
||||
delegate: MenuItem {
|
||||
text: model.text
|
||||
onTriggered: {
|
||||
appSettings.loadProfileString(obj_string);
|
||||
appSettings.handleFontChanged();
|
||||
}
|
||||
}
|
||||
onObjectAdded: profilesMenu.insertItem(index, object)
|
||||
onObjectRemoved: profilesMenu.removeItem(object)
|
||||
}
|
||||
}
|
||||
Menu{
|
||||
title: qsTr("Help")
|
||||
MenuItem {action: showAboutAction}
|
||||
}
|
||||
}
|
28
app/qml/menus/ShortContextMenu.qml
Normal file
28
app/qml/menus/ShortContextMenu.qml
Normal file
@ -0,0 +1,28 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
*
|
||||
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem { action: copyAction }
|
||||
MenuItem { action: pasteAction }
|
||||
}
|
@ -1,35 +1,51 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
*
|
||||
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
MenuBar {
|
||||
id: defaultMenuBar
|
||||
property bool visible: true
|
||||
visible: appSettings.showMenubar
|
||||
|
||||
Menu {
|
||||
title: qsTr("File")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: quitAction}
|
||||
}
|
||||
Menu {
|
||||
title: qsTr("Edit")
|
||||
visible: defaultMenuBar.visible && appSettings.showMenubar
|
||||
MenuItem {action: copyAction}
|
||||
MenuItem {action: pasteAction}
|
||||
MenuSeparator{visible: Qt.platform.os !== "osx"}
|
||||
MenuSeparator { }
|
||||
MenuItem {action: showsettingsAction}
|
||||
}
|
||||
Menu{
|
||||
title: qsTr("View")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled}
|
||||
MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled}
|
||||
MenuSeparator{visible: showMenubarAction.enabled}
|
||||
MenuItem {action: zoomIn}
|
||||
MenuItem {action: zoomOut}
|
||||
}
|
||||
Menu{
|
||||
id: profilesMenu
|
||||
title: qsTr("Profiles")
|
||||
visible: defaultMenuBar.visible
|
||||
Instantiator{
|
||||
model: appSettings.profilesList
|
||||
delegate: MenuItem {
|
||||
@ -45,7 +61,6 @@ MenuBar {
|
||||
}
|
||||
Menu{
|
||||
title: qsTr("Help")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: showAboutAction}
|
||||
}
|
||||
}
|
@ -12,7 +12,6 @@
|
||||
<file>TimeManager.qml</file>
|
||||
<file>SimpleSlider.qml</file>
|
||||
<file>ColorButton.qml</file>
|
||||
<file>Glossy.qml</file>
|
||||
<file>AboutDialog.qml</file>
|
||||
<file>InsertNameDialog.qml</file>
|
||||
<file>SettingsEffectsTab.qml</file>
|
||||
@ -22,7 +21,6 @@
|
||||
<file>fonts/1977-apple2/PrintChar21.ttf</file>
|
||||
<file>fonts/1971-ibm-3278/3270Medium.ttf</file>
|
||||
<file>Storage.qml</file>
|
||||
<file>CRTMainMenuBar.qml</file>
|
||||
<file>SettingsAdvancedTab.qml</file>
|
||||
<file>TerminalContainer.qml</file>
|
||||
<file>images/crt256.png</file>
|
||||
@ -44,5 +42,8 @@
|
||||
<file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
|
||||
<file>NewTerminalFrame.qml</file>
|
||||
<file>SlowBurnIn.qml</file>
|
||||
<file>menus/WindowMenu.qml</file>
|
||||
<file>menus/FullContextMenu.qml</file>
|
||||
<file>menus/ShortContextMenu.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 59f967d5e1f6e9ce8e1632d9405422b071d93d30
|
||||
Subproject commit 5c47d1f49455394226e0e595f79c148f0c098006
|
Loading…
x
Reference in New Issue
Block a user