def toggle_cashaddr(self, on = None): was = self.is_cashaddr() if on is None: on = not was else: on = bool(on) self.config.set_key('show_cashaddr', on) Address.show_cashaddr(on) if was != on: self.cashaddr_toggled_signal.emit()
def __init__(self, **kwargs): # initialize variables self._clipboard = Clipboard self.info_bubble = None self.nfcscanner = None self.tabs = None self.is_exit = False self.wallet = None App.__init__(self) #, **kwargs) title = _('Electron-Cash App') self.electrum_config = config = kwargs.get('config', None) self.language = config.get('language', 'en') self.network = network = kwargs.get('network', None) if self.network: self.num_blocks = self.network.get_local_height() self.num_nodes = len(self.network.get_interfaces()) host, port, protocol, proxy_config, auto_connect = self.network.get_parameters( ) self.server_host = host self.server_port = port self.auto_connect = auto_connect self.proxy_config = proxy_config if proxy_config else {} self.plugins = kwargs.get('plugins', []) self.gui_object = kwargs.get('gui_object', None) self.daemon = self.gui_object.daemon self.fx = self.daemon.fx self.use_change = config.get('use_change', True) self.use_cashaddr = config.get('use_cashaddr', True) Address.show_cashaddr(self.use_cashaddr) self.use_unconfirmed = not config.get('confirmed_only', False) # create triggers so as to minimize updation a max of 2 times a sec self._trigger_update_wallet = Clock.create_trigger( self.update_wallet, .5) self._trigger_update_status = Clock.create_trigger( self.update_status, .5) self._trigger_update_history = Clock.create_trigger( self.update_history, .5) self._trigger_update_interfaces = Clock.create_trigger( self.update_interfaces, .5) # cached dialogs self._settings_dialog = None self._password_dialog = None
def on_use_cashaddr(self, instance, x): self.electrum_config.set_key('use_cashaddr', self.use_cashaddr, True) Address.show_cashaddr(self.use_cashaddr)
def __init__(self, config, daemon, plugins): super(__class__, self).__init__() # QObject init assert __class__.instance is None, "ElectrumGui is a singleton, yet an instance appears to already exist! FIXME!" __class__.instance = self i18n.set_language(config.get('language')) self.config = config self.daemon = daemon self.plugins = plugins self.windows = [] self._setup_do_in_main_thread_handler() # Uncomment this call to verify objects are being properly # GC-ed when windows are closed #if daemon.network: # from electroncash.util import DebugMem # from electroncash.wallet import Abstract_Wallet # from electroncash.verifier import SPV # from electroncash.synchronizer import Synchronizer # daemon.network.add_jobs([DebugMem([Abstract_Wallet, SPV, Synchronizer, # ElectrumWindow], interval=5)]) call_after_app = self._pre_and_post_app_setup() try: self.app = QApplication(sys.argv) finally: call_after_app() self._load_fonts() # this needs to be done very early, before the font engine loads fonts.. out of paranoia self._exit_if_required_pyqt_is_missing() # This may immediately exit the app if missing required PyQt5 modules, so it should also be done early. self.new_version_available = None self._set_icon() self.app.installEventFilter(self) self.timer = QTimer(self); self.timer.setSingleShot(False); self.timer.setInterval(500) #msec self.gc_timer = QTimer(self); self.gc_timer.setSingleShot(True); self.gc_timer.timeout.connect(ElectrumGui.gc); self.gc_timer.setInterval(500) #msec self.nd = None self._last_active_window = None # we remember the last activated ElectrumWindow as a Weak.ref Address.show_cashaddr(self.is_cashaddr()) # Dark Theme -- ideally set this before any widgets are created. self.set_dark_theme_if_needed() # / # Wallet Password Cache # wallet -> (password, QTimer) map for some plugins (like CashShuffle) # that need wallet passwords to operate, and we don't want to prompt # for pw twice right after the InstallWizard runs (see #106). # Entries in this map are deleted after 10 seconds by the QTimer (which # also deletes itself) self._wallet_password_cache = Weak.KeyDictionary() # / self.update_checker = UpdateChecker() self.update_checker_timer = QTimer(self); self.update_checker_timer.timeout.connect(self.on_auto_update_timeout); self.update_checker_timer.setSingleShot(False) self.update_checker.got_new_version.connect(self.on_new_version) # init tray self.dark_icon = self.config.get("dark_icon", False) self.tray = QSystemTrayIcon(self.tray_icon(), self) self.tray.setToolTip('Electron Cash') self.tray.activated.connect(self.tray_activated) self.build_tray_menu() self.tray.show() self.new_window_signal.connect(self.start_new_window) if self.has_auto_update_check(): self._start_auto_update_timer(first_run = True) self.app.focusChanged.connect(self.on_focus_change) # track last window the user interacted with self.shutdown_signal.connect(self.close, Qt.QueuedConnection) run_hook('init_qt', self) # We did this once already in the set_dark_theme call, but we do this # again here just in case some plugin modified the color scheme. ColorScheme.update_from_widget(QWidget()) self._check_and_warn_qt_version()
def __init__(self, config, daemon, plugins): super(__class__, self).__init__() # QObject init assert __class__.instance is None, "ElectrumGui is a singleton, yet an instance appears to already exist! FIXME!" __class__.instance = self set_language(config.get('language')) self.config = config self.daemon = daemon self.plugins = plugins self.windows = [] if self.windows_qt_use_freetype: # Use FreeType for font rendering on Windows. This fixes rendering # of the Schnorr sigil and allows us to load the Noto Color Emoji # font if needed. os.environ['QT_QPA_PLATFORM'] = 'windows:fontengine=freetype' # Uncomment this call to verify objects are being properly # GC-ed when windows are closed #if daemon.network: # from electroncash.util import DebugMem # from electroncash.wallet import Abstract_Wallet # from electroncash.verifier import SPV # from electroncash.synchronizer import Synchronizer # daemon.network.add_jobs([DebugMem([Abstract_Wallet, SPV, Synchronizer, # ElectrumWindow], interval=5)]) QCoreApplication.setAttribute(Qt.AA_X11InitThreads) if hasattr(Qt, "AA_ShareOpenGLContexts"): QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts) if sys.platform not in ('darwin', ) and hasattr( Qt, "AA_EnableHighDpiScaling"): # The below only applies to non-macOS. On macOS this setting is # never used (because it is implicitly auto-negotiated by the OS # in a differernt way). # # qt_disable_highdpi will be set to None by default, or True if # specified on command-line. The command-line override is intended # to supporess high-dpi mode just for this run for testing. # # The more permanent setting is qt_enable_highdpi which is the GUI # preferences option, so we don't enable highdpi if it's explicitly # set to False in the GUI. # # The default on Linux, Windows, etc is to enable high dpi disable_scaling = config.get('qt_disable_highdpi', False) enable_scaling = config.get('qt_enable_highdpi', True) if not disable_scaling and enable_scaling: QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) if hasattr(Qt, "AA_UseHighDpiPixmaps"): QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) if hasattr(QGuiApplication, 'setDesktopFileName'): QGuiApplication.setDesktopFileName('electron-cash.desktop') self.app = QApplication(sys.argv) self._load_fonts( ) # this needs to be done very early, before the font engine loads fonts.. out of paranoia self._exit_if_required_pyqt_is_missing( ) # This may immediately exit the app if missing required PyQt5 modules, so it should also be done early. self.new_version_available = None self._set_icon() self.app.installEventFilter(self) self.timer = QTimer(self) self.timer.setSingleShot(False) self.timer.setInterval(500) #msec self.gc_timer = QTimer(self) self.gc_timer.setSingleShot(True) self.gc_timer.timeout.connect(ElectrumGui.gc) self.gc_timer.setInterval(500) #msec self.nd = None self._last_active_window = None # we remember the last activated ElectrumWindow as a Weak.ref Address.show_cashaddr(self.is_cashaddr()) # Dark Theme -- ideally set this before any widgets are created. self.set_dark_theme_if_needed() # / # Wallet Password Cache # wallet -> (password, QTimer) map for some plugins (like CashShuffle) # that need wallet passwords to operate, and we don't want to prompt # for pw twice right after the InstallWizard runs (see #106). # Entries in this map are deleted after 10 seconds by the QTimer (which # also deletes itself) self._wallet_password_cache = Weak.KeyDictionary() # / self.update_checker = UpdateChecker() self.update_checker_timer = QTimer(self) self.update_checker_timer.timeout.connect(self.on_auto_update_timeout) self.update_checker_timer.setSingleShot(False) self.update_checker.got_new_version.connect(self.on_new_version) # init tray self.dark_icon = self.config.get("dark_icon", False) self.tray = QSystemTrayIcon(self.tray_icon(), self) self.tray.setToolTip('Electron Cash') self.tray.activated.connect(self.tray_activated) self.build_tray_menu() self.tray.show() self.new_window_signal.connect(self.start_new_window) if self.has_auto_update_check(): self._start_auto_update_timer(first_run=True) self.app.focusChanged.connect( self.on_focus_change) # track last window the user interacted with run_hook('init_qt', self) # We did this once already in the set_dark_theme call, but we do this # again here just in case some plugin modified the color scheme. ColorScheme.update_from_widget(QWidget()) self._check_and_warn_qt_version()