From b5957121d7446e1970c5a1cf82c8784f7541c1b7 Mon Sep 17 00:00:00 2001 From: Pekka Vuorela Date: Thu, 9 Jun 2016 15:00:49 +0300 Subject: [PATCH] Make settings declarative --- main.cpp | 3 +- qml/Key.qml | 4 +- qml/Keyboard.qml | 28 +++--- qml/LayoutWindow.qml | 10 +-- qml/Lineview.qml | 17 ++-- qml/Main.qml | 63 ++++---------- qml/MenuFingerterm.qml | 76 +++++++--------- textrender.cpp | 18 ++-- util.cpp | 191 +++++++++++++++++++++++++++++++++++++++++ util.h | 70 ++++++++++++++- 10 files changed, 341 insertions(+), 139 deletions(-) diff --git a/main.cpp b/main.cpp index adbd762..13bbff7 100644 --- a/main.cpp +++ b/main.cpp @@ -100,7 +100,8 @@ int main(int argc, char *argv[]) | Qt::InvertedPortraitOrientation); } - qmlRegisterType("TextRender",1,0,"TextRender"); + qmlRegisterType("FingerTerm", 1, 0, "TextRender"); + qmlRegisterUncreatableType("FingerTerm", 1, 0, "Util", "Util is created by app"); QQuickView view; bool fullscreen = !app.arguments().contains("-nofs"); diff --git a/qml/Key.qml b/qml/Key.qml index f6458cf..0aa312e 100644 --- a/qml/Key.qml +++ b/qml/Key.qml @@ -72,7 +72,7 @@ Rectangle { opacity: key.labelOpacity * (highlighted ? 1.0 : 0.2) Behavior on opacity { NumberAnimation { duration: 100 } } - font.family: util.settingsValue("ui/fontFamily"); + font.family: util.fontFamily font.pointSize: (highlighted ? window.fontSizeLarge : window.fontSizeSmall) * (text.length > 1 ? 0.5 : 1.0) Behavior on font.pointSize { NumberAnimation { duration: 100 } } } @@ -100,7 +100,7 @@ Rectangle { opacity: key.labelOpacity * (highlighted ? 1.0 : 0.2) Behavior on opacity { NumberAnimation { duration: 100 } } - font.family: util.settingsValue("ui/fontFamily"); + font.family: util.fontFamily font.pointSize: (highlighted ? window.fontSizeLarge : window.fontSizeSmall) * (text.length > 1 ? 0.5 : 1.0) Behavior on font.pointSize { NumberAnimation { duration: 100 } } } diff --git a/qml/Keyboard.qml b/qml/Keyboard.qml index 31cf879..e7e327c 100644 --- a/qml/Keyboard.qml +++ b/qml/Keyboard.qml @@ -34,7 +34,7 @@ Rectangle { property bool active - property int outmargins: util.settingsValue("ui/keyboardMargins") + property int outmargins: util.keyboardMargins property int keyspacing: 6 property int keysPerRow: keyLoader.vkbColumns() property real keywidth: (keyboard.width - keyspacing*keysPerRow - outmargins*2)/keysPerRow; @@ -99,21 +99,23 @@ Rectangle { } } - function reloadLayout() - { - var ret = keyLoader.loadLayout(util.settingsValue("ui/keyboardLayout")); - if (!ret) { - showErrorMessage("There was an error loading the keyboard layout.
\nUsing the default one instead."); - util.setSettingsValue("ui/keyboardLayout", "english"); - ret = keyLoader.loadLayout(":/data/english.layout"); //try the default as a fallback (load from resources to ensure it will succeed) + Connections { + target: util + onKeyboardLayoutChanged: { + var ret = keyLoader.loadLayout(util.keyboardLayout) if (!ret) { - console.log("keyboard layout fail"); - Qt.quit(); + showErrorMessage("There was an error loading the keyboard layout.
\nUsing the default one instead."); + util.keyboardLayout = "english" + ret = keyLoader.loadLayout(":/data/english.layout"); //try the default as a fallback (load from resources to ensure it will succeed) + if (!ret) { + console.log("keyboard layout fail"); + Qt.quit(); + } } + // makes the keyboard component reload itself with new data + keyboardLoader.sourceComponent = undefined + keyboardLoader.sourceComponent = keyboardContents } - // makes the keyboard component reload itself with new data - keyboardLoader.sourceComponent = undefined - keyboardLoader.sourceComponent = keyboardContents } //borrowed from nemo-keyboard diff --git a/qml/LayoutWindow.qml b/qml/LayoutWindow.qml index f1e7b1f..fbcb474 100644 --- a/qml/LayoutWindow.qml +++ b/qml/LayoutWindow.qml @@ -22,7 +22,6 @@ import QtQuick 2.0 Rectangle { id: layoutWindow - property string currentLayout: util.settingsValue("ui/keyboardLayout"); property variant layouts: [""] width: window.width-1 @@ -41,7 +40,7 @@ Rectangle { Component { id: listDelegate Rectangle { - color: currentLayout === modelData ? "#909090" : "#404040" + color: util.keyboardLayout === modelData ? "#909090" : "#404040" width: parent.width height: selectButton.height+4*window.pixelRatio border.width: 1 @@ -66,8 +65,7 @@ Rectangle { width: 70*window.pixelRatio anchors.rightMargin: window.paddingSmall onClicked: { - util.setSettingsValue("ui/keyboardLayout", modelData); - vkb.reloadLayout(); + util.keyboardLayout = modelData layoutWindow.state = ""; util.notifyText(modelData); } @@ -111,10 +109,6 @@ Rectangle { target: layoutWindow y: 0 } - StateChangeScript { - script: - currentLayout = util.settingsValue("ui/keyboardLayout"); - } } ] diff --git a/qml/Lineview.qml b/qml/Lineview.qml index b26eb10..9c728f1 100644 --- a/qml/Lineview.qml +++ b/qml/Lineview.qml @@ -18,16 +18,17 @@ */ import QtQuick 2.0 +import FingerTerm 1.0 Rectangle { id: lineView property variant lines: [""] - property int fontPointSize: util.settingsValue("ui/fontSize")*window.pixelRatio; + property int fontPointSize: util.fontSize property int cursorX: 1 property int cursorWidth: 10 property int cursorHeight: 10 - property int extraLines: 1 + property int extraLines: util.extraLinesFromCursor color: "#404040" border.width: 2 @@ -39,7 +40,7 @@ Rectangle { id: fontHeightHack visible: false text: "X" - font.family: util.settingsValue("ui/fontFamily"); + font.family: util.fontFamily font.pointSize: lineView.fontPointSize } @@ -68,7 +69,7 @@ Rectangle { width: lineTextCol.width Text { color: "#ffffff" - font.family: util.settingsValue("ui/fontFamily"); + font.family: util.fontFamily font.pointSize: lineView.fontPointSize text: modelData textFormat: Text.PlainText @@ -85,19 +86,15 @@ Rectangle { } } - Component.onCompleted: { - extraLines = util.settingsValue("ui/showExtraLinesFromCursor"); - } - function setPosition(vkbActive) { - if( util.settingsValue("ui/vkbShowMethod")==="off" ) { + if (util.keyboardMode == Util.KeyboardOff) { lineView.visible = false; return; } lineView.visible = true; - if(vkbActive && util.settingsValue("ui/vkbShowMethod")!=="move") { + if (vkbActive && util.keyboardMode != Util.KeyboardMove) { y = 0; } else { y = -(height+window.paddingSmall) diff --git a/qml/Main.qml b/qml/Main.qml index e669ac7..a59eee1 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -18,7 +18,7 @@ */ import QtQuick 2.0 -import TextRender 1.0 +import FingerTerm 1.0 import QtQuick.Window 2.0 Item { @@ -43,9 +43,10 @@ Item { Item { id: page - property bool forceOrientation - property int forcedOrientation property int orientation: forceOrientation ? forcedOrientation : Screen.orientation + property bool forceOrientation: util.orientationMode != Util.OrientationAuto + property int forcedOrientation: util.orientationMode == Util.OrientationLandscape ? Qt.LandscapeOrientation + : Qt.PortraitOrientation property bool portrait: rotation % 180 == 0 width: portrait ? root.width : root.height @@ -57,26 +58,6 @@ Item { term.keyPress(event.key,event.modifiers,event.text); } - Component.onCompleted: { - var stringMode = util.settingsValue("ui/orientationLockMode"); - applyOrientationLock(stringMode) - } - - function applyOrientationLock(stringMode) { - switch (stringMode) { - case "auto": - page.forceOrientation = false - break - case "landscape": - page.forceOrientation = true - page.forcedOrientation = Qt.LandscapeOrientation - break - case "portrait": - page.forceOrientation = true - page.forcedOrientation = Qt.PortraitOrientation - } - } - Rectangle { id: window @@ -108,7 +89,7 @@ Item { property int fontSizeSmall: 14*pixelRatio property int fontSizeLarge: 24*pixelRatio - property int uiFontSize: util.uiFontSize()*pixelRatio + property int uiFontSize: util.uiFontSize * pixelRatio property int scrollBarWidth: 6*window.pixelRatio @@ -182,7 +163,7 @@ Item { // - not in select mode, as it would be hard to select text if (touchPoint.y < vkb.y && touchPoint.startY < vkb.y && Math.abs(touchPoint.y - touchPoint.startY) < 20 && - util.settingsValue("ui/dragMode") !== "select") { + util.dragMode == Util.DragSelect) { if (vkb.active) { window.sleepVKB(); } else { @@ -244,6 +225,7 @@ Item { height: parent.height width: parent.width + fontPointSize: util.fontSize Behavior on opacity { NumberAnimation { duration: textrender.duration; easing.type: Easing.InOutQuad } @@ -252,10 +234,6 @@ Item { NumberAnimation { duration: textrender.duration; easing.type: Easing.InOutQuad } } - onFontSizeChanged: { - lineView.fontPointSize = textrender.fontPointSize; - } - onCutAfterChanged: { // this property is used in the paint function, so make sure that the element gets // painted with the updated value (might not otherwise happen because of caching) @@ -266,7 +244,7 @@ Item { Timer { id: fadeTimer - interval: menu.keyboardFadeOutDelay + interval: util.keyboardFadeOutDelay onTriggered: { window.sleepVKB(); } @@ -347,14 +325,12 @@ Item { if(util.windowTitle.length>40) str += "..."; str += "
Current terminal size: " + termW + "x" + termH + ""; - str += "
Charset: " + util.settingsValue("terminal/charset") + ""; + str += "
Charset: " + util.charset + ""; } str += ""; return str; } - onDismissed: { - util.setSettingsValue("state/showWelcomeScreen", false); - } + onDismissed: util.showWelcomeScreen = false } NotifyWin { @@ -403,12 +379,13 @@ Item { function setTextRenderAttributes() { - if(util.settingsValue("ui/vkbShowMethod")==="move") + if (util.keyboardMode == Util.KeyboardMove) { vkb.visibleSetting = true; textrender.opacity = 1.0; if(vkb.active) { - var move = textrender.cursorPixelPos().y + textrender.fontHeight/2 + textrender.fontHeight*util.settingsValue("ui/showExtraLinesFromCursor"); + var move = textrender.cursorPixelPos().y + textrender.fontHeight/2 + + textrender.fontHeight*util.extraLinesFromCursor if(move < vkb.y) { textrender.y = 0; textrender.cutAfter = vkb.y; @@ -421,7 +398,7 @@ Item { textrender.y = 0; } } - else if(util.settingsValue("ui/vkbShowMethod")==="fade") + else if (util.keyboardMode == Util.KeyboardFade) { vkb.visibleSetting = true; textrender.cutAfter = textrender.height; @@ -442,7 +419,7 @@ Item { function displayBufferChanged() { - lineView.lines = term.printableLinesFromCursor(util.settingsValue("ui/showExtraLinesFromCursor")); + lineView.lines = term.printableLinesFromCursor(util.extraLinesFromCursor); lineView.cursorX = textrender.cursorPixelPos().x; lineView.cursorWidth = textrender.cursorPixelSize().width; lineView.cursorHeight = textrender.cursorPixelSize().height; @@ -450,8 +427,8 @@ Item { } Component.onCompleted: { - if( util.settingsValue("state/showWelcomeScreen") === true ) - aboutDialog.state = "visible"; + if (util.showWelcomeScreen) + aboutDialog.state = "visible" if (startupErrorMessage != "") { showErrorMessage(startupErrorMessage) } @@ -462,12 +439,6 @@ Item { errorDialog.text = "" + string + ""; errorDialog.state = "visible" } - - function setOrientationLockMode(stringMode) - { - util.setSettingsValue("ui/orientationLockMode", stringMode); - page.applyOrientationLock(stringMode) - } } } } diff --git a/qml/MenuFingerterm.qml b/qml/MenuFingerterm.qml index e1dd4ce..c3f540b 100644 --- a/qml/MenuFingerterm.qml +++ b/qml/MenuFingerterm.qml @@ -19,15 +19,12 @@ import QtQuick 2.0 import QtQuick.XmlListModel 2.0 +import FingerTerm 1.0 Item { id: menuWin property bool showing - property string currentShowMethod: util.settingsValue("ui/vkbShowMethod") - property string currentDragMode: util.settingsValue("ui/dragMode") - property string currentOrientationLockMode: util.settingsValue("ui/orientationLockMode") - property int keyboardFadeOutDelay: util.settingsValue("ui/keyboardFadeOutDelay") visible: rect.x < menuWin.width @@ -178,8 +175,7 @@ Item { Button { text: "+" onClicked: { - textrender.fontPointSize = textrender.fontPointSize + window.pixelRatio; - lineView.fontPointSize = textrender.fontPointSize; + util.fontSize = util.fontSize + window.pixelRatio util.notifyText(term.termSize().width+"x"+term.termSize().height); } width: window.buttonWidthHalf @@ -188,8 +184,7 @@ Item { Button { text: "-" onClicked: { - textrender.fontPointSize = textrender.fontPointSize - window.pixelRatio; - lineView.fontPointSize = textrender.fontPointSize; + util.fontSize = util.fontSize - window.pixelRatio util.notifyText(term.termSize().width+"x"+term.termSize().height); } width: window.buttonWidthHalf @@ -218,31 +213,22 @@ Item { Row { Button { text: "Auto" - highlighted: currentOrientationLockMode=="auto" - onClicked: { - currentOrientationLockMode = "auto"; - window.setOrientationLockMode("auto"); - } + highlighted: util.orientationMode == Util.OrientationAuto + onClicked: util.orientationMode = Util.OrientationAuto width: window.buttonWidthSmall height: window.buttonHeightSmall } Button { text: "L" - highlighted: currentOrientationLockMode=="landscape" - onClicked: { - currentOrientationLockMode = "landscape"; - window.setOrientationLockMode("landscape"); - } + highlighted: util.orientationMode == Util.OrientationLandscape + onClicked: util.orientationMode = Util.OrientationLandscape width: window.buttonWidthSmall height: window.buttonHeightSmall } Button { text: "P" - highlighted: currentOrientationLockMode=="portrait" - onClicked: { - currentOrientationLockMode = "portrait"; - window.setOrientationLockMode("portrait"); - } + highlighted: util.orientationMode == Util.OrientationPortrait + onClicked: util.orientationMode = Util.OrientationPortrait width: window.buttonWidthSmall height: window.buttonHeightSmall } @@ -269,11 +255,10 @@ Item { Row { Button { text: "Gesture" - highlighted: currentDragMode=="gestures" + highlighted: util.dragMode == Util.DragGestures onClicked: { - util.setSettingsValue("ui/dragMode", "gestures"); + util.dragMode = Util.DragGestures term.clearSelection(); - currentDragMode = "gestures"; menuWin.showing = false; } width: window.buttonWidthSmall @@ -281,10 +266,9 @@ Item { } Button { text: "Scroll" - highlighted: currentDragMode=="scroll" + highlighted: util.dragMode == Util.DragScroll onClicked: { - util.setSettingsValue("ui/dragMode", "scroll"); - currentDragMode = "scroll"; + util.dragMode = Util.DragScroll term.clearSelection(); menuWin.showing = false; } @@ -293,10 +277,9 @@ Item { } Button { text: "Select" - highlighted: currentDragMode=="select" + highlighted: util.dragMode == Util.DragSelect onClicked: { - util.setSettingsValue("ui/dragMode", "select"); - currentDragMode = "select"; + util.dragMode = Util.DragSelect menuWin.showing = false; } width: window.buttonWidthSmall @@ -325,10 +308,9 @@ Item { Row { Button { text: "Off" - highlighted: currentShowMethod=="off" + highlighted: util.keyboardMode == Util.KeyboardOff onClicked: { - util.setSettingsValue("ui/vkbShowMethod", "off"); - currentShowMethod = "off"; + util.keyboardMode = Util.KeyboardOff window.setTextRenderAttributes(); menuWin.showing = false; } @@ -337,10 +319,9 @@ Item { } Button { text: "Fade" - highlighted: currentShowMethod=="fade" + highlighted: util.keyboardMode == Util.KeyboardFade onClicked: { - util.setSettingsValue("ui/vkbShowMethod", "fade"); - currentShowMethod = "fade"; + util.keyboardMode = Util.KeyboardFade window.setTextRenderAttributes(); menuWin.showing = false; } @@ -349,10 +330,9 @@ Item { } Button { text: "Move" - highlighted: currentShowMethod=="move" + highlighted: util.keyboardMode == Util.KeyboardMove onClicked: { - util.setSettingsValue("ui/vkbShowMethod", "move"); - currentShowMethod = "move"; + util.keyboardMode = Util.KeyboardMove window.setTextRenderAttributes(); menuWin.showing = false; } @@ -411,7 +391,7 @@ Item { height: window.headerHeight color: "#ffffff" font.pointSize: window.uiFontSize-1 - text: "VKB delay: " + vkbDelaySlider.keyboardFadeOutDelayLabel + " ms" + text: "VKB delay: " + vkbDelaySlider.keyboardFadeOutDelay + " ms" horizontalAlignment: Text.AlignHCenter } Rectangle { @@ -425,9 +405,8 @@ Item { Rectangle { id: vkbDelaySlider - property int keyboardFadeOutDelayLabel: keyboardFadeOutDelay + property int keyboardFadeOutDelay: util.keyboardFadeOutDelay - x: (keyboardFadeOutDelay-1000)/9000 * (vkbDelaySliderArea.width - vkbDelaySlider.width) y: window.headerHeight width: window.buttonWidthSmall radius: window.radiusLarge @@ -435,9 +414,13 @@ Item { color: "#202020" onXChanged: { if (vkbDelaySliderMA.drag.active) - vkbDelaySlider.keyboardFadeOutDelayLabel = + vkbDelaySlider.keyboardFadeOutDelay = Math.floor((1000+vkbDelaySlider.x/vkbDelaySliderMA.drag.maximumX*9000)/250)*250; } + Component.onCompleted: { + x = (keyboardFadeOutDelay-1000)/9000 * (vkbDelaySliderArea.width - vkbDelaySlider.width) + } + MouseArea { id: vkbDelaySliderMA anchors.fill: parent @@ -447,8 +430,7 @@ Item { drag.maximumX: vkbDelaySliderArea.width - vkbDelaySlider.width drag.onActiveChanged: { if (!drag.active) { - keyboardFadeOutDelay = vkbDelaySlider.keyboardFadeOutDelayLabel - util.setSettingsValue("ui/keyboardFadeOutDelay", keyboardFadeOutDelay); + util.keyboardFadeOutDelay = vkbDelaySlider.keyboardFadeOutDelay } } } diff --git a/textrender.cpp b/textrender.cpp index 7e27ada..4a87fa2 100644 --- a/textrender.cpp +++ b/textrender.cpp @@ -74,8 +74,7 @@ TextRender::TextRender(QQuickItem *parent) : iShowBufferScrollIndicator = false; - iFont = QFont(sUtil->settingsValue("ui/fontFamily").toString(), - sUtil->settingsValue("ui/fontSize").toInt()); + iFont = QFont(sUtil->fontFamily(), sUtil->fontSize()); iFont.setBold(false); QFontMetrics fontMetrics(iFont); iFontHeight = fontMetrics.height(); @@ -314,10 +313,10 @@ void TextRender::mouseMove(float eventX, float eventY) if(!sUtil->allowGestures()) return; - if(sUtil->settingsValue("ui/dragMode")=="scroll") { + if(sUtil->dragMode() == Util::DragScroll) { dragOrigin = scrollBackBuffer(eventPos, dragOrigin); } - else if(sUtil->settingsValue("ui/dragMode")=="select") { + else if(sUtil->dragMode() == Util::DragSelect) { selectionHelper(eventPos, true); } } @@ -330,7 +329,7 @@ void TextRender::mouseRelease(float eventX, float eventY) if(!sUtil->allowGestures()) return; - if(sUtil->settingsValue("ui/dragMode")=="gestures") { + if(sUtil->dragMode() == Util::DragGestures) { int xdist = qAbs(eventPos.x() - dragOrigin.x()); int ydist = qAbs(eventPos.y() - dragOrigin.y()); if(eventPos.x() < dragOrigin.x()-reqDragLength && xdist > ydist*2) @@ -342,10 +341,10 @@ void TextRender::mouseRelease(float eventX, float eventY) else if(eventPos.y() < dragOrigin.y()-reqDragLength && ydist > xdist*2) doGesture(PanUp); } - else if(sUtil->settingsValue("ui/dragMode")=="scroll") { + else if(sUtil->dragMode() == Util::DragScroll) { scrollBackBuffer(eventPos, dragOrigin); } - else if(sUtil->settingsValue("ui/dragMode")=="select") { + else if(sUtil->dragMode() == Util::DragSelect) { selectionHelper(eventPos, false); } } @@ -384,9 +383,6 @@ void TextRender::setFontPointSize(int psize) iFontHeight = fontMetrics.height(); iFontWidth = fontMetrics.maxWidth(); iFontDescent = fontMetrics.descent(); - - sUtil->setSettingsValue("ui/fontSize", psize); - emit fontSizeChanged(); } } @@ -411,7 +407,7 @@ QPointF TextRender::scrollBackBuffer(QPointF now, QPointF last) { int xdist = qAbs(now.x() - last.x()); int ydist = qAbs(now.y() - last.y()); - int fontSize = sUtil->settingsValue("ui/fontSize").toInt(); + int fontSize = fontPointSize(); int lines = ydist / fontSize; diff --git a/util.cpp b/util.cpp index bb3b82c..ed136cd 100644 --- a/util.cpp +++ b/util.cpp @@ -127,6 +127,21 @@ int Util::uiFontSize() return 12; } +int Util::fontSize() +{ + return settingsValue("ui/fontSize").toInt(); +} + +void Util::setFontSize(int size) +{ + if (size == fontSize()) { + return; + } + + setSettingsValue("ui/fontSize", size); + emit fontSizeChanged(); +} + void Util::keyPressFeedback() { if( !settingsValue("ui/keyPressFeedback").toBool() ) @@ -158,6 +173,182 @@ void Util::bellAlert() } } +QString Util::fontFamily() +{ + return settingsValue("ui/fontFamily").toString(); +} + +int Util::dragMode() +{ + QString mode = settingsValue("ui/dragMode").toString(); + + if (mode == "gestures") { + return DragGestures; + } else if (mode == "scroll") { + return DragScroll; + } else if (mode == "select") { + return DragSelect; + } else { + return DragOff; + } +} + +void Util::setDragMode(int mode) +{ + if (mode == dragMode()) { + return; + } + + QString modeString; + switch(mode) { + case DragGestures: + modeString = "gestures"; + break; + case DragScroll: + modeString = "scroll"; + break; + case DragSelect: + modeString = "select"; + break; + case DragOff: + default: + modeString = "off"; + } + + setSettingsValue("ui/dragMode", modeString); + emit dragModeChanged(); +} + +int Util::keyboardMode() +{ + QString mode = settingsValue("ui/vkbShowMethod").toString(); + + if (mode == "fade") { + return KeyboardFade; + } else if (mode == "move") { + return KeyboardMove; + } else { + return KeyboardOff; + } +} + +void Util::setKeyboardMode(int mode) +{ + if (mode == keyboardMode()) { + return; + } + + QString modeString; + switch(mode) { + case KeyboardFade: + modeString = "fade"; + break; + case KeyboardMove: + modeString = "move"; + break; + case KeyboardOff: + default: + modeString = "off"; + } + + setSettingsValue("ui/vkbShowMethod", modeString); + emit keyboardModeChanged(); +} + +int Util::keyboardFadeOutDelay() +{ + return settingsValue("ui/keyboardFadeOutDelay").toInt(); +} + +void Util::setKeyboardFadeOutDelay(int delay) +{ + if (delay == keyboardFadeOutDelay()) { + return; + } + + setSettingsValue("ui/keyboardFadeOutDelay", delay); + emit keyboardFadeOutDelayChanged(); +} + +QString Util::keyboardLayout() +{ + return settingsValue("ui/keyboardLayout").toString(); +} + +void Util::setKeyboardLayout(const QString &layout) +{ + if (layout == keyboardLayout()) { + return; + } + + setSettingsValue("ui/keyboardLayout", layout); + emit keyboardLayoutChanged(); +} + +int Util::extraLinesFromCursor() +{ + return settingsValue("ui/showExtraLinesFromCursor").toInt(); +} + +QString Util::charset() +{ + return settingsValue("terminal/charset").toString(); +} + +int Util::keyboardMargins() +{ + return settingsValue("ui/keyboardMargins").toInt(); +} + +int Util::orientationMode() +{ + QString mode = settingsValue("ui/orientationLockMode").toString(); + + if (mode == "auto") { + return OrientationAuto; + } else if (mode == "landscape") { + return OrientationLandscape; + } else { + return OrientationPortrait; + } +} + +void Util::setOrientationMode(int mode) +{ + if (mode == orientationMode()) { + return; + } + + QString modeString; + switch(mode) { + case OrientationAuto: + modeString = "auto"; + break; + case OrientationLandscape: + modeString = "landscape"; + break; + case OrientationPortrait: + default: + modeString = "portrait"; + } + + setSettingsValue("ui/orientationLockMode", modeString); + emit orientationModeChanged(); +} + +bool Util::showWelcomeScreen() +{ + return settingsValue("state/showWelcomeScreen").toBool(); +} + +void Util::setShowWelcomeScreen(bool value) +{ + if (value != showWelcomeScreen()) { + setSettingsValue("state/showWelcomeScreen", value); + emit showWelcomeScreenChanged(); + } +} + void Util::notifyText(QString text) { emit notify(text); diff --git a/util.h b/util.h index 8345f67..0bf0f41 100644 --- a/util.h +++ b/util.h @@ -34,8 +34,42 @@ class Util : public QObject Q_PROPERTY(int windowOrientation READ windowOrientation WRITE setWindowOrientation NOTIFY windowOrientationChanged) Q_PROPERTY(bool canPaste READ canPaste NOTIFY clipboardOrSelectionChanged) Q_PROPERTY(bool terminalHasSelection READ terminalHasSelection NOTIFY clipboardOrSelectionChanged) + Q_PROPERTY(QString fontFamily READ fontFamily CONSTANT) + Q_PROPERTY(int uiFontSize READ uiFontSize CONSTANT) + Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged) + Q_PROPERTY(int dragMode READ dragMode WRITE setDragMode NOTIFY dragModeChanged) + Q_PROPERTY(int keyboardMode READ keyboardMode WRITE setKeyboardMode NOTIFY keyboardModeChanged) + Q_PROPERTY(int keyboardFadeOutDelay READ keyboardFadeOutDelay WRITE setKeyboardFadeOutDelay NOTIFY keyboardFadeOutDelayChanged) + Q_PROPERTY(QString keyboardLayout READ keyboardLayout WRITE setKeyboardLayout NOTIFY keyboardLayoutChanged) + Q_PROPERTY(int extraLinesFromCursor READ extraLinesFromCursor CONSTANT) + Q_PROPERTY(QString charset READ charset CONSTANT) + Q_PROPERTY(int keyboardMargins READ keyboardMargins CONSTANT) + Q_PROPERTY(int orientationMode READ orientationMode WRITE setOrientationMode NOTIFY orientationModeChanged) + Q_PROPERTY(bool showWelcomeScreen READ showWelcomeScreen WRITE setShowWelcomeScreen NOTIFY showWelcomeScreenChanged) + Q_ENUMS(KeyboardMode) + Q_ENUMS(DragMode) + Q_ENUMS(OrientationMode) public: + enum KeyboardMode { + KeyboardOff, + KeyboardFade, + KeyboardMove + }; + + enum DragMode { + DragOff, + DragGestures, + DragScroll, + DragSelect + }; + + enum OrientationMode { + OrientationAuto, + OrientationLandscape, + OrientationPortrait + }; + explicit Util(QSettings* settings, QObject *parent = 0); virtual ~Util(); @@ -53,7 +87,10 @@ class Util : public QObject Q_INVOKABLE QVariant settingsValue(QString key); Q_INVOKABLE void setSettingsValue(QString key, QVariant value); - Q_INVOKABLE int uiFontSize(); + int uiFontSize(); + + int fontSize(); + void setFontSize(int size); Q_INVOKABLE void keyPressFeedback(); Q_INVOKABLE void keyReleaseFeedback(); @@ -69,6 +106,30 @@ class Util : public QObject bool allowGestures() { return iAllowGestures; } void setAllowGestures(bool a) { if(iAllowGestures!=a) { iAllowGestures=a; emit allowGesturesChanged(); } } + QString fontFamily(); + + int dragMode(); + void setDragMode(int mode); + + int keyboardMode(); + void setKeyboardMode(int mode); + + int keyboardFadeOutDelay(); + void setKeyboardFadeOutDelay(int delay); + + QString keyboardLayout(); + void setKeyboardLayout(const QString &layout); + + int extraLinesFromCursor(); + QString charset(); + int keyboardMargins(); + + int orientationMode(); + void setOrientationMode(int mode); + + bool showWelcomeScreen(); + void setShowWelcomeScreen(bool value); + static bool charIsHexDigit(QChar ch); signals: @@ -78,6 +139,13 @@ class Util : public QObject void clipboardOrSelectionChanged(); void windowTitleChanged(); void windowOrientationChanged(); + void fontSizeChanged(); + void dragModeChanged(); + void keyboardModeChanged(); + void keyboardFadeOutDelayChanged(); + void keyboardLayoutChanged(); + void orientationModeChanged(); + void showWelcomeScreenChanged(); private: Q_DISABLE_COPY(Util)