Compare commits
13 Commits
fix-qml-st
...
adammathes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7e3dfed00 | ||
|
|
aa82250232 | ||
|
|
88f59d2016 | ||
|
|
8021ff4256 | ||
|
|
32eab18da9 | ||
|
|
52140c4c45 | ||
|
|
10fd2a11ee | ||
|
|
749ea88909 | ||
|
|
3f0653106e | ||
|
|
9954fde6f1 | ||
|
|
3ec46ea833 | ||
|
|
d59ac20e38 | ||
|
|
7ce6571e1f |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -18,7 +18,6 @@
|
||||
*.pro.user.*
|
||||
*.moc
|
||||
moc_*.cpp
|
||||
moc_*.h
|
||||
qrc_*.cpp
|
||||
ui_*.h
|
||||
Makefile*
|
||||
|
||||
47
README.md
47
README.md
@@ -12,8 +12,6 @@ It uses the QML port of qtermwidget (Konsole) developed by me: https://github.co
|
||||
|
||||
This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher.
|
||||
|
||||
Settings such as colors, fonts, and effects can be accessed via context menu.
|
||||
|
||||
## Screenshots
|
||||

|
||||

|
||||
@@ -28,13 +26,13 @@ Just grab the latest AppImage from the release page and make it executable and r
|
||||
chmod a+x Cool-Retro-Term-1.1.1-x86_64.AppImage
|
||||
./Cool-Retro-Term-1.1.1-x86_64.AppImage
|
||||
|
||||
**Fedora** has the `cool-retro-term` in the official repositories. All you have to do is `sudo dnf install cool-retro-term`.
|
||||
**Fedora** has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
|
||||
|
||||
Users of **openSUSE** can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
|
||||
|
||||
**Arch** users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
|
||||
|
||||
trizen -S aur/cool-retro-term-git
|
||||
yaourt -S aur/cool-retro-term-git
|
||||
|
||||
or use:
|
||||
|
||||
@@ -42,6 +40,17 @@ or use:
|
||||
|
||||
to install precompiled from community repository.
|
||||
|
||||
**Gentoo** users can now install the third release "1.1.0" from a 3rd-party repository preferably via layman:
|
||||
|
||||
USE="git" emerge app-portage/layman
|
||||
wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
|
||||
layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
|
||||
ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.1.0::gerczei
|
||||
|
||||
The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available.
|
||||
|
||||
A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice!
|
||||
|
||||
Users of **Ubuntu 14.04 LTS (Trusty) up to 15.10 (Wily)** can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb).
|
||||
|
||||
**Ubuntu 17.10** can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
|
||||
@@ -51,23 +60,7 @@ Users of **Ubuntu 14.04 LTS (Trusty) up to 15.10 (Wily)** can use [this PPA](htt
|
||||
eopkg it cool-retro-term
|
||||
```
|
||||
|
||||
**macOS** users can grab the latest dmg from the [release page](https://github.com/Swordfish90/cool-retro-term/releases) or install via Homebrew:
|
||||
```
|
||||
brew cask install cool-retro-term
|
||||
```
|
||||
|
||||
**FreeBSD** users can install cool-retro-term with `pkg`:
|
||||
|
||||
pkg install cool-retro-term
|
||||
|
||||
## Build instructions (FreeBSD)
|
||||
|
||||
Grab a copy of [the FreeBSD Ports Collection](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html), modify [`/usr/ports/x11/cool-retro-term/Makefile`](https://svnweb.freebsd.org/ports/head/x11/cool-retro-term/Makefile?view=markup) as you like, and then run `make install` to build and install the emulator:
|
||||
|
||||
```
|
||||
cd /usr/ports/x11/cool-retro-term
|
||||
make install
|
||||
```
|
||||
**macOS** users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
|
||||
|
||||
## Build instructions (Linux)
|
||||
|
||||
@@ -102,12 +95,6 @@ Make sure to install these first.
|
||||
|
||||
---
|
||||
|
||||
**snapcraft (most of distros)**
|
||||
|
||||
sudo snap install cool-retro-term --classic
|
||||
|
||||
---
|
||||
|
||||
**Debian Jessie and above**
|
||||
|
||||
sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel
|
||||
@@ -199,12 +186,6 @@ cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
|
||||
open cool-retro-term.app
|
||||
```
|
||||
|
||||
**Homebrew**
|
||||
|
||||
```sh
|
||||
brew cask install cool-retro-term
|
||||
```
|
||||
|
||||
## Donations
|
||||
I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted).
|
||||
|
||||
|
||||
48
app/main.cpp
48
app/main.cpp
@@ -42,28 +42,6 @@ int main(int argc, char *argv[])
|
||||
setenv("LC_CTYPE", "UTF-8", 1);
|
||||
#endif
|
||||
|
||||
if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) {
|
||||
QTextStream cout(stdout, QIODevice::WriteOnly);
|
||||
cout << "Usage: " << argv[0] << " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]" << endl;
|
||||
cout << " --default-settings Run cool-retro-term with the default settings" << endl;
|
||||
cout << " --workdir <dir> Change working directory to 'dir'" << endl;
|
||||
cout << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option." << endl;
|
||||
cout << " -T <title> Set window title to 'title'." << endl;
|
||||
cout << " --fullscreen Run cool-retro-term in fullscreen." << endl;
|
||||
cout << " -p|--profile <prof> Run cool-retro-term with the given profile." << endl;
|
||||
cout << " -h|--help Print this help." << endl;
|
||||
cout << " --verbose Print additional information such as profiles and settings." << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
QString appVersion("1.1.1");
|
||||
|
||||
if (argc>1 && (!strcmp(argv[1],"-v") || !strcmp(argv[1],"--version"))) {
|
||||
QTextStream cout(stdout, QIODevice::WriteOnly);
|
||||
cout << "cool-retro-term " << appVersion << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
QApplication app(argc, argv);
|
||||
// set application attributes
|
||||
// Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293
|
||||
@@ -79,11 +57,29 @@ 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();
|
||||
if (args.contains("-h") || args.contains("--help")) {
|
||||
// BUG: This usage help text goes to stderr, should go to stdout.
|
||||
// BUG: First line of output is surrounded by double quotes.
|
||||
qDebug() << "Usage: " + args.at(0) + " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]";
|
||||
qDebug() << " --default-settings Run cool-retro-term with the default settings";
|
||||
qDebug() << " --workdir <dir> Change working directory to 'dir'";
|
||||
qDebug() << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option.";
|
||||
qDebug() << " -T <title> Set window title to 'title'.";
|
||||
qDebug() << " --fullscreen Run cool-retro-term in fullscreen.";
|
||||
qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile.";
|
||||
qDebug() << " -h|--help Print this help.";
|
||||
qDebug() << " --verbose Print additional information such as profiles and settings.";
|
||||
return 0;
|
||||
}
|
||||
|
||||
QString appVersion("1.1.1");
|
||||
|
||||
if (args.contains("-v") || args.contains("--version")) {
|
||||
qDebug() << ("cool-retro-term " + appVersion).toStdString().c_str();
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Manage default command
|
||||
QStringList cmdList;
|
||||
@@ -109,7 +105,7 @@ int main(int argc, char *argv[])
|
||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
|
||||
engine.setImportPathList(importPathList);
|
||||
|
||||
engine.load(QUrl(QStringLiteral ("qrc:/main.qml")));
|
||||
engine.load(QUrl(QStringLiteral ("qrc:/root.qml")));
|
||||
|
||||
if (engine.rootObjects().isEmpty()) {
|
||||
qDebug() << "Cannot load QML interface";
|
||||
|
||||
@@ -1,24 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* 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.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Window 2.0
|
||||
|
||||
@@ -37,10 +18,7 @@ Window {
|
||||
Text {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: "cool-retro-term"
|
||||
font {
|
||||
bold: true
|
||||
pointSize: 18
|
||||
}
|
||||
font {bold: true; pointSize: 18}
|
||||
}
|
||||
Loader{
|
||||
id: mainContent
|
||||
@@ -63,7 +41,7 @@ Window {
|
||||
}
|
||||
}
|
||||
]
|
||||
Component.onCompleted: mainContent.state = "Default"
|
||||
Component.onCompleted: mainContent.state = "Default";
|
||||
}
|
||||
Item{
|
||||
Layout.fillWidth: true
|
||||
@@ -72,14 +50,13 @@ Window {
|
||||
anchors.left: parent.left
|
||||
text: qsTr("License")
|
||||
onClicked: {
|
||||
mainContent.state == "Default" ? mainContent.state
|
||||
= "License" : mainContent.state = "Default"
|
||||
mainContent.state == "Default" ? mainContent.state = "License" : mainContent.state = "Default"
|
||||
}
|
||||
}
|
||||
Button{
|
||||
anchors.right: parent.right
|
||||
text: qsTr("Close")
|
||||
onClicked: dialogwindow.close()
|
||||
onClicked: dialogwindow.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,34 +77,33 @@ Window {
|
||||
Text{
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: appSettings.version + "\n" + qsTr(
|
||||
"Author: ") + "Filippo Scognamiglio\n" + qsTr(
|
||||
"Email: ") + "flscogna@gmail.com\n" + qsTr(
|
||||
"Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
|
||||
text: appSettings.version + "\n" +
|
||||
qsTr("Author: ") + "Filippo Scognamiglio\n" +
|
||||
qsTr("Email: ") + "flscogna@gmail.com\n" +
|
||||
qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
Component{
|
||||
id: licenseComponent
|
||||
ScrollView {
|
||||
anchors.fill: parent
|
||||
clip: true
|
||||
TextArea{
|
||||
anchors.fill: parent
|
||||
readOnly: true
|
||||
wrapMode: TextEdit.Wrap
|
||||
text: "Copyright (c) 2013-2021 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" +
|
||||
"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/>."
|
||||
}
|
||||
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" +
|
||||
|
||||
"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/>."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,8 +17,9 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 1.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
@@ -27,6 +28,7 @@ QtObject {
|
||||
readonly property int profileVersion: 2
|
||||
|
||||
// STATIC CONSTANTS ////////////////////////////////////////////////////////
|
||||
|
||||
readonly property real screenCurvatureSize: 0.4
|
||||
readonly property real minimumFontScaling: 0.25
|
||||
readonly property real maximumFontScaling: 2.50
|
||||
@@ -35,6 +37,7 @@ QtObject {
|
||||
readonly property real maxBurnInFadeTime: 1600
|
||||
|
||||
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
||||
|
||||
property int x: 100
|
||||
property int y: 100
|
||||
property int width: 1024
|
||||
@@ -56,11 +59,10 @@ QtObject {
|
||||
property real burnInQuality: 0.5
|
||||
property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true
|
||||
|
||||
property bool blinkingCursor: false
|
||||
|
||||
onWindowScalingChanged: handleFontChanged()
|
||||
onWindowScalingChanged: handleFontChanged();
|
||||
|
||||
// PROFILE SETTINGS ///////////////////////////////////////////////////////
|
||||
|
||||
property real windowOpacity: 1.0
|
||||
property real ambientLight: 0.2
|
||||
property real contrast: 0.80
|
||||
@@ -71,16 +73,9 @@ QtObject {
|
||||
|
||||
property string _backgroundColor: "#000000"
|
||||
property string _fontColor: "#ff8100"
|
||||
property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"),
|
||||
Utils.strToColor(_fontColor),
|
||||
saturationColor * 0.5)
|
||||
property color fontColor: Utils.mix(Utils.strToColor(saturatedColor),
|
||||
Utils.strToColor(_backgroundColor),
|
||||
0.7 + (contrast * 0.3))
|
||||
property color backgroundColor: Utils.mix(Utils.strToColor(
|
||||
_backgroundColor),
|
||||
Utils.strToColor(saturatedColor),
|
||||
0.7 + (contrast * 0.3))
|
||||
property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"), Utils.strToColor(_fontColor), saturationColor * 0.5)
|
||||
property color fontColor: Utils.mix(Utils.strToColor(saturatedColor), Utils.strToColor(_backgroundColor), 0.7 + (contrast * 0.3))
|
||||
property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
|
||||
|
||||
property real staticNoise: 0.12
|
||||
property real screenCurvature: 0.3
|
||||
@@ -108,6 +103,7 @@ QtObject {
|
||||
property int rasterization: no_rasterization
|
||||
|
||||
// FONTS //////////////////////////////////////////////////////////////////
|
||||
|
||||
readonly property real baseFontScaling: 0.75
|
||||
property real fontScaling: 1.0
|
||||
property real totalFontScaling: baseFontScaling * fontScaling
|
||||
@@ -121,31 +117,16 @@ QtObject {
|
||||
|
||||
signal terminalFontChanged(string fontFamily, int pixelSize, int lineSpacing, real screenScaling, real fontWidth)
|
||||
|
||||
signal initializedSettings
|
||||
signal initializedSettings()
|
||||
|
||||
property Loader fontManager: Loader{
|
||||
states: [
|
||||
State {
|
||||
when: rasterization == no_rasterization
|
||||
PropertyChanges {
|
||||
target: fontManager
|
||||
source: "Fonts.qml"
|
||||
}
|
||||
},
|
||||
State {
|
||||
when: rasterization == scanline_rasterization
|
||||
PropertyChanges {
|
||||
target: fontManager
|
||||
source: "FontScanlines.qml"
|
||||
}
|
||||
},
|
||||
State {
|
||||
when: rasterization == pixel_rasterization
|
||||
PropertyChanges {
|
||||
target: fontManager
|
||||
source: "FontPixels.qml"
|
||||
}
|
||||
}
|
||||
State { when: rasterization == no_rasterization
|
||||
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
|
||||
State { when: rasterization == scanline_rasterization
|
||||
PropertyChanges {target: fontManager; source: "FontScanlines.qml" } },
|
||||
State { when: rasterization == pixel_rasterization;
|
||||
PropertyChanges {target: fontManager; source: "FontPixels.qml" } }
|
||||
]
|
||||
|
||||
onLoaded: handleFontChanged()
|
||||
@@ -153,158 +134,150 @@ QtObject {
|
||||
|
||||
property FontLoader fontLoader: FontLoader { }
|
||||
|
||||
onTotalFontScalingChanged: handleFontChanged()
|
||||
onFontWidthChanged: handleFontChanged()
|
||||
onTotalFontScalingChanged: handleFontChanged();
|
||||
onFontWidthChanged: handleFontChanged();
|
||||
|
||||
function getIndexByName(name) {
|
||||
for (var i = 0; i < fontlist.count; i++) {
|
||||
var requestedName = fontlist.get(i).name
|
||||
var requestedName = fontlist.get(i).name;
|
||||
if (name === requestedName)
|
||||
return i
|
||||
return i;
|
||||
}
|
||||
return 0 // If the font is not available default to 0.
|
||||
return 0; // If the font is not available default to 0.
|
||||
}
|
||||
|
||||
function incrementScaling(){
|
||||
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling)
|
||||
handleFontChanged()
|
||||
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling);
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
function decrementScaling(){
|
||||
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling)
|
||||
handleFontChanged()
|
||||
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling);
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
function handleFontChanged(){
|
||||
if (!fontManager.item)
|
||||
return
|
||||
if (!fontManager.item) return;
|
||||
|
||||
var index = getIndexByName(fontNames[rasterization])
|
||||
if (index === undefined)
|
||||
return
|
||||
var index = getIndexByName(fontNames[rasterization]);
|
||||
if (index === undefined) return;
|
||||
|
||||
fontManager.item.selectedFontIndex = index
|
||||
fontManager.item.scaling = totalFontScaling
|
||||
fontManager.item.selectedFontIndex = index;
|
||||
fontManager.item.scaling = totalFontScaling;
|
||||
|
||||
var fontSource = fontManager.item.source
|
||||
var pixelSize = fontManager.item.pixelSize
|
||||
var lineSpacing = fontManager.item.lineSpacing
|
||||
var screenScaling = fontManager.item.screenScaling
|
||||
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth
|
||||
var fontFamily = fontManager.item.family
|
||||
var isSystemFont = fontManager.item.isSystemFont
|
||||
var fontSource = fontManager.item.source;
|
||||
var pixelSize = fontManager.item.pixelSize;
|
||||
var lineSpacing = fontManager.item.lineSpacing;
|
||||
var screenScaling = fontManager.item.screenScaling;
|
||||
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth;
|
||||
var fontFamily = fontManager.item.family;
|
||||
var isSystemFont = fontManager.item.isSystemFont;
|
||||
|
||||
lowResolutionFont = fontManager.item.lowResolutionFont
|
||||
lowResolutionFont = fontManager.item.lowResolutionFont;
|
||||
|
||||
if (!isSystemFont) {
|
||||
fontLoader.source = fontSource
|
||||
fontFamily = fontLoader.name
|
||||
fontLoader.source = fontSource;
|
||||
fontFamily = fontLoader.name;
|
||||
}
|
||||
|
||||
terminalFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling,
|
||||
fontWidth)
|
||||
terminalFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling, fontWidth);
|
||||
}
|
||||
|
||||
property Storage storage: Storage{ }
|
||||
|
||||
function stringify(obj) {
|
||||
var replacer = function(key, val) {
|
||||
return val.toFixed ? Number(val.toFixed(4)) : val
|
||||
return val.toFixed ? Number(val.toFixed(4)) : val;
|
||||
}
|
||||
return JSON.stringify(obj, replacer, 2)
|
||||
return JSON.stringify(obj, replacer, 2);
|
||||
}
|
||||
|
||||
function composeSettingsString(){
|
||||
var settings = {
|
||||
"fps": fps,
|
||||
"x": x,
|
||||
"y": y,
|
||||
"width": width,
|
||||
"height": height,
|
||||
"windowScaling": windowScaling,
|
||||
"showTerminalSize": showTerminalSize,
|
||||
"fontScaling": fontScaling,
|
||||
"fontNames": fontNames,
|
||||
"showMenubar": showMenubar,
|
||||
"bloomQuality": bloomQuality,
|
||||
"burnInQuality": burnInQuality,
|
||||
"useCustomCommand": useCustomCommand,
|
||||
"customCommand": customCommand,
|
||||
"useFastBurnIn": useFastBurnIn,
|
||||
"blinkingCursor": blinkingCursor
|
||||
fps: fps,
|
||||
x: x,
|
||||
y: y,
|
||||
width: width,
|
||||
height: height,
|
||||
windowScaling: windowScaling,
|
||||
showTerminalSize: showTerminalSize,
|
||||
fontScaling: fontScaling,
|
||||
fontNames: fontNames,
|
||||
showMenubar: showMenubar,
|
||||
bloomQuality: bloomQuality,
|
||||
burnInQuality: burnInQuality,
|
||||
useCustomCommand: useCustomCommand,
|
||||
customCommand: customCommand,
|
||||
useFastBurnIn: useFastBurnIn
|
||||
}
|
||||
return stringify(settings)
|
||||
return stringify(settings);
|
||||
}
|
||||
|
||||
function composeProfileObject(){
|
||||
var settings = {
|
||||
"backgroundColor": _backgroundColor,
|
||||
"fontColor": _fontColor,
|
||||
"flickering": flickering,
|
||||
"horizontalSync": horizontalSync,
|
||||
"staticNoise": staticNoise,
|
||||
"chromaColor": chromaColor,
|
||||
"saturationColor": saturationColor,
|
||||
"screenCurvature": screenCurvature,
|
||||
"glowingLine": glowingLine,
|
||||
"burnIn": burnIn,
|
||||
"bloom": bloom,
|
||||
"rasterization": rasterization,
|
||||
"jitter": jitter,
|
||||
"rbgShift": rbgShift,
|
||||
"brightness": brightness,
|
||||
"contrast": contrast,
|
||||
"ambientLight": ambientLight,
|
||||
"windowOpacity": windowOpacity,
|
||||
"fontName": fontNames[rasterization],
|
||||
"fontWidth": fontWidth,
|
||||
"margin": _margin
|
||||
backgroundColor: _backgroundColor,
|
||||
fontColor: _fontColor,
|
||||
flickering: flickering,
|
||||
horizontalSync: horizontalSync,
|
||||
staticNoise: staticNoise,
|
||||
chromaColor: chromaColor,
|
||||
saturationColor: saturationColor,
|
||||
screenCurvature: screenCurvature,
|
||||
glowingLine: glowingLine,
|
||||
burnIn: burnIn,
|
||||
bloom: bloom,
|
||||
rasterization: rasterization,
|
||||
jitter: jitter,
|
||||
rbgShift: rbgShift,
|
||||
brightness: brightness,
|
||||
contrast: contrast,
|
||||
ambientLight: ambientLight,
|
||||
windowOpacity: windowOpacity,
|
||||
fontName: fontNames[rasterization],
|
||||
fontWidth: fontWidth,
|
||||
margin: _margin
|
||||
}
|
||||
return settings
|
||||
return settings;
|
||||
}
|
||||
|
||||
function composeProfileString() {
|
||||
return stringify(composeProfileObject())
|
||||
return stringify(composeProfileObject());
|
||||
}
|
||||
|
||||
function loadSettings(){
|
||||
var settingsString = storage.getSetting("_CURRENT_SETTINGS")
|
||||
var profileString = storage.getSetting("_CURRENT_PROFILE")
|
||||
var settingsString = storage.getSetting("_CURRENT_SETTINGS");
|
||||
var profileString = storage.getSetting("_CURRENT_PROFILE");
|
||||
|
||||
if (!settingsString)
|
||||
return
|
||||
if (!profileString)
|
||||
return
|
||||
if(!settingsString) return;
|
||||
if(!profileString) return;
|
||||
|
||||
loadSettingsString(settingsString)
|
||||
loadProfileString(profileString)
|
||||
loadSettingsString(settingsString);
|
||||
loadProfileString(profileString);
|
||||
|
||||
if (verbose)
|
||||
console.log("Loading settings: " + settingsString + profileString)
|
||||
console.log("Loading settings: " + settingsString + profileString);
|
||||
}
|
||||
|
||||
function storeSettings(){
|
||||
var settingsString = composeSettingsString()
|
||||
var profileString = composeProfileString()
|
||||
var settingsString = composeSettingsString();
|
||||
var profileString = composeProfileString();
|
||||
|
||||
storage.setSetting("_CURRENT_SETTINGS", settingsString)
|
||||
storage.setSetting("_CURRENT_PROFILE", profileString)
|
||||
storage.setSetting("_CURRENT_SETTINGS", settingsString);
|
||||
storage.setSetting("_CURRENT_PROFILE", profileString);
|
||||
|
||||
if (verbose) {
|
||||
console.log("Storing settings: " + settingsString)
|
||||
console.log("Storing profile: " + profileString)
|
||||
console.log("Storing settings: " + settingsString);
|
||||
console.log("Storing profile: " + profileString);
|
||||
}
|
||||
}
|
||||
|
||||
function loadSettingsString(settingsString){
|
||||
var settings = JSON.parse(settingsString)
|
||||
var settings = JSON.parse(settingsString);
|
||||
|
||||
showTerminalSize = settings.showTerminalSize
|
||||
!== undefined ? settings.showTerminalSize : showTerminalSize
|
||||
showTerminalSize = settings.showTerminalSize !== undefined ? settings.showTerminalSize : showTerminalSize
|
||||
|
||||
fps = settings.fps !== undefined ? settings.fps: fps
|
||||
windowScaling = settings.windowScaling
|
||||
!== undefined ? settings.windowScaling : windowScaling
|
||||
windowScaling = settings.windowScaling !== undefined ? settings.windowScaling : windowScaling
|
||||
|
||||
x = settings.x !== undefined ? settings.x : x
|
||||
y = settings.y !== undefined ? settings.y : y
|
||||
@@ -314,119 +287,96 @@ QtObject {
|
||||
fontNames = settings.fontNames !== undefined ? settings.fontNames : fontNames
|
||||
fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling
|
||||
|
||||
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar
|
||||
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
|
||||
|
||||
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality
|
||||
burnInQuality = settings.burnInQuality
|
||||
!== undefined ? settings.burnInQuality : burnInQuality
|
||||
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality;
|
||||
burnInQuality = settings.burnInQuality !== undefined ? settings.burnInQuality : burnInQuality;
|
||||
|
||||
useCustomCommand = settings.useCustomCommand
|
||||
!== undefined ? settings.useCustomCommand : useCustomCommand
|
||||
customCommand = settings.customCommand
|
||||
!== undefined ? settings.customCommand : customCommand
|
||||
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
||||
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
||||
|
||||
useFastBurnIn = settings.useFastBurnIn
|
||||
!== undefined ? settings.useFastBurnIn : useFastBurnIn
|
||||
|
||||
blinkingCursor = settings.blinkingCursor
|
||||
!== undefined ? settings.blinkingCursor : blinkingCursor
|
||||
useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn;
|
||||
}
|
||||
|
||||
function loadProfileString(profileString){
|
||||
var settings = JSON.parse(profileString)
|
||||
var settings = JSON.parse(profileString);
|
||||
|
||||
_backgroundColor = settings.backgroundColor
|
||||
!== undefined ? settings.backgroundColor : _backgroundColor
|
||||
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor
|
||||
_backgroundColor = settings.backgroundColor !== undefined ? settings.backgroundColor : _backgroundColor;
|
||||
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor;
|
||||
|
||||
horizontalSync = settings.horizontalSync
|
||||
!== undefined ? settings.horizontalSync : horizontalSync
|
||||
flickering = settings.flickering !== undefined ? settings.flickering : flickering
|
||||
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise
|
||||
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor
|
||||
saturationColor = settings.saturationColor
|
||||
!== undefined ? settings.saturationColor : saturationColor
|
||||
screenCurvature = settings.screenCurvature
|
||||
!== undefined ? settings.screenCurvature : screenCurvature
|
||||
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine
|
||||
horizontalSync = settings.horizontalSync !== undefined ? settings.horizontalSync : horizontalSync
|
||||
flickering = settings.flickering !== undefined ? settings.flickering : flickering;
|
||||
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise;
|
||||
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor;
|
||||
saturationColor = settings.saturationColor !== undefined ? settings.saturationColor : saturationColor;
|
||||
screenCurvature = settings.screenCurvature !== undefined ? settings.screenCurvature : screenCurvature;
|
||||
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine;
|
||||
|
||||
burnIn = settings.burnIn !== undefined ? settings.burnIn : burnIn
|
||||
bloom = settings.bloom !== undefined ? settings.bloom : bloom
|
||||
|
||||
rasterization = settings.rasterization
|
||||
!== undefined ? settings.rasterization : rasterization
|
||||
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
|
||||
|
||||
jitter = settings.jitter !== undefined ? settings.jitter : jitter
|
||||
jitter = settings.jitter !== undefined ? settings.jitter : jitter;
|
||||
|
||||
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift
|
||||
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift;
|
||||
|
||||
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight
|
||||
contrast = settings.contrast !== undefined ? settings.contrast : contrast
|
||||
brightness = settings.brightness !== undefined ? settings.brightness : brightness
|
||||
windowOpacity = settings.windowOpacity
|
||||
!== undefined ? settings.windowOpacity : windowOpacity
|
||||
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight;
|
||||
contrast = settings.contrast !== undefined ? settings.contrast : contrast;
|
||||
brightness = settings.brightness !== undefined ? settings.brightness : brightness;
|
||||
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
|
||||
|
||||
fontNames[rasterization] = settings.fontName
|
||||
!== undefined ? settings.fontName : fontNames[rasterization]
|
||||
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth
|
||||
fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
|
||||
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
|
||||
|
||||
_margin = settings.margin !== undefined ? settings.margin : _margin
|
||||
_margin = settings.margin !== undefined ? settings.margin : _margin;
|
||||
|
||||
handleFontChanged()
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
function storeCustomProfiles(){
|
||||
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString())
|
||||
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString());
|
||||
}
|
||||
|
||||
function loadCustomProfiles(){
|
||||
var customProfileString = storage.getSetting("_CUSTOM_PROFILES")
|
||||
if (customProfileString === undefined)
|
||||
customProfileString = "[]"
|
||||
loadCustomProfilesString(customProfileString)
|
||||
var customProfileString = storage.getSetting("_CUSTOM_PROFILES");
|
||||
if(customProfileString === undefined) customProfileString = "[]";
|
||||
loadCustomProfilesString(customProfileString);
|
||||
}
|
||||
|
||||
function loadCustomProfilesString(customProfilesString){
|
||||
var customProfiles = JSON.parse(customProfilesString)
|
||||
var customProfiles = JSON.parse(customProfilesString);
|
||||
for (var i=0; i<customProfiles.length; i++) {
|
||||
var profile = customProfiles[i]
|
||||
var profile = customProfiles[i];
|
||||
|
||||
if (verbose)
|
||||
console.log("Loading custom profile: " + stringify(profile))
|
||||
console.log("Loading custom profile: " + stringify(profile));
|
||||
|
||||
profilesList.append(profile)
|
||||
profilesList.append(profile);
|
||||
}
|
||||
}
|
||||
|
||||
function composeCustomProfilesString(){
|
||||
var customProfiles = []
|
||||
for(var i=0; i<profilesList.count; i++){
|
||||
var profile = profilesList.get(i)
|
||||
if (profile.builtin)
|
||||
continue
|
||||
customProfiles.push({
|
||||
"text": profile.text,
|
||||
"obj_string": profile.obj_string,
|
||||
"builtin": false
|
||||
})
|
||||
var profile = profilesList.get(i);
|
||||
if(profile.builtin) continue;
|
||||
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
|
||||
}
|
||||
return stringify(customProfiles)
|
||||
return stringify(customProfiles);
|
||||
}
|
||||
|
||||
function loadProfile(index){
|
||||
var profile = profilesList.get(index)
|
||||
loadProfileString(profile.obj_string)
|
||||
var profile = profilesList.get(index);
|
||||
loadProfileString(profile.obj_string);
|
||||
}
|
||||
|
||||
function appendCustomProfile(name, profileString) {
|
||||
profilesList.append({
|
||||
"text": name,
|
||||
"obj_string": profileString,
|
||||
"builtin": false
|
||||
})
|
||||
profilesList.append({text: name, obj_string: profileString, builtin: false});
|
||||
}
|
||||
|
||||
// PROFILES ///////////////////////////////////////////////////////////////
|
||||
|
||||
property ListModel profilesList: ListModel{
|
||||
ListElement{
|
||||
text: "Default Amber"
|
||||
@@ -457,7 +407,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Monochrome Green"
|
||||
obj_string: '{
|
||||
obj_string: '
|
||||
{
|
||||
"ambientLight": 0.2,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.5538,
|
||||
@@ -484,7 +435,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Green Scanlines"
|
||||
obj_string: '{
|
||||
obj_string: '
|
||||
{
|
||||
"ambientLight": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.6,
|
||||
@@ -511,7 +463,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Default Pixelated"
|
||||
obj_string: '{
|
||||
obj_string: '
|
||||
{
|
||||
"ambientLight": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.4045,
|
||||
@@ -538,7 +491,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Apple ]["
|
||||
obj_string: '{
|
||||
obj_string:
|
||||
'{
|
||||
"ambientLight": 0.3038,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.5,
|
||||
@@ -565,7 +519,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Vintage"
|
||||
obj_string: '{
|
||||
obj_string: '
|
||||
{
|
||||
"ambientLight": 0.5,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.4983,
|
||||
@@ -592,7 +547,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "IBM Dos"
|
||||
obj_string: '{
|
||||
obj_string:
|
||||
'{
|
||||
"ambientLight": 0.151,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.2969,
|
||||
@@ -619,7 +575,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "IBM 3278"
|
||||
obj_string: '{
|
||||
obj_string:
|
||||
'{
|
||||
"ambientLight": 0.1,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.2969,
|
||||
@@ -646,7 +603,8 @@ QtObject {
|
||||
}
|
||||
ListElement{
|
||||
text: "Futuristic"
|
||||
obj_string: '{
|
||||
obj_string:
|
||||
'{
|
||||
"ambientLight": 0,
|
||||
"backgroundColor": "#000000",
|
||||
"bloom": 0.5017,
|
||||
@@ -676,51 +634,51 @@ QtObject {
|
||||
function getProfileIndexByName(name) {
|
||||
for (var i = 0; i < profilesList.count; i++) {
|
||||
if(profilesList.get(i).text === name)
|
||||
return i
|
||||
return i;
|
||||
}
|
||||
return -1
|
||||
return -1;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
// Manage the arguments from the QML side.
|
||||
var args = Qt.application.arguments
|
||||
var args = Qt.application.arguments;
|
||||
if (args.indexOf("--verbose") !== -1) {
|
||||
verbose = true
|
||||
verbose = true;
|
||||
}
|
||||
if (args.indexOf("--default-settings") === -1) {
|
||||
loadSettings()
|
||||
loadSettings();
|
||||
}
|
||||
|
||||
loadCustomProfiles()
|
||||
loadCustomProfiles();
|
||||
|
||||
var profileArgPosition = args.indexOf("--profile")
|
||||
var profileArgPosition = args.indexOf("--profile");
|
||||
if (profileArgPosition !== -1) {
|
||||
var profileIndex = getProfileIndexByName(
|
||||
args[profileArgPosition + 1])
|
||||
var profileIndex = getProfileIndexByName(args[profileArgPosition + 1]);
|
||||
if (profileIndex !== -1)
|
||||
loadProfile(profileIndex)
|
||||
loadProfile(profileIndex);
|
||||
else
|
||||
console.log("Warning: selected profile is not valid; ignoring it")
|
||||
console.log("Warning: selected profile is not valid; ignoring it");
|
||||
}
|
||||
|
||||
if (args.indexOf("--fullscreen") !== -1) {
|
||||
fullscreen = true
|
||||
showMenubar = false
|
||||
fullscreen = true;
|
||||
showMenubar = false;
|
||||
}
|
||||
|
||||
if (args.indexOf("-T") !== -1) {
|
||||
wintitle = args[args.indexOf("-T") + 1]
|
||||
}
|
||||
|
||||
initializedSettings()
|
||||
initializedSettings();
|
||||
}
|
||||
Component.onDestruction: {
|
||||
storeSettings()
|
||||
storeCustomProfiles()
|
||||
storeSettings();
|
||||
storeCustomProfiles();
|
||||
// storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
|
||||
}
|
||||
|
||||
// VARS ///////////////////////////////////////////////////////////////////
|
||||
|
||||
property Label _sampleLabel: Label {
|
||||
text: "100%"
|
||||
}
|
||||
|
||||
@@ -1,22 +1,3 @@
|
||||
/*******************************************************************************
|
||||
* 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.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
57
app/qml/CRTMainMenuBar.qml
Normal file
57
app/qml/CRTMainMenuBar.qml
Normal file
@@ -0,0 +1,57 @@
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
|
||||
MenuBar {
|
||||
id: defaultMenuBar
|
||||
property bool visible: true
|
||||
Menu {
|
||||
title: qsTr("File")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: quitAction}
|
||||
}
|
||||
Menu {
|
||||
title: qsTr("Terminal")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: newAction}
|
||||
MenuItem {action: closeAction}
|
||||
}
|
||||
Menu {
|
||||
title: qsTr("Edit")
|
||||
visible: defaultMenuBar.visible && appSettings.showMenubar
|
||||
MenuItem {action: copyAction}
|
||||
MenuItem {action: pasteAction}
|
||||
MenuSeparator{visible: Qt.platform.os !== "osx"}
|
||||
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 {
|
||||
text: model.text
|
||||
onTriggered: {
|
||||
appSettings.loadProfileString(obj_string);
|
||||
appSettings.handleFontChanged();
|
||||
}
|
||||
}
|
||||
onObjectAdded: profilesMenu.insertItem(index, object)
|
||||
onObjectRemoved: profilesMenu.removeItem(object)
|
||||
}
|
||||
}
|
||||
Menu{
|
||||
title: qsTr("Help")
|
||||
visible: defaultMenuBar.visible
|
||||
MenuItem {action: showAboutAction}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,8 +17,9 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
@@ -27,19 +28,19 @@ RowLayout {
|
||||
property alias name: check.text
|
||||
|
||||
property double value
|
||||
property alias min_value: slider.from
|
||||
property alias max_value: slider.to
|
||||
property alias min_value: slider.minimumValue
|
||||
property alias max_value: slider.maximumValue
|
||||
property alias stepSize: slider.stepSize
|
||||
|
||||
signal newValue(real newValue)
|
||||
signal newValue(real newValue);
|
||||
|
||||
id: setting_component
|
||||
Layout.fillWidth: true
|
||||
|
||||
onValueChanged: {
|
||||
check.checked = !(value == 0)
|
||||
check.checked = !(value == 0);
|
||||
if(check.checked)
|
||||
slider.value = value
|
||||
slider.value = value;
|
||||
}
|
||||
|
||||
CheckBox{
|
||||
@@ -47,13 +48,13 @@ RowLayout {
|
||||
implicitWidth: 160
|
||||
onClicked: {
|
||||
if(!checked){
|
||||
checked = false
|
||||
slider.enabled = false
|
||||
newValue(0)
|
||||
checked = false;
|
||||
slider.enabled = false;
|
||||
newValue(0);
|
||||
} else {
|
||||
checked = true
|
||||
newValue(slider.value)
|
||||
slider.enabled = true
|
||||
checked = true;
|
||||
newValue(slider.value);
|
||||
slider.enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,11 +63,11 @@ RowLayout {
|
||||
stepSize: parent.stepSize
|
||||
Layout.fillWidth: true
|
||||
onValueChanged: {
|
||||
newValue(value)
|
||||
newValue(value);
|
||||
}
|
||||
}
|
||||
SizedLabel {
|
||||
text: Math.round(
|
||||
((value - min_value) / (max_value - min_value)) * 100) + "%"
|
||||
Layout.fillHeight: true
|
||||
text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,6 +17,7 @@
|
||||
* 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.Dialogs 1.1
|
||||
|
||||
@@ -34,16 +35,15 @@ Item {
|
||||
visible: false
|
||||
|
||||
//This is a workaround to a Qt 5.2 bug.
|
||||
onColorChanged: if (Qt.platform.os !== "osx")
|
||||
colorSelected(color)
|
||||
onAccepted: if (Qt.platform.os === "osx")
|
||||
colorSelected(color)
|
||||
onColorChanged: if (Qt.platform.os !== "osx") colorSelected(color)
|
||||
onAccepted: if (Qt.platform.os === "osx") colorSelected(color)
|
||||
}
|
||||
Rectangle{
|
||||
anchors.fill: parent
|
||||
radius: 10
|
||||
color: rootItem.color
|
||||
|
||||
border.color: "black"
|
||||
Glossy {}
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
anchors.margins: parent.height * 0.25
|
||||
@@ -59,6 +59,6 @@ Item {
|
||||
}
|
||||
MouseArea{
|
||||
anchors.fill: parent
|
||||
onClicked: colorDialog.visible = true
|
||||
onClicked: colorDialog.visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -19,14 +17,19 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.0
|
||||
import QtQuick.Controls 1.0
|
||||
|
||||
// This component is simply a label with a predefined size.
|
||||
// Used to improve alignment.
|
||||
|
||||
Item {
|
||||
property alias text: textfield.text
|
||||
width: appSettings.labelWidth
|
||||
Label{
|
||||
id: textfield
|
||||
Layout.minimumWidth: appSettings.labelWidth
|
||||
width: appSettings.labelWidth
|
||||
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,6 +17,7 @@
|
||||
* 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
|
||||
|
||||
QtObject{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,6 +17,7 @@
|
||||
* 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
|
||||
|
||||
QtObject{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,6 +17,7 @@
|
||||
* 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
|
||||
|
||||
QtObject{
|
||||
@@ -26,11 +27,17 @@ QtObject {
|
||||
property var _font: fontlist.get(selectedFontIndex)
|
||||
property bool lowResolutionFont: _font.lowResolutionFont
|
||||
|
||||
property int pixelSize: lowResolutionFont ? _font.pixelSize : _font.pixelSize * scaling
|
||||
property int pixelSize: lowResolutionFont
|
||||
? _font.pixelSize
|
||||
: _font.pixelSize * scaling
|
||||
|
||||
property int lineSpacing: lowResolutionFont ? _font.lineSpacing : pixelSize * _font.lineSpacing
|
||||
property int lineSpacing: lowResolutionFont
|
||||
? _font.lineSpacing
|
||||
: pixelSize * _font.lineSpacing
|
||||
|
||||
property real screenScaling: lowResolutionFont ? _font.baseScaling * scaling : 1.0
|
||||
property real screenScaling: lowResolutionFont
|
||||
? _font.baseScaling * scaling
|
||||
: 1.0
|
||||
|
||||
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
|
||||
|
||||
@@ -45,6 +52,7 @@ QtObject {
|
||||
// High resolution fonts are instead drawn on a texture which has the
|
||||
// size of the screen, and the scaling directly controls their pixels size.
|
||||
// Those are slower to render but are not pixelated.
|
||||
|
||||
property ListModel fontlist: ListModel {
|
||||
ListElement{
|
||||
name: "TERMINUS_SCALED"
|
||||
@@ -226,7 +234,7 @@ QtObject {
|
||||
Component.onCompleted: addSystemFonts()
|
||||
|
||||
function addSystemFonts() {
|
||||
var families = monospaceSystemFonts
|
||||
var families = monospaceSystemFonts;
|
||||
for (var i = 0; i < families.length; i++) {
|
||||
if (verbose) {
|
||||
console.log("Adding system font: ", families[i])
|
||||
@@ -237,16 +245,16 @@ QtObject {
|
||||
|
||||
function convertToListElement(family) {
|
||||
return {
|
||||
"name": "System: " + family,
|
||||
"text": qsTr("System: ") + family,
|
||||
"source": "",
|
||||
"lineSpacing": 0.1,
|
||||
"pixelSize": 30,
|
||||
"fontWidth": 1.0,
|
||||
"baseScaling": 1.0,
|
||||
"lowResolutionFont": false,
|
||||
"isSystemFont": true,
|
||||
"family": family
|
||||
name: "System: " + family,
|
||||
text: qsTr("System: ") + family,
|
||||
source: "",
|
||||
lineSpacing: 0.1,
|
||||
pixelSize: 30,
|
||||
fontWidth: 1.0,
|
||||
baseScaling: 1.0,
|
||||
lowResolutionFont: false,
|
||||
isSystemFont: true,
|
||||
family: family
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
21
app/qml/Glossy.qml
Normal file
21
app/qml/Glossy.qml
Normal file
@@ -0,0 +1,21 @@
|
||||
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" }
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,9 +17,10 @@
|
||||
* 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.Window 2.0
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
@@ -39,25 +40,23 @@ Window {
|
||||
visible: false
|
||||
|
||||
function showError(message){
|
||||
text = message
|
||||
open()
|
||||
text = message;
|
||||
open();
|
||||
}
|
||||
}
|
||||
|
||||
function validateName(name){
|
||||
var profile_list = appSettings.profilesList
|
||||
var profile_list = appSettings.profilesList;
|
||||
if (name === "")
|
||||
return 1
|
||||
return 0
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ColumnLayout{
|
||||
anchors.margins: 10
|
||||
anchors.fill: parent
|
||||
RowLayout{
|
||||
Label {
|
||||
text: qsTr("Name")
|
||||
}
|
||||
Label{text: qsTr("Name")}
|
||||
TextField{
|
||||
id: namefield
|
||||
Layout.fillWidth: true
|
||||
@@ -72,15 +71,14 @@ Window {
|
||||
text: qsTr("OK")
|
||||
onClicked: clickAction()
|
||||
function clickAction(){
|
||||
var name = namefield.text
|
||||
var name = namefield.text;
|
||||
switch(validateName(name)){
|
||||
case 1:
|
||||
errorDialog.showError(
|
||||
qsTr("The name you inserted is empty. Please choose a different one."))
|
||||
break
|
||||
errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one."));
|
||||
break;
|
||||
default:
|
||||
nameSelected(name)
|
||||
close()
|
||||
nameSelected(name);
|
||||
close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,3 @@
|
||||
/*******************************************************************************
|
||||
* 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.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -19,11 +19,10 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls 1.1
|
||||
|
||||
import QMLTermWidget 1.0
|
||||
|
||||
import "menus"
|
||||
import "utils.js" as Utils
|
||||
|
||||
Item{
|
||||
@@ -95,7 +94,6 @@ Item{
|
||||
smooth: !appSettings.lowResolutionFont
|
||||
enableBold: false
|
||||
fullCursorHeight: true
|
||||
blinkingCursor: appSettings.blinkingCursor
|
||||
|
||||
session: QMLTermSession {
|
||||
id: ksession
|
||||
@@ -157,23 +155,31 @@ Item{
|
||||
Component.onCompleted: {
|
||||
appSettings.terminalFontChanged.connect(handleFontChanged);
|
||||
appSettings.initializedSettings.connect(startSession);
|
||||
appSettings.handleFontChanged()
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: shortContextMenu
|
||||
ShortContextMenu { }
|
||||
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 }
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: fullContextMenu
|
||||
FullContextMenu { }
|
||||
id: osxContextMenu
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem{action: copyAction}
|
||||
MenuItem{action: pasteAction}
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: menuLoader
|
||||
sourceComponent: (Qt.platform.os === "osx" || appSettings.showMenubar ? shortContextMenu : fullContextMenu)
|
||||
sourceComponent: (Qt.platform.os === "osx" ? osxContextMenu : linuxContextMenu)
|
||||
}
|
||||
property alias contextmenu: menuLoader.item
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,18 +17,20 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQml 2.0
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
|
||||
GroupBox{
|
||||
Layout.fillWidth: true
|
||||
title: qsTr("Command")
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
@@ -52,10 +54,9 @@ ColumnLayout {
|
||||
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text
|
||||
appSettings.customCommand = text;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(
|
||||
saveSetting)
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,95 +66,73 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 4
|
||||
rows: 2
|
||||
columns: 3
|
||||
|
||||
Label {
|
||||
text: qsTr("Effects FPS")
|
||||
}
|
||||
Label{text: qsTr("Effects FPS")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
id: fpsSlider
|
||||
onValueChanged: {
|
||||
if (enabled) {
|
||||
appSettings.fps = value !== 60 ? value + 1 : 0
|
||||
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
|
||||
minimumValue = 0;
|
||||
maximumValue = 60;
|
||||
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Texture Quality")
|
||||
}
|
||||
SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
|
||||
Label{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: txtslider
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
onValueChanged: if (enabled)
|
||||
appSettings.windowScaling = value
|
||||
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
|
||||
minimumValue = 0.25 //Without this value gets set to 0.5
|
||||
value = appSettings.windowScaling;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: Math.round(txtslider.value * 100) + "%"
|
||||
}
|
||||
SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
|
||||
|
||||
Label {
|
||||
text: qsTr("Bloom Quality")
|
||||
}
|
||||
Label{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
id: bloomSlider
|
||||
onValueChanged: if (enabled)
|
||||
appSettings.bloomQuality = value
|
||||
onValueChanged: if (enabled) appSettings.bloomQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0.25
|
||||
value = appSettings.bloomQuality
|
||||
enabled = true
|
||||
minimumValue = 0.25
|
||||
value = appSettings.bloomQuality;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: Math.round(bloomSlider.value * 100) + "%"
|
||||
}
|
||||
SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
|
||||
|
||||
Label {
|
||||
text: qsTr("BurnIn Quality")
|
||||
}
|
||||
Label{text: qsTr("BurnIn Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: burnInSlider
|
||||
Layout.columnSpan: 2
|
||||
onValueChanged: if (enabled)
|
||||
appSettings.burnInQuality = value
|
||||
onValueChanged: if (enabled) appSettings.burnInQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
from = 0.25
|
||||
value = appSettings.burnInQuality
|
||||
enabled = true
|
||||
minimumValue = 0.25
|
||||
value = appSettings.burnInQuality;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: Math.round(burnInSlider.value * 100) + "%"
|
||||
}
|
||||
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||
CheckBox{
|
||||
Layout.columnSpan: 2
|
||||
text: qsTr("Burnin optimization (Might display timing artifacts)")
|
||||
@@ -163,3 +142,4 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,11 +17,14 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
spacing: 2
|
||||
|
||||
GroupBox{
|
||||
@@ -53,34 +56,35 @@ ColumnLayout {
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Glow Line")
|
||||
onNewValue: appSettings.glowingLine = newValue
|
||||
onNewValue: appSettings.glowingLine = newValue;
|
||||
value: appSettings.glowingLine
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Screen Curvature")
|
||||
onNewValue: appSettings.screenCurvature = newValue
|
||||
value: appSettings.screenCurvature
|
||||
onNewValue: appSettings.screenCurvature = newValue;
|
||||
value: appSettings.screenCurvature;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Ambient Light")
|
||||
onNewValue: appSettings.ambientLight = newValue
|
||||
onNewValue: appSettings.ambientLight = newValue;
|
||||
value: appSettings.ambientLight
|
||||
enabled: appSettings.framesIndex !== 0
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Flickering")
|
||||
onNewValue: appSettings.flickering = newValue
|
||||
value: appSettings.flickering
|
||||
onNewValue: appSettings.flickering = newValue;
|
||||
value: appSettings.flickering;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Horizontal Sync")
|
||||
onNewValue: appSettings.horizontalSync = newValue
|
||||
value: appSettings.horizontalSync
|
||||
onNewValue: appSettings.horizontalSync = newValue;
|
||||
value: appSettings.horizontalSync;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("RGB Shift")
|
||||
onNewValue: appSettings.rbgShift = newValue
|
||||
value: appSettings.rbgShift
|
||||
onNewValue: appSettings.rbgShift = newValue;
|
||||
value: appSettings.rbgShift;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,35 +17,34 @@
|
||||
* 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.4
|
||||
import QtQuick.Controls 1.1
|
||||
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
|
||||
ListView {
|
||||
TableView {
|
||||
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)
|
||||
}
|
||||
headerVisible: false
|
||||
TableViewColumn {
|
||||
title: qsTr("Profile")
|
||||
role: "text"
|
||||
width: parent.width * 0.5
|
||||
}
|
||||
onActivated: {
|
||||
appSettings.loadProfile(row);
|
||||
}
|
||||
}
|
||||
ColumnLayout {
|
||||
@@ -55,35 +54,34 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Save")
|
||||
onClicked: {
|
||||
insertname.profileName = ""
|
||||
insertname.profileName = "";
|
||||
insertname.show()
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
enabled: currentIndex >= 0
|
||||
text: qsTr("Load")
|
||||
onClicked: {
|
||||
var index = currentIndex
|
||||
var index = profilesView.currentRow;
|
||||
if (index >= 0)
|
||||
appSettings.loadProfile(index)
|
||||
appSettings.loadProfile(index);
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Remove")
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(
|
||||
currentIndex).builtin
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
appSettings.profilesList.remove(currentIndex)
|
||||
profilesView.selection.clear()
|
||||
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
|
||||
profilesView.model = 0;
|
||||
profilesView.model = appSettings.profilesList;
|
||||
}
|
||||
}
|
||||
Item {
|
||||
@@ -94,84 +92,70 @@ ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Import")
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = true
|
||||
fileDialog.callBack = function (url) {
|
||||
loadFile(url)
|
||||
}
|
||||
fileDialog.open()
|
||||
fileDialog.selectExisting = true;
|
||||
fileDialog.callBack = function (url) {loadFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
function loadFile(url) {
|
||||
try {
|
||||
if (appSettings.verbose)
|
||||
console.log("Loading file: " + url)
|
||||
console.log("Loading file: " + url);
|
||||
|
||||
var profileObject = JSON.parse(fileIO.read(url))
|
||||
var name = profileObject.name
|
||||
var profileObject = JSON.parse(fileIO.read(url));
|
||||
var name = profileObject.name;
|
||||
|
||||
if (!name)
|
||||
throw "Profile doesn't have a name"
|
||||
throw "Profile doesn't have a name";
|
||||
|
||||
var version = profileObject.version
|
||||
!== undefined ? profileObject.version : 1
|
||||
var version = profileObject.version !== undefined ? profileObject.version : 1;
|
||||
if (version !== appSettings.profileVersion)
|
||||
throw "This profile is not supported on this version of CRT."
|
||||
throw "This profile is not supported on this version of CRT.";
|
||||
|
||||
delete profileObject.name
|
||||
delete profileObject.name;
|
||||
|
||||
appSettings.appendCustomProfile(name,
|
||||
JSON.stringify(
|
||||
profileObject))
|
||||
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
|
||||
} catch (err) {
|
||||
messageDialog.text = qsTr(err)
|
||||
messageDialog.open()
|
||||
messageDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
Button{
|
||||
property alias currentIndex: profilesView.currentIndex
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Export")
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(
|
||||
currentIndex).builtin
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = false
|
||||
fileDialog.callBack = function (url) {
|
||||
storeFile(url)
|
||||
}
|
||||
fileDialog.open()
|
||||
fileDialog.selectExisting = false;
|
||||
fileDialog.callBack = function (url) {storeFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
function storeFile(url) {
|
||||
try {
|
||||
var urlString = url.toString()
|
||||
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
|
||||
var extension = urlString.substring(urlString.length - 5, urlString.length);
|
||||
var urlTail = (extension === ".json" ? "" : ".json");
|
||||
url += urlTail;
|
||||
|
||||
if (true)
|
||||
console.log("Storing file: " + url)
|
||||
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 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))
|
||||
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
|
||||
if (!result)
|
||||
throw "The file could not be written."
|
||||
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()
|
||||
console.log(err);
|
||||
messageDialog.text = qsTr("There has been an error storing the file.")
|
||||
messageDialog.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,30 +169,22 @@ ColumnLayout {
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label {
|
||||
text: qsTr("Brightness")
|
||||
}
|
||||
Label{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.brightness = value
|
||||
value: appSettings.brightness
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Contrast")
|
||||
}
|
||||
Label{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.contrast = value
|
||||
value: appSettings.contrast
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Margin")
|
||||
}
|
||||
Label{ text: qsTr("Margin") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings._margin = value
|
||||
value: appSettings._margin
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Opacity")
|
||||
}
|
||||
Label{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.windowOpacity = value
|
||||
value: appSettings.windowOpacity
|
||||
@@ -220,15 +196,14 @@ ColumnLayout {
|
||||
InsertNameDialog{
|
||||
id: insertname
|
||||
onNameSelected: {
|
||||
appSettings.appendCustomProfile(name,
|
||||
appSettings.composeProfileString())
|
||||
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
|
||||
}
|
||||
}
|
||||
MessageDialog {
|
||||
id: messageDialog
|
||||
title: qsTr("File Error")
|
||||
onAccepted: {
|
||||
messageDialog.close()
|
||||
messageDialog.close();
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
@@ -241,18 +216,19 @@ ColumnLayout {
|
||||
selectMultiple: false
|
||||
selectFolder: false
|
||||
selectExisting: fileDialog.selectExisting
|
||||
onAccepted: callBack(fileUrl)
|
||||
onAccepted: callBack(fileUrl);
|
||||
}
|
||||
|
||||
onSelectExistingChanged: reload()
|
||||
|
||||
function open() {
|
||||
item.open()
|
||||
item.open();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
active = false
|
||||
active = true
|
||||
active = false;
|
||||
active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,14 +17,16 @@
|
||||
* 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.1
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQml 2.0
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
|
||||
GroupBox{
|
||||
title: qsTr("Font")
|
||||
@@ -32,9 +34,7 @@ ColumnLayout {
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label {
|
||||
text: qsTr("Rasterization")
|
||||
}
|
||||
Label { text: qsTr("Rasterization") }
|
||||
ComboBox {
|
||||
id: rasterizationBox
|
||||
|
||||
@@ -47,62 +47,66 @@ ColumnLayout {
|
||||
appSettings.rasterization = currentIndex
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Name")
|
||||
}
|
||||
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()
|
||||
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)
|
||||
var name = appSettings.fontNames[appSettings.rasterization];
|
||||
var index = appSettings.getIndexByName(name);
|
||||
if (index !== undefined)
|
||||
currentIndex = index
|
||||
currentIndex = index;
|
||||
}
|
||||
Connections{
|
||||
target: appSettings
|
||||
onTerminalFontChanged: fontChanger.updateIndex()
|
||||
onTerminalFontChanged: fontChanger.updateIndex();
|
||||
}
|
||||
Component.onCompleted: updateIndex()
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Scaling")
|
||||
Component.onCompleted: updateIndex();
|
||||
}
|
||||
Label{ text: qsTr("Scaling") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: fontScalingChanger
|
||||
onValueChanged: appSettings.fontScaling = value
|
||||
value: appSettings.fontScaling
|
||||
onValueChanged: if(enabled) appSettings.fontScaling = value
|
||||
stepSize: 0.05
|
||||
from: appSettings.minimumFontScaling
|
||||
to: appSettings.maximumFontScaling
|
||||
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) + "%"
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: qsTr("Font Width")
|
||||
}
|
||||
Label{ text: qsTr("Font Width") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: widthChanger
|
||||
onValueChanged: appSettings.fontWidth = value
|
||||
onValueChanged: appSettings.fontWidth = value;
|
||||
value: appSettings.fontWidth
|
||||
stepSize: 0.05
|
||||
from: 0.5
|
||||
to: 1.5
|
||||
Component.onCompleted: {
|
||||
// This is needed to avoid unnecessary chnaged events.
|
||||
minimumValue = 0.5;
|
||||
maximumValue = 1.5;
|
||||
}
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(widthChanger.value * 100) + "%"
|
||||
@@ -110,24 +114,6 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
@@ -153,17 +139,18 @@ ColumnLayout {
|
||||
name: qsTr("Font")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._fontColor = color
|
||||
onColorSelected: appSettings._fontColor = color;
|
||||
color: appSettings._fontColor
|
||||
}
|
||||
ColorButton{
|
||||
name: qsTr("Background")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._backgroundColor = color
|
||||
onColorSelected: appSettings._backgroundColor = color;
|
||||
color: appSettings._backgroundColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -19,50 +19,46 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
Window {
|
||||
id: settings_window
|
||||
title: qsTr("Settings")
|
||||
width: 800
|
||||
height: 600
|
||||
width: 580
|
||||
height: 400
|
||||
|
||||
property int tabmargins: 15
|
||||
|
||||
TabBar {
|
||||
id: bar
|
||||
width: parent.width
|
||||
TabButton {
|
||||
text: qsTr("General")
|
||||
TabView{
|
||||
id: tabView
|
||||
anchors.fill: parent
|
||||
anchors.margins: 10
|
||||
SettingsGeneralTab {
|
||||
id: generalTab
|
||||
title: qsTr("General")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Terminal")
|
||||
SettingsTerminalTab {
|
||||
id: terminalTab
|
||||
title: qsTr("Terminal")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Effects")
|
||||
SettingsEffectsTab {
|
||||
id: effectsTab
|
||||
title: qsTr("Effects")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Advanced")
|
||||
SettingsAdvancedTab {
|
||||
id: performanceTab
|
||||
title: qsTr("Advanced")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
}
|
||||
|
||||
StackLayout {
|
||||
anchors {
|
||||
top: bar.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
margins: tabmargins
|
||||
}
|
||||
|
||||
currentIndex: bar.currentIndex
|
||||
|
||||
SettingsGeneralTab { }
|
||||
SettingsTerminalTab { }
|
||||
SettingsEffectsTab { }
|
||||
SettingsAdvancedTab { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,8 +17,9 @@
|
||||
* 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.0
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
@@ -26,8 +27,8 @@ import "Components"
|
||||
RowLayout {
|
||||
property alias value: slider.value
|
||||
property alias stepSize: slider.stepSize
|
||||
property alias minimumValue: slider.from
|
||||
property alias maximumValue: slider.to
|
||||
property alias minimumValue: slider.minimumValue
|
||||
property alias maximumValue: slider.maximumValue
|
||||
property real maxMultiplier: 100
|
||||
|
||||
id: setting_component
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,12 +17,12 @@
|
||||
* 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
|
||||
|
||||
Rectangle{
|
||||
property size terminalSize
|
||||
property real topOpacity: 0.6
|
||||
|
||||
width: textSize.width * 2
|
||||
height: textSize.height * 2
|
||||
radius: 5
|
||||
@@ -31,11 +31,7 @@ Rectangle {
|
||||
color: "black"
|
||||
opacity: sizetimer.running ? 0.6 : 0.0
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: 200
|
||||
}
|
||||
}
|
||||
Behavior on opacity{NumberAnimation{duration: 200}}
|
||||
|
||||
onTerminalSizeChanged: sizetimer.restart()
|
||||
|
||||
|
||||
@@ -1,23 +1,3 @@
|
||||
/*******************************************************************************
|
||||
* 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.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
@@ -26,10 +6,12 @@ Loader {
|
||||
property ShaderEffectSource source: item ? item.source : null
|
||||
|
||||
active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
sourceComponent: Item {
|
||||
property alias source: burnInSourceEffect
|
||||
|
||||
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||
|
||||
ShaderEffectSource {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -27,7 +27,7 @@ QtObject {
|
||||
property bool initialized: false
|
||||
|
||||
function getDatabase() {
|
||||
return LocalStorage.openDatabaseSync("coolretroterm" + dbMajorVersion, dbMinorVersion, "StorageDatabase", 100000)
|
||||
return LocalStorage.openDatabaseSync("coolretroterm" + dbMajorVersion, dbMinorVersion, "StorageDatabase", 100000);
|
||||
}
|
||||
|
||||
function initialize() {
|
||||
@@ -35,10 +35,9 @@ QtObject {
|
||||
db.transaction(
|
||||
function(tx) {
|
||||
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
|
||||
}
|
||||
)
|
||||
});
|
||||
|
||||
initialized = true
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
function setSetting(setting, value) {
|
||||
@@ -46,8 +45,7 @@ QtObject {
|
||||
|
||||
var db = getDatabase();
|
||||
var res = "";
|
||||
db.transaction(
|
||||
function(tx) {
|
||||
db.transaction(function(tx) {
|
||||
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
|
||||
//console.log(rs.rowsAffected)
|
||||
if (rs.rowsAffected > 0) {
|
||||
@@ -56,25 +54,23 @@ QtObject {
|
||||
res = "Error";
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
// The function returns “OK” if it was successful, or “Error” if it wasn't
|
||||
return res
|
||||
return res;
|
||||
}
|
||||
|
||||
function getSetting(setting) {
|
||||
if(!initialized) initialize();
|
||||
var db = getDatabase();
|
||||
var res="";
|
||||
db.transaction(
|
||||
function(tx) {
|
||||
db.transaction(function(tx) {
|
||||
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
|
||||
if (rs.rows.length > 0) {
|
||||
res = rs.rows.item(0).value;
|
||||
} else {
|
||||
res = undefined;
|
||||
}
|
||||
}
|
||||
)
|
||||
})
|
||||
return res
|
||||
}
|
||||
|
||||
@@ -83,7 +79,6 @@ QtObject {
|
||||
db.transaction(
|
||||
function(tx) {
|
||||
tx.executeSql('DROP TABLE settings');
|
||||
}
|
||||
)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,3 @@
|
||||
/*******************************************************************************
|
||||
* 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 QtGraphicalEffects 1.0
|
||||
|
||||
@@ -45,6 +26,7 @@ ShaderTerminal {
|
||||
}
|
||||
|
||||
// EFFECTS ////////////////////////////////////////////////////////////////
|
||||
|
||||
Loader{
|
||||
id: bloomEffectLoader
|
||||
active: appSettings.bloom
|
||||
@@ -53,7 +35,7 @@ ShaderTerminal {
|
||||
height: parent.height * appSettings.bloomQuality
|
||||
|
||||
sourceComponent: FastBlur{
|
||||
radius: Utils.lint(16, 64, appSettings.bloomQuality)
|
||||
radius: Utils.lint(16, 64, appSettings.bloomQuality);
|
||||
source: terminal.mainSource
|
||||
transparentBorder: true
|
||||
}
|
||||
@@ -72,4 +54,71 @@ ShaderTerminal {
|
||||
}
|
||||
|
||||
bloomSource: bloomSourceLoader.item
|
||||
|
||||
// NewTerminalFrame {
|
||||
// id: terminalFrame
|
||||
// anchors.fill: parent
|
||||
// blending: true
|
||||
// }
|
||||
|
||||
// This shader might be useful in the future. Since we used it only for a couple
|
||||
// of calculations is probably best to move those in the main shader. If in the future
|
||||
// we need to store another fullScreen channel this might be handy.
|
||||
|
||||
// ShaderEffect {
|
||||
// id: rasterizationEffect
|
||||
// width: parent.width
|
||||
// height: parent.height
|
||||
// property real outColor: 0.0
|
||||
// property real dispX: (5 / width) * appSettings.windowScaling
|
||||
// property real dispY: (5 / height) * appSettings.windowScaling
|
||||
// property size virtual_resolution: terminal.virtualResolution
|
||||
|
||||
// blending: false
|
||||
|
||||
// fragmentShader:
|
||||
// "uniform lowp float qt_Opacity;" +
|
||||
|
||||
// "varying highp vec2 qt_TexCoord0;
|
||||
// uniform highp vec2 virtual_resolution;
|
||||
// uniform highp float dispX;
|
||||
// uniform highp float dispY;
|
||||
// uniform mediump float outColor;
|
||||
|
||||
// highp float getScanlineIntensity(vec2 coords) {
|
||||
// highp float result = 1.0;" +
|
||||
|
||||
// (appSettings.rasterization != appSettings.no_rasterization ?
|
||||
// "result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
|
||||
// (appSettings.rasterization == appSettings.pixel_rasterization ?
|
||||
// "result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
|
||||
|
||||
// return result;
|
||||
// }" +
|
||||
|
||||
// "void main() {" +
|
||||
// "highp float color = getScanlineIntensity(qt_TexCoord0);" +
|
||||
|
||||
// "float distance = length(vec2(0.5) - qt_TexCoord0);" +
|
||||
// "color = mix(color, 0.0, 1.2 * distance * distance);" +
|
||||
|
||||
// "color *= outColor + smoothstep(0.00, dispX, qt_TexCoord0.x) * (1.0 - outColor);" +
|
||||
// "color *= outColor + smoothstep(0.00, dispY, qt_TexCoord0.y) * (1.0 - outColor);" +
|
||||
// "color *= outColor + (1.0 - smoothstep(1.00 - dispX, 1.00, qt_TexCoord0.x)) * (1.0 - outColor);" +
|
||||
// "color *= outColor + (1.0 - smoothstep(1.00 - dispY, 1.00, qt_TexCoord0.y)) * (1.0 - outColor);" +
|
||||
|
||||
// "gl_FragColor.a = color;" +
|
||||
// "}"
|
||||
|
||||
// onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
// }
|
||||
|
||||
// rasterizationSource: ShaderEffectSource{
|
||||
// id: rasterizationEffectSource
|
||||
// sourceItem: rasterizationEffect
|
||||
// hideSource: true
|
||||
// smooth: true
|
||||
// wrapMode: ShaderEffectSource.ClampToEdge
|
||||
// visible: false
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,6 +17,7 @@
|
||||
* 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
|
||||
|
||||
Timer{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
@@ -17,11 +17,11 @@
|
||||
* 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.Window 2.1
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
import "menus"
|
||||
import QtQuick.Controls 1.1
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
ApplicationWindow{
|
||||
id: terminalWindow
|
||||
@@ -37,6 +37,8 @@ ApplicationWindow {
|
||||
|
||||
// Load saved window geometry and show the window
|
||||
Component.onCompleted: {
|
||||
appSettings.handleFontChanged();
|
||||
|
||||
x = appSettings.x
|
||||
y = appSettings.y
|
||||
width = appSettings.width
|
||||
@@ -53,9 +55,11 @@ ApplicationWindow {
|
||||
property bool fullscreen: appSettings.fullscreen
|
||||
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
|
||||
|
||||
menuBar: WindowMenu {
|
||||
//Workaround: Without __contentItem a ugly thin border is visible.
|
||||
menuBar: CRTMainMenuBar{
|
||||
id: mainMenu
|
||||
visible: (Qt.platform.os === "osx" || appSettings.showMenubar)
|
||||
__contentItem.visible: mainMenu.visible
|
||||
}
|
||||
|
||||
property string wintitle: appSettings.wintitle
|
||||
@@ -63,6 +67,22 @@ ApplicationWindow {
|
||||
color: "#00000000"
|
||||
title: terminalContainer.title || qsTr(appSettings.wintitle)
|
||||
|
||||
Action {
|
||||
id: newAction
|
||||
text: qsTr("New Window")
|
||||
shortcut: Qt.platform.os === "osx" ? StandardKey.New : "Ctrl+Shift+N"
|
||||
onTriggered: {
|
||||
root.newWindow()
|
||||
}
|
||||
}
|
||||
Action {
|
||||
id: closeAction
|
||||
text: qsTr("Close Window")
|
||||
shortcut: Qt.platform.os === "osx" ? StandardKey.Close : "Ctrl+Shift+W"
|
||||
onTriggered: {
|
||||
terminalWindow.close()
|
||||
}
|
||||
}
|
||||
Action {
|
||||
id: showMenubarAction
|
||||
text: qsTr("Show Menubar")
|
||||
@@ -77,7 +97,7 @@ ApplicationWindow {
|
||||
text: qsTr("Fullscreen")
|
||||
enabled: Qt.platform.os !== "osx"
|
||||
shortcut: "Alt+F11"
|
||||
onTriggered: appSettings.fullscreen = !appSettings.fullscreen
|
||||
onTriggered: appSettings.fullscreen = !appSettings.fullscreen;
|
||||
checkable: true
|
||||
checked: appSettings.fullscreen
|
||||
}
|
||||
@@ -85,15 +105,15 @@ ApplicationWindow {
|
||||
id: quitAction
|
||||
text: qsTr("Quit")
|
||||
shortcut: "Ctrl+Shift+Q"
|
||||
onTriggered: Qt.quit()
|
||||
onTriggered: Qt.quit();
|
||||
}
|
||||
Action{
|
||||
id: showsettingsAction
|
||||
text: qsTr("Settings")
|
||||
onTriggered: {
|
||||
settingswindow.show()
|
||||
settingswindow.requestActivate()
|
||||
settingswindow.raise()
|
||||
settingswindow.show();
|
||||
settingswindow.requestActivate();
|
||||
settingswindow.raise();
|
||||
}
|
||||
}
|
||||
Action{
|
||||
@@ -110,21 +130,21 @@ ApplicationWindow {
|
||||
id: zoomIn
|
||||
text: qsTr("Zoom In")
|
||||
shortcut: "Ctrl++"
|
||||
onTriggered: appSettings.incrementScaling()
|
||||
onTriggered: appSettings.incrementScaling();
|
||||
}
|
||||
Action{
|
||||
id: zoomOut
|
||||
text: qsTr("Zoom Out")
|
||||
shortcut: "Ctrl+-"
|
||||
onTriggered: appSettings.decrementScaling()
|
||||
onTriggered: appSettings.decrementScaling();
|
||||
}
|
||||
Action{
|
||||
id: showAboutAction
|
||||
text: qsTr("About")
|
||||
onTriggered: {
|
||||
aboutDialog.show()
|
||||
aboutDialog.requestActivate()
|
||||
aboutDialog.raise()
|
||||
aboutDialog.show();
|
||||
aboutDialog.requestActivate();
|
||||
aboutDialog.raise();
|
||||
}
|
||||
}
|
||||
ApplicationSettings{
|
||||
@@ -132,6 +152,7 @@ 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))
|
||||
}
|
||||
@@ -152,9 +173,6 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
onClosing: {
|
||||
// OSX Since we are currently supporting only one window
|
||||
// quit the application when it is closed.
|
||||
if (Qt.platform.os === "osx")
|
||||
Qt.quit()
|
||||
root.closeWindow()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* 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,85 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* 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
|
||||
|
||||
MenuBar {
|
||||
id: defaultMenuBar
|
||||
visible: appSettings.showMenubar
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,15 +12,18 @@
|
||||
<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>
|
||||
<file>main.qml</file>
|
||||
<file>root.qml</file>
|
||||
<file>SettingsTerminalTab.qml</file>
|
||||
<file>FontScanlines.qml</file>
|
||||
<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>
|
||||
@@ -42,8 +45,5 @@
|
||||
<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>
|
||||
|
||||
43
app/qml/root.qml
Normal file
43
app/qml/root.qml
Normal file
@@ -0,0 +1,43 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 "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.Window 2.1
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
property int terminalCount
|
||||
|
||||
function newWindow() {
|
||||
var component = Qt.createComponent("main.qml")
|
||||
var window = component.createObject()
|
||||
window.show()
|
||||
terminalCount = terminalCount + 1
|
||||
}
|
||||
function closeWindow() {
|
||||
terminalCount = terminalCount - 1
|
||||
if (terminalCount == 0) {
|
||||
Qt.quit()
|
||||
}
|
||||
}
|
||||
Component.onCompleted: {
|
||||
terminalCount = 0
|
||||
root.newWindow()
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,3 @@
|
||||
/*******************************************************************************
|
||||
* 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/>.
|
||||
*******************************************************************************/
|
||||
|
||||
.pragma library
|
||||
function clamp(x, min, max) {
|
||||
if (x <= min)
|
||||
@@ -26,18 +6,15 @@ function clamp(x, min, max) {
|
||||
return max;
|
||||
return x;
|
||||
}
|
||||
|
||||
function lint(a, b, t) {
|
||||
return (1 - t) * a + (t) * b;
|
||||
}
|
||||
|
||||
function mix(c1, c2, alpha){
|
||||
return Qt.rgba(c1.r * alpha + c2.r * (1-alpha),
|
||||
c1.g * alpha + c2.g * (1-alpha),
|
||||
c1.b * alpha + c2.b * (1-alpha),
|
||||
c1.a * alpha + c2.a * (1-alpha))
|
||||
}
|
||||
|
||||
function strToColor(s){
|
||||
var r = parseInt(s.substring(1,3), 16) / 256;
|
||||
var g = parseInt(s.substring(3,5), 16) / 256;
|
||||
|
||||
Submodule qmltermwidget updated: 5c47d1f494...48274c7566
@@ -66,6 +66,4 @@ parts:
|
||||
- libgl1-mesa-dev
|
||||
- qtdeclarative5-dev-tools
|
||||
- qml-module-qtquick-extras
|
||||
- qml-module-qt-labs-settings
|
||||
- qml-module-qt-labs-folderlistmodel
|
||||
|
||||
|
||||
Reference in New Issue
Block a user