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, Classes, SysUtils, Math, Controls, LCLProc, LCLType, LResources, LCLIntf,
FileUtil, Forms, Buttons, ComCtrls, Dialogs, StdCtrls, GraphType, Graphics, FileUtil, Forms, Buttons, ComCtrls, Dialogs, StdCtrls, GraphType, Graphics,
Translations, ClipBrd, TypInfo, Extctrls, Menus, HelpIntfs, LazHelpIntf, Translations, ClipBrd, TypInfo, Extctrls, Menus, HelpIntfs, LazHelpIntf,
LDockCtrl, LConvEncoding, LDockCtrl,
// codetools // codetools
CodeToolManager, CodeCache, SourceLog, CodeToolManager, CodeCache, SourceLog,
// synedit // synedit
@ -434,6 +434,7 @@ type
procedure BookmarkSetFreeClicked(Sender: TObject); procedure BookmarkSetFreeClicked(Sender: TObject);
procedure BookMarkToggle(Value: Integer); procedure BookMarkToggle(Value: Integer);
procedure EditorPropertiesClicked(Sender: TObject); procedure EditorPropertiesClicked(Sender: TObject);
procedure EncodingClicked(Sender: TObject);
procedure HighlighterClicked(Sender: TObject); procedure HighlighterClicked(Sender: TObject);
procedure FindDeclarationClicked(Sender: TObject); procedure FindDeclarationClicked(Sender: TObject);
procedure ProcedureJumpClicked(Sender: TObject); procedure ProcedureJumpClicked(Sender: TObject);
@ -514,6 +515,7 @@ type
// PopupMenu // PopupMenu
procedure BuildPopupMenu; procedure BuildPopupMenu;
procedure UpdateHighlightMenuItems; procedure UpdateHighlightMenuItems;
procedure UpdateEncodingMenuItems;
procedure RemoveUserDefinedMenuItems; procedure RemoveUserDefinedMenuItems;
function AddUserDefinedPopupMenuItem(const NewCaption: string; function AddUserDefinedPopupMenuItem(const NewCaption: string;
const NewEnabled: boolean; const NewEnabled: boolean;
@ -1020,6 +1022,8 @@ begin
uemShowUnitInfo); uemShowUnitInfo);
SrcEditSubMenuHighlighter:=RegisterIDESubMenu(AParent,'Highlighter', SrcEditSubMenuHighlighter:=RegisterIDESubMenu(AParent,'Highlighter',
uemHighlighter); uemHighlighter);
SrcEditSubMenuEncoding:=RegisterIDESubMenu(AParent,'Encoding',
'Encoding');
SrcEditMenuEditorProperties:=RegisterIDEMenuCommand(SourceEditorMenuRoot, SrcEditMenuEditorProperties:=RegisterIDEMenuCommand(SourceEditorMenuRoot,
'EditorProperties',uemEditorProperties, nil, nil, nil, 'menu_editor_options'); 'EditorProperties',uemEditorProperties, nil, nil, nil, 'menu_editor_options');
@ -1028,7 +1032,6 @@ begin
{$IFNDEF EnableIDEDocking} {$IFNDEF EnableIDEDocking}
SrcEditMenuDocking.Visible:=false; SrcEditMenuDocking.Visible:=false;
{$ENDIF} {$ENDIF}
end; end;
{ TSourceEditor } { TSourceEditor }
@ -3836,6 +3839,31 @@ begin
FOnEditorPropertiesClicked(Sender); FOnEditorPropertiesClicked(Sender);
end; 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); procedure TSourceNotebook.HighlighterClicked(Sender: TObject);
var var
IDEMenuItem: TIDEMenuItem; IDEMenuItem: TIDEMenuItem;
@ -3843,13 +3871,14 @@ var
SrcEdit: TSourceEditor; SrcEdit: TSourceEditor;
h: TLazSyntaxHighlighter; h: TLazSyntaxHighlighter;
begin begin
SrcEdit:=GetActiveSE;
if SrcEdit=nil then exit;
if Sender is TIDEMenuItem then begin if Sender is TIDEMenuItem then begin
IDEMenuItem:=TIDEMenuItem(Sender); IDEMenuItem:=TIDEMenuItem(Sender);
i:=IDEMenuItem.SectionIndex; i:=IDEMenuItem.SectionIndex;
if (i>=ord(Low(TLazSyntaxHighlighter))) if (i>=ord(Low(TLazSyntaxHighlighter)))
and (i<=ord(High(TLazSyntaxHighlighter))) then begin and (i<=ord(High(TLazSyntaxHighlighter))) then begin
h:=TLazSyntaxHighlighter(i); h:=TLazSyntaxHighlighter(i);
SrcEdit:=GetActiveSE;
SrcEdit.SyntaxHighlighterType:=h; SrcEdit.SyntaxHighlighterType:=h;
end; end;
end; end;
@ -3897,6 +3926,7 @@ begin
SrcEditMenuReadOnly.MenuItem.Checked:=ASrcEdit.ReadOnly; SrcEditMenuReadOnly.MenuItem.Checked:=ASrcEdit.ReadOnly;
SrcEditMenuShowLineNumbers.MenuItem.Checked:=EditorComp.Gutter.ShowLineNumbers; SrcEditMenuShowLineNumbers.MenuItem.Checked:=EditorComp.Gutter.ShowLineNumbers;
UpdateHighlightMenuItems; UpdateHighlightMenuItems;
UpdateEncodingMenuItems;
// bookmarks // bookmarks
for BookMarkID:=0 to 9 do begin for BookMarkID:=0 to 9 do begin
@ -4155,6 +4185,49 @@ begin
end; end;
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; procedure TSourceNotebook.RemoveUserDefinedMenuItems;
begin begin
SrcEditMenuSectionFirstDynamic.Clear; SrcEditMenuSectionFirstDynamic.Clear;

View File

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

View File

@ -78,6 +78,7 @@ function UTF8ToCP874(const s: string): string; // thai
function UTF8ToSingleByte(const s: string; function UTF8ToSingleByte(const s: string;
const UTF8CharConvFunc: TUnicodeToCharID): string; const UTF8CharConvFunc: TUnicodeToCharID): string;
procedure GetSupportedEncodings(List: TStrings);
implementation implementation
@ -3721,6 +3722,23 @@ begin
SetLength(Result,Dest-PChar(Result)); SetLength(Result,Dest-PChar(Result));
end; 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; function Utf2Cp1251(s:string):string;
var i:integer; var i:integer;
Skip,DSkip:boolean; Skip,DSkip:boolean;