Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-advanced-reader.ss" "lang")((modname |37.4|) (read-case-sensitive #t) (teachpacks ((lib "guess-gui.ss" "teachpack" "htdp") (lib "guess.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "guess-gui.ss" "teachpack" "htdp") (lib "guess.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;;Model
5 12687dd9 2023-08-04 jrmu
6 12687dd9 2023-08-04 jrmu ;;State Variables
7 12687dd9 2023-08-04 jrmu
8 12687dd9 2023-08-04 jrmu ;;queue : (listof strings)
9 12687dd9 2023-08-04 jrmu ;;Lists all the tasks which need to be done.
10 12687dd9 2023-08-04 jrmu
11 12687dd9 2023-08-04 jrmu (define queue empty)
12 12687dd9 2023-08-04 jrmu
13 12687dd9 2023-08-04 jrmu ;;queue-index : N
14 12687dd9 2023-08-04 jrmu ;;The current index of the queue.
15 12687dd9 2023-08-04 jrmu
16 12687dd9 2023-08-04 jrmu (define queue-index 0)
17 12687dd9 2023-08-04 jrmu
18 12687dd9 2023-08-04 jrmu ;enter : string -> void
19 12687dd9 2023-08-04 jrmu ;Adds atask to the end of queue.
20 12687dd9 2023-08-04 jrmu
21 12687dd9 2023-08-04 jrmu (define (enter atask)
22 12687dd9 2023-08-04 jrmu (set! queue (append queue
23 12687dd9 2023-08-04 jrmu (list atask))))
24 12687dd9 2023-08-04 jrmu
25 12687dd9 2023-08-04 jrmu ;next : -> string
26 12687dd9 2023-08-04 jrmu ;Returns the next task in the queue based on queue-index. If the end of the queue is reached, return the current task in the queue specified by queue-index. If the queue is empty, return 'NoneLeft.
27 12687dd9 2023-08-04 jrmu
28 12687dd9 2023-08-04 jrmu (define (next)
29 12687dd9 2023-08-04 jrmu (cond
30 12687dd9 2023-08-04 jrmu [(empty? queue) 'NoneLeft]
31 12687dd9 2023-08-04 jrmu [(= (length queue) (add1 queue-index)) (list-ref queue queue-index)]
32 12687dd9 2023-08-04 jrmu [else (begin (set! queue-index (add1 queue-index))
33 12687dd9 2023-08-04 jrmu (list-ref queue queue-index))]))
34 12687dd9 2023-08-04 jrmu
35 12687dd9 2023-08-04 jrmu ;remove : -> void
36 12687dd9 2023-08-04 jrmu ;Removes the first task in the queue. If there are no tasks left to be removed, do nothing.
37 12687dd9 2023-08-04 jrmu
38 12687dd9 2023-08-04 jrmu (define (remove)
39 12687dd9 2023-08-04 jrmu (cond
40 12687dd9 2023-08-04 jrmu [(empty? queue) (void)]
41 12687dd9 2023-08-04 jrmu [else (set! queue (rest queue))]))
42 12687dd9 2023-08-04 jrmu
43 12687dd9 2023-08-04 jrmu ;count : -> N
44 12687dd9 2023-08-04 jrmu ;Counts the number of items in the queue.
45 12687dd9 2023-08-04 jrmu
46 12687dd9 2023-08-04 jrmu (define (count)
47 12687dd9 2023-08-04 jrmu (length queue))
48 12687dd9 2023-08-04 jrmu
49 12687dd9 2023-08-04 jrmu ;;View
50 12687dd9 2023-08-04 jrmu
51 12687dd9 2023-08-04 jrmu ;;GUI-items, text and messages
52 12687dd9 2023-08-04 jrmu (define task-message (make-message "Welcome to the Task Manager"))
53 12687dd9 2023-08-04 jrmu (define task-number-message (make-message "2000"))
54 12687dd9 2023-08-04 jrmu (define input-text (make-text "Task: "))
55 12687dd9 2023-08-04 jrmu
56 12687dd9 2023-08-04 jrmu ;;Controller
57 12687dd9 2023-08-04 jrmu
58 12687dd9 2023-08-04 jrmu (define (enter-callback event)
59 12687dd9 2023-08-04 jrmu (cond
60 12687dd9 2023-08-04 jrmu [(equal? (text-contents input-text) "") true]
61 12687dd9 2023-08-04 jrmu [else (begin (enter (text-contents input-text))
62 12687dd9 2023-08-04 jrmu (draw-queue-number)
63 12687dd9 2023-08-04 jrmu (cond
64 12687dd9 2023-08-04 jrmu [(= (length queue) 1) (draw-first-task)]
65 12687dd9 2023-08-04 jrmu [else true]))]))
66 12687dd9 2023-08-04 jrmu
67 12687dd9 2023-08-04 jrmu ;;draw-queue-number : -> true
68 12687dd9 2023-08-04 jrmu ;;Draws the queue number and returns true.
69 12687dd9 2023-08-04 jrmu (define (draw-queue-number)
70 12687dd9 2023-08-04 jrmu (draw-message task-number-message (number->string (length queue))))
71 12687dd9 2023-08-04 jrmu
72 12687dd9 2023-08-04 jrmu ;draw-first-task : -> true
73 12687dd9 2023-08-04 jrmu ;Draws the first task in the queue and returns true.
74 12687dd9 2023-08-04 jrmu (define (draw-first-task)
75 12687dd9 2023-08-04 jrmu (draw-message task-message (first queue)))
76 12687dd9 2023-08-04 jrmu
77 12687dd9 2023-08-04 jrmu (define (next-callback event)
78 12687dd9 2023-08-04 jrmu (cond
79 12687dd9 2023-08-04 jrmu [(>= (length queue) 2)
80 12687dd9 2023-08-04 jrmu (begin (remove)
81 12687dd9 2023-08-04 jrmu (draw-queue-number)
82 12687dd9 2023-08-04 jrmu (draw-first-task))]
83 12687dd9 2023-08-04 jrmu [(= (length queue) 1)
84 12687dd9 2023-08-04 jrmu (begin
85 12687dd9 2023-08-04 jrmu (remove)
86 12687dd9 2023-08-04 jrmu (draw-queue-number)
87 12687dd9 2023-08-04 jrmu (draw-message task-message "No more tasks left!"))]
88 12687dd9 2023-08-04 jrmu [(= (length queue) 0) true]))
89 12687dd9 2023-08-04 jrmu
90 12687dd9 2023-08-04 jrmu (define (quit-callback event)
91 12687dd9 2023-08-04 jrmu (hide-window task-manager-win))
92 12687dd9 2023-08-04 jrmu
93 12687dd9 2023-08-04 jrmu (define enter-button (make-button "Enter" enter-callback))
94 12687dd9 2023-08-04 jrmu (define next-button (make-button "Next" next-callback))
95 12687dd9 2023-08-04 jrmu (define quit-button (make-button "Quit" quit-callback))
96 12687dd9 2023-08-04 jrmu
97 12687dd9 2023-08-04 jrmu (define task-manager-win
98 12687dd9 2023-08-04 jrmu (create-window (list (list task-message task-number-message)
99 12687dd9 2023-08-04 jrmu (list input-text enter-button)
100 12687dd9 2023-08-04 jrmu (list next-button quit-button))))
101 12687dd9 2023-08-04 jrmu
102 12687dd9 2023-08-04 jrmu ;;Tests
103 12687dd9 2023-08-04 jrmu #|
104 12687dd9 2023-08-04 jrmu (begin (enter "hi")
105 12687dd9 2023-08-04 jrmu (enter "joe")
106 12687dd9 2023-08-04 jrmu (enter "it's")
107 12687dd9 2023-08-04 jrmu (enter "me")
108 12687dd9 2023-08-04 jrmu (and (equal? (list "hi" "joe" "it's" "me") queue)
109 12687dd9 2023-08-04 jrmu (begin (next)
110 12687dd9 2023-08-04 jrmu (equal? (next) "it's")
111 12687dd9 2023-08-04 jrmu (remove)
112 12687dd9 2023-08-04 jrmu (and (= 3 (count))
113 12687dd9 2023-08-04 jrmu (equal? queue (list "joe" "it's" "me"))))))
114 12687dd9 2023-08-04 jrmu |#
115 12687dd9 2023-08-04 jrmu
116 12687dd9 2023-08-04 jrmu ;;Wish-list
117 12687dd9 2023-08-04 jrmu
118 12687dd9 2023-08-04 jrmu ;;Initialize queue, queue-index