def get_favicon(self, icon, override=False): if icon is None: return self.web_image if not override and not self.client.get_value(GROUP_DEFAULT, 'show_favicons'): return self.web_image if icon in self.pixbufs: return self.pixbufs[icon] if icon.find('/') != 0 and icon.find('file:///') != 0: path = cache_dir + '/' + icon + '.ico' else: path = icon if icon in override_icons: if override_icons[icon][0] == '/': path = override_icons[icon] try: if icon.find('gtk://') == 0: pb = self.icon_theme.load_icon(icon[6:], 16, 0) pb = classes.get_16x16(pb) else: pb = gtk.gdk.pixbuf_new_from_file_at_size(path, 16, 16) except: pb = self.web_image if pb != self.web_image: self.pixbufs[icon] = pb return pb
def __init__(self, prefs=None, applet=None): gtk.Window.__init__(self) if prefs is not None: self.prefs = prefs self.applet = prefs.applet self.set_transient_for(prefs) elif applet is not None: self.applet = applet self.google_source = None for source in self.applet.feeds.values(): if isinstance(source, classes.GoogleFeed): self.google_source = source break self.site_images = {} self.set_border_width(12) self.set_title(_("Add Feed")) self.set_icon_from_file(icon_path) #Source: label and radio buttons source_label = gtk.Label(_("Source:")) source_label.set_alignment(1.0, 0.0) source_vbox = gtk.VBox(False, 3) #Search via Google Reader pb = self.icon_theme.load_icon("system-search", 16, 0) pb = classes.get_16x16(pb) search_radio = gtk.RadioButton(None) search_radio.add(self.get_radio_hbox(pb, _("Search"))) if not self.google_source: search_radio.set_sensitive(False) search_radio.set_tooltip_text(_("You must sign in to a Google service to search for feeds.")) #Regular RSS/Atom feed try: pb = self.icon_theme.load_icon('application-rss+xml', 16, 0) pb = classes.get_16x16(pb) except: pb = gtk.gdk.pixbuf_new_from_file_at_size(icon_path, 16, 16) webfeed_radio = gtk.RadioButton(search_radio, None) webfeed_radio.add(self.get_radio_hbox(pb, _("RSS/Atom"))) #Google (Reader and Wave) pb = self.applet.get_favicon('www.google.com', True) google_radio = gtk.RadioButton(search_radio, None) google_radio.add(self.get_radio_hbox(pb, classes.GoogleFeed.title, 'www.google.com')) #Google Reader (CheckButton) pb = get_greader_icon() self.greader_check = gtk.CheckButton() self.greader_check.add(self.get_radio_hbox(pb, classes.GoogleReader.title, 'google-reader')) self.greader_check.set_active(True) self.greader_check.connect('toggled', self.check_toggled) #Google Wave pb = self.applet.get_favicon('wave.google.com', True) self.gwave_check = gtk.CheckButton() self.gwave_check.add(self.get_radio_hbox(pb, classes.GoogleWave.title, 'wave.google.com')) self.gwave_check.connect('toggled', self.check_toggled) google_vbox = gtk.VBox(False, 3) google_vbox.pack_start(self.greader_check, False) google_vbox.pack_start(self.gwave_check, False) google_vbox.show_all() self.google_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0) self.google_align.set_padding(0, 0, 12, 0) self.google_align.add(google_vbox) self.google_align.set_no_show_all(True) #Reddit Inbox pb = self.applet.get_favicon('www.reddit.com', True) reddit_radio = gtk.RadioButton(search_radio, None) reddit_radio.add(self.get_radio_hbox(pb, classes.Reddit.title, 'www.reddit.com')) #Twitter Timeline and/or Replies pb = gtk.gdk.pixbuf_new_from_file_at_size(twitter_path, 16, 16) twitter_radio = gtk.RadioButton(search_radio, None) twitter_radio.add(self.get_radio_hbox(pb, _("Twitter"))) self.twitter_timeline_check = gtk.CheckButton(_("Timeline")) self.twitter_timeline_check.set_active(True) self.twitter_timeline_check.connect('toggled', self.check_toggled) self.twitter_timeline_check.show() self.twitter_replies_check = gtk.CheckButton(_("Replies")) self.twitter_replies_check.connect('toggled', self.check_toggled) self.twitter_replies_check.show() twitter_vbox = gtk.VBox(False, 3) twitter_vbox.pack_start(self.twitter_timeline_check, False) twitter_vbox.pack_start(self.twitter_replies_check, False) twitter_vbox.show_all() self.twitter_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0) self.twitter_align.set_padding(0, 0, 12, 0) self.twitter_align.add(twitter_vbox) self.twitter_align.set_no_show_all(True) num = 0 for widget in (search_radio, webfeed_radio, google_radio, self.google_align, reddit_radio, twitter_radio, self.twitter_align): if isinstance(widget, gtk.RadioButton): widget.connect('toggled', self.radio_toggled) widget.num = num num += 1 source_vbox.pack_start(widget, False, False, 0) source_hbox = gtk.HBox(False, 6) source_hbox.pack_start(source_label, False, False) source_hbox.pack_start(source_vbox) #"Search for" label and entry search_label = gtk.Label(_("Search for")) search_label.set_alignment(1.0, 0.5) search_label.show() self.search_entry = gtk.Entry() self.search_entry.show() self.search_entry.connect('changed', self.entry_changed) self.search_hbox = gtk.HBox(False, 6) self.search_hbox.pack_start(search_label, False) self.search_hbox.pack_start(self.search_entry) self.search_hbox.set_no_show_all(True) #URL: label and entry url_label = gtk.Label(_("URL:")) url_label.set_alignment(1.0, 0.5) url_label.show() self.url_entry = gtk.Entry() self.url_entry.show() self.url_entry.connect('changed', self.entry_changed) self.url_hbox = gtk.HBox(False, 6) self.url_hbox.pack_start(url_label, False, False) self.url_hbox.pack_start(self.url_entry) self.url_hbox.set_no_show_all(True) #Username: label and entry user_label = gtk.Label(_("Username:"******"Password:"******"Feed search by ")) button = gtk.LinkButton(reader_url, _("Google Reader")) image.show() image_align.show() label.show() button.show() hbox = gtk.HBox() hbox.pack_start(image_align, False, False, 6) hbox.pack_start(label, False) hbox.pack_start(button, False) hbox.show() self.search_msg = gtk.HBox() self.search_msg.pack_start(hbox, True, False) self.search_msg.set_no_show_all(True) #Results VBox and ScrolledWindow for Feed Search self.results_vbox = gtk.VBox(False, 3) self.results_vbox.show() self.results_sw = gtk.ScrolledWindow() self.results_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.results_sw.add_with_viewport(self.results_vbox) self.results_sw.set_no_show_all(True) #Cancel and Add buttons cancel = gtk.Button(stock=gtk.STOCK_CLOSE) cancel.connect('clicked', self.close) self.add_button = gtk.Button(stock=gtk.STOCK_ADD) self.add_button.set_flags(gtk.CAN_DEFAULT) self.add_button.set_sensitive(False) self.add_button.set_no_show_all(True) self.add_button.connect('clicked', self.almost_add_feed) #If signed in to Google Reader self.search_button = gtk.Button(_("_Search")) image = gtk.image_new_from_icon_name('search', gtk.ICON_SIZE_BUTTON) self.search_button.set_image(image) self.search_button.set_flags(gtk.CAN_DEFAULT) self.search_button.set_sensitive(False) self.search_button.set_no_show_all(True) self.search_button.connect('clicked', self.do_search) if self.google_source is not None: self.search_button.show() self.search_hbox.show() self.search_msg.show() else: self.add_button.show() self.url_hbox.show() webfeed_radio.set_active(True) button_hbox = gtk.HBox(False, 6) button_hbox.pack_end(self.add_button, False, False) button_hbox.pack_end(self.search_button, False, False) button_hbox.pack_end(cancel, False, False) main_vbox = gtk.VBox(False, 6) main_vbox.pack_start(source_hbox, False, False) main_vbox.pack_start(self.search_hbox, False, False) main_vbox.pack_start(self.url_hbox, False, False) main_vbox.pack_start(self.user_hbox, False, False) main_vbox.pack_start(self.pass_hbox, False, False) main_vbox.pack_start(self.search_msg, False, False) main_vbox.pack_start(self.results_sw) main_vbox.pack_end(button_hbox, False, False) main_vbox.show_all() self.add(main_vbox) self.add_button.grab_default() #Make the labels the same size sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) sg.add_widget(source_label) sg.add_widget(search_label) sg.add_widget(url_label) sg.add_widget(user_label) sg.add_widget(pass_label) #Make the buttons the same size sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) sg.add_widget(cancel) sg.add_widget(self.add_button) sg.add_widget(self.search_button) self.show_all() #Update any downloaded favicons if necessary for siteid in ('www.google.com', 'google-reader', 'wave.google.com', 'www.reddit.com'): self.applet.fetch_favicon(self.fetched_favicon, siteid, siteid)
def __init__(self, prefs=None, applet=None): gtk.Window.__init__(self) if prefs is not None: self.prefs = prefs self.applet = prefs.applet self.set_transient_for(prefs) elif applet is not None: self.applet = applet self.google_source = None for source in self.applet.feeds.values(): if isinstance(source, classes.GoogleFeed): self.google_source = source break self.site_images = {} self.set_border_width(12) self.set_title(_("Add Feed")) self.set_icon_from_file(icon_path) #Source: label and radio buttons source_label = gtk.Label(_("Source:")) source_label.set_alignment(1.0, 0.0) source_vbox = gtk.VBox(False, 3) #Search via Google Reader pb = self.icon_theme.load_icon("system-search", 16, 0) pb = classes.get_16x16(pb) search_radio = gtk.RadioButton(None) search_radio.add(self.get_radio_hbox(pb, _("Search"))) if not self.google_source: search_radio.set_sensitive(False) search_radio.set_tooltip_text( _("You must sign in to a Google service to search for feeds.")) #Regular RSS/Atom feed try: pb = self.icon_theme.load_icon('application-rss+xml', 16, 0) pb = classes.get_16x16(pb) except: pb = gtk.gdk.pixbuf_new_from_file_at_size(icon_path, 16, 16) webfeed_radio = gtk.RadioButton(search_radio, None) webfeed_radio.add(self.get_radio_hbox(pb, _("RSS/Atom"))) #Google (Reader and Wave) pb = self.applet.get_favicon('www.google.com', True) google_radio = gtk.RadioButton(search_radio, None) google_radio.add( self.get_radio_hbox(pb, classes.GoogleFeed.title, 'www.google.com')) #Google Reader (CheckButton) pb = get_greader_icon() self.greader_check = gtk.CheckButton() self.greader_check.add( self.get_radio_hbox(pb, classes.GoogleReader.title, 'google-reader')) self.greader_check.set_active(True) self.greader_check.connect('toggled', self.check_toggled) #Google Wave pb = self.applet.get_favicon('wave.google.com', True) self.gwave_check = gtk.CheckButton() self.gwave_check.add( self.get_radio_hbox(pb, classes.GoogleWave.title, 'wave.google.com')) self.gwave_check.connect('toggled', self.check_toggled) google_vbox = gtk.VBox(False, 3) google_vbox.pack_start(self.greader_check, False) google_vbox.pack_start(self.gwave_check, False) google_vbox.show_all() self.google_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0) self.google_align.set_padding(0, 0, 12, 0) self.google_align.add(google_vbox) self.google_align.set_no_show_all(True) #Reddit Inbox pb = self.applet.get_favicon('www.reddit.com', True) reddit_radio = gtk.RadioButton(search_radio, None) reddit_radio.add( self.get_radio_hbox(pb, classes.Reddit.title, 'www.reddit.com')) #Twitter Timeline and/or Replies pb = gtk.gdk.pixbuf_new_from_file_at_size(twitter_path, 16, 16) twitter_radio = gtk.RadioButton(search_radio, None) twitter_radio.add(self.get_radio_hbox(pb, _("Twitter"))) self.twitter_timeline_check = gtk.CheckButton(_("Timeline")) self.twitter_timeline_check.set_active(True) self.twitter_timeline_check.connect('toggled', self.check_toggled) self.twitter_timeline_check.show() self.twitter_replies_check = gtk.CheckButton(_("Replies")) self.twitter_replies_check.connect('toggled', self.check_toggled) self.twitter_replies_check.show() twitter_vbox = gtk.VBox(False, 3) twitter_vbox.pack_start(self.twitter_timeline_check, False) twitter_vbox.pack_start(self.twitter_replies_check, False) twitter_vbox.show_all() self.twitter_align = gtk.Alignment(0.0, 0.0, 1.0, 0.0) self.twitter_align.set_padding(0, 0, 12, 0) self.twitter_align.add(twitter_vbox) self.twitter_align.set_no_show_all(True) num = 0 for widget in (search_radio, webfeed_radio, google_radio, self.google_align, reddit_radio, twitter_radio, self.twitter_align): if isinstance(widget, gtk.RadioButton): widget.connect('toggled', self.radio_toggled) widget.num = num num += 1 source_vbox.pack_start(widget, False, False, 0) source_hbox = gtk.HBox(False, 6) source_hbox.pack_start(source_label, False, False) source_hbox.pack_start(source_vbox) #"Search for" label and entry search_label = gtk.Label(_("Search for")) search_label.set_alignment(1.0, 0.5) search_label.show() self.search_entry = gtk.Entry() self.search_entry.show() self.search_entry.connect('changed', self.entry_changed) self.search_hbox = gtk.HBox(False, 6) self.search_hbox.pack_start(search_label, False) self.search_hbox.pack_start(self.search_entry) self.search_hbox.set_no_show_all(True) #URL: label and entry url_label = gtk.Label(_("URL:")) url_label.set_alignment(1.0, 0.5) url_label.show() self.url_entry = gtk.Entry() self.url_entry.show() self.url_entry.connect('changed', self.entry_changed) self.url_hbox = gtk.HBox(False, 6) self.url_hbox.pack_start(url_label, False, False) self.url_hbox.pack_start(self.url_entry) self.url_hbox.set_no_show_all(True) #Username: label and entry user_label = gtk.Label(_("Username:"******"Password:"******"Feed search by ")) button = gtk.LinkButton(reader_url, _("Google Reader")) image.show() image_align.show() label.show() button.show() hbox = gtk.HBox() hbox.pack_start(image_align, False, False, 6) hbox.pack_start(label, False) hbox.pack_start(button, False) hbox.show() self.search_msg = gtk.HBox() self.search_msg.pack_start(hbox, True, False) self.search_msg.set_no_show_all(True) #Results VBox and ScrolledWindow for Feed Search self.results_vbox = gtk.VBox(False, 3) self.results_vbox.show() self.results_sw = gtk.ScrolledWindow() self.results_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.results_sw.add_with_viewport(self.results_vbox) self.results_sw.set_no_show_all(True) #Cancel and Add buttons cancel = gtk.Button(stock=gtk.STOCK_CLOSE) cancel.connect('clicked', self.close) self.add_button = gtk.Button(stock=gtk.STOCK_ADD) self.add_button.set_flags(gtk.CAN_DEFAULT) self.add_button.set_sensitive(False) self.add_button.set_no_show_all(True) self.add_button.connect('clicked', self.almost_add_feed) #If signed in to Google Reader self.search_button = gtk.Button(_("_Search")) image = gtk.image_new_from_icon_name('search', gtk.ICON_SIZE_BUTTON) self.search_button.set_image(image) self.search_button.set_flags(gtk.CAN_DEFAULT) self.search_button.set_sensitive(False) self.search_button.set_no_show_all(True) self.search_button.connect('clicked', self.do_search) if self.google_source is not None: self.search_button.show() self.search_hbox.show() self.search_msg.show() else: self.add_button.show() self.url_hbox.show() webfeed_radio.set_active(True) button_hbox = gtk.HBox(False, 6) button_hbox.pack_end(self.add_button, False, False) button_hbox.pack_end(self.search_button, False, False) button_hbox.pack_end(cancel, False, False) main_vbox = gtk.VBox(False, 6) main_vbox.pack_start(source_hbox, False, False) main_vbox.pack_start(self.search_hbox, False, False) main_vbox.pack_start(self.url_hbox, False, False) main_vbox.pack_start(self.user_hbox, False, False) main_vbox.pack_start(self.pass_hbox, False, False) main_vbox.pack_start(self.search_msg, False, False) main_vbox.pack_start(self.results_sw) main_vbox.pack_end(button_hbox, False, False) main_vbox.show_all() self.add(main_vbox) self.add_button.grab_default() #Make the labels the same size sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) sg.add_widget(source_label) sg.add_widget(search_label) sg.add_widget(url_label) sg.add_widget(user_label) sg.add_widget(pass_label) #Make the buttons the same size sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) sg.add_widget(cancel) sg.add_widget(self.add_button) sg.add_widget(self.search_button) self.show_all() #Update any downloaded favicons if necessary for siteid in ('www.google.com', 'google-reader', 'wave.google.com', 'www.reddit.com'): self.applet.fetch_favicon(self.fetched_favicon, siteid, siteid)