I have dedicated lots of time to approach problems like the one you are describing.
This short screencast of the of my main programming project, BEST Viewpoints, may help demonstrate the level of complexity of the GUIs I've created. To get to this point I have gone through several redesign and recode cycles and I have learned several lessons which I will summarize in my recommendations below:
- Try to generate functions like myGrid1[list_, options___] which you then use repeatedly to arrange and format output. At the end you will only have a few lines in your code that contain the function Grid. This will help you standardize the appearance of your work and also will help make your program easier to modify and test.
- If possible define or set your input as a list of rules which can then be used along with Replace or ReplaceAll to generate different output nuggets depending on your particular display needs at any given point.
- Whenever possible think of defining functions (myFunction[parameters___]) instead of variables (myVariable1, myVariable2...) in your program. This is somehow difficult to explain, but often programmers use several (or many) variables to point at information that could be referenced or targeted using a single function. Using functions will also help making your application easier to standardize in appearance and way much easier to debug or maintain.
- Beyond the ItemSize option Consider using Pane to control the size of your output. This will allow you to use the Scrollbars option which is often necessary.
- Consider using Grid instead of Row when you know the size of the output. The use of Row may sometimes wrap output in more than one line when you would rather fix the output to one line.
- Using Item[gridElement, myFormatOptions___] in Grid may help getting the format you want in your output. For example, items in the outermost Grid may be aligned to the left (Alignment->Left) but you may want to align element_K to center. You can get this done by using Item[element_K, Alignment->Center].
- Use the "Queued" option when needed. In practical terms this option to Button and related functions may be used to provide enough evaluation time of the action associated to the button.
- The longer your code is the stronger I would suggest that you consider using the Workbench as your main editor. I usually start coding in Mathematica to sketch ideas but once the code starts to shape I move the whole thing to the Wolfram Workbench.
- If you are planning to use Manipulate make sure you are only thinking of small projects or demonstrations. The more ambitious and larger the application you have in mind the higher the chances that Manipulate will not take you where you want. I have already seen several cases where programmers get stuck pushing Manipulate to its limits.
- Starting to use DynamicModule instead of Module is a big jump. They look the same but are very different animals
. Don't underestimate the difficulty associated to start creating dynamic GUIS. Carefully read the documentation available, practice, and be patient.
As a consultant I'll be glad to help further with training or consulting. Feel free to contact me at ariel.sepulveda@prontoanalytics.com.