コード例 #1
0
    def _add_file_cb(self, widget=None, event=None):
        def on_response(filename):
            self.app.load_torrent(filename)

        GTKUtils.launch_file_selector(on_response,
                                      self.app.settings.torrentFolder,
                                      ("Torrent Files", "*.torrent"))
コード例 #2
0
 def create_file_menu(self):
     fileMenu = BaseMenuBar.BaseMenuBar.create_file_menu(self)
     fileMenu.prepend(gtk.SeparatorMenuItem())
     GTKUtils.prepend_menu_item(fileMenu, "Load .torrent",
                                self.display._add_file_cb)
     GTKUtils.prepend_menu_item(fileMenu, "Open Torrent Folder",
                                self.display._open_folder)
コード例 #3
0
 def __init__(self, controller):
   GeneratorMixin.GeneratorMixin.__init__(self)
   self.controller = controller
   self.testUpdateEvent = None
   self.torApp = Tor.get()
   self.lastTestResult = None
   ClientUtil.add_updater(self)
   self._add_events("failure", "success", "size_changed")
   
   #make the components for this GUI
   instructionBox = self._make_instruction_box()
   requiredPortsBox = self._make_required_ports_box()
   optionalPortsBox = self._make_optional_ports_box()
   buttonBox = self._make_button_box()
   
   #pack them into our window:
   box = gtk.VBox(spacing=PADDING)
   box.pack_start(instructionBox, False, False, 0)
   box.pack_start(requiredPortsBox, False, False, 0)
   box.pack_start(optionalPortsBox, False, False, 0)
   box.pack_end(buttonBox, False, False, 0)
   box.show()
   
   paddedBox = GTKUtils.add_padding(box, PADDING)
   paddedBox.show()
   frame = GTKUtils.add_frame(paddedBox)
   frame.show()
   
   self.container = frame
   self.label = gtk.Label("Relay Setup")
   
   #make pretty:
   _unify_widget_widths([self.relayBox.label, self.dhtBox.label, self.dirBox.label, self.upnpBox.label])
   _unify_widget_widths([self.relayBox.entry.entry, self.dhtBox.entry.entry, self.dirBox.entry.entry, self.upnpBox.entry.entry])
   self.container.set_focus_child(self.doneButton)
コード例 #4
0
 def create_file_menu(self):
   self.fileMenu = gtk.Menu()
   self.fileMenuRoot = gtk.MenuItem("File")
   
   def make_toggle_app_entry(app, is_running_func, toggle_func, name, stopEvent, startEvent):
     menuItem = GTKUtils.append_menu_item(self.fileMenu, " ", toggle_func)
     def on_toggled(app):
       if is_running_func():
         menuItem.child.set_text("Stop %s" % (name))
       else:
         menuItem.child.set_text("Start %s" % (name))
     on_toggled(app)
     self._start_listening_for_event(startEvent, app, on_toggled)
     self._start_listening_for_event(stopEvent, app, on_toggled)
     return menuItem
     
   self.serverMenuItem = make_toggle_app_entry(Tor.get(), Tor.get().is_server, 
     self.controller.toggle_relay, "Relay", "server_stopped", "server_started")
   self.bittorrentMenuItem = make_toggle_app_entry(BitTorrentClient.get(), BitTorrentClient.get().is_running, 
     self.controller.toggle_bittorrent, "BitTorrent", "stopped", "started")
   firefox = FirefoxPortable.get()
   if firefox:
     self.firefoxMenuItem = make_toggle_app_entry(firefox, firefox.is_running, 
       self.controller.toggle_firefox, "Browser", "stopped", "started")
   
   self.fileMenu.append(gtk.SeparatorMenuItem())
   GTKUtils.append_menu_item(self.fileMenu, "Update", self.controller.update_check)
   GTKUtils.append_menu_item(self.fileMenu, "Quit", self.controller.quit_cb)
   self.fileMenuRoot.set_submenu(self.fileMenu)
   self.fileMenuRoot.show()
   return self.fileMenu
コード例 #5
0
    def _make_instruction_box(self):
        """Create a box that tells the user what to do in order to set up a relay, 
    with links to get help if they are confused."""
        #make the instructions
        self.instructionLabel = gtk.Label()
        self.instructionImage = gtk.Image()
        instructionBox = gtk.HBox(spacing=PADDING)
        instructionBox.pack_start(self.instructionImage, False, False, 0)
        instructionBox.pack_start(self.instructionLabel, False, False, 0)
        descriptionLabel = WrapLabel.WrapLabel(
            "You must enable UPnP in your router or forward the port manually to be a relay.  Otherwise, peers cannot send traffic through your computer.\n\nAlso remember to unblock BitBlinder.exe and Tor.exe in any firewall."
        )

        #make help link row
        routerAccessLink = GTKUtils.make_html_link("Access your router", "")
        portForwardingLink = GTKUtils.make_html_link(
            "How do I forward a port?", "")
        linkRow = gtk.HBox()
        linkRow.pack_start(portForwardingLink, True, True, 0)
        linkRow.pack_start(routerAccessLink, True, True, 0)

        testingBox = self._make_test_bar()

        #pack everything together
        box = gtk.VBox(spacing=PADDING)
        box.pack_start(instructionBox, False, False, 0)
        box.pack_start(testingBox, False, False, 0)
        box.pack_start(descriptionLabel, False, False, 0)
        box.pack_start(linkRow, False, False, 0)
        box.show_all()
        return box
コード例 #6
0
 def create_view_menu(self):
   self.viewMenu = gtk.Menu()
   self.viewMenuRoot = gtk.MenuItem("View")
   
   GTKUtils.append_menu_item(self.viewMenu, "Help", self.show_help)
   self.viewMenu.append(gtk.SeparatorMenuItem())
   
   def make_toggle_window_entry(window, name):
     menuItem = GTKUtils.append_menu_item(self.viewMenu, " ", window.toggle_window_state)
     def on_toggled(window):
       if window.is_visible():
         menuItem.child.set_text("Hide %s" % (name))
       else:
         menuItem.child.set_text("Show %s" % (name))
     on_toggled(window)
     self._start_listening_for_event("shown", window, on_toggled)
     self._start_listening_for_event("hidden", window, on_toggled)
     return menuItem
     
   make_toggle_window_entry(self.controller.btWindow, "BitTorrent")
   firefox = FirefoxPortable.get()
   if firefox:
     make_toggle_window_entry(self.controller.firefoxWindow, "Firefox")
   make_toggle_window_entry(self.controller.serverWindow, "Server")
   make_toggle_window_entry(self.controller.socksClientWindow, "SOCKS Clients")
   
   self.viewMenu.append(gtk.SeparatorMenuItem())
   GTKUtils.append_menu_item(self.viewMenu, "Preferences", self.controller.show_settings_cb)
   self.viewMenuRoot.set_submenu(self.viewMenu)
   self.viewMenuRoot.show()
   return self.viewMenu
