示例#1
0
文件: statusview.py 项目: techno/gwit
    def menu_setup(self, status):
        # Get Urls
        urls = TwitterTools.get_urls(status)
        urls.extend(TwitterTools.get_media_urls(status))

        # Get mentioned users
        users = TwitterTools.get_user_mentions(status)
        # Get Hashtags
        hashes = TwitterTools.get_hashtags(status)

        # URL Menu
        urlmenu = gtk.Menu()
        if urls:
            # delete multiple urls
            urls = dict(urls).items()

            # if exist url in text, add menu
            for url, display_url in urls:
                label = "%s..." % display_url[:47] if len(display_url) > 50 else display_url

                # Menuitem create
                item = gtk.ImageMenuItem(label)
                item.set_image(gtk.image_new_from_stock("gtk-open", gtk.ICON_SIZE_MENU))
                item.set_always_show_image(True)
                # Connect click event (open browser)
                item.connect("activate", self.on_menuitem_url_clicked, url)
                # append to menu
                urlmenu.append(item)
        else:
            # not, show None
            item = gtk.MenuItem("None")
            item.set_sensitive(False)
            urlmenu.append(item)

        # Mentioned User Menu
        usermenu = gtk.Menu()
        if users:
            for i in users:
                # Menuitem create
                item = gtk.ImageMenuItem("@%s" % i.replace("_", "__"))
                item.set_image(gtk.image_new_from_stock("gtk-add", gtk.ICON_SIZE_MENU))
                item.set_always_show_image(True)
                # Connect click event (add tab)
                item.connect("activate", self.on_menuitem_user_clicked, i)
                # append to menu
                usermenu.append(item)
        else:
            # not, show None
            item = gtk.MenuItem("None")
            item.set_sensitive(False)
            usermenu.append(item)

        # Hashtags Menu
        hashmenu = gtk.Menu()
        if hashes:
            for i in hashes:
                # Menuitem create
                item = gtk.ImageMenuItem("#%s" % i.replace("_", "__"))
                item.set_image(gtk.image_new_from_stock("gtk-add", gtk.ICON_SIZE_MENU))
                item.set_always_show_image(True)
                # Connect click event (Streaming API)
                item.connect("activate", self.on_menuitem_hash_clicked, i)
                # append to menu
                hashmenu.append(item)
        else:
            # not, show None
            item = gtk.MenuItem("None")
            item.set_sensitive(False)
            hashmenu.append(item)

        # urls submenu append
        self.pmenu.get_children()[10].set_submenu(usermenu)
        self.pmenu.get_children()[11].set_submenu(hashmenu)
        self.pmenu.get_children()[12].set_submenu(urlmenu)

        self.pmenu.get_children()[6].set_label("@%s Timeline" % status.user.screen_name)

        # geo
        if status.geo:
            self.pmenu.get_children()[13].show()
            self.pmenu.get_children()[13].set_label(
                "Geo: %.6f, %.6f" % (status.geo.coordinates[0], status.geo.coordinates[1])
            )

            if self._geo_handler_id:
                self.pmenu.get_children()[13].disconnect(self._geo_handler_id)

            self._geo_handler_id = self.pmenu.get_children()[13].connect(
                "activate",
                self.on_menuitem_url_clicked,
                "http://maps.google.com/?q=%s" % (",".join(map(str, status.geo.coordinates))),
            )
        else:
            self.pmenu.get_children()[13].hide()

        # Show popup menu
        urlmenu.show_all()
        usermenu.show_all()
        hashmenu.show_all()