Subversion Repositories fastphp

Compare Revisions

Regard whitespace Rev 12 → Rev 13

/trunk/EditorMain.pas
10,25 → 10,19
*)
 
// TODO: localize
 
// TODO: wieso geht copy paste im twebbrowser nicht???
// Wieso dauert webbrowser1 erste kompilierung so lange???
// TODO: wieso kommt syntax fehler zweimal? einmal stderr einmal stdout?
// TODO: Browser titlebar (link preview)
 
// TODO: strg+f / h
// TODO: font bigger
// TODO: code in bildschirmmitte?
// TODO: regelmäßig scrap zwischenspeichern, oder bei strg+s
 
// Future ideas
// - ToDo list
// - Open/Save real files
// - multiple scraps?
// - verschiedene php versionen?
// - webbrowser1 nur laden, wenn man den tab anwählt?
// - doppelklick auf tab soll diesen schließen
// - Onlinehelp (www) aufrufen
// - Let all colors be adjustable
// - code in bildschirmmitte?
 
interface
 
35,7 → 29,8
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, ComCtrls, ExtCtrls, ToolWin, IniFiles,
SynEditHighlighter, SynHighlighterPHP, SynEdit, SHDocVw_TLB;
SynEditHighlighter, SynHighlighterPHP, SynEdit, SHDocVw_TLB, FindReplace,
System.Actions, Vcl.ActnList;
 
