# 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()