Пример #1
0
def make_menu_item_with_picture(name, imagePath):
  """makes a menu entry with an image and a label in it"""
  image = gtk.Image()
  pixbuf = Images.make_icon(imagePath, 24)
  image.set_from_pixbuf(pixbuf)
  image.set_size_request(35, 24)
  image.set_alignment(0, .5)
  label = gtk.Label()
  label.set_alignment(0, .5)
  label.set_markup("<span weight='bold'>%s</span>" % (name))
  box = gtk.HBox(spacing=0)
  box.pack_start(image, False, False, 0)
  box.pack_start(label, False, False, 0)
  header = gtk.MenuItem()
  header.add(box)
  header.show_all()
  return header
Пример #2
0
 def __init__(self, btApp, maggicPadding):
   """a button row that controls the bit torrent client and also gives the user some anon info, etc
   buttons trigger events to get to the parent window instead of slef passing"""
   GeneratorMixin.GeneratorMixin.__init__(self)
   gtk.Alignment.__init__(self, 0, 0, 1, 1)
   self._add_events("add_file", "remove_file", "pause_torrent", "toggle_anonymity")
   self.catch_event("settings_changed")
   self.btApp = btApp
  
   self.pausePixbuf = Images.make_icon("pause.png", 16)
   self.resumePixbuf = Images.make_icon("resume.png", 16)
   self.relayOnPixbuf = Images.STOP_RELAY_PIXBUF
   self.relayOnLabel = '<span size="large">Stop Relay</span>'
   self.relayOffPixbuf = Images.START_RELAY_PIXBUF
   self.relayOffLabel = '<span size="large">Start Relay</span>'
   
   #top row of buttons
   self.searchEntry = gtk.Entry(35)
   self.searchEntry.connect("activate", self._search_cb)
   self.searchEntry.set_text("Find a torrent...")
   self.searchEntry.grab_focus()
   # row- note the padding hack
   buttonRow = gtk.HBox(spacing=0) 
   buttonRow.pack_start(self.searchEntry, False, False, 0)
   # search
   self.searchButton = GTKUtils.make_image_button("Search", self._search_cb, "search.png")
   buttonRow.pack_start(self.searchButton, False, False, 0)
   # add
   self.addButton = GTKUtils.make_image_button('Add', self._connect_to_trigger("add_file"), "add.png")
   buttonRow.pack_start(self.addButton, False, False, maggicPadding + 1)
   #remove
   self.removeButton = GTKUtils.make_image_button('Remove', self._connect_to_trigger("remove_file"), "delete.png") 
   buttonRow.pack_start(self.removeButton, False, False, 0)
   # pause/resume
   self.pauseButton = GTKUtils.make_image_button('Pause', self._connect_to_trigger("pause_torrent"), "pause.png")
   buttonRow.pack_start(self.pauseButton, False, False, maggicPadding + 1)
   # relay toggle
   self.relayToggleButton = GTKUtils.make_image_button('relay toggle', self._toggle_relay_cb, "warning.png")
   buttonRow.pack_end(self.relayToggleButton, False, False, 0)
   # anon toggle
   self.anonButton = GTKUtils.make_image_button('Anonymity', self._connect_to_trigger("toggle_anonymity"), "warning.png")
   
   #Normalize button sizes
   #add padding to anon button label
   width = self.anonButton.label.size_request()[0]
   self.anonButton.label.set_size_request(width + maggicPadding, -1)
   buttonRow.pack_end(self.anonButton, False, False, maggicPadding + 1)
   
   #normalize other button sizes
   buttonList = [self.pauseButton, self.removeButton, self.addButton, self.searchButton]
   buttonWidth = maggicPadding + max([button.size_request()[0] for button in buttonList])
   [button.set_size_request(buttonWidth, -1) for button in buttonList]
   self.set_padding(maggicPadding + 3, 0, maggicPadding + 3, maggicPadding + 3)
   self.add(buttonRow)
   
   #fix relay toggle button width
   testLabel = self.relayToggleButton.label
   widths = []
   for text in [self.relayOffLabel, self.relayOnLabel]:
     testLabel.set_markup(text)
     widths.append(self.relayToggleButton.size_request()[0])
   maxWidth = max(widths)
   self.relayToggleButton.set_size_request(maxWidth + maggicPadding, -1)
   
   #initialize the buttons/labels to the correct state (since settings change does a pull :))
   self.on_settings_changed()
