source: trunk/Forms/FormSourceCode.pas

Last change on this file was 149, checked in by chronos, 13 months ago
  • Modified: Use TFormEx class from Common package.
File size: 5.2 KB
Line 
1unit FormSourceCode;
2
3interface
4
5uses
6 Classes, SysUtils, FileUtil, SynEdit, SynHighlighterIni, Forms, Controls,
7 Graphics, Dialogs, Menus, ActnList, FormEx,
8 SynEditHighlighter, SynHighlighterAny, SynHighlighterJava, BFHighlighter;
9
10type
11
12 { TFormSourceCode }
13
14 TFormSourceCode = class(TFormEx)
15 AGenerateText: TAction;
16 ACutToClipboard: TAction;
17 ASelectAll: TAction;
18 APasteFromClipboard: TAction;
19 ACopyToClipboard: TAction;
20 AClear: TAction;
21 AFormatSource: TAction;
22 AShrinkSource: TAction;
23 AGenerateNumber: TAction;
24 ActionList1: TActionList;
25 MenuItem1: TMenuItem;
26 MenuItem2: TMenuItem;
27 MenuItem21: TMenuItem;
28 MenuItem23: TMenuItem;
29 MenuItem26: TMenuItem;
30 MenuItem29: TMenuItem;
31 MenuItem3: TMenuItem;
32 MenuItem36: TMenuItem;
33 MenuItem4: TMenuItem;
34 MenuItem5: TMenuItem;
35 MenuItem6: TMenuItem;
36 MenuItem7: TMenuItem;
37 Separator1: TMenuItem;
38 PopupMenuSource: TPopupMenu;
39 SynEditSource: TSynEdit;
40 SynJavaSyn1: TSynJavaSyn;
41 procedure AClearExecute(Sender: TObject);
42 procedure ACopyToClipboardExecute(Sender: TObject);
43 procedure ACutToClipboardExecute(Sender: TObject);
44 procedure AFormatSourceExecute(Sender: TObject);
45 procedure AGenerateNumberExecute(Sender: TObject);
46 procedure AGenerateTextExecute(Sender: TObject);
47 procedure APasteFromClipboardExecute(Sender: TObject);
48 procedure ASelectAllExecute(Sender: TObject);
49 procedure AShrinkSourceExecute(Sender: TObject);
50 procedure FormCreate(Sender: TObject);
51 procedure FormDestroy(Sender: TObject);
52 procedure MemoSourceChange(Sender: TObject);
53 procedure MemoSourceKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
54 );
55 procedure MemoSourceMouseDown(Sender: TObject; Button: TMouseButton;
56 Shift: TShiftState; X, Y: Integer);
57 private
58 BFHighlighter: TSynBrainFuckHl;
59 FOnUpdateInterface: TNotifyEvent;
60 FOnUpdateStatusBar: TNotifyEvent;
61 public
62 procedure UpdateTheme;
63 property OnUpdateStatusBar: TNotifyEvent read FOnUpdateStatusBar
64 write FOnUpdateStatusBar;
65 property OnUpdateInterface: TNotifyEvent read FOnUpdateInterface
66 write FOnUpdateInterface;
67 end;
68
69
70implementation
71
72{$R *.lfm}
73
74uses
75 Core, BFCodeTools;
76
77resourcestring
78 SNumberGeneration = 'Number generation';
79 SEnterNumber = 'Enter number';
80 STextGeneration = 'Text generation';
81 SEnterText = 'Enter text';
82
83{ TFormSourceCode }
84
85procedure TFormSourceCode.AGenerateNumberExecute(Sender: TObject);
86var
87 Number: Integer;
88 NumberText: string;
89begin
90 NumberText := InputBox(SNumberGeneration, SEnterNumber, '1');
91 if TryStrToInt(NumberText, Number) then begin
92 SynEditSource.SelText := GenerateNumber(Number);
93 end;
94end;
95
96procedure TFormSourceCode.AGenerateTextExecute(Sender: TObject);
97var
98 Text: string;
99begin
100 Text := InputBox(STextGeneration, SEnterText, '');
101 SynEditSource.SelText := GenerateText(Text);
102end;
103
104procedure TFormSourceCode.APasteFromClipboardExecute(Sender: TObject);
105begin
106 SynEditSource.PasteFromClipboard;
107end;
108
109procedure TFormSourceCode.ASelectAllExecute(Sender: TObject);
110begin
111 SynEditSource.SelectAll;
112end;
113
114procedure TFormSourceCode.AFormatSourceExecute(Sender: TObject);
115begin
116 SynEditSource.Text := FormatCode(SynEditSource.Text);
117 MemoSourceChange(nil);
118end;
119
120procedure TFormSourceCode.ACopyToClipboardExecute(Sender: TObject);
121begin
122 SynEditSource.CopyToClipboard;
123end;
124
125procedure TFormSourceCode.ACutToClipboardExecute(Sender: TObject);
126begin
127 SynEditSource.CutToClipboard;
128end;
129
130procedure TFormSourceCode.AClearExecute(Sender: TObject);
131begin
132 SynEditSource.Clear;
133end;
134
135procedure TFormSourceCode.AShrinkSourceExecute(Sender: TObject);
136begin
137 SynEditSource.Text := ShrinkCode(SynEditSource.Text);
138 MemoSourceChange(nil);
139end;
140
141procedure TFormSourceCode.FormCreate(Sender: TObject);
142begin
143 BFHighlighter := TSynBrainFuckHl.Create(nil);
144 SynEditSource.Highlighter := BFHighlighter;
145end;
146
147procedure TFormSourceCode.FormDestroy(Sender: TObject);
148begin
149 SynEditSource.Highlighter := nil;
150 FreeAndNil(BFHighlighter);
151end;
152
153procedure TFormSourceCode.UpdateTheme;
154const
155 clLightBlue = TColor($FF8080);
156 clLightGreen = TColor($80FF80);
157 clLightRed = TColor($8080FF);
158begin
159 if Core.Core.ThemeManager.Theme.Name = 'Dark' then begin
160 BFHighlighter.IoAttri.Foreground := clWhite;
161 BFHighlighter.LoopAttri.Foreground := clLightRed;
162 BFHighlighter.PointerAttri.Foreground := clLightBlue;
163 BFHighlighter.MemoryAttri.Foreground := clLightGreen;
164 end else begin
165 BFHighlighter.IoAttri.Foreground := clBlack;
166 BFHighlighter.LoopAttri.Foreground := clRed;
167 BFHighlighter.PointerAttri.Foreground := clBlue;
168 BFHighlighter.MemoryAttri.Foreground := clGreen;
169 end;
170end;
171
172procedure TFormSourceCode.MemoSourceChange(Sender: TObject);
173begin
174 Core.Core.Project.Modified := True;
175 Core.Core.CurrentTarget.Compiled := False;
176 if Assigned(FOnUpdateInterface) then
177 OnUpdateInterface(Self);
178end;
179
180procedure TFormSourceCode.MemoSourceKeyUp(Sender: TObject; var Key: Word;
181 Shift: TShiftState);
182begin
183 if Assigned(FOnUpdateStatusBar) then
184 FOnUpdateStatusBar(Self);
185end;
186
187procedure TFormSourceCode.MemoSourceMouseDown(Sender: TObject; Button: TMouseButton;
188 Shift: TShiftState; X, Y: Integer);
189begin
190 if Assigned(FOnUpdateStatusBar) then
191 FOnUpdateStatusBar(Self);
192end;
193
194end.
195
Note: See TracBrowser for help on using the repository browser.