Next Previous Up Top Contents Index

6.5 Changes required to run Task List 2

6.5.3 Changes to method definitions

The definitions for the methods given in Chapter 5 must be redefined so as to take an instance of <frame> as an argument, rather than an instance of <gadget>. This change results in these new definitions:

define method open-file
    (frame :: <task-frame>) => ()
  let task-list = frame-task-list(frame);
  let filename
    = choose-file(frame: frame,
                  default: task-list.task-list-filename,
                  direction: #"input");
  if (filename)
    let task-list = load-task-list(filename);
    if (task-list)
      frame.frame-task-list := task-list;
      refresh-task-frame(frame)
    else
      notify-user(format-to-string("Failed to open file %s", filename),
                  owner: frame)
    end
  end
end method open-file;

define method save-file (frame :: <task-frame>) => () let task-list = frame-task-list(frame); if (task-list.task-list-modified?) save-as-file(frame, filename: task-list.task-list-filename) end end method save-file;

define method save-as-file (frame :: <task-frame>, #key filename) => () let task-list = frame-task-list(frame); let filename = filename | choose-file(frame: frame, default: task-list.task-list-filename, direction: #"output"); if (filename) if (save-task-list(task-list, filename: filename)) frame.frame-task-list := task-list; refresh-task-frame(frame) else notify-user(format-to-string ("Failed to save file %s", filename), owner: frame) end end end method save-as-file;

define method frame-add-task (frame :: <task-frame>) => () let task-list = frame-task-list(frame); let (name, priority) = prompt-for-task(owner: frame); if (name & priority) let new-task = make(<task>, name: name, priority: priority); add-task(task-list, new-task); refresh-task-frame(frame); frame-selected-task(frame) := new-task end end method frame-add-task;

define method frame-remove-task (frame :: <task-frame>) => () let task = frame-selected-task(frame); let task-list = frame-task-list(frame); if (notify-user(format-to-string ("Really remove task %s", task.task-name), owner: frame, style: #"question")) frame-selected-task(frame) := #f; remove-task(task-list, task); refresh-task-frame(frame) end end method frame-remove-task;

define method note-task-selection-change (frame :: <task-frame>) => () let task = frame-selected-task(frame); if (task) frame.priority-box.gadget-value := task.task-priority; end; command-enabled?(frame-remove-task, frame) := task ~= #f; end method note-task-selection-change;

For details about note-task-selection-change, see Section 5.3.3.3 on page 67. See Section A.2, "A task list manager using command tables" for the complete source code for the Task List 2 project.


Building Applications Using DUIM - 26 May 1999

Next Previous Up Top Contents Index