mirror of https://gitlab.com/basile.b/dexed.git
add editor commands to change sel/word case, close #87
This commit is contained in:
parent
51b70a8d76
commit
0d767dd129
|
@ -115,11 +115,11 @@ inherited CEEditorWidget: TCEEditorWidget
|
||||||
Caption = '-'
|
Caption = '-'
|
||||||
end
|
end
|
||||||
object mnuedUpcase: TMenuItem
|
object mnuedUpcase: TMenuItem
|
||||||
Caption = 'Upper case selection'
|
Caption = 'Upper case'
|
||||||
OnClick = mnuedUpcaseClick
|
OnClick = mnuedUpcaseClick
|
||||||
end
|
end
|
||||||
object mnuedLowcase: TMenuItem
|
object mnuedLowcase: TMenuItem
|
||||||
Caption = 'Lower case selection'
|
Caption = 'Lower case'
|
||||||
OnClick = mnuedLowcaseClick
|
OnClick = mnuedLowcaseClick
|
||||||
end
|
end
|
||||||
object MenuItem7: TMenuItem
|
object MenuItem7: TMenuItem
|
||||||
|
@ -137,7 +137,7 @@ inherited CEEditorWidget: TCEEditorWidget
|
||||||
Caption = 'Invert version all none'
|
Caption = 'Invert version all none'
|
||||||
OnClick = mnuedInvAllNoneClick
|
OnClick = mnuedInvAllNoneClick
|
||||||
end
|
end
|
||||||
object MenuItem1: TMenuItem
|
object MenuItem12: TMenuItem
|
||||||
Caption = '-'
|
Caption = '-'
|
||||||
end
|
end
|
||||||
object mnuedRename: TMenuItem
|
object mnuedRename: TMenuItem
|
||||||
|
|
|
@ -52,9 +52,9 @@ type
|
||||||
{ TCEEditorWidget }
|
{ TCEEditorWidget }
|
||||||
|
|
||||||
TCEEditorWidget = class(TCEWidget, ICEDocumentObserver, ICEMultiDocHandler, ICEProjectObserver)
|
TCEEditorWidget = class(TCEWidget, ICEDocumentObserver, ICEMultiDocHandler, ICEProjectObserver)
|
||||||
MenuItem1: TMenuItem;
|
|
||||||
MenuItem10: TMenuItem;
|
MenuItem10: TMenuItem;
|
||||||
MenuItem11: TMenuItem;
|
MenuItem11: TMenuItem;
|
||||||
|
MenuItem12: TMenuItem;
|
||||||
mnuedNextCarea: TMenuItem;
|
mnuedNextCarea: TMenuItem;
|
||||||
mnuedPrevCarea: TMenuItem;
|
mnuedPrevCarea: TMenuItem;
|
||||||
mnuedLowcase: TMenuItem;
|
mnuedLowcase: TMenuItem;
|
||||||
|
@ -831,15 +831,14 @@ end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.mnuedUpcaseClick(Sender: TObject);
|
procedure TCEEditorWidget.mnuedUpcaseClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
//TODO-ceditor: case-related commands are not implemented in synedit
|
|
||||||
if fDoc.isNotNil then
|
if fDoc.isNotNil then
|
||||||
fDoc.ExecuteCommand(ecLowerCaseBlock, #0, nil);
|
fDoc.CommandProcessor(ecUpperCaseWordOrSel, #0, nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.mnuedLowcaseClick(Sender: TObject);
|
procedure TCEEditorWidget.mnuedLowcaseClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if fDoc.isNotNil then
|
if fDoc.isNotNil then
|
||||||
fDoc.ExecuteCommand(ecUpperCaseBlock, #0, nil);
|
fDoc.CommandProcessor(ecLowerCaseWordOrSel, #0, nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.mnuedNextCareaClick(Sender: TObject);
|
procedure TCEEditorWidget.mnuedNextCareaClick(Sender: TObject);
|
||||||
|
|
|
@ -9,7 +9,7 @@ uses
|
||||||
SynEdit, SynPluginSyncroEdit, SynCompletion, SynEditKeyCmds, LazSynEditText,
|
SynEdit, SynPluginSyncroEdit, SynCompletion, SynEditKeyCmds, LazSynEditText,
|
||||||
SynHighlighterLFM, SynEditHighlighter, SynEditMouseCmds, SynEditFoldedView,
|
SynHighlighterLFM, SynEditHighlighter, SynEditMouseCmds, SynEditFoldedView,
|
||||||
SynEditMarks, SynEditTypes, SynHighlighterJScript, SynBeautifier, dialogs,
|
SynEditMarks, SynEditTypes, SynHighlighterJScript, SynBeautifier, dialogs,
|
||||||
fpjson, jsonparser,
|
fpjson, jsonparser, LazUTF8,
|
||||||
ce_common, ce_writableComponent, ce_d2syn, ce_txtsyn, ce_dialogs,
|
ce_common, ce_writableComponent, ce_d2syn, ce_txtsyn, ce_dialogs,
|
||||||
ce_sharedres, ce_dlang, ce_stringrange;
|
ce_sharedres, ce_dlang, ce_stringrange;
|
||||||
|
|
||||||
|
@ -195,6 +195,7 @@ type
|
||||||
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
procedure gotoToChangedArea(next: boolean);
|
procedure gotoToChangedArea(next: boolean);
|
||||||
procedure autoClosePair(value: TAutoClosedPair);
|
procedure autoClosePair(value: TAutoClosedPair);
|
||||||
|
procedure setSelectionOrWordCase(upper: boolean);
|
||||||
protected
|
protected
|
||||||
procedure DoEnter; override;
|
procedure DoEnter; override;
|
||||||
procedure DoExit; override;
|
procedure DoExit; override;
|
||||||
|
@ -289,6 +290,8 @@ const
|
||||||
ecShowPhobosDoc = ecUserFirst + 14;
|
ecShowPhobosDoc = ecUserFirst + 14;
|
||||||
ecPreviousChangedArea = ecUserFirst + 15;
|
ecPreviousChangedArea = ecUserFirst + 15;
|
||||||
ecNextChangedArea = ecUserFirst + 16;
|
ecNextChangedArea = ecUserFirst + 16;
|
||||||
|
ecUpperCaseWordOrSel = ecUserFirst + 17;
|
||||||
|
ecLowerCaseWordOrSel = ecUserFirst + 18;
|
||||||
|
|
||||||
var
|
var
|
||||||
D2Syn: TSynD2Syn; // used as model to set the options when no editor exists.
|
D2Syn: TSynD2Syn; // used as model to set the options when no editor exists.
|
||||||
|
@ -787,6 +790,8 @@ begin
|
||||||
AddKey(ecShowPhobosDoc, VK_F1, [], 0, []);
|
AddKey(ecShowPhobosDoc, VK_F1, [], 0, []);
|
||||||
AddKey(ecPreviousChangedArea, VK_UP, [ssAlt], 0, []);
|
AddKey(ecPreviousChangedArea, VK_UP, [ssAlt], 0, []);
|
||||||
AddKey(ecNextChangedArea, VK_DOWN, [ssAlt], 0, []);
|
AddKey(ecNextChangedArea, VK_DOWN, [ssAlt], 0, []);
|
||||||
|
addKey(ecLowerCaseWordOrSel, 0, [], 0, []);
|
||||||
|
addKey(ecUpperCaseWordOrSel, 0, [], 0, []);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -809,6 +814,8 @@ begin
|
||||||
'ecShowPhobosDoc': begin Int := ecShowPhobosDoc; exit(true); end;
|
'ecShowPhobosDoc': begin Int := ecShowPhobosDoc; exit(true); end;
|
||||||
'ecNextChangedArea': begin Int := ecNextChangedArea; exit(true); end;
|
'ecNextChangedArea': begin Int := ecNextChangedArea; exit(true); end;
|
||||||
'ecPreviousChangedArea':begin Int := ecPreviousChangedArea; exit(true); end;
|
'ecPreviousChangedArea':begin Int := ecPreviousChangedArea; exit(true); end;
|
||||||
|
'ecUpperCaseWordOrSel': begin Int := ecUpperCaseWordOrSel; exit(true); end;
|
||||||
|
'ecLowerCaseWordOrSel': begin Int := ecLowerCaseWordOrSel; exit(true); end;
|
||||||
else exit(false);
|
else exit(false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -832,6 +839,8 @@ begin
|
||||||
ecShowPhobosDoc: begin Ident := 'ecShowPhobosDoc'; exit(true); end;
|
ecShowPhobosDoc: begin Ident := 'ecShowPhobosDoc'; exit(true); end;
|
||||||
ecNextChangedArea: begin Ident := 'ecNextChangedArea'; exit(true); end;
|
ecNextChangedArea: begin Ident := 'ecNextChangedArea'; exit(true); end;
|
||||||
ecPreviousChangedArea:begin Ident := 'ecPreviousChangedArea'; exit(true); end;
|
ecPreviousChangedArea:begin Ident := 'ecPreviousChangedArea'; exit(true); end;
|
||||||
|
ecUpperCaseWordOrSel: begin Ident := 'ecUpperCaseWordOrSel'; exit(true); end;
|
||||||
|
ecLowerCaseWordOrSel: begin Ident := 'ecLowerCaseWordOrSel'; exit(true); end;
|
||||||
else exit(false);
|
else exit(false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -885,6 +894,10 @@ begin
|
||||||
gotoToChangedArea(true);
|
gotoToChangedArea(true);
|
||||||
ecPreviousChangedArea:
|
ecPreviousChangedArea:
|
||||||
gotoToChangedArea(false);
|
gotoToChangedArea(false);
|
||||||
|
ecUpperCaseWordOrSel:
|
||||||
|
setSelectionOrWordCase(true);
|
||||||
|
ecLowerCaseWordOrSel:
|
||||||
|
setSelectionOrWordCase(false);
|
||||||
end;
|
end;
|
||||||
if fOverrideColMode and not SelAvail then
|
if fOverrideColMode and not SelAvail then
|
||||||
begin
|
begin
|
||||||
|
@ -1402,6 +1415,44 @@ begin
|
||||||
ExecuteCommand(ecLeft, #0, nil);
|
ExecuteCommand(ecLeft, #0, nil);
|
||||||
EndUndoBlock;
|
EndUndoBlock;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.setSelectionOrWordCase(upper: boolean);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
txt: string;
|
||||||
|
begin
|
||||||
|
if SelAvail then
|
||||||
|
begin
|
||||||
|
BeginUndoBlock;
|
||||||
|
case upper of
|
||||||
|
false: txt := UTF8LowerString(SelText);
|
||||||
|
true: txt := UTF8UpperString(SelText);
|
||||||
|
end;
|
||||||
|
ExecuteCommand(ecBlockDelete, #0, nil);
|
||||||
|
for i:= 1 to txt.length do
|
||||||
|
case txt[i] of
|
||||||
|
#13: continue;
|
||||||
|
#10: ExecuteCommand(ecLineBreak, #0, nil);
|
||||||
|
else ExecuteCommand(ecChar, txt[i], nil);
|
||||||
|
end;
|
||||||
|
EndUndoBlock;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
txt := GetWordAtRowCol(LogicalCaretXY);
|
||||||
|
if txt.isBlank then
|
||||||
|
exit;
|
||||||
|
BeginUndoBlock;
|
||||||
|
ExecuteCommand(ecWordLeft, #0, nil);
|
||||||
|
case upper of
|
||||||
|
false: txt := UTF8LowerString(txt);
|
||||||
|
true: txt := UTF8UpperString(txt);
|
||||||
|
end;
|
||||||
|
ExecuteCommand(ecDeleteWord, #0, nil);
|
||||||
|
for i:= 1 to txt.length do
|
||||||
|
ExecuteCommand(ecChar, txt[i], nil);
|
||||||
|
EndUndoBlock;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION DDoc & CallTip --------------------------------------------------------}
|
{$REGION DDoc & CallTip --------------------------------------------------------}
|
||||||
|
|
Loading…
Reference in New Issue