Пример #3
0
def get_path_length_image(pathLen, size=24):
  pixbuf = Images.make_icon(Images.pathLengthToImageName[pathLen], size)
  return pixbuf
Пример #4
0
from common.events import GlobalEvents
from common.events import GeneratorMixin
from core import ClientUtil
from gui.gtk.widget import OptionalToggleFrame
from gui.gtk.window import TopWindow
from gui.gtk.utils import GTKUtils
from gui.gtk.utils import WrapLabel
from gui.gtk.utils import Images
from gui.gtk.dialog import BaseDialog
from gui.gtk.display import SettingsDisplay
from Applications import Tor

PADDING = 10

ICON_SIZE = 48
QUESTION_PIXBUF = Images.make_icon("question.png", ICON_SIZE)
WARNING_PIXBUF = Images.make_icon("warning.png", ICON_SIZE)
SUCCESS_PIXBUF = Images.make_icon("apply.png", ICON_SIZE)

STATUS_MARKUP = "<span size='large'>%s</span>"
UNKNOWN_MARKUP = STATUS_MARKUP % ("Unknown")

BUTTON_MARKUP = "<span>%s</span>"

TITLE_MARKUP = "<span size='x-large' weight='bold'>%s</span>"
TITLE_TESTING = TITLE_MARKUP % ("Testing reachability of port %s")
TITLE_SUCCESS = TITLE_MARKUP % ("Relay port (%s) is reachable!")
TITLE_FAILURE = TITLE_MARKUP % ("Forward the relay port (%s)")
TITLE_UNTESTED = TITLE_MARKUP % ("Rerun the test with port %s")

Пример #5
0
from common.events import GlobalEvents
from common.events import GeneratorMixin
from core import ClientUtil
from gui.gtk.widget import OptionalToggleFrame
from gui.gtk.window import TopWindow
from gui.gtk.utils import GTKUtils
from gui.gtk.utils import WrapLabel
from gui.gtk.utils import Images
from gui.gtk.dialog import BaseDialog
from gui.gtk.display import SettingsDisplay
from Applications import Tor

PADDING = 10

ICON_SIZE = 48
QUESTION_PIXBUF = Images.make_icon("question.png", ICON_SIZE)
WARNING_PIXBUF = Images.make_icon("warning.png", ICON_SIZE)
SUCCESS_PIXBUF = Images.make_icon("apply.png", ICON_SIZE)

STATUS_MARKUP = "<span size='large'>%s</span>"
UNKNOWN_MARKUP = STATUS_MARKUP % ("Unknown")

BUTTON_MARKUP = "<span>%s</span>"

TITLE_MARKUP = "<span size='x-large' weight='bold'>%s</span>"
TITLE_TESTING = TITLE_MARKUP % ("Testing reachability of port %s")
TITLE_SUCCESS = TITLE_MARKUP % ("Relay port (%s) is reachable!")
TITLE_FAILURE = TITLE_MARKUP % ("Forward the relay port (%s)")
TITLE_UNTESTED = TITLE_MARKUP % ("Rerun the test with port %s")

