IDE: added source editor sub menu encoding

git-svn-id: trunk@14901 -
This commit is contained in:
mattias 2008-04-19 20:22:16 +00:00
parent e077548771
commit 80191042b6
3 changed files with 95 additions and 3 deletions

View File

@ -44,7 +44,7 @@ uses
Classes, SysUtils, Math, Controls, LCLProc, LCLType, LResources, LCLIntf,
FileUtil, Forms, Buttons, ComCtrls, Dialogs, StdCtrls, GraphType, Graphics,
Translations, ClipBrd, TypInfo, Extctrls, Menus, HelpIntfs, LazHelpIntf,
LDockCtrl,
LConvEncoding, LDockCtrl,
// codetools
CodeToolManager, CodeCache, SourceLog,
// synedit
@ -434,6 +434,7 @@ type
procedure BookmarkSetFreeClicked(Sender: TObject);
procedure BookMarkToggle(Value: Integer);
procedure EditorPropertiesClicked(Sender: TObject);
procedure EncodingClicked(Sender: TObject);
procedure HighlighterClicked(Sender: TObject);
procedure FindDeclarationClicked(Sender: TObject);
procedure ProcedureJumpClicked(Sender: TObject);
@ -514,6 +515,7 @@ type
// PopupMenu
procedure BuildPopupMenu;
procedure UpdateHighlightMenuItems;
procedure UpdateEncodingMenuItems;
procedure RemoveUserDefinedMenuItems;
function AddUserDefinedPopupMenuItem(const NewCaption: string;
const NewEnabled: boolean;
@ -1020,6 +1022,8 @@ begin
uemShowUnitInfo);
SrcEditSubMenuHighlighter:=RegisterIDESubMenu(AParent,'Highlighter',
uemHighlighter);
SrcEditSubMenuEncoding:=RegisterIDESubMenu(AParent,'Encoding',
'Encoding');
SrcEditMenuEditorProperties:=RegisterIDEMenuCommand(SourceEditorMenuRoot,
'EditorProperties',uemEditorProperties, nil, nil, nil, 'menu_editor_options');
@ -1028,7 +1032,6 @@ begin
{$IFNDEF EnableIDEDocking}
SrcEditMenuDocking.Visible:=false;
{$ENDIF}
end;
{ TSourceEditor }
@ -3836,6 +3839,31 @@ begin
FOnEditorPropertiesClicked(Sender);
end;
procedure TSourceNotebook.EncodingClicked(Sender: TObject);
var
IDEMenuItem: TIDEMenuItem;
SrcEdit: TSourceEditor;
NewEncoding: String;
OldEncoding: String;
begin
SrcEdit:=GetActiveSE;
if SrcEdit=nil then exit;
if Sender is TIDEMenuItem then begin
IDEMenuItem:=TIDEMenuItem(Sender);
NewEncoding:=IDEMenuItem.Caption;
DebugLn(['TSourceNotebook.EncodingClicked ',NewEncoding]);
if SrcEdit.CodeBuffer<>nil then begin
OldEncoding:=NormalizeEncoding(SrcEdit.CodeBuffer.DiskEncoding);
if OldEncoding='' then
OldEncoding:=GetSystemEncoding;
if NewEncoding<>SrcEdit.CodeBuffer.DiskEncoding then begin
DebugLn(['TSourceNotebook.EncodingClicked ToDo: change encoding']);
ShowMessage('Changing the encoding is not yet implemented. Please use tools like iconv or recode.');
end;
end;
end;
end;
procedure TSourceNotebook.HighlighterClicked(Sender: TObject);
var
IDEMenuItem: TIDEMenuItem;
@ -3843,13 +3871,14 @@ var
SrcEdit: TSourceEditor;
h: TLazSyntaxHighlighter;
begin
SrcEdit:=GetActiveSE;
if SrcEdit=nil then exit;
if Sender is TIDEMenuItem then begin
IDEMenuItem:=TIDEMenuItem(Sender);
i:=IDEMenuItem.SectionIndex;
if (i>=ord(Low(TLazSyntaxHighlighter)))
and (i<=ord(High(TLazSyntaxHighlighter))) then begin
h:=TLazSyntaxHighlighter(i);
SrcEdit:=GetActiveSE;
SrcEdit.SyntaxHighlighterType:=h;
end;
end;
@ -3897,6 +3926,7 @@ begin
SrcEditMenuReadOnly.MenuItem.Checked:=ASrcEdit.ReadOnly;
SrcEditMenuShowLineNumbers.MenuItem.Checked:=EditorComp.Gutter.ShowLineNumbers;
UpdateHighlightMenuItems;
UpdateEncodingMenuItems;
// bookmarks
for BookMarkID:=0 to 9 do begin
@ -4155,6 +4185,49 @@ begin
end;
end;
procedure TSourceNotebook.UpdateEncodingMenuItems;
var
List: TStringList;
i: Integer;
SrcEdit: TSourceEditor;
Encoding: String;
CurEncoding: string;
CurName: String;
CurCaption: String;
IDEMenuItem: TIDEMenuItem;
begin
SrcEditSubMenuEncoding.ChildsAsSubMenu:=true;
SrcEdit:=GetActiveSE;
Encoding:='';
if SrcEdit<>nil then begin
if SrcEdit.CodeBuffer<>nil then
Encoding:=NormalizeEncoding(SrcEdit.CodeBuffer.DiskEncoding);
end;
if Encoding='' then
Encoding:=GetSystemEncoding;
//DebugLn(['TSourceNotebook.UpdateEncodingMenuItems ',Encoding]);
List:=TStringList.Create;
GetSupportedEncodings(List);
for i:=0 to List.Count-1 do begin
CurName:='Encoding'+IntToStr(i);
CurEncoding:=List[i];
CurCaption:=CurEncoding;
if SrcEditSubMenuEncoding.Count=i then begin
// add new item
IDEMenuItem:=RegisterIDEMenuCommand(SrcEditSubMenuEncoding,
CurName,CurCaption,@EncodingClicked);
end else begin
IDEMenuItem:=SrcEditSubMenuEncoding[i];
IDEMenuItem.Caption:=CurCaption;
IDEMenuItem.OnClick:=@EncodingClicked;
end;
if IDEMenuItem is TIDEMenuCommand then
TIDEMenuCommand(IDEMenuItem).Checked:=
Encoding=NormalizeEncoding(CurEncoding);
end;
List.Free;
end;
procedure TSourceNotebook.RemoveUserDefinedMenuItems;
begin
SrcEditMenuSectionFirstDynamic.Clear;