コード例 #7
0
ファイル: Entry.py プロジェクト: wallydz/BitBlinder
 def make_wrapper(self, nameString, helpString=None, helpSize="small"):
     vbox = gtk.VBox()
     self.hbox = gtk.HBox()
     #create a name label:
     nameLabel = GTKUtils.make_text(
         "<span size='large' weight='bold'>%s</span>" % (nameString))
     self.hbox.pack_start(nameLabel, True, True, 5)
     #add the actual entry
     self.hbox.pack_start(self.get_gtk_element(), False, False, 5)
     vbox.pack_start(self.hbox, True, True, 0)
     #create a help label:
     if helpString:
         helpLabel = GTKUtils.make_text("<span size='%s'>%s</span>" %
                                        (helpSize, helpString))
         align = gtk.Alignment(xalign=0.0,
                               yalign=0.5,
                               xscale=1.0,
                               yscale=1.0)
         align.add(helpLabel)
         align.set_padding(15, 0, 0, 0)
         vbox.pack_start(align, True, True, 0)
     #create the error label
     self.errorLabel = GTKUtils.make_text("")
     vbox.pack_start(self.errorLabel, True, True, 0)
     #glue
     vbox.set_spacing(0)
     vbox.show_all()
     self.errorLabel.hide()
     return vbox
コード例 #8
0
 def _make_instruction_box(self):
   """Create a box that tells the user what to do in order to set up a relay, 
   with links to get help if they are confused."""
   #make the instructions
   self.instructionLabel = gtk.Label()
   self.instructionImage = gtk.Image()
   instructionBox = gtk.HBox(spacing=PADDING)
   instructionBox.pack_start(self.instructionImage, False, False, 0)
   instructionBox.pack_start(self.instructionLabel, False, False, 0)
   descriptionLabel = WrapLabel.WrapLabel("You must enable UPnP in your router or forward the port manually to be a relay.  Otherwise, peers cannot send traffic through your computer.\n\nAlso remember to unblock BitBlinder.exe and Tor.exe in any firewall.")
   
   #make help link row
   routerAccessLink = GTKUtils.make_html_link("Access your router", "")
   portForwardingLink = GTKUtils.make_html_link("How do I forward a port?", "")
   linkRow = gtk.HBox()
   linkRow.pack_start(portForwardingLink, True, True, 0)
   linkRow.pack_start(routerAccessLink, True, True, 0)
   
   testingBox = self._make_test_bar()
   
   #pack everything together
   box = gtk.VBox(spacing=PADDING)
   box.pack_start(instructionBox, False, False, 0)
   box.pack_start(testingBox, False, False, 0)
   box.pack_start(descriptionLabel, False, False, 0)
   box.pack_start(linkRow, False, False, 0)
   box.show_all()
   return box
コード例 #9
0
 def _make_exit_traffic_box(self):
   def make_exit_row(labelText):
     #make the widgets
     label = gtk.Label()
     label.set_markup("<span size='large'>%s</span>" % (labelText))
     entry = SettingsDisplay.make_entry("bool", True)
     #and pack them together
     box = gtk.HBox()
     box.pack_start(label, False, False, 0)
     box.pack_end(entry.entry, False, False, 0)
     return (entry, box)
   
   #make widgets
   exitTrafficLabel = gtk.Label()
   exitTrafficLabel.set_markup("<span size='large' weight='bold'>Exit Traffic Permissions:</span>")
   exitTrafficLabel.set_alignment(0.0, 0.5)
   self.webTrafficEntry, webBox = make_exit_row("   Allow Web Traffic")
   self.btTrafficEntry, btBox = make_exit_row("   Allow BitTorrent Traffic")
   self.dhtTrafficEntry, dhtBox = make_exit_row("   Allow DHT Traffic")
   risksLink = GTKUtils.make_html_link("What are the risks?", "")
   risksLink.label.set_alignment(0.0, 0.5)
   
   #pack them together:
   box = gtk.VBox(spacing=PADDING)
   box.pack_start(exitTrafficLabel, False, False, 0)
   box.pack_start(btBox, False, False, 0)
   box.pack_start(webBox, False, False, 0)
   box.pack_start(dhtBox, False, False, 0)
   box.pack_start(risksLink, False, False, 0)
   box = GTKUtils.add_padding(box, PADDING)
   frame = GTKUtils.add_frame(box, width=0)
   frame.show_all()
   return frame
コード例 #10
0
 def _toggle_content_box(self, expander, param_spec):
   """shows or hides the contents"""
   if expander.get_expanded():
     self.contentBox.show_all()
   else:
     self.contentBox.hide()
   
   GTKUtils.refit(self)
コード例 #11
0
    def _make_slider_box(self, startingValue):
        if self.allowNonanonymousMode:
            lowestLimit = 0
        else:
            lowestLimit = 1
        adjustment = gtk.Adjustment(value=startingValue,
                                    lower=lowestLimit,
                                    upper=3,
                                    step_incr=1,
                                    page_incr=0,
                                    page_size=0)
        anonymityScale = gtk.HScale(adjustment)
        anonymityScale.set_digits(0)
        anonymityScale.set_draw_value(True)
        anonymityScale.set_value_pos(gtk.POS_BOTTOM)
        anonymityScale.connect("value_changed",
                               self._on_anonymity_slider_changed)
        self.anonymityScale = anonymityScale

        anonLabel = gtk.Label()
        anonLabel.set_markup(
            '<span weight="bold" size="large">Anonymity</span>')
        anonLabel.set_alignment(0, 0)
        anonLabel = GTKUtils.add_padding(anonLabel, 1, 0, 0, 0)
        speedLabel = gtk.Label()
        speedLabel.set_markup('<span weight="bold" size="large">Speed</span>')
        speedLabel.set_alignment(0, 0)
        speedLabel = GTKUtils.add_padding(speedLabel, 1, 0, 0, 0)

        sliderBox = gtk.HBox()
        sliderBox.pack_start(speedLabel, False, False, 0)
        sliderBox.pack_start(anonymityScale, True, True, 1)
        sliderBox.pack_start(anonLabel, False, False, 0)

        vbox = gtk.VBox()
        vbox.pack_start(sliderBox, True, True, 5)

        hbox = gtk.HBox()
        self.AnonymousPerson = gtk.Image()
        self.AnonymousPerson.set_from_pixbuf(
            get_path_length_image(startingValue))
        hbox.pack_start(self.AnonymousPerson, False, False, 0)

        self.helperTextLabel = gtk.Label()
        self.helperTextLabel.set_line_wrap(True)
        self.helperTextLabel.set_justify(gtk.JUSTIFY_FILL)
        hbox.pack_start(self.helperTextLabel, True, True, 5)
        self._normalize_helper_label_height()

        vbox.pack_start(hbox, True, True, 5)

        self._update_helper_text(startingValue)

        return vbox
コード例 #12
0
 def create_help_menu(self):
   self.helpMenu = gtk.Menu()
   self.helpMenuRoot = gtk.MenuItem("Help")
   GTKUtils.append_menu_item(self.helpMenu, "Instructions", self.show_help)
   GTKUtils.append_menu_item(self.helpMenu, "Read Online Help...", self.show_website)
   GTKUtils.append_menu_item(self.helpMenu, "Visit Forums...", self.show_forums)
   GTKUtils.append_menu_item(self.helpMenu, "Report an Issue...", self.controller.show_trac)
   GTKUtils.append_menu_item(self.helpMenu, "About", self.show_about)
   self.helpMenuRoot.set_submenu(self.helpMenu)
   self.helpMenuRoot.show()
   return self.helpMenu
