source: trunk/gui/apps/driver @ 676

Last change on this file since 676 was 676, checked in by mmc, 18 years ago

Fixed all fonts to set pixelsize instead of pointsize, so that fonts in
the latest X distribution look right.

Added initial Rappture::bugreport::submit command for submitting bug
reports to nanoHUB.org. This isn't tied in yet, but it's a start.

File size: 6.9 KB
Line 
1#!/bin/sh
2# ----------------------------------------------------------------------
3#  USER INTERFACE DRIVER
4#
5#  This driver program loads a tool description from a tool.xml file,
6#  and produces a user interface automatically to drive an application.
7#  The user can set up input, click and button to launch a tool, and
8#  browse through output.
9#
10#  RUN AS FOLLOWS:
11#    driver ?-tool <toolfile>?
12#
13#  If the <toolfile> is not specified, it defaults to "tool.xml" in
14#  the current working directory.
15#
16# ======================================================================
17#  AUTHOR:  Michael McLennan, Purdue University
18#  Copyright (c) 2004-2005  Purdue Research Foundation
19#
20#  See the file "license.terms" for information on usage and
21#  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
22# ======================================================================
23#\
24exec wish "$0" $*
25# ----------------------------------------------------------------------
26# wish executes everything from here on...
27
28package require Itcl
29package require Rappture
30package require RapptureGUI
31
32option add *MainWin.mode desktop startupFile
33option add *MainWin.borderWidth 0 startupFile
34option add *MainWin.anchor fill startupFile
35
36# "web site" look
37option add *MainWin.bgScript {
38    rectangle 0 0 200 <h> -outline "" -fill #5880BB
39    rectangle 200 0 300 <h> -outline "" -fill #425F8B
40    rectangle 300 0 <w> <h> -outline "" -fill #324565
41} startupFile
42
43# "clean" look
44option add *MainWin.bgScript "" startupFile
45option add *MainWin.bgColor white startupFile
46option add *Tooltip.background white
47option add *Editor.background white
48option add *Gauge.textBackground white
49option add *TemperatureGauge.textBackground white
50option add *Switch.textBackground white
51option add *Progress.barColor #ffffcc
52option add *Balloon.titleBackground #6666cc
53option add *Balloon.titleForeground white
54option add *Balloon*Label.font -*-helvetica-medium-r-normal-*-12-*
55option add *Balloon*Radiobutton.font -*-helvetica-medium-r-normal-*-12-*
56option add *Balloon*Checkbutton.font -*-helvetica-medium-r-normal-*-12-*
57option add *ResultSet.controlbarBackground #6666cc
58option add *ResultSet.controlbarForeground white
59option add *ResultSet.activeControlBackground #ccccff
60option add *ResultSet.activeControlForeground black
61option add *Radiodial.length 3i
62option add *BugReport*banner*foreground white
63option add *BugReport*banner*background #a9a9a9
64option add *BugReport*banner*highlightBackground #a9a9a9
65option add *BugReport*banner*font -*-helvetica-bold-r-normal-*-18-*
66
67switch $tcl_platform(platform) {
68    unix - windows {
69        event add <<PopupMenu>> <ButtonPress-3>
70    }
71    macintosh {
72        event add <<PopupMenu>> <Control-ButtonPress-1>
73    }
74}
75
76# install a better bug handler
77Rappture::bugreport::install
78
79# fix the "grab" command to support a stack of grab windows
80Rappture::grab::init
81
82#
83# Process command line args to get the names of files to load...
84#
85Rappture::getopts argv params {
86    value -tool tool.xml
87}
88
89# open the XML file containing the tool parameters
90if {![file exists $params(-tool)]} {
91    puts stderr "can't find tool \"$params(-tool)\""
92    exit 1
93}
94set xmlobj [Rappture::library $params(-tool)]
95
96set installdir [file dirname $params(-tool)]
97if {"." == $installdir} {
98    set installdir [pwd]
99}
100
101set tool [Rappture::Tool ::#auto $xmlobj $installdir]
102
103# ----------------------------------------------------------------------
104# LOAD RESOURCE SETTINGS
105#
106# Try to load the $SESSIONDIR/resources file, which contains
107# middleware settings, such as the application name and the
108# filexfer settings.
109# ----------------------------------------------------------------------
110Rappture::resources::load
111
112# ----------------------------------------------------------------------
113# INITIALIZE THE DESKTOP CONNECTION
114#
115# If there's a SESSION ID, then this must be running within the
116# nanoHUB.  Try to initialize the server handling the desktop
117# connection.
118# ----------------------------------------------------------------------
119Rappture::filexfer::init
120
121# ----------------------------------------------------------------------
122# MAIN WINDOW
123# ----------------------------------------------------------------------
124wm withdraw .
125Rappture::MainWin .main -borderwidth 0
126.main configure -title [$tool xml get tool.title]
127wm withdraw .main
128
129# if the FULLSCREEN variable is set, then nanoHUB wants us to go full screen
130if {[info exists env(FULLSCREEN)]} {
131    .main configure -mode web
132}
133
134#
135# The main window has a pager that acts as a notebook for the
136# various parts.  This notebook as at least two pages--an input
137# page and an output (analysis) page.  If there are <phase>'s
138# for input, then there are more pages in the notebook.
139#
140set win [.main component app]
141Rappture::Postern $win.postern
142pack $win.postern -side bottom -fill x
143
144Rappture::Pager $win.pager
145pack $win.pager -expand yes -fill both
146
147set phases [$tool xml children -type phase input]
148if {[llength $phases] > 0} {
149    set plist ""
150    foreach name $phases {
151        lappend plist input.$name
152    }
153    set phases $plist
154} else {
155    set phases input
156}
157
158foreach comp $phases {
159    set title [$tool xml get $comp.about.label]
160    if {$title == ""} {
161        set title "Input #auto"
162    }
163    $win.pager insert end -name $comp -title $title
164
165    #
166    # Build the page of input controls for this phase.
167    #
168    set f [$win.pager page $comp]
169    Rappture::Page $f.cntls $tool $comp
170    pack $f.cntls -expand yes -fill both
171}
172
173# ----------------------------------------------------------------------
174# OUTPUT AREA
175# ----------------------------------------------------------------------
176$win.pager insert end -name analyzer -title "Simulate"
177set f [$win.pager page analyzer]
178$win.pager page analyzer -command [list $f.analyze simulate -ifneeded]
179
180Rappture::Analyzer $f.analyze $tool -simcontrol auto
181pack $f.analyze -expand yes -fill both
182
183$tool notify add analyzer * [list $f.analyze reset]
184
185# ----------------------------------------------------------------------
186# Finalize the arrangement
187# ----------------------------------------------------------------------
188if {[llength [$win.pager page]] == 2} {
189    set style [$xmlobj get tool.layout]
190    set screenw [winfo screenwidth .]
191
192    update idletasks
193    set w0 [winfo reqwidth [$win.pager page @0]]
194    set w1 [winfo reqwidth [$win.pager page @1]]
195
196    # if only two windows and they're small enough, put them up side-by-side
197    if {$w0+$w1 < $screenw && $style != "wizard"} {
198        $win.pager configure -arrangement side-by-side
199        $f.analyze configure -holdwindow [$win.pager page @0]
200
201        set type [$tool xml get tool.control]
202        if {$type == ""} {
203            set type [$tool xml get tool.control.type]
204        }
205
206        if {$type == "auto"} {
207            # in "auto" mode, we don't need a simulate button
208            $f.analyze configure -simcontrol off
209        } else {
210            # not in "auto" mode but side-by-side, we always need the button
211            $f.analyze configure -simcontrol on
212        }
213    }
214}
215wm deiconify .main
Note: See TracBrowser for help on using the repository browser.