Warning, /education/parley/src/practice/DESIGN is written in an unsupported language. File is not indexed.
0001 This file describes the program flow of the practice. 0002 0003 0004 Overview 0005 --------- 0006 0007 The top of the practice window hierarchy is the 0008 PracticeMainWindow. This class owns a few other important classes: 0009 - a GuiFrontend 0010 - a PracticeStateMachine 0011 0012 The frontend controls what is visible to the user. There is an 0013 AbstractFrontend which defines the API to the frontend and an actual 0014 frontend class called GuiFrontend. The GuiFrontend owns and controls the 0015 main practice window and connects all the buttons (the answer button, 0016 "answer later", "hint", etc), and the image widget. It also creates 0017 and destroys the practice widget depending on which practice mode that 0018 is chosen at every given time. 0019 0020 Furthermore, it fills the widget with data and extracts the answer 0021 that the user replied. It also animates the leitner boxes in the 0022 practice modes that use them. 0023 0024 The details of the practice is controlled by the PracticeStateMachine. 0025 It connects the frontend, the backend and uses a SessionManager to 0026 keep track of the entries that are being practiced and also selects 0027 their order. 0028 0029 0030 Sessions 0031 -------- 0032 0033 A training session is a set of words that are practiced together. 0034 0035 The SessionManager controls the entries that will be practiced during 0036 the session and the order of them. At the beginning of the session, it 0037 selects the initial set of entries given the boundaries by the 0038 practice settings, the last time each entry was practiced and the 0039 grade / confidence level of the word. During the practice it maintains 0040 a list of entries which are practiced right now, called the "current 0041 entries". These are shown to the user in an order defined by the 0042 session manager until s/he gets one of them right. 0043 0044 There are currently two different SessionManagers to choose from: 0045 SessionManagerContinuous and SessionManagerFixed. The continuous one 0046 keeps a list of active entries and iterates between them until the 0047 user gets one right. Then it removes this entry from the active set 0048 and includes a new one. The fixed session manager selects a set of 0049 words at the beginning of the training and just shows those. When the 0050 user has gotten all entries right it ends the session and returns to 0051 the main training window. 0052 0053 0054 Practice modes 0055 -------------- 0056 0057 Each practice mode uses 2 classes: 0058 - a backend 0059 - a widget 0060 0061 The practice backend implements the methods used by the 0062 TestEntryManager to control the details of the practice. It controls 0063 the flow for one test entry, e.g. giving hints and determining if an 0064 answer is correct or not. It also extracts the user's answer from the 0065 frontend, analyzes it and updates the grades. 0066 0067 There is one concrete backend class per practice mode. The abstract 0068 backend class, AbstractBackend, also has lots of default 0069 implementations for the methods, and is therefore more of a base class 0070 rather than an abstract class / interface. 0071 0072 The widget shows the question to the user and also the answer. Many 0073 of the widgets contain sound buttons for question and answer and also 0074 pronounciation labels. 0075 0076 Not all practice modes have their own widgets. Some practice modes 0077 reuse the widget from other modes instead. All modes seems to have 0078 their own backend, though. 0079 0080 0081 Questions 0082 --------- 0083 0084 * It is a bit unclear why the frontend needs to define an API. After 0085 all there is only one concrete frontend, the GuiFrontend. Is 0086 another possible frontend a touch based frontend? Should the 0087 GuiFrontend really be called DesktopFrontend or MouseFrontend 0088 instead? 0089 0090 * ...