コード例 #13
0
    def _make_required_ports_box(self):
        """Make a box containing the settings and status for all required ports (currently just the Relay port)"""
        #make entry rows
        self.relayBox = RelayPortStatusBox("Relay Port (TCP)", "orPort", self)
        self.upnpBox = UPnPStatusBox("UPnP")

        #pack them together:
        box = gtk.VBox(spacing=PADDING)
        box.pack_start(self.relayBox, False, False, 0)
        box.pack_start(self.upnpBox, False, False, 0)
        box = GTKUtils.add_padding(box, PADDING)
        frame = GTKUtils.add_frame(box, name="Relay Port", width=0)
        frame.show_all()
        return frame
コード例 #14
0
 def _make_required_ports_box(self):
   """Make a box containing the settings and status for all required ports (currently just the Relay port)"""
   #make entry rows
   self.relayBox = RelayPortStatusBox("Relay Port (TCP)", "orPort", self)
   self.upnpBox = UPnPStatusBox("UPnP")
   
   #pack them together:
   box = gtk.VBox(spacing=PADDING)
   box.pack_start(self.relayBox, False, False, 0)
   box.pack_start(self.upnpBox, False, False, 0)
   box = GTKUtils.add_padding(box, PADDING)
   frame = GTKUtils.add_frame(box, name="Relay Port", width=0)
   frame.show_all()
   return frame
コード例 #15
0
ファイル: Controller.py プロジェクト: clawplach/BitBlinder
 def show_msgbox(self, text, title="Notice", cb=None, buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK), 
                 args=None, width=200, link=None, makeSafe=False, root=None):
   """Launches a message box and keeps the main thread going.  cb will be called
   when the messagebox is finished."""
   if not args:
     args = []
   log_msg(text, 3)
   dia = gtk.Dialog(title,
     root,
     0,
     buttons)
   #ensure that the dialog is modal if the parent window is, otherwise it's not selectable!
   if root and root.get_modal():
     dia.set_modal(True)
   label = gtk.Label("")
   if makeSafe:
     label.set_text(text)
   else:
     label.set_markup(text)
   label.set_selectable(True)
   label.set_size_request(width, -1)
   label.set_line_wrap(True)
   paddedLabel = GTKUtils.add_padding(label, 5)
   dia.vbox.pack_start(paddedLabel, True, True, 10)
   if link:
     dia.vbox.pack_start(link, True, True, 10)
   dia.show_all()
   #have to do a callback if you want to see the result of the dialog:
   def on_response(dialog, response_id, cb):
     if cb:
       cb(dialog, response_id, *args)
     dialog.destroy()
   #connect the handler:
   dia.connect("response", on_response, cb)
   return dia
コード例 #16
0
  def make_popup_menu(self, newMenu):
    """creates a drop down menu on the system tray icon when right clicked"""
  
    submenu = gtk.Menu()
    if not self.app or not self.app.is_running() or not self.is_visible():
      GTKUtils.append_menu_item(submenu, "Show SOCKS Interface", self.toggle_window_state)
    else:
      GTKUtils.append_menu_item(submenu, "Hide SOCKS Interface", self.toggle_window_state)
      
    header = GTKUtils.make_menu_item_with_picture('SOCKS Interface', "network.png")
    header.set_submenu(submenu)
    header.show_all()
    
    newMenu.append(header)

    return submenu
コード例 #17
0
  def __init__(self, controller):
    buttons = (gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
    dia = gtk.Dialog("Credits Low", None, 0, buttons)
    self.controller = controller
    
    vbox = gtk.VBox()
    
    title = gtk.Label()
    markup = "<span size='large' weight='bold'>You Are Running out of Credits</span>"
    title.set_markup(markup)
    title.set_justify(gtk.JUSTIFY_CENTER)
    vbox.pack_start(title, True, False, 0)
    
    #A text entry telling the user what to do:
    balance = Bank.get().get_expected_balance()
    balanceGB = Format.convert_to_gb(balance)
    label = gtk.Label()
    text = "You only have %s (%s) credits remaining.  You must set up a relay to gain more credits.  \
This will allow other users to send traffic via your computer.\n\nWould you like to set up a relay now?" % (balance, balanceGB)
    label.set_markup(text)
    label.set_line_wrap(True)
    vbox.pack_start(label, True, True, 5)
    
    #if we should always check:
    self.askAboutRelay = gtk.CheckButton("Always ask about help setting up relay")
    vbox.pack_start(self.askAboutRelay, True, True, 10)
    #initialize the checkbox:
    self.askAboutRelay.set_active(CoreSettings.get().askAboutRelay)

    vbox = GTKUtils.add_padding(vbox, 5)
    dia.vbox.pack_start(vbox, True, True, 0)
    dia.connect("response", self.on_response)
    self.dia = dia
    #start the dialog
    dia.show_all()
コード例 #18
0
 def make_wrapper(self, nameString, helpString=None, helpSize="small"):
   #create a name label:
   nameLabel = GTKUtils.make_text("<span size='large' weight='bold'>%s</span>" % (nameString))
   #create a help label:
   helpLabel = GTKUtils.make_text("<span size='%s'>%s</span>" % (helpSize, helpString))
   self.errorLabel = GTKUtils.make_text("")
   vbox = gtk.VBox()
   vbox.pack_start(nameLabel, False, False, 5)
   vbox.pack_start(self.get_gtk_element(), True, True, 5)
   vbox.pack_end(self.errorLabel, False, False, 5)
   align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=1.0, yscale=1.0)
   align.add(helpLabel)
   align.set_padding(15, 0, 0, 0)
   vbox.pack_start(align, True, True, 0)
   vbox.set_spacing(0)
   return vbox
コード例 #19
0
ファイル: PriorityDialog.py プロジェクト: wallydz/BitBlinder
 def filename_cb(self, widget, event=None):
   def on_response(filename):
     #ensure that the filter is right:
     if self.fileType not in ("folder", "all files"):
       if not re.compile("^.*\\.%s$" % (self.fileType)).match(filename):
         filename += "." + self.fileType
     if len(filename) > self.filenameEntry.get_width_chars():
       self.filenameEntry.set_width_chars(len(filename) + 10)
     self.filenameEntry.set_text(filename)
   if self.fileType == "all files":
     fileTypeFilter = ("All Files", "*.*")
   elif self.fileType == "folder":
     fileTypeFilter = None
   else:
     fileTypeFilter = ("%s Files" % (self.fileType.upper()), "*.%s" % (self.fileType))      
   GTKUtils.launch_file_selector(on_response, self.filenameEntry.get_text(), fileTypeFilter, True)
コード例 #20
0
  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)
    box.pack_start(gtk.HSeparator(), False, False, 0)
    box.pack_start(buttonBox, False, False, 0)
    box.show()
    
    paddedBox = GTKUtils.add_padding(box, PADDING)
    paddedBox.show()
    
    self.container = paddedBox
    self.label = gtk.Label("Exit Traffic Types")
    
    self.container.set_focus_child(self.doneButton)
