From: Simón Pena Date: Sun, 23 May 2010 11:17:33 +0000 (+0200) Subject: UI: Added about, search, results X-Git-Url: https://vcs.maemo.org/git/?p=maevies;a=commitdiff_plain;h=d2e8bc3c142bbb07fced46c4011c465fb9f92cd8 UI: Added about, search, results * Created a skeleton for the AboutDialog * Created a search dialog, allowing a query term and a query category * Created the AppMenu, connecting the AboutDialog * Connected the search button with the search dialog * Created a stub for the ResultsWindow --- diff --git a/ui/maeviesui/maeviesui/gui.py b/ui/maeviesui/maeviesui/gui.py index d5c1248..4865572 100644 --- a/ui/maeviesui/maeviesui/gui.py +++ b/ui/maeviesui/maeviesui/gui.py @@ -18,52 +18,171 @@ # along with this program. If not, see . ########################################################################### +import hildon import pygtk pygtk.require("2.0") import gtk -class Maevies(gtk.Window): +class Maevies(hildon.StackableWindow): + ACTION_SEARCH = 0 + ACTION_ABOUT = 1 + ACTION_THEATERS = 2 + ACTION_FAVORITES = 3 def __init__(self): - gtk.Window.__init__(self) + super(Maevies, self).__init__() self.set_title("Maevies - 0.1") self.connect('delete-event', lambda widget, event: gtk.main_quit()) - self._contents = gtk.HBox() - self._contents.set_border_width(20) - self._contents.set_homogeneous(True) - self._contents.pack_start(self._get_content_box("On Theaters"), - expand=True, fill=True) - self._contents.pack_start(self._get_content_box("Favorites"), - expand=True, fill=True) - self._contents.pack_start(self._get_content_box("Search"), - expand=True, fill=True) - - self.add(self._contents) + self.add(self._create_contents()) + self.set_app_menu(self._create_app_menu()) self.show_all() - def _get_content_box(self, text): - favorites = gtk.VBox() - favorites.set_border_width(20) + def _create_box(self, title, action): + box = gtk.VBox() + box.set_border_width(20) button = gtk.Button() + button.connect("clicked", self._button_clicked, action) foot_label = gtk.Label() - foot_label.set_text(text) + foot_label.set_text(title) + + box.pack_start(button, + expand = True, fill = True) + box.pack_start(foot_label, + expand = False, fill = False) + + return box + + def _create_contents(self): + 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), + expand = True, fill = True) + contents.pack_start(self._create_box(title = "Favorites", + action = self.ACTION_FAVORITES), + expand = True, fill = True) + contents.pack_start(self._create_box(title = "Search", + action = self.ACTION_SEARCH), + expand = True, fill = True) + + return contents; + + def _button_clicked(self, button, action): + if action == self.ACTION_SEARCH: + search_dialog = SearchDialog(self) + if search_dialog.run() == gtk.RESPONSE_ACCEPT: + ResultsWindow(search_term = search_dialog.get_search_term(), + search_category = search_dialog.get_search_category()) + search_dialog.destroy() + elif action == self.ACTION_ABOUT: + about_dialog = AboutDialog(self) + about_dialog.run() + about_dialog.destroy() + + def _create_app_menu(self): + menu = hildon.AppMenu() + + about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO) + about.set_label("About") + about.connect("clicked", self._button_clicked, self.ACTION_ABOUT) + + menu.append(about) - favorites.pack_start(button, - expand=True, fill=True) - favorites.pack_start(foot_label, - expand=False, fill=False) + menu.show_all() - return favorites + return menu def run(self): gtk.main() +class SearchDialog(gtk.Dialog): + + fields = [ + "Movies", + "People", + ] + + def __init__(self, parent): + super(SearchDialog, self).__init__(parent = parent, + flags = gtk.DIALOG_DESTROY_WITH_PARENT) + self.set_title("Enter search terms") + + self.vbox.pack_start(self._create_contents(), True, False, 0) + self.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) + + self.show_all() + + def _create_contents(self): + self._search_entry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT) + search_button = self._create_picker_button() + + search_contents = gtk.VBox(False, 0) + + search_contents.pack_start(self._search_entry, True, True, 0) + search_contents.pack_start(search_button, True, True, 0) + + return search_contents + + def _create_picker_button(self): + self._picker_button = hildon.PickerButton(gtk.HILDON_SIZE_FINGER_HEIGHT, + hildon.BUTTON_ARRANGEMENT_VERTICAL) + 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: + selector.append_text(field) + + self._picker_button.set_selector(selector) + self._picker_button.set_active(0) + + return self._picker_button + + def get_search_term(self): + return self._search_entry.get_text() + + def get_search_category(self): + return self.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.show_all() + + def _show_banner(self): + message = "Searching %(category)s for %(term)s" % {'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) + pass if __name__ == "__main__": maevies = Maevies() maevies.run() + +class AboutDialog(gtk.Dialog): + + def __init__(self, parent): + super(AboutDialog, self).__init__(parent = parent, + flags = gtk.DIALOG_DESTROY_WITH_PARENT) + self.set_title("About Maevies") + self.show_all()