--- /dev/null
+#############################################################################
+# Makefile for building: marketstoday
+# Generated by qmake (2.01a) (Qt 4.7.0) on: Sat May 14 02:17:10 2011
+# Project: marketstoday.pro
+# Template: subdirs
+# Command: /usr/bin/qmake -o Makefile marketstoday.pro
+#############################################################################
+
+first: make_default
+MAKEFILE = Makefile
+QMAKE = /usr/bin/qmake
+DEL_FILE = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR = mkdir -p
+COPY = cp -f
+COPY_FILE = $(COPY)
+COPY_DIR = $(COPY) -r
+INSTALL_FILE = install -m 644 -p
+INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR = $(COPY_DIR)
+DEL_FILE = rm -f
+SYMLINK = ln -f -s
+DEL_DIR = rmdir
+MOVE = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR = mkdir -p
+SUBTARGETS = \
+ sub-src
+
+src/$(MAKEFILE):
+ @$(CHK_DIR_EXISTS) src/ || $(MKDIR) src/
+ cd src/ && $(QMAKE) /home/sudheer/marketstoday/marketstoday-0.1/src/src.pro -o $(MAKEFILE)
+sub-src-qmake_all: FORCE
+ @$(CHK_DIR_EXISTS) src/ || $(MKDIR) src/
+ cd src/ && $(QMAKE) /home/sudheer/marketstoday/marketstoday-0.1/src/src.pro -o $(MAKEFILE)
+sub-src: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE)
+sub-src-make_default: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE)
+sub-src-make_first: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) first
+sub-src-all: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) all
+sub-src-clean: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) clean
+sub-src-distclean: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) distclean
+sub-src-install_subtargets: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) install
+sub-src-uninstall_subtargets: src/$(MAKEFILE) FORCE
+ cd src/ && $(MAKE) -f $(MAKEFILE) uninstall
+
+Makefile: marketstoday.pro /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/linux-g++/qmake.conf /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/g++.conf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/unix.conf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/linux.conf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/qconfig.pri \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt_functions.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt_config.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/default_pre.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/release.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/default_post.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/warn_on.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/unix/thread.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/moc.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/resources.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/uic.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/yacc.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/lex.prf \
+ /targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/include_source_dir.prf
+ $(QMAKE) -o Makefile marketstoday.pro
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/g++.conf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/unix.conf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/common/linux.conf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/qconfig.pri:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt_functions.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt_config.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/default_pre.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/release.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/default_post.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/warn_on.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/qt.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/unix/thread.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/moc.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/resources.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/uic.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/yacc.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/lex.prf:
+/targets/FREMANTLE_X86/usr/share/qt4/mkspecs/features/include_source_dir.prf:
+qmake: qmake_all FORCE
+ @$(QMAKE) -o Makefile marketstoday.pro
+
+qmake_all: sub-src-qmake_all FORCE
+
+make_default: sub-src-make_default FORCE
+make_first: sub-src-make_first FORCE
+all: sub-src-all FORCE
+clean: sub-src-clean FORCE
+distclean: sub-src-distclean FORCE
+ -$(DEL_FILE) Makefile
+install_subtargets: sub-src-install_subtargets FORCE
+uninstall_subtargets: sub-src-uninstall_subtargets FORCE
+
+sub-src-check: src/$(MAKEFILE)
+ cd src/ && $(MAKE) check
+check: sub-src-check
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+install: install_subtargets FORCE
+
+uninstall: uninstall_subtargets FORCE
+
+FORCE:
+
--- /dev/null
+The Debian Package marketstoday
+----------------------------
+
+- Package depends on qt4-homescreen-loader to display Qt based widgets on Maemo's hildon desktop.
+- Signal/Slots are extensively used to interact between Config and Main windows. As a result, qmlviewer may not be used.
+- It is recommended to build/test this application in scratchbox.
+
+ -- Sudheer <scifi1947@gmail.com> Sat, 14 May 2011 00:00:00 -0800
--- /dev/null
+marketstoday (0.1-0) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Sudheer K. <scifi1947 at gmail.com> Sat, 14 May 2011 00:00:00 -0800
--- /dev/null
+Source: marketstoday
+Section: user/desktop
+Priority: optional
+Maintainer: Sudheer K. <scifi1947 at gmail.com>
+Build-Depends: debhelper (>= 5), libqt4-dev, libx11-dev
+Standards-Version: 3.7.3
+Homepage: https://garage.maemo.org/projects/marketstoday
+XSBC-Bugtracker: https://garage.maemo.org/tracker/?group_id=2110
+XB-Maemo-Display-Name: Markets Today - Desktop Stock Quotes Widget
+
+Package: marketstoday
+Architecture: any
+Depends: ${shlibs:Depends}, qt4-homescreen-loader
+Description: A simple desktop widget for stock quotes with auto-update option.
+XB-Maemo-Icon-26:
+ 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
+ kc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE
+ 3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/8
+ 7fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfIT
+ dyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxM
+ DUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8e
+ lQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zv
+ n//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vt
+ V5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmK
+ rhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N
+ 2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLd
+ tWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvtt
+ Xa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG
+ 4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+
+ 0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO
+ 32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
+ nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+
+ cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP
+ /pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV
+ 69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98P
+ T+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9
+ 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
+ AElFTkSuQmCC
--- /dev/null
+This package was debianized by Sudheer K. <scifi1947 at gmail.com> on
+Sat, 14 May 2011 00:00:00 -0800.
+
+It was downloaded from <https://garage.maemo.org/projects/marketstoday>
+
+Upstream Author: Sudheer K. <scifi1947 at gmail.com>
+
+Copyright: 2011, Sudheer K.
+
+License:
+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2011, Sudheer K. <scifi1947 at gmail.com> and
+is licensed under the GPL, see above.
+
+Icons used in this package include:
+- Devine Icons by iPapun (http://ipapun.deviantart.com/art/Devine-Icons-137555756)
+- Human o2 by Oliver Scholtz (and others) (http://schollidesign.deviantart.com/art/Human-O2-Iconset-105344123)
+Please check the attached links for license information.
--- /dev/null
+marketstoday_0.1-0_armel.deb user/desktop optional
--- /dev/null
+shlibs:Depends=libc6 (>= 2.5.0-1), libgcc1 (>= 1:4.2.1), libqt4-core (>= 4.7.0~git20100909), libqt4-dbus (>= 4.7.0~git20100909), libqt4-declarative (>= 4.7.0~git20100909), libqt4-gui (>= 4.7.0~git20100909), libqt4-network (>= 4.7.0~git20100909), libqt4-opengl (>= 4.7.0~git20100909), libqt4-script (>= 4.7.0~git20100909), libqt4-sql (>= 4.7.0~git20100909), libqt4-svg (>= 4.7.0~git20100909), libqt4-xml (>= 4.7.0~git20100909), libqt4-xmlpatterns (>= 4.7.0~git20100909), libstdc++6 (>= 4.2.1), libx11-6
--- /dev/null
+Package: marketstoday
+Version: 0.1-0
+Section: user/desktop
+Priority: optional
+Architecture: armel
+Depends: libc6 (>= 2.5.0-1), libgcc1 (>= 1:4.2.1), libqt4-core (>= 4.7.0~git20100909), libqt4-dbus (>= 4.7.0~git20100909), libqt4-declarative (>= 4.7.0~git20100909), libqt4-gui (>= 4.7.0~git20100909), libqt4-network (>= 4.7.0~git20100909), libqt4-opengl (>= 4.7.0~git20100909), libqt4-script (>= 4.7.0~git20100909), libqt4-sql (>= 4.7.0~git20100909), libqt4-svg (>= 4.7.0~git20100909), libqt4-xml (>= 4.7.0~git20100909), libqt4-xmlpatterns (>= 4.7.0~git20100909), libstdc++6 (>= 4.2.1), libx11-6, qt4-homescreen-loader
+Installed-Size: 208
+Maintainer: Sudheer K. <scifi1947 at gmail.com>
+Description: A simple desktop widget for stock quotes with auto-update option.
+Bugtracker: https://garage.maemo.org/tracker/?group_id=2110
+Maemo-Display-Name: Markets Today - Desktop Stock Quotes Widget
+Maemo-Icon-26:
+ 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
+ kc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE
+ 3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/8
+ 7fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfIT
+ dyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxM
+ DUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8e
+ lQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zv
+ n//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vt
+ V5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmK
+ rhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N
+ 2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLd
+ tWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvtt
+ Xa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG
+ 4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+
+ 0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO
+ 32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
+ nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+
+ cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP
+ /pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV
+ 69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98P
+ T+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9
+ 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
+ AElFTkSuQmCC
--- /dev/null
+577012ec40cc31d35c931723e65041de opt/marketstoday/marketstoday
+e1575c7633d95a9071bf511cdf6c7ba9 usr/share/doc/marketstoday/copyright
+69e14451af3766e939881071ad799b70 usr/share/doc/marketstoday/changelog.Debian.gz
+4f184c6853965ad3c45fe68506d64dd8 usr/share/icons/hicolor/48x48/apps/marketstoday.png
+551bca229853538c376b80e4444c0bf7 usr/share/applications/hildon-home/marketstoday.desktop
--- /dev/null
+#!/bin/sh
+# postrm script for vicar
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+# * <postrm> `remove'
+# * <postrm> `purge'
+# * <old-postrm> `upgrade' <new-version>
+# * <new-postrm> `failed-upgrade' <old-version>
+# * <new-postrm> `abort-install'
+# * <new-postrm> `abort-install' <old-version>
+# * <new-postrm> `abort-upgrade' <old-version>
+# * <disappearer's-postrm> `disappear' <overwriter>
+# <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+ purge)
+ echo "Deleting configuration database ..."
+ [[ -d /home/user/.marketstoday/OfflineStorage ]] && rm -rf /home/user/.marketstoday/OfflineStorage
+ echo "Removing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && rm -f /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ remove|abort-install|upgrade|failed-upgrade|abort-upgrade|disappear)
+ echo "Clearing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && cat /dev/null > /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ *)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+
+
+exit 0
+
+
--- /dev/null
+[Desktop Entry]
+Name=Markets Today
+Comment=A simple desktop widget for stock quotes
+Type=qt
+X-Path=/opt/marketstoday/marketstoday
+X-Multiple-Instances=false
+X-home-applet-minwidth=400
+X-home-applet-minheight=325
+Name[en_US]=Markets Today
--- /dev/null
+This package was debianized by Sudheer K. <scifi1947 at gmail.com> on
+Sat, 14 May 2011 00:00:00 -0800.
+
+It was downloaded from <https://garage.maemo.org/projects/marketstoday>
+
+Upstream Author: Sudheer K. <scifi1947 at gmail.com>
+
+Copyright: 2011, Sudheer K.
+
+License:
+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2011, Sudheer K. <scifi1947 at gmail.com> and
+is licensed under the GPL, see above.
+
+Icons used in this package include:
+- Devine Icons by iPapun (http://ipapun.deviantart.com/art/Devine-Icons-137555756)
+- Human o2 by Oliver Scholtz (and others) (http://schollidesign.deviantart.com/art/Human-O2-Iconset-105344123)
+Please check the attached links for license information.
--- /dev/null
+#!/bin/sh
+# postrm script for vicar
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+# * <postrm> `remove'
+# * <postrm> `purge'
+# * <old-postrm> `upgrade' <new-version>
+# * <new-postrm> `failed-upgrade' <old-version>
+# * <new-postrm> `abort-install'
+# * <new-postrm> `abort-install' <old-version>
+# * <new-postrm> `abort-upgrade' <old-version>
+# * <disappearer's-postrm> `disappear' <overwriter>
+# <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+ purge)
+ echo "Deleting configuration database ..."
+ [[ -d /home/user/.marketstoday/OfflineStorage ]] && rm -rf /home/user/.marketstoday/OfflineStorage
+ echo "Removing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && rm -f /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ remove|abort-install|upgrade|failed-upgrade|abort-upgrade|disappear)
+ echo "Clearing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && cat /dev/null > /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ *)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+APPNAME := marketstoday
+builddir:
+ mkdir -p builddir
+
+builddir/Makefile: builddir
+ cd builddir && qmake ../$(APPNAME).pro
+
+build: build-stamp
+
+build-stamp: builddir/Makefile
+ dh_testdir
+
+ # Add here commands to compile the package.
+ cd builddir && $(MAKE)
+ #docbook-to-man debian/$(APPNAME).sgml > $(APPNAME).1
+
+ touch $@
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp
+
+ # Add here commands to clean up after the build process.
+ rm -rf builddir
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/marketstoday.
+ cd builddir && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/$(APPNAME) install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installexamples
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps # Uncomment this line for publishing!
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
--- /dev/null
+QMAKEVERSION = $$[QMAKE_VERSION]
+ISQT4 = $$find(QMAKEVERSION, ^[2-9])
+isEmpty( ISQT4 ) {
+error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4");
+}
+
+TEMPLATE = subdirs
+SUBDIRS = src
--- /dev/null
+The Debian Package marketstoday
+----------------------------
+
+- Package depends on qt4-homescreen-loader to display Qt based widgets on Maemo's hildon desktop.
+- Signal/Slots are extensively used to interact between Config and Main windows. As a result, qmlviewer may not be used.
+- It is recommended to build/test this application in scratchbox.
+
+ -- Sudheer <scifi1947@gmail.com> Sat, 14 May 2011 00:00:00 -0800
--- /dev/null
+marketstoday (0.1-0) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Sudheer K. <scifi1947 at gmail.com> Sat, 14 May 2011 00:00:00 -0800
--- /dev/null
+Source: marketstoday
+Section: user/desktop
+Priority: optional
+Maintainer: Sudheer K. <scifi1947 at gmail.com>
+Build-Depends: debhelper (>= 5), libqt4-dev
+Standards-Version: 3.7.3
+Homepage: https://garage.maemo.org/projects/marketstoday
+XSBC-Bugtracker: https://garage.maemo.org/tracker/?group_id=2110
+XB-Maemo-Display-Name: Markets Today - Desktop Stock Quotes Widget
+
+Package: marketstoday
+Architecture: any
+Depends: ${shlibs:Depends}
+Description: A simple desktop widget for stock quotes with auto-update option.
+XB-Maemo-Icon-26:
+ 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
+ kc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE
+ 3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/8
+ 7fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfIT
+ dyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxM
+ DUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8e
+ lQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zv
+ n//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vt
+ V5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmK
+ rhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N
+ 2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLd
+ tWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvtt
+ Xa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG
+ 4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+
+ 0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO
+ 32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
+ nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+
+ cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP
+ /pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV
+ 69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98P
+ T+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9
+ p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfbBQ4FGQQGtBHlAAAH
+ 3UlEQVRo3u1Ze0xU6RX/fffO3I4MMDMMyqzuSroL6oiLgKQFy4Ibi0Zs6Mtg
+ NVC1rhiN25g0MS0r0VWLsm7WxPisAds1JRahpbuRcd0IRVGmgOsLIoVx20V0
+ B8yAy8PrMHO/0z96L5l1fYBb13HjSW7m3sn58p3fPb/vvC7wXJ7Lt1fKyspA
+ RCPPRASHw/HsATl58qTV6XS+oIF4JkQztL29faksy52yLP+7s7Mz5Zl560eO
+ HDF0dHT8TpZlGh4eJq/XS729vb9/Jt76mTNnpnZ3d1ffvXuX1IvLsky9vb2l
+ 5eXlusA1umAynjGG06dPp8fHxx+VJOkF+p8AAFN1JtrtdgmAP+gAMMbQ1NT0
+ K7vdXiIIAhRFIc1wDSAR2YxGowTgjva/ECwAkpOTX546dep7jDEoikJEBM75
+ yKUCmKjX6/UVFRUj68QgsV+4efNmgiiK301MTDTp9Xoj5zyQOlABGYeGhval
+ paXdHvFcEFFoMhHNs1gsqRcuXMg2m82RKghijDHNC11dXSkJCQn/DDoKmUym
+ TgB/KSws7LNYLJF+vx9ERJxzJsvygF6vBxHB5/PxoIxCt2/fBoCQ7OzsRT6f
+ b8R4URR9y5cv/ygqKip00aJF7mvXrnUEbR7YsWPHG7du3aLu7m7udrvJ7XbT
+ 1atXnXFxcSkAsgDE3Et7XRDZb1q4cGG+Sh2oCYAGBwf/3tra6gwwnIISwPbt
+ 29PCwsLsiqJowYX8fv8XTU1NVfczPNgAhCQmJv5IEASjGm2IMcb6+/vPrF27
+ 9urDFgYFgPnz579ks9kyOeda3GdEhJqamh2PTCBPujADgObm5oemgPT09NdN
+ JtMriqKMZOG+vr6z69evb3jUPk/MA4wxnDp1KtZqtc5JSEg49BBVc3p6+kq1
+ ZCAiYgDQ0dHx3qhS+BNkhmgymYqNRuMfLl68mA8ATqfzK0orV658zWazJft8
+ PiiKwogIQ0NDbW1tbWeeKoANGzbMDgkJeZ2IMG7cuH2NjY2/TElJQUPDl1hh
+ yMvLW6MoCjjnxDmH3+9Hf3//h5s3b/aMZp8nRSFDamrqzwRBCFfLYjE0NPRP
+ TqcTKSkp72tK+fn5iWazOdXv9xMAphZs/Tdu3PgAAH9qHsjMzHzRZrNlcc4F
+ zjnTDqbRaCxtbGzMV9WkOXPmZAuCEBboAVmWryxdurR+1GXsWAyrqakZua+u
+ rn7g+c3IyPhheHj4FNUwBIAQJUna19DQkDdhwgRLVFTUfM65QERM03W5XLvG
+ FCzG+nbPnj0bT0QdaWlpssPhwIIFC+5Viaitrf2H1Wp9lXOuxVKmhtURqrS3
+ t++JjY1dDUCv/e/1ev8ze/bslx+Udb+2B/bu3ZtsNBobDAbDO4WFhYiNjf3K
+ oKmgoGBBRETEq2pNwxRFGWlKAqkSExOzjnOu55yToiiMc46urq6dYzF+TACS
+ kpIik5OT/wggRBTFdVlZWe/GxMQgKioqEERYZmbmm36/H6ph4Jxzl8v1L6/X
+ 678XhPrLiAiyLN90uVzHx8qIUUUhg8Gg37Zt2wa9Xj9djSqQJOk39fX1A0lJ
+ SW9relu2bMkwGAwztIZcbUAGN27c+LeMjIzpy5YtyxIEQaeNGrSkBQB37tw5
+ 4XK5bo65Fx2N0tatW9OsVusazjlTDyQ45yRJ0qb6+vpfA0B0dLRx2rRpP2eM
+ GVVKkPpm69ra2nYdPHjQsWfPno+Hh4dllVpa406Kosh9fX1VpaWlvicBIDw1
+ NbWUMRaqKAoFRBWoHdOuurq6PLPZPCkyMnKe1rsqisIURUFdXd3bAHoAVJaV
+ lX1w4MCBWr/fr9GJOOfM5/N9tmTJko8fK90/CmB1dXWJ0Wh8LZCvAVMCEJEg
+ iuJPExMTIywWyw+0chgAGxwcPJWfn1+ssQTAZ1euXNHpdDrExcW9whgTiQg9
+ PT1FFRUV9f9vAOzw4cNLJk6cWEBEglriahHCR0S6ADAsNDQ0XqONVg63tLSs
+ PnHixKcBBd4dQRC6zp8/r/N6vbqZM2dOJqKh7OzsPADDjwPggYc4Nzf3pcmT
+ J28GIKnxnACwnp6ermPHjl1YvXr1AsaYqB7WwCkaUw/luc7Ozk/uU2K7AVQe
+ PXpUMRgM4ty5c88CGHjsqvdBwCorKw+NHz9++T0RY7i4uPgXDodjwpo1a36c
+ k5MzH4AQCEC95x6P57c5OTnvPmTv8QDsAC4B+OJxAdzXAyUlJW9Yrdblan86
+ ArS1tXWTw+GoEkXRtn///u/IsmzIzc1NY4zpAxoYxjnvvXz5cuUj9r4FoHe0
+ Rduoz0BRUdGs6dOnlzDGjOp0mBERPB7PR4cOHSq8fv36kCRJg4qidF26dEky
+ m81hU6ZMeTFgBMgGBgb+vG7duiOjady+buH4JQ8sXrzYZLfbNzLGxmvhEAAU
+ RfE0NjYWnTt37hYAeL1eALhBRBW7d+/W2Ww2/axZs76neer48ePF39hQNfBh
+ 0qRJc8PDw39yb3vncrne2blz5+n7tI3XAfy1oKDgw5qamk8YY+jv73+/tLT0
+ 028KQCCFxrW0tHyfc26aMWPGJCISAcDtdh9btWrVWwB8D+h9+wC4m5ubDdHR
+ 0ZLH49lUW1v7+VMZEKujuzfj4+OPlJeXf15VVXVt3rx500a5NhZAsloePz0R
+ RdECYGFISMhbK1asyB7jN4Rg+d4ACcAEAAY8l+fy7Zb/Ai0To0TLdwFLAAAA
+ AElFTkSuQmCC
--- /dev/null
+This package was debianized by Sudheer K. <scifi1947 at gmail.com> on
+Sat, 14 May 2011 00:00:00 -0800.
+
+It was downloaded from <https://garage.maemo.org/projects/marketstoday>
+
+Upstream Author: Sudheer K. <scifi1947 at gmail.com>
+
+Copyright: 2011, Sudheer K.
+
+License:
+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2011, Sudheer K. <scifi1947 at gmail.com> and
+is licensed under the GPL, see above.
+
+Icons used in this package include:
+- Devine Icons by iPapun (http://ipapun.deviantart.com/art/Devine-Icons-137555756)
+- Human o2 by Oliver Scholtz (and others) (http://schollidesign.deviantart.com/art/Human-O2-Iconset-105344123)
+Please check the attached links for license information.
--- /dev/null
+shlibs:Depends=libc6 (>= 2.5.0-1), libgcc1 (>= 1:4.2.1), libqt4-core (>= 4.7.0~git20100909), libqt4-dbus (>= 4.7.0~git20100909), libqt4-declarative (>= 4.7.0~git20100909), libqt4-gui (>= 4.7.0~git20100909), libqt4-network (>= 4.7.0~git20100909), libqt4-opengl (>= 4.7.0~git20100909), libqt4-script (>= 4.7.0~git20100909), libqt4-sql (>= 4.7.0~git20100909), libqt4-svg (>= 4.7.0~git20100909), libqt4-xml (>= 4.7.0~git20100909), libqt4-xmlpatterns (>= 4.7.0~git20100909), libstdc++6 (>= 4.2.1), libx11-6, qt4-homescreen-loader
--- /dev/null
+#!/bin/sh
+# postrm script for vicar
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+# * <postrm> `remove'
+# * <postrm> `purge'
+# * <old-postrm> `upgrade' <new-version>
+# * <new-postrm> `failed-upgrade' <old-version>
+# * <new-postrm> `abort-install'
+# * <new-postrm> `abort-install' <old-version>
+# * <new-postrm> `abort-upgrade' <old-version>
+# * <disappearer's-postrm> `disappear' <overwriter>
+# <overwriter-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+ purge)
+ echo "Deleting configuration database ..."
+ [[ -d /home/user/.marketstoday/OfflineStorage ]] && rm -rf /home/user/.marketstoday/OfflineStorage
+ echo "Removing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && rm -f /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ remove|abort-install|upgrade|failed-upgrade|abort-upgrade|disappear)
+ echo "Removing logs ..."
+ [[ -x /home/user/.marketstoday/marketstoday.log ]] && rm -f /home/user/.marketstoday/marketstoday.log
+ ;;
+
+ *)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+APPNAME := marketstoday
+builddir:
+ mkdir -p builddir
+
+builddir/Makefile: builddir
+ cd builddir && qmake ../$(APPNAME).pro
+
+build: build-stamp
+
+build-stamp: builddir/Makefile
+ dh_testdir
+
+ # Add here commands to compile the package.
+ cd builddir && $(MAKE)
+ #docbook-to-man debian/$(APPNAME).sgml > $(APPNAME).1
+
+ touch $@
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp
+
+ # Add here commands to clean up after the build process.
+ rm -rf builddir
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/marketstoday.
+ cd builddir && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/$(APPNAME) install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installexamples
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps # Uncomment this line for publishing!
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#include "configqmlview.h"
+#include "marketstodayqmlview.h"
+#include "logutility.h"
+#include <QtDeclarative/QDeclarativeView>
+#include <QDeclarativeEngine>
+#include <QDeclarativeContext>
+#include <QGraphicsObject>
+#include <QDebug>
+
+ConfigQMLView::ConfigQMLView(QWidget *parent, MarketsTodayQMLView *parentView)
+ : QDeclarativeView(parent), logUtility(new LogUtility(this))
+{
+ // Setup QDeclarativeView
+ setAlignment(Qt::AlignCenter);
+ //setContentResizable(false);
+ this->stockQuotesView = parentView;
+ this->rootContext()->setContextProperty("logUtility",logUtility);
+}
+
+void ConfigQMLView::configClosed(){
+ logUtility->logMessage("Config window is closed");
+ this->stockQuotesView->initialize();
+ this->close();
+}
+
+ConfigQMLView::~ConfigQMLView(){
+ qDebug() << "In destructor for ConfigQMLView object";
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#ifndef CONFIGQMLVIEW_H
+#define CONFIGQMLVIEW_H
+
+#include <QDeclarativeView>
+#include "marketstodayqmlview.h"
+#include "logutility.h"
+
+class ConfigQMLView : public QDeclarativeView
+{
+ Q_OBJECT
+
+public:
+ ConfigQMLView(QWidget *parent = 0, MarketsTodayQMLView *parentView = 0);
+ ~ConfigQMLView();
+
+public slots:
+ void configClosed();
+
+private:
+ MarketsTodayQMLView *stockQuotesView;
+ LogUtility * const logUtility;
+};
+
+#endif // CONFIGQMLVIEW_H
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#ifndef LOGUTILITY_H
+#define LOGUTILITY_H
+#include <QDebug>
+#include <QFile>
+#include <QIODevice>
+#include <QDateTime>
+
+class LogUtility : public QObject
+{
+ Q_OBJECT
+
+public:
+ LogUtility(QObject *parent = 0) :
+ QObject(parent){
+
+ }
+ ~LogUtility(){
+ qDebug() << "Markets Today: In LogUtility object destructor..";
+ }
+
+public slots:
+ void logMessage(QString strMessage) {
+
+ QString strTimeNow = QDateTime::currentDateTime().toString("dd-MMM-yyyy HH:mm:ss");
+ qDebug() << QString("Markets Today: [%1] - %2").arg(strTimeNow,strMessage);
+
+#ifdef Q_WS_MAEMO_5
+ //For maemo use a common path
+ QFile logFile("/home/user/.marketstoday/marketstoday.log");
+#else
+ QFile logFile("marketstoday.log");
+#endif
+
+ if (!logFile.open(QIODevice::Append | QIODevice::WriteOnly | QIODevice::Text)) { return; }
+
+ QTextStream logStream(&logFile);
+ logStream << QString("Markets Today: [%1] - %2").arg(strTimeNow,strMessage) << endl;
+ }
+};
+
+#endif // LOGUTILITY_H
+;
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#include "qmaemo5homescreenadaptor.h"
+#include "marketstodayqmlview.h"
+
+#include <QtGui>
+#include <QDeclarativeEngine>
+#include <QDebug>
+#include "logutility.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ MarketsTodayQMLView widgetAdaptor;
+ QMaemo5HomescreenAdaptor *adaptor = new QMaemo5HomescreenAdaptor(&widgetAdaptor);
+ adaptor->setSettingsAvailable(false); //Don't use the standard widget settings button
+
+#ifdef Q_WS_MAEMO_5
+ //For maemo use a common path
+ widgetAdaptor.engine()->setOfflineStoragePath("/home/user/.marketstoday/OfflineStorage");
+#else
+ widgetAdaptor.engine()->setOfflineStoragePath("qml/OfflineStorage");
+#endif
+ widgetAdaptor.setResizeMode(QDeclarativeView::SizeRootObjectToView);
+ widgetAdaptor.setFixedSize(400,325);
+ widgetAdaptor.setSource(QUrl("qrc:/qml/MarketsToday.qml"));
+ widgetAdaptor.setWindowTitle("Markets Today");
+
+ LogUtility logUtility;
+ logUtility.logMessage(widgetAdaptor.engine()->offlineStoragePath());
+
+ QObject *rootObject = dynamic_cast<QObject*>(widgetAdaptor.rootObject());
+ //Signal to display config window when user clicks config icon
+ QObject::connect(rootObject, SIGNAL(showConfigInNewWindow()), &widgetAdaptor, SLOT(displayConfigWindow()));
+ //Signal to reload configuration and update quotes after config window is clicked
+ QObject::connect(&widgetAdaptor, SIGNAL(initializeWidget()), rootObject, SLOT(initialize()));
+
+ widgetAdaptor.show();
+ app.exec();
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#include "marketstodayqmlview.h"
+#include "configqmlview.h"
+#include <QDeclarativeEngine>
+#include <QDeclarativeContext>
+#include "logutility.h"
+#include <QDebug>
+
+MarketsTodayQMLView::MarketsTodayQMLView(QWidget *parent) : QDeclarativeView(parent), logUtility(new LogUtility(this))
+{
+ // Setup QDeclarativeView
+ //setAttribute(Qt::WA_OpaquePaintEvent);
+ setAttribute(Qt::WA_TranslucentBackground);
+ setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
+ setAlignment(Qt::AlignCenter);
+ this->rootContext()->setContextProperty("logUtility",logUtility);
+}
+
+QSize MarketsTodayQMLView::sizeHint() const
+{
+ return QSize(400, 325);
+}
+
+void MarketsTodayQMLView::displayConfigWindow() {
+
+ ConfigQMLView *configView = new ConfigQMLView(this->parentWidget(),this);
+
+#ifdef Q_WS_MAEMO_5
+ //For maemo use a common path
+ configView->engine()->setOfflineStoragePath("/home/user/.marketstoday/OfflineStorage");
+#else
+ configView->engine()->setOfflineStoragePath("qml/OfflineStorage");
+#endif
+ configView->setResizeMode(QDeclarativeView::SizeRootObjectToView);
+ configView->setSource(QUrl("qrc:/qml/Config.qml"));
+ configView->setWindowTitle("Configuration");
+ QObject::connect((QObject*)configView->engine(), SIGNAL(quit()), configView, SLOT(configClosed()));
+ configView->showFullScreen();
+}
+
+void MarketsTodayQMLView::initialize(){
+ emit initializeWidget();
+}
+
+MarketsTodayQMLView::~MarketsTodayQMLView(){
+ qDebug() << "In destructor for MarketsTodayQMLView object";
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+#ifndef MARKETSTODAYQMLVIEW_H
+#define MARKETSTODAYQMLVIEW_H
+
+#include <QDeclarativeView>
+#include "logutility.h"
+
+class MarketsTodayQMLView: public QDeclarativeView
+{
+ Q_OBJECT
+
+public:
+ MarketsTodayQMLView(QWidget *parent = 0);
+ ~MarketsTodayQMLView();
+ QSize sizeHint() const;
+
+public slots:
+ void displayConfigWindow();
+ void initialize();
+
+signals:
+ void initializeWidget();
+
+private:
+ LogUtility * const logUtility;
+
+};
+
+#endif // MARKETSTODAYQMLVIEW_H
--- /dev/null
+ begin-base64 777 marketstoday.png
+ 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
+ kc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE
+ 3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/8
+ 7fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfIT
+ dyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxM
+ DUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8e
+ lQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zv
+ n//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vt
+ V5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmK
+ rhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N
+ 2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLd
+ tWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvtt
+ Xa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG
+ 4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+
+ 0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO
+ 32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
+ nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+
+ cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP
+ /pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV
+ 69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98P
+ T+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9
+ 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
+ AElFTkSuQmCC
+ ====
--- /dev/null
+[Desktop Entry]
+Name=Markets Today
+Comment=A simple desktop widget for stock quotes
+Type=qt
+X-Path=/opt/marketstoday/marketstoday
+X-Multiple-Instances=false
+X-home-applet-minwidth=400
+X-home-applet-minheight=325
+Name[en_US]=Markets Today
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmaemo5homescreenadaptor.h"
+
+#include <QtCore/qsocketnotifier.h>
+#include <QtCore/qpointer.h>
+
+#include <QtGui/qapplication.h>
+#include <QtGui/qx11info_x11.h>
+#include <QtGui/qwidget.h>
+#include <QtGui/qevent.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+
+static QCoreApplication::EventFilter oldEventFilter;
+static QList<QMaemo5HomescreenAdaptor *> allDesktopItems;
+
+static Atom atomByName(const char *name)
+{
+ Atom atom = XInternAtom(QX11Info::display(), name, False);
+ if (!atom)
+ qWarning("Unable to obtain %s atom. This class requires a running Hildon session.", name);
+
+ return atom;
+}
+
+enum HomescreenAtoms
+{
+ HildonAppletId = 0,
+ NetWmWindowType = 1,
+ Utf8String = 2,
+ HildonTypeHomeApplet = 3,
+ HildonAppletSettings = 4,
+ HildonAppletShowSettings = 5,
+ HildonAppletOnCurrentDesktop = 6,
+ EnumCount = 7
+};
+
+static Atom hsAtoms[EnumCount] = { 0, 0, 0, 0, 0, 0, 0 };
+
+static void initAtoms()
+{
+ hsAtoms[HildonAppletId] = atomByName("_HILDON_APPLET_ID");
+ hsAtoms[NetWmWindowType] = atomByName("_NET_WM_WINDOW_TYPE");
+ hsAtoms[Utf8String] = atomByName("UTF8_STRING");
+ hsAtoms[HildonTypeHomeApplet] = atomByName("_HILDON_WM_WINDOW_TYPE_HOME_APPLET");
+ hsAtoms[HildonAppletSettings] = atomByName("_HILDON_APPLET_SETTINGS");
+ hsAtoms[HildonAppletShowSettings] = atomByName("_HILDON_APPLET_SHOW_SETTINGS");
+ hsAtoms[HildonAppletOnCurrentDesktop] = atomByName("_HILDON_APPLET_ON_CURRENT_DESKTOP");
+}
+
+/*! \class QMaemo5HomescreenAdaptor
+
+ \brief The QMaemo5HomescreenAdaptor flags a top-level QWidget as homescreen widget
+
+ QMaemo5HomescreenAdaptor is used in conjunction with the Qt for Maemo homescreen
+ loader. It evaluates the two command line arguments "-plugin-id" and "-write-pipe"
+ to set up a Qt top-level widget as Maemo 5 homescreen widget.
+
+ Note: By default, the widget will have a black background. In order to make the
+ widget transparent, set the Qt::WA_TranslucentBackground widget attribute.
+
+ Example:
+
+ \code
+ QLabel *label = new QLabel("Hello Homescreen");
+ new QMaemo5HomescreenAdaptor(label);
+ label->show();
+ \endcode
+
+ Maemo 5 supports homescreen widgets with settings dialogs. To use it, set
+ the settingsAvailable() property and show a settings dialog when the
+ settingsRequested() signal is emitted.
+
+ Maemo 5 supports more than one homescreen. In order to determine whether
+ the homescreen widget is on the currently visible homescreen, connect to
+ the homescreenChanged() signal.
+*/
+
+/*! \property QMaemo5HomescreenAdaptor::settingsAvailable
+
+ Set this property to true if the widget can make use of a settings dialog,
+ otherwise to false. When this property is set to true, the Maemo 5 homescreen
+ renders a small settings icon on top of the homescreen widget when the
+ user enters the desktop menu. When the user clicks that settings icon, the
+ settingsRequested() signal is emitted.
+
+ The default is false.
+
+ \sa settingsRequested()
+ */
+
+/*! \fn void settingsRequested()
+
+ This signal is emitted every time the homescreen widget's settings icon is
+ invoked by the user. Note that this icon is only visible when the settingsAvailable()
+ property is set.
+
+ \sa settingsAvailable()
+ */
+
+/*! \fn void homescreenChanged(bool isOnCurrentHomescreen)
+
+ This is signal is emitted when current homescreen changes and the homescreen
+ widget becomes visible or invisible. The \a isOnCurrentHomescreen argument
+ indicates whether the homescreen widget is on the current homescreen or not.
+
+ This signal can be used to start/stop background processing in order to save
+ battery life.
+ */
+
+/*!
+ Constructs a new QMaemo5HomescreenAdaptor for the given \a widget.
+
+ Note: The widget must be a top-level widget, and must not be reparented
+ during the lifetime of this adaptor.
+
+ Note: \a widget is also the parent of this class, if the widget is destroyed,
+ so is this adaptor.
+ */
+QMaemo5HomescreenAdaptor::QMaemo5HomescreenAdaptor(QWidget *widget)
+ : QObject(widget),
+ hasSettings(false)
+{
+ Q_ASSERT(widget->isWindow());
+
+ if (!hsAtoms[0])
+ initAtoms();
+
+ Display *display = QX11Info::display();
+
+ const QStringList args = QApplication::arguments();
+
+ // parse the command line arguments.
+ int idx;
+ if ((idx = args.indexOf(QLatin1String("-plugin-id"))) != -1) {
+ appletId = args.value(idx + 1);
+ const QByteArray pluginId = appletId.toUtf8();
+ if (!pluginId.isEmpty()) {
+ XChangeProperty(display,
+ widget->winId(),
+ hsAtoms[HildonAppletId],
+ hsAtoms[Utf8String], 8, PropModeReplace,
+ reinterpret_cast<const unsigned char *>(pluginId.constData()),
+ pluginId.length());
+ }
+ }
+ if ((idx = args.indexOf(QLatin1String("-write-pipe"))) != -1) {
+ bool ok;
+ int sockId = args.value(idx + 1).toInt(&ok);
+ if (ok) {
+ socketNotifier = new QSocketNotifier(sockId, QSocketNotifier::Exception, this);
+ connect(socketNotifier, SIGNAL(activated(int)), this, SLOT(socketException()));
+ }
+ }
+
+ // set the X11 atoms to flag our widget as homescreen widget
+ if (!appletId.isEmpty()) {
+ XChangeProperty(display,
+ widget->winId(),
+ hsAtoms[NetWmWindowType],
+ XA_ATOM, 32, PropModeReplace,
+ reinterpret_cast<const unsigned char *>(&hsAtoms[HildonTypeHomeApplet]),
+ 1);
+
+ updateStatus();
+
+ // --- make this window a child of root
+ XSetTransientForHint(display, widget->winId(),
+ RootWindow(display, widget->x11Info().screen()));
+
+ // --- add an x11 event filter
+ if (!oldEventFilter)
+ oldEventFilter = QCoreApplication::instance()->setEventFilter(applicationEventFilter);
+
+ allDesktopItems.append(this);
+
+ // --- set WM input hints indicating that we don't want focus events
+ XWMHints *h = XGetWMHints(display, widget->winId());
+ XWMHints wm_hints;
+ if (!h) {
+ memset(&wm_hints, 0, sizeof(wm_hints)); // make valgrind happy
+ h = &wm_hints;
+ }
+ h->flags |= InputHint;
+ h->input = False;
+
+ XSetWMHints(display, widget->winId(), h);
+ if (h != &wm_hints)
+ XFree(h);
+
+ widget->setMouseTracking(true);
+ }
+}
+
+QMaemo5HomescreenAdaptor::~QMaemo5HomescreenAdaptor()
+{
+ allDesktopItems.removeOne(this);
+}
+
+/*! \internal */
+void QMaemo5HomescreenAdaptor::updateStatus()
+{
+ if (appletId.isEmpty())
+ return;
+
+ Display *display = QX11Info::display();
+
+ // Set or remove settings property
+ if (hasSettings)
+ XChangeProperty(display,
+ appletWidget()->winId(),
+ hsAtoms[HildonAppletSettings],
+ XA_CARDINAL, 32, PropModeReplace,
+ (const unsigned char *) &(hasSettings), 1);
+ else
+ XDeleteProperty(display,
+ appletWidget()->winId(),
+ hsAtoms[HildonAppletSettings]);
+}
+
+/*! \internal */
+void QMaemo5HomescreenAdaptor::socketException()
+{
+ socketNotifier->setEnabled(false);
+ appletWidget()->close();
+}
+
+bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
+{
+ return QCoreApplication::sendSpontaneousEvent(receiver, event);
+}
+
+
+
+/*! \internal */
+bool QMaemo5HomescreenAdaptor::applicationEventFilter(void *message, long *result)
+{
+ static QPointer<QWidget> lastMouseWidget;
+ bool retval = false;
+
+ if (oldEventFilter)
+ retval = oldEventFilter(message, result);
+
+ if (allDesktopItems.isEmpty())
+ return retval;
+
+ XEvent *ev = reinterpret_cast<XEvent *>(message);
+
+ // Generate a mouse release for a leave Notify (as we don't get the mouse release from X11)
+ if (ev->type == ButtonPress) {
+ QPoint globalPos( ev->xbutton.x_root, ev->xbutton.y_root);
+ QWidget *widget = QWidget::find((WId)ev->xany.window);
+ if (widget) {
+ lastMouseWidget = widget->childAt(widget->mapFromGlobal(globalPos));
+ if (!lastMouseWidget)
+ lastMouseWidget = widget;
+ }
+
+ } else if (ev->type == ButtonRelease) {
+ lastMouseWidget = 0;
+
+ } else if (ev->type == LeaveNotify) {
+ if (lastMouseWidget) {
+ // create a mouse up event that lies in Nirvana.
+ QPoint pos(-1000, -1000);
+ QMouseEvent e(QEvent::MouseButtonRelease, pos, pos, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ qt_sendSpontaneousEvent(lastMouseWidget, &e);
+ lastMouseWidget = 0;
+ }
+
+ } else if (ev->type == ClientMessage) {
+ XClientMessageEvent *cm = (XClientMessageEvent *)message;
+ if (cm->message_type == hsAtoms[HildonAppletShowSettings]) {
+ for (int i = 0; i < allDesktopItems.count(); ++i) {
+ if (allDesktopItems.at(i)->appletWidget()->winId() == ev->xproperty.window) {
+ emit allDesktopItems.at(i)->settingsRequested();
+ retval = true;
+ }
+ }
+ }
+ } else if (ev->type == PropertyNotify) {
+ if (ev->xproperty.atom == hsAtoms[HildonAppletOnCurrentDesktop]) {
+ for (int i = 0; i < allDesktopItems.count(); ++i) {
+ if (allDesktopItems.at(i)->appletWidget()->winId() == ev->xproperty.window) {
+ emit allDesktopItems.at(i)->homescreenChanged(ev->xproperty.state == 0);
+ retval = true;
+ }
+ }
+ }
+ }
+
+ return retval;
+}
+
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMAEMO5HOMESCREENADAPTOR_H
+#define QMAEMO5HOMESCREENADAPTOR_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qpointer.h>
+#include <QtGui/qwidget.h>
+
+class QWidget;
+class QSocketNotifier;
+
+class QMaemo5HomescreenAdaptor : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool settingsAvailable READ settingsAvailable WRITE setSettingsAvailable)
+
+public:
+ QMaemo5HomescreenAdaptor(QWidget *widget);
+ ~QMaemo5HomescreenAdaptor();
+
+ inline void setSettingsAvailable(bool available)
+ {
+ hasSettings = available;
+ updateStatus();
+ }
+
+ inline bool settingsAvailable() const
+ {
+ return hasSettings;
+ }
+
+Q_SIGNALS:
+ void settingsRequested();
+ void homescreenChanged(bool isOnCurrentHomescreen);
+
+private Q_SLOTS:
+ void socketException();
+
+private:
+ inline QWidget *appletWidget() const { return static_cast<QWidget *>(parent()); }
+
+ void updateStatus();
+
+ static bool applicationEventFilter(void *message, long *result);
+
+ bool hasSettings;
+ QString appletId;
+ QSocketNotifier *socketNotifier;
+};
+
+#endif
--- /dev/null
+HEADERS += $$PWD/qmaemo5homescreenadaptor.h
+SOURCES += $$PWD/qmaemo5homescreenadaptor.cpp
+
+INCLUDEPATH += $$PWD
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+import "Library" as Library
+
+Rectangle {
+ id: screen
+
+ width: 800; height: 480
+
+ property int componentWidth: screen.width
+ property int itemHeight: 50
+
+ function close(){
+ Qt.quit();
+ }
+
+ function back(){
+ configArea.sourceComponent = configParentComponent;
+ titleBar.buttonType = "Close";
+ }
+
+ Library.TitleBar {
+ id: titleBar; width: parent.width; height: 60;
+ anchors.top: parent.top
+ title: "Markets Today - Configuration"
+ buttonType: "Close"
+ onCloseClicked: close()
+ onBackClicked: back()
+ }
+
+ Loader {
+ id: configArea
+ sourceComponent: configParentComponent
+ anchors.top: titleBar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ }
+
+ Component {
+ id: configParentComponent
+ ConfigOptionsComponent {
+ id: configOptionsComponent
+ onTickersOptionSelected: {
+ configArea.sourceComponent = tickersComponent;
+ titleBar.buttonType = "Back";
+ }
+ onSettingsOptionSelected: {
+ configArea.sourceComponent = settingsComponent;
+ titleBar.buttonType = "Back";
+ }
+ }
+ }
+
+ Component {
+ id: tickersComponent
+ ConfigTickersComponent {
+ id: tickersTab
+ anchors.fill: parent
+ componentWidth: screen.componentWidth
+ itemHeight: screen.itemHeight
+ onLogRequest: logUtility.logMessage(strMessage)
+
+ }
+ }
+
+ Component {
+ id: settingsComponent
+ ConfigParametersComponent {
+ id: settingsTab
+ anchors.fill: parent
+ onLogRequest: logUtility.logMessage(strMessage)
+ }
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+
+Rectangle {
+ id: configOptionsComponent
+ anchors.fill: parent;
+ color: "#343434"
+ clip: true
+
+ signal tickersOptionSelected
+ signal settingsOptionSelected
+
+ Rectangle {
+ id: iconTickersArea
+ width: 128
+ height: 128
+ border.width: 1
+ border.color: "#BFBFBF"
+ color:"#2E2E2E"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.horizontalCenterOffset: -0.25 * parent.width
+ radius: 15
+ Image {
+ source: "Library/images/icon_stocks.png"
+ anchors.fill: parent
+ }
+
+ MouseArea{
+ id: iconTickersMouseArea
+ anchors.fill: parent
+ onClicked: {
+ configOptionsComponent.tickersOptionSelected();
+ }
+ }
+
+ states: State {
+ name: "pressed"; when: iconTickersMouseArea.pressed
+ PropertyChanges { target: iconTickersArea; color: "#9a9a9a"}
+ }
+ }
+
+ Rectangle {
+ id: iconSettingsArea
+ width: 128
+ height: 128
+ border.width: 1
+ border.color: "#BFBFBF"
+ color:"#2E2E2E"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.horizontalCenterOffset: 0.25 * parent.width
+ radius: 15
+ Image {
+ source: "Library/images/icon_settings.png"
+ anchors.fill: parent
+ }
+
+ MouseArea{
+ id: iconSettingsMouseArea
+ anchors.fill: parent
+ onClicked: {
+ configOptionsComponent.settingsOptionSelected();
+ }
+ }
+ states: State {
+ name: "pressed"; when: iconSettingsMouseArea.pressed
+ PropertyChanges { target: iconSettingsArea; color: "#9a9a9a"}
+ }
+ }
+
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+import "Library/js/DBUtility.js" as DBUtility
+
+Item {
+ id: configParametersComponent
+ property bool updateFreqEnabled
+ property string updateFreqMin
+ property bool updateWeekdaysOnly
+ signal logRequest(string strMessage)
+
+ Rectangle {
+ id: updateConfig
+ anchors.fill: parent
+ color:"#343434"
+
+ Component.onCompleted: {
+ DBUtility.initialize();
+ loadSettings();
+ }
+
+ Component.onDestruction:{
+ logRequest("Saving settings");
+ saveSettings();
+ }
+
+ function loadSettings(){
+ var value;
+ value = DBUtility.getSetting("UpdateFreqency");
+ if (!value || value == "0.0" || value == ""){
+ configParametersComponent.updateFreqEnabled = false;
+ }
+ else{
+ configParametersComponent.updateFreqEnabled = true;
+ configParametersComponent.updateFreqMin = parseInt(value);
+ }
+ value = DBUtility.getSetting("UpdateWeekdaysOnly");
+ if (!value || value == "0.0" || value == ""){
+ configParametersComponent.updateWeekdaysOnly = false;
+ }
+ else{
+ configParametersComponent.updateWeekdaysOnly = true;
+ }
+ }
+
+ function saveSettings(){
+ DBUtility.setSetting("UpdateFreqency",configParametersComponent.updateFreqMin);
+ DBUtility.setSetting("UpdateWeekdaysOnly",(configParametersComponent.updateWeekdaysOnly?1:0));
+ }
+
+ Text {
+ id: autoUpdateSectionLabel
+ anchors.top: parent.top
+ //anchors.topMargin: 10
+ anchors.left: parent.left
+ anchors.leftMargin: 45
+ height: 50
+ horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 22; font.bold: true; elide: Text.ElideRight; color: "#B8B8B8"; style: Text.Raised; styleColor: "black"
+ text: "Auto-Update"
+ }
+
+ Rectangle {
+ id: autoUpdateSection
+ border.width: 1
+ border.color: "#BFBFBF"
+ color:"#2E2E2E"
+ anchors.top: autoUpdateSectionLabel.bottom
+ anchors.topMargin: 10
+ anchors.left: parent.left
+ anchors.leftMargin: 40
+ anchors.right: parent.right
+ anchors.rightMargin: 40
+ height: 120
+ radius: 15
+
+ Row {
+ id: rowUpdateFreq
+ anchors.top: parent.top
+ anchors.topMargin: 5
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ anchors.right: parent.right
+ height: 50
+ spacing: 5
+
+ Image {
+ id: checkboxUpdateFreqImg
+ source: configParametersComponent.updateFreqEnabled? "Library/images/checkbox_checked.png":"Library/images/checkbox_unchecked.png"
+ width: 32; height: 32
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ configParametersComponent.updateFreqEnabled = !configParametersComponent.updateFreqEnabled;
+ if (!configParametersComponent.updateFreqEnabled){
+ txtUpdateFreqMin.text = "";
+ configParametersComponent.updateWeekdaysOnly = false;
+ }
+ }
+ }
+ }
+
+ Text{
+ height:parent.height
+ horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 20; font.bold: false; elide: Text.ElideRight; style: Text.Raised; styleColor: "black"
+ text: "Every "
+ color: configParametersComponent.updateFreqEnabled? "#ffffff" :"#B8B8B8";
+ }
+ Item {
+ height: 40
+ width: 80
+ BorderImage { source: "Library/images/lineedit.sci"; anchors.fill: parent }
+ TextInput{
+ id: txtUpdateFreqMin
+ anchors.fill: parent
+ focus: true
+ text: configParametersComponent.updateFreqMin
+ horizontalAlignment: Text.AlignHCenter
+ inputMethodHints: Qt.ImhDigitsOnly | Qt.ImhNoPredictiveText
+ onTextChanged: {
+ configParametersComponent.updateFreqMin = txtUpdateFreqMin.text;
+ }
+ }
+ }
+ Text{
+ height:parent.height
+ horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 20; font.bold: false; elide: Text.ElideRight; style: Text.Raised; styleColor: "black"
+ text: " minutes"
+ color: configParametersComponent.updateFreqEnabled? "#ffffff" :"#B8B8B8";
+ }
+ }
+ Row {
+ id: rowUpdateDays
+ anchors.top: rowUpdateFreq.bottom
+ anchors.topMargin: 5
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ anchors.right: parent.right
+ height: 50
+ spacing: 5
+
+ Image {
+ id: checkboxUpdateWeekdays
+ source: configParametersComponent.updateWeekdaysOnly? "Library/images/checkbox_checked.png":"Library/images/checkbox_unchecked.png"
+ width: 32; height: 32
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ configParametersComponent.updateWeekdaysOnly = !configParametersComponent.updateWeekdaysOnly;
+ }
+ }
+ }
+
+ Text{
+ height:parent.height
+ horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
+ font.pixelSize: 20; font.bold: false; elide: Text.ElideRight; style: Text.Raised; styleColor: "black"
+ text: "Only on weekdays"
+ color: configParametersComponent.updateWeekdaysOnly? "#ffffff" :"#B8B8B8";
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+import "Library/js/DBUtility.js" as DBUtility
+
+Item {
+ id: tickerTab
+ property int componentWidth
+ property int itemHeight
+ signal logRequest(string strMessage)
+
+ Component.onCompleted: {
+ DBUtility.initialize();
+ loadSymbols();
+ }
+
+ function loadSymbols(){
+ var symbolsArray = DBUtility.getAllSymbols();
+ if (symbolsArray && symbolsArray.length > 0){
+ var i = 0;
+ for (i = 0; i< symbolsArray.length; i++) {
+ logRequest("Appending "+symbolsArray[i]+ " to ListModel");
+ symbolsListModel.append({"symbol": symbolsArray[i]});
+ }
+ logRequest("ListModel count is "+symbolsListModel.count);
+ }
+ }
+
+ function removeSymbol(symbol,index){
+ logRequest("Removing symbol "+symbol+" at index "+index);
+
+ var result = DBUtility.removeSymbol(symbol);
+ if (result != "Error"){
+ symbolsListModel.remove(index);
+ }
+ else{
+ logRequest("Error: DB error while removing "+symbol+" at index "+index);
+ }
+
+ }
+
+ function addSymbol(symbol){
+ if (symbol && symbol.length > 0){
+ symbol = symbol.toUpperCase();
+ logRequest("Adding symbol "+symbol);
+ var result = DBUtility.addSymbol(symbol);
+ logRequest("Result is "+result);
+
+ if (result != "Error"){
+ symbolsListModel.append({"symbol": symbol});
+ }
+ else{
+ logRequest("Error: DB error while adding "+symbol);
+ }
+ }
+ else{
+ logRequest("Error: Invalid symbol "+symbol);
+ }
+ }
+
+ ListModel {
+ id: symbolsListModel
+ }
+
+ Component {
+ id: tickersListDelegate
+
+ Item {
+ id: wrapper; width: componentWidth; height: itemHeight
+ Rectangle { id: listRecord;
+ color: "black";
+ opacity: index % 2 ? 0.2 : 0.4;
+ height: parent.height - 2;
+ width: parent.width; y: 1 }
+
+ Text {
+ text: symbol;
+ anchors.left: parent.left
+ anchors.leftMargin: 30
+ anchors.verticalCenter: parent.verticalCenter
+ verticalAlignment: Text.AlignVCenter
+ width: parent.width - 120;
+ height: parent.height
+ font.pixelSize: 18;
+ font.bold: true;
+ elide: Text.ElideRight;
+ color: "white";
+ style: Text.Raised;
+ styleColor: "black"
+ }
+
+ Rectangle {
+ id: removeButtonArea
+ width: 120
+ height: parent.height
+ anchors.right: parent.right
+ color: "#00000000";
+
+ Image {
+ source: "Library/images/remove.png"
+ anchors.centerIn: parent
+ width: 32; height: 32
+ }
+
+ MouseArea{
+ id:removeButtonMouseArea
+ anchors.fill: parent
+ onClicked: {
+ removeSymbol(symbol,index)
+ }
+ }
+
+ states: State {
+ name: "pressed"; when: removeButtonMouseArea.pressed
+ PropertyChanges { target: removeButtonArea; color: "#9a9a9a"}
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ id: newSymbolRow
+ //width: parent.width
+ width: componentWidth
+ height: itemHeight;
+ anchors.top: parent.top
+ color: "#343434"
+
+ Item {
+ id: lineEditItem
+ width: parent.width - 120
+ height: parent.height
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ BorderImage { source: "Library/images/lineedit.sci"; anchors.fill: parent }
+ TextInput{
+ id: newSymbol
+ width: parent.width
+ height: parent.height
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ anchors.verticalCenter: parent.verticalCenter
+ maximumLength:25
+ font.pixelSize: 18
+ font.bold: true
+ font.capitalization: Font.AllUppercase
+ color: "#151515"; selectionColor: "green"
+ KeyNavigation.tab: addButton
+ Keys.onReturnPressed: {
+ logRequest("Return pressed");
+ addSymbol(newSymbol.text.trim());
+ newSymbol.text = "";
+ }
+ Keys.onEnterPressed: {
+ logRequest("Enter pressed");
+ addSymbol(newSymbol.text.trim());
+ newSymbol.text = "";
+ }
+ focus: true
+ }
+ }
+
+ Rectangle {
+ id: addButtonArea
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ width: 120
+ height: parent.height
+ color:"#343434"
+ Image {
+ id: addButton
+ source: "Library/images/add.png"
+ width: 32; height: 32
+ anchors.centerIn: parent
+ }
+ MouseArea{
+ id:addButtonMouseArea
+ anchors.fill: parent
+ onClicked: {
+ addSymbol(newSymbol.text.trim());
+ newSymbol.text = "";
+ }
+ }
+ states: State {
+ name: "pressed"; when: addButtonMouseArea.pressed
+ PropertyChanges { target: addButtonArea; color: "#9a9a9a"}
+ }
+ }
+ }
+ Rectangle{
+ anchors.top: newSymbolRow.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width;
+
+ color:"#343434"
+ ListView{
+ id: symbolsListView
+ anchors.fill: parent
+ model: symbolsListModel
+ delegate: tickersListDelegate
+ }
+
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+
+Based on Nokia Qt Quick Demos with copyright notice below.
+
+Source: http://doc.qt.nokia.com/4.7-snapshot/demos-declarative-twitter-twittercore-titlebar-qml.html
+*/
+
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Qt 4.7
+
+Item {
+ id: titleBar
+ property string title: "Markets Today"
+ property string buttonType: "Config"
+ signal settingsClicked
+ signal closeClicked
+ signal backClicked
+
+ BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+
+ Item {
+ id: container
+ width: parent.width; height: parent.height
+
+ Text {
+ id: categoryText
+ anchors {
+ leftMargin: 5; rightMargin: 10
+ verticalCenter: parent.verticalCenter
+ horizontalCenter: parent.horizontalCenter
+ }
+ elide: Text.ElideMiddle
+ text: title
+ font.bold: true; color: "White"; style: Text.Raised; styleColor: "Black"
+ font.pixelSize: 18
+ }
+
+ Component {
+ id: configButton
+
+ Rectangle {
+ id: configButtonArea
+ anchors.fill: parent
+ color: "#00000000"
+
+ Image {
+ source: "images/config.png"
+ width: 40; height: 40
+ anchors.centerIn: parent
+ }
+
+ MouseArea{
+ id: configButtonMouseArea
+ anchors.fill: parent
+ onClicked: {
+ titleBar.settingsClicked();
+ }
+ }
+
+ states: State {
+ name: "pressed"; when: configButtonMouseArea.pressed
+ PropertyChanges { target: configButtonArea; color: "#9a9a9a"}
+ }
+ }
+ }
+
+ Component {
+ id: closeButton
+
+ Rectangle {
+ id: closeButtonArea
+ anchors.fill: parent
+ color: "#00000000"
+
+ Image {
+ source: "images/close.png"
+ width: 32; height: 32
+ anchors.centerIn: parent
+ }
+
+ MouseArea{
+ id: closeButtonMouseArea
+ anchors.fill: parent
+ onClicked: titleBar.closeClicked();
+ }
+
+ states: State {
+ name: "pressed"; when: closeButtonMouseArea.pressed
+ PropertyChanges { target: closeButtonArea; color: "#9a9a9a"}
+ }
+ }
+ }
+
+ Component {
+ id: backButton
+
+ Rectangle {
+ id: backButtonArea
+ anchors.fill: parent
+ color: "#00000000"
+
+ Image {
+ source: "images/back.png"
+ width: 32; height: 32
+ anchors.centerIn: parent
+ }
+ MouseArea{
+ id: backButtonMouseArea
+ anchors.fill: parent
+ onClicked: titleBar.backClicked();
+ }
+
+ states: State {
+ name: "pressed"; when: backButtonMouseArea.pressed
+ PropertyChanges { target: backButtonArea; color: "#9a9a9a"}
+ }
+ }
+ }
+
+ Loader {
+ width: 80
+ height: parent.height
+ anchors.right: parent.right
+ sourceComponent: buttonType == "Config" ? configButton : (buttonType == "Close"? closeButton: backButton)
+ }
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+
+Item {
+ id: toolbar
+ property bool updatePending: false
+
+ signal reloadButtonClicked
+ signal downButtonClicked
+ signal upButtonClicked
+ signal newsButtonClicked
+
+ BorderImage { source: "images/toolbar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+
+ Rectangle {
+ id: reloadButtonArea
+ width: 60
+ height: parent.height
+ anchors.left: parent.left
+ color: "#00000000"
+
+ Image {
+ id: reloadButton
+ source: "images/reload.png"
+ width: 32; height: 32
+ anchors.centerIn: parent
+
+ NumberAnimation on rotation {
+ from: 0; to: 360; running: toolbar.updatePending == true; loops: Animation.Infinite; duration: 900
+ }
+ }
+
+ MouseArea{
+ id: reloadButtonMouseArea
+ anchors.fill: parent
+ onClicked: {
+ toolbar.updatePending = true;
+ toolbar.reloadButtonClicked();
+ }
+ }
+
+ states: State {
+ name: "pressed"; when: reloadButtonMouseArea.pressed
+ PropertyChanges { target: reloadButtonArea; color: "#9a9a9a"}
+ }
+ }
+
+ Rectangle {
+ id: downButtonArea
+ width: 60
+ height: parent.height
+ anchors.right: parent.horizontalCenter; anchors.horizontalCenterOffset: -60;
+ color: "#00000000"
+
+ Image {
+ id: downButton
+ source: "images/down.png"
+ width: 32; height: 32
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ }
+
+ MouseArea{
+ id: downButtonMouseArea
+ anchors.fill: parent
+ onClicked: toolbar.downButtonClicked()
+ }
+
+ states: State {
+ name: "pressed"; when: downButtonMouseArea.pressed
+ PropertyChanges { target: downButtonArea; color: "#9a9a9a"}
+ }
+ }
+
+
+ Rectangle {
+ id: upButtonArea
+ width: 60
+ height: parent.height
+ anchors.left: parent.horizontalCenter; anchors.horizontalCenterOffset: 60;
+ color: "#00000000"
+
+ Image {
+ id: upButton
+ source: "images/up.png"
+ width: 32; height: 32
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ }
+
+ MouseArea{
+ id: upButtonMouseArea
+ anchors.fill: parent
+ onClicked: toolbar.upButtonClicked()
+ }
+
+ states: State {
+ name: "pressed"; when: upButtonMouseArea.pressed
+ PropertyChanges { target: upButtonArea; color: "#9a9a9a"}
+ }
+ }
+
+ Rectangle {
+ id: newsButtonArea
+ width: 60
+ height: parent.height
+ anchors.right: parent.right
+ color: "#00000000"
+
+ Image {
+ id: newsButton
+ source: "images/news.png"
+ width: 32; height: 32
+ anchors.centerIn: parent
+ }
+
+ MouseArea{
+ id: newsButtonMouseArea
+ anchors.fill: parent
+ onClicked: toolbar.newsButtonClicked()
+ }
+
+ states: State {
+ name: "pressed"; when: newsButtonMouseArea.pressed
+ PropertyChanges { target: newsButtonArea; color: "#9a9a9a"}
+ }
+ }
+}
--- /dev/null
+border.left: 10
+border.top: 10
+border.bottom: 10
+border.right: 10
+source: lineedit.png
--- /dev/null
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
--- /dev/null
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: toolbar.png
--- /dev/null
+border.left: 15
+border.top: 4
+border.bottom: 4
+border.right: 15
+source: toolbutton.png
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+function isTodayAWeekDay(){
+ var dayOfWeek = (new Date()).getDay();
+ var isWeekDay = (dayOfWeek == 0 || dayOfWeek == 6)? false : true;
+ return isWeekDay;
+}
--- /dev/null
+/*\r
+@version: 0.1\r
+@author: Sudheer K. <scifi1947 at gmail.com>\r
+@license: GNU General Public License\r
+*/\r
+\r
+function getDatabase() {\r
+ logMessage("Opening MarketsToday database..");\r
+ return openDatabaseSync("MarketsToday", "1.0", "StorageDatabase", 100);\r
+}\r
+\r
+function logMessage(strMessage){\r
+ if (logUtility){\r
+ logUtility.logMessage(strMessage);\r
+ }\r
+ else{\r
+ console.log(strMessage);\r
+ }\r
+}\r
+\r
+// Initialize tables\r
+function initialize() {\r
+ var db = getDatabase();\r
+ db.transaction(\r
+ function(tx) {\r
+ // Create the settings table if it doesn't already exist\r
+ // If the table exists, this is skipped\r
+ tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');\r
+ tx.executeSql('CREATE TABLE IF NOT EXISTS tickers(symbol TEXT UNIQUE)');\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ });\r
+}\r
+\r
+function getSetting(setting) {\r
+ var db = getDatabase();\r
+ var res="";\r
+ db.transaction(\r
+ function(tx) {\r
+ var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);\r
+ if (rs.rows.length > 0) {\r
+ res = rs.rows.item(0).value;\r
+ logMessage(setting+" is "+res);\r
+ } else {\r
+ res = "Unknown";\r
+ }\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ }\r
+ );\r
+ return res;\r
+}\r
+\r
+\r
+function setSetting(setting, value) {\r
+ var db = getDatabase();\r
+ var res = "";\r
+ db.transaction(\r
+ function(tx) {\r
+ var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);\r
+ if (rs.rowsAffected > 0) {\r
+ res = "OK";\r
+ logMessage("Updated "+setting+" to "+value);\r
+ } else {\r
+ res = "Error";\r
+ }\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ }\r
+ );\r
+ return res;\r
+}\r
+\r
+function addSymbol(symbol){\r
+ logMessage('SQL> INSERT OR REPLACE INTO tickers VALUES ('+[symbol]+')');\r
+ var db = getDatabase();\r
+ var res = "";\r
+ logMessage("Opened MarketsToday database..");\r
+\r
+ db.transaction(function(tx) {\r
+ var rs = tx.executeSql('INSERT OR REPLACE INTO tickers VALUES (?);', [symbol]);\r
+ logMessage("Inserted/replaced "+rs.rowsAffected+" rows");\r
+ if (rs.rowsAffected > 0) {\r
+ res = "OK";\r
+ } else {\r
+ res = "Error";\r
+ }\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ }\r
+ );\r
+ return res;\r
+}\r
+\r
+function removeSymbol(symbol){\r
+ logMessage('SQL> DELETE FROM tickers WHERE symbol = '+[symbol]);\r
+ var db = getDatabase();\r
+ var res = "";\r
+ db.transaction(function(tx) {\r
+ var rs = tx.executeSql('DELETE FROM tickers WHERE symbol = ?;', [symbol]);\r
+ logMessage("Deleted "+rs.rowsAffected+" rows");\r
+ if (rs.rowsAffected > 0) {\r
+ res = "OK";\r
+ } else {\r
+ res = "Error";\r
+ }\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ }\r
+ );\r
+ return res;\r
+}\r
+\r
+function getAllSymbols(){\r
+ var db = getDatabase();\r
+ var symbolsArray = new Array();\r
+ db.transaction(function(tx) {\r
+ var rs = tx.executeSql('SELECT symbol FROM tickers');\r
+ logMessage("Fetched "+rs.rows.length+" rows");\r
+ var i = 0;\r
+ for (i = 0; i < rs.rows.length; i++){\r
+ symbolsArray[i] = rs.rows.item(i).symbol;\r
+ }\r
+ },\r
+ function(error) {\r
+ logMessage("Error ["+error.code +"] - " + error.DOMString+" occurred.");\r
+ }\r
+ );\r
+ return symbolsArray;\r
+}\r
--- /dev/null
+//Source: http://stackoverflow.com/questions/498578/how-can-i-convert-a-date-value-in-utc-format-to-a-date-object-in-javascript\r
+var ISODate = {\r
+ convert : function (input){\r
+ if (!(typeof input === "string")) throw "ISODate, convert: input must be a string";\r
+ var d = input.match(/^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(([+-])(\d{2}):(\d{2})))$/i);\r
+ if (!d) throw "ISODate, convert: Illegal format";\r
+ return new Date(\r
+ Date.UTC(d[1],d[2]-1,d[3],d[4],d[5],d[6]|0,(d[6]*1000-((d[6]|0)*1000))|0,d[7]) +\r
+ (d[7].toUpperCase() ==="Z" ? 0 : (d[10]*3600 + d[11]*60) * (d[9]==="-" ? 1000 : -1000))\r
+ );\r
+ },\r
+ format : function(t,utc){\r
+ if (typeof t === "string") t = this.convert(t);\r
+ if (!(t instanceof Date)) throw "ISODate, format: t is not a date object";\r
+ t = utc ?\r
+ [t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds()] :\r
+ [t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds()];\r
+\r
+ return this.month[t[1]] + " " +this.ordinal(t[2]) + ", " +t[0] +\r
+ " @ " + this.clock12(t[3],t[4]);\r
+ },\r
+ month:["January","February","March","April","May","June","July","September","October","November","December"],\r
+ ordinal:function(n) {\r
+ return n+(["th","st","nd","rd"][(( n % 100 / 10) | 0) ===1 ? 0 : n % 10 < 4 ? n % 10 : 0 ]);\r
+ },\r
+ clock12:function(h24,m,s){\r
+ h24%=24;\r
+ var h12 = h24 % 12;\r
+ if (h12===0) h12=12;\r
+ return h12 + ":" +\r
+ (m<10 ? "0" + m : m) +\r
+ (isFinite(s) ? ":" + (s<10?"0"+s:s): "") +\r
+ (h24<12 ? "AM":"PM");\r
+ }\r
+};\r
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+
+import "Library" as Library
+import "Library/js/ISODate.js" as DateLib
+import "Library/js/DBUtility.js" as DBUtility
+import "Library/js/Common.js" as Common
+
+Item {
+ id: screen; width: 400; height: 325
+
+ signal showConfigInNewWindow
+ signal quoteRefreshStarted
+ signal quoteRefreshCompleted
+
+ property int autoUpdateInterval: 300000
+ property bool updateWeekDaysOnly: false
+
+ function getQuery(){
+ var query;
+ var symbolsArray = DBUtility.getAllSymbols();
+ if (symbolsArray && symbolsArray.length > 0){
+ var i = 0;
+ for (i = 0; i< symbolsArray.length; i++) {
+ logUtility.logMessage("Appending "+symbolsArray[i]+ " to Query");
+
+ if (!query){
+ query = '"'+symbolsArray[i]+'"';
+ }
+ else{
+ query = query + ',"' + symbolsArray[i]+'"';
+ }
+ }
+ }
+
+ return query;
+ }
+
+
+ function reloadQuotes(){
+ var query = getQuery();
+ if (query){
+ screen.quoteRefreshStarted();
+ logUtility.logMessage("Reloading Data..");
+
+ //var queryURL = 'http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol in ("INDU","^IXIC","^GSPC","CLJ11.NYM","YHOO","AAPL","GOOG","MSFT")&env=store://datatables.org/alltableswithkeys';
+ var queryURL = 'http://query.yahooapis.com/v1/public/yql?q=select Symbol,Name,LastTradePriceOnly,Change,ChangeinPercent from yahoo.finance.quotes where symbol in ('+query+')&env=store://datatables.org/alltableswithkeys';
+ logUtility.logMessage(queryURL);
+
+ var response = new XMLHttpRequest();
+ response.onreadystatechange = function() {
+ if (response.readyState == XMLHttpRequest.DONE) {
+ stockQuoteDataModel.xml = response.responseText;
+ lastUpdatedDateModel.xml = response.responseText;
+ logUtility.logMessage("Data Reload Completed..");
+ screen.quoteRefreshCompleted();
+ }
+ }
+
+ response.open("GET", queryURL);
+ response.send();
+ }
+ else{
+ logUtility.logMessage("No stock symbols found in configuration.");
+ }
+ }
+
+ function loadSettings(){
+ var value;
+ value = DBUtility.getSetting("UpdateFreqency");
+ if (!value || value == "0.0" || value == ""){
+ autoUpdateInterval = 0;
+ }
+ else{
+ autoUpdateInterval = parseInt(value)*60*1000; //Convert minutes to milliseconds
+ }
+ value = DBUtility.getSetting("UpdateWeekdaysOnly");
+ if (!value || value == "0.0" || value == ""){
+ updateWeekDaysOnly = false;
+ }
+ else{
+ updateWeekDaysOnly = true;
+ }
+ }
+
+ function initialize(){
+ if (autoUpdateTimer.running) autoUpdateTimer.stop();
+ loadSettings();
+ reloadQuotes();
+ if (autoUpdateInterval != 0) {
+ logUtility.logMessage("Starting Timer..");
+ autoUpdateTimer.start();
+ }
+ }
+
+ Component.onCompleted: {
+ initialize();
+ }
+
+ Timer {
+ id: autoUpdateTimer
+ interval: autoUpdateInterval
+ //running: (autoUpdateInterval == 0? false:true)
+ repeat: true
+ onTriggered: {
+ if (!updateWeekDaysOnly){
+ logUtility.logMessage("Update triggered: Allowed to update all days of the week");
+ reloadQuotes();
+ }
+ else if (Common.isTodayAWeekDay()){
+ logUtility.logMessage("Update triggered: Today is a weekday");
+ reloadQuotes();
+ }
+ else{
+ logUtility.logMessage("Update not triggered: Today is not a weekday");
+ }
+ }
+ }
+
+ XmlListModel{
+ id: stockQuoteDataModel
+ query: "/query/results/quote"
+
+ XmlRole { name: "symbol"; query: "Symbol/string()" }
+ XmlRole { name: "stockName"; query: "Name/string()" }
+ XmlRole { name: "lastTradedPrice"; query: "LastTradePriceOnly/string()" }
+ XmlRole { name: "change"; query: "Change/string()" }
+ XmlRole { name: "changePercentage"; query: "ChangeinPercent/string()" }
+
+ onStatusChanged: {
+ if (status == XmlListModel.Ready){
+ logUtility.logMessage("No. of tickers: "+stockQuoteDataModel.count);
+ }
+ }
+ }
+
+ XmlListModel {
+ id: lastUpdatedDateModel
+ query: "/query"
+ namespaceDeclarations: "declare namespace yahoo='http://www.yahooapis.com/v1/base.rng';"
+ XmlRole { name: "timestamp"; query: '@yahoo:created/string()'}
+
+ onStatusChanged: {
+ if (status == XmlListModel.Ready && lastUpdatedDateModel.get(0)){
+ logUtility.logMessage("Updated: "+DateLib.ISODate.format(lastUpdatedDateModel.get(0).timestamp));
+ }
+ }
+ }
+
+ Rectangle {
+ id: background
+ anchors.fill: parent;
+ color: "#343434"
+ clip: true
+ property int itemHeight: 50
+
+ Library.TitleBar {
+ id: titleBar;
+ width: parent.width; height: 60;
+ anchors.top: parent.top
+ title: "Markets Today";
+ buttonType: "Config";
+ onSettingsClicked: {
+ screen.showConfigInNewWindow();
+ }
+
+ onCloseClicked: {
+ Qt.quit();
+ }
+ }
+
+ Loader {
+ id: marketsTodayLoader
+ anchors.top: titleBar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+ sourceComponent: stockQuotesParentComponent
+ }
+
+ Component {
+ id: stockQuotesParentComponent
+ StockQuotesComponent{
+ id:stockQuotesComponent
+ componentWidth: background.width
+ stockQuotesListModel: stockQuoteDataModel
+ lastUpdatedModel: lastUpdatedDateModel
+
+ Connections {
+ target: screen
+
+ onQuoteRefreshStarted: {
+ stockQuotesComponent.updateStarted();
+ }
+
+ onQuoteRefreshCompleted: {
+ stockQuotesComponent.updateCompleted();
+ }
+ }
+
+ Component.onCompleted: {
+ titleBar.title = "Markets Today";
+ titleBar.buttonType = "Config";
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+
+Component {
+ Item {
+ id: wrapper; width: wrapper.PathView.view.width; height: 50
+ Rectangle { color: "black"; opacity: index % 2 ? 0.2 : 0.4; height: wrapper.height; width: wrapper.width; y: 1
+ Row {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ width: wrapper.PathView.view.width - 70;
+ spacing: 5
+ Text { text: symbol; width: parent.width * 35/100; font.pixelSize: 18; font.bold: true; elide: Text.ElideRight; color: "white"; style: Text.Raised; styleColor: "black" }
+ Text { text: lastTradedPrice; width: parent.width * 25/100; font.pixelSize: 18; elide: Text.ElideLeft; color: "#cccccc"; style: Text.Raised; styleColor: "black" }
+ Text { text: change; width: parent.width * 20/100; font.pixelSize: 18; elide: Text.ElideRight
+ color: if(change >= 0){"green";} else {"red";}
+ style: Text.Raised; styleColor: "black" }
+ Text { text: changePercentage; width: parent.width * 20/100; font.pixelSize: 18; elide: Text.ElideRight;
+ color: if(change >= 0){"green";} else {"red";}
+ style: Text.Raised; styleColor: "black" }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+@version: 0.1
+@author: Sudheer K. <scifi1947 at gmail.com>
+@license: GNU General Public License
+*/
+
+import Qt 4.7
+import "Library" as Library
+import "Library/js/ISODate.js" as DateLib
+
+Rectangle {
+ id: stockQuotesComponent
+ clip: true
+ color: "#343434"
+
+ signal updateStarted
+ signal updateCompleted
+
+ property XmlListModel stockQuotesListModel
+ property XmlListModel lastUpdatedModel
+ property int componentWidth
+ property int componentHeight
+ property int itemHeight: 50
+
+ Component {
+ id: stockQuotesDelegate
+
+ Item {
+ id: wrapper; width: componentWidth; height: itemHeight
+ Item {
+ Rectangle { color: "black"; opacity: index % 2 ? 0.2 : 0.4; height: wrapper.height - 2; width: wrapper.width; y: 1 }
+ Row {
+ x: 30;y: 15;
+ width: componentWidth - 40;
+ spacing: 5
+
+ Text { text: if (width >= 250) {stockName;} else {symbol;} width: parent.width * 35/100; font.pixelSize: 18; font.bold: true; elide: Text.ElideRight; color: "white"; style: Text.Raised; styleColor: "black" }
+ Text { text: lastTradedPrice; width: parent.width * 25/100; font.pixelSize: 18; elide: Text.ElideLeft; color: "#cccccc"; style: Text.Raised; styleColor: "black" }
+ Text { text: change; width: parent.width * 20/100; font.pixelSize: 18; elide: Text.ElideRight
+ color: if(change >= 0){"green";} else {"red";}
+ style: Text.Raised; styleColor: "black" }
+ Text { text: changePercentage; width: parent.width * 20/100; font.pixelSize: 18; elide: Text.ElideRight;
+ color: if(change >= 0){"green";} else {"red";}
+ style: Text.Raised; styleColor: "black" }
+ }
+ }
+ }
+ }
+
+ Rectangle{
+ id: pathViewWrapper
+ width: parent.width
+ anchors.top: parent.top
+ anchors.bottom: footerText.top
+ color: "#343434"
+
+ PathView{
+ id: stockQuotesView
+ flickDeceleration: 500
+ //preferredHighlightBegin: 1/stockQuotesView.count
+ //preferredHighlightEnd: 1/stockQuotesView.count
+ //pathItemCount: count
+ focus: true
+ interactive: true
+ model: stockQuotesListModel
+ delegate: stockQuotesDelegate
+ path: Path {
+ startX: width / 2
+ startY: itemHeight/2
+ PathLine {
+ x: width / 2
+ y: stockQuotesView.count * itemHeight + itemHeight/2
+ }
+ }
+ Keys.onDownPressed: if (!moving && interactive) {
+ console.log(stockQuotesView.height);
+ incrementCurrentIndex();
+ }
+ Keys.onUpPressed: if (!moving && interactive) decrementCurrentIndex()
+ }
+ }
+
+ Rectangle{
+ id: footerText
+ width: parent.width
+ height: 25
+ color: "#343434"
+ anchors.bottom: toolBar.top
+ ListView {
+ anchors.fill: parent
+ model: lastUpdatedModel
+ delegate:
+ Text {
+ text: "Updated: "+DateLib.ISODate.format(timestamp)
+ horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
+ width: parent.width; font.pixelSize: 12; elide: Text.ElideRight;
+ color: "#cccccc"
+ style: Text.Raised; styleColor: "black"
+ }
+ }
+ }
+
+ Library.ToolBar {
+ id:toolBar
+ width: parent.width; height: 40
+ anchors.bottom: parent.bottom
+ opacity: 0.9
+ onReloadButtonClicked: reloadQuotes();
+ onDownButtonClicked: if (!stockQuotesView.moving && stockQuotesView.interactive) stockQuotesView.currentIndex = stockQuotesView.currentIndex + 1
+ onUpButtonClicked: if (!stockQuotesView.moving && stockQuotesView.interactive) stockQuotesView.currentIndex = stockQuotesView.currentIndex - 1
+ onNewsButtonClicked: Qt.openUrlExternally("http://finance.yahoo.com");
+ Connections {
+ target: stockQuotesComponent
+ onUpdateStarted:{
+ if (!toolBar.updatePending) toolBar.updatePending = true;
+ }
+ onUpdateCompleted:{
+ toolBar.updatePending = false;
+ }
+ }
+ }
+}
--- /dev/null
+<RCC>
+ <qresource prefix="/">
+ <file>qml/Library/ToolBar.qml</file>
+ <file>qml/Library/images/titlebar.png</file>
+ <file>qml/Library/images/lineedit.png</file>
+ <file>qml/Library/images/gloss.png</file>
+ <file>qml/Library/images/loading.png</file>
+ <file>qml/Library/images/lineedit.sci</file>
+ <file>qml/Library/images/titlebar.sci</file>
+ <file>qml/Library/TitleBar.qml</file>
+ <file>qml/Library/js/ISODate.js</file>
+ <file>qml/Library/js/DBUtility.js</file>
+ <file>qml/Library/images/config.png</file>
+ <file>qml/Library/images/close.png</file>
+ <file>qml/Library/images/reload.png</file>
+ <file>qml/Library/images/down.png</file>
+ <file>qml/Library/images/up.png</file>
+ <file>qml/Library/images/add.png</file>
+ <file>qml/Library/images/remove.png</file>
+ <file>qml/Library/images/news.png</file>
+ <file>qml/Library/images/checkbox_unchecked.png</file>
+ <file>qml/Library/images/checkbox_checked.png</file>
+ <file>qml/Library/images/icon_settings.png</file>
+ <file>qml/Library/images/icon_stocks.png</file>
+ <file>qml/Library/images/back.png</file>
+ <file>qml/Library/images/toolbar.png</file>
+ <file>qml/Library/images/toolbar.sci</file>
+ <file>qml/StockQuoteDelegate.qml</file>
+ <file>qml/StockQuotesComponent.qml</file>
+ <file>qml/ConfigOptionsComponent.qml</file>
+ <file>qml/ConfigTickersComponent.qml</file>
+ <file>qml/Config.qml</file>
+ <file>qml/MarketsToday.qml</file>
+ <file>qml/ConfigParametersComponent.qml</file>
+ <file>qml/Library/js/Common.js</file>
+ </qresource>
+</RCC>
--- /dev/null
+TEMPLATE = app
+
+QT += script \
+ declarative \
+ sql
+
+TARGET = marketstoday
+HEADERS += \
+ cpp/marketstodayqmlview.h \
+ cpp/configqmlview.h \
+ cpp/logutility.h
+SOURCES += cpp/main.cpp \
+ cpp/marketstodayqmlview.cpp \
+ cpp/configqmlview.cpp
+VPATH += cpp
+
+MOC_DIR = cpp/.mocs
+OBJECTS_DIR = cpp/.objs
+
+OTHER_FILES += qml/MarketsToday.qml \
+ qml/Config.qml \
+ qml/ConfigOptionsComponent.qml \
+ qml/ConfigParametersComponent.qml \
+ qml/ConfigTickersComponent.qml \
+ qml/StockQuoteDelegate.qml \
+ qml/StockQuotesComponent.qml \
+ qml/Library/TitleBar.qml \
+ qml/Library/ToolBar.qml \
+ qml/Library/js/DBUtility.js \
+ qml/Library/js/ISODate.js \
+ qml/Library/js/Common.js
+
+RESOURCES += \
+ resources.qrc
+
+INSTALLDIR = /../debian/marketstoday
+
+symbian {
+
+ TARGET.UID3 = 0xE6159209
+ # Allow network access on Symbian
+ TARGET.CAPABILITY += NetworkServices
+}
+
+unix {
+ INSTALLS += target desktop icon48
+ target.path = $$INTSALLDIR/opt/marketstoday/
+ desktop.path = /usr/share/applications/hildon-home
+ desktop.files += data/marketstoday.desktop
+ icon48.path = /usr/share/icons/hicolor/48x48/apps
+ icon48.files += data/icons/marketstoday.png
+}
+
+# Include Qt Maemo 5 Home screen widget adaptor
+include(qmaemo5homescreenadaptor/qmaemo5homescreenadaptor.pri)