UI: Added about, search, results
authorSimón Pena <spenap@gmail.com>
Sun, 23 May 2010 11:17:33 +0000 (13:17 +0200)
committerSimón Pena <spenap@gmail.com>
Mon, 24 May 2010 17:17:21 +0000 (19:17 +0200)
* 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

ui/maeviesui/maeviesui/gui.py

index d5c1248..4865572 100644 (file)
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ###########################################################################
 
+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 <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)
+        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()