From 0c34c8999e4dc4e6edd6c436c36c147dc4d50dd6 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Tue, 17 Mar 2015 04:53:40 +0100 Subject: [PATCH] fix, DCD and TCESynmemo positions issues, (hints, goto decl) --- src/ce_dcd.pas | 5 ++++- src/ce_editor.lfm | 6 +++--- src/ce_editor.pas | 4 +--- src/ce_synmemo.pas | 25 +++++++++++++++---------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/ce_dcd.pas b/src/ce_dcd.pas index c4e6fdb2..f0e73a2a 100644 --- a/src/ce_dcd.pas +++ b/src/ce_dcd.pas @@ -304,6 +304,9 @@ begin if not fAvailable then exit; if fDoc = nil then exit; // + i := fDoc.MouseStart; + if i = 0 then exit; + // fTempLines.Assign(fDoc.Lines); fTempLines.SaveToFile(fDoc.tempFilename); // @@ -311,7 +314,7 @@ begin fClient.Parameters.Clear; fClient.Parameters.Add('-d'); fClient.Parameters.Add('-c'); - fClient.Parameters.Add(intToStr(fDoc.MouseStart - 1)); + fClient.Parameters.Add(intToStr(i - 1)); fClient.Parameters.Add(fDoc.tempFilename); fClient.Execute; // diff --git a/src/ce_editor.lfm b/src/ce_editor.lfm index 9d9f3799..9f6f6948 100644 --- a/src/ce_editor.lfm +++ b/src/ce_editor.lfm @@ -19,7 +19,7 @@ inherited CEEditorWidget: TCEEditorWidget ClientWidth = 465 object PageControl: TExtendedNotebook[0] Left = 3 - Height = 375 + Height = 380 Top = 3 Width = 459 Align = alClient @@ -32,8 +32,8 @@ inherited CEEditorWidget: TCEEditorWidget end object editorStatus: TStatusBar[1] Left = 3 - Height = 23 - Top = 380 + Height = 18 + Top = 385 Width = 459 BorderSpacing.Around = 2 Panels = < diff --git a/src/ce_editor.pas b/src/ce_editor.pas index ac20f583..e77574b6 100644 --- a/src/ce_editor.pas +++ b/src/ce_editor.pas @@ -375,11 +375,8 @@ begin openDocument(fname); if srcpos <> -1 then begin - // note: SelStart only matches srcpos if the target file has the same line ending - // as the operating system: the pos has to be found manually. sum := 0; len := getLineEndingLength(fDoc.fileName); - //len := getSysLineEndLen; for i := 0 to fDoc.Lines.Count-1 do begin linelen := length(fDoc.Lines.Strings[i]); @@ -388,6 +385,7 @@ begin fDoc.CaretY := i + 1; fDoc.CaretX := srcpos - sum + len; fDoc.SelectWord; + fDoc.EnsureCursorPosVisible; break; end; sum += linelen; diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 99a7b781..aef92703 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -5,9 +5,10 @@ unit ce_synmemo; interface uses - Classes, SysUtils, controls,lcltype, Forms, graphics, ExtCtrls, crc, SynEditKeyCmds, - LazSynEditText, SynEditHighlighter, SynEdit, SynHighlighterLFM, SynEditMouseCmds, - SynEditFoldedView, ce_common, ce_observer, ce_writableComponent, ce_d2syn, ce_txtsyn; + Classes, SysUtils, controls,lcltype, Forms, graphics, ExtCtrls, crc, math, + SynEditKeyCmds,LazSynEditText, SynEditHighlighter, SynEdit, SynHighlighterLFM, + SynEditMouseCmds, SynEditFoldedView, ce_common, ce_observer, ce_writableComponent, + ce_d2syn, ce_txtsyn; type @@ -440,7 +441,7 @@ begin fDDocWin.FontSize := Font.Size; fDDocWin.HintRect := fDDocWin.CalcHintRect(0, str, nil); fDDocWin.OffsetHintRect(mouse.CursorPos, Font.Size); - fDDocWin.ActivateHint(fDDocWin.HintRect, str); + fDDocWin.ActivateHint(fDDocWin.HintRect, str); end; end; @@ -575,11 +576,13 @@ begin identifierToD2Syn; if not (Shift = [ssCtrl]) then exit; // + IncPaintLock; case Key of VK_ADD: if Font.Size < 50 then Font.Size := Font.Size + 1; VK_SUBTRACT: if Font.Size > 3 then Font.Size := Font.Size - 1; VK_DECIMAL: Font.Size := fDefaultFontSize; end; + DecPaintLock; TCEEditorHintWindow.FontSize := Font.Size; fCanShowHint:=false; fDDocWin.Hide; @@ -617,18 +620,20 @@ end; function TCESynMemo.getMouseFileBytePos: Integer; var - i, len: Integer; + i, len, llen: Integer; begin result := 0; - //len := getLineEndingLength(fFilename); + if fMousePos.y-1 > Lines.Count-1 then exit; + llen := length(Lines.Strings[fMousePos.y-1]); + if fMousePos.X > llen then exit; + // + // something note really clear: + // TCEEditorWidget.getSymbolLoc works when using the line ending from the filename. + // TCESynMemo.getMouseFileBytePos works when using the line ending from the system. len := getSysLineEndLen; - - for i:= 0 to fMousePos.y-2 do result += length(Lines.Strings[i]) + len; result += fMousePos.x; - - //getMessageDisplay.message(format('%d - %d : %d',[fMousePos.x, fMousePos.y, result]),nil,amcMisc,amkBub); end; procedure TCESynMemo.MouseMove(Shift: TShiftState; X, Y: Integer);