Calendar style
[1/2] from: mario:cassani:icl at: 19-Nov-2001 12:34
Hi all,
during the making of a GUI I needed a calendar style for
my layout so I used Allen's nice calendar.r code.
My code seeks for some daily index putting an oval around
the days when the index is found.
Later the GUI is shown and, when I click on a day it is
highlighted
with a cross and the date is stored. Doing
this the cross is removed from the previuosly clicked day
(if any).
The problem is that all the days with an oval are crossed
by the click!
I'm not a /View GUY ;P so I need some help to understand
if it's wrong the way I use calendar/add-effect or if the
calendar.r script is somehow buggy...
Thank you for any help/suggestion
Mario
Snipplets of my code follow (watch line wraps):
8<----------------------------------------------------------
; *** Open Calendar Style
; ========================
do %calendar.r ; Can be found on Rebolforces Rebsite
; *** The index seeking function (simplified, no cycles to look for the
index)
;
============================================================================
index-seek: func [
todopath-base
index-date
] [
index-year-end: index-date/year
index-month-end: index-date/month
index-day-end: index-date/day
if exists? index-path: join todopath-base ["/" index-year "/"
index-month "/" index-day "/index-todo.txt"] [
append date-data to-date rejoin [index-year "-" index-month "-"
index-day]
append/only date-data [oval]
]
]
; *** MAIN ***
; ************************
; todopath-base and index-date are initialised
; ************************
index-seek todopath-base index-date
; ************************
; In the main layout the following code appears
; ************************
styles calendars
c: calendar with [show-navbar?: true] [
if c/effect? current-index-date 'cross [
c/remove-effect current-index-date 'cross
]
; ************************
; do something changing 'current-index-date
; ************************
c/add-effect current-index-date 'cross
] date current-index-date data date-data
8<----------------------------------------------------------
[2/2] from: allenk::powerup::com::au at: 20-Nov-2001 15:01
Hi Mario,
Let me see if can understand what you are trying to do.
I've worked from the following assumptions.
1. You build a list of acceptable dates marked with ovals, which you are
doing by building a data block like date-data.
2. A user can only select one of the Oval dates? Any other crossed date is
uncrossed
3. To save the state of the calendar, you will just save the contents of
face/data.
OK make the following changes.
Find the line.
f/parent-face/action none none none
and change it too
f/parent-face/action f/parent-face none none
That just updates the code so we can use face inside the action block
instead of having to using a word refering to the calendar (it did use c).
Brings into line with current VID methods.
Then replace the layout and example part of the script with this..
;---Example
;dates and the display effects for those dates
; acceptable effects [cross bold italic underline oval 100.100.100]
; A PIM display could be created using this simple data struture
date-data: reduce [
13-11-2001 [oval cross]
2-11-2001 [oval]
10-11-2001 [oval]
23-12-2001 [oval]
2-12-2001 [oval]
4-12-2001 [oval]
1-12-2001 [oval]
]
main-face: layout [
styles calendars
calendar with [show-navbar?: true] [
if all [face/effect? face/date 'oval not face/effect? face/date
'cross] [
face/add-effect face/date 'cross
foreach [date effects] face/data [
if (date <> face/date) [face/remove-effect date 'cross]
]
]
] data date-data
]
;--------------------------
So how does it work? Basically it adds and removes effects on dates in the
data block based on the rules we have set. If the date clicked has the oval
effect and isn't currently crossed, then we add the cross for the clicked
date and remove the cross from any other date in the calendar's data block.
Hope this helps.
Cheers,
Allen K