Re: Front End Programming question
- To: mathgroup at smc.vnet.net
- Subject: [mg54908] Re: Front End Programming question
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Sun, 6 Mar 2005 00:55:58 -0500 (EST)
- References: <d09dm6$d7k$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
János wrote: > 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) > Hello, I found GUIKit to be very comprehensive, but extremely hard to use! As a result I wrote a package (called the Super Widget Package) which is freely available at my site. This package uses GUIKit, but lets you build a typical GUI in an almost trivial way, and everything works in a 'traditional' Mathematica way - for example, you specify colours with RGBColor notation, not as Widget["class:java.awt.Color", InitialArguments -> {255,0,0}] From what you describe, it sounds ideal for what you want to do. Feel free to email me about it. David Bailey dbaileyconsultancy.co.uk