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 = '-'
|
||||
end
|
||||
object mnuedUpcase: TMenuItem
|
||||
Caption = 'Upper case selection'
|
||||
Caption = 'Upper case'
|
||||
OnClick = mnuedUpcaseClick
|
||||
end
|
||||
object mnuedLowcase: TMenuItem
|
||||
Caption = 'Lower case selection'
|
||||
Caption = 'Lower case'
|
||||
OnClick = mnuedLowcaseClick
|
||||
end
|
||||
object MenuItem7: TMenuItem
|
||||
|
@ -137,7 +137,7 @@ inherited CEEditorWidget: TCEEditorWidget
|
|||
Caption = 'Invert version all none'
|
||||
OnClick = mnuedInvAllNoneClick
|
||||
end
|
||||
object MenuItem1: TMenuItem
|
||||
object MenuItem12: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object mnuedRename: TMenuItem
|
||||
|
|
|
@ -52,9 +52,9 @@ type
|
|||
{ TCEEditorWidget }
|
||||
|
||||
TCEEditorWidget = class(TCEWidget, ICEDocumentObserver, ICEMultiDocHandler, ICEProjectObserver)
|
||||
MenuItem1: TMenuItem;
|
||||
MenuItem10: TMenuItem;
|
||||
MenuItem11: TMenuItem;
|
||||
MenuItem12: TMenuItem;
|
||||
mnuedNextCarea: TMenuItem;
|
||||
mnuedPrevCarea: TMenuItem;
|
||||
mnuedLowcase: TMenuItem;
|
||||
|
@ -831,15 +831,14 @@ end;
|
|||
|
||||
procedure TCEEditorWidget.mnuedUpcaseClick(Sender: TObject);
|
||||
begin
|
||||
//TODO-ceditor: case-related commands are not implemented in synedit
|
||||
if fDoc.isNotNil then
|
||||
fDoc.ExecuteCommand(ecLowerCaseBlock, #0, nil);
|
||||
fDoc.CommandProcessor(ecUpperCaseWordOrSel, #0, nil);
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.mnuedLowcaseClick(Sender: TObject);
|
||||
begin
|
||||
if fDoc.isNotNil then
|
||||
fDoc.ExecuteCommand(ecUpperCaseBlock, #0, nil);
|
||||
fDoc.CommandProcessor(ecLowerCaseWordOrSel, #0, nil);
|
||||
end;
|
||||
|
||||
procedure TCEEditorWidget.mnuedNextCareaClick(Sender: TObject);
|
||||
|
|
|
@ -9,7 +9,7 @@ uses
|
|||
SynEdit, SynPluginSyncroEdit, SynCompletion, SynEditKeyCmds, LazSynEditText,
|
||||
SynHighlighterLFM, SynEditHighlighter, SynEditMouseCmds, SynEditFoldedView,
|
||||
SynEditMarks, SynEditTypes, SynHighlighterJScript, SynBeautifier, dialogs,
|
||||
fpjson, jsonparser,
|
||||
fpjson, jsonparser, LazUTF8,
|
||||
ce_common, ce_writableComponent, ce_d2syn, ce_txtsyn, ce_dialogs,
|
||||
ce_sharedres, ce_dlang, ce_stringrange;
|
||||
|
||||
|
@ -195,6 +195,7 @@ type
|
|||
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
procedure gotoToChangedArea(next: boolean);
|
||||
procedure autoClosePair(value: TAutoClosedPair);
|
||||
procedure setSelectionOrWordCase(upper: boolean);
|
||||
protected
|
||||
procedure DoEnter; override;
|
||||
procedure DoExit; override;
|
||||
|
@ -289,6 +290,8 @@ const
|
|||
ecShowPhobosDoc = ecUserFirst + 14;
|
||||
ecPreviousChangedArea = ecUserFirst + 15;
|
||||
ecNextChangedArea = ecUserFirst + 16;
|
||||
ecUpperCaseWordOrSel = ecUserFirst + 17;
|
||||
ecLowerCaseWordOrSel = ecUserFirst + 18;
|
||||
|
||||
var
|
||||
D2Syn: TSynD2Syn; // used as model to set the options when no editor exists.
|
||||
|
@ -787,6 +790,8 @@ begin
|
|||
AddKey(ecShowPhobosDoc, VK_F1, [], 0, []);
|
||||
AddKey(ecPreviousChangedArea, VK_UP, [ssAlt], 0, []);
|
||||
AddKey(ecNextChangedArea, VK_DOWN, [ssAlt], 0, []);
|
||||
addKey(ecLowerCaseWordOrSel, 0, [], 0, []);
|
||||
addKey(ecUpperCaseWordOrSel, 0, [], 0, []);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -809,6 +814,8 @@ begin
|
|||
'ecShowPhobosDoc': begin Int := ecShowPhobosDoc; exit(true); end;
|
||||
'ecNextChangedArea': begin Int := ecNextChangedArea; 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);
|
||||
end;
|
||||
end;
|
||||
|
@ -832,6 +839,8 @@ begin
|
|||
ecShowPhobosDoc: begin Ident := 'ecShowPhobosDoc'; exit(true); end;
|
||||
ecNextChangedArea: begin Ident := 'ecNextChangedArea'; 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);
|
||||
end;
|
||||
end;
|
||||
|
@ -885,6 +894,10 @@ begin
|
|||
gotoToChangedArea(true);
|
||||
ecPreviousChangedArea:
|
||||
gotoToChangedArea(false);
|
||||
ecUpperCaseWordOrSel:
|
||||
setSelectionOrWordCase(true);
|
||||
ecLowerCaseWordOrSel:
|
||||
setSelectionOrWordCase(false);
|
||||
end;
|
||||
if fOverrideColMode and not SelAvail then
|
||||
begin
|
||||
|
@ -1402,6 +1415,44 @@ begin
|
|||
ExecuteCommand(ecLeft, #0, nil);
|
||||
EndUndoBlock;
|
||||
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}
|
||||
|
||||
{$REGION DDoc & CallTip --------------------------------------------------------}
|
||||
|
|
Loading…
Reference in New Issue