2 June 2008
BezoarI wanted to see how far I could take the
A calendar Widget in 20 min here is the result. Hover over today's date for 3 seconds to have the appointment schedule appear. By default the priority prints in the message. I originally had it as the time. A good feature would be to allow the user to change the comparison function for the priority so times could be used. Also
-activeforeground option for the days of the month would also be nice; having that would allow more color schemes.
#!/bin/sh
# the next line restarts using wish ( change this to your setup ) \
exec /opt/usr/bin/tclsh8.5 "$0" ${1+"$@"}
if { [ catch {package require Tk } err ] != 0 } {
puts stderr "Unable to find package Tk ... adjust your auto_path!";
}
# make sure to save the callib code in a file and source it .
source ./callib.tcl
proc setMonthYear { cal } {
global monthYear
set p [ $cal configure -month ]
set y [ $cal configure -year ]
set scanStr [format "%s/1/%s 12:00:00" $p $y ]
set timestamp [ clock scan $scanStr ]
set monthYear [clock format $timestamp -format "%b -%Y" ]
}
proc incrementMonth { cal } {
$cal nextmonth
setMonthYear $cal
}
proc decrementMonth { cal } {
$cal prevmonth
setMonthYear $cal
}
proc incrementYear { cal } {
$cal nextyear
setMonthYear $cal
}
proc decrementYear { cal } {
$cal prevyear
setMonthYear $cal
}
set monthDay [clock format [clock seconds ] -format "%b - %Y" ]
frame .frame -background blue -relief flat
set topframe [ frame .frame.topframe -background blue ]
button .frame.exit -text exit -command { destroy . }
set calendar [ calwid .frame.calendar -font { helvetica 10 bold } \
-dayfont {Arial 10 bold } \
-background blue \
-foreground white \
-activebackground cyan \
-clickedcolor black \
-startsunday 0 \
-delay 3000 \
-daynames {Su Mo Tu Wed Th Fr Sa} \
-month [clock format [clock seconds ] -format "%N" ] \
-year [clock format [clock seconds ] -format "%Y" ] \
-relief groove ]
button $topframe.decyear -text "<<" -command " decrementYear $calendar "
button $topframe.decmonth -text "<" -command " decrementMonth $calendar "
label $topframe.monthyrlbl -textvariable monthYear -background blue -foreground white -font {Helvetica 14 bold } -width 10
button $topframe.incrmonth -text ">" -command " incrementMonth $calendar "
button $topframe.incryear -text ">>" -command " incrementYear $calendar "
pack .frame -side top -expand 1 -fill both
pack $topframe -side top -expand 1 -fill x -pady 3
pack $topframe.decyear -side left -expand 1 -fill none -padx 3 -pady 3
pack $topframe.decmonth -side left -expand 1 -padx 3 -pady 3
pack $topframe.monthyrlbl -side left -expand 1 -padx 3 -pady 3
pack $topframe.incrmonth -side left -expand 1 -padx 3 -pady 3
pack $topframe.incryear -side left -expand 1 -padx 3 -pady 3
pack $calendar -side top -anchor c -expand 1
pack .frame.exit -side bottom -anchor c -fill x -pady 3
setMonthYear $calendar
$calendar configure -mark [eval list [clock format [clock seconds ] -format "%e %N %Y 1 red { 8:00 Get Groceries }" ]]
$calendar configure -mark [eval list [clock format [clock seconds ] -format "%e %N %Y 2 red {12:00 Pick up Dry Cleaning}" ]]
$calendar configure -mark [eval list [clock format [clock seconds ] -format "%e %N %Y 0 red { 7:00 Wake up and water plants.}"]]
$calendar configure -mark [eval list [clock format [clock scan "02/23/2009 12:00:00" ] \
-format "%e %N %Y 0 red { 12:00 Get New Car!}"] ]