Subversion Repositories fastphp

Rev

Rev 22 | Rev 24 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 22 Rev 23
Line 12... Line 12...
12
// TODO: localize
12
// TODO: localize
13
// TODO: wieso geht copy paste im twebbrowser nicht???
13
// TODO: wieso geht copy paste im twebbrowser nicht???
14
// Wieso dauert webbrowser1 erste kompilierung so lange???
14
// Wieso dauert webbrowser1 erste kompilierung so lange???
15
// TODO: wieso kommt syntax fehler zweimal? einmal stderr einmal stdout?
15
// TODO: wieso kommt syntax fehler zweimal? einmal stderr einmal stdout?
16
// TODO: Browser titlebar (link preview)
16
// TODO: Browser titlebar (link preview)
17
// TODO: search prev
-
 
18
// TODO: wenn man schrift größer/kleiner macht, soll die bildschirmseite zentriert bleiben
-
 
19
// TODO: todo liste
17
// TODO: todo liste
20
 
18
 
21
// Future ideas
19
// Future ideas
22
// - code explorer / code insight
20
// - code explorer / code insight
23
// - verschiedene php versionen?
21
// - verschiedene php versionen?
Line 33... Line 31...
33
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
31
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
34
  Dialogs, StdCtrls, OleCtrls, ComCtrls, ExtCtrls, ToolWin, IniFiles,
32
  Dialogs, StdCtrls, OleCtrls, ComCtrls, ExtCtrls, ToolWin, IniFiles,
35
  SynEditHighlighter, SynHighlighterPHP, SynEdit, SHDocVw_TLB, FindReplace,
33
  SynEditHighlighter, SynHighlighterPHP, SynEdit, SHDocVw_TLB, FindReplace,
36
  System.Actions, Vcl.ActnList, System.UITypes;
34
  System.Actions, Vcl.ActnList, System.UITypes;
37
 
35
 
-
 
36
{.$DEFINE OnlineHelp}
-
 
37
 
38
type
38
type
39
  TForm1 = class(TForm)
39
  TForm1 = class(TForm)
40
    PageControl1: TPageControl;
40
    PageControl1: TPageControl;
41
    PlaintextTabSheet: TTabSheet;
41
    PlaintextTabSheet: TTabSheet;
42
    HtmlTabSheet: TTabSheet;
42
    HtmlTabSheet: TTabSheet;
Line 72... Line 72...
72
    Button7: TButton;
72
    Button7: TButton;
73
    ActionOpen: TAction;
73
    ActionOpen: TAction;
74
    Button8: TButton;
74
    Button8: TButton;
75
    Button9: TButton;
75
    Button9: TButton;
76
    ActionFindPrev: TAction;
76
    ActionFindPrev: TAction;
-
 
77
    Timer1: TTimer;
-
 
78
    ActionSpaceToTab: TAction;
-
 
79
    Button11: TButton;
77
    procedure Run(Sender: TObject);
80
    procedure Run(Sender: TObject);
78
    procedure FormShow(Sender: TObject);
81
    procedure FormShow(Sender: TObject);
79
    procedure FormCreate(Sender: TObject);
82
    procedure FormCreate(Sender: TObject);
80
    procedure FormDestroy(Sender: TObject);
83
    procedure FormDestroy(Sender: TObject);
81
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
84
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
Line 99... Line 102...
99
      MousePos: TPoint; var Handled: Boolean);
102
      MousePos: TPoint; var Handled: Boolean);
100
    procedure ActionOpenExecute(Sender: TObject);
103
    procedure ActionOpenExecute(Sender: TObject);
101
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
104
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
102
    procedure Memo2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
105
    procedure Memo2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
103
    procedure ActionFindPrevExecute(Sender: TObject);
106
    procedure ActionFindPrevExecute(Sender: TObject);
-
 
107
    procedure SynEdit1MouseCursor(Sender: TObject;
-
 
108
      const aLineCharPos: TBufferCoord; var aCursor: TCursor);
-
 
109
    procedure Timer1Timer(Sender: TObject);
-
 
110
    procedure ActionSpaceToTabExecute(Sender: TObject);
104
  private
111
  private
105
    CurSearchTerm: string;
112
    CurSearchTerm: string;
106
    HlpPrevPageIndex: integer;
113
    HlpPrevPageIndex: integer;
107
    SrcRep: TFindReplace;
114
    SrcRep: TFindReplace;
-
 
115
    {$IFDEF OnlineHelp}
-
 
116
    gOnlineHelpWord: string;
-
 
117
    {$ENDIF}
108
    procedure Help;
118
    procedure Help;
109
    function MarkUpLineReference(cont: string): string;
119
    function MarkUpLineReference(cont: string): string;
110
  protected
120
  protected
111
    ChmIndex: TMemIniFile;
121
    ChmIndex: TMemIniFile;
112
    FScrapFile: string;
122
    FScrapFile: string;
Line 120... Line 130...
120
implementation
130
implementation
121
 
131
 
122
{$R *.dfm}
132
{$R *.dfm}
123
 
133
 
124
uses
134
uses
125
  Functions, StrUtils, WebBrowserUtils, FastPHPUtils, Math, ShellAPI;
135
  Functions, StrUtils, WebBrowserUtils, FastPHPUtils, Math, ShellAPI, RichEdit;
126
 
136
 
127
// TODO: FindPrev ?
137
// TODO: FindPrev ?
128
procedure TForm1.ActionFindNextExecute(Sender: TObject);
138
procedure TForm1.ActionFindNextExecute(Sender: TObject);
129
begin
139
begin
130
  SrcRep.FindNext;
140
  SrcRep.FindNext;
Line 184... Line 194...
184
begin
194
begin
185
  SynEdit1.Lines.SaveToFile(GetScrapFile);
195
  SynEdit1.Lines.SaveToFile(GetScrapFile);
186
  SynEdit1.Modified := false;
196
  SynEdit1.Modified := false;
187
end;
197
end;
188
 
198
 
-
 
199
procedure TForm1.ActionSpaceToTabExecute(Sender: TObject);
-
 
200
 
-
 
201
    function SpacesAtBeginning(line: string): integer;
-
 
202
    begin
-
 
203
      if line.Trim = '' then exit(0);
-
 
204
      result := 0;
-
 
205
      while line[result+1] = ' ' do
-
 
206
      begin
-
 
207
        inc(result);
-
 
208
      end;
-
 
209
    end;
-
 
210
 
-
 
211
    function GuessIndent(lines: TStrings): integer;
-
 
212
      function _Check(indent: integer): boolean;
-
 
213
      var
-
 
214
        i: integer;
-
 
215
      begin
-
 
216
        result := true;
-
 
217
        for i := 0 to lines.Count-1 do
-
 
218
          if SpacesAtBeginning(lines.Strings[i]) mod indent <> 0 then
-
 
219
          begin
-
 
220
            // ShowMessageFmt('Zeile "%s" nicht durch %d teilbar!', [lines.strings[i], indent]);
-
 
221
            exit(false);
-
 
222
          end;
-
 
223
      end;
-
 
224
    var
-
 
225
      i: integer;
-
 
226
    begin
-
 
227
      for i := 8 downto 2 do
-
 
228
      begin
-
 
229
        if _Check(i) then exit(i);
-
 
230
      end;
-
 
231
      result := -1;
-
 
232
    end;
-
 
233
 
-
 
234
    procedure SpaceToTab(lines: TStrings; indent: integer);
-
 
235
    var
-
 
236
      i, spaces: integer;
-
 
237
    begin
-
 
238
      for i := 0 to lines.Count-1 do
-
 
239
      begin
-
 
240
        spaces := SpacesAtBeginning(lines.Strings[i]);
-
 
241
        lines.Strings[i] := StringOfChar(#9, spaces div indent) + StringOfChar(' ', spaces mod indent) + Copy(lines.Strings[i], spaces+1, Length(lines.Strings[i])-spaces);
-
 
242
      end;
-
 
243
    end;
-
 
244
 
-
 
245
    function SpacesAvailable(lines: TStrings): boolean;
-
 
246
    var
-
 
247
      i, spaces: integer;
-
 
248
    begin
-
 
249
      for i := 0 to lines.Count-1 do
-
 
250
      begin
-
 
251
        spaces := SpacesAtBeginning(lines.Strings[i]);
-
 
252
        if spaces > 0 then exit(true);
-
 
253
      end;
-
 
254
      exit(false);
-
 
255
    end;
-
 
256
 
-
 
257
var
-
 
258
  val: string;
-
 
259
  ind: integer;
-
 
260
resourcestring
-
 
261
  SNoLinesAvailable = 'No lines with spaces at the beginning available';
-
 
262
begin
-
 
263
  // TODO: if something is selected, only process the selected part
-
 
264
 
-
 
265
  if not SpacesAvailable(SynEdit1.Lines) then
-
 
266
  begin
-
 
267
    ShowMessage(SNoLinesAvailable);
-
 
268
    exit;
-
 
269
  end;
-
 
270
 
-
 
271
  ind := GuessIndent(SynEdit1.Lines);
-
 
272
  if ind <> -1 then val := IntToStr(ind);
-
 
273
 
-
 
274
  InputQuery('Spaces to tabs', 'Indent:', val); // TODO: handle CANCEL correctly...
-
 
275
  if TryStrToInt(val.Trim, ind) then
-
 
276
  begin
-
 
277
    if ind = 0 then exit;
-
 
278
    SpaceToTab(SynEdit1.Lines, ind);
-
 
279
  end;
-
 
280
 
-
 
281
  if SynEdit1.CanFocus then SynEdit1.SetFocus;
-
 
282
end;
-
 
283
 
189
procedure TForm1.ActionESCExecute(Sender: TObject);
284
procedure TForm1.ActionESCExecute(Sender: TObject);
190
begin
285
begin
191
  if (HlpPrevPageIndex <> -1) and (PageControl2.ActivePage = HelpTabSheet) and
286
  if (HlpPrevPageIndex <> -1) and (PageControl2.ActivePage = HelpTabSheet) and
192
     (HelpTabsheet.TabVisible) then
287
     (HelpTabsheet.TabVisible) then
193
  begin
288
  begin
Line 243... Line 338...
243
  finally
338
  finally
244
    Screen.Cursor := crDefault;
339
    Screen.Cursor := crDefault;
245
  end;
340
  end;
246
end;
341
end;
247
 
342
 
-
 
343
procedure TForm1.SynEdit1MouseCursor(Sender: TObject; const aLineCharPos: TBufferCoord; var aCursor: TCursor);
-
 
344
{$IFDEF OnlineHelp}
-
 
345
var
-
 
346
  Line: Integer;
-
 
347
  Column: Integer;
-
 
348
  word: string;
-
 
349
begin
-
 
350
  Line  := aLineCharPos.Line-1;
-
 
351
  Column := aLineCharPos.Char-1;
-
 
352
  word := GetWordUnderPos(TSynEdit(Sender), Line, Column);
-
 
353
  if word <> gOnlineHelpWord then
-
 
354
  begin
-
 
355
    gOnlineHelpWord := word;
-
 
356
    Timer1.Enabled := false;
-
 
357
    Timer1.Enabled := true;
-
 
358
  end;
-
 
359
{$ELSE}
-
 
360
begin
-
 
361
{$ENDIF}
-
 
362
end;
-
 
363
 
248
procedure TForm1.SynEdit1MouseWheelDown(Sender: TObject; Shift: TShiftState;
364
procedure TForm1.SynEdit1MouseWheelDown(Sender: TObject; Shift: TShiftState;
249
  MousePos: TPoint; var Handled: Boolean);
365
  MousePos: TPoint; var Handled: Boolean);
250
begin
366
begin
251
  if ssCtrl in Shift then
367
  if ssCtrl in Shift then
252
  begin
368
  begin
253
    SynEdit1.Font.Size := Max(SynEdit1.Font.Size - 1, 5);
369
    SynEdit1.Font.Size := Max(SynEdit1.Font.Size - 1, 5);
-
 
370
    Handled := true;
254
  end;
371
  end
-
 
372
  else Handled := false;
255
end;
373
end;
256
 
374
 
257
procedure TForm1.SynEdit1MouseWheelUp(Sender: TObject; Shift: TShiftState;
375
procedure TForm1.SynEdit1MouseWheelUp(Sender: TObject; Shift: TShiftState;
258
  MousePos: TPoint; var Handled: Boolean);
376
  MousePos: TPoint; var Handled: Boolean);
259
begin
377
begin
260
  if ssCtrl in Shift then
378
  if ssCtrl in Shift then
261
  begin
379
  begin
262
    SynEdit1.Font.Size := SynEdit1.Font.Size + 1;
380
    SynEdit1.Font.Size := SynEdit1.Font.Size + 1;
-
 
381
    Handled := true;
263
  end;
382
  end
-
 
383
  else Handled := false;
264
end;
384
end;
265
 
385
 
266
procedure TForm1.SynEditFocusTimerTimer(Sender: TObject);
386
procedure TForm1.SynEditFocusTimerTimer(Sender: TObject);
267
begin
387
begin
268
  SynEditFocusTimer.Enabled := false;
388
  SynEditFocusTimer.Enabled := false;
269
  Button1.SetFocus; // Workaround for weird bug... This (and the timer) is necessary to get the focus to SynEdit1
389
  Button1.SetFocus; // Workaround for weird bug... This (and the timer) is necessary to get the focus to SynEdit1
270
  SynEdit1.SetFocus;
390
  SynEdit1.SetFocus;
271
end;
391
end;
272
 
392
 
-
 
393
procedure TForm1.Timer1Timer(Sender: TObject);
-
 
394
begin
-
 
395
  {$IFDEF OnlineHelp}
-
 
396
  Timer1.Enabled := false;
-
 
397
 
-
 
398
  // TODO: Insert a small online help hint
-
 
399
  //Caption := gOnlineHelpWord;
-
 
400
  {$ENDIF}
-
 
401
end;
-
 
402
 
273
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
403
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
274
  const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
404
  const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
275
  Headers: OleVariant; var Cancel: WordBool);
405
  Headers: OleVariant; var Cancel: WordBool);
276
var
406
var
277
  s, myURL: string;
407
  s, myURL: string;