class LitecoinTab(QWidget):
    change_network = Signal(Network)

    def __init__(self, litecoin: Litecoin):
        super().__init__()

        self.litecoin = litecoin

        self.litecoin_layout = QVBoxLayout()

        self.data_directory_group_box = DataDirectoryBox(litecoin=self.litecoin)
        self.data_directory_group_box.file_dialog.new_data_directory.connect(
            self.change_datadir
        )

        self.litecoin_layout.addWidget(self.data_directory_group_box)
        self.litecoin_layout.setAlignment(self.data_directory_group_box, Qt.AlignHCenter)

        self.enable_wallet_label = QLabel('Enable wallet')
        self.enable_wallet_widget = QCheckBox('Enable Wallet')
        self.enable_wallet_widget.setChecked(not self.litecoin.file['disablewallet'])
        self.enable_wallet_widget.stateChanged.connect(
            lambda x: self.update_config('disablewallet', not bool(x))
        )
        self.litecoin_layout.addWidget(self.enable_wallet_widget)

        self.enable_testnet_label = QLabel('Enable testnet')
        self.enable_testnet_widget = QCheckBox('Enable Testnet')
        self.set_checked(
            self.enable_testnet_widget,
            self.litecoin.file['testnet']
        )
        self.enable_testnet_widget.stateChanged.connect(
            lambda x: self.update_config('testnet', bool(x))
        )
        self.litecoin_layout.addWidget(self.enable_testnet_widget)
        self.setLayout(self.litecoin_layout)
        self.litecoin.file.file_watcher.fileChanged.connect(self.litecoin_config_changed)

    def change_datadir(self, new_datadir: str):
        self.litecoin.file['datadir'] = new_datadir
        self.litecoin.set_prune()
        self.data_directory_group_box.set_datadir(
            self.litecoin.file['datadir'],
            self.litecoin.file['prune']
        )

    @staticmethod
    def set_checked(widget: QCheckBox, state: bool):
        if state is None:
            widget.setChecked(False)
            return
        widget.setChecked(state)

    def update_config(self, name: str, state: bool):
        self.litecoin.file[name] = state

        if name == 'testnet' and state:
            self.change_network.emit(TESTNET)
        elif name == 'testnet' and not state:
            self.change_network.emit(MAINNET)

    def litecoin_config_changed(self):
        if self.litecoin.file['testnet']:
            self.enable_testnet_widget.blockSignals(True)
            self.set_checked(self.enable_testnet_widget, True)
            self.enable_testnet_widget.blockSignals(False)
        else:
            self.enable_testnet_widget.blockSignals(True)
            self.set_checked(self.enable_testnet_widget, False)
            self.enable_testnet_widget.blockSignals(False)
示例#2
0
class PilotControls(QHBoxLayout):
    def __init__(self, roster: Optional[FlightRoster], idx: int) -> None:
        super().__init__()
        self.roster = roster
        self.pilot_index = idx

        self.selector = PilotSelector(roster, idx)
        self.selector.currentIndexChanged.connect(self.on_pilot_changed)
        self.addWidget(self.selector)

        self.player_checkbox = QCheckBox(text="Player")
        self.player_checkbox.setToolTip("Checked if this pilot is a player.")
        self.on_pilot_changed(self.selector.currentIndex())
        self.addWidget(self.player_checkbox)

        self.player_checkbox.toggled.connect(self.on_player_toggled)

    @property
    def pilot(self) -> Optional[Pilot]:
        if self.roster is None or self.pilot_index >= self.roster.max_size:
            return None
        return self.roster.pilots[self.pilot_index]

    def on_player_toggled(self, checked: bool) -> None:
        pilot = self.pilot
        if pilot is None:
            logging.error(
                "Cannot toggle state of a pilot when none is selected")
            return
        pilot.player = checked

    def on_pilot_changed(self, index: int) -> None:
        pilot = self.selector.itemData(index)
        self.player_checkbox.blockSignals(True)
        try:
            self.player_checkbox.setChecked(pilot is not None and pilot.player)
        finally:
            self.player_checkbox.blockSignals(False)

    def update_available_pilots(self) -> None:
        self.selector.rebuild()

    def enable_and_reset(self) -> None:
        self.selector.rebuild()
        self.player_checkbox.setEnabled(True)
        self.on_pilot_changed(self.selector.currentIndex())

    def disable_and_clear(self) -> None:
        self.selector.rebuild()
        self.player_checkbox.blockSignals(True)
        try:
            self.player_checkbox.setEnabled(False)
            self.player_checkbox.setChecked(False)
        finally:
            self.player_checkbox.blockSignals(False)

    def replace(self, new_roster: Optional[FlightRoster]) -> None:
        self.roster = new_roster
        if self.roster is None or self.pilot_index >= self.roster.max_size:
            self.disable_and_clear()
        else:
            self.enable_and_reset()
        self.selector.replace(new_roster)