unit scripteditorunit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, FileCtrl, rowinsertunit; type { Tscripteditorfrm } Tscripteditorfrm = class(TForm) DirChangeBtn: TButton; LineEdit: TEdit; Label4: TLabel; OpenDialog1: TOpenDialog; SaveBtn: TButton; CancelBtn: TButton; ReturnBtn: TButton; FileListBox1: TFileListBox; Label2: TLabel; Label3: TLabel; RadioGroup1: TRadioGroup; SaveDialog1: TSaveDialog; ScriptList: TListBox; ScriptFileEdit: TEdit; Label1: TLabel; Memo1: TMemo; SelectDirectoryDialog1: TSelectDirectoryDialog; procedure DirChangeBtnClick(Sender: TObject); procedure FileListBox1DblClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure LineEditKeyPress(Sender: TObject; var Key: char); procedure RadioGroup1Click(Sender: TObject); procedure SaveBtnClick(Sender: TObject); procedure ScriptListClick(Sender: TObject); private { private declarations } EditOption : integer; index : integer; currdir : string; public { public declarations } end; var scripteditorfrm: Tscripteditorfrm; implementation uses matmanunit; { Tscripteditorfrm } procedure Tscripteditorfrm.FormShow(Sender: TObject); begin Label4.Visible := false; LineEdit.Visible := false; // currdir := GetCurrentDir; // FileListBox1.Directory := currdir; end; procedure Tscripteditorfrm.FileListBox1DblClick(Sender: TObject); var delfile, prmptstr, info : string; aindex : integer; begin aindex := FileListBox1.ItemIndex; delfile := FileListBox1.Items.Strings[aindex]; prmptstr := 'Delete ' + delfile + '?'; info := InputBox('DELETE?',prmptstr,'Y'); if info <> 'Y' then exit else DeleteFile(delfile); FileListBox1.Update; end; procedure Tscripteditorfrm.DirChangeBtnClick(Sender: TObject); begin if SelectDirectoryDialog1.Execute then begin currdir := GetCurrentDir; FileListBox1.Directory := currdir; end; end; procedure Tscripteditorfrm.LineEditKeyPress(Sender: TObject; var Key: char); begin if ord(Key) = 13 then begin ScriptList.Items.Insert(index,LineEdit.Text); LineEdit.Text := ''; LineEdit.Visible := false; Label3.Visible := false; end; end; procedure Tscripteditorfrm.RadioGroup1Click(Sender: TObject); var SaveFile : TextFile; CurrentObjType : integer; CurrentObjName, cellstring : string; Count, i : integer; begin EditOption := RadioGroup1.ItemIndex + 1; case EditOption of 1 : begin // delete a line label3.Visible := false; LineEdit.Visible := false; ScriptList.Items.Delete(index); ScriptList.SetFocus; RadioGroup1.ItemIndex := -1; end; 2 : begin // insert a line label3.Visible := true; label3.Caption := 'Enter a new line. End by pressing the Enter key.'; LineEdit.Visible := true; LineEdit.Text := ''; LineEdit.SetFocus; RadioGroup1.ItemIndex := -1; end; 3 : begin // edit a line label3.Visible := true; label3.Caption := 'Edit the line. End by pressing the Enter key.'; LineEdit.Visible := true; if index >= 0 then begin LineEdit.Text := ScriptList.Items.Strings[index]; ScriptList.Items.Delete(index); LineEdit.SetFocus; end; RadioGroup1.ItemIndex := -1; end; 4 : begin // append another script file OpenDialog1.DefaultExt := '.SCP'; OpenDialog1.Filter := 'Script (*.SCP)|*.SCP|All (*.*)|*.*'; OpenDialog1.FilterIndex := 1; if OpenDialog1.Execute then begin AssignFile(SaveFile, OpenDialog1.FileName); Reset(SaveFile); Readln(SaveFile,CurrentObjType); if CurrentObjType <> 5 then begin ShowMessage('Not a script file!'); CloseFile(SaveFile); exit; end; Readln(SaveFile,CurrentObjName); Readln(SaveFile,Count); for i := 0 to Count - 1 do begin Readln(SaveFile,cellstring); ScriptList.Items.Add(cellstring); end; CloseFile(SaveFile); end; end; // end case 4 end; // end cases end; procedure Tscripteditorfrm.SaveBtnClick(Sender: TObject); var SaveFile : TextFile; i, Count, CurrentObjType : integer; CurrentObjName, edititem : string; begin Count := ScriptList.Items.Count; if Count < 1 then exit; CurrentObjType := 5; CurrentObjName := ScriptFileEdit.Text; SaveDialog1.FileName := ScriptFileEdit.Text; SaveDialog1.Filter := 'Script (*.SCP)|*.SCP|All(*.*)|*.*'; SaveDialog1.DefaultExt := '.SCP'; SaveDialog1.FilterIndex := 1; if SaveDialog1.Execute then begin AssignFile(SaveFile, SaveDialog1.FileName); Rewrite(SaveFile); Writeln(SaveFile,CurrentObjType); Writeln(SaveFile,CurrentObjName); Writeln(SaveFile,Count); MatManFrm.ScriptList.Clear; for i := 0 to Count - 1 do begin edititem := ScriptList.Items.Strings[i]; Writeln(SaveFile,edititem); MatManFrm.ScriptList.Items.Add(edititem); end; CloseFile(SaveFile); end; end; procedure Tscripteditorfrm.ScriptListClick(Sender: TObject); begin index := ScriptList.ItemIndex; end; initialization {$I scripteditorunit.lrs} end.