View File

@ -383,6 +383,7 @@ var
SrcEditSubMenuRefactor: TIDEMenuSection;
SrcEditSubMenuFlags: TIDEMenuSection;
SrcEditSubMenuHighlighter: TIDEMenuSection;
SrcEditSubMenuEncoding: TIDEMenuSection;
// Messages window popupmenu
MessagesMenuRoot: TIDEMenuSection = nil;

View File

@ -78,6 +78,7 @@ function UTF8ToCP874(const s: string): string; // thai
function UTF8ToSingleByte(const s: string;
const UTF8CharConvFunc: TUnicodeToCharID): string;
procedure GetSupportedEncodings(List: TStrings);
implementation
@ -3721,6 +3722,23 @@ begin
SetLength(Result,Dest-PChar(Result));
end;
procedure GetSupportedEncodings(List: TStrings);
begin
List.Add('UTF-8');
List.Add('Ansi');
List.Add('CP1250');
List.Add('CP1251');
List.Add('CP1252');
List.Add('CP1253');
List.Add('CP1254');
List.Add('CP1255');
List.Add('CP1256');
List.Add('CP1257');
List.Add('CP1258');
List.Add('CP874');
List.Add('ISO-8859-1');
end;
function Utf2Cp1251(s:string):string;
var i:integer;
Skip,DSkip:boolean;