type
TForm1 = class(TForm)
59,6 → 54,19
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
ActionList: TActionList;
ActionFind: TAction;
ActionReplace: TAction;
ActionFindNext: TAction;
ActionGoto: TAction;
ActionSave: TAction;
ActionHelp: TAction;
ActionRun: TAction;
ActionESC: TAction;
Button7: TButton;
procedure Run(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
70,14 → 78,23
const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure SynEditFocusTimerTimer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ActionFindExecute(Sender: TObject);
procedure ActionReplaceExecute(Sender: TObject);
procedure ActionFindNextExecute(Sender: TObject);
procedure ActionGotoExecute(Sender: TObject);
procedure ActionSaveExecute(Sender: TObject);
procedure ActionHelpExecute(Sender: TObject);
procedure ActionRunExecute(Sender: TObject);
procedure ActionESCExecute(Sender: TObject);
procedure SynEdit1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
procedure SynEdit1MouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
private
CurSearchTerm: string;
HlpPrevPageIndex: integer;
SrcRep: TFindReplace;
procedure Help;
procedure ApplicationOnMessage(var Msg: tagMSG; var Handled: Boolean);
function MarkUpLineReference(cont: string): string;
protected
ChmIndex: TMemIniFile;
93,85 → 110,74
{$R *.dfm}
 
uses
Functions, StrUtils, WebBrowserUtils, FastPHPUtils;
Functions, StrUtils, WebBrowserUtils, FastPHPUtils, Math;
 
procedure TForm1.ApplicationOnMessage(var Msg: tagMSG; var Handled: Boolean);
// TODO: FindPrev ?
procedure TForm1.ActionFindNextExecute(Sender: TObject);
begin
SrcRep.FindNext;
end;
 
procedure TForm1.ActionGotoExecute(Sender: TObject);
var
val: string;
lineno: integer;
begin
case Msg.message of
WM_KEYUP:
// TODO: VK_LMENU does not work! only works with AltGr but not Alt
// http://stackoverflow.com/questions/16828250/delphi-xe2-how-to-prevent-the-alt-key-stealing-focus ?
 
InputQuery('Go to', 'Line number:', val);
if not TryStrToInt(val, lineno) then
begin
case Msg.wParam of
{$REGION 'Esc'}
VK_ESCAPE:
begin
Handled := true;
// It is necessary to use Application.OnMessage, because Form1.KeyPreview does not work when TWebBrowser has the focus
if (HlpPrevPageIndex <> -1) and (PageControl2.ActivePage = HelpTabSheet) and
(HelpTabsheet.TabVisible) then
begin
PageControl2.ActivePageIndex := HlpPrevPageIndex;
HelpTabsheet.TabVisible := false;
if SynEdit1.CanFocus then SynEdit1.SetFocus;
exit;
end;
GotoLineNo(lineno);
end;
{$ENDREGION}
 
{$REGION 'Ctrl+G (Go to line)'}
ord('G'):
procedure TForm1.ActionHelpExecute(Sender: TObject);
begin
// TODO: VK_LMENU does not work! only works with AltGr but not Alt
// http://stackoverflow.com/questions/16828250/delphi-xe2-how-to-prevent-the-alt-key-stealing-focus ?
if (GetKeyState(VK_CONTROL) < 0) then
Help;
if PageControl2.ActivePage = HelpTabsheet then
WebBrowser2.SetFocus
else if PageControl2.ActivePage = TabSheet3{Scrap} then
SynEdit1.SetFocus;
end;
 
procedure TForm1.ActionReplaceExecute(Sender: TObject);
begin
Handled := true;
InputQuery('Go to', 'Line number:', val);
if not TryStrToInt(val, lineno) then exit;
GotoLineNo(lineno);
SrcRep.ReplaceExecute;
end;
 
procedure TForm1.ActionRunExecute(Sender: TObject);
begin
Run(Sender);
SynEdit1.SetFocus;
end;
{$ENDREGION}
 
{$REGION 'Ctrl+S (Save)'}
ord('S'):
procedure TForm1.ActionSaveExecute(Sender: TObject);
begin
if (GetKeyState(VK_CONTROL) < 0) and (SynEdit1.Focused) then
begin
Handled := true;
SynEdit1.Lines.SaveToFile(GetScrapFile);
end;
end;
{$ENDREGION}
 
{$REGION 'F1 (Help)'}
VK_F1:
procedure TForm1.ActionESCExecute(Sender: TObject);
begin
if SynEdit1.Focused then
if (HlpPrevPageIndex <> -1) and (PageControl2.ActivePage = HelpTabSheet) and
(HelpTabsheet.TabVisible) then
begin
Handled := true;
Help;
PageControl2.ActivePageIndex := HlpPrevPageIndex;
HelpTabsheet.TabVisible := false;
end;
end;
{$ENDREGION}
 
{$REGION 'F5 (Run)'}
VK_F5:
begin
Run(Self);
// Dirty hack...
SrcRep._FindDialog.CloseDialog;
SrcRep._ReplaceDialog.CloseDialog;
end;
{$ENDREGION}
 
{$REGION 'F9 (Run)'}
VK_F9:
procedure TForm1.ActionFindExecute(Sender: TObject);
begin
Run(Self);
SrcRep.FindExecute;
end;
{$ENDREGION}
end;
end;
end;
end;
 
procedure TForm1.Run(Sender: TObject);
begin
196,6 → 202,24
end;
end;
 
procedure TForm1.SynEdit1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if ssCtrl in Shift then
begin
SynEdit1.Font.Size := Max(SynEdit1.Font.Size - 1, 5);
end;
end;
 
procedure TForm1.SynEdit1MouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
if ssCtrl in Shift then
begin
SynEdit1.Font.Size := SynEdit1.Font.Size + 1;
end;
end;
 
procedure TForm1.SynEditFocusTimerTimer(Sender: TObject);
begin
SynEditFocusTimer.Enabled := false;
246,38 → 270,10
{$ENDREGION}
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Run(Sender);
SynEdit1.SetFocus;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Help;
if PageControl2.ActivePage = HelpTabsheet then
WebBrowser2.SetFocus
else if PageControl2.ActivePage = TabSheet3{Scrap} then
SynEdit1.SetFocus;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
val: string;
lineno: integer;
begin
InputQuery('Go to', 'Line number:', val);
if not TryStrToInt(val, lineno) then
begin
if SynEdit1.CanFocus then SynEdit1.SetFocus;
exit;
end;
GotoLineNo(lineno);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SynEdit1.Lines.SaveToFile(GetScrapFile);
FastPHPConfig.WriteInteger('User', 'FontSize', SynEdit1.Font.Size);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
284,7 → 280,9
begin
HlpPrevPageIndex := -1;
CurSearchTerm := '';
Application.OnMessage := ApplicationOnMessage;
Caption := Caption + ' - ' + GetScrapFile;
SrcRep := TFindReplace.Create(self);
SrcRep.Editor := SynEdit1;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
293,6 → 291,7
begin
FreeAndNil(ChmIndex);
end;
FreeAndNil(SrcRep);
end;
 
procedure TForm1.FormShow(Sender: TObject);
312,11 → 311,15
PageControl2.ActivePageIndex := 0; // Scraps
HelpTabsheet.TabVisible := false;
 
SynEdit1.Font.Size := FastPHPConfig.ReadInteger('User', 'FontSize', SynEdit1.Font.Size);
SynEdit1.SetFocus;
end;
 
function TForm1.GetScrapFile: string;
begin
if FileExists(ParamStr(1)) then
result := ParamStr(1)
else
result := FastPHPConfig.ReadString('Paths', 'ScrapFile', '');
if not FileExists(result) then
begin