1 unit fEditBook;
2 (* Maintain a chain of active (editor) windows.
3 Move form to front whenever activated.
4 Dequeue form when destroyed.
5
6 The queue head is stored in the global variable MRUEdit.
7
8 The EditBook should become a frame, embeddable without docking.
9 *)
10
11 {$mode objfpc}{$H+}
12
13 { TODO : figure out what's wrong with the mru list - with multiple windows }
14 {.$DEFINE mru} //problems with MRU list???
15
16 interface
17
18 uses
19 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
20 SynEdit,
21 fDockBook;
22
23 type
24 TEditPage = class(TSynEdit)
25 protected
GetFloatingDockSiteClassnull26 function GetFloatingDockSiteClass: TWinControlClass; override;
27 public
28 FileName: string;
29 procedure LoadFile(const AName: string);
30 end;
31
32 TEditBook = class(TEasyDockBook)
33 procedure FormActivate(Sender: TObject);
34 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
35 private
36 { private declarations }
37 protected
38 NRUEdit: TEditBook; //Next Recently Used EditBook
39 public
40 constructor Create(TheOwner: TComponent); override;
OpenFilenull41 function OpenFile(const AName: string): boolean;
42 end;
43
44 var
45 MRUEdit: TEditBook; //Most Recently Used EditBook
46
47 implementation
48
49 {$R feditbook.lfm}
50
51 uses
52 uMakeSite;
53
54 { TEditBook }
55
56 constructor TEditBook.Create(TheOwner: TComponent);
57 begin
58 inherited Create(TheOwner);
59 //DockMaster.AddElasticSites(self, [alLeft, alRight, alBottom]);
60 end;
61
62 procedure TEditBook.FormActivate(Sender: TObject);
63 var
64 prev: TEditBook;
65 begin
66 //enQ self as first
67 if MRUEdit = Self then
68 exit; //is alread head
69 prev := MRUEdit;
70 {$IFDEF mru}
71 while (prev <> nil) and (prev.NRUEdit <> self) do
72 prev := prev.NRUEdit;
73 if prev <> nil then
74 prev.NRUEdit := self.NRUEdit; //was already in Q
75 NRUEdit := MRUEdit; //old head
76 MRUEdit := self; //become head
77 {$ELSE}
78 {$ENDIF}
79 end;
80
81 procedure TEditBook.FormClose(Sender: TObject; var CloseAction: TCloseAction);
82 var
83 prev: TEditBook;
84 begin
85 //deQ self
86 prev := MRUEdit;
87 {$IFDEF mru}
88 if prev = self then
89 MRUEdit := NRUEdit
90 else begin
91 while (prev <> nil) and (prev.NRUEdit <> self) do
92 prev := prev.NRUEdit;
93 if prev.NRUEdit = self then
94 prev.NRUEdit := NRUEdit;
95 //else not in chain?
96 end;
97 NRUEdit := nil;
98 {$ELSE}
99 {$ENDIF}
100 end;
101
TEditBook.OpenFilenull102 function TEditBook.OpenFile(const AName: string): boolean;
103 var
104 se: TEditPage;
105 begin
106 se := TEditPage.Create(Owner);
107 se.ManualDock(self);
108 se.LoadFile(AName);
109 Result := True;
110 end;
111
112 { TEditPage }
113
TEditPage.GetFloatingDockSiteClassnull114 function TEditPage.GetFloatingDockSiteClass: TWinControlClass;
115 begin
116 //Result:=inherited GetFloatingDockSiteClass;
117 Result := TEditBook; //try auto-wrap
118 end;
119
120 procedure TEditPage.LoadFile(const AName: string);
121 begin
122 FileName := AName;
123 Lines.LoadFromFile(AName);
124 end;
125
126 end.
127
128