summaryrefslogtreecommitdiff
path: root/examples/apps/nanoedit/mainfrm.pas
diff options
context:
space:
mode:
Diffstat (limited to 'examples/apps/nanoedit/mainfrm.pas')
-rw-r--r--examples/apps/nanoedit/mainfrm.pas267
1 files changed, 267 insertions, 0 deletions
diff --git a/examples/apps/nanoedit/mainfrm.pas b/examples/apps/nanoedit/mainfrm.pas
new file mode 100644
index 00000000..bcacf714
--- /dev/null
+++ b/examples/apps/nanoedit/mainfrm.pas
@@ -0,0 +1,267 @@
+unit mainfrm;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ SysUtils, Classes, fpg_base, fpg_main,
+ fpg_form, fpg_button, fpg_menu, fpg_textedit;
+
+type
+
+ TMainForm = class(TfpgForm)
+ private
+ {@VFD_HEAD_BEGIN: MainFrom}
+ menu: TfpgMenuBar;
+ mnuFile: TfpgPopupMenu;
+ mnuSearch: TfpgPopupMenu;
+ memEditor: TfpgTextEdit;
+ btnGO: TfpgButton;
+ {@VFD_HEAD_END: MainFrom}
+ FTextToFind: TfpgString;
+ FFindOptions: TfpgFindOptions;
+ FIsForward: boolean;
+ procedure FormShow(Sender: TObject);
+ procedure miOpenClick(Sender: TObject);
+ procedure miSaveClick(Sender: TObject);
+ procedure miSaveAsClick(Sender: TObject);
+ procedure miGoToLineClick(Sender: TObject);
+ procedure miFindClick(Sender: TObject);
+ procedure miFindNextClick(Sender: TObject);
+ procedure miQuitClick(Sender: TObject);
+ procedure btnGOClick(Sender: TObject);
+ procedure memEditorChanged(Sender: TObject);
+ public
+ procedure AfterCreate; override;
+ end;
+
+{@VFD_NEWFORM_DECL}
+
+implementation
+
+uses
+ elastictabstops,
+ fpg_dialogs,
+ frm_find;
+
+{@VFD_NEWFORM_IMPL}
+
+procedure TMainForm.FormShow(Sender: TObject);
+var
+ s: string;
+begin
+ if ParamCount > 0 then
+ begin
+ ShowMessage(ParamStr(1));
+ s := ParamStr(1);
+ if Pos('file://', s) > 0 then
+ s := StringReplace(s, 'file://', '', []);
+ memEditor.LoadFromFile(s);
+ end;
+end;
+
+procedure TMainForm.miOpenClick(Sender: TObject);
+var
+ dlg: TfpgFileDialog;
+begin
+ dlg := TfpgFileDialog.Create(nil);
+ try
+ if dlg.RunOpenFile then
+ begin
+ memEditor.Lines.LoadFromFile(dlg.FileName);
+ end;
+ finally
+ dlg.Free;
+ end;
+end;
+
+procedure TMainForm.miSaveClick(Sender: TObject);
+var
+ dlg: TfpgFileDialog;
+begin
+ dlg := TfpgFileDialog.Create(nil);
+ try
+ if dlg.RunSaveFile then
+ begin
+ memEditor.Lines.SaveToFile(dlg.FileName);
+ end;
+ finally
+ dlg.Free;
+ end;
+end;
+
+procedure TMainForm.miSaveAsClick(Sender: TObject);
+var
+ dlg: TfpgFileDialog;
+begin
+ dlg := TfpgFileDialog.Create(nil);
+ try
+ if dlg.RunSaveFile then
+ begin
+ memEditor.Lines.SaveToFile(dlg.FileName);
+ end;
+ finally
+ dlg.Free;
+ end;
+end;
+
+procedure TMainForm.miGoToLineClick(Sender: TObject);
+var
+ sValue: string;
+ i: integer;
+begin
+ if fpgInputQuery('Go to line', 'Go to line number?', sValue) then
+ begin
+ try
+ i := StrToInt(sValue);
+ memEditor.GotoLine(i);
+ except
+ on E: Exception do
+ ShowMessage('Invalid line number.' + LineEnding + E.Message);
+ end;
+ end;
+end;
+
+procedure TMainForm.miFindClick(Sender: TObject);
+var
+ dlg: TFindForm;
+begin
+ FTextToFind := '';
+ dlg := TFindForm.Create(nil);
+ try
+ if dlg.Execute then
+ begin
+ FTextToFind := dlg.TextToFind;
+ FFindOptions := dlg.FindOptions;
+ FIsForward := dlg.IsForward;
+ miFindNextClick(nil);
+ end;
+ finally
+ dlg.Free;
+ end;
+end;
+
+procedure TMainForm.miFindNextClick(Sender: TObject);
+begin
+ if FTextToFind <> '' then
+ memEditor.FindText(FTextToFind, FFindOptions, FIsForward);
+end;
+
+procedure TMainForm.miQuitClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TMainForm.btnGOClick(Sender: TObject);
+var
+ ftr: TElasticTabstopsDocFilter;
+begin
+{
+ ftr := TElasticTabstopsDocFilter.Create(memEditor);
+ try
+ try
+ ftr.StretchTabstops;
+ finally
+ ftr.Free;
+ end;
+ except
+ on E: exception do
+ ShowMessage(e.Message);
+ end;
+}
+end;
+
+procedure TMainForm.memEditorChanged(Sender: TObject);
+var
+ ftr: TElasticTabstopsDocFilter;
+begin
+{
+ ftr := TElasticTabstopsDocFilter.Create(memEditor);
+ try
+ try
+ ftr.StretchTabstops;
+ finally
+ ftr.Free;
+ end;
+ except
+ on E: exception do
+ ShowMessage(e.Message);
+ end;
+}
+end;
+
+procedure TMainForm.AfterCreate;
+begin
+ {@VFD_BODY_BEGIN: MainFrom}
+ Name := 'MainFrom';
+ SetPosition(298, 169, 717, 410);
+ WindowTitle := 'fpGUI nanoedit';
+ Hint := '';
+ WindowPosition := wpScreenCenter;
+ OnShow := @FormShow;
+
+ menu := TfpgMenuBar.Create(self);
+ with menu do
+ begin
+ Name := 'menu';
+ SetPosition(0, 0, 717, 24);
+ Anchors := [anLeft,anRight,anTop];
+ end;
+
+ mnuFile := TfpgPopupMenu.Create(self);
+ with mnuFile do
+ begin
+ Name := 'mnuFile';
+ SetPosition(320, 4, 120, 20);
+ AddMenuItem('Open...', 'Ctrl+O', @miOpenClick);
+ AddMenuItem('Save', 'Ctrl+S', @miSaveClick);
+ AddMenuItem('Save as...', 'Ctrl+Shift+S', @miSaveAsClick);
+ AddMenuItem('-', '', nil);
+ AddMenuItem('Quit', 'Ctrl+Q', @miQuitClick);
+ end;
+
+ mnuSearch := TfpgPopupMenu.Create(self);
+ with mnuSearch do
+ begin
+ Name := 'mnuSearch';
+ SetPosition(320, 25, 120, 20);
+ AddMenuItem('Find...', 'Ctrl+F', @miFindClick);
+ AddMenuItem('Find next', 'F3', @miFindNextClick);
+ AddMenuItem('Replace', 'Ctrl+R', nil).Enabled := False;
+ AddMenuitem('-', '', nil);
+ AddMenuItem('Go to line...', 'Ctrl+G', @miGoToLineClick);
+ end;
+
+ memEditor := TfpgTextEdit.Create(self);
+ with memEditor do
+ begin
+ Name := 'memEditor';
+ SetPosition(0, 52, 717, 358);
+ Anchors := [anLeft,anRight,anTop,anBottom];
+ FontDesc := '#edit2';
+ GutterVisible := True;
+ RightEdge := True;
+ end;
+
+ btnGO := TfpgButton.Create(self);
+ with btnGO do
+ begin
+ Name := 'btnGO';
+ SetPosition(260, 26, 75, 24);
+ Text := 'GO';
+ FontDesc := '#Label1';
+ Hint := '';
+ ImageName := '';
+ TabOrder := 4;
+ OnClick := @btnGOClick;
+ end;
+
+ {@VFD_BODY_END: MainFrom}
+
+ menu.AddMenuItem('&File', nil).SubMenu := mnuFile;
+ menu.AddMenuItem('&Search', nil).SubMenu := mnuSearch;
+end;
+
+
+end.