コード例 #21
0
    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)
        box.pack_start(gtk.HSeparator(), False, False, 0)
        box.pack_start(buttonBox, False, False, 0)
        box.show()

        paddedBox = GTKUtils.add_padding(box, PADDING)
        paddedBox.show()

        self.container = paddedBox
        self.label = gtk.Label("Exit Traffic Types")

        self.container.set_focus_child(self.doneButton)
コード例 #22
0
  def __init__(self, settings, category):
    """Create a GUI interface for setting all of our values.
    @param settings:  the Settings class that we should display
    @type  settings:  Applications.Settings
    @param category:  what subcategory of the settings should be shown in this box.
    @type  category:  str
    @return:          gtk.Box"""
    self.settings = settings
    self.category = category
    self.__entries = {}

    #create a nice table to put them in:
    settingsBox = gtk.VBox()
    for attr in settings.settings_to_save:
      if not attr in settings.categories[category]:
        continue
      #create the appropriate type of Entry:
      self.__entries[attr] = make_entry(settings.ranges[attr], getattr(settings, attr))
      #create some GUI elements to make the Entry presentable:
      box = self.__entries[attr].make_wrapper(settings.displayNames[attr], settings.helpStrings[attr])
      if settings.isVisible[attr]:
        box.show()
        sep = gtk.HSeparator()
        sep.show()
        #pack it into our box:
        settingsBox.pack_start(box, False, False, 10)
        settingsBox.pack_start(sep, False, False, 0)
    settingsBox.set_spacing(5)
    scrolled_window = GTKUtils.make_scroll_box(settingsBox)
    scrolled_window.set_size_request(-1, 300)
    scrolled_window.show()
    settingsBox.show()
    
    self._hide_error_labels()
    self.container = scrolled_window
コード例 #23
0
    def _make_optional_info_box(self):
        """shows extra information that will scare away most users"""
        #make entry rows
        moreInfos = WrapLabel.WrapLabel(greaterInfoText)
        moreInfos.set_justify(gtk.JUSTIFY_FILL)

        #make a box for hiding
        self.optionalInfosBox = gtk.VBox()
        self.optionalInfosBox.pack_start(moreInfos, False, False, 0)
        self.optionalInfosBox = GTKUtils.add_padding(self.optionalInfosBox, 5)

        #make a frame with a built-in expander for showing and hiding these entry rows
        frame = GTKUtils.add_frame(self.optionalInfosBox, width=0)
        frameWidget = gtk.Expander("Learn More")
        frameWidget.connect("notify::expanded", self._toggle_optional_infos)
        frame.set_label_widget(frameWidget)
        return frame
コード例 #24
0
  def _make_optional_info_box(self):
    """shows extra information that will scare away most users"""
    #make entry rows
    moreInfos = WrapLabel.WrapLabel(greaterInfoText)
    moreInfos.set_justify(gtk.JUSTIFY_FILL)
    
    #make a box for hiding
    self.optionalInfosBox = gtk.VBox()
    self.optionalInfosBox.pack_start(moreInfos, False, False, 0)
    self.optionalInfosBox = GTKUtils.add_padding(self.optionalInfosBox, 5)

    #make a frame with a built-in expander for showing and hiding these entry rows
    frame = GTKUtils.add_frame(self.optionalInfosBox, width=0)
    frameWidget = gtk.Expander("Learn More")
    frameWidget.connect("notify::expanded", self._toggle_optional_infos)
    frame.set_label_widget(frameWidget)
    return frame
コード例 #25
0
 def _make_slider_box(self, startingValue):
   if self.allowNonanonymousMode:
     lowestLimit = 0
   else:
     lowestLimit = 1
   adjustment = gtk.Adjustment(value=startingValue, lower=lowestLimit, upper=3, step_incr=1, page_incr=0, page_size=0)
   anonymityScale = gtk.HScale(adjustment)
   anonymityScale.set_digits(0)
   anonymityScale.set_draw_value(True)
   anonymityScale.set_value_pos(gtk.POS_BOTTOM)
   anonymityScale.connect("value_changed", self._on_anonymity_slider_changed)
   self.anonymityScale = anonymityScale
   
   anonLabel = gtk.Label()
   anonLabel.set_markup('<span weight="bold" size="large">Anonymity</span>')
   anonLabel.set_alignment(0, 0)
   anonLabel = GTKUtils.add_padding(anonLabel, 1, 0, 0, 0)
   speedLabel = gtk.Label()
   speedLabel.set_markup('<span weight="bold" size="large">Speed</span>')
   speedLabel.set_alignment(0, 0)
   speedLabel = GTKUtils.add_padding(speedLabel, 1, 0, 0, 0)
   
   sliderBox = gtk.HBox()
   sliderBox.pack_start(speedLabel, False, False, 0)
   sliderBox.pack_start(anonymityScale, True, True, 1)
   sliderBox.pack_start(anonLabel, False, False, 0)
   
   vbox = gtk.VBox()
   vbox.pack_start(sliderBox, True, True, 5)
   
   hbox = gtk.HBox()
   self.AnonymousPerson = gtk.Image()
   self.AnonymousPerson.set_from_pixbuf(get_path_length_image(startingValue))
   hbox.pack_start(self.AnonymousPerson, False, False, 0)
   
   self.helperTextLabel = gtk.Label()
   self.helperTextLabel.set_line_wrap(True)
   self.helperTextLabel.set_justify(gtk.JUSTIFY_FILL)
   hbox.pack_start(self.helperTextLabel, True, True, 5)
   self._normalize_helper_label_height()
   
   vbox.pack_start(hbox, True, True, 5)
   
   self._update_helper_text(startingValue)
 
   return vbox
コード例 #26
0
    def __init__(self, app, allowNonanonymousMode=True):
        BaseDialog.BaseDialog.__init__(self,
                                       "%s Anonymity Selector" % (app.name),
                                       ("ok", "cancel"), None)
        self.app = app
        self.allowNonanonymousMode = allowNonanonymousMode

        titleLabel = gtk.Label()
        titleLabel.set_markup(
            "<span size='x-large' weight='bold'>%s Anonymity Selector</span>" %
            (self.app.name))
        titleLabel.set_justify(gtk.JUSTIFY_CENTER)

        vbox = gtk.VBox()
        vbox.pack_start(titleLabel, False, False, 5)
        infoTextLabel = WrapLabel.WrapLabel(infoText)
        infoTextLabel.set_justify(gtk.JUSTIFY_FILL)
        #keep the label from having no width
        infoTextLabel.set_size_request(300, -1)

        infoAndSlider = gtk.VBox()
        infoAndSlider.pack_start(infoTextLabel, False, False, 0)
        instructionBox = self._make_instruction_box()
        infoAndSlider.pack_start(instructionBox, False, False, 0)
        #get the appropriate path length from the app
        if not self.allowNonanonymousMode or self.app.useTor:
            pathLength = self.app.settings.pathLength
        else:
            pathLength = 0
        anonymityBox = self._make_slider_box(pathLength)
        infoAndSlider.pack_start(anonymityBox, False, False, 0)
        infoAndSlider = GTKUtils.add_padding(infoAndSlider, 5)
        infoAndSlider = GTKUtils.add_frame(infoAndSlider,
                                           name='Choose Your Anonymity Level')
        vbox.pack_start(infoAndSlider, False, False, 0)

        optionalInfos = self._make_optional_info_box()
        optionalInfos = GTKUtils.add_padding(optionalInfos, 0, 5, 5, 5)
        vbox.pack_start(optionalInfos, False, False, 0)

        self.dia.vbox.pack_start(vbox, False, False, 0)
        self.dia.vbox.show_all()
        self.optionalInfosBox.hide()
        self.dia.window.raise_()
