After several failures, I haven't been able to find a way to get this to work as planned:
Code:
#!/usr/bin/wish
# Set the fortune window into place
proc centerWindow {w} {
set width 500
set height 500
set x [expr { ( [winfo vrootwidth $w] - $width ) / 2 }]
set y [expr { ( [winfo vrootheight $w] - $height ) / 2 }]
wm geometry $w ${width}x${height}+${x}+${y}
}
proc writeToFile {data} {
set dataFile "fortune.txt"
if {[file exists $dataFile] == 1} { file delete $dataFile }
set fileId [open $dataFile "w"]
puts -nonewline $fileId $data
close $fileId
}
proc newFortune {n} {
# Set data
set fortune [exec fortune]
set date [exec date +%H:%m:%S]
# Display/reset fortunes
if {$n == 1} {destroy .mainFrame.textFrame.fort}
set fort [text .mainFrame.textFrame.fort -yscrollcommand {.mainFrame.textFrame.scroll set} -setgrid true -borderwidth 2 -wrap word -relief flat -highlightbackground black -highlightcolor black -exportselection true]
pack .mainFrame.textFrame.fort -side left -fill both -expand true
.mainFrame.textFrame.fort insert end $fortune
# .mainFrame.textFrame.fort configure -state disabled
# Display/reset time
if {$n == 1} {destroy .mainFrame.timeFrame.time }
label .mainFrame.timeFrame.time -foreground red -text $date
pack .mainFrame.timeFrame.time
return $fortune
}
# Setup Window
wm withdraw .
toplevel .mainFrame
wm title .mainFrame "Fortune"
centerWindow .mainFrame
wm resizable .mainFrame false false
# Create widgets
frame .mainFrame.timeFrame -pady 5 -padx 5
frame .mainFrame.textFrame -pady 5 -padx 0 -height 30 -width 50
scrollbar .mainFrame.textFrame.scroll -command {.mainFrame.textFrame.fort yview}
frame .mainFrame.buttonFrame -pady 5 -padx 5
button .mainFrame.buttonFrame.close -command "destroy ." -text "Close"
button .mainFrame.buttonFrame.next -text "Next" -command "set fortuneData [newFortune 1]"
# Finalize display
pack .mainFrame.timeFrame
pack .mainFrame.textFrame
set fortuneData [newFortune 0]
#-----
button .mainFrame.buttonFrame.save -text "Save" -command "writeToFile $fortuneData"
#-----
pack .mainFrame.textFrame.scroll -side right -fill y
pack .mainFrame.textFrame.fort -side left -fill both -expand true
pack .mainFrame.buttonFrame
pack .mainFrame.buttonFrame.next -side left
pack .mainFrame.buttonFrame.close -side right
pack .mainFrame.buttonFrame.save -side right
The way I'd like it to work is for $fortuneData to be set to what the function "newFortune" returns. The way I've set newFortune is that to kill the previous .mainFrame.textFrame.fort when a 1 is given to it. I can't give it the 1 and set fortuneData at the same time in the command using any way I've tried.
Does someone else have a solution?