MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Clickable options

  • To: mathgroup at smc.vnet.net
  • Subject: [mg99622] Re: Clickable options
  • From: Bob F <deepyogurt at gmail.com>
  • Date: Sat, 9 May 2009 03:23:09 -0400 (EDT)
  • References: <gtnjqr$3e9$1@smc.vnet.net> <gtrl4a$1pp$1@smc.vnet.net>

On May 7, 10:13 pm, Thomas M=FCnch <thomas.mue... at gmail.com> wrote:
> [From former thread:  Introducing the Wolfram Mathematica Tutorial
> Collection]
>
> > Another user interface issue I would like to see -- it would be so
> > nice to have some sort of "auto completion" mode your could turn on or
> > off as you needed -- perhaps a template of the command as you type.
> > Something that would supply the complete command and you simply change
> > it as you go to fit your needs, plus once you have the basic command,
> > there should be some way to modify it by perhaps right-clicking and
> > have all the optional parameters displayed and you pick and choose
> > which are needed. This would be so much more productive than looking
> > up the command in the DC, reading thru pages and pages of options
> > sometimes and finally finding the one that is needed, and then back to
> > the notebook and type in the just found optional parameter.
>
> > -Bob
>
> Dear Bob -
>
> there IS an autocompletion function - simply press Ctrl-K after the
> first couple of characters of your function name.
>
> As for the options of a function: Here is a nifty little routine that
> I have written to do just what you want. Execute the following code,
> which will create a small palette with 2 buttons. Then, highlight a
> function name in your notebook (or simply have your cursor within or
> directly after the function name, for example "Plot"), and press one
> of the buttons. You will get another palette with all the options of
> your function. Clicking one of the options will insert it into your
> notebook (together with a preceding comma), including the default
> value, which will be highlighted so that you can immediately start
> typing to replace it with your value of choice, or keep clicking on as
> many options as you want. Clicking on the question mark next to an
> option will open the appropriate help page in the Documentation
> Center. Clicking on the function name at the top of the palette will
> open the function's help page.
>
> Normally, the button 'Options (tooltips)' will be the preferred
> choice, as you will get informative tooltips in your palette which
> show you the default value of the option (when hovering over the
> option name), and the usage of the option (when hovering over the
> question mark). However, some functions have an enormous amount of
> options. Try, for example, 'CreateWindow'. Then it can take quite some
> time (several seconds) to create the  Options palette. But, the added
> benefit of the tooltips might be worth the wait.
>
> If you call the options for another function while an option palette
> is still open, the currently open palette will be replaced by the new
> one in a way that the top right corner of the new palette window is at
> the same position as the previous one. To implement this, I save the
> option palette notebook object in the global variable
> $optionPaletteCreatedByThisFunction. (This behavior is a feature, as
> people might want to move the palette to a second screen, and want it
> to remember the position when they call the options for another
> function). However, I am not sure that this is the perfect way to
> implement it. If you move a wide palette window (many options, e.g.
> for 'CreateWindow') off to the side, so that its right corner is far
> off-screen, and call a narrow window (with few options, e.g.
> 'Column'), the new window will be invisible. Maybe someone has a
> better idea.
>
> Version restriction: This works only for version 7, as I am using
> scroll bars within 'Pane'. It does sort of work with version 6, but
> not really.
>
> Note: The original idea for this came from Syd Geraghty, who should be
> acknowledged for his work. We worked together to improve the
> functionality of the code.
>
> Here is the code:
>
> makeOptionsButton[tooltips_: True] :=
>  Button[If[tooltips, "Options (tooltips)", "Options (no tooltips)"],
>   Module[{fun, clen, len, buttons, title, columns, opts,
>     maxPanelHight = 800, windowPos, insert,
>     maximumNumberOfColumns = 3, tooltipfunction},
>    tooltipfunction =
>     If[tooltips, # &,
>      First];(*determines whether or not to show tooltips*)
>
>    (*Extract the currently selected funtion*)
>    SelectionMove[InputNotebook[], All, Word];
>    fun = ToExpression@ NotebookRead[InputNotebook[]];
>    SelectionMove[InputNotebook[], After, Word];
>    If[Head[fun] =!= Symbol, Return[]];
>
>    opts = Options[fun]; (*read the options*)
>    len = Length[opts];
>    columns = Max[1, Min[maximumNumberOfColumns, Ceiling[len/30]]];
>    clen = Ceiling[len, columns];(*some numbers for formatting*)
>
>    (*This is the function that inserts the option into the notebook \
> when the button is pressed, and selects the option value*)
>    insert[
>      option_] := (NotebookWrite[InputNotebook[],
>       RowBox[{",", ToBoxes[option[[1]]],
>         StringJoin["\[", ToString@Head@option, "]"]}]];
>      NotebookWrite[InputNotebook[], ToBoxes[option[[2]]], All]);
>
>    If[len > 0,
>     (* If fun has Options: *)
>     buttons =
>      Grid[{{tooltipfunction@
>            Tooltip[
>             ReleaseHold@
>              MakeExpression@
>               ButtonBox["\" ? \"",
>                ButtonData ->
>                 "paclet:ref/" <> ToString[Evaluate[#[[1]]=
]],
>                Appearance -> "Palette", BaseStyle -> "Lin=
k",
>                ButtonFrame -> None], Evaluate[#[[1]]]::us=
age],
>           tooltipfunction@
>            Tooltip[
>             Button[#[[1]], insert[#], Alignment -> Left,
>              Appearance -> "Palette"],
>             Column[{"Default value:", #}]]}}] & /@
>       opts;(*For each option,
>     create a 'help' button and a button for pasting the option*)
>     buttons =
>      Grid[Partition[PadRight[buttons, clen, ""],
>         clen/columns]\[Transpose], Spacings -> {0, 0.05},
>       Alignment -> Left];(*arrange into a Grid*)
>     title =
>      "Options for " <> ToString@fun <> "   (Click option to inser=
t)",
>
>     (* If fun does not have any Options: *)
>     buttons =
>      Style[ToString[fun] <> " does not have any Options", Bold,
> White];
>     title = "Usage of " <> ToString@fun
>     ];
>
>    (*Some code to keep the upper right corner of the new options \
> palette window identical to the currently open one.*)
>    With[{test =
>       AbsoluteOptions[$optionPaletteCreatedByThisFunction,
>        WindowMargins]},
>     windowPos =
>      If[Head[test] === List, test[[1, 2]], {{0, 0}, {0, 0}}];
>     windowPos[[All, 1]] = Automatic];
>
>    (*This closes the previous Options Pallette*)
>    NotebookClose[$optionPaletteCreatedByThisFunction];
>
>    (*This creates a new palette and assigns it to the global variable
> \
> $optionPaletteCreatedByThisFunction*)
>    $optionPaletteCreatedByThisFunction =
>     CreateWindow[
>      PaletteNotebook[
>       Column[{Tooltip[
>          ToExpression@
>           ButtonBox[Style[ToString[fun] <> " =BB", Bold],
>            ButtonData -> "paclet:ref/" <> ToString[fun],
>            BaseStyle -> "Link", ButtonFrame -> None],
>          ToExpression[ToString[fun] <> "::usage"]],
>         Pane[buttons, ImageSize -> {Automatic, {maxPanelHight}},
>          Scrollbars -> Automatic]}], ShowStringCharacters -> Fa=
lse,
>       WindowTitle -> title, Saveable -> False,
>       WindowMargins -> windowPos]];
>    ]]
>
> CreatePalette[Row[makeOptionsButton /@ {True, False}],
>   Saveable -> False, WindowTitle -> "Options for selected function"];

Very interesting. Thanks very much. I like that it gives all the
options for a routine, but it doesn't show all the possible values for
each of the options. Have you seen anything that also has that?

-Bob


  • Prev by Date: Re: Bug with Hypergeometric2F1?
  • Next by Date: Re: Replace specific element with specific value.
  • Previous by thread: Clickable options
  • Next by thread: Errorlistplot and array of graphs