mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2026-02-08 00:32:27 +00:00
155 lines
4.3 KiB
QML
155 lines
4.3 KiB
QML
/*******************************************************************************
|
|
* 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
|
|
|
|
import "menus"
|
|
|
|
QtObject {
|
|
id: appRoot
|
|
|
|
property ApplicationSettings appSettings: ApplicationSettings {
|
|
onInitializedSettings: appRoot.createWindow()
|
|
}
|
|
|
|
property TimeManager timeManager: TimeManager {
|
|
enableTimer: windowsModel.count > 0
|
|
}
|
|
|
|
property SettingsWindow settingsWindow: SettingsWindow {
|
|
visible: false
|
|
}
|
|
|
|
property AboutDialog aboutDialog: AboutDialog {
|
|
visible: false
|
|
}
|
|
|
|
property Component windowComponent: Component {
|
|
TerminalWindow { }
|
|
}
|
|
|
|
property ListModel windowsModel: ListModel { }
|
|
|
|
property Loader globalMenuLoader: Loader {
|
|
active: appSettings.isMacOS
|
|
sourceComponent: OSXMenu { }
|
|
}
|
|
|
|
property Action showMenubarAction: Action {
|
|
text: qsTr("Show Menubar")
|
|
enabled: !appSettings.isMacOS
|
|
shortcut: "Ctrl+Shift+M"
|
|
checkable: true
|
|
checked: appSettings.showMenubar
|
|
onTriggered: appSettings.showMenubar = !appSettings.showMenubar
|
|
}
|
|
|
|
property Action fullscreenAction: Action {
|
|
text: qsTr("Fullscreen")
|
|
enabled: !appSettings.isMacOS
|
|
shortcut: "Alt+F11"
|
|
}
|
|
|
|
property bool initialFullscreenRequested: Qt.application.arguments.indexOf("--fullscreen") !== -1
|
|
|
|
property Action newWindowAction: Action {
|
|
text: qsTr("New Window")
|
|
shortcut: "Ctrl+Shift+N"
|
|
onTriggered: appRoot.createWindow()
|
|
}
|
|
|
|
property Action quitAction: Action {
|
|
text: qsTr("Quit")
|
|
shortcut: "Ctrl+Shift+Q"
|
|
onTriggered: appSettings.close()
|
|
}
|
|
|
|
property Action showsettingsAction: Action {
|
|
text: qsTr("Settings")
|
|
onTriggered: {
|
|
settingsWindow.show()
|
|
settingsWindow.requestActivate()
|
|
settingsWindow.raise()
|
|
}
|
|
}
|
|
|
|
property Action copyAction: Action {
|
|
text: qsTr("Copy")
|
|
shortcut: "Ctrl+Shift+C"
|
|
}
|
|
|
|
property Action pasteAction: Action {
|
|
text: qsTr("Paste")
|
|
shortcut: "Ctrl+Shift+V"
|
|
}
|
|
|
|
property Action zoomInAction: Action {
|
|
text: qsTr("Zoom In")
|
|
shortcut: "Ctrl++"
|
|
onTriggered: appSettings.incrementScaling()
|
|
}
|
|
|
|
property Action zoomOutAction: Action {
|
|
text: qsTr("Zoom Out")
|
|
shortcut: "Ctrl+-"
|
|
onTriggered: appSettings.decrementScaling()
|
|
}
|
|
|
|
property Action showAboutAction: Action {
|
|
text: qsTr("About")
|
|
onTriggered: {
|
|
aboutDialog.show()
|
|
aboutDialog.requestActivate()
|
|
aboutDialog.raise()
|
|
}
|
|
}
|
|
|
|
property Action newTabAction: Action {
|
|
text: qsTr("New Tab")
|
|
}
|
|
|
|
function createWindow() {
|
|
var useFullscreen = initialFullscreenRequested
|
|
var window = windowComponent.createObject(null, { fullscreen: useFullscreen })
|
|
if (!window)
|
|
return
|
|
|
|
windowsModel.append({ window: window })
|
|
initialFullscreenRequested = false
|
|
window.show()
|
|
window.requestActivate()
|
|
}
|
|
|
|
function closeWindow(window) {
|
|
for (var i = 0; i < windowsModel.count; i++) {
|
|
if (windowsModel.get(i).window === window) {
|
|
windowsModel.remove(i)
|
|
break
|
|
}
|
|
}
|
|
|
|
window.destroy()
|
|
|
|
if (windowsModel.count === 0) {
|
|
appSettings.close()
|
|
}
|
|
}
|
|
}
|