コード例 #27
0
    def create_box(self):
        #create each of the pages:
        self._mainBox = gtk.HBox()
        self.vbox.pack_start(self._mainBox, True, True, 0)
        BORDER_WIDTH = 10

        def add_var(name, box, ignoreHBar=None):
            return self.add_variable(name,
                                     Tor.get().settings, Tor.get(), "", box,
                                     ignoreHBar)

        #general settings page:
        vbox = gtk.VBox()
        add_var("orPort", vbox)
        add_var("dirPort", vbox)
        add_var("dhtPort", vbox)
        vbox.set_border_width(BORDER_WIDTH)
        #windows settings, if necessary
        if System.IS_WINDOWS:
            startOnBootEntry = self.add_variable("startBitBlinderOnBoot",
                                                 BitBlinder.get().settings,
                                                 BitBlinder.get(), "", vbox)
            #NOTE:  change the default to starting on bootup if we're a server now
            if not Tor.get().settings.wasRelay:
                startOnBootEntry.set_value(True)
            self.add_variable("halfOpenConnections",
                              BitBlinder.get().settings, BitBlinder.get(), "",
                              vbox)
        self._boxes.append(vbox)
        #exit traffic page:
        vbox = gtk.VBox()
        vbox.set_border_width(BORDER_WIDTH)
        exitTypeEntry = add_var("exitType", vbox, True)
        exitTypeEntry.set_value("Both")
        vbox.pack_start(
            GTKUtils.make_html_link(
                "Learn more about exit traffic",
                "%s/overview/" % (ProgramState.Conf.BASE_HTTP)), False, False,
            2)
        self._boxes.append(vbox)
        #bandwidth page:
        vbox = gtk.VBox()
        vbox.set_border_width(BORDER_WIDTH)
        label = WrapLabel.WrapLabel("")
        label.set_markup(
            """<span size='large' weight='bold'>You should run BitBlinder in the background to accumulate credits.
</span>
""")
        vbox.pack_start(label, False, False, 0)
        #    vbox.pack_start(gtk.HSeparator(), False, False, 0)
        add_var("monthlyCap", vbox)
        add_var("bwRate", vbox)
        add_var("bwSchedule", vbox)
        self._boxes.append(vbox)
        self._mainBox.set_size_request(600, -1)
        self.set_current_page()
コード例 #28
0
    def on_update(self):
        """updates the gui via pulling infos out of tor and the bank-
    slow, stupid, and easy"""
        # don't do updates if we arent visible
        if not GTKUtils.is_visible(self.container):
            return

        configuredAsRelay = self.torApp.is_server()
        if configuredAsRelay:
            self.relayRow.update_row_image(True)
        else:
            self.relayRow.reset_row_image()

        relayStatus, relayStateString = self.torApp.get_relay_status()
        if self.torApp.is_server():
            self.statusRow.update_row_image(relayStatus)
        else:
            self.statusRow.reset_row_image()
        self.statusRow.widget.set_markup('<span size="large">%s</span>' % (relayStateString))

        # update as appropriate for rows when we are trying to be a relay
        if configuredAsRelay:
            boolToStringMapping = {True: "is reachable", False: "is unreachable", None: "testing..."}
            # do updates where we have the info
            relayPortsState = self.torApp.get_all_port_status()
            for row in self.statusRows:
                updateForGUIPort = row.rowName in relayPortsState
                if updateForGUIPort:
                    port = relayPortsState[row.rowName]
                    row.update_row_image(port[0])
                    statusText = boolToStringMapping[port[0]]
                    row.widget.set_markup('<span size="large">%s %s</span>' % (port[1], statusText))
        # else, null  everything out
        else:
            for row in [self.udpRelayPortRow, self.tcpRelayPortRow, self.dirPortRow, self.statusRow]:
                row.reset_row_image()
                row.widget.set_markup('<span size="large">offline</span>')

        # update the balance
        bank = Bank.get()
        if not bank:
            return
        credits = bank.get_expected_balance()
        if not credits:
            return
        self.creditsRow.widget.set_markup(
            '<span size="large">%s  (%s)</span>' % (credits, Format.convert_to_gb(credits))
        )
        if credits > 200:
            creditState = True
        elif credits > 100:
            creditState = None
        else:
            creditState = False
        self.creditsRow.update_row_image(creditState)
コード例 #29
0
 def make_toggle_app_entry(app, is_running_func, toggle_func, name, stopEvent, startEvent):
   menuItem = GTKUtils.append_menu_item(self.fileMenu, " ", toggle_func)
   def on_toggled(app):
     if is_running_func():
       menuItem.child.set_text("Stop %s" % (name))
     else:
       menuItem.child.set_text("Start %s" % (name))
   on_toggled(app)
   self._start_listening_for_event(startEvent, app, on_toggled)
   self._start_listening_for_event(stopEvent, app, on_toggled)
   return menuItem
コード例 #30
0
 def on_update(self):
   """updates the gui via pulling infos out of tor and the bank-
   slow, stupid, and easy"""
   #don't do updates if we arent visible
   if not GTKUtils.is_visible(self.container):
     return
   
   configuredAsRelay = self.torApp.is_server()
   if configuredAsRelay:
     self.relayRow.update_row_image(True)
   else:
     self.relayRow.reset_row_image()
   
   relayStatus, relayStateString = self.torApp.get_relay_status()
   if self.torApp.is_server():
     self.statusRow.update_row_image(relayStatus)
   else:
     self.statusRow.reset_row_image()
   self.statusRow.widget.set_markup('<span size="large">%s</span>' % (relayStateString))
   
   #update as appropriate for rows when we are trying to be a relay
   if configuredAsRelay:
     boolToStringMapping = {True: 'is reachable', False: 'is unreachable', None: 'testing...'}
     #do updates where we have the info
     relayPortsState = self.torApp.get_all_port_status()
     for row in self.statusRows:
       updateForGUIPort = row.rowName in relayPortsState
       if updateForGUIPort:
         port = relayPortsState[row.rowName]
         row.update_row_image(port[0])
         statusText = boolToStringMapping[port[0]]
         row.widget.set_markup('<span size="large">%s %s</span>' % (port[1], statusText))
   #else, null  everything out
   else:
     for row in [self.udpRelayPortRow, self.tcpRelayPortRow, self.dirPortRow, self.statusRow]:
       row.reset_row_image()
       row.widget.set_markup('<span size="large">offline</span>')
   
   #update the balance
   bank = Bank.get()
   if not bank:
     return
   credits = bank.get_expected_balance()
   if not credits:
     return
   self.creditsRow.widget.set_markup('<span size="large">%s  (%s)</span>'%\
                      (credits, Format.convert_to_gb(credits)))
   if credits > 200:
     creditState = True
   elif credits > 100:
     creditState = None
   else:
     creditState = False
   self.creditsRow.update_row_image(creditState)
