-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmv.PluginEditor.pas
141 lines (119 loc) · 3.71 KB
/
mv.PluginEditor.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
132
133
134
135
136
137
138
139
140
141
unit mv.PluginEditor;
interface
uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.StdCtrls, FMX.TabControl, FMX.Memo, FMX.Dialogs;
type
TPluginEditBuffer = record
FileName: string;
FileContent: string;
end;
TPluginEditor = class(TPanel)
private
FNewButton, FOpenButton, FSaveButton, FSaveAsButton: TButton;
FTabControl: TTabControl;
procedure NewButtonClick(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
function OpenFile: TPluginEditBuffer;
procedure SaveFile(Buffer: TPluginEditBuffer);
public
constructor Create(AOwner: TComponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TPluginEditor]);
end;
{ TPluginEditor }
constructor TPluginEditor.Create(AOwner: TComponent);
var
TabItem: TTabItem;
Memo: TMemo;
begin
inherited Create(AOwner);
// Buttons
FNewButton := TButton.Create(Self);
FNewButton.Parent := Self;
FNewButton.SetBounds(5, 5, 64, 22);
FNewButton.Text := 'New';
FNewButton.OnClick := NewButtonClick;
FOpenButton := TButton.Create(Self);
FOpenButton.Parent := Self;
FOpenButton.SetBounds(74, 5, 64, 22);
FOpenButton.Text := 'Open';
FOpenButton.OnClick := OpenButtonClick;
FSaveButton := TButton.Create(Self);
FSaveButton.Parent := Self;
FSaveButton.SetBounds(143, 5, 64, 22);
FSaveButton.Text := 'Save';
FSaveButton.OnClick := SaveButtonClick;
FSaveAsButton := TButton.Create(Self);
FSaveAsButton.Parent := Self;
FSaveAsButton.SetBounds(212, 5, 64, 22);
FSaveAsButton.Text := 'Save As';
// TabControl
FTabControl := TTabControl.Create(Self);
FTabControl.Parent := Self;
FTabControl.Align := TAlignLayout.Client;
FTabControl.Margins.Top := 32;
NewButtonClick(FNewButton);
end;
procedure TPluginEditor.NewButtonClick(Sender: TObject);
var
TabItem: TTabItem;
Memo: TMemo;
begin
TabItem := FTabControl.Add;
TabItem.Text := 'New File '+IntToStr(FTabControl.TabCount);
Memo := TMemo.Create(TabItem);
TabItem.TagObject := Memo;
Memo.Parent := TabItem;
Memo.Align := TAlignLayout.Client;
Memo.Font.Family := 'Courier New'; // Fixed-width font
FTabControl.ActiveTab := TabItem;
end;
procedure TPluginEditor.OpenButtonClick(Sender: TObject);
var
Buffer: TPluginEditBuffer;
TabItem: TTabItem;
Memo: TMemo;
begin
Buffer := OpenFile;
TabItem := FTabControl.Add;
TabItem.Text := Buffer.FileName;
Memo := TMemo.Create(TabItem);
TabItem.TagObject := Memo;
Memo.Parent := TabItem;
Memo.Align := TAlignLayout.Client;
Memo.Font.Family := 'Courier New'; // Fixed-width font
Memo.Text := Buffer.FileContent;
FTabControl.ActiveTab := TabItem;
end;
procedure TPluginEditor.SaveButtonClick(Sender: TObject);
var
Buffer: TPluginEditBuffer;
Memo: TMemo;
begin
if FTabControl.ActiveTab <> nil then
begin
Memo := FTabControl.ActiveTab.TagObject as TMemo;
Buffer.FileName := FTabControl.ActiveTab.Text;
Buffer.FileContent := Memo.Text;
SaveFile(Buffer);
end;
end;
function TPluginEditor.OpenFile: TPluginEditBuffer;
begin
// For the sake of the example, we will return a dummy file.
// In real life, you would use a file dialog to select a file and read its content.
Result.FileName := 'Test.txt';
Result.FileContent := 'This is a test content.';
end;
procedure TPluginEditor.SaveFile(Buffer: TPluginEditBuffer);
begin
// For the sake of the example, we simply display a message.
// In real life, you would save the content of Buffer to the specified file.
ShowMessage('Saving file ' + Buffer.FileName);
end;
end.