/
fConfiguration.pas
131 lines (114 loc) · 2.96 KB
/
fConfiguration.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
unit fConfiguration;
(* intended purpose:
user configuration editor.
The files (TFile) are stored in the Tab.Objects,
initalized during project processing (#include *.def...)
*)
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ComCtrls,
uFiles;
type
TConfigViewer = class(TForm)
lbConfig: TMemo;
PopupMenu1: TPopupMenu;
Save1: TMenuItem;
Undo1: TMenuItem;
lbTabs: TTabControl;
Label1: TLabel;
edFile: TEdit;
procedure Save1Click(Sender: TObject);
procedure Undo1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure lbTabsChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure lbConfigChange(Sender: TObject);
protected
Changed: boolean;
CurFile: TFile;
CurIndex: integer;
procedure SaveChanges;
procedure ShowFile(i: integer);
public
procedure StartProject(f: TFile);
end;
var
ConfigViewer: TConfigViewer;
implementation
{$R *.dfm}
{ TConfigViewer }
procedure TConfigViewer.FormActivate(Sender: TObject);
begin
//if FileName = '' then ShowFile(''); //open the default file
//lbTabs.TabIndex := 0;
ShowFile(0);
end;
procedure TConfigViewer.FormCreate(Sender: TObject);
begin
Changed := False;
CurIndex := -1;
CurFile := nil;
uFiles.ConfigFiles := self.lbTabs.Tabs;
end;
procedure TConfigViewer.StartProject(f: TFile);
begin
//SaveChanges; - maybe too late!
Changed := False;
lbConfig.Clear;
lbTabs.Tabs.Clear;
lbTabs.Tabs.AddObject(f.name, f);
lbTabs.TabIndex := 0; //trigger file display?
end;
procedure TConfigViewer.SaveChanges;
begin
if not Changed then
exit;
Changed := False;
if CurFile <> nil then
CurFile.UpdateFrom(lbConfig.Lines);
end;
//procedure TConfigViewer.ShowFile(const fn: string);
procedure TConfigViewer.ShowFile(i: integer);
begin
if (i < 0) or (i >= lbTabs.Tabs.Count) then
exit; //invalid call
SaveChanges;
lbConfig.Clear;
edFile.Text := '';
CurIndex := i;
CurFile := lbTabs.Tabs.Objects[i] as TFile;
if CurFile = nil then
exit;
edFile.Text := CurFile.dir+CurFile.name;
lbConfig.Lines.Assign(CurFile); //.LoadFromFile(FileName);
Changed := False;
{
if fn <> '' then
FileName := fn
else if FileName = '' then
FileName := ExtractFilePath(Application.ExeName) + 'user.def';
}
Show; //if not already visible
end;
procedure TConfigViewer.Save1Click(Sender: TObject);
begin
SaveChanges;
end;
procedure TConfigViewer.Undo1Click(Sender: TObject);
begin
Changed := False;
ShowFile(CurIndex);
end;
procedure TConfigViewer.lbTabsChange(Sender: TObject);
begin
SaveChanges;
ShowFile(lbTabs.TabIndex);
end;
procedure TConfigViewer.lbConfigChange(Sender: TObject);
begin
//??? called during loading, for every line???
if lbConfig.Modified then
Changed := True;
end;
end.