source: trunk/UCore.pas

Last change on this file was 39, checked in by chronos, 6 years ago
  • Added: Mirror, Flip, Gradient, Negative for 4-bit gray image.
File size: 8.9 KB
Line 
1unit UCore;
2
3{$mode Delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, ActnList, UProject, UCoolTranslator, UFGraphics,
9 UPersistentForm, Controls, Graphics, ExtDlgs, ExtCtrls, URegistry,
10 UApplicationInfo, Registry;
11
12const
13 ZoomFactor = 1.5;
14
15type
16 { TCore }
17
18 TCore = class(TDataModule)
19 ASettings: TAction;
20 AToolMove: TAction;
21 AToolPen: TAction;
22 AImageNegative: TAction;
23 AImageGradient: TAction;
24 AImageMirror: TAction;
25 AImageFlip: TAction;
26 AImageRandom: TAction;
27 AFileSaveAs: TAction;
28 AFileSave: TAction;
29 AFileClose: TAction;
30 AFileOpen: TAction;
31 ApplicationInfo1: TApplicationInfo;
32 AZoomNormal: TAction;
33 AZoomAll: TAction;
34 AZoomIn: TAction;
35 AZoomOut: TAction;
36 AImageClear: TAction;
37 AExit: TAction;
38 AFileNew: TAction;
39 ActionList1: TActionList;
40 CoolTranslator1: TCoolTranslator;
41 ImageList1: TImageList;
42 OpenPictureDialog1: TOpenPictureDialog;
43 PersistentForm1: TPersistentForm;
44 SavePictureDialog1: TSavePictureDialog;
45 procedure AExitExecute(Sender: TObject);
46 procedure AFileNewExecute(Sender: TObject);
47 procedure AFileCloseExecute(Sender: TObject);
48 procedure AFileOpenExecute(Sender: TObject);
49 procedure AFileSaveAsExecute(Sender: TObject);
50 procedure AFileSaveExecute(Sender: TObject);
51 procedure AImageClearExecute(Sender: TObject);
52 procedure AImageFlipExecute(Sender: TObject);
53 procedure AImageGradientExecute(Sender: TObject);
54 procedure AImageMirrorExecute(Sender: TObject);
55 procedure AImageNegativeExecute(Sender: TObject);
56 procedure AImageRandomExecute(Sender: TObject);
57 procedure ASettingsExecute(Sender: TObject);
58 procedure AToolMoveExecute(Sender: TObject);
59 procedure AToolPenExecute(Sender: TObject);
60 procedure AZoomAllExecute(Sender: TObject);
61 procedure AZoomInExecute(Sender: TObject);
62 procedure AZoomNormalExecute(Sender: TObject);
63 procedure AZoomOutExecute(Sender: TObject);
64 procedure DataModuleCreate(Sender: TObject);
65 procedure DataModuleDestroy(Sender: TObject);
66 private
67 public
68 LastColorFormat: string;
69 LastImageSize: TPoint;
70 Project: TProject;
71 RegistryContext: TRegistryContext;
72 procedure ProjectOpen(FileName: string);
73 procedure ProjectNew;
74 procedure Init;
75 procedure LoadConfig;
76 procedure SaveConfig;
77 end;
78
79var
80 Core: TCore;
81
82implementation
83
84{$R *.lfm}
85
86uses
87 UFormNew, UFormMain, Forms, UFormSettings;
88
89{ TCore }
90
91procedure TCore.DataModuleCreate(Sender: TObject);
92begin
93 RegistryContext := TRegistryContext.Create(ApplicationInfo1.RegistryRoot,
94 ApplicationInfo1.RegistryKey);
95 Project := TProject.Create;
96end;
97
98procedure TCore.DataModuleDestroy(Sender: TObject);
99begin
100 FreeAndNil(Project);
101 SaveConfig;
102end;
103
104procedure TCore.ProjectOpen(FileName: string);
105var
106 Image: TImage;
107begin
108 FormMain.LastOpenedList1.AddItem(FileName);
109 Image := TImage.Create(nil);
110 Image.Picture.LoadFromFile(FileName);
111 //Image.Picture.Bitmap.BeginUpdate(True);
112 Project.Bitmap.Size := Point(Image.Picture.Bitmap.Width, Image.Picture.Bitmap.Height);
113 //Project.Bitmap.LoadFromCanvas(Image.Picture.Bitmap.Canvas);
114 Project.Bitmap.LoadFromBitmap(Image.Picture.Bitmap);
115 //Image.Picture.Bitmap.EndUpdate;
116 Image.Free;
117 Project.View.ZoomAll(Project.Bitmap.Size);
118 FormMain.Redraw;
119 Project.FileName := FileName;
120end;
121
122procedure TCore.ProjectNew;
123var
124 ColorFormatIndex: Integer;
125begin
126 // Set default
127 ColorFormatIndex := ColorFormatManager.FindByName(LastColorFormat);
128 if ColorFormatIndex < ColorFormatManager.Formats.Count then
129 Project.Bitmap.ColorFormat := ColorFormatManager.Formats[ColorFormatIndex]
130 else Project.Bitmap.ColorFormat := ColorFormatManager.Formats[0];
131 Project.Bitmap.Size := LastImageSize;
132
133 Project.View.DestRect := Bounds(0, 0, FormMain.PaintBox1.Width, FormMain.PaintBox1.Height);
134 Project.View.ZoomAll(Project.Bitmap.Size);
135end;
136
137procedure TCore.Init;
138begin
139 PersistentForm1.RegistryContext := RegistryContext;
140 LoadConfig;
141
142 ProjectNew;
143 FormMain.Redraw;
144end;
145
146procedure TCore.LoadConfig;
147begin
148 with TRegistryEx.Create do
149 try
150 RootKey := RegistryContext.RootKey;
151 OpenKey(RegistryContext.Key, True);
152
153 LastColorFormat := ReadStringWithDefault('LastColorFormat', '');
154 LastImageSize.X := ReadIntegerWithDefault('LastImageSizeX', 600);
155 LastImageSize.Y := ReadIntegerWithDefault('LastImageSizeY', 400);
156 if ValueExists('LanguageCode') then
157 CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(ReadStringWithDefault('LanguageCode', ''))
158 else CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode('');
159 finally
160 Free;
161 end;
162end;
163
164procedure TCore.SaveConfig;
165begin
166 with TRegistryEx.Create do
167 try
168 RootKey := RegistryContext.RootKey;
169 OpenKey(RegistryContext.Key, True);
170
171 WriteString('LastColorFormat', LastColorFormat);
172 WriteInteger('LastImageSizeX', LastImageSize.X);
173 WriteInteger('LastImageSizeY', LastImageSize.Y);
174 if Assigned(CoolTranslator1.Language) and (CoolTranslator1.Language.Code <> '') then
175 WriteString('LanguageCode', CoolTranslator1.Language.Code)
176 else DeleteValue('LanguageCode');
177 finally
178 Free;
179 end;
180end;
181
182procedure TCore.AFileNewExecute(Sender: TObject);
183begin
184 FormNew.DefaultSize := LastImageSize;
185 if FormNew.ShowModal = mrOk then begin
186 Project.Bitmap.ColorFormat := TColorFormat.Create;
187
188 Project.FileName := 'New image';
189 Project.Bitmap.Size := Point(FormNew.SpinEditWidth.Value, FormNew.SpinEditHeight.Value);
190 Project.Bitmap.ColorFormat := ColorFormatManager.Formats[FormNew.ComboBoxColorFormat.ItemIndex];
191// Project.Bitmap.BackgroundColor.FromTColor(clBlack);
192// Project.Bitmap.DPI := FormNew.SpinEditDPI.Value;
193 Project.View.ZoomAll(Project.Bitmap.Size);
194 FormMain.Redraw;
195 LastImageSize := Project.Bitmap.Size;
196 end;
197end;
198
199procedure TCore.AZoomAllExecute(Sender: TObject);
200begin
201 with Core.Project do
202 View.ZoomAll(Bitmap.Size);
203 FormMain.Redraw;
204end;
205
206procedure TCore.AZoomInExecute(Sender: TObject);
207begin
208 Project.View.Zoom := Project.View.Zoom * ZoomFactor;
209 FormMain.Redraw;
210end;
211
212procedure TCore.AZoomNormalExecute(Sender: TObject);
213begin
214 Project.View.Zoom := 1;
215 FormMain.Redraw;
216end;
217
218procedure TCore.AZoomOutExecute(Sender: TObject);
219begin
220 Project.View.Zoom := Project.View.Zoom / ZoomFactor;
221 FormMain.Redraw;
222end;
223
224procedure TCore.AExitExecute(Sender: TObject);
225begin
226 Application.Terminate;
227end;
228
229procedure TCore.AFileCloseExecute(Sender: TObject);
230begin
231 if not Project.Saved then AFileSave.Execute;
232 Project.Free;
233 FormMain.Redraw;
234end;
235
236procedure TCore.AFileOpenExecute(Sender: TObject);
237begin
238 if OpenPictureDialog1.Execute then begin
239 ProjectOpen(OpenPictureDialog1.FileName);
240 end;
241end;
242
243procedure TCore.AFileSaveAsExecute(Sender: TObject);
244begin
245 SavePictureDialog1.InitialDir := ExtractFileDir(Project.FileName);
246 SavePictureDialog1.FileName := ExtractFileName(Project.FileName);
247 if SavePictureDialog1.Execute then begin
248 Project.FileName := SavePictureDialog1.FileName;
249 FormMain.LastOpenedList1.AddItem(SavePictureDialog1.FileName);
250 AFileSave.Execute;
251 end;
252end;
253
254procedure TCore.AFileSaveExecute(Sender: TObject);
255var
256 Image: TImage;
257begin
258 if Project.FileName = '' then AFileSaveAs.Execute
259 else begin
260 FormMain.LastOpenedList1.AddItem(SavePictureDialog1.FileName);
261 Image := TImage.Create(nil);
262 Image.Picture.Bitmap.SetSize(Project.Bitmap.Size.X, Project.Bitmap.Size.Y);
263 Project.Bitmap.PaintToBitmap(Image.Picture.Bitmap,
264 Rect(0, 0, Image.Picture.Bitmap.Width, Image.Picture.Bitmap.Height));
265 Image.Picture.SaveToFile(SavePictureDialog1.FileName);
266 Image.Free;
267 Project.Saved := True;
268 end;
269end;
270
271procedure TCore.AImageClearExecute(Sender: TObject);
272begin
273 Project.Bitmap.Clear;
274 (Project.Bitmap.Canvas.Pen.Color as TFColor).ColorFormat := Project.Bitmap.ColorFormat;
275 (Project.Bitmap.Canvas.Pen.Color as TFColor).SetColorName(cnWhite);
276 Project.Bitmap.Canvas.Pen.MoveTo(Point(80, 80));
277 Project.Bitmap.Canvas.Pen.LineTo(Point(50, 20));
278 FormMain.Redraw;
279end;
280
281procedure TCore.AImageFlipExecute(Sender: TObject);
282begin
283 Project.Bitmap.Flip;
284 FormMain.Redraw;
285end;
286
287procedure TCore.AImageGradientExecute(Sender: TObject);
288begin
289 Core.Project.Bitmap.Gradient;
290 FormMain.Redraw;
291end;
292
293procedure TCore.AImageMirrorExecute(Sender: TObject);
294begin
295 Project.Bitmap.Mirror;
296 FormMain.Redraw;
297end;
298
299procedure TCore.AImageNegativeExecute(Sender: TObject);
300begin
301 Project.Bitmap.Negative;
302 FormMain.Redraw;
303end;
304
305procedure TCore.AImageRandomExecute(Sender: TObject);
306begin
307 Project.Bitmap.Random;
308 FormMain.Redraw;
309end;
310
311procedure TCore.ASettingsExecute(Sender: TObject);
312begin
313 FormSettings := TFormSettings.Create(nil);
314 try
315 FormSettings.Load;
316 if FormSettings.ShowModal = mrOk then begin
317 FormSettings.Save;
318 end;
319 finally
320 FormSettings.Free;
321 end;
322end;
323
324procedure TCore.AToolMoveExecute(Sender: TObject);
325begin
326 FormMain.ImageTool := itMoveView;
327end;
328
329procedure TCore.AToolPenExecute(Sender: TObject);
330begin
331 FormMain.ImageTool := itPen;
332end;
333
334end.
335
Note: See TracBrowser for help on using the repository browser.