コード例 #31
0
 def make_toggle_window_entry(window, name):
   menuItem = GTKUtils.append_menu_item(self.viewMenu, " ", window.toggle_window_state)
   def on_toggled(window):
     if window.is_visible():
       menuItem.child.set_text("Hide %s" % (name))
     else:
       menuItem.child.set_text("Show %s" % (name))
   on_toggled(window)
   self._start_listening_for_event("shown", window, on_toggled)
   self._start_listening_for_event("hidden", window, on_toggled)
   return menuItem
コード例 #32
0
    def __init__(self, controller):
        GeneratorMixin.GeneratorMixin.__init__(self)
        self.controller = controller
        self.testUpdateEvent = None
        self.torApp = Tor.get()
        self.lastTestResult = None
        ClientUtil.add_updater(self)
        self._add_events("failure", "success", "size_changed")

        #make the components for this GUI
        instructionBox = self._make_instruction_box()
        requiredPortsBox = self._make_required_ports_box()
        optionalPortsBox = self._make_optional_ports_box()
        buttonBox = self._make_button_box()

        #pack them into our window:
        box = gtk.VBox(spacing=PADDING)
        box.pack_start(instructionBox, False, False, 0)
        box.pack_start(requiredPortsBox, False, False, 0)
        box.pack_start(optionalPortsBox, False, False, 0)
        box.pack_end(buttonBox, False, False, 0)
        box.show()

        paddedBox = GTKUtils.add_padding(box, PADDING)
        paddedBox.show()
        frame = GTKUtils.add_frame(paddedBox)
        frame.show()

        self.container = frame
        self.label = gtk.Label("Relay Setup")

        #make pretty:
        _unify_widget_widths([
            self.relayBox.label, self.dhtBox.label, self.dirBox.label,
            self.upnpBox.label
        ])
        _unify_widget_widths([
            self.relayBox.entry.entry, self.dhtBox.entry.entry,
            self.dirBox.entry.entry, self.upnpBox.entry.entry
        ])
        self.container.set_focus_child(self.doneButton)
コード例 #33
0
ファイル: ServerWindow.py プロジェクト: wallydz/BitBlinder
 def make_popup_menu(self, newMenu):
   """creates a drop down menu on the system tray icon when right clicked hopefully"""
   #make appropriate submenu
   submenu = gtk.Menu()
   if not self.torApp.is_running() or not self.torApp.is_server():
     GTKUtils.append_menu_item(submenu, "Start Relay", self.controller.toggle_relay)
   else:
     GTKUtils.append_menu_item(submenu, "Show Server Window", self._start_cb)
     GTKUtils.append_menu_item(submenu, "Settings", self.show_server_settings)
     GTKUtils.append_menu_item(submenu, "Stop Relay", self.controller.toggle_relay)
   
   menuItem = GTKUtils.make_menu_item_with_picture("Relay",  "network2.png")
   menuItem.set_submenu(submenu)
   menuItem.show_all()
   
   newMenu.append(menuItem)
   return submenu
コード例 #34
0
ファイル: FirefoxWindow.py プロジェクト: wallydz/BitBlinder
 def make_button_row(labelText, callback, imageFile, descriptionText):
     button = GTKUtils.make_image_button(labelText,
                                         callback,
                                         imageFile,
                                         iconSize=32)
     button.set_size_request(200, -1)
     label = WrapLabel.WrapLabel(descriptionText)
     label.set_size_request(200, -1)
     box = gtk.HBox(spacing=3 * PADDING)
     box.pack_start(button, False, False, 0)
     box.pack_start(label, False, False, 0)
     return (box, button)
コード例 #35
0
 def create_view_menu(self):
   viewMenu = BaseMenuBar.BaseMenuBar.create_view_menu(self)
   viewMenu.prepend(gtk.SeparatorMenuItem())
   GTKUtils.prepend_menu_item(viewMenu, "Torrent Priorities", self.display._show_pane, self.display.priorityBox)
   GTKUtils.prepend_menu_item(viewMenu, "Peers", self.display._show_pane, self.display.peerBox)
   GTKUtils.prepend_menu_item(viewMenu, "Bandwidth", self.display._show_pane, self.display.bwGraph)
   return viewMenu
コード例 #36
0
ファイル: FirefoxWindow.py プロジェクト: wallydz/BitBlinder
    def make_popup_menu(self, newMenu):
        """creates a drop down menu on the system tray icon when right clicked"""

        submenu = gtk.Menu()
        if not self.app or not self.app.is_running():
            GTKUtils.append_menu_item(submenu, "Start Firefox",
                                      self.controller.toggle_firefox)
        else:
            GTKUtils.append_menu_item(submenu, "Show Firefox Controls",
                                      self._start_cb)
            GTKUtils.append_menu_item(submenu, "New identity",
                                      self._new_circuit_cb)
            GTKUtils.append_menu_item(submenu, "Change speed",
                                      self._anonymity_cb)
            GTKUtils.append_menu_item(submenu, "Stop Firefox",
                                      self.controller.toggle_firefox)

        image = gtk.Image()
        iconPath = os.path.join(self.app.appBasePath, self.app.name, "App",
                                "AppInfo", "appicon.ico")
        if os.path.exists(iconPath):
            pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(iconPath, 24, 24)
            image.set_from_pixbuf(pixbuf)
        else:
            image.set_from_pixbuf(Images.GREY_CIRCLE)

        headerLabel = gtk.Label()
        headerLabel.set_markup("<span weight='bold'>%s</span>" %
                               (self.app.name))
        box = gtk.HBox(spacing=10)
        box.pack_start(image, False, False, 0)
        box.pack_start(headerLabel, False, False, 0)
        header = gtk.MenuItem()
        header.add(box)
        header.set_submenu(submenu)
        header.show_all()

        newMenu.append(header)

        return submenu
コード例 #37
0
 def __init__(self, app, allowNonanonymousMode=True):
   BaseDialog.BaseDialog.__init__(self, "%s Anonymity Selector" % (app.name), ("ok", "cancel"), None)
   self.app = app
   self.allowNonanonymousMode = allowNonanonymousMode
   
   titleLabel = gtk.Label()
   titleLabel.set_markup("<span size='x-large' weight='bold'>%s Anonymity Selector</span>"  % (self.app.name))
   titleLabel.set_justify(gtk.JUSTIFY_CENTER)
   
   vbox = gtk.VBox()
   vbox.pack_start(titleLabel, False, False, 5)
   infoTextLabel = WrapLabel.WrapLabel(infoText)
   infoTextLabel.set_justify(gtk.JUSTIFY_FILL)
   #keep the label from having no width
   infoTextLabel.set_size_request(300, -1)
   
   infoAndSlider = gtk.VBox()
   infoAndSlider.pack_start(infoTextLabel, False, False, 0)
   instructionBox = self._make_instruction_box()
   infoAndSlider.pack_start(instructionBox, False, False, 0)
   #get the appropriate path length from the app
   if not self.allowNonanonymousMode or self.app.useTor:
     pathLength = self.app.settings.pathLength
   else:
     pathLength = 0
   anonymityBox = self._make_slider_box(pathLength)  
   infoAndSlider.pack_start(anonymityBox, False, False, 0)
   infoAndSlider = GTKUtils.add_padding(infoAndSlider, 5)
   infoAndSlider = GTKUtils.add_frame(infoAndSlider, name='Choose Your Anonymity Level')
   vbox.pack_start(infoAndSlider, False, False, 0)
   
   optionalInfos = self._make_optional_info_box()
   optionalInfos = GTKUtils.add_padding(optionalInfos, 0, 5, 5, 5)
   vbox.pack_start(optionalInfos, False, False, 0)
   
   self.dia.vbox.pack_start(vbox, False, False, 0)
   self.dia.vbox.show_all()
   self.optionalInfosBox.hide()
   self.dia.window.raise_()