def _unify_widget_widths(widgets):
Пример #6
0
 def __init__(self, controller):
   self.window = gtk.Window()
   self.window.set_title("Out of credits!")
   self.controller = controller
   
   self.catch_event("settings_changed")
   self.window.connect("destroy", self._destroy_cb)
   
   #tell the user what happened
   headerLabel = gtk.Label()
   headerLabel.set_markup("<span size='x-large' weight='bold'>You have spent all your credits.\n</span>")
   headerImage = gtk.Image()
   headerImage.set_from_pixbuf(Images.make_icon("warning.png", 32))
   headerBox = gtk.HBox(spacing=PADDING)
   headerBox.pack_start(headerImage, False, False, 0)
   headerBox.pack_start(headerLabel, False, False, 0)
   descriptionLabel = WrapLabel.WrapLabel("You must get more credits before you can keep sending traffic through BitBlinder.  All users are given a small number of new credits each hour.\n\nYou can keep downloading with BitTorrent by disabling anonymity (upper right of the BitTorrent interface), but you will obviously not be anonymous!")
   descriptionBox = gtk.VBox(spacing=PADDING)
   descriptionBox.pack_start(headerBox, False, False, 0)
   descriptionBox.pack_start(descriptionLabel, False, False, 0)
   descriptionBox.show_all()
   
   #make some help text to explain what credits are
   creditLabel = WrapLabel.WrapLabel(CREDITS_HELP_TEXT)
   creditLabel = GTKUtils.add_padding(creditLabel, PADDING)
   creditLabel.show()
   creditExplanation = OptionalToggleFrame.OptionalToggleFrame(creditLabel, "What are credits?")
   creditExplanation = GTKUtils.add_padding(creditExplanation, PADDING)
   creditExplanation.show()
   
   #only appears if the user is still not configured as a relay
   relayButton = GTKUtils.make_image_button('<span size="large">Start Relay</span>', self._start_relay_cb, "power_off.png")
   relayLabel = WrapLabel.WrapLabel()
   relayLabel.set_markup('<span size="large" weight="bold">You should set up a relay!  </span><span size="large">You will earn credits MUCH more quickly by being a relay and sending traffic for other users.</span>')
   self.relayRow = gtk.HBox(spacing=PADDING)
   spacingBox = gtk.VBox()
   spacingBox.pack_start(relayButton, True, False, 0)
   self.relayRow.pack_start(spacingBox, False, False, 0)
   self.relayRow.pack_start(relayLabel, True, True, 0)
   self.relayRow = GTKUtils.add_frame(self.relayRow, width=PADDING, name="Relay Setup")
   self.relayRow.show_all()
   
   #if we should always check
   self.alwaysShow = gtk.CheckButton("Always tell you when your credits run out.")
   self.alwaysShow.set_active(True)
   self.alwaysShow.show()
   
   #make the bottom button row
   waitButton = GTKUtils.make_image_button('<span size="large">Wait for Credits</span>', self._wait_cb, "time.png")
   purchaseButton = GTKUtils.make_image_button('<span size="large">Purchase Credits</span>', self._purchase_cb, "money.png")
   buttonRow = gtk.HBox(spacing=PADDING)
   buttonRow.pack_end(waitButton, False, False, 0)
   buttonRow.pack_end(purchaseButton, False, False, 0)
   buttonRow = GTKUtils.add_padding(buttonRow, PADDING)
   buttonRow.show_all()
   
   #pack everything together
   topBox = gtk.VBox(spacing=PADDING)
   topBox.pack_start(descriptionBox, False, False, 0)
   topBox.pack_start(creditExplanation, False, False, 0)
   topBox.pack_start(self.relayRow, False, False, 0)
   topBox.pack_start(self.alwaysShow, False, False, 0)
   topBox.show()
   topBox = GTKUtils.add_padding(topBox, PADDING)
   topBox.show()
   vbox = gtk.VBox()
   vbox.pack_start(topBox, False, False, 0)
   sep = gtk.HSeparator()
   sep.show()
   vbox.pack_end(buttonRow, False, False, 0)
   vbox.pack_end(sep, False, False, 0)
   vbox.show()
   
   #and add it into our dialog
   self.window.add(vbox)
   self.window.show()
Пример #7
0
def get_path_length_image(pathLen, size=24):
    pixbuf = Images.make_icon(Images.pathLengthToImageName[pathLen], size)
    return pixbuf
Пример #8
0
#!/usr/bin/python
#Copyright 2008-2009 InnomiNet
"""Window for selecting exit traffic types"""

import gtk

from common.utils.Basic import log_msg, log_ex, _  # pylint: disable-msg=W0611
from common.events import GeneratorMixin
from gui.gtk.utils import GTKUtils
from gui.gtk.utils import Images
from gui.gtk.display import SettingsDisplay
from Applications import Tor

PADDING = 10
SUCCESS_PIXBUF = Images.make_icon("apply.png", 48)


class ExitTrafficDisplay(GeneratorMixin.GeneratorMixin):
    def __init__(self):
        GeneratorMixin.GeneratorMixin.__init__(self)
        self.torApp = Tor.get()
        self._add_events("done")

        #make the components for this GUI
        headerBox = self._make_header_box()
        exitTrafficBox = self._make_exit_traffic_box()
        buttonBox = self._make_button_box()

        #pack them into our window:
        box = gtk.VBox(spacing=PADDING)
        box.pack_start(headerBox, False, False, 0)
Пример #9
0
#!/usr/bin/python
#Copyright 2008-2009 InnomiNet
"""Window for selecting exit traffic types"""

import gtk

from common.utils.Basic import log_msg, log_ex, _ # pylint: disable-msg=W0611
from common.events import GeneratorMixin
from gui.gtk.utils import GTKUtils
from gui.gtk.utils import Images
from gui.gtk.display import SettingsDisplay
from Applications import Tor

