mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-08 15:36:03 +02:00
IDE: add "Swap case in selection" feature to edit menu.
git-svn-id: trunk@29766 -
This commit is contained in:
parent
9db82a2373
commit
611aafbe09
@ -2012,6 +2012,7 @@ begin
|
||||
// edit menu
|
||||
ecSelectionUpperCase : Result:= lisMenuUpperCaseSelection;
|
||||
ecSelectionLowerCase : Result:= lisMenuLowerCaseSelection;
|
||||
ecSelectionSwapCase : Result:= lisMenuSwapCaseSelection;
|
||||
ecSelectionTabs2Spaces : Result:= srkmecSelectionTabs2Spaces;
|
||||
ecSelectionEnclose : Result:= lisMenuEncloseSelection;
|
||||
ecSelectionComment : Result:= lisMenuCommentSelection;
|
||||
@ -2432,6 +2433,7 @@ begin
|
||||
AddDefault(C, 'Unindent block', srkmecBlockUnindent, ecBlockUnindent);
|
||||
AddDefault(C, 'Uppercase selection', lisMenuUpperCaseSelection, ecSelectionUpperCase);
|
||||
AddDefault(C, 'Lowercase selection', lisMenuLowerCaseSelection, ecSelectionLowerCase);
|
||||
AddDefault(C, 'Swap case in selection', lisMenuSwapCaseSelection, ecSelectionSwapCase);
|
||||
AddDefault(C, 'Convert tabs to spaces in selection',
|
||||
srkmecSelectionTabs2Spaces, ecSelectionTabs2Spaces);
|
||||
AddDefault(C, 'Enclose selection', lisKMEncloseSelection, ecSelectionEnclose);
|
||||
|
@ -197,6 +197,7 @@ resourcestring
|
||||
lisMenuUnindentSelection = 'Unindent selection';
|
||||
lisMenuUpperCaseSelection = 'Uppercase selection';
|
||||
lisMenuLowerCaseSelection = 'Lowercase selection';
|
||||
lisMenuSwapCaseSelection = 'Swap case in selection';
|
||||
lisMenuTabsToSpacesSelection = 'Tabs to spaces in selection';
|
||||
lisMenuEncloseSelection = 'Enclose selection ...';
|
||||
lisMenuCommentSelection = 'Comment selection';
|
||||
|
@ -214,6 +214,7 @@ type
|
||||
procedure mnuEditSortBlockClicked(Sender: TObject);
|
||||
procedure mnuEditUpperCaseBlockClicked(Sender: TObject);
|
||||
procedure mnuEditLowerCaseBlockClicked(Sender: TObject);
|
||||
procedure mnuEditSwapCaseBlockClicked(Sender: TObject);
|
||||
procedure mnuEditTabsToSpacesBlockClicked(Sender: TObject);
|
||||
procedure mnuEditSelectionBreakLinesClicked(Sender: TObject);
|
||||
|
||||
@ -2391,6 +2392,7 @@ begin
|
||||
itmEditSortBlock.OnClick:=@mnuEditSortBlockClicked;
|
||||
itmEditUpperCaseBlock.OnClick:=@mnuEditUpperCaseBlockClicked;
|
||||
itmEditLowerCaseBlock.OnClick:=@mnuEditLowerCaseBlockClicked;
|
||||
itmEditSwapCaseBlock.OnClick:=@mnuEditSwapCaseBlockClicked;
|
||||
itmEditTabsToSpacesBlock.OnClick:=@mnuEditTabsToSpacesBlockClicked;
|
||||
itmEditSelectionBreakLines.OnClick:=@mnuEditSelectionBreakLinesClicked;
|
||||
end;
|
||||
@ -3759,6 +3761,7 @@ begin
|
||||
itmEditSortBlock.Enabled:=SelEditable;
|
||||
itmEditUpperCaseBlock.Enabled:=SelEditable;
|
||||
itmEditLowerCaseBlock.Enabled:=SelEditable;
|
||||
itmEditSwapCaseBlock.Enabled:=SelEditable;
|
||||
itmEditTabsToSpacesBlock.Enabled:=SelEditable;
|
||||
itmEditSelectionBreakLines.Enabled:=SelEditable;
|
||||
end;
|
||||
@ -17563,6 +17566,11 @@ begin
|
||||
DoSourceEditorCommand(ecSelectionLowerCase);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSwapCaseBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoSourceEditorCommand(ecSelectionSwapCase);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditTabsToSpacesBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoSourceEditorCommand(ecSelectionTabs2Spaces);
|
||||
|
@ -123,6 +123,7 @@ type
|
||||
itmEditSortBlock: TIDEMenuCommand;
|
||||
itmEditUpperCaseBlock: TIDEMenuCommand;
|
||||
itmEditLowerCaseBlock: TIDEMenuCommand;
|
||||
itmEditSwapCaseBlock: TIDEMenuCommand;
|
||||
itmEditTabsToSpacesBlock: TIDEMenuCommand;
|
||||
itmEditSelectionBreakLines: TIDEMenuCommand;
|
||||
|
||||
|
@ -438,6 +438,7 @@ begin
|
||||
CreateMenuItem(ParentMI,itmEditSortBlock,'itmEditSortBlock',lisMenuSortSelection, 'menu_edit_sort');
|
||||
CreateMenuItem(ParentMI,itmEditUpperCaseBlock,'itmEditUpperCaseBlock',lisMenuUpperCaseSelection, 'menu_edit_uppercase');
|
||||
CreateMenuItem(ParentMI,itmEditLowerCaseBlock,'itmEditLowerCaseBlock',lisMenuLowerCaseSelection, 'menu_edit_lowercase');
|
||||
CreateMenuItem(ParentMI,itmEditSwapCaseBlock,'itmEditSwapCaseBlock',lisMenuSwapCaseSelection, 'menu_edit_uppercase');
|
||||
CreateMenuItem(ParentMI,itmEditTabsToSpacesBlock,'itmEditTabsToSpacesBlock',lisMenuTabsToSpacesSelection);
|
||||
CreateMenuItem(ParentMI,itmEditSelectionBreakLines,'itmEditSelectionBreakLines',lisMenuBeakLinesInSelection);
|
||||
end;
|
||||
@ -863,6 +864,7 @@ begin
|
||||
itmEditSortBlock.Command:=GetCommand(ecSelectionSort);
|
||||
itmEditUpperCaseBlock.Command:=GetCommand(ecSelectionUpperCase);
|
||||
itmEditLowerCaseBlock.Command:=GetCommand(ecSelectionLowerCase);
|
||||
itmEditSwapCaseBlock.Command:=GetCommand(ecSelectionSwapCase);
|
||||
itmEditTabsToSpacesBlock.Command:=GetCommand(ecSelectionTabs2Spaces);
|
||||
itmEditSelectionBreakLines.Command:=GetCommand(ecSelectionBreakLines);
|
||||
|
||||
|
@ -369,6 +369,7 @@ type
|
||||
procedure EncloseSelection;
|
||||
procedure UpperCaseSelection;
|
||||
procedure LowerCaseSelection;
|
||||
procedure SwapCaseSelection;
|
||||
procedure TabsToSpacesInSelection;
|
||||
procedure CommentSelection;
|
||||
procedure UncommentSelection;
|
||||
@ -3012,6 +3013,9 @@ Begin
|
||||
ecSelectionLowerCase:
|
||||
LowerCaseSelection;
|
||||
|
||||
ecSelectionSwapCase:
|
||||
SwapCaseSelection;
|
||||
|
||||
ecSelectionTabs2Spaces:
|
||||
TabsToSpacesInSelection;
|
||||
|
||||
@ -3208,6 +3212,26 @@ begin
|
||||
FEditor.EndUpdate;
|
||||
end;
|
||||
|
||||
procedure TSourceEditor.SwapCaseSelection;
|
||||
var
|
||||
OldBlockBegin, OldBlockEnd: TPoint;
|
||||
OldMode: TSynSelectionMode;
|
||||
begin
|
||||
if ReadOnly then exit;
|
||||
if not EditorComponent.SelAvail then exit;
|
||||
OldBlockBegin:=FEditor.BlockBegin;
|
||||
OldBlockEnd:=FEditor.BlockEnd;
|
||||
OldMode:=FEditor.SelectionMode;
|
||||
FEditor.BeginUpdate;
|
||||
FEditor.BeginUndoBlock;
|
||||
FEditor.SelText:=SwapCase(EditorComponent.SelText);
|
||||
FEditor.BlockBegin:=OldBlockBegin;
|
||||
FEditor.BlockEnd:=OldBlockEnd;
|
||||
FEditor.SelectionMode := OldMode;
|
||||
FEditor.EndUndoBlock;
|
||||
FEditor.EndUpdate;
|
||||
end;
|
||||
|
||||
{-------------------------------------------------------------------------------
|
||||
method TSourceEditor.TabsToSpacesInSelection
|
||||
|
||||
|
@ -85,19 +85,20 @@ const
|
||||
// edit selection
|
||||
ecSelectionUpperCase = ecFirstLazarus + 50;
|
||||
ecSelectionLowerCase = ecFirstLazarus + 51;
|
||||
ecSelectionTabs2Spaces = ecFirstLazarus + 52;
|
||||
ecSelectionEnclose = ecFirstLazarus + 53;
|
||||
ecSelectionComment = ecFirstLazarus + 54;
|
||||
ecSelectionUncomment = ecFirstLazarus + 55;
|
||||
ecSelectionSort = ecFirstLazarus + 56;
|
||||
ecSelectionBreakLines = ecFirstLazarus + 57;
|
||||
ecSelectToBrace = ecFirstLazarus + 58;
|
||||
ecSelectCodeBlock = ecFirstLazarus + 59;
|
||||
ecSelectWord = ecFirstLazarus + 60;
|
||||
ecSelectLine = ecFirstLazarus + 61;
|
||||
ecSelectParagraph = ecFirstLazarus + 62;
|
||||
ecSelectionConditional = ecFirstLazarus + 63;
|
||||
ecToggleComment = ecFirstLazarus + 64;
|
||||
ecSelectionSwapCase = ecFirstLazarus + 52;
|
||||
ecSelectionTabs2Spaces = ecFirstLazarus + 53;
|
||||
ecSelectionEnclose = ecFirstLazarus + 54;
|
||||
ecSelectionComment = ecFirstLazarus + 55;
|
||||
ecSelectionUncomment = ecFirstLazarus + 56;
|
||||
ecSelectionSort = ecFirstLazarus + 57;
|
||||
ecSelectionBreakLines = ecFirstLazarus + 58;
|
||||
ecSelectToBrace = ecFirstLazarus + 59;
|
||||
ecSelectCodeBlock = ecFirstLazarus + 60;
|
||||
ecSelectWord = ecFirstLazarus + 61;
|
||||
ecSelectLine = ecFirstLazarus + 62;
|
||||
ecSelectParagraph = ecFirstLazarus + 63;
|
||||
ecSelectionConditional = ecFirstLazarus + 64;
|
||||
ecToggleComment = ecFirstLazarus + 65;
|
||||
|
||||
// insert text
|
||||
ecInsertCharacter = ecFirstLazarus + 80;
|
||||
|
@ -293,6 +293,7 @@ function GetPart(const ASkipTo, AnEnd: String; var ASource: String;
|
||||
function GetPart(const ASkipTo, AnEnd: array of String; var ASource: String;
|
||||
const AnIgnoreCase: Boolean = False; const AnUpdateSource: Boolean = True): String;
|
||||
function TextToSingleLine(const AText: string): string;
|
||||
function SwapCase(Const S: String): String;
|
||||
|
||||
// case..of utility functions
|
||||
function StringCase(const AString: String; const ACase: array of String {; const AIgnoreCase = False, APartial = false: Boolean}): Integer; overload;
|
||||
@ -3222,6 +3223,25 @@ begin
|
||||
Result := str;
|
||||
end;
|
||||
|
||||
function SwapCase(Const S: String): String;
|
||||
// Inverts the character case. Like LowerCase and UpperCase combined.
|
||||
var
|
||||
i : Integer;
|
||||
P : PChar;
|
||||
begin
|
||||
Result := S;
|
||||
if not assigned(pointer(result)) then exit;
|
||||
UniqueString(Result);
|
||||
P:=Pchar(pointer(Result));
|
||||
for i := 1 to Length(Result) do begin
|
||||
if (P^ in ['a'..'z']) then
|
||||
P^ := char(byte(p^) - 32)
|
||||
else if (P^ in ['A'..'Z']) then
|
||||
P^ := char(byte(p^) + 32);
|
||||
Inc(P);
|
||||
end;
|
||||
end;
|
||||
|
||||
function StringCase(const AString: String; const ACase: array of String {; const AIgnoreCase = False, APartial = false: Boolean}): Integer;
|
||||
begin
|
||||
Result := StringCase(AString, ACase, False, False);
|
||||
|
Loading…
Reference in New Issue
Block a user