]> Some of my projects - tim.git/commitdiff
Init
authorAPTX <marek321@gmail.com>
Tue, 30 Nov 2010 12:01:22 +0000 (13:01 +0100)
committerAPTX <marek321@gmail.com>
Tue, 30 Nov 2010 12:01:22 +0000 (13:01 +0100)
28 files changed:
.gitignore [new file with mode: 0644]
main.cpp [new file with mode: 0644]
qml/LoginScreen.qml [new file with mode: 0644]
qml/tim-game/Components/Button.qml [new file with mode: 0644]
qml/tim-game/Components/ChatView.qml [new file with mode: 0644]
qml/tim-game/Components/HighScoreForm.qml [new file with mode: 0644]
qml/tim-game/Components/Input.qml [new file with mode: 0644]
qml/tim-game/Components/LoginForm.qml [new file with mode: 0644]
qml/tim-game/Components/RegistrationForm.qml [new file with mode: 0644]
qml/tim-game/Components/ToolBar.qml [new file with mode: 0644]
qml/tim-game/Components/images/gloss.png [new file with mode: 0644]
qml/tim-game/Components/images/lineedit.png [new file with mode: 0644]
qml/tim-game/Components/images/lineedit.sci [new file with mode: 0644]
qml/tim-game/Components/images/loading.png [new file with mode: 0644]
qml/tim-game/Components/images/quit.png [new file with mode: 0644]
qml/tim-game/Components/images/stripes.png [new file with mode: 0644]
qml/tim-game/Components/images/titlebar.png [new file with mode: 0644]
qml/tim-game/Components/images/titlebar.sci [new file with mode: 0644]
qml/tim-game/Components/images/toolbutton.png [new file with mode: 0644]
qml/tim-game/Components/images/toolbutton.sci [new file with mode: 0644]
qml/tim-game/main.qml [new file with mode: 0644]
qmlapplicationviewer/qmlapplicationviewer.cpp [new file with mode: 0644]
qmlapplicationviewer/qmlapplicationviewer.h [new file with mode: 0644]
qmlapplicationviewer/qmlapplicationviewer.pri [new file with mode: 0644]
tim-game.desktop [new file with mode: 0644]
tim-game.png [new file with mode: 0644]
tim-game.pro [new file with mode: 0644]
tim-game.svg [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..2f8834d
--- /dev/null
@@ -0,0 +1,75 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+.qmake.cache
+tags
+.DS_Store
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+
+# qtcreator generated files
+*.pro.user
+*.pro.user.*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.exp
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Directories to ignore
+# ---------------------
+
+debug
+release
+lib/qtsingleapplication/lib
+lib/qtsingleapplication/examples
+lib/qtsingleapplication/doc
+.tmp
+qtc-gdbmacros
+
+# Binaries
+# --------
+build/aniplayer
+build/*.dll
+build/*.lib
+build/*.exe
+build/*.so*
+
+
diff --git a/main.cpp b/main.cpp
new file mode 100644 (file)
index 0000000..2438285
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,17 @@
+#include <QtGui/QApplication>
+//#include <QtOpenGL/QGLWidget>
+
+#include "qmlapplicationviewer.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    QmlApplicationViewer viewer;
+    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
+    viewer.setMainQmlFile(QLatin1String("qml/tim-game/main.qml"));
+//     viewer.setViewport(new QGLWidget());
+    viewer.show();
+
+    return app.exec();
+}
diff --git a/qml/LoginScreen.qml b/qml/LoginScreen.qml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/qml/tim-game/Components/Button.qml b/qml/tim-game/Components/Button.qml
new file mode 100644 (file)
index 0000000..a77f786
--- /dev/null
@@ -0,0 +1,49 @@
+import Qt 4.7
+
+Item {
+    id: container
+
+    signal clicked
+
+    property string text
+    property bool keyUsing: false
+
+    BorderImage {
+        id: buttonImage
+        source: "images/toolbutton.sci"
+        width: container.width; height: container.height
+    }
+    BorderImage {
+        id: pressed
+        opacity: 0
+        source: "images/toolbutton.sci"
+        width: container.width; height: container.height
+    }
+    MouseArea {
+        id: mouseRegion
+        anchors.fill: buttonImage
+        onClicked: { container.clicked(); }
+    }
+    Text {
+        id: btnText
+        color: if(container.keyUsing){"#D0D0D0";} else {"#FFFFFF";}
+        anchors.centerIn: buttonImage; font.bold: true
+        text: container.text; style: Text.Raised; styleColor: "black"
+               font.pixelSize: 24
+    }
+    states: [
+        State {
+            name: "Pressed"
+            when: mouseRegion.pressed == true
+            PropertyChanges { target: pressed; opacity: 1 }
+        },
+        State {
+            name: "Focused"
+            when: container.activeFocus == true
+            PropertyChanges { target: btnText; color: "#FFFFFF" }
+        }
+    ]
+    transitions: Transition {
+        ColorAnimation { target: btnText; }
+    }
+}
diff --git a/qml/tim-game/Components/ChatView.qml b/qml/tim-game/Components/ChatView.qml
new file mode 100644 (file)
index 0000000..e8f54ff
--- /dev/null
@@ -0,0 +1,66 @@
+import Qt 4.7
+
+FocusScope {
+       id: wrapper
+
+       ListView {
+               id: chatView
+               x: 0; y: 0
+               height: parent.height - 80
+               anchors.right: parent.right
+               anchors.left: parent.left
+               anchors.top: parent.top
+               anchors.topMargin: 0
+               anchors.rightMargin: 0
+               anchors.leftMargin: 0
+       }
+
+       Input {
+               id: inputLine
+               focus: true
+               anchors.top: chatView.bottom
+               anchors.topMargin: 0
+
+               anchors.right: sendButton.left
+               anchors.rightMargin: 0
+               anchors.bottom: parent.bottom
+               anchors.bottomMargin: 0
+               anchors.left: parent.left
+               anchors.leftMargin: 0
+
+               Keys.onReturnPressed: inputLine.sendMessage();
+               Keys.onEnterPressed: inputLine.sendMessage();
+
+               function sendMessage() {
+                       var message = inputLine.text;
+                       inputLine.text = "";
+
+                       if (message == "/quit") {
+                               exitChatView()
+                               return;
+                       }
+               }
+
+               function exitChatView() {
+                       screen.focus = true;
+                       screen.state = ""
+               }
+       }
+       Button {
+               width: 80
+               id: sendButton
+               text: ">"
+               anchors.bottom: parent.bottom
+               anchors.bottomMargin: 0
+               anchors.top: chatView.bottom
+               anchors.topMargin: 0
+               anchors.right: parent.right
+               anchors.rightMargin: 0
+
+               Keys.onReturnPressed: inputLine.sendMessage();
+               Keys.onEnterPressed: inputLine.sendMessage();
+               Keys.onSelectPressed: inputLine.sendMessage();
+               Keys.onSpacePressed: inputLine.sendMessage();
+               onClicked: inputLine.sendMessage();
+       }
+}
diff --git a/qml/tim-game/Components/HighScoreForm.qml b/qml/tim-game/Components/HighScoreForm.qml
new file mode 100644 (file)
index 0000000..c0fa2f4
--- /dev/null
@@ -0,0 +1,81 @@
+import Qt 4.7
+
+FocusScope {
+    id: wrapper
+    Column {
+        anchors.centerIn: parent
+        spacing: 20
+        Column{
+            spacing: 4
+            Text {
+                               text: "High Score:"
+                font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                horizontalAlignment: Qt.AlignRight
+            }
+            Input{
+                               id: highScore
+                               KeyNavigation.backtab: backButton
+                               KeyNavigation.tab: submitButton
+                               onAccepted: submitButton.submitScore();
+                focus: true
+                               validator: IntValidator{ bottom: 0}
+                       }
+        }
+               Row {
+                       spacing: 4
+                       Button {
+                               width: 120
+                               height: 64
+                               id: submitButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Submit"
+                               KeyNavigation.backtab: highScore
+                               KeyNavigation.tab: backButton
+                               Keys.onReturnPressed: submitButton.submitScore();
+                               Keys.onEnterPressed: submitButton.submitScore();
+                               Keys.onSelectPressed: submitButton.submitScore();
+                               Keys.onSpacePressed: submitButton.submitScore();
+                               onClicked: submitButton.submitScore();
+
+                               function submitScore() {
+                                       if (wrapper.state=="invalidinput")
+                                               return;
+                                       screen.focus = true;
+                                       screen.state = "";
+                               }
+                       }
+
+                       Button {
+                               width: 120
+                               height: 64
+                               id: backButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Go Back"
+                               KeyNavigation.backtab: submitButton
+                               KeyNavigation.tab: highScore
+                               Keys.onReturnPressed: backButton.goBack();
+                               Keys.onEnterPressed: backButton.goBack();
+                               Keys.onSelectPressed: backButton.goBack();
+                               Keys.onSpacePressed: backButton.goBack();
+                               onClicked: backButton.goBack();
+
+                               function goBack() {
+                                       screen.focus = true;
+                                       screen.state = ""
+                               }
+                       }
+               }
+    }
+    states:
+    State {
+        name: "invalidinput"
+               when: highScore.text==""
+               PropertyChanges { target: submitButton ; opacity: 0.6 ; }
+    }
+    transitions:
+    Transition {
+               NumberAnimation { target: submitButton; property: "opacity"; duration: 200 }
+    }
+}
diff --git a/qml/tim-game/Components/Input.qml b/qml/tim-game/Components/Input.qml
new file mode 100644 (file)
index 0000000..bae3dec
--- /dev/null
@@ -0,0 +1,26 @@
+import Qt 4.7
+
+FocusScope {
+    id:container
+       width: 240
+       height: 52
+    BorderImage { source: "images/lineedit.sci"; anchors.fill: parent }
+    signal accepted
+    property alias text: input.text
+       property alias item: input
+       property alias echoMode: input.echoMode
+       property alias validator: input.validator
+    TextInput{
+        id: input
+        width: parent.width - 12
+        anchors.centerIn: parent
+        maximumLength:21
+               font.pixelSize: 24;
+        font.bold: true
+        color: "#151515"; selectionColor: "mediumseagreen"
+        focus: true
+        onAccepted:{container.accepted()}
+        text: ""
+        selectByMouse: true
+    }
+}
diff --git a/qml/tim-game/Components/LoginForm.qml b/qml/tim-game/Components/LoginForm.qml
new file mode 100644 (file)
index 0000000..e023c9c
--- /dev/null
@@ -0,0 +1,92 @@
+import Qt 4.7
+
+FocusScope {
+    id: wrapper
+    Column {
+        anchors.centerIn: parent
+        spacing: 20
+        Column{
+            spacing: 4
+            Text {
+                               text: "User:"
+                font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                horizontalAlignment: Qt.AlignRight
+            }
+            Input{
+                               id: user
+                               KeyNavigation.backtab: loginButton
+                               KeyNavigation.tab:pass
+                               onAccepted: submitButton.submitScore();
+                focus: true
+            }
+            Text {
+                               text: "Pass:"
+                font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                horizontalAlignment: Qt.AlignRight
+            }
+            Input{
+                               id: pass
+                               KeyNavigation.backtab: user
+                               KeyNavigation.tab: loginButton
+                               echoMode: TextInput.PasswordEchoOnEdit
+                       }
+        }
+               Row {
+                       spacing: 4
+                       Button {
+                               width: 120
+                               height: 64
+                               id: loginButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Log In"
+                               KeyNavigation.backtab: pass
+                               KeyNavigation.tab: backButton
+                               Keys.onReturnPressed: loginButton.doLogin();
+                               Keys.onEnterPressed: loginButton.doLogin();
+                               Keys.onSelectPressed: loginButton.doLogin();
+                               Keys.onSpacePressed: loginButton.doLogin();
+                               onClicked: loginButton.doLogin();
+
+                               function doLogin() {
+                                       if (wrapper.state=="invalidinput")
+                                               return;
+                                       screen.focus = true;
+                                       screen.state = "";
+                                       screen.logIn();
+                               }
+                       }
+
+                       Button {
+                               width: 120
+                               height: 64
+                               id: backButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Go Back"
+                               KeyNavigation.backtab: loginButton
+                               KeyNavigation.tab: user
+                               Keys.onReturnPressed: backButton.goBack();
+                               Keys.onEnterPressed: backButton.goBack();
+                               Keys.onSelectPressed: backButton.goBack();
+                               Keys.onSpacePressed: backButton.goBack();
+                               onClicked: backButton.goBack();
+
+                               function goBack() {
+                                       screen.focus = true;
+                                       screen.state = ""
+                               }
+                       }
+               }
+    }
+    states:
+    State {
+        name: "invalidinput"
+               when: user.text=="" || pass.text==""
+               PropertyChanges { target: loginButton ; opacity: 0.6 ; }
+    }
+    transitions:
+    Transition {
+               NumberAnimation { target: loginButton; property: "opacity"; duration: 200 }
+    }
+}
diff --git a/qml/tim-game/Components/RegistrationForm.qml b/qml/tim-game/Components/RegistrationForm.qml
new file mode 100644 (file)
index 0000000..b9bd13e
--- /dev/null
@@ -0,0 +1,101 @@
+import Qt 4.7
+
+FocusScope {
+    id: wrapper
+    Column {
+        anchors.centerIn: parent
+        spacing: 20
+        Column{
+            spacing: 4
+            Text {
+                               text: "User:"
+                font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                horizontalAlignment: Qt.AlignRight
+            }
+            Input{
+                               id: user
+                               KeyNavigation.backtab: registerButton
+                               KeyNavigation.tab:pass
+                               onAccepted: submitButton.submitScore();
+                focus: true
+            }
+            Text {
+                               text: "Password:"
+                font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                horizontalAlignment: Qt.AlignRight
+            }
+            Input{
+                               id: pass
+                               KeyNavigation.backtab: user
+                               KeyNavigation.tab: passRetyped
+                               echoMode: TextInput.PasswordEchoOnEdit
+                       }
+                       Text {
+                               text: "Re-type Password:"
+                               font.pixelSize: 16; font.bold: true; color: "white"; style: Text.Raised; styleColor: "black"
+                               horizontalAlignment: Qt.AlignRight
+                       }
+                       Input{
+                               id: passRetyped
+                               KeyNavigation.backtab: pass
+                               KeyNavigation.tab: registerButton
+                               echoMode: TextInput.PasswordEchoOnEdit
+                       }
+        }
+               Row {
+                       spacing: 4
+                       Button {
+                               width: 120
+                               height: 64
+                               id: registerButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Register"
+                               KeyNavigation.backtab: passRetyped
+                               KeyNavigation.tab: user
+                               Keys.onReturnPressed: registerButton.doRegister();
+                               Keys.onEnterPressed: registerButton.doRegister();
+                               Keys.onSelectPressed: registerButton.doRegister();
+                               Keys.onSpacePressed: registerButton.doRegister();
+                               onClicked: registerButton.doRegister();
+
+                               function doRegister() {
+                                       if (wrapper.state=="invalidinput")
+                                               return;
+                                       screen.focus = true;
+                                       screen.state = ""
+                               }
+                       }
+                       Button {
+                               width: 120
+                               height: 64
+                               id: backButton
+                               keyUsing: true;
+                               opacity: 1
+                               text: "Go Back"
+                               KeyNavigation.backtab: registerButton
+                               KeyNavigation.tab: user
+                               Keys.onReturnPressed: backButton.goBack();
+                               Keys.onEnterPressed: backButton.goBack();
+                               Keys.onSelectPressed: backButton.goBack();
+                               Keys.onSpacePressed: backButton.goBack();
+                               onClicked: backButton.goBack();
+
+                               function goBack() {
+                                       screen.focus = true;
+                                       screen.state = ""
+                               }
+                       }
+               }
+    }
+    states:
+    State {
+        name: "invalidinput"
+               when: user.text == "" || pass.text == "" || pass.text != passRetyped.text
+               PropertyChanges { target: registerButton ; opacity: 0.6 ; }
+    }
+    transitions:
+    Transition {
+               NumberAnimation { target: registerButton; property: "opacity"; duration: 200 }
+    }
+}
diff --git a/qml/tim-game/Components/ToolBar.qml b/qml/tim-game/Components/ToolBar.qml
new file mode 100644 (file)
index 0000000..2eeda5f
--- /dev/null
@@ -0,0 +1,32 @@
+import Qt 4.7
+
+Item {
+    id: toolbar
+
+       property bool show3rdButton: false
+    property alias button1Label: button1.text
+    property alias button2Label: button2.text
+       property alias button3Label: button3.text
+    signal button1Clicked
+    signal button2Clicked
+       signal button3Clicked
+       focus:true
+    BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+    Button {
+        id: button1
+               anchors.left: parent.left; anchors.leftMargin: 5; y: 3; width: 160; height: 64
+        onClicked: toolbar.button1Clicked()
+        focus:true
+    }
+    Button {
+        id: button2
+               anchors.right: parent.right; anchors.rightMargin: 5; y: 3; width: 140; height: 64
+        onClicked: toolbar.button2Clicked()
+    }
+       Button {
+               id: button3
+               y: show3rdButton ? 3 : toolbar.height * 1.5
+               anchors.horizontalCenter: parent.horizontalCenter; anchors.rightMargin: 5; width: 160; height: 64
+               onClicked: toolbar.button3Clicked()
+       }
+}
diff --git a/qml/tim-game/Components/images/gloss.png b/qml/tim-game/Components/images/gloss.png
new file mode 100644 (file)
index 0000000..5d370cd
Binary files /dev/null and b/qml/tim-game/Components/images/gloss.png differ
diff --git a/qml/tim-game/Components/images/lineedit.png b/qml/tim-game/Components/images/lineedit.png
new file mode 100644 (file)
index 0000000..2cc38dc
Binary files /dev/null and b/qml/tim-game/Components/images/lineedit.png differ
diff --git a/qml/tim-game/Components/images/lineedit.sci b/qml/tim-game/Components/images/lineedit.sci
new file mode 100644 (file)
index 0000000..054bff7
--- /dev/null
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 10
+border.bottom: 10
+border.right: 10
+source: lineedit.png
diff --git a/qml/tim-game/Components/images/loading.png b/qml/tim-game/Components/images/loading.png
new file mode 100644 (file)
index 0000000..47a1589
Binary files /dev/null and b/qml/tim-game/Components/images/loading.png differ
diff --git a/qml/tim-game/Components/images/quit.png b/qml/tim-game/Components/images/quit.png
new file mode 100644 (file)
index 0000000..5bda1b6
Binary files /dev/null and b/qml/tim-game/Components/images/quit.png differ
diff --git a/qml/tim-game/Components/images/stripes.png b/qml/tim-game/Components/images/stripes.png
new file mode 100644 (file)
index 0000000..9f36727
Binary files /dev/null and b/qml/tim-game/Components/images/stripes.png differ
diff --git a/qml/tim-game/Components/images/titlebar.png b/qml/tim-game/Components/images/titlebar.png
new file mode 100644 (file)
index 0000000..51c9008
Binary files /dev/null and b/qml/tim-game/Components/images/titlebar.png differ
diff --git a/qml/tim-game/Components/images/titlebar.sci b/qml/tim-game/Components/images/titlebar.sci
new file mode 100644 (file)
index 0000000..0418d94
--- /dev/null
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
diff --git a/qml/tim-game/Components/images/toolbutton.png b/qml/tim-game/Components/images/toolbutton.png
new file mode 100644 (file)
index 0000000..1131001
Binary files /dev/null and b/qml/tim-game/Components/images/toolbutton.png differ
diff --git a/qml/tim-game/Components/images/toolbutton.sci b/qml/tim-game/Components/images/toolbutton.sci
new file mode 100644 (file)
index 0000000..9e4f965
--- /dev/null
@@ -0,0 +1,5 @@
+border.left: 15
+border.top: 4
+border.bottom: 4
+border.right: 15
+source: toolbutton.png
diff --git a/qml/tim-game/main.qml b/qml/tim-game/main.qml
new file mode 100644 (file)
index 0000000..792faca
--- /dev/null
@@ -0,0 +1,151 @@
+import Qt 4.7
+import "Components" 1.0 as Components
+
+Item {
+       id: screen; width: 520; height: 480
+
+       property bool loggedIn: false
+       property variant sessionId: ""
+
+       function logOut() {
+               loggedIn = false; sessionId = "";
+               screen.state = "";
+       }
+       function logIn(sessionId) { loggedIn = true; sessionId = sessionId;}
+
+       Timer {
+               id: loggingOutTimer
+               interval: 500
+               onTriggered: { logOut() }
+       }
+
+       Rectangle {
+               id: background
+               anchors.fill: parent; color: "#343434";
+
+               state:"searchquery"
+               Image { source: "Components/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 }
+
+               ListView {
+                       id: highScoreTable;// model: rssModel.model; delegate: fatDelegate;
+                       width: parent.width; height: parent.height; x: 0; cacheBuffer: 100;
+               }
+
+               Components.LoginForm
+               {
+                       id: loginForm
+                       anchors.verticalCenter: parent.verticalCenter
+                       width: parent.width; height: parent.height-60;
+                       x: -(screen.width * 1.5)
+               }
+
+               Components.RegistrationForm
+               {
+                       id: registrationForm
+                       anchors.verticalCenter: parent.verticalCenter
+                       width: parent.width; height: parent.height-60;
+                       x: -(screen.width * 1.5)
+               }
+
+               Components.HighScoreForm
+               {
+                       id: highScoreForm
+                       anchors.verticalCenter: parent.verticalCenter
+                       width: parent.width; height: parent.height-60;
+                       x: -(screen.width * 1.5)
+               }
+
+               Components.ChatView {
+                       id: chatView;
+                       anchors.verticalCenter: parent.verticalCenter
+                       width: parent.width; height: parent.height;
+                       x: -(screen.width * 1.5);
+               }
+
+               Components.ToolBar {
+                       id: toolBar; height: 72;
+                       y: screen.height - toolBar.height
+                       width: parent.width; opacity: 0.9
+                       button1Label: "Log In"
+                       button2Label: "Register"
+                       button3Label: ""
+                       onButton1Clicked:
+                       {
+                               screen.state="showLoginForm"
+                       }
+                       onButton2Clicked:
+                       {
+                               screen.state="showRegistrationForm"
+                       }
+                       onButton3Clicked:
+                       {
+
+                       }
+                       states: [
+                               State {
+                                       name: "loggedIn"
+                                       when: screen.loggedIn
+                                       PropertyChanges {
+                                               target: toolBar
+
+                                               show3rdButton: true
+
+                                               button1Label: "Upload Score"
+                                               button2Label: "Log Out"
+                                               button3Label: "Chat"
+                                               onButton1Clicked:
+                                               {
+                                                       screen.state="showHighScoreForm"
+                                               }
+                                               onButton2Clicked:
+                                               {
+                                                       screen.state = "loggingOutState"
+                                                       loggingOutTimer.start();
+                                               }
+                                               onButton3Clicked:
+                                               {
+                                                       screen.state="showChatView"
+                                               }
+                                       }
+                               }
+                       ]
+               }
+       }
+       states: [
+               State {
+                       name: "showLoginForm";
+                       PropertyChanges { target: loginForm; x: 0; focus:true}
+                       PropertyChanges { target: highScoreTable; x: -(parent.width * 1.5) }
+                       //PropertyChanges { target: titleBar; y: -80 }
+                       PropertyChanges { target: toolBar; y: screen.height }
+                       //PropertyChanges { target: toolBar }
+                       //PropertyChanges { target: title; opacity:1}
+               },
+               State {
+                       name: "showRegistrationForm";
+                       PropertyChanges { target: highScoreTable; x: -(parent.width * 1.5) }
+                       PropertyChanges { target: registrationForm; x: 0; focus:true}
+                       PropertyChanges { target: toolBar; y: screen.height }
+               },
+               State {
+                       name: "showHighScoreForm";
+                       PropertyChanges { target: highScoreTable; x: -(parent.width * 1.5) }
+                       PropertyChanges { target: highScoreForm; x: 0; focus:true}
+                       PropertyChanges { target: toolBar; y: screen.height }
+               },
+               State {
+                       name: "showChatView";
+                       PropertyChanges { target: highScoreTable; x: -(parent.width * 1.5) }
+                       PropertyChanges { target: chatView; x: 0; focus:true}
+                       PropertyChanges { target: toolBar; y: screen.height }
+               },
+               State {
+                       name: "loggingOutState"
+                       PropertyChanges { target: toolBar; y: screen.height }
+               }
+
+       ]
+       transitions: [
+               Transition { NumberAnimation { properties: "x,y,opacity"; duration: 500; easing.type: Easing.InOutQuad } }
+       ]
+}
diff --git a/qmlapplicationviewer/qmlapplicationviewer.cpp b/qmlapplicationviewer/qmlapplicationviewer.cpp
new file mode 100644 (file)
index 0000000..11bedd1
--- /dev/null
@@ -0,0 +1,157 @@
+// checksum 0x28c7 version 0x2000a
+/*
+  This file was generated by the Qt Quick Application wizard of Qt Creator.
+  QmlApplicationViewer is a convenience class containing mobile device specific
+  code such as screen orientation handling. Also QML paths and debugging are
+  handled here.
+  It is recommended not to modify this file, since newer versions of Qt Creator
+  may offer an updated version of it.
+*/
+
+#include "qmlapplicationviewer.h"
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDir>
+#include <QtCore/QFileInfo>
+#include <QtDeclarative/QDeclarativeComponent>
+#include <QtDeclarative/QDeclarativeEngine>
+#include <QtDeclarative/QDeclarativeContext>
+
+#if defined(QMLJSDEBUGGER)
+#include <qt_private/qdeclarativedebughelper_p.h>
+#endif
+
+#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER)
+#include <jsdebuggeragent.h>
+#endif
+#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER)
+#include <qdeclarativeviewobserver.h>
+#endif
+
+#if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK)
+#include <eikenv.h>
+#include <eikappui.h>
+#include <aknenv.h>
+#include <aknappui.h>
+#endif // Q_OS_SYMBIAN && ORIENTATIONLOCK
+
+#if defined(QMLJSDEBUGGER)
+
+// Enable debugging before any QDeclarativeEngine is created
+struct QmlJsDebuggingEnabler
+{
+    QmlJsDebuggingEnabler()
+    {
+        QDeclarativeDebugHelper::enableDebugging();
+    }
+};
+
+// Execute code in constructor before first QDeclarativeEngine is instantiated
+static QmlJsDebuggingEnabler enableDebuggingHelper;
+
+#endif // QMLJSDEBUGGER
+
+class QmlApplicationViewerPrivate
+{
+    QString mainQmlFile;
+    friend class QmlApplicationViewer;
+    static QString adjustPath(const QString &path);
+};
+
+QString QmlApplicationViewerPrivate::adjustPath(const QString &path)
+{
+#ifdef Q_OS_UNIX
+#ifdef Q_OS_MAC
+    if (!QDir::isAbsolutePath(path))
+        return QCoreApplication::applicationDirPath()
+                + QLatin1String("/../Resources/") + path;
+#else
+    const QString pathInShareDir = QCoreApplication::applicationDirPath()
+        + QLatin1String("/../share/")
+        + QFileInfo(QCoreApplication::applicationFilePath()).fileName()
+        + QLatin1Char('/') + path;
+    if (QFileInfo(pathInShareDir).exists())
+        return pathInShareDir;
+#endif
+#endif
+    return path;
+}
+
+QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) :
+    QDeclarativeView(parent),
+    m_d(new QmlApplicationViewerPrivate)
+{
+    connect(engine(), SIGNAL(quit()), SLOT(close()));
+    setResizeMode(QDeclarativeView::SizeRootObjectToView);
+#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER)
+    new QmlJSDebugger::JSDebuggerAgent(engine());
+#endif
+#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER)
+    new QmlJSDebugger::QDeclarativeViewObserver(this, parent);
+#endif
+}
+
+QmlApplicationViewer::~QmlApplicationViewer()
+{
+    delete m_d;
+}
+
+void QmlApplicationViewer::setMainQmlFile(const QString &file)
+{
+    m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file);
+    setSource(QUrl::fromLocalFile(m_d->mainQmlFile));
+}
+
+void QmlApplicationViewer::addImportPath(const QString &path)
+{
+    engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path));
+}
+
+void QmlApplicationViewer::setOrientation(ScreenOrientation orientation)
+{
+#ifdef Q_OS_SYMBIAN
+    if (orientation != ScreenOrientationAuto) {
+#if defined(ORIENTATIONLOCK)
+        const CAknAppUiBase::TAppUiOrientation uiOrientation =
+                (orientation == ScreenOrientationLockPortrait) ? CAknAppUi::EAppUiOrientationPortrait
+                    : CAknAppUi::EAppUiOrientationLandscape;
+        CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi());
+        TRAPD(error,
+            if (appUi)
+                appUi->SetOrientationL(uiOrientation);
+        );
+        Q_UNUSED(error)
+#else // ORIENTATIONLOCK
+        qWarning("'ORIENTATIONLOCK' needs to be defined on Symbian when locking the orientation.");
+#endif // ORIENTATIONLOCK
+    }
+#elif defined(Q_WS_MAEMO_5)
+    Qt::WidgetAttribute attribute;
+    switch (orientation) {
+    case ScreenOrientationLockPortrait:
+        attribute = Qt::WA_Maemo5PortraitOrientation;
+        break;
+    case ScreenOrientationLockLandscape:
+        attribute = Qt::WA_Maemo5LandscapeOrientation;
+        break;
+    case ScreenOrientationAuto:
+    default:
+        attribute = Qt::WA_Maemo5AutoOrientation;
+        break;
+    }
+    setAttribute(attribute, true);
+#else // Q_OS_SYMBIAN
+    Q_UNUSED(orientation);
+#endif // Q_OS_SYMBIAN
+}
+
+void QmlApplicationViewer::showExpanded()
+{
+#ifdef Q_OS_SYMBIAN
+    showFullScreen();
+#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+    showMaximized();
+#else
+    show();
+#endif
+}
diff --git a/qmlapplicationviewer/qmlapplicationviewer.h b/qmlapplicationviewer/qmlapplicationviewer.h
new file mode 100644 (file)
index 0000000..143c17b
--- /dev/null
@@ -0,0 +1,39 @@
+// checksum 0x5a59 version 0x2000a
+/*
+  This file was generated by the Qt Quick Application wizard of Qt Creator.
+  QmlApplicationViewer is a convenience class containing mobile device specific
+  code such as screen orientation handling. Also QML paths and debugging are
+  handled here.
+  It is recommended not to modify this file, since newer versions of Qt Creator
+  may offer an updated version of it.
+*/
+
+#ifndef QMLAPPLICATIONVIEWER_H
+#define QMLAPPLICATIONVIEWER_H
+
+#include <QtDeclarative/QDeclarativeView>
+
+class QmlApplicationViewer : public QDeclarativeView
+{
+    Q_OBJECT
+
+public:
+    enum ScreenOrientation {
+        ScreenOrientationLockPortrait,
+        ScreenOrientationLockLandscape,
+        ScreenOrientationAuto
+    };
+
+    explicit QmlApplicationViewer(QWidget *parent = 0);
+    virtual ~QmlApplicationViewer();
+
+    void setMainQmlFile(const QString &file);
+    void addImportPath(const QString &path);
+    void setOrientation(ScreenOrientation orientation);
+    void showExpanded();
+
+private:
+    class QmlApplicationViewerPrivate *m_d;
+};
+
+#endif // QMLAPPLICATIONVIEWER_H
diff --git a/qmlapplicationviewer/qmlapplicationviewer.pri b/qmlapplicationviewer/qmlapplicationviewer.pri
new file mode 100644 (file)
index 0000000..1c0c7ed
--- /dev/null
@@ -0,0 +1,154 @@
+# checksum 0x3dc8 version 0x2000a
+# This file was generated by the Qt Quick Application wizard of Qt Creator.
+# The code below adds the QmlApplicationViewer to the project and handles the
+# activation of QML debugging.
+# It is recommended not to modify this file, since newer versions of Qt Creator
+# may offer an updated version of it.
+
+QT += declarative
+
+SOURCES += $$PWD/qmlapplicationviewer.cpp
+HEADERS += $$PWD/qmlapplicationviewer.h
+INCLUDEPATH += $$PWD
+
+defineTest(minQtVersion) {
+    maj = $$1
+    min = $$2
+    patch = $$3
+    isEqual(QT_MAJOR_VERSION, $$maj) {
+        isEqual(QT_MINOR_VERSION, $$min) {
+            isEqual(QT_PATCH_VERSION, $$patch) {
+                return(true)
+            }
+            greaterThan(QT_PATCH_VERSION, $$patch) {
+                return(true)
+            }
+        }
+        greaterThan(QT_MINOR_VERSION, $$min) {
+            return(true)
+        }
+    }
+    return(false)
+}
+
+contains(DEFINES, QMLJSDEBUGGER) {
+    CONFIG(debug, debug|release) {
+        !minQtVersion(4, 7, 1) {
+            warning()
+            warning("Disabling QML debugging:")
+            warning()
+            warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.")
+            warning("This library requires Qt 4.7.1 or newer.")
+            warning()
+            DEFINES -= QMLJSDEBUGGER
+        } else:isEmpty(QMLJSDEBUGGER_PATH) {
+            warning()
+            warning("Disabling QML debugging:")
+            warning()
+            warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.")
+            warning("Please specify its location on the qmake command line, eg")
+            warning("  qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger")
+            warning()
+            DEFINES -= QMLJSDEBUGGER
+        } else {
+            include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri)
+        }
+    } else {
+        DEFINES -= QMLJSDEBUGGER
+    }
+}
+# This file was generated by an application wizard of Qt Creator.
+# The code below handles deployment to Symbian and Maemo, aswell as copying
+# of the application data to shadow build directories on desktop.
+# It is recommended not to modify this file, since newer versions of Qt Creator
+# may offer an updated version of it.
+
+defineTest(qtcAddDeployment) {
+for(deploymentfolder, DEPLOYMENTFOLDERS) {
+    item = item$${deploymentfolder}
+    itemsources = $${item}.sources
+    $$itemsources = $$eval($${deploymentfolder}.source)
+    itempath = $${item}.path
+    $$itempath= $$eval($${deploymentfolder}.target)
+    export($$itemsources)
+    export($$itempath)
+    DEPLOYMENT += $$item
+}
+
+MAINPROFILEPWD = $$PWD
+
+symbian {
+    ICON = $${TARGET}.svg
+    TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
+    contains(DEFINES, ORIENTATIONLOCK):LIBS += -lavkon -leikcore -lcone
+    contains(DEFINES, NETWORKACCESS):TARGET.CAPABILITY += NetworkServices
+} else:win32 {
+    !isEqual(PWD,$$OUT_PWD) {
+        copyCommand = @echo Copying application data...
+        for(deploymentfolder, DEPLOYMENTFOLDERS) {
+            source = $$eval($${deploymentfolder}.source)
+            pathSegments = $$split(source, /)
+            sourceAndTarget = $$MAINPROFILEPWD/$$source $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(pathSegments)
+            copyCommand += && $(COPY_DIR) $$replace(sourceAndTarget, /, \\)
+        }
+        copydeploymentfolders.commands = $$copyCommand
+        first.depends = $(first) copydeploymentfolders
+        export(first.depends)
+        export(copydeploymentfolders.commands)
+        QMAKE_EXTRA_TARGETS += first copydeploymentfolders
+    }
+} else:unix {
+    maemo5 {
+        installPrefix = /opt/usr
+        desktopfile.path = /usr/share/applications/hildon       
+    } else {
+        installPrefix = /usr/local
+        desktopfile.path = /usr/share/applications
+        !isEqual(PWD,$$OUT_PWD) {
+            copyCommand = @echo Copying application data...
+            for(deploymentfolder, DEPLOYMENTFOLDERS) {
+                macx {
+                    target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
+                } else {
+                    target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
+                }
+                copyCommand += && $(MKDIR) $$target
+                copyCommand += && $(COPY_DIR) $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) $$target
+            }
+            copydeploymentfolders.commands = $$copyCommand
+            first.depends = $(first) copydeploymentfolders
+            export(first.depends)
+            export(copydeploymentfolders.commands)
+            QMAKE_EXTRA_TARGETS += first copydeploymentfolders
+        }
+    }
+    for(deploymentfolder, DEPLOYMENTFOLDERS) {
+        item = item$${deploymentfolder}
+        itemfiles = $${item}.files
+        $$itemfiles = $$eval($${deploymentfolder}.source)
+        itempath = $${item}.path
+        $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target)
+        export($$itemfiles)
+        export($$itempath)
+        INSTALLS += $$item
+    }
+    icon.files = $${TARGET}.png
+    icon.path = /usr/share/icons/hicolor/64x64/apps
+    desktopfile.files = $${TARGET}.desktop
+    target.path = $${installPrefix}/bin
+    export(icon.files)
+    export(icon.path)
+    export(desktopfile.files)
+    export(desktopfile.path)
+    export(target.path)
+    INSTALLS += desktopfile icon target
+}
+
+export (ICON)
+export (INSTALLS)
+export (DEPLOYMENT)
+export (TARGET.EPOCHEAPSIZE)
+export (TARGET.CAPABILITY)
+export (LIBS)
+export (QMAKE_EXTRA_TARGETS)
+}
diff --git a/tim-game.desktop b/tim-game.desktop
new file mode 100644 (file)
index 0000000..c841d84
--- /dev/null
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Name=tim-game
+Exec=/opt/usr/bin/tim-game
+Icon=tim-game
+X-Window-Icon=
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
diff --git a/tim-game.png b/tim-game.png
new file mode 100644 (file)
index 0000000..707d5c4
Binary files /dev/null and b/tim-game.png differ
diff --git a/tim-game.pro b/tim-game.pro
new file mode 100644 (file)
index 0000000..f42433b
--- /dev/null
@@ -0,0 +1,41 @@
+# Add more folders to ship with the application, here
+folder_01.source = qml/tim-game
+folder_01.target = qml
+DEPLOYMENTFOLDERS = folder_01
+
+# Additional import path used to resolve QML modules in Creator's code model
+QML_IMPORT_PATH =
+
+# Avoid auto screen rotation
+#DEFINES += ORIENTATIONLOCK
+
+# Needs to be defined for Symbian
+#DEFINES += NETWORKACCESS
+
+symbian:TARGET.UID3 = 0xE45C3B88
+
+# Define QMLJSDEBUGGER to allow debugging of QML in debug builds
+# (This might significantly increase build time)
+# DEFINES += QMLJSDEBUGGER
+
+# If your application uses the Qt Mobility libraries, uncomment
+# the following lines and add the respective components to the 
+# MOBILITY variable. 
+# CONFIG += mobility
+# MOBILITY +=
+
+# The .cpp file which was generated for your project. Feel free to hack it.
+SOURCES += main.cpp
+
+# Please do not modify the following two lines. Required for deployment.
+include(qmlapplicationviewer/qmlapplicationviewer.pri)
+qtcAddDeployment()
+
+unix:!symbian {
+    maemo5 {
+        target.path = /opt/usr/bin
+    } else {
+        target.path = /usr/local/bin
+    }
+    INSTALLS += target
+}
diff --git a/tim-game.svg b/tim-game.svg
new file mode 100644 (file)
index 0000000..566acfa
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="44px"
+   version="1.1"
+   viewBox="0 0 44 44"
+   width="44px"
+   x="0px"
+   y="0px"
+   id="svg2"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="qt.svg">
+  <metadata
+     id="metadata18">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs16">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 22 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="44 : 22 : 1"
+       inkscape:persp3d-origin="22 : 14.666667 : 1"
+       id="perspective2836" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1020"
+     id="namedview14"
+     showgrid="false"
+     inkscape:zoom="21.454545"
+     inkscape:cx="49.412871"
+     inkscape:cy="21.894358"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g3" />
+  <g
+     transform="matrix(0.18308778,0,0,0.18308778,6.6100946,3.2385199)"
+     id="g3">
+    <path
+       d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z"
+       style="fill:#006225"
+       id="path5"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z"
+       style="fill:#80c342"
+       id="path7" />
+    <path
+       d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z"
+       style="fill:#006225"
+       id="path11" />
+    <path
+       d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z"
+       style="fill:#006225"
+       id="path13" />
+    <path
+       id="path17"
+       style="fill:#ffffff"
+       d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z" />
+    <path
+       d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z"
+       style="fill:#006225"
+       id="path19" />
+    <path
+       id="path21"
+       style="fill:#006225"
+       d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z" />
+  </g>
+</svg>