source: branches/topdown/OsSystem.pas

Last change on this file was 37, checked in by chronos, 11 months ago
  • Modified: Simplified unit names.
File size: 2.6 KB
Line 
1unit OsSystem;
2
3interface
4
5uses
6 Classes, SysUtils, Forms, Generics.Collections;
7
8type
9 TSystem = class;
10 TFormTask = class;
11 TFormTaskClass = class of TFormTask;
12
13 { TApp }
14
15 TApp = class
16 Name: string;
17 FormClass: TFormTaskClass;
18 end;
19
20 { TApps }
21
22 TApps = class(TObjectList<TApp>)
23 function AddNew(Name: string; FormClass: TFormTaskClass): TApp;
24 end;
25
26 { TTask }
27
28 TTask = class
29 Form: TFormTask;
30 Terminated: Boolean;
31 destructor Destroy; override;
32 end;
33
34 { TFormTask }
35
36 TFormTask = class(TForm)
37 Task: TTask;
38 procedure Terminate;
39 end;
40
41 { TTasks }
42
43 TTasks = class(TObjectList<TTask>)
44 private
45 FOnChange: TNotifyEvent;
46 public
47 function AddNew(Form: TFormTask): TTask;
48 function Search(Form: TFormTask): TTask;
49 procedure StartTask(FormClass: TFormTaskClass);
50 procedure DoOnChange;
51 property OnChange: TNotifyEvent read FOnChange write FOnChange;
52 end;
53
54 { TSystem }
55
56 TSystem = class
57 Apps: TApps;
58 Tasks: TTasks;
59 ScreenForm: TForm;
60 constructor Create;
61 destructor Destroy; override;
62 procedure ShutDown;
63 procedure Reboot;
64 end;
65
66var
67 BaseSystem: TSystem;
68
69
70implementation
71
72{ TTask }
73
74destructor TTask.Destroy;
75begin
76 Form.Free;
77 inherited;
78end;
79
80{ TFormTask }
81
82procedure TFormTask.Terminate;
83begin
84 Task.Terminated := True;
85 Visible := False;
86 BaseSystem.Tasks.DoOnChange;
87end;
88
89{ TTasks }
90
91function TTasks.AddNew(Form: TFormTask): TTask;
92begin
93 Result := TTask.Create;
94 Result.Form := Form;
95 Add(Result);
96end;
97
98function TTasks.Search(Form: TFormTask): TTask;
99var
100 I: Integer;
101begin
102 I := 0;
103 while (I < Count) and (Items[I].Form <> Form) do Inc(I);
104 if I < Count then Result := Items[I]
105 else Result := nil;
106end;
107
108procedure TTasks.StartTask(FormClass: TFormTaskClass);
109var
110 Form: TFormTask;
111 Task: TTask;
112begin
113 Form := FormClass.Create(nil);
114 Task := AddNew(Form);
115 Form.Task := Task;
116 //Form.Parent := BaseSystem.ScreenForm;
117 Form.Show;
118 DoOnChange;
119end;
120
121procedure TTasks.DoOnChange;
122begin
123 if Assigned(FOnChange) then FOnChange(Self);
124end;
125
126{ TApps }
127
128function TApps.AddNew(Name: string; FormClass: TFormTaskClass): TApp;
129begin
130 Result := TApp.Create;
131 Result.Name := Name;
132 Result.FormClass := FormClass;
133 Add(Result);
134end;
135
136{ TSystem }
137
138constructor TSystem.Create;
139begin
140 Apps := TApps.Create;
141 Tasks := TTasks.Create;
142end;
143
144destructor TSystem.Destroy;
145begin
146 Tasks.Free;
147 Apps.Free;
148 inherited;
149end;
150
151procedure TSystem.ShutDown;
152begin
153 Application.Terminate;
154end;
155
156procedure TSystem.Reboot;
157begin
158 Tasks.Clear;
159 Tasks.DoOnChange;
160end;
161
162initialization
163
164BaseSystem := TSystem.Create;
165
166finalization
167
168FreeAndNil(BaseSystem);
169
170end.
171
Note: See TracBrowser for help on using the repository browser.