]> rtime.felk.cvut.cz Git - coffee/qtwebbrowser.git/commitdiff
Add SettingsView and refactor settings handling to be generic
authorAndras Becsi <andras.becsi@theqtcompany.com>
Tue, 4 Aug 2015 17:30:24 +0000 (19:30 +0200)
committerAndras Becsi <andras.becsi@theqtcompany.com>
Wed, 12 Aug 2015 15:22:03 +0000 (17:22 +0200)
This connects the simplest settings first, for toggling
offTheRecord we need more advanced logic.

src/engine.cpp
src/engine.h
src/qml/BrowserWindow.qml
src/qml/HomeScreen.qml
src/qml/NavigationBar.qml
src/qml/PageView.qml
src/qml/SettingsView.qml [new file with mode: 0644]
src/resources.qrc
src/src.pro

index 093a0d0fd96d1e8cbca560a17e4f450fd0d78dfc..fae28f5662d9fbbfd38da645a93fe60e2e99d010 100644 (file)
@@ -43,7 +43,7 @@
 
 Engine::Engine(QObject *parent)
     : QObject(parent)
-    , m_bookmarks(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) % QDir::separator() % "bookmarks.ini", QSettings::IniFormat, this)
+    , m_settings(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) % QDir::separator() % "settings.ini", QSettings::IniFormat, this)
 {
 }
 
@@ -72,12 +72,12 @@ QString Engine::fallbackColor()
     return colors[index];
 }
 
-QString Engine::restoreBookmarks()
+QString Engine::restoreSetting(const QString &name, const QString &defaultValue)
 {
-    return m_bookmarks.value("bookmarks").toString();
+    return m_settings.value(name, defaultValue).toString();
 }
 
-void Engine::saveBookmarks(const QString & list)
+void Engine::saveSetting(const QString &name, const QString &value)
 {
-    m_bookmarks.setValue("bookmarks", list);
+    m_settings.setValue(name, value);
 }
index c9acdce0c12bc529e58fd282fdbacf97078e9c9a..e905d7256cd09d665366d454d53ff1001e5eeba8 100644 (file)
@@ -78,7 +78,7 @@ class Engine : public QObject {
 
     Q_PROPERTY(QObject * rootWindow READ rootWindow FINAL CONSTANT)
 
-    QSettings m_bookmarks;
+    QSettings m_settings;
 
 public:
     Engine(QObject *parent);
@@ -90,8 +90,8 @@ public:
     Q_INVOKABLE QUrl fromUserInput(const QString& userInput);
     Q_INVOKABLE QString domainFromString(const QString& urlString);
     Q_INVOKABLE QString fallbackColor();
-    Q_INVOKABLE QString restoreBookmarks();
-    Q_INVOKABLE void saveBookmarks(const QString & list);
+    Q_INVOKABLE QString restoreSetting(const QString &name, const QString &defaultValue = QString());
+    Q_INVOKABLE void saveSetting(const QString &name, const QString &value);
 };
 
 #endif // ENGINE_H
index 3cf2b15765c8a362542a35bdb2d9b16594a4401c..245c49daf1f134c473332e11d1398b26ddb04d84 100644 (file)
@@ -44,7 +44,6 @@ import QtQuick.Controls.Styles 1.0
 import QtQuick.Layouts 1.0
 import QtQuick.Window 2.1
 import QtQuick.Controls.Private 1.0
-import Qt.labs.settings 1.0
 import QtQuick.Dialogs 1.2
 
 import "assets"
