diff --git a/__init__.py b/__init__.py index 9f2815e..e69de29 100644 --- a/__init__.py +++ b/__init__.py @@ -1,20 +0,0 @@ -from electrum.i18n import _ -import subprocess -from . import bal_resources -BUILD_NUMBER = 0 -REVISION_NUMBER = 1 -VERSION_NUMBER = 0 -def _version(): - return f'{VERSION_NUMBER}.{REVISION_NUMBER}-{BUILD_NUMBER}' - -version = _version() -author = "Bal Enterprise inc." -fullname = _('B.A.L.') -description = ''.join([ - "", _("Bitcoin After Life"), '
', - _("For more information, visit"), - " https://bitcoin-after.life/
", - "

Version: ", _version(),"

" -]) -#available_for = ['qt', 'cmdline', 'qml'] -available_for = ['qt'] diff --git a/bal.py b/bal.py index c320324..b9abd54 100644 --- a/bal.py +++ b/bal.py @@ -102,8 +102,10 @@ class BalPlugin(BasePlugin): def config_get(self,key): v = self.config.get(key,None) + print("config get",key,v) if v is None: - self.config.set_key(key,self.DEFAULT_SETTINGS[key],save=True) + self.config.set_key(key,self.DEFAULT_SETTINGS[key]) + print("config setkey",key) v = self.DEFAULT_SETTINGS[key] return v diff --git a/balqt/baldialog.py b/balqt/baldialog.py index eeadd2a..86dacfb 100644 --- a/balqt/baldialog.py +++ b/balqt/baldialog.py @@ -95,25 +95,8 @@ class bal_checkbox(QCheckBox): def __init__(self, plugin,variable,window=None): QCheckBox.__init__(self) self.setChecked(plugin.config_get(variable)) - window=window def on_check(v): - plugin.config.set_key(variable, v == Qt.CheckState.Checked, save=True) - if window: - plugin._hide_invalidated= plugin.config_get(plugin.HIDE_INVALIDATED) - plugin._hide_replaced= plugin.config_get(plugin.HIDE_REPLACED) - - window.update_all() + plugin.config.set_key(variable, v == 2) + plugin.config_get(variable) self.stateChanged.connect(on_check) - #TODO IMPLEMENT PREVIEW DIALOG - #tx list display txid, willexecutor, qrcode, button to sign - # :def preview_dialog(self, txs): - def preview_dialog(self, txs): - w=PreviewDialog(self,txs) - w.exec() - return w - def add_info_from_will(self,tx): - for input in tx.inputs(): - pass - - diff --git a/balqt/closedialog.py b/balqt/closedialog.py index aa779ed..595129d 100644 --- a/balqt/closedialog.py +++ b/balqt/closedialog.py @@ -225,7 +225,7 @@ class BalCloseDialog(BalDialog): #self._stopping=True #self.on_success_phase2() # return - _logger.debug("have to sign",self.have_to_sign) + _logger.debug("have to sign {}".format(self.have_to_sign)) password=None if self.have_to_sign is None: self.msg_set_invalidating() diff --git a/balqt/willexecutor_dialog.py b/balqt/willexecutor_dialog.py index 5afa9c0..51ee637 100644 --- a/balqt/willexecutor_dialog.py +++ b/balqt/willexecutor_dialog.py @@ -199,7 +199,6 @@ class WillExecutorDialog(BalDialog,MessageBoxMixin): def __init__(self, bal_window): BalDialog.__init__(self,bal_window.window) self.bal_plugin = bal_window.bal_plugin - self.gui_object = self.bal_plugin.gui_object self.config = self.bal_plugin.config self.window = bal_window.window self.bal_window = bal_window diff --git a/qt.py b/qt.py index 6b3650e..adf081d 100644 --- a/qt.py +++ b/qt.py @@ -81,22 +81,29 @@ class Plugin(BalPlugin,Logger): @hook def init_qt(self,gui_object): + print("********************************************************************************************************************") self.logger.info("HOOK init qt") + print("logger") try: self.gui_object=gui_object + print(dir(gui_object)) for window in gui_object.windows: wallet = window.wallet if wallet: window.show_warning(_('Please restart Electrum to activate the BAL plugin'), title=_('Success')) return w = BalWindow(self,window) + print("windows.winid",window.winid) self.bal_windows[window.winId]= w for child in window.children(): if isinstance(child,QMenuBar): + print("found menubar") for menu_child in child.children(): if isinstance(menu_child,QMenu): + print("found qmenu") try: if menu_child.title()==_("&Tools"): + print("found tools") w.init_menubar_tools(menu_child) except Exception as e: @@ -104,8 +111,8 @@ class Plugin(BalPlugin,Logger): self.logger.error(("except:",menu_child.text())) except Exception as e: - raise e self.logger.error("Error loading plugini {}".format(e)) + raise e @@ -118,15 +125,16 @@ class Plugin(BalPlugin,Logger): sb.addPermanentWidget(b) @hook - def init_menubar_tools(self,window,tools_menu): + def init_menubar(self,window): self.logger.info("HOOK init_menubar") w = self.get_window(window) - w.init_menubar_tools(tools_menu) + w.init_menubar_tools(window.tools_menu) @hook def load_wallet(self,wallet, main_window): self.logger.info("HOOK load wallet") w = self.get_window(main_window) + print(dir(w)) w.wallet = wallet w.init_will() w.willexecutors = Willexecutors.get_willexecutors(self, update=False, bal_window=w) @@ -170,8 +178,116 @@ class Plugin(BalPlugin,Logger): return self.extension = bool(keystore.get_passphrase(password)) return keystore.get_seed(password) + def settings_dialog(self,window,wallet): + + d = BalDialog(window, self.get_window_title("Settings")) + d.setMinimumSize(100, 200) + qicon=qt_resources.read_QPixmap("bal32x32.png") + lbl_logo = QLabel() + lbl_logo.setPixmap(qicon) + + #heir_locktime_time = QSpinBox() + #heir_locktime_time.setMinimum(0) + #heir_locktime_time.setMaximum(3650) + #heir_locktime_time.setValue(int(self.config_get(BalPlugin.LOCKTIME_TIME))) + #def on_heir_locktime_time(): + # value = heir_locktime_time.value() + # self.config.set_key(BalPlugin.LOCKTIME_TIME,value,save=True) + #heir_locktime_time.valueChanged.connect(on_heir_locktime_time) + + ##heir_locktimedelta_time = QSpinBox() + #heir_locktimedelta_time.setMinimum(0) + #heir_locktimedelta_time.setMaximum(3650) + #heir_locktimedelta_time.setValue(int(self.config_get(BalPlugin.LOCKTIMEDELTA_TIME))) + #def on_heir_locktime_time(): + #value = heir_locktime_time.value + #self.config.set_key(BalPlugin.LOCKTIME_TIME,value,save=True) + #heir_locktime_time.valueChanged.connect(on_heir_locktime_time) + + #heir_locktime_blocks = QSpinBox() + #heir_locktime_blocks.setMinimum(0) + #heir_locktime_blocks.setMaximum(144*3650) + #heir_locktime_blocks.setValue(int(self.config_get(BalPlugin.LOCKTIME_BLOCKS))) + #def on_heir_locktime_blocks(): + #value = heir_locktime_blocks.value() + #self.config.set_key(BalPlugin.LOCKTIME_BLOCKS,value,save=True) + #heir_locktime_blocks.valueChanged.connect(on_heir_locktime_blocks) + + #heir_locktimedelta_blocks = QSpinBox() + #heir_locktimedelta_blocks.setMinimum(0) + #heir_locktimedelta_blocks.setMaximum(144*3650) + #heir_locktimedelta_blocks.setValue(int(self.config_get(BalPlugin.LOCKTIMEDELTA_BLOCKS))) + #def on_heir_locktimedelta_blocks(): + #value = heir_locktimedelta_blocks.value() + #self.config.set_key(BalPlugin.LOCKTIMEDELTA_TIME,value,save=True) + #heir_locktimedelta_blocks.valueChanged.connect(on_heir_locktimedelta_blocks) + + #heir_tx_fees = QSpinBox() + #heir_tx_fees.setMinimum(1) + #heir_tx_fees.setMaximum(10000) + #heir_tx_fees.setValue(int(self.config_get(BalPlugin.TX_FEES))) + #def on_heir_tx_fees(): + #value = heir_tx_fees.value() + #self.config.set_key(BalPlugin.TX_FEES,value,save=True) + #heir_tx_fees.valueChanged.connect(on_heir_tx_fees) + #heir_broadcast = bal_checkbox(self, BalPlugin.BROADCAST) + #heir_ask_broadcast = bal_checkbox(self, BalPlugin.ASK_BROADCAST) + #heir_invalidate = bal_checkbox(self, BalPlugin.INVALIDATE) + #heir_ask_invalidate = bal_checkbox(self, BalPlugin.ASK_INVALIDATE) + #heir_preview = bal_checkbox(self, BalPlugin.PREVIEW) + heir_ping_willexecutors = bal_checkbox(self, BalPlugin.PING_WILLEXECUTORS) + heir_ask_ping_willexecutors = bal_checkbox(self, BalPlugin.ASK_PING_WILLEXECUTORS) + #print("setkey broadcast") + #self.config.set_key(BalPlugin.BROADCAST,True) + heir_no_willexecutor = bal_checkbox(self, BalPlugin.NO_WILLEXECUTOR) + + + heir_hide_replaced = bal_checkbox(self,BalPlugin.HIDE_REPLACED,self) + + heir_hide_invalidated = bal_checkbox(self,BalPlugin.HIDE_INVALIDATED,self) + #heir_allow_repush = bal_checkbox(self,BalPlugin.ALLOW_REPUSH,self) + heir_repush = QPushButton("Rebroadcast transactions") + heir_repush.clicked.connect(partial(self.broadcast_transactions,True)) + grid=QGridLayout(d) + #add_widget(grid,"Refresh Time Days",heir_locktime_time,0,"Delta days for inputs to be invalidated and transactions resubmitted") + #add_widget(grid,"Refresh Blocks",heir_locktime_blocks,1,"Delta blocks for inputs to be invalidated and transaction resubmitted") + #add_widget(grid,"Transaction fees",heir_tx_fees,1,"Default transaction fees") + #add_widget(grid,"Broadcast transactions",heir_broadcast,3,"") + #add_widget(grid," - Ask before",heir_ask_broadcast,4,"") + #add_widget(grid,"Invalidate transactions",heir_invalidate,5,"") + #add_widget(grid," - Ask before",heir_ask_invalidate,6,"") + #add_widget(grid,"Show preview before sign",heir_preview,7,"") + + #grid.addWidget(lbl_logo,0,0) + add_widget(grid,"Hide Replaced",heir_hide_replaced, 1, "Hide replaced transactions from will detail and list") + add_widget(grid,"Hide Invalidated",heir_hide_invalidated ,2,"Hide invalidated transactions from will detail and list") + add_widget(grid,"Ping Willexecutors",heir_ping_willexecutors,3,"Ping willexecutors to get payment info before compiling will") + add_widget(grid," - Ask before",heir_ask_ping_willexecutors,4,"Ask before to ping willexecutor") + add_widget(grid,"Backup Transaction",heir_no_willexecutor,5,"Add transactions without willexecutor") + grid.addWidget(heir_repush,6,0) + grid.addWidget(HelpButton("Broadcast all transactions to willexecutors including those already pushed"),6,2) + #add_widget(grid,"Max Allowed TimeDelta Days",heir_locktimedelta_time,8,"") + #add_widget(grid,"Max Allowed BlocksDelta",heir_locktimedelta_blocks,9,"") + + if ret := bool(d.exec()): + try: + self.update_all() + return ret + except: + pass + return False + + def broadcast_transactions(self,force): + for k,w in self.bal_windows.items(): + print(dir(w)) + w.broadcast_transactions(force) + + def update_all(self): + for k,w in self.bal_windows.items(): + w.update_all() + def get_window_title(self,title): + return _('BAL - ') + _(title) - class shown_cv(): _type= bool def __init__(self,value): @@ -212,11 +328,22 @@ class BalWindow(Logger): tab.tab_pos = len(tabs) if tab.is_shown_cv: tabs.addTab(tab, icon, description.replace("&", "")) - + def add_toggle_action(tab): + is_shown = tab.is_shown_cv.get() + tab.menu_action = self.window.view_menu.addAction(tab.tab_description, lambda: self.window.toggle_tab(tab)) + tab.menu_action.setCheckable(True) + tab.menu_action.setChecked(is_shown) + + + + print("add tab heir",self.heirs_tab); add_optional_tab(self.window.tabs, self.heirs_tab, qt_resources.read_QIcon("heir.png"), _("&Heirs")) add_optional_tab(self.window.tabs, self.will_tab, qt_resources.read_QIcon("will.png"), _("&Will")) tools_menu.addSeparator() self.tools_menu.willexecutors_action = tools_menu.addAction(_("&Will-Executors"), self.show_willexecutor_dialog) + self.window.view_menu.addSeparator() + add_toggle_action(self.heirs_tab) + add_toggle_action(self.will_tab) def load_willitems(self): self.willitems={} @@ -262,8 +389,6 @@ class BalWindow(Logger): self.bal_plugin.validate_will_settings(self.will_settings) self.heir_list.update_will_settings() - def get_window_title(self,title): - return _('BAL - ') + _(title) def show_willexecutor_dialog(self): self.willexecutor_dialog = WillExecutorDialog(self) @@ -271,6 +396,8 @@ class BalWindow(Logger): def create_heirs_tab(self): self.heir_list = l = HeirList(self) + + print("heir_list",l) tab = self.window.create_list_tab(l) tab.is_shown_cv = shown_cv(True) return tab @@ -829,101 +956,6 @@ class BalWindow(Logger): self.dw=WillDetailDialog(self) self.dw.show() - def settings_dialog(self,window): - d = BalDialog(window, self.get_window_title("Settings")) - d.setMinimumSize(100, 200) - qicon=qt_resources.read_QPixmap("bal32x32.png") - lbl_logo = QLabel() - lbl_logo.setPixmap(qicon) - - heir_locktime_time = QSpinBox() - heir_locktime_time.setMinimum(0) - heir_locktime_time.setMaximum(3650) - heir_locktime_time.setValue(int(self.bal_plugin.config_get(BalPlugin.LOCKTIME_TIME))) - def on_heir_locktime_time(): - value = heir_locktime_time.value() - self.bal_plugin.config.set_key(BalPlugin.LOCKTIME_TIME,value,save=True) - heir_locktime_time.valueChanged.connect(on_heir_locktime_time) - - heir_locktimedelta_time = QSpinBox() - heir_locktimedelta_time.setMinimum(0) - heir_locktimedelta_time.setMaximum(3650) - heir_locktimedelta_time.setValue(int(self.bal_plugin.config_get(BalPlugin.LOCKTIMEDELTA_TIME))) - def on_heir_locktime_time(): - value = heir_locktime_time.value - self.bal_plugin.config.set_key(BalPlugin.LOCKTIME_TIME,value,save=True) - heir_locktime_time.valueChanged.connect(on_heir_locktime_time) - - heir_locktime_blocks = QSpinBox() - heir_locktime_blocks.setMinimum(0) - heir_locktime_blocks.setMaximum(144*3650) - heir_locktime_blocks.setValue(int(self.bal_plugin.config_get(BalPlugin.LOCKTIME_BLOCKS))) - def on_heir_locktime_blocks(): - value = heir_locktime_blocks.value() - self.bal_plugin.config.set_key(BalPlugin.LOCKTIME_BLOCKS,value,save=True) - heir_locktime_blocks.valueChanged.connect(on_heir_locktime_blocks) - - heir_locktimedelta_blocks = QSpinBox() - heir_locktimedelta_blocks.setMinimum(0) - heir_locktimedelta_blocks.setMaximum(144*3650) - heir_locktimedelta_blocks.setValue(int(self.bal_plugin.config_get(BalPlugin.LOCKTIMEDELTA_BLOCKS))) - def on_heir_locktimedelta_blocks(): - value = heir_locktimedelta_blocks.value() - self.bal_plugin.config.set_key(BalPlugin.LOCKTIMEDELTA_TIME,value,save=True) - heir_locktimedelta_blocks.valueChanged.connect(on_heir_locktimedelta_blocks) - - heir_tx_fees = QSpinBox() - heir_tx_fees.setMinimum(1) - heir_tx_fees.setMaximum(10000) - heir_tx_fees.setValue(int(self.bal_plugin.config_get(BalPlugin.TX_FEES))) - def on_heir_tx_fees(): - value = heir_tx_fees.value() - self.bal_plugin.config.set_key(BalPlugin.TX_FEES,value,save=True) - heir_tx_fees.valueChanged.connect(on_heir_tx_fees) - - heir_broadcast = bal_checkbox(self.bal_plugin, BalPlugin.BROADCAST) - heir_ask_broadcast = bal_checkbox(self.bal_plugin, BalPlugin.ASK_BROADCAST) - heir_invalidate = bal_checkbox(self.bal_plugin, BalPlugin.INVALIDATE) - heir_ask_invalidate = bal_checkbox(self.bal_plugin, BalPlugin.ASK_INVALIDATE) - heir_preview = bal_checkbox(self.bal_plugin, BalPlugin.PREVIEW) - heir_ping_willexecutors = bal_checkbox(self.bal_plugin, BalPlugin.PING_WILLEXECUTORS) - heir_ask_ping_willexecutors = bal_checkbox(self.bal_plugin, BalPlugin.ASK_PING_WILLEXECUTORS) - heir_no_willexecutor = bal_checkbox(self.bal_plugin, BalPlugin.NO_WILLEXECUTOR) - - - heir_hide_replaced = bal_checkbox(self.bal_plugin,BalPlugin.HIDE_REPLACED,self) - heir_hide_invalidated = bal_checkbox(self.bal_plugin,BalPlugin.HIDE_INVALIDATED,self) - heir_allow_repush = bal_checkbox(self.bal_plugin,BalPlugin.ALLOW_REPUSH,self) - heir_repush = QPushButton("Rebroadcast transactions") - heir_repush.clicked.connect(partial(self.broadcast_transactions,True)) - grid=QGridLayout(d) - #add_widget(grid,"Refresh Time Days",heir_locktime_time,0,"Delta days for inputs to be invalidated and transactions resubmitted") - #add_widget(grid,"Refresh Blocks",heir_locktime_blocks,1,"Delta blocks for inputs to be invalidated and transaction resubmitted") - #add_widget(grid,"Transaction fees",heir_tx_fees,1,"Default transaction fees") - #add_widget(grid,"Broadcast transactions",heir_broadcast,3,"") - #add_widget(grid," - Ask before",heir_ask_broadcast,4,"") - #add_widget(grid,"Invalidate transactions",heir_invalidate,5,"") - #add_widget(grid," - Ask before",heir_ask_invalidate,6,"") - #add_widget(grid,"Show preview before sign",heir_preview,7,"") - - #grid.addWidget(lbl_logo,0,0) - add_widget(grid,"Hide Replaced",heir_hide_replaced, 1, "Hide replaced transactions from will detail and list") - add_widget(grid,"Hide Invalidated",heir_hide_invalidated ,2,"Hide invalidated transactions from will detail and list") - add_widget(grid,"Ping Willexecutors",heir_ping_willexecutors,3,"Ping willexecutors to get payment info before compiling will") - add_widget(grid," - Ask before",heir_ask_ping_willexecutors,4,"Ask before to ping willexecutor") - add_widget(grid,"Backup Transaction",heir_no_willexecutor,5,"Add transactions without willexecutor") - grid.addWidget(heir_repush,6,0) - grid.addWidget(HelpButton("Broadcast all transactions to willexecutors including those already pushed"),6,2) - #add_widget(grid,"Max Allowed TimeDelta Days",heir_locktimedelta_time,8,"") - #add_widget(grid,"Max Allowed BlocksDelta",heir_locktimedelta_blocks,9,"") - - if ret := bool(d.exec()): - try: - self.update_all() - return ret - except: - pass - return False def update_all(self): self.will_list.update_will(self.willitems)