ontv r447 - trunk/ontv



Author: johans
Date: Sat Feb  9 22:51:47 2008
New Revision: 447
URL: http://svn.gnome.org/viewvc/ontv?rev=447&view=rev

Log:
Added context menu to the program window.

Modified:
   trunk/ontv/GUI.py
   trunk/ontv/PreferencesDialog.py
   trunk/ontv/ProgramWindow.py
   trunk/ontv/SearchDialog.py

Modified: trunk/ontv/GUI.py
==============================================================================
--- trunk/ontv/GUI.py	(original)
+++ trunk/ontv/GUI.py	Sat Feb  9 22:51:47 2008
@@ -25,6 +25,8 @@
 import gtk.gdk
 import gtk.glade
 
+from ProgramDialog import ProgramDialog
+from Reminders import Reminder
 from ontv import NAME, DATA_DIR, LOCALE_DIR, IMAGES_DIR
 
 gtk.glade.bindtextdomain(NAME.lower(), LOCALE_DIR)
@@ -94,6 +96,41 @@
     combobox.prepend_text(string)
     set_active_from_string(combobox, string)
 
+class ProgramContextMenu(gtk.Menu):
+    def __init__(self, get_program, reminders, reminders_model):
+        gtk.Menu.__init__(self)
+
+        self.get_program = get_program
+        self.reminders = reminders
+        self.reminders_model = reminders_model
+
+        self.details_imi = gtk.ImageMenuItem(gtk.STOCK_INFO)
+        self.details_imi.child.set_markup_with_mnemonic(_("_Details"))
+        self.details_imi.show()
+        self.append(self.details_imi)
+
+        self.add_reminder_imi = gtk.ImageMenuItem("gnome-stock-timer")
+        self.add_reminder_imi.child.set_markup_with_mnemonic(_("_Add reminder"))
+        self.add_reminder_imi.show()
+        self.append(self.add_reminder_imi)
+
+        self.details_imi.connect("activate", self.__details_imi_activate)
+        self.add_reminder_imi.connect("activate",
+                                      self.__add_reminder_imi_activate)
+
+    def __details_imi_activate(self, menuitem):
+        program = self.get_program()
+        pd = ProgramDialog(program)
+        pd.show()
+
+    def __add_reminder_imi_activate(self, menuitem):
+        program = self.get_program()
+        reminder = Reminder(program.title, program.channel.markup_escaped_name)
+        if self.reminders.add(reminder):
+            self.reminders_model.append([reminder])
+            self.reminders.save()
+            self.add_reminder_imi.set_sensitive(False)
+
 class FileChooserDialog(gtk.FileChooserDialog):
     def __init__(self, title, filters=None):
         gtk.FileChooserDialog.__init__(self, title=title,

Modified: trunk/ontv/PreferencesDialog.py
==============================================================================
--- trunk/ontv/PreferencesDialog.py	(original)
+++ trunk/ontv/PreferencesDialog.py	Sat Feb  9 22:51:47 2008
@@ -58,7 +58,8 @@
 
         self.__make_channels_treeview()
         self.__make_reminders_treeview()
-        self.sd.reminders_model = self.reminders_treeview.get_model()
+        self.sd.create_search_treeview_menu(self.reminders_treeview.get_model())
+        self.pw.set_reminders_model(self.reminders_treeview.get_model())
 
         self.channels_combobox_model = gtk.ListStore(str)
         self.channels_combobox_model.set_sort_func(0, self.__channels_model_sort_func, False)

Modified: trunk/ontv/ProgramWindow.py
==============================================================================
--- trunk/ontv/ProgramWindow.py	(original)
+++ trunk/ontv/ProgramWindow.py	Sat Feb  9 22:51:47 2008
@@ -28,6 +28,7 @@
 
 import GUI
 from Configuration import Configuration
+from GUI import ProgramContextMenu
 from Reminders import Reminders, Reminder
 from Notification import Notification
 
@@ -64,6 +65,8 @@
         self.filled_programs = []
         self.update_ids = []
 
+        self.reminders_model = None
+
         gobject.timeout_add(TIMEOUT, self.__refresh)
 
     def __refresh(self):
@@ -127,6 +130,9 @@
         self._attach(widget, column, row, xoptions=gtk.SHRINK|gtk.FILL)
 
     def __add_program(self, program, column, row):
+        g = lambda : program
+        menu = ProgramContextMenu(g, Reminders(), self.reminders_model)
+
         label = gtk.Label()
         label.set_ellipsize(pango.ELLIPSIZE_END)
         label.set_max_width_chars(80)
@@ -136,6 +142,7 @@
 
         eb = gtk.EventBox()
         eb.add(label)
+        eb.connect("button-press-event", self.__eb_button_press_event, menu)
         eb.show()
         if program.description and program.description != "":
             self.tooltips.set_tip(eb, program.description)
@@ -146,6 +153,11 @@
         self.table.attach(widget, column, column + 1, row, row + 1,
                           xoptions=xoptions)
 
+    def __eb_button_press_event(self, event_box, event, menu):
+        if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
+            if menu is not None:
+                menu.popup(None, None, None, event.button, event.time)
+
 class CurrentProgramTable(ProgramTable):
     def __init__(self, listings):
         self.title = _("Now Playing...")
@@ -337,6 +349,10 @@
                 self.hbox.pack_start(self.upt)
         self.update()
 
+    def set_reminders_model(self, reminders_model):
+        self.cpt.reminders_model = reminders_model
+        self.upt.reminders_model = reminders_model
+
     def update(self):
         self.cpt.update(True)
         self.upt.update(True)

Modified: trunk/ontv/SearchDialog.py
==============================================================================
--- trunk/ontv/SearchDialog.py	(original)
+++ trunk/ontv/SearchDialog.py	Sat Feb  9 22:51:47 2008
@@ -24,6 +24,7 @@
 import gobject
 
 import GUI
+from GUI import ProgramContextMenu
 from ProgramDialog import ProgramDialog
 from Reminders import Reminder
 from ontv import NAME
@@ -80,17 +81,6 @@
         program_column.set_cell_data_func(crtext, self.__crtext_cell_data_func)
         self.search_treeview.append_column(program_column)
 
-        self.search_treeview_menu = gtk.Menu()
-        self.details_imi = gtk.ImageMenuItem(gtk.STOCK_INFO)
-        self.details_imi.child.set_markup_with_mnemonic(_("_Details"))
-        self.details_imi.show()
-        self.search_treeview_menu.append(self.details_imi)
-
-        self.add_reminder_imi = gtk.ImageMenuItem("gnome-stock-timer")
-        self.add_reminder_imi.child.set_markup_with_mnemonic(_("_Add reminder"))
-        self.add_reminder_imi.show()
-        self.search_treeview_menu.append(self.add_reminder_imi)
-
     def __crt_cell_data_func(self, column, cell, model, iter):
         program = model.get_value(iter, 0)
         markup = "<b>%s-%s</b>\n<i>%s</i>"
@@ -112,12 +102,6 @@
         selection.connect("changed", self.__search_treeview_selection_changed)
         self.search_treeview.connect("row-activated",
                                      self.__search_treeview_row_activated)
-        self.search_treeview.connect("button-press-event",
-                                     self.__search_treeview_button_press,
-                                     self.search_treeview_menu)
-        self.details_imi.connect("activate", self.__details_imi_activate)
-        self.add_reminder_imi.connect("activate",
-                                      self.__add_reminder_imi_activate)
 
         self.close_button.connect("clicked", self.__close_button_clicked)
         self.details_button.connect("clicked", self.__details_button_clicked)
@@ -168,12 +152,12 @@
             reminder = Reminder(program.title,
                                 program.channel.markup_escaped_name)
             if not reminder in self.reminders.reminders:
-                self.add_reminder_imi.set_sensitive(True)
+                self.search_treeview_menu.add_reminder_imi.set_sensitive(True)
             else:
-                self.add_reminder_imi.set_sensitive(False)
+                self.search_treeview_menu.add_reminder_imi.set_sensitive(False)
         else:
             self.details_button.set_sensitive(False)
-            self.add_reminder_imi.set_sensitive(False)
+            self.search_treeview_menu.add_reminder_imi.set_sensitive(False)
 
     def __search_treeview_row_activated(self, treeview, path, column):
         self.details_button.emit("clicked")
@@ -184,24 +168,12 @@
             path = treeview.get_path_at_pos(int(event.x), int(event.y))[0]
             program = search_model[path][0]
             if program.description and program.description != "":
-                self.details_imi.set_sensitive(True)
+                self.search_treeview_menu.details_imi.set_sensitive(True)
             else:
-                self.details_imi.set_sensitive(False)
+                self.search_treeview_menu.details_imi.set_sensitive(False)
 
             menu.popup(None, None, None, event.button, event.time)
 
-    def __details_imi_activate(self, menuitem):
-        program = GUI.get_selected_value(self.search_treeview)
-        self.__show_program_dialog(program)
-
-    def __add_reminder_imi_activate(self, menuitem):
-        program = GUI.get_selected_value(self.search_treeview)
-        reminder = Reminder(program.title, program.channel.markup_escaped_name)
-        if self.reminders.add(reminder):
-            self.reminders_model.append([reminder])
-            self.reminders.save()
-            self.add_reminder_imi.set_sensitive(False)
-
     def __close_button_clicked(self, button):
         self.dialog.hide()
 
@@ -227,6 +199,17 @@
                 break
             channels_iter = channels_model.iter_next(channels_iter)
 
+    def create_search_treeview_menu(self, reminders_model):
+        self.search_treeview_menu = ProgramContextMenu(self.get_program,
+                                                       self.reminders,
+                                                       reminders_model)
+        self.search_treeview.connect("button-press-event",
+                                     self.__search_treeview_button_press,
+                                     self.search_treeview_menu)
+
+    def get_program(self):
+        return GUI.get_selected_value(self.search_treeview)
+
     def show(self, uicomponent=None, verb=None):
         self.present()
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]