コード例 #38
0
 def response(success):
     if success:
         GUIController.get().show_msgbox(
             "The bug report was sent successfully.",
             title="Success!")
     else:
         if not ProgramState.DONE:
             GUIController.get().show_msgbox(
                 "The bug report failed.  You can submit the bug manually at:",
                 title="Too Much Fail",
                 link=GTKUtils.make_html_link(
                     "http://innomi.net/bugs/report/1",
                     'http://innomi.net/bugs/report/1'))
コード例 #39
0
 def create_debug_menu(self):
   #Debug Menu
   self.debugMenu = gtk.Menu()
   self.profileMenuItem = GTKUtils.append_menu_item(self.debugMenu, "Start Profiler", self.toggle_profiler)
   def on_profiler_started(profiler):
     self.profileMenuItem.child.set_text("Stop Profiler")
   self._start_listening_for_event("started", Profiler.get(), on_profiler_started)
   def on_profiler_stopped(profiler):
     self.profileMenuItem.child.set_text("Start Profiler")
   self._start_listening_for_event("stopped", Profiler.get(), on_profiler_stopped)
  
   self.debugMenuRoot = gtk.MenuItem("Debug")
   self.debugMenuRoot.set_submenu(self.debugMenu)
   self.debugMenuRoot.show()
   return self.debugMenu
コード例 #40
0
ファイル: Entry.py プロジェクト: kans/BitBlinder
 def make_wrapper(self, nameString, helpString=None, helpSize="small"):
     vbox = gtk.VBox()
     self.hbox = gtk.HBox()
     # create a name label:
     nameLabel = GTKUtils.make_text("<span size='large' weight='bold'>%s</span>" % (nameString))
     self.hbox.pack_start(nameLabel, True, True, 5)
     # add the actual entry
     self.hbox.pack_start(self.get_gtk_element(), False, False, 5)
     vbox.pack_start(self.hbox, True, True, 0)
     # create a help label:
     if helpString:
         helpLabel = GTKUtils.make_text("<span size='%s'>%s</span>" % (helpSize, helpString))
         align = gtk.Alignment(xalign=0.0, yalign=0.5, xscale=1.0, yscale=1.0)
         align.add(helpLabel)
         align.set_padding(15, 0, 0, 0)
         vbox.pack_start(align, True, True, 0)
     # create the error label
     self.errorLabel = GTKUtils.make_text("")
     vbox.pack_start(self.errorLabel, True, True, 0)
     # glue
     vbox.set_spacing(0)
     vbox.show_all()
     self.errorLabel.hide()
     return vbox
コード例 #41
0
    def _make_exit_traffic_box(self):
        def make_exit_row(labelText):
            #make the widgets
            label = gtk.Label()
            label.set_markup("<span size='large'>%s</span>" % (labelText))
            entry = SettingsDisplay.make_entry("bool", True)
            #and pack them together
            box = gtk.HBox()
            box.pack_start(label, False, False, 0)
            box.pack_end(entry.entry, False, False, 0)
            return (entry, box)

        #make widgets
        exitTrafficLabel = gtk.Label()
        exitTrafficLabel.set_markup(
            "<span size='large' weight='bold'>Exit Traffic Permissions:</span>"
        )
        exitTrafficLabel.set_alignment(0.0, 0.5)
        self.webTrafficEntry, webBox = make_exit_row("   Allow Web Traffic")
        self.btTrafficEntry, btBox = make_exit_row(
            "   Allow BitTorrent Traffic")
        self.dhtTrafficEntry, dhtBox = make_exit_row("   Allow DHT Traffic")
        risksLink = GTKUtils.make_html_link("What are the risks?", "")
        risksLink.label.set_alignment(0.0, 0.5)

        #pack them together:
        box = gtk.VBox(spacing=PADDING)
        box.pack_start(exitTrafficLabel, False, False, 0)
        box.pack_start(btBox, False, False, 0)
        box.pack_start(webBox, False, False, 0)
        box.pack_start(dhtBox, False, False, 0)
        box.pack_start(risksLink, False, False, 0)
        box = GTKUtils.add_padding(box, PADDING)
        frame = GTKUtils.add_frame(box, width=0)
        frame.show_all()
        return frame
コード例 #42
0
 def _make_optional_ports_box(self):
   """Make a box containing the settings and status for all optional ports (DHT and Dir)"""
   #make entry rows
   instructions = WrapLabel.WrapLabel("These ports perform minor misc functions that are helpful to other BitBlinder users.  Set to 0 to disable.")
   self.dhtBox = PortStatusBox("Relay Port (UDP)", "dhtPort")
   self.dirBox = PortStatusBox("Dir Port (TCP)", "dirPort")
   
   #make a box for hiding these entry rows
   optionalPortsBox = gtk.VBox(spacing=PADDING)
   optionalPortsBox.pack_start(instructions, False, False, 0)
   optionalPortsBox.pack_start(self.dhtBox, False, False, 0)
   optionalPortsBox.pack_start(self.dirBox, False, False, 0)
   optionalPortsBox = GTKUtils.add_padding(optionalPortsBox, PADDING)
   optionalPortsBox.show_all()
   #make a frame with a built-in expander for showing and hiding these entry rows
   frame = OptionalToggleFrame.OptionalToggleFrame(optionalPortsBox, "Optional Ports")
   return frame
コード例 #43
0
 def create_view_menu(self):
     viewMenu = BaseMenuBar.BaseMenuBar.create_view_menu(self)
     viewMenu.prepend(gtk.SeparatorMenuItem())
     GTKUtils.prepend_menu_item(viewMenu, "Torrent Priorities",
                                self.display._show_pane,
                                self.display.priorityBox)
     GTKUtils.prepend_menu_item(viewMenu, "Peers", self.display._show_pane,
                                self.display.peerBox)
     GTKUtils.prepend_menu_item(viewMenu, "Bandwidth",
                                self.display._show_pane,
                                self.display.bwGraph)
     return viewMenu
