# 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 maeviesui.util.moviemanager import MovieManager
pygtk.require("2.0")
import gtk
self.show_all()
- def _create_box(self, title, action):
+ def _create_button(self, title, subtitle, action):
box = gtk.VBox()
box.set_border_width(20)
- button = gtk.Button()
+ button = hildon.Button(gtk.HILDON_SIZE_THUMB_HEIGHT,
+ hildon.BUTTON_ARRANGEMENT_VERTICAL, title, subtitle)
button.connect("clicked", self._button_clicked, action)
- foot_label = gtk.Label()
- foot_label.set_text(title)
- box.pack_start(button,
- expand = True, fill = True)
- box.pack_start(foot_label,
- expand = False, fill = False)
+ box.pack_start(button, expand = True, fill = False)
return box
contents = gtk.HBox()
contents.set_border_width(60)
contents.set_homogeneous(True)
- contents.pack_start(self._create_box(title = "On Theaters",
- action = self.ACTION_THEATERS),
+ contents.pack_start(self._create_button("On Theaters", "Movies playing",
+ self.ACTION_THEATERS),
expand = True, fill = True)
- contents.pack_start(self._create_box(title = "Favorites",
- action = self.ACTION_FAVORITES),
+ contents.pack_start(self._create_button("Favorites", "Your saved searches",
+ self.ACTION_FAVORITES),
expand = True, fill = True)
- contents.pack_start(self._create_box(title = "Search",
- action = self.ACTION_SEARCH),
+ contents.pack_start(self._create_button("Search", "Enter a new search",
+ self.ACTION_SEARCH),
expand = True, fill = True)
return contents;
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
def _create_picker_button(self):
self._picker_button = hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT,
- hildon.BUTTON_ARRANGEMENT_VERTICAL)
+ hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
self._picker_button.set_title("Search for")
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.add(self._create_contents())
+ self.moviemanager = MovieManager(response_received_cb = self._response_received_cb)
+ self._start_search(search_term, search_category)
self.show_all()
- def _show_banner(self):
- message = "Searching <i>%(category)s</i> for <i>%(term)s</i>" % {'category': self.search_category,
- 'term' : self.search_term}
+ def _create_contents(self):
+ content_area = hildon.PannableArea()
+ self._movies_view = MoviesView()
+ self._movies_view.connect('row-activated', self._row_activated_cb)
+
+ content_area.add(self._movies_view)
+ return content_area
+
+ def _row_activated_cb(self, view, path, column):
+ movie = view.get_movie_from_path(path)
+ MovieWindow(movie)
+
+ def _start_search(self, search_term, search_category):
+ self._show_banner(search_term, search_category)
+ hildon.hildon_gtk_window_set_progress_indicator(self, True)
+ self.moviemanager.query(search_term)
+
+ def _response_received_cb(self, movies):
+ self._movies_view.add_movies(movies)
+ hildon.hildon_gtk_window_set_progress_indicator(self, False)
+
+ def _show_banner(self, search_term, search_category):
+ message = "Searching <i>%(category)s</i> for <i>%(term)s</i>" % {'category': search_category,
+ 'term' : search_term}
banner = hildon.hildon_banner_show_information_with_markup(self,
"ignored",
message)
- banner.set_timeout(self.TIMEOUT_TIME)
- pass
+ banner.set_timeout(constants.TIMEOUT_TIME_MILLIS)
-if __name__ == "__main__":
- maevies = Maevies()
- maevies.run()
+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)
+
+ def get_movie_from_path(self, path):
+ model = self.get_model()
+ return model[path][model.MOVIE_COLUMN]
+
+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())
class AboutDialog(gtk.Dialog):
super(AboutDialog, self).__init__(parent = parent,
flags = gtk.DIALOG_DESTROY_WITH_PARENT)
self.set_title("About Maevies")
+
+ self.show_all()
+
+class MovieWindow(hildon.StackableWindow):
+
+ def _create_contents(self, movie):
+ main_area = hildon.PannableArea()
+
+ main_box = gtk.VBox(False, 20)
+ main_box.set_border_width(20)
+ upper_content = gtk.HBox(False, 40)
+ upper_content.set_border_width(20)
+
+ image = gtk.Image()
+ image.set_from_pixbuf(gtk.IconTheme().load_icon('mediaplayer_default_album', 256, 0))
+
+ side_content = gtk.VBox(False, 30)
+
+ for key in movie.fields:
+ label = gtk.Label()
+ label.set_markup("<b>%(field)s:</b> <small>%(value)s</small>" % {'field' : key,
+ 'value' : movie.get_value(key)})
+ label.set_alignment(constants.LEFT_ALIGNMENT, constants.CENTER_ALIGNMENT)
+ side_content.pack_start(label, False, False)
+
+ upper_content.pack_start(image, False, False)
+ upper_content.pack_start(side_content, False, False)
+
+ movie_overview = hildon.TextView()
+ movie_overview.set_placeholder("Overview")
+ movie_overview.set_wrap_mode(gtk.WRAP_WORD)
+ movie_overview.get_buffer().set_text(movie.get_overview())
+
+ label = gtk.Label()
+ label.set_markup("<b>Overview:</b>")
+ label.set_alignment(constants.LEFT_ALIGNMENT, constants.CENTER_ALIGNMENT)
+
+ main_box.pack_start(upper_content, False, False)
+ main_box.pack_start(label, False, False)
+ main_box.pack_start(movie_overview, False, False)
+
+ main_area.add_with_viewport(main_box)
+ main_area.set_size_request_policy(hildon.SIZE_REQUEST_CHILDREN)
+
+ return main_area
+
+ def __init__(self, movie):
+ super(MovieWindow, self).__init__()
+ self.set_title("Movie info")
+ self.add(self._create_contents(movie))
self.show_all()
+
+if __name__ == "__main__":
+ maevies = Maevies()
+ maevies.run()