# along with this program. If not, see <http://www.gnu.org/licenses/>.
###########################################################################
+from maeviesui.util import constants
+
import hildon
import pygtk
+import pango
+import gobject
+from random import randint
+import random
pygtk.require("2.0")
import gtk
class SearchDialog(gtk.Dialog):
- fields = [
+ _search_fields = [
"Movies",
"People",
]
self._search_entry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
search_button = self._create_picker_button()
- search_contents = gtk.VBox(False, 0)
+ search_contents = gtk.VBox()
- search_contents.pack_start(self._search_entry, True, True, 0)
- search_contents.pack_start(search_button, True, True, 0)
+ search_contents.pack_start(self._search_entry,
+ expand = True, fill = True)
+ search_contents.pack_start(search_button,
+ expand = True, fill = True)
return search_contents
selector = hildon.TouchSelector(text = True)
selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
- for field in self.fields:
+ for field in self._search_fields:
selector.append_text(field)
self._picker_button.set_selector(selector)
return self._search_entry.get_text()
def get_search_category(self):
- return self.fields[self._picker_button.get_active()]
+ return self._search_fields[self._picker_button.get_active()]
class ResultsWindow(hildon.StackableWindow):
- TIMEOUT_TIME = 2000
-
def __init__(self, search_term, search_category):
super(ResultsWindow, self).__init__()
self.set_title("Search results")
self.search_term = search_term
self.search_category = search_category
- self._show_banner()
+ self._simulate_search()
+ content_area = hildon.PannableArea()
+ self._movies_view = MoviesView()
+
+ content_area.add(self._movies_view)
+ self.add(content_area)
self.show_all()
+ def _simulate_search(self):
+ self._show_banner()
+ hildon.hildon_gtk_window_set_progress_indicator(self, True)
+ gobject.timeout_add(constants.TIMEOUT_TIME_MILLIS, self._populate_view)
+
+ def _populate_view(self):
+ self._movies_view.add_movies([MovieDecorator("The Lord of the Rings"),
+ MovieDecorator("The Lord of the flies"),
+ MovieDecorator("Gone by the wind"),
+ MovieDecorator("Madagascar"),
+ MovieDecorator("Madagascar 2"),
+ MovieDecorator("2 Fast 2 Furious"),
+ MovieDecorator("Fast & Furious"),
+ MovieDecorator("Pitch Black"),
+ ])
+ hildon.hildon_gtk_window_set_progress_indicator(self, False)
+ return False
+
def _show_banner(self):
message = "Searching <i>%(category)s</i> for <i>%(term)s</i>" % {'category': self.search_category,
'term' : self.search_term}
banner = hildon.hildon_banner_show_information_with_markup(self,
"ignored",
message)
- banner.set_timeout(self.TIMEOUT_TIME)
+ banner.set_timeout(constants.TIMEOUT_TIME_MILLIS)
pass
+class MoviesView(gtk.TreeView):
+
+ def __init__(self):
+ super(MoviesView, self).__init__()
+ model = MoviesListStore()
+ self.set_model(model)
+
+ movie_image_renderer = gtk.CellRendererPixbuf()
+ column = gtk.TreeViewColumn('Image', movie_image_renderer, pixbuf = model.IMAGE_COLUMN)
+ self.append_column(column)
+
+ movie_text_renderer = gtk.CellRendererText()
+ movie_text_renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
+ column = gtk.TreeViewColumn('Name', movie_text_renderer, markup = model.INFO_COLUMN)
+ self.append_column(column)
+
+ self.show_all()
+
+ def add_movies(self, movie_list):
+ model = self.get_model()
+ model.add(movie_list)
+
+class MoviesListStore(gtk.ListStore):
+
+ IMAGE_COLUMN = 0
+ INFO_COLUMN = 1
+ MOVIE_COLUMN = 2
+
+ def __init__(self):
+ super(MoviesListStore, self).__init__(gtk.gdk.Pixbuf,
+ str,
+ gobject.TYPE_PYOBJECT)
+
+ def add(self, movies_found):
+ self.clear()
+ for movie in movies_found:
+ row = {self.IMAGE_COLUMN: movie.get_image(),
+ self.INFO_COLUMN: movie.get_info(),
+ self.MOVIE_COLUMN: movie,
+ }
+ self.append(row.values())
+
if __name__ == "__main__":
maevies = Maevies()
maevies.run()
flags = gtk.DIALOG_DESTROY_WITH_PARENT)
self.set_title("About Maevies")
self.show_all()
+
+class MovieDecorator:
+
+ def __init__(self, name):
+ self._name = name
+ pass
+
+ def get_name(self):
+ return self._name
+
+ def get_length(self):
+ return "%sh:%sm" % (random.randrange(1, 2), random.randrange(0, 59))
+
+ def get_score(self):
+ return "%s" % (random.randrange(6, 9))
+
+ def get_info(self):
+ return "<b>%s</b>\n<small><i>Length: </i>%s || <i>Score: </i>%s</small>" % (
+ self.get_name(),
+ self.get_length(),
+ self.get_score())
+
+ def get_image(self):
+ return self._get_placeholder_pixbuf()
+
+ def _get_placeholder_pixbuf(self):
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(constants.PLACEHOLDER_IMAGE,
+ constants.IMAGE_WIDTH,
+ constants.IMAGE_HEIGHT)
+ return pixbuf
--- /dev/null
+# -*- coding: utf-8 -*-
+
+###########################################################################
+# Maevies
+# Copyright (C) 2010 Simón Pena <spenap@gmail.com>
+#
+# This program 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+###########################################################################
+
+import os
+
+LOCAL_DATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__),
+ os.pardir,
+ os.pardir,
+ os.pardir,
+ 'data'))
+
+PLACEHOLDER_IMAGE = os.path.join(LOCAL_DATA_DIR, 'placeholderimage.png')
+
+IMAGE_WIDTH = 100
+
+IMAGE_HEIGHT = 60
+
+TIMEOUT_TIME_MILLIS = 2000