IDE: add "Swap case in selection" feature to edit menu.

git-svn-id: trunk@29766 -
This commit is contained in:
juha 2011-03-09 14:12:45 +00:00
parent 9db82a2373
commit 611aafbe09
8 changed files with 72 additions and 13 deletions

View File

@ -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);

View File

@ -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';

View File

@ -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);

View File

@ -123,6 +123,7 @@ type
itmEditSortBlock: TIDEMenuCommand;
itmEditUpperCaseBlock: TIDEMenuCommand;
itmEditLowerCaseBlock: TIDEMenuCommand;
itmEditSwapCaseBlock: TIDEMenuCommand;
itmEditTabsToSpacesBlock: TIDEMenuCommand;
itmEditSelectionBreakLines: TIDEMenuCommand;

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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);