@@ -82,15 +81,7 @@ Item {
     width: 1024
     height: 600
     visible: true
-/*
-    Settings {
-        id : appSettings
-        property alias autoLoadImages: loadImages.checked;
-        property alias javaScriptEnabled: javaScriptEnabled.checked;
-        property alias errorPageEnabled: errorPageEnabled.checked;
-        property alias pluginsEnabled: pluginsEnabled.checked;
-    }
-*/
+
     Action {
         shortcut: "Ctrl+D"
         onTriggered: {
@@ -153,8 +144,24 @@ Item {
         onOptionClicked: newTabAction.trigger()
     }
 
+    UIToolBar {
+        id: settingsToolBar
+        z: 5
+        title: qsTr("Settings")
+        visible: opacity != 0.0
+
+        anchors {
+            left: parent.left
+            right: parent.right
+            top: navigation.top
+        }
+
+        onDoneClicked: {
+            settingsView.state = "disabled"
+            tabView.interactive = true
         }
     }
+
     NavigationBar {
         id: navigation
 
@@ -163,6 +170,7 @@ Item {
             right: parent.right
         }
     }
+
     PageView {
         id: tabView
         interactive: !sslDialog.visible && homeScreen.state == "disabled"
@@ -247,6 +255,10 @@ Item {
             left: parent.left
             right: parent.right
         }
+    }
+
+    SettingsView {
+        id: settingsView
         height: parent.height - toolBarSize
         anchors {
             top: navigation.bottom
index 984b3cc69c8111388c1654a2c14ef5642511bc77..7ef446e31f5b6a220d1ff0ba76fb581b13f32d4c 100644 (file)
@@ -118,7 +118,7 @@ Rectangle {
         id: listModel
         Component.onCompleted: {
             listModel.clear()
-            var string = engine.restoreBookmarks()
+            var string = engine.restoreSetting("bookmarks")
             if (!string)
                 return
             var list = JSON.parse(string)
@@ -134,7 +134,7 @@ Rectangle {
             }
             if (!list.length)
                 return
-            engine.saveBookmarks(JSON.stringify(list))
+            engine.saveSetting("bookmarks", JSON.stringify(list))
         }
     }
 
@@ -473,6 +473,7 @@ Rectangle {
                 font.family: defaultFontFamily
                 font.pixelSize: message.font.pixelSize
                 text: "Oops!..."
+                color: iconOverlayColor
             }
         }
 
@@ -496,12 +497,12 @@ Rectangle {
                 top: message.bottom
                 left: parent.left
                 right: parent.right
-                bottomMargin: toolBarSize
+                bottomMargin: 70
             }
             UIButton {
                 color: uiColor
-                implicitWidth: 160
-                implicitHeight: 65
+                implicitWidth: 180
+                implicitHeight: 70
                 visible: messageBox.state != "empty"
                 anchors {
                     horizontalCenter: parent.horizontalCenter
index 29114aa6666239db73061efe00dcc55035460799..7017d2d9f3acde20db315dbc9b131b6a9b7a9c55 100644 (file)
@@ -20,7 +20,10 @@ ToolBar {
     }
 
     function refresh() {
-        bookmarksButton.bookmarked = homeScreen.contains(urlBar.text) !== -1
+        if (urlBar.text == "")
+            bookmarksButton.bookmarked = false
+        else
+            bookmarksButton.bookmarked = homeScreen.contains(urlBar.text) !== -1
     }
 
     state: "enabled"
@@ -285,6 +288,7 @@ ToolBar {
         }
         UIButton {
             id: bookmarksButton
+            enabled: urlBar.text != ""
             property bool bookmarked: false
             source: bookmarked ? "qrc:///star_checked" : "qrc:///star"
             onClicked: {
@@ -314,9 +318,10 @@ ToolBar {
         UIButton {
             id: settingsButton
             source: "qrc:///settings"
-            checkable: true
-            checked: false
-            onClicked: tabView.interactive = !checked
+            onClicked: {
+                tabView.interactive = false
+                settingsView.state = "enabled"
+            }
         }
     }
     ProgressBar {
index 1ada1b47edea98112e6ac6fbbac4aed84d0055dd..58bdfb8950ff59cb1ec1dc0d5eab1aaf9c25ec3b 100644 (file)
@@ -138,12 +138,11 @@ Rectangle {
                 // Trigger a refresh to check if the new url is bookmarked.
                 onUrlChanged: navigation.refresh()
 
-/*
-                settings.autoLoadImages: appSettings.autoLoadImages
-                settings.javascriptEnabled: appSettings.javaScriptEnabled
-                settings.errorPageEnabled: appSettings.errorPageEnabled
-                settings.pluginsEnabled: appSettings.pluginsEnabled
-*/
+
+                settings.autoLoadImages: settingsView.autoLoadImages
+                settings.javascriptEnabled: !settingsView.javaScriptDisabled
+                settings.pluginsEnabled: settingsView.pluginsEnabled
+
                 onLoadingChanged: {
                     if (loading)
                         navigation.state = "enabled"
diff --git a/src/qml/SettingsView.qml b/src/qml/SettingsView.qml
new file mode 100644 (file)
index 0000000..e373960
--- /dev/null
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtBrowser project.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv2 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.5
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.4
+import Qt.labs.settings 1.0
+
+Rectangle {
+    id: root
+
+    property bool autoLoadImages: get(0)
+    property bool javaScriptDisabled: get(1)
+    property bool httpDiskCacheEnabled: get(2)
+    property bool pluginsEnabled: get(3)
+    property bool privateBrowsingEnabled: get(4)
+
+    property var defaultValues: [{ "name": "Auto Load Images", "active": true },
+        { "name": "Disable JavaScript", "active": false },
+        { "name": "Enable HTTP Disk Cache", "active": true },
+        { "name": "Enable Plugins", "active": false },
+        { "name": "Private Browsing", "active": false }]
+
+    function get(index) {
+        var elem = listModel.get(index)
+        if (!elem)
+            return defaultValues[index].active
+        return elem.active
+    }
+
+    state: "enabled"
+
+    states: [
+        State {
+            name: "enabled"
+            AnchorChanges {
+                target: root
+                anchors.top: navigation.bottom
+            }
+            PropertyChanges {
+                target: settingsToolBar
+                opacity: 1.0
+            }
+        },
+        State {
+            name: "disabled"
+            AnchorChanges {
+                target: root
+                anchors.top: root.parent.bottom
+            }
+            PropertyChanges {
+                target: settingsToolBar
+                opacity: 0.0
+            }
+        }
+    ]
+
+    transitions: Transition {
+        AnchorAnimation { duration: animationDuration; easing.type : Easing.InSine }
+    }
+
+    ListModel {
+        id: listModel
+    }
+
+    ListView {
+        id: listView
+        leftMargin: 230
+        rightMargin: leftMargin
+        anchors.fill: parent
+        model: listModel
+        delegate: Rectangle {
+            height: 100
+            width: 560
+            Text {
+                anchors.verticalCenter: parent.verticalCenter
+                font.family: defaultFontFamily
+                font.pixelSize: 28
+                text: name
+                color: tch.checked ? "black" : "#929495"
+            }
+            Rectangle {
+                anchors {
+                    right: parent.right
+                    verticalCenter: parent.verticalCenter
+                }
+                Switch {
+                    id: tch
+                    anchors.centerIn: parent
+                    checked: active
+                    onClicked: {
+                        listModel.get(index).active = checked
+                        listView.save()
+                    }
+                    style: SwitchStyle {
+                        handle: Rectangle {
+                            width: 42
+                            height: 42
+                            radius: height / 2
+                            color: "white"
+                            border.color: control.checked ? "#5caa14" : "#9b9b9b"
+                            border.width: 1
+                        }
+
+                        groove: Rectangle {
+                            implicitWidth: 72
+                            height: 42
+                            radius: height / 2
+                            border.color: control.checked ? "#5caa14" : "#9b9b9b"
+                            color: control.checked ? "#5cff14" : "white"
+                            border.width: 1
+                        }
+                    }
+                }
+            }
+        }
+        function save() {
+            var list = []
+            for (var i = 0; i < listModel.count; ++i) {
+                var elem = listModel.get(i)
+                list[i] = { "name": elem.name, "active": elem.active }
+            }
+
+            if (!list.length)
+                return
+
+            engine.saveSetting("settings", JSON.stringify(list))
+        }
+
+        Component.onCompleted: {
+            var string = engine.restoreSetting("settings", JSON.stringify(defaultValues))
+            var list = JSON.parse(string)
+            for (var i = 0; i < list.length; ++i) {
+                var elem = list[i]
+                listModel.append({ "name": elem.name, "active": elem.active })
+            }
+            listView.forceLayout()
+        }
+        Component.onDestruction: save()
+    }
+}
index 521da57bec92b4e043ddcc9a6ac25504f860eba1..7eada4932399580c3ff5f765237c4ff33f212ddf 100644 (file)
@@ -6,6 +6,7 @@
         <file>qml/PageView.qml</file>
         <file>qml/NavigationBar.qml</file>
         <file>qml/HomeScreen.qml</file>
+        <file>qml/SettingsView.qml</file>
         <file>qml/assets/UIButton.qml</file>
         <file>qml/assets/UIToolBar.qml</file>
         <file alias="home">qml/assets/icons/Btn_Home.png</file>
index 82a9f92556187d2f0c3a7650af192ad2b79445e3..913ae42d68c9be0d93e761ab166c9a183c1b5849 100644 (file)
@@ -26,6 +26,7 @@ OTHER_FILES = \
     qml/PageView.qml \
     qml/NavigationBar.qml \
     qml/HomeScreen.qml \
+    qml/SettingsView.qml \
 
 QT += qml quick webengine
 QT_PRIVATE += quick-private gui-private core-private