mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-21 19:59:12 +02:00
IDE: added source editor sub menu encoding
git-svn-id: trunk@14901 -
This commit is contained in:
parent
e077548771
commit
80191042b6
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user