feat: move User Type above advanced-only settings, improve dialog sizing

- Move User Type combo to row 5 (before Number of reminders)
- Use QLayout.SizeConstraint.SetFixedSize so dialog auto-resizes on mode switch
- Hide event summary, description and reminders count in basic mode, use defaults
- Increase Event Description height to 3 lines
- Set minimum width on line edits for proper dialog sizing in advanced mode
This commit is contained in:
2026-06-29 01:07:22 -04:00
parent ff00097af4
commit 41803139c6
2 changed files with 67 additions and 73 deletions

View File

@@ -22,6 +22,7 @@ from .common import read_QIcon_from_bytes
from .widgets import BalCheckBox, BalLineEdit, BalSpinBox, BalTextEdit from .widgets import BalCheckBox, BalLineEdit, BalSpinBox, BalTextEdit
from .window import BalWindow from .window import BalWindow
from .dialogs import BalDialog from .dialogs import BalDialog
from PyQt6.QtWidgets import QLayout
def _window_key(window): def _window_key(window):
@@ -462,9 +463,12 @@ class Plugin(BalPlugin):
self.update_all() self.update_all()
return return
self.USER_TYPE.set("advanced" if idx == 1 else "basic") self.USER_TYPE.set("advanced" if idx == 1 else "basic")
# Show/hide the welist server row (advanced-only). # Show/hide the advanced-only rows.
basic = idx != 1 basic = idx != 1
for w in (lbl_welist_server, edit_welist_server, help_welist_server): for w in (lbl_welist_server, edit_welist_server, help_welist_server,
lbl_num_reminders, heir_num_reminders, help_num_reminders,
lbl_event_summary, edit_event_summary, help_event_summary,
lbl_event_description, edit_event_description, help_event_description):
w.setVisible(not basic) w.setVisible(not basic)
self.update_all() self.update_all()
@@ -477,8 +481,13 @@ class Plugin(BalPlugin):
# the calendar button now only SAVES the .ics file instead of opening it # the calendar button now only SAVES the .ics file instead of opening it
# with an external app, so the setting is no longer needed in the dialog. # with an external app, so the setting is no longer needed in the dialog.
edit_event_summary = BalLineEdit(self.EVENT_SUMMARY) edit_event_summary = BalLineEdit(self.EVENT_SUMMARY)
edit_event_summary.setMinimumWidth(360)
edit_event_description = BalTextEdit(self.EVENT_DESCRIPTION) edit_event_description = BalTextEdit(self.EVENT_DESCRIPTION)
edit_event_description.setMinimumHeight(
edit_event_description.fontMetrics().lineSpacing() * 3 + 10
)
edit_welist_server = BalLineEdit(self.WELIST_SERVER) edit_welist_server = BalLineEdit(self.WELIST_SERVER)
edit_welist_server.setMinimumWidth(360)
heir_repush = QPushButton("Rebroadcast transactions") heir_repush = QPushButton("Rebroadcast transactions")
heir_repush.clicked.connect(partial(self.broadcast_transactions, True)) heir_repush.clicked.connect(partial(self.broadcast_transactions, True))
@@ -501,10 +510,9 @@ class Plugin(BalPlugin):
# Reset/support button row (bottom). Assigning ``QGridLayout(d)`` would # Reset/support button row (bottom). Assigning ``QGridLayout(d)`` would
# have made the grid the dialog's only layout, leaving no room for them. # have made the grid the dialog's only layout, leaving no room for them.
grid = QGridLayout() grid = QGridLayout()
# NOTE: the "User Type" row used to be the first row (row 0). It was moved grid.setColumnStretch(1, 1)
# to the BOTTOM of the grid (just above "Rebroadcast transactions") at the # NOTE: the "User Type" row is placed at row 5, right before the
# owner's request; see the add_widget call further below. The remaining # advanced-only settings, so the user picks basic/advanced first.
# rows were renumbered up by one accordingly.
add_widget( add_widget(
grid, grid,
"Hide Replaced", "Hide Replaced",
@@ -564,74 +572,13 @@ class Plugin(BalPlugin):
"the heirs." "the heirs."
), ),
) )
add_widget( # User Type selector placed BEFORE the advanced-only settings so the
grid, # user chooses basic/advanced first, then sees the relevant options.
"Number of reminders",
heir_num_reminders,
5,
(
"How many reminder alarms the exported calendar (.ics) event "
"contains.\n\n"
"BASIC MODE:\n"
"Calendar reminder 30, 10 and 1 days before.\n\n\n"
"ADVANCED MODE:\n"
"The reminders are spread across the check-alive period and "
"always fall before the delivery deadline.\n"
"If the period is shorter than the requested number, at most "
"one reminder per day is used. Range: 1 to 5 (default 3)."
),
)
add_widget(
grid,
"Event summary",
edit_event_summary,
6,
(
"Default message to be used in event summary\n"
"Variables:\n"
" $wallet_name: name of wallet\n"
" $heirs_complete: list of heirs name,address,amount\n"
#" $will_details_complete: will details(id transaction, mining fees, willexecutor, willexecutor fees, locktime)\n"
)
)
add_widget(
grid,
"Event description",
edit_event_description,
7,
(
"Default message to be used in event description\n"
"Variables:\n"
" $wallet_name: name of wallet\n"
" $heirs_complete: list of heirs name,address,amount\n"
#" $will_details_complete: will details(id transaction, mining fees, willexecutor, willexecutor fees, locktime)\n"
)
)
#add_widget(grid, "Bal Mode", bal_mode, 4, "choose bal mode")
# 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,"Enable Multiverse(EXPERIMENTAL/BROKEN)",heir_enable_multiverse,6,"enable multiple locktimes, will import.... ")
# "User Type" placed here (row 8), at the BOTTOM of the settings just
# above "Rebroadcast transactions" (owner request). It used to be the very
# first row; the other rows were renumbered up by one when it was moved.
add_widget( add_widget(
grid, grid,
"User Type", "User Type",
user_type_combo, user_type_combo,
8, 5,
( (
"Choose how much detail the plugin shows.\n\n" "Choose how much detail the plugin shows.\n\n"
"BASIC: simplified interface, safe configuration for most " "BASIC: simplified interface, safe configuration for most "
@@ -642,6 +589,41 @@ class Plugin(BalPlugin):
"editable." "editable."
), ),
) )
# 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.
lbl_num_reminders = QLabel(_("Number of reminders"))
help_num_reminders = HelpButton(
"How many reminder alarms the exported calendar (.ics) event "
"contains. Range: 1 to 5 (default 3). Only used in ADVANCED mode."
)
grid.addWidget(lbl_num_reminders, 6, 0)
grid.addWidget(heir_num_reminders, 6, 1)
grid.addWidget(help_num_reminders, 6, 2)
lbl_event_summary = QLabel(_("Event summary"))
help_event_summary = HelpButton(
"Default message to be used in event summary\n"
"Variables:\n"
" $wallet_name: name of wallet\n"
" $heirs_complete: list of heirs name,address,amount\n"
"Only used in ADVANCED mode."
)
grid.addWidget(lbl_event_summary, 7, 0)
grid.addWidget(edit_event_summary, 7, 1)
grid.addWidget(help_event_summary, 7, 2)
lbl_event_description = QLabel(_("Event description"))
help_event_description = HelpButton(
"Default message to be used in event description\n"
"Variables:\n"
" $wallet_name: name of wallet\n"
" $heirs_complete: list of heirs name,address,amount\n"
"Only used in ADVANCED mode."
)
grid.addWidget(lbl_event_description, 8, 0)
grid.addWidget(edit_event_description, 8, 1)
grid.addWidget(help_event_description, 8, 2)
# Welist server URL: shown only in ADVANCED mode. In BASIC mode the # Welist server URL: shown only in ADVANCED mode. In BASIC mode the
# factory default is always used and the setting is hidden. # factory default is always used and the setting is hidden.
lbl_welist_server = QLabel(_("Welist Server URL")) lbl_welist_server = QLabel(_("Welist Server URL"))
@@ -654,7 +636,10 @@ class Plugin(BalPlugin):
grid.addWidget(help_welist_server, 9, 2) grid.addWidget(help_welist_server, 9, 2)
# Initial visibility: hidden in basic, visible in advanced. # Initial visibility: hidden in basic, visible in advanced.
basic_init = str(self.USER_TYPE.get()).lower() != "advanced" basic_init = str(self.USER_TYPE.get()).lower() != "advanced"
for w in (lbl_welist_server, edit_welist_server, help_welist_server): for w in (lbl_welist_server, edit_welist_server, help_welist_server,
lbl_num_reminders, heir_num_reminders, help_num_reminders,
lbl_event_summary, edit_event_summary, help_event_summary,
lbl_event_description, edit_event_description, help_event_description):
w.setVisible(not basic_init) w.setVisible(not basic_init)
grid.addWidget(heir_repush, 10, 0) grid.addWidget(heir_repush, 10, 0)
@@ -744,6 +729,7 @@ class Plugin(BalPlugin):
# Outer layout: warning (top) -> settings grid -> bottom button row. # Outer layout: warning (top) -> settings grid -> bottom button row.
outer = QVBoxLayout(d) outer = QVBoxLayout(d)
outer.setSizeConstraint(QLayout.SizeConstraint.SetFixedSize)
outer.addWidget(lbl_warning) outer.addWidget(lbl_warning)
# Blank vertical gap below the red warning so it is not glued to the # Blank vertical gap below the red warning so it is not glued to the
# first setting row ("User Type"); requested by the user for readability. # first setting row ("User Type"); requested by the user for readability.

View File

@@ -1044,13 +1044,21 @@ class WillSettingsWidget(QWidget):
f" {heir} - {self.bal_window.heirs[heir][0]}, {self.bal_window.heirs[heir][1]}" f" {heir} - {self.bal_window.heirs[heir][0]}, {self.bal_window.heirs[heir][1]}"
for heir in self.bal_window.heirs for heir in self.bal_window.heirs
) )
# BASIC mode: use factory defaults (the hidden settings are ignored).
# ADVANCED mode: use the user-configured values.
if self.bal_window.bal_plugin.is_basic_mode():
raw_description = self.bal_window.bal_plugin.EVENT_DESCRIPTION.default
raw_summary = self.bal_window.bal_plugin.EVENT_SUMMARY.default
else:
raw_description = self.bal_window.bal_plugin.EVENT_DESCRIPTION.get()
raw_summary = self.bal_window.bal_plugin.EVENT_SUMMARY.get()
event_description = BalCalendar.ical_escape( event_description = BalCalendar.ical_escape(
f"{self.bal_window.bal_plugin.EVENT_DESCRIPTION.get()}" f"{raw_description}"
.replace("$wallet_name", str(self.bal_window.wallet)) .replace("$wallet_name", str(self.bal_window.wallet))
.replace("$heirs_complete", heirs_details) .replace("$heirs_complete", heirs_details)
) )
summary_base = ( summary_base = (
f"{self.bal_window.bal_plugin.EVENT_SUMMARY.get()}" f"{raw_summary}"
.replace("$wallet_name", str(self.bal_window.wallet)) .replace("$wallet_name", str(self.bal_window.wallet))
) )