Re: Generic Button/Palette design pattern?
- To: mathgroup at smc.vnet.net
- Subject: [mg114957] Re: Generic Button/Palette design pattern?
- From: John Fultz <jfultz at wolfram.com>
- Date: Fri, 24 Dec 2010 04:11:44 -0500 (EST)
- Reply-to: jfultz at wolfram.com
Hold would be more proper than HoldForm here (although both certainly work). HoldForm is generally about holding for display purposes, though, where Hold provides better feedback when you're just doing expression manipulation behind the scenes (by feedback, I mean that it's going to more easily show up in debugging outputs). As for CreatePalette, there is no bug. You're trying to do something which is illegal, and for good reason. NotebookWrite[EvaluationNotebook[],...] That's writing into the *palette*. But palettes are not editable by default. You probably want to be writing to InputNotebook[], which is the notebook where palettes typically paste their output. Sincerely, John Fultz jfultz at wolfram.com User Interface Group Wolfram Research, Inc. On Thu, 23 Dec 2010 03:56:02 -0500 (EST), Jason Ledbetter wrote: > > I've now got this basically working. I was missing a ReleaseHold in the > Button form. That said, "CreatePalette" seems to have a bug (at least per > my > expectations). > > --snip-- > > o = { > { "button1", > HoldForm[NotebookWrite[EvaluationNotebook[], Cell["button1 pressed"]]] > }, > {"button2", > HoldForm[NotebookWrite[EvaluationNotebook[], Cell["button2 pressed"]]]} > }; > Button[#[[1]], ReleaseHold[#[[2]]]] & /@ o > CreatePalette[%] > > --snip-- > > > The two buttons that appear in the notebook act as I expect. The two > buttons > that appear in the palette only "beep" when I clicked. > > > I'm not sure how to troubleshoot what's going on under this. > > > -jbl > > > On Wed, Dec 22, 2010 at 4:58 PM, Jason Ledbetter > <jasonbrent at gmail.com>wrote: > >> Folk, >> >> I'm trying to write a generic palette that accepts as input a nested >> list >> with button names/actions. >> >> Apparently my weak comprehension of M is winning once again. >> >> First, I'm defining options as pair-wise values in a nested list: >> >> o = { >> { "button1", >> HoldForm[NotebookWrite[EvaluationNotebook[], Cell["button1 pressed"]]] >> }, >> {"button2", >> HoldForm[NotebookWrite[EvaluationNotebook[], Cell["button2 pressed"]]]} >> } >> >> >> I would expect that one can then do the following: >> >> >> Button[#[[1]],#[[2]]]&/@o >> >> >> This generates two buttons but the action for those buttons isn't what >> I'd >> expect. If I convert that output to "InputForm", the #[[2]] argument is >> apparently "{"button1", >> >> HoldForm[NotebookWrite[EvaluationNotebook[], Cell["button1 >> pressed"]]]}[[2]]" >> >> >> I can't fathom why. >> >> >> If I run: >> >> >> Print@#[[2]]&/@o >> >> >> I receive just the output I expect. e.g., >> "NotebookWrite[EvaluationNotebook[], Cell[button1 pressed]]", etc. >> >> >> The ultimate goal is to do something like: >> >> >> CreatePalette[Button[Style[#[[1]], 12, FontFamily->"Times"], #[[2]], >> Appearance->"Palette", ImageSize->120]& /@ o, Saveable->False, Spacings- >> >0] >> >> >> This allowing me to readily open a palette by just customizing what >> exists >> in the 'o' list. >> >> >> If anyone can point out what I'm missing that should apparently be >> obvious >> here, I'd appreciate it (And I'm almost positive my HoldForm[] usage is >> not >> correct yet). >> >> >> Thanks, >> >> >> -jbl