PADDING = 10
SUCCESS_PIXBUF = Images.make_icon("apply.png", 48)

class ExitTrafficDisplay(GeneratorMixin.GeneratorMixin):
  def __init__(self):
    GeneratorMixin.GeneratorMixin.__init__(self)
    self.torApp = Tor.get()
    self._add_events("done")

    #make the components for this GUI
    headerBox = self._make_header_box()
    exitTrafficBox = self._make_exit_traffic_box()
    buttonBox = self._make_button_box()
    
    #pack them into our window:
    box = gtk.VBox(spacing=PADDING)
    box.pack_start(headerBox, False, False, 0)
    box.pack_start(exitTrafficBox, False, False, 0)
Пример #10
0
    def __init__(self, btApp, maggicPadding):
        """a button row that controls the bit torrent client and also gives the user some anon info, etc
    buttons trigger events to get to the parent window instead of slef passing"""
        GeneratorMixin.GeneratorMixin.__init__(self)
        gtk.Alignment.__init__(self, 0, 0, 1, 1)
        self._add_events("add_file", "remove_file", "pause_torrent",
                         "toggle_anonymity")
        self.catch_event("settings_changed")
        self.btApp = btApp

        self.pausePixbuf = Images.make_icon("pause.png", 16)
        self.resumePixbuf = Images.make_icon("resume.png", 16)
        self.relayOnPixbuf = Images.STOP_RELAY_PIXBUF
        self.relayOnLabel = '<span size="large">Stop Relay</span>'
        self.relayOffPixbuf = Images.START_RELAY_PIXBUF
        self.relayOffLabel = '<span size="large">Start Relay</span>'

        #top row of buttons
        self.searchEntry = gtk.Entry(35)
        self.searchEntry.connect("activate", self._search_cb)
        self.searchEntry.set_text("Find a torrent...")
        self.searchEntry.grab_focus()
        # row- note the padding hack
        buttonRow = gtk.HBox(spacing=0)
        buttonRow.pack_start(self.searchEntry, False, False, 0)
        # search
        self.searchButton = GTKUtils.make_image_button("Search",
                                                       self._search_cb,
                                                       "search.png")
        buttonRow.pack_start(self.searchButton, False, False, 0)
        # add
        self.addButton = GTKUtils.make_image_button(
            'Add', self._connect_to_trigger("add_file"), "add.png")
        buttonRow.pack_start(self.addButton, False, False, maggicPadding + 1)
        #remove
        self.removeButton = GTKUtils.make_image_button(
            'Remove', self._connect_to_trigger("remove_file"), "delete.png")
        buttonRow.pack_start(self.removeButton, False, False, 0)
        # pause/resume
        self.pauseButton = GTKUtils.make_image_button(
            'Pause', self._connect_to_trigger("pause_torrent"), "pause.png")
        buttonRow.pack_start(self.pauseButton, False, False, maggicPadding + 1)
        # relay toggle
        self.relayToggleButton = GTKUtils.make_image_button(
            'relay toggle', self._toggle_relay_cb, "warning.png")
        buttonRow.pack_end(self.relayToggleButton, False, False, 0)
        # anon toggle
        self.anonButton = GTKUtils.make_image_button(
            'Anonymity', self._connect_to_trigger("toggle_anonymity"),
            "warning.png")

        #Normalize button sizes
        #add padding to anon button label
        width = self.anonButton.label.size_request()[0]
        self.anonButton.label.set_size_request(width + maggicPadding, -1)
        buttonRow.pack_end(self.anonButton, False, False, maggicPadding + 1)

        #normalize other button sizes
        buttonList = [
            self.pauseButton, self.removeButton, self.addButton,
            self.searchButton
        ]
        buttonWidth = maggicPadding + max(
            [button.size_request()[0] for button in buttonList])
        [button.set_size_request(buttonWidth, -1) for button in buttonList]
        self.set_padding(maggicPadding + 3, 0, maggicPadding + 3,
                         maggicPadding + 3)
        self.add(buttonRow)

        #fix relay toggle button width
        testLabel = self.relayToggleButton.label
        widths = []
        for text in [self.relayOffLabel, self.relayOnLabel]:
            testLabel.set_markup(text)
            widths.append(self.relayToggleButton.size_request()[0])
        maxWidth = max(widths)
        self.relayToggleButton.set_size_request(maxWidth + maggicPadding, -1)

        #initialize the buttons/labels to the correct state (since settings change does a pull :))
        self.on_settings_changed()