summaryrefslogtreecommitdiff
path: root/src/mobile/qml/WindowManager.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/mobile/qml/WindowManager.qml')
-rw-r--r--src/mobile/qml/WindowManager.qml291
1 files changed, 291 insertions, 0 deletions
diff --git a/src/mobile/qml/WindowManager.qml b/src/mobile/qml/WindowManager.qml
new file mode 100644
index 0000000..3a66219
--- /dev/null
+++ b/src/mobile/qml/WindowManager.qml
@@ -0,0 +1,291 @@
+import QtQuick 2.1
+import BibleTime 1.0
+
+
+Rectangle {
+ id: windowArea
+
+ property var windows: []
+ property int single: 0
+ property int tabLayout: 1
+ property int autoTile: 2
+ property int autoTileHor: 3
+ property int autoTileVer: 4
+ property int windowLayout: single
+
+ function setCurrentTabbedWindow(index) {
+ tabbedWindows.current = index;
+ }
+
+ function setWindowArrangement(arrangement) {
+ if (arrangement < single || arrangement > autoTileVer)
+ return;
+ windowLayout = arrangement;
+ layoutWindows();
+ }
+
+ function createWindowMenus() {
+ windowsModel.clear();
+ for (var i=0; i<windows.length; ++i) {
+ var window = windows[i];
+ windowsModel.append (
+ { title: window.title, action: i.toString() }
+ )
+ }
+ windowTitlesMenus.model = windowsModel
+ windowTitlesMenus.visible = true;
+ }
+
+
+ function newWindow() {
+ moduleChooser.moduleSelected.connect(openWindowSlot);
+ moduleChooser.visible = true;
+ }
+
+ function openWindowSlot() {
+ moduleChooser.moduleSelected.disconnect(openWindowSlot);
+ openWindow(moduleChooser.selectedCategory, moduleChooser.selectedModule)
+ }
+
+ function openWindow(category, module) {
+ if (category == "Bibles")
+ component = Qt.createComponent("Window.qml");
+ else if (category == "Commentaries")
+ component = Qt.createComponent("Window.qml");
+ else if (category == "Books")
+ component = Qt.createComponent("Window.qml");
+ else {
+ console.log(category, " are not yet supported.");
+ return;
+ }
+
+ window = component.createObject(null, {"width": 250, "height": 200});
+ window.setModule(module);
+
+ if (window == null) {
+ // Error Handling
+ console.log("Error creating object");
+ }
+ else {
+ windows.push(window)
+ layoutWindows();
+ var curWindow = windows.length -1;
+ selectWindow(curWindow);
+ }
+ }
+
+ function layoutTiles(rows, columns)
+ {
+ gridWindows.columns = columns;
+ gridWindows.rows = rows;
+ var width = gridWindows.width/columns -2;
+ var height = gridWindows.height/rows -2;
+
+ for (var i=0; i<windows.length; ++i) {
+ var window = windows[i];
+ window.anchors.fill = undefined
+ window.height = height;
+ window.width = width;
+ window.parent = gridWindows;
+ }
+ }
+
+ function arrangeSingleWindow() {
+ tabbedWindows.z = 1;
+ tabbedWindows.tabVisible = false;
+ for (var i=0; i<windows.length; ++i) {
+ var window = windows[i];
+ window.parent = tabbedWindowsStack;
+ window.anchors.fill = tabbedWindowsStack
+ }
+ }
+
+ function arrangeTabbedWindows() {
+ tabbedWindows.z = 1;
+ tabbedWindows.tabVisible = true;
+ for (var i=0; i<windows.length; ++i) {
+ var window = windows[i];
+ window.parent = tabbedWindowsStack;
+ window.anchors.fill = tabbedWindowsStack
+ }
+ }
+
+ function arrangeTiledWindows() {
+ gridWindows.z = 1;
+ var columns = 1;
+ var rows = 1;
+ var count = windows.length;
+
+ if (windowLayout == autoTile) {
+ if (count > 1) {
+ columns = 2
+ rows = Math.floor((count+1)/2);
+ }
+ }
+ else if (windowLayout == autoTileHor)
+ {
+ rows = count;
+ }
+ else if (windowLayout == autoTileVer)
+ {
+ columns = count;
+ }
+ layoutTiles(rows, columns);
+ }
+
+ function layoutWindows() {
+ tabbedWindows.z = -2;
+ gridWindows.z = -3;
+
+ if (windowLayout == single) {
+ arrangeSingleWindow();
+ }
+ else if (windowLayout == tabLayout) {
+ arrangeTabbedWindows();
+ }
+ else {
+ arrangeTiledWindows();
+ }
+ }
+
+ function selectWindow(n) {
+ if (windowLayout == tabLayout || windowLayout == single) {
+ tabbedWindows.current = n;
+ }
+ }
+
+// anchors.top: spacer.bottom
+// anchors.left: parent.left
+// anchors.right: parent.right
+// anchors.bottom: parent.bottom
+// color: "#646464"
+
+ Grid {
+ id: gridWindows
+
+ objectName: "gridWindows"
+ anchors.fill: parent
+ columns: 2
+ spacing: 2
+ z: 2
+ }
+
+ Item {
+ id: tabbedWindows
+
+ default property alias content: tabbedWindowsStack.children
+ property bool tabVisible: true
+ property int current: 0
+
+ function changeTabs() {
+ setOpacities();
+ }
+
+ function setOpacities() {
+ for (var i = 0; i < tabbedWindowsStack.children.length; ++i) {
+ tabbedWindowsStack.children[i].z = (i == current ? 1 : 0)
+ }
+ }
+
+ objectName: "tabbedWindows"
+ anchors.fill: parent
+ onCurrentChanged: changeTabs()
+ Component.onCompleted: changeTabs()
+
+ Row {
+ id: header
+
+ objectName: "header"
+
+ Repeater {
+ id: tabRepeater
+
+ function setColors() {
+ if (tabbedWindows.current == tabbedWindowsStack.index) {
+ tabImage.color = btStyle.windowTabSelected
+ tabText.color = btStyle.windowTabTextSelected
+ }
+ else {
+ tabImage.color = btStyle.windowTab
+ tabText.color = btStyle.windowTabText
+ }
+ }
+
+ model: tabbedWindowsStack.children.length
+ delegate: Rectangle {
+ id: tab
+
+ function calculateTabWidth() {
+ var tabWidth = (tabbedWindows.width) / tabbedWindowsStack.children.length;
+ return tabWidth;
+ }
+
+ visible: tabbedWindows.tabVisible
+ //width: (tabbedWindows.width) / tabbedWindowsStack.children.length;
+ width: {
+ calculateTabWidth()
+ }
+ height: 36
+
+ Rectangle {
+ id: tabBorder
+ width: parent.width; height: 1
+ anchors { bottom: parent.bottom; bottomMargin: 1 }
+ color: "#acb2c2"
+ }
+
+ Rectangle {
+ id: tabImage
+
+ anchors { fill: parent; leftMargin: 8; topMargin: 4; rightMargin: 8 }
+ color: {
+ if (tabbedWindows.current == index)
+ return btStyle.windowTabSelected
+ else
+ return btStyle.windowTab
+ }
+ border.color: btStyle.windowTab
+ border.width: 2
+
+ Text {
+ id: tabText
+
+ horizontalAlignment: Qt.AlignHCenter;
+ verticalAlignment: Qt.AlignVCenter
+ anchors.fill: parent
+ anchors.topMargin: 6
+ font.pointSize: btStyle.uiFontPointSize -3
+ text: tabbedWindowsStack.children[index].title
+ elide: Text.ElideLeft
+ color: {
+ if (tabbedWindows.current == index)
+ return btStyle.windowTabTextSelected
+ else
+ return btStyle.windowTabText
+ }
+ }
+ }
+
+ MouseArea {
+ id: tabMouseArea
+
+ anchors.fill: parent
+ onClicked: {
+ tabbedWindows.current = index
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ id: tabbedWindowsStack
+
+ objectName: "tabbedWindowsStack"
+ width: parent.width
+ anchors.top: header.bottom;
+ anchors.bottom: tabbedWindows.bottom
+ }
+ }
+
+}