diff options
Diffstat (limited to 'examples/apps/nanoedit/mainfrm.pas')
-rw-r--r-- | examples/apps/nanoedit/mainfrm.pas | 267 |
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. |