X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=torbrowser_launcher%2Fsettings.py;h=545fab505dda4c17a44d8589aa42f673b4b73953;hb=7cc2611edcf8fc67cd022809742d6503b8ab4734;hp=7c782dfe9446a3c93f75e8b420986f9587fa59fb;hpb=a34eacfb06a778a36e5a94cbbfc5f5ac13d67d30;p=torbrowser-launcher.git diff --git a/torbrowser_launcher/settings.py b/torbrowser_launcher/settings.py index 7c782df..545fab5 100644 --- a/torbrowser_launcher/settings.py +++ b/torbrowser_launcher/settings.py @@ -2,7 +2,7 @@ Tor Browser Launcher https://github.com/micahflee/torbrowser-launcher/ -Copyright (c) 2013-2014 Micah Lee +Copyright (c) 2013-2017 Micah Lee Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation @@ -26,218 +26,159 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -import subprocess, time, shutil +import subprocess +import shutil -import pygtk -pygtk.require('2.0') -import gtk +from PyQt5 import QtCore, QtWidgets, QtGui -class Settings: - def __init__(self, common): - self.common = common - # set up the window - self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) - self.window.set_title(_("Tor Browser Launcher Settings")) - self.window.set_icon_from_file(self.common.paths['icon_file']) - self.window.set_position(gtk.WIN_POS_CENTER) - self.window.set_border_width(10) - self.window.connect("delete_event", self.delete_event) - self.window.connect("destroy", self.destroy) - - # build the rest of the UI - self.box = gtk.VBox(False, 10) - self.window.add(self.box) - self.box.show() - - self.hbox = gtk.HBox(False, 10) - self.box.pack_start(self.hbox, True, True, 0) - self.hbox.show() - - self.settings_box = gtk.VBox(False, 10) - self.hbox.pack_start(self.settings_box, True, True, 0) - self.settings_box.show() - - self.status_box = gtk.VBox(False, 10) - self.hbox.pack_start(self.status_box, True, True, 0) - self.status_box.show() - - # download over system tor - try: - import txsocksx - self.txsocks_found = True - except ImportError: - self.txsocks_found = False - self.tor_download_checkbox = gtk.CheckButton(_("Download over system Tor")) - if self.txsocks_found: - self.tor_download_checkbox.set_tooltip_text(_("This option is only available when using a system wide Tor installation.")) - else: - self.tor_download_checkbox.set_tooltip_text(_("This option requires the python-txsocksx package.")) +class Settings(QtWidgets.QMainWindow): + """ + Settings window. + """ + def __init__(self, common, app): + super(Settings, self).__init__() - self.settings_box.pack_start(self.tor_download_checkbox, True, True, 0) - if self.common.settings['download_over_tor'] and self.txsocks_found: - self.tor_download_checkbox.set_active(True) - else: - self.tor_download_checkbox.set_active(False) - - if self.txsocks_found == False: - self.tor_download_checkbox.set_sensitive(False) + self.common = common + self.app = app - self.tor_download_checkbox.show() + # Set up the window + self.setWindowTitle(_("Tor Browser Launcher Settings")) + self.setWindowIcon(QtGui.QIcon(self.common.paths['icon_file'])) - # modem sound - self.modem_checkbox = gtk.CheckButton(_("Play modem sound, because Tor is slow :]")) - self.settings_box.pack_start(self.modem_checkbox, True, True, 0) + # Download over system tor + self.tor_download_checkbox = QtWidgets.QCheckBox(_("Download over system Tor")) + if self.common.settings['download_over_tor']: + self.tor_download_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.tor_download_checkbox.setCheckState(QtCore.Qt.Unchecked) - try: - import pygame - if self.common.settings['modem_sound']: - self.modem_checkbox.set_active(True) - else: - self.modem_checkbox.set_active(False) - except ImportError: - self.modem_checkbox.set_active(False) - self.modem_checkbox.set_sensitive(False) - self.modem_checkbox.set_tooltip_text(_("This option requires python-pygame to be installed")) - self.modem_checkbox.show() + # Force en-US, only display if language isn't already en-US + self.force_en_checkbox = QtWidgets.QCheckBox(_("Force downloading English version of Tor Browser")) + if self.common.settings['force_en-US']: + self.force_en_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.force_en_checkbox.setCheckState(QtCore.Qt.Unchecked) + if self.common.language == 'en-US': + self.force_en_checkbox.hide() # Tor SOCKS address - self.tor_addr_box = gtk.HBox(False, 10) - self.settings_box.pack_start(self.tor_addr_box, True, True, 0) - self.tor_addr_box.show() + tor_addr_label = QtWidgets.QLabel(_('Tor server')) + self.tor_addr = QtWidgets.QLineEdit() + self.tor_addr.setText(self.common.settings['tor_socks_address']) + tor_addr_layout = QtWidgets.QHBoxLayout() + tor_addr_layout.addWidget(tor_addr_label) + tor_addr_layout.addWidget(self.tor_addr) + + # Settings layout + settings_layout = QtWidgets.QVBoxLayout() + settings_layout.addWidget(self.tor_download_checkbox) + settings_layout.addWidget(self.force_en_checkbox) + settings_layout.addLayout(tor_addr_layout) + + # Status + status_label = QtWidgets.QLabel() + if(self.common.settings['installed']): + status_label.setText(_('Status: Installed')) + else: + status_label.setText(_('Status: Not Installed')) - self.tor_addr_label = gtk.Label(_('Tor server')) - self.tor_addr_label.set_line_wrap(True) - self.tor_addr_box.pack_start(self.tor_addr_label, True, True, 0) - self.tor_addr_label.show() + # Install button + install_button = QtWidgets.QPushButton(_("Install Tor Browser")) + install_button.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogApplyButton)) + install_button.clicked.connect(self.install) - self.tor_addr = gtk.Entry() - self.tor_addr.set_text(self.common.settings['tor_socks_address']) - self.tor_addr_box.pack_start(self.tor_addr, True, True, 0) - self.tor_addr.show() + # Reinstall buttons + reinstall_button = QtWidgets.QPushButton(_("Reinstall Tor Browser")) + reinstall_button.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogApplyButton)) + reinstall_button.clicked.connect(self.reinstall) - # status if(self.common.settings['installed']): - self.status_label = gtk.Label(_('Status: Installed')) + install_button.hide() + reinstall_button.show() else: - self.status_label = gtk.Label(_('Status: Not Installed')) - self.status_label.set_line_wrap(True) - self.status_box.pack_start(self.status_label, True, True, 0) - self.status_label.show() + install_button.show() + reinstall_button.hide() - if(self.common.settings['installed']): - # reinstall button - reinstall_image = gtk.Image() - reinstall_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON) - self.reinstall_button = gtk.Button(_("Reinstall Tor Browser")) - self.reinstall_button.set_image(reinstall_image) - self.reinstall_button.connect("clicked", self.reinstall, None) - self.status_box.add(self.reinstall_button) - self.reinstall_button.show() - else: - # install button - install_image = gtk.Image() - install_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON) - self.install_button = gtk.Button(_("Install Tor Browser")) - self.install_button.set_image(install_image) - self.install_button.connect("clicked", self.install, None) - self.status_box.add(self.install_button) - self.install_button.show() - - # mirrors - self.mirrors_box = gtk.HBox(False, 10) - self.box.pack_start(self.mirrors_box, True, True, 0) - self.mirrors_box.show() - - self.mirrors_label = gtk.Label(_('Mirror')) - self.mirrors_label.set_line_wrap(True) - self.mirrors_box.pack_start(self.mirrors_label, True, True, 0) - self.mirrors_label.show() - - self.mirrors = gtk.combo_box_new_text() + # Status layout + status_layout = QtWidgets.QVBoxLayout() + status_layout.addWidget(status_label) + status_layout.addWidget(install_button) + status_layout.addWidget(reinstall_button) + + # Top layout + top_layout = QtWidgets.QHBoxLayout() + top_layout.addLayout(settings_layout) + top_layout.addLayout(status_layout) + + # Mirror + mirror_label = QtWidgets.QLabel(_('Mirror')) + + self.mirror = QtWidgets.QComboBox() for mirror in self.common.mirrors: - self.mirrors.append_text(mirror) + self.mirror.addItem(mirror) + if self.common.settings['mirror'] in self.common.mirrors: - self.mirrors.set_active(self.common.mirrors.index(self.common.settings['mirror'])) + self.mirror.setCurrentIndex(self.mirror.findText(self.common.settings['mirror'])) else: - self.mirrors.set_active(0) - self.mirrors_box.pack_start(self.mirrors, True, True, 0) - self.mirrors.show() - - # button box - self.button_box = gtk.HButtonBox() - self.button_box.set_layout(gtk.BUTTONBOX_SPREAD) - self.box.pack_start(self.button_box, True, True, 0) - self.button_box.show() - - # save and exit button - save_exit_image = gtk.Image() - save_exit_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON) - self.save_exit_button = gtk.Button(_("Save & Exit")) - self.save_exit_button.set_image(save_exit_image) - self.save_exit_button.connect("clicked", self.save_exit, None) - self.button_box.add(self.save_exit_button) - self.save_exit_button.show() - - # cancel button - cancel_image = gtk.Image() - cancel_image.set_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_BUTTON) - self.cancel_button = gtk.Button(_("Cancel")) - self.cancel_button.set_image(cancel_image) - self.cancel_button.connect("clicked", self.destroy, None) - self.button_box.add(self.cancel_button) - self.cancel_button.show() - - # show the window - self.window.show() - - # start gtk - gtk.main() - - # UI Callback for update over tor/use system tor - def on_system_tor_clicked(self, event): - if self.txsocks_found: - value = self.system_tor_checkbox.get_active() - else: - value = False - - self.tor_download_checkbox.set_active(value) - self.tor_download_checkbox.set_sensitive(value) - - # install - def install(self, widget, data=None): + self.mirror.setCurrentIndex(0) + + mirror_layout = QtWidgets.QHBoxLayout() + mirror_layout.addWidget(mirror_label) + mirror_layout.addWidget(self.mirror) + + # Save & Exit button + self.save_exit_button = QtWidgets.QPushButton(_("Save && Exit")) + self.save_exit_button.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogApplyButton)) + self.save_exit_button.clicked.connect(self.save_exit) + + # Cancel button + self.cancel_button = QtWidgets.QPushButton(_("Cancel")) + self.cancel_button.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DialogCancelButton)) + self.cancel_button.clicked.connect(self.close) + + # Buttons layout + buttons_layout = QtWidgets.QHBoxLayout() + buttons_layout.addWidget(self.save_exit_button) + buttons_layout.addWidget(self.cancel_button) + + # Main layout + layout = QtWidgets.QVBoxLayout() + layout.addLayout(top_layout) + layout.addLayout(mirror_layout) + layout.addLayout(buttons_layout) + + central_widget = QtWidgets.QWidget() + central_widget.setLayout(layout) + self.setCentralWidget(central_widget) + + # Install + def install(self): self.save() subprocess.Popen([self.common.paths['tbl_bin']]) - self.destroy(False) + self.close() - # launch - def reinstall(self, widget, data=None): + # Reinstall + def reinstall(self): self.save() shutil.rmtree(self.common.paths['tbb']['dir']) subprocess.Popen([self.common.paths['tbl_bin']]) - self.destroy(False) + self.close() - # save and exit - def save_exit(self, widget, data=None): + # Save & Exit + def save_exit(self): self.save() - self.destroy(False) + self.close() - # save settings + # Save settings def save(self): - # checkbox options - self.common.settings['download_over_tor'] = self.tor_download_checkbox.get_active() - self.common.settings['modem_sound'] = self.modem_checkbox.get_active() - self.common.settings['tor_socks_address'] = self.tor_addr.get_text() + # Checkbox options + self.common.settings['download_over_tor'] = self.tor_download_checkbox.isChecked() + self.common.settings['force_en-US'] = self.force_en_checkbox.isChecked() + self.common.settings['tor_socks_address'] = self.tor_addr.text() - # figure out the selected mirror - self.common.settings['mirror'] = self.common.mirrors[self.mirrors.get_active()] + # Figure out the selected mirror + self.common.settings['mirror'] = self.mirror.currentText() - # save them + # Save them self.common.save_settings() - - # exit - def delete_event(self, widget, event, data=None): - return False - - def destroy(self, widget, data=None): - gtk.main_quit()