Front End Programming question
- To: mathgroup at smc.vnet.net
- Subject: [mg54868] Front End Programming question
- From: János <janos.lobb at yale.edu>
- Date: Fri, 4 Mar 2005 05:08:03 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
I am looking at John M. Novak presentation he did at the 1999
Mathematica Developers's Conference, titled Front End Programming.
Based upon his notebook, I ask input questions the following way.
First I define two functions, askForInput and dialogForInput.
askForInput[inputLabel_:
""] := Module[{thenb,
result},
thenb = dialogForInput[
inputLabel];
While[Options[thenb,
Visible] ===
{Visible -> True},
Do[Null, {250}]];
NotebookFind[thenb,
"TheInput", All,
CellTags]; result =
NotebookRead[thenb];
NotebookClose[thenb];
MakeExpression[result[[1,
1]]]]
dialogForInput[
inputLabel_] :=
NotebookPut[Notebook[
{Cell[BoxData[StringJoin[
inputLabel, " "]],
"Input", CellFrame ->
True, Evaluatable ->
False,
ShowCellTags -> True,
CellTags ->
"TheInput",
CellMargins ->
{{10, 10}, {4, 4}},
Deletable -> False],
Cell[BoxData[
ButtonBox["OK",
RuleDelayed[Butto\
nFunction,
SetOptions[Butt\
onNotebook[],
Rule[Visible,
False]]],
Rule[ButtonFrame,
"DialogBox"]]
], "Input",
Editable -> False,
Active -> True,
TextAlignment ->
Center,
CellMargins ->
{{10, 10}, {20,
2}}]},
ShowCellBracket ->
False, WindowFrame ->
"MovableModalDialog",
WindowFloating -> False,
WindowSize -> {300,
150},
WindowFrameElements ->
{}, WindowElements ->
{
"VerticalScrollBar"}]]\
;
Then if I want to ask a question I call askForInput and grab the value
with the Nest:
primerLength = ReleaseHold[
askForInput[
"Length of a Primer:"]];
primerLength = Nest[Last,
primerLength,
Depth[primerLength] - 1];
If I want to ask another question I do the same thing with a different
question into another variable, like:
averagePrimerDistance =
ReleaseHold[askForInput[
"Average Primer \
Distance:"]];
averagePrimerDistance =
Nest[Last,
averagePrimerDistance,
Depth[
averagePrimerDistance] \
- 1];
Works great, - one question at a time. My question is, how can I
present multiple questions into one dialog and sort out the answers
after the values are typed in and the <OK> button is clicked. I tried
a number of different ways, - making inputLabel a List, creating a
table of Cells with different CellTags, getting the results back into
an array, played with GUIKit, etc... - but did not find the right one.
All failed at the NotebookFind[thenb, "TheInput", All, CellTags];
command and its variants. Conceptually the question looks easy, but
the devil is - always - in the implementation :)
Thanks ahead,
János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a
corpse.
(S. Lem: His Master Voice)