From 2c9f6bdd9d4c6494ce1d700b2128dffe9cefd4e2 Mon Sep 17 00:00:00 2001 From: svatantrya Date: Mon, 17 Aug 2026 23:42:01 -0400 Subject: [PATCH] gui: remove 'Add transaction without willexecutor' from plugin settings dialog The checkbox is already available in the Will-Executor tab; showing it in the settings dialog was redundant. Renumber grid rows 5-16 -> 4-15 to close the gap. --- bal/gui/qt/plugin.py | 115 ++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 73 deletions(-) diff --git a/bal/gui/qt/plugin.py b/bal/gui/qt/plugin.py index 2d09499..d66f59e 100644 --- a/bal/gui/qt/plugin.py +++ b/bal/gui/qt/plugin.py @@ -491,14 +491,6 @@ class Plugin(BalPlugin, EventListener): self.MAX_WILLEXECUTOR_FEE, minimum=0, maximum=10000000 ) - # "No will-executor TX" checkbox. Bound to the persisted NO_WILLEXECUTOR - # config (default ON, see plugin_base.py), the SAME config used by the - # checkbox inside the "Build your will" wizard's will-executor download - # window, so the two stay in sync automatically. When enabled the plugin - # also builds a will that does not require a will-executor (e.g. it can - # be saved on a USB stick and a copy given to the heirs). - heir_no_willexecutor = BalCheckBox(self.NO_WILLEXECUTOR) - # "Rebuild will on wallet close" checkbox. Bound to the persisted # REBUILD_ON_CLOSE config (default ON). When ticked, closing the wallet # / quitting Electrum runs the "Build your will" wizard to rebuild and @@ -704,35 +696,13 @@ class Plugin(BalPlugin, EventListener): ), ) grid.addWidget(_make_reset_btn(self.EDITABLE_DATES, heir_editable_dates, "check"), 3, 3) - # "Add transaction without will-executor" setting (formerly labelled - # "No will-executor TX"). When ON the plugin ALSO builds the backup - # inheritance transaction that does NOT require a will-executor (the - # "celeste"/light-blue one shown in the will list): it can be saved on a - # USB stick and a copy handed to the heirs. When OFF only the - # transactions destined to the selected will-executors are built. - # - # Placed here (row 5, right below "Panel editable Date and Fee" and above - # "Number of reminders") at the user's request so related options sit - # together. The remaining grid rows below were renumbered accordingly. - add_widget( - grid, - "Add transaction without willexecutor", - heir_no_willexecutor, - 4, - ( - "Create a will that does not require a Will-executor; it can be " - "saved, for example, on a USB stick, and a copy can be given to " - "the heirs." - ), - ) - grid.addWidget(_make_reset_btn(self.NO_WILLEXECUTOR, heir_no_willexecutor, "check"), 4, 3) # Max willexecutor fee: maximum fee (in satoshi) allowed for a single # will-executor. Visible to all users (BASIC and ADVANCED). add_widget( grid, "Max Will-Executor Fee (satoshi)", heir_max_willexecutor_fee, - 5, + 4, ( "Maximum fee (in satoshi) allowed to be paid to a single " "will-executor. If a will-executor charges more than this, " @@ -740,14 +710,14 @@ class Plugin(BalPlugin, EventListener): "Default: 500,000 satoshi (0.005 BTC)." ), ) - grid.addWidget(_make_reset_btn(self.MAX_WILLEXECUTOR_FEE, heir_max_willexecutor_fee, "spin"), 5, 3) + grid.addWidget(_make_reset_btn(self.MAX_WILLEXECUTOR_FEE, heir_max_willexecutor_fee, "spin"), 4, 3) # User Type selector placed BEFORE the advanced-only settings so the # user chooses basic/advanced first, then sees the relevant options. add_widget( grid, "User Type", user_type_combo, - 6, + 5, ( "Choose how much detail the plugin shows.\n\n" "BASIC: simplified interface, safe configuration for most " @@ -758,7 +728,7 @@ class Plugin(BalPlugin, EventListener): "editable." ), ) - grid.addWidget(_make_reset_btn(self.USER_TYPE, user_type_combo, "user_type"), 6, 3) + grid.addWidget(_make_reset_btn(self.USER_TYPE, user_type_combo, "user_type"), 5, 3) # Number of reminders, event summary and event description are visible # only in ADVANCED mode. In BASIC mode the factory defaults are always # used and these settings are hidden. @@ -767,11 +737,11 @@ class Plugin(BalPlugin, EventListener): "How many reminder alarms the exported calendar (.ics) event " "contains. Range: 1 to 5 (default 3). Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_num_reminders), 7, 0) - grid.addWidget(_hide_if_basic(heir_num_reminders), 7, 1) - grid.addWidget(_hide_if_basic(help_num_reminders), 7, 2) + grid.addWidget(_hide_if_basic(lbl_num_reminders), 6, 0) + grid.addWidget(_hide_if_basic(heir_num_reminders), 6, 1) + grid.addWidget(_hide_if_basic(help_num_reminders), 6, 2) reset_btn_6 = _make_reset_btn(self.NUM_REMINDERS, heir_num_reminders, "spin") - grid.addWidget(_hide_if_basic(reset_btn_6), 7, 3) + grid.addWidget(_hide_if_basic(reset_btn_6), 6, 3) lbl_event_summary = QLabel(_("Event summary")) help_event_summary = HelpButton( @@ -781,11 +751,11 @@ class Plugin(BalPlugin, EventListener): " $heirs_complete: list of heirs name,address,amount\n" "Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_event_summary), 8, 0) - grid.addWidget(_hide_if_basic(edit_event_summary), 8, 1) - grid.addWidget(_hide_if_basic(help_event_summary), 8, 2) + grid.addWidget(_hide_if_basic(lbl_event_summary), 7, 0) + grid.addWidget(_hide_if_basic(edit_event_summary), 7, 1) + grid.addWidget(_hide_if_basic(help_event_summary), 7, 2) reset_btn_7 = _make_reset_btn(self.EVENT_SUMMARY, edit_event_summary, "line") - grid.addWidget(_hide_if_basic(reset_btn_7), 8, 3) + grid.addWidget(_hide_if_basic(reset_btn_7), 7, 3) lbl_event_description = QLabel(_("Event description")) help_event_description = HelpButton( @@ -795,11 +765,11 @@ class Plugin(BalPlugin, EventListener): " $heirs_complete: list of heirs name,address,amount\n" "Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_event_description), 9, 0) - grid.addWidget(_hide_if_basic(edit_event_description), 9, 1) - grid.addWidget(_hide_if_basic(help_event_description), 9, 2) + grid.addWidget(_hide_if_basic(lbl_event_description), 8, 0) + grid.addWidget(_hide_if_basic(edit_event_description), 8, 1) + grid.addWidget(_hide_if_basic(help_event_description), 8, 2) reset_btn_8 = _make_reset_btn(self.EVENT_DESCRIPTION, edit_event_description, "text") - grid.addWidget(_hide_if_basic(reset_btn_8), 9, 3) + grid.addWidget(_hide_if_basic(reset_btn_8), 8, 3) # Welist server URL: shown only in ADVANCED mode. In BASIC mode the # factory default is always used and the setting is hidden. lbl_welist_server = QLabel(_("Welist Server URL")) @@ -807,11 +777,11 @@ class Plugin(BalPlugin, EventListener): "URL of the server that provides the will-executor list. " "Only available in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_welist_server), 10, 0) - grid.addWidget(_hide_if_basic(edit_welist_server), 10, 1) - grid.addWidget(_hide_if_basic(help_welist_server), 10, 2) + grid.addWidget(_hide_if_basic(lbl_welist_server), 9, 0) + grid.addWidget(_hide_if_basic(edit_welist_server), 9, 1) + grid.addWidget(_hide_if_basic(help_welist_server), 9, 2) reset_btn_9 = _make_reset_btn(self.WELIST_SERVER, edit_welist_server, "line") - grid.addWidget(_hide_if_basic(reset_btn_9), 10, 3) + grid.addWidget(_hide_if_basic(reset_btn_9), 9, 3) lbl_calendar_app = QLabel(_("Calendar app command")) help_calendar_app = HelpButton( @@ -819,11 +789,11 @@ class Plugin(BalPlugin, EventListener): "Leave empty to use the system default (xdg-open/open/start).\n" "Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_calendar_app), 11, 0) - grid.addWidget(_hide_if_basic(edit_calendar_app), 11, 1) - grid.addWidget(_hide_if_basic(help_calendar_app), 11, 2) + grid.addWidget(_hide_if_basic(lbl_calendar_app), 10, 0) + grid.addWidget(_hide_if_basic(edit_calendar_app), 10, 1) + grid.addWidget(_hide_if_basic(help_calendar_app), 10, 2) reset_btn_10 = _make_reset_btn(self.CALENDAR_APP, edit_calendar_app, "line") - grid.addWidget(_hide_if_basic(reset_btn_10), 11, 3) + grid.addWidget(_hide_if_basic(reset_btn_10), 10, 3) # Save-in-history toggle and history label: advanced-only rows. The # label field is disabled while the checkbox is off (see @@ -836,11 +806,11 @@ class Plugin(BalPlugin, EventListener): " {willexecutor}: replaced with the will-executor URL of the item\n" "Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_save_history), 12, 0) - grid.addWidget(_hide_if_basic(heir_save_history), 12, 1) - grid.addWidget(_hide_if_basic(help_save_history), 12, 2) + grid.addWidget(_hide_if_basic(lbl_save_history), 11, 0) + grid.addWidget(_hide_if_basic(heir_save_history), 11, 1) + grid.addWidget(_hide_if_basic(help_save_history), 11, 2) reset_btn_11 = _make_reset_btn(self.SAVE_HISTORY, heir_save_history, "check") - grid.addWidget(_hide_if_basic(reset_btn_11), 12, 3) + grid.addWidget(_hide_if_basic(reset_btn_11), 11, 3) lbl_history_label = QLabel(_("History label")) help_history_label = HelpButton( @@ -850,11 +820,11 @@ class Plugin(BalPlugin, EventListener): " {willexecutor}: replaced with the will-executor URL of the item\n" "Only used in ADVANCED mode." ) - grid.addWidget(_hide_if_basic(lbl_history_label), 13, 0) - grid.addWidget(_hide_if_basic(edit_history_label), 13, 1) - grid.addWidget(_hide_if_basic(help_history_label), 13, 2) + grid.addWidget(_hide_if_basic(lbl_history_label), 12, 0) + grid.addWidget(_hide_if_basic(edit_history_label), 12, 1) + grid.addWidget(_hide_if_basic(help_history_label), 12, 2) reset_btn_12 = _make_reset_btn(self.HISTORY_LABEL, edit_history_label, "line") - grid.addWidget(_hide_if_basic(reset_btn_12), 13, 3) + grid.addWidget(_hide_if_basic(reset_btn_12), 12, 3) # NOTE: the ADVANCED-only widgets above have ALREADY been given their # correct initial visibility inline (via _hide_if_basic) BEFORE being @@ -863,12 +833,12 @@ class Plugin(BalPlugin, EventListener): # the Windows relayout flicker. Do NOT reintroduce a post-hoc # setVisible() loop here. - grid.addWidget(heir_repush, 14, 0) + grid.addWidget(heir_repush, 13, 0) grid.addWidget( HelpButton( "Broadcast all transactions to willexecutors including those already pushed" ), - 14, + 13, 2, ) @@ -882,13 +852,13 @@ class Plugin(BalPlugin, EventListener): "When disabled, the will is only rebuilt when you press Check or " "Prepare. The last built state is still saved to the wallet." ) - grid.addWidget(lbl_rebuild_on_close, 15, 0) - grid.addWidget(heir_rebuild_on_close, 15, 1) - grid.addWidget(help_rebuild_on_close, 15, 2) + grid.addWidget(lbl_rebuild_on_close, 14, 0) + grid.addWidget(heir_rebuild_on_close, 14, 1) + grid.addWidget(help_rebuild_on_close, 14, 2) reset_btn_rebuild_on_close = _make_reset_btn( self.REBUILD_ON_CLOSE, heir_rebuild_on_close, "check" ) - grid.addWidget(reset_btn_rebuild_on_close, 15, 3) + grid.addWidget(reset_btn_rebuild_on_close, 14, 3) # "Rebuild automatically on new transactions" row (always visible, # BASIC + ADVANCED), right below the "Rebuild will on wallet close" @@ -906,13 +876,13 @@ class Plugin(BalPlugin, EventListener): "When disabled (default), the will is only rebuilt on Check / " "Prepare / wallet close." ) - grid.addWidget(lbl_auto_rebuild, 16, 0) - grid.addWidget(heir_auto_rebuild, 16, 1) - grid.addWidget(help_auto_rebuild, 16, 2) + grid.addWidget(lbl_auto_rebuild, 15, 0) + grid.addWidget(heir_auto_rebuild, 15, 1) + grid.addWidget(help_auto_rebuild, 15, 2) reset_btn_auto_rebuild = _make_reset_btn( self.AUTO_REBUILD, heir_auto_rebuild, "check" ) - grid.addWidget(reset_btn_auto_rebuild, 16, 3) + grid.addWidget(reset_btn_auto_rebuild, 15, 3) # ----------------------------------------------------------------- # # Group C / C4b: "Reset" button that restores the dialog settings to # @@ -938,7 +908,6 @@ class Plugin(BalPlugin, EventListener): (self.AUTO_SIGN, heir_auto_sign, "check"), (self.EDITABLE_DATES, heir_editable_dates, "check"), (self.NUM_REMINDERS, heir_num_reminders, "spin"), - (self.NO_WILLEXECUTOR, heir_no_willexecutor, "check"), (self.MAX_WILLEXECUTOR_FEE, heir_max_willexecutor_fee, "spin"), (self.EVENT_SUMMARY, edit_event_summary, "line"), (self.EVENT_DESCRIPTION, edit_event_description, "text"),