コード例 #44
0
  def create_box(self):
    #create each of the pages:
    self._mainBox = gtk.HBox()
    self.vbox.pack_start(self._mainBox, True, True, 0)
    BORDER_WIDTH = 10
    def add_var(name, box, ignoreHBar=None):
      return self.add_variable(name, Tor.get().settings, Tor.get(), "", box, ignoreHBar)
    #general settings page:
    vbox = gtk.VBox()
    add_var("orPort", vbox)
    add_var("dirPort", vbox)
    add_var("dhtPort", vbox)
    vbox.set_border_width(BORDER_WIDTH)
    #windows settings, if necessary
    if System.IS_WINDOWS:
      startOnBootEntry = self.add_variable("startBitBlinderOnBoot", BitBlinder.get().settings, BitBlinder.get(), "", vbox)
      #NOTE:  change the default to starting on bootup if we're a server now
      if not Tor.get().settings.wasRelay:
        startOnBootEntry.set_value(True)
      self.add_variable("halfOpenConnections", BitBlinder.get().settings, BitBlinder.get(), "", vbox)
    self._boxes.append(vbox)
    #exit traffic page:
    vbox = gtk.VBox()
    vbox.set_border_width(BORDER_WIDTH)
    exitTypeEntry = add_var("exitType", vbox, True)
    exitTypeEntry.set_value("Both")
    vbox.pack_start(GTKUtils.make_html_link("Learn more about exit traffic", "%s/overview/" % (ProgramState.Conf.BASE_HTTP)), False, False, 2)
    self._boxes.append(vbox)
    #bandwidth page:
    vbox = gtk.VBox()
    vbox.set_border_width(BORDER_WIDTH)
    label = WrapLabel.WrapLabel("")
    label.set_markup("""<span size='large' weight='bold'>You should run BitBlinder in the background to accumulate credits.
</span>
""")
    vbox.pack_start(label, False, False, 0)
#    vbox.pack_start(gtk.HSeparator(), False, False, 0)
    add_var("monthlyCap", vbox)
    add_var("bwRate", vbox)
    add_var("bwSchedule", vbox)
    self._boxes.append(vbox)
    self._mainBox.set_size_request(600, -1)
    self.set_current_page()
コード例 #45
0
    def show_msgbox(self,
                    text,
                    title="Notice",
                    cb=None,
                    buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK),
                    args=None,
                    width=200,
                    link=None,
                    makeSafe=False,
                    root=None):
        """Launches a message box and keeps the main thread going.  cb will be called
    when the messagebox is finished."""
        if not args:
            args = []
        log_msg(text, 3)
        dia = gtk.Dialog(title, root, 0, buttons)
        #ensure that the dialog is modal if the parent window is, otherwise it's not selectable!
        if root and root.get_modal():
            dia.set_modal(True)
        label = gtk.Label("")
        if makeSafe:
            label.set_text(text)
        else:
            label.set_markup(text)
        label.set_selectable(True)
        label.set_size_request(width, -1)
        label.set_line_wrap(True)
        paddedLabel = GTKUtils.add_padding(label, 5)
        dia.vbox.pack_start(paddedLabel, True, True, 10)
        if link:
            dia.vbox.pack_start(link, True, True, 10)
        dia.show_all()

        #have to do a callback if you want to see the result of the dialog:
        def on_response(dialog, response_id, cb):
            if cb:
                cb(dialog, response_id, *args)
            dialog.destroy()

        #connect the handler:
        dia.connect("response", on_response, cb)
        return dia
コード例 #46
0
    def _make_optional_ports_box(self):
        """Make a box containing the settings and status for all optional ports (DHT and Dir)"""
        #make entry rows
        instructions = WrapLabel.WrapLabel(
            "These ports perform minor misc functions that are helpful to other BitBlinder users.  Set to 0 to disable."
        )
        self.dhtBox = PortStatusBox("Relay Port (UDP)", "dhtPort")
        self.dirBox = PortStatusBox("Dir Port (TCP)", "dirPort")

        #make a box for hiding these entry rows
        optionalPortsBox = gtk.VBox(spacing=PADDING)
        optionalPortsBox.pack_start(instructions, False, False, 0)
        optionalPortsBox.pack_start(self.dhtBox, False, False, 0)
        optionalPortsBox.pack_start(self.dirBox, False, False, 0)
        optionalPortsBox = GTKUtils.add_padding(optionalPortsBox, PADDING)
        optionalPortsBox.show_all()
        #make a frame with a built-in expander for showing and hiding these entry rows
        frame = OptionalToggleFrame.OptionalToggleFrame(
            optionalPortsBox, "Optional Ports")
        return frame
コード例 #47
0
ファイル: Controller.py プロジェクト: clawplach/BitBlinder
  def on_status_icon_popup(self, statusIcon, newMenu,  submenus):
    """retrieves the correct menu items from the respective apps"""
    socksMenu = self.socksClientWindow.make_popup_menu(newMenu)
    submenu = self.serverWindow.make_popup_menu(newMenu)
    submenus.append(submenu)
    #don't make this for linux users who don't have a portable ff
    if self.ffApp:
      submenu = self.firefoxWindow.make_popup_menu(newMenu)
      submenus.append(submenu)
    submenu = self.btWindow.make_popup_menu(newMenu)
    if submenu:
      submenus.append(submenu)
    
    menuItem = GTKUtils.make_menu_item_with_picture("Quit", "exit.png")
    #menuItem.set_submenu(submenu)
    menuItem.connect("activate", self.quit_cb)
    menuItem.show_all()
    
    newMenu.append(menuItem)

    return submenu
コード例 #48
0
ファイル: Updater.py プロジェクト: clawplach/BitBlinder
 def download_update(self, newVersionData):
   """Download the latest version of InnomiNet from the web server
   newVersion=the version to download"""
   self.newVersion = newVersionData[0]
   self.trueHash = newVersionData[1]
   self.updateString = newVersionData[2]
   if System.IS_WINDOWS:
     #if we're not already doing the update:
     if not self.downloadingUpdate:
       self.downloadingUpdate = True
       #baseURL += "BitBlinderUpdate-%s-%s.exe" % (Globals.VERSION, self.newVersion)
       fileName = "BitBlinderInstaller-%s.exe" % (self.newVersion)
       url = self.baseURL + fileName
       #TODO:  go through a circuit if the user wants to be stealthy:
       BitBlinder.http_download(url, None, self.request_done, self.request_failed, progressCB=self.progressCB, fileName=Globals.UPDATE_FILE_NAME+".download")
       GUIController.get().show_msgbox("BitBlinder found a new version (%s)!\n\nDownloading update now... (you can choose whether to restart later)" % (self.newVersion))
   else:
     #url = self.baseURL + "python-bitblinder_%s_%s.deb" % (self.newVersion, platform.machine())
     url = "%s/download/" % (ProgramState.Conf.BASE_HTTP)
     if ProgramState.USE_GTK:
       link = GTKUtils.make_html_link(url, url)
     else:
       link = url
     GUIController.get().show_msgbox("A new linux package is available!  Changes:\n\n%s\n\nGo download and install it from:" % (self.updateString), title="Update Available", link=link)
コード例 #49
0
ファイル: BWGraph.py プロジェクト: clawplach/BitBlinder
 def draw(self):
   if self.shouldDraw:
     if GTKUtils.is_visible(self):
       self.queue_draw()
   return True