Bryce Carson <bovine@cyberscientist.ca> writes:
Further, I can't seem to get these functions to work as documented or
expected.
Without these defined when I'm creating a widget with the following
code, I do get a button but the internal value is displayed in the
clickable
button. I'd like the external value to be displayed in the button %v,
just
as the menu-tag is is "externally facing".
<<widget>>=
(define-widget 'project-widget 'list
:tag (let ((s "\n\tProject"))
(put-text-property 0 (length s) 'face 'bold s) s)
:format "%t\n%v "
:offset 0
:indent 0
:convert-widget 'widget-types-convert-widget
:args '((menu-choice
:tag "EmacSQL-supported backend"
:format "%[%t%]: %[%v%]"
:value "sqlite"
:value-to-external <<menu-choice internal value to external
lambda>>
:value-to-internal <<menu-choice external value to internal
lambda>>
(choice-item :menu-tag "MySQL" :value "mysql")
(choice-item :menu-tag "PostgreSQL" :value "postgresql")
(choice-item :menu-tag "SQLite" :value "sqlite"))))
<<menu-choice internal value to external lambda>>=
(lambda (widget internal-value)
"Converts lowercase, internal values to the casing of trademarks."
(pcase internal-value
("mysql" "MySQL")
("sqlite" "SQLite")
("postgresql" "PostgreSQL")))
<<menu-choice external value to internal lambda>>=
(lambda (widget external-value)
"Converts the casing of trademarked names to lowercase, internal
values."
(pcase external-value
("MySQL" "mysql")
("SQLite" "sqlite")
When possible, please post code that can be evaled without making
tweaks.
Some things I noted:
- Since the super is a list widget, then you don't need to specify
:convert-widget. The :convert-widget function is one of the few that
gets called for all supers, so you end up converting twice the widget.
In this case, it doesn't seem you want that.
- You're specifying a value in the internal format for the menu-choice.
The manual specifies that when creating a widget or defining a new
one, the ‘:value’ should be in the external format.
- I think you should give similar conversion functions to all
choice-item, and also pass the :value in external format.
Let me know if you still find problems after fixing these things.