mirror of https://gitlab.com/basile.b/dexed.git
improvement for userxp
This commit is contained in:
parent
7e42d6afbd
commit
85ff09a704
|
@ -22,6 +22,7 @@ type
|
||||||
procedure PageControlCloseTabClicked(Sender: TObject);
|
procedure PageControlCloseTabClicked(Sender: TObject);
|
||||||
protected
|
protected
|
||||||
procedure UpdateByDelay; override;
|
procedure UpdateByDelay; override;
|
||||||
|
procedure UpdateByEvent; override;
|
||||||
private
|
private
|
||||||
fKeyChanged: boolean;
|
fKeyChanged: boolean;
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ type
|
||||||
|
|
||||||
tokLst: TLexTokenList;
|
tokLst: TLexTokenList;
|
||||||
errLst: TLexErrorList;
|
errLst: TLexErrorList;
|
||||||
|
procedure memoKeyPress(Sender: TObject; var Key: char);
|
||||||
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||||
procedure memoChange(Sender: TObject);
|
procedure memoChange(Sender: TObject);
|
||||||
|
@ -120,10 +122,12 @@ begin
|
||||||
//
|
//
|
||||||
if pageControl.ActivePageIndex <> -1 then
|
if pageControl.ActivePageIndex <> -1 then
|
||||||
mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
|
mainForm.docFocusedNotify(Self, pageControl.ActivePageIndex);
|
||||||
|
//
|
||||||
// re-tokenize.
|
if (curr.modified or (pageCOntrol.ActivePage.Caption = '')) then
|
||||||
fKeyChanged := true;
|
begin
|
||||||
beginUpdateByDelay;
|
fKeyChanged := true;
|
||||||
|
beginUpdateByDelay;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
||||||
|
@ -151,6 +155,7 @@ begin
|
||||||
//
|
//
|
||||||
memo.OnKeyDown := @memoKeyDown;
|
memo.OnKeyDown := @memoKeyDown;
|
||||||
memo.OnKeyUp := @memoKeyDown;
|
memo.OnKeyUp := @memoKeyDown;
|
||||||
|
memo.OnKeyPress := @memoKeyPress;
|
||||||
memo.OnMouseDown := @memoMouseDown;
|
memo.OnMouseDown := @memoMouseDown;
|
||||||
memo.OnChange := @memoChange;
|
memo.OnChange := @memoChange;
|
||||||
memo.OnMouseMove := @memoMouseMove;
|
memo.OnMouseMove := @memoMouseMove;
|
||||||
|
@ -173,15 +178,19 @@ end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure TCEEditorWidget.memoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
begin
|
begin
|
||||||
if (sender is TCESynMemo) then
|
UpdateByEvent;
|
||||||
|
if (sender is TCESynMemo) then
|
||||||
identifierToD2Syn(TCESynMemo(Sender));
|
identifierToD2Syn(TCESynMemo(Sender));
|
||||||
fKeyChanged := true;
|
|
||||||
case Byte(Key) of
|
case Byte(Key) of
|
||||||
VK_UNKNOWN..VK_XBUTTON2: exit;
|
VK_CLEAR,VK_RETURN,VK_BACK : fKeyChanged := true;
|
||||||
VK_SHIFT..VK_HELP: fKeyChanged := false;
|
//else fKeyChanged := false;
|
||||||
VK_LWIN..VK_SLEEP: exit;
|
|
||||||
VK_F1..$91: exit;
|
|
||||||
end;
|
end;
|
||||||
|
if fKeyChanged then
|
||||||
|
beginUpdateByDelay;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEditorWidget.memoKeyPress(Sender: TObject; var Key: char);
|
||||||
|
begin
|
||||||
fKeyChanged := true;
|
fKeyChanged := true;
|
||||||
beginUpdateByDelay;
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
|
@ -191,12 +200,15 @@ begin
|
||||||
if (sender is TCESynMemo) then
|
if (sender is TCESynMemo) then
|
||||||
identifierToD2Syn(TCESynMemo(Sender));
|
identifierToD2Syn(TCESynMemo(Sender));
|
||||||
beginUpdateByDelay;
|
beginUpdateByDelay;
|
||||||
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
procedure TCEEditorWidget.memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
||||||
begin
|
begin
|
||||||
if ssLeft in Shift then
|
if not (ssLeft in Shift) then exit;
|
||||||
beginUpdateByDelay;
|
//
|
||||||
|
beginUpdateByDelay;
|
||||||
|
UpdateByEvent;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.memoChange(Sender: TObject);
|
procedure TCEEditorWidget.memoChange(Sender: TObject);
|
||||||
|
@ -205,52 +217,56 @@ var
|
||||||
begin
|
begin
|
||||||
ed := TCESynMemo(sender);
|
ed := TCESynMemo(sender);
|
||||||
ed.modified := true;
|
ed.modified := true;
|
||||||
|
fKeyChanged := true;
|
||||||
beginUpdateByDelay;
|
beginUpdateByDelay;
|
||||||
|
UpdateByEvent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEditorWidget.UpdateByEvent;
|
||||||
|
const
|
||||||
|
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
||||||
|
var
|
||||||
|
ed: TCESynMemo;
|
||||||
|
begin
|
||||||
|
ed := getCurrentEditor;
|
||||||
|
if ed = nil then exit;
|
||||||
|
//
|
||||||
|
editorStatus.Panels[0].Text := format('%d : %d',[ed.CaretY, ed.CaretX]);
|
||||||
|
editorStatus.Panels[1].Text := modstr[ed.modified];
|
||||||
|
editorStatus.Panels[2].Text := ed.fileName;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.UpdateByDelay;
|
procedure TCEEditorWidget.UpdateByDelay;
|
||||||
const
|
|
||||||
modstr: array[boolean] of string = ('...', 'MODIFIED');
|
|
||||||
var
|
var
|
||||||
ed: TCESynMemo;
|
ed: TCESynMemo;
|
||||||
err: TLexError;
|
err: TLexError;
|
||||||
md: string;
|
md: string;
|
||||||
begin
|
begin
|
||||||
ed := getCurrentEditor;
|
ed := getCurrentEditor;
|
||||||
if ed <> nil then
|
if ed = nil then exit;
|
||||||
begin
|
if not fKeyChanged then exit;
|
||||||
editorStatus.Panels[0].Text := format('%d : %d',[ed.CaretY, ed.CaretX]);
|
|
||||||
editorStatus.Panels[1].Text := modstr[ed.modified];
|
|
||||||
editorStatus.Panels[2].Text := ed.fileName;
|
|
||||||
end;
|
|
||||||
//
|
//
|
||||||
if fKeyChanged then if editorIndex <> -1 then
|
|
||||||
begin
|
|
||||||
mainForm.docChangeNotify(Self, editorIndex);
|
|
||||||
|
|
||||||
|
|
||||||
if ed.Lines.Count > 0 then
|
|
||||||
begin
|
|
||||||
mainForm.MessageWidget.Clear;
|
|
||||||
lex( ed.Lines.Text, tokLst );
|
|
||||||
|
|
||||||
checkSyntacticErrors( tokLst, errLst);
|
|
||||||
for err in errLst do
|
|
||||||
mainForm.MessageWidget.addMessage(format(
|
|
||||||
'%s (@line:%4.d @char:%.4d)',[err.msg, err.position.y, err.position.x]));
|
|
||||||
|
|
||||||
md := getModuleName(tokLst);
|
|
||||||
if md = '' then md := extractFileName(ed.fileName);
|
|
||||||
pageControl.ActivePage.Caption := md;
|
|
||||||
end;
|
|
||||||
|
|
||||||
mainForm.MessageWidget.scrollToBack;
|
|
||||||
tokLst.Clear;
|
|
||||||
errLst.Clear;
|
|
||||||
|
|
||||||
end;
|
|
||||||
fKeyChanged := false;
|
fKeyChanged := false;
|
||||||
|
mainForm.docChangeNotify(Self, editorIndex);
|
||||||
|
if ed.Lines.Count = 0 then exit;
|
||||||
|
//
|
||||||
|
mainForm.MessageWidget.Clear;
|
||||||
|
lex( ed.Lines.Text, tokLst );
|
||||||
|
|
||||||
|
checkSyntacticErrors( tokLst, errLst);
|
||||||
|
for err in errLst do
|
||||||
|
mainForm.MessageWidget.addMessage(format(
|
||||||
|
'%s (@line:%4.d @char:%.4d)',[err.msg, err.position.y, err.position.x]));
|
||||||
|
|
||||||
|
md := '';
|
||||||
|
if ed.isDSource then
|
||||||
|
md := getModuleName(tokLst);
|
||||||
|
if md = '' then md := extractFileName(ed.fileName);
|
||||||
|
pageControl.ActivePage.Caption := md;
|
||||||
|
|
||||||
|
mainForm.MessageWidget.scrollToBack;
|
||||||
|
tokLst.Clear;
|
||||||
|
errLst.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Reference in New Issue