You've already forked lazarus-ccr
LazEdit: changed TagMenuItemsAndActions to tag LanguageMenu items at runtime. Implemented LanguageIds for lazedit_translations.pp
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2470 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -40,8 +40,8 @@ unit lazedit_config;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
SysUtils, Classes, EditorPageControl, lazedit_constants, Forms,{FCL_Misc,} IniFiles,
|
SysUtils, Classes, EditorPageControl, lazedit_constants, lazedit_translations,
|
||||||
LCLProc;
|
Forms, IniFiles, LCLProc;
|
||||||
|
|
||||||
type
|
type
|
||||||
//globale type for all configurable options
|
//globale type for all configurable options
|
||||||
@ -73,7 +73,7 @@ type
|
|||||||
FileTypeMaskList: TFileTypeMaskList;
|
FileTypeMaskList: TFileTypeMaskList;
|
||||||
TemplateMaskList: String;
|
TemplateMaskList: String;
|
||||||
RecentFiles: Array[0..MruEntries - 1] of String;
|
RecentFiles: Array[0..MruEntries - 1] of String;
|
||||||
Translation: Integer;
|
Translation: TLanguageIds;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function LoadOptions(var Options: TLazEditOptions; FileName: String): Boolean;
|
function LoadOptions(var Options: TLazEditOptions; FileName: String): Boolean;
|
||||||
@ -114,6 +114,7 @@ var
|
|||||||
ftIndex: TEditorFileType;
|
ftIndex: TEditorFileType;
|
||||||
S: String;
|
S: String;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
Lang: LongInt;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
try
|
try
|
||||||
@ -167,7 +168,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Translation and other general
|
// Translation and other general
|
||||||
Options.Translation := Ini.ReadInteger(scGeneral, idTranslation, 0);
|
Lang := Ini.ReadInteger(scGeneral, idTranslation, 0);
|
||||||
|
if (Lang >= Ord(Low(TLanguageIds))) and (Lang <= Ord(High(TLanguageIds))) then
|
||||||
|
Options.Translation := TLanguageIds(Lang)
|
||||||
|
else
|
||||||
|
Options.Translation := lidEnglish;
|
||||||
|
|
||||||
finally
|
finally
|
||||||
Ini.Free;
|
Ini.Free;
|
||||||
@ -240,7 +245,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Translation and other general
|
// Translation and other general
|
||||||
Ini.WriteInteger(scGeneral, idTranslation, Options.Translation);
|
Ini.WriteInteger(scGeneral, idTranslation, Ord(Options.Translation));
|
||||||
|
|
||||||
try
|
try
|
||||||
Ini.UpdateFile;
|
Ini.UpdateFile;
|
||||||
|
@ -46,9 +46,16 @@ type
|
|||||||
|
|
||||||
{ TTranslations }
|
{ TTranslations }
|
||||||
|
|
||||||
|
TLanguageIds = (lidEnglish, lidDutch, lidPortuguese);
|
||||||
|
|
||||||
|
const
|
||||||
|
MenuLangNameSuffixes: Array[TLanguageIds] of string = ('English','Dutch','Portuguese');
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
TTranslations = class(TObject)
|
TTranslations = class(TObject)
|
||||||
private
|
private
|
||||||
FLanguageId: Integer;
|
FLanguageId: TLanguageIds;
|
||||||
public
|
public
|
||||||
{ Main form }
|
{ Main form }
|
||||||
{ mnuEditPasteTableContentTab: TMenuItem;
|
{ mnuEditPasteTableContentTab: TMenuItem;
|
||||||
@ -213,8 +220,8 @@ type
|
|||||||
procedure TranslateToEnglish;
|
procedure TranslateToEnglish;
|
||||||
procedure TranslateToDutch;
|
procedure TranslateToDutch;
|
||||||
procedure TranslateToPortuguese;
|
procedure TranslateToPortuguese;
|
||||||
procedure TranslateToLanguageID(AID: Integer);
|
procedure TranslateToLanguageID(ALangId: TLanguageIds);
|
||||||
function GetCurrentLanguageID: Integer;
|
function GetCurrentLanguageID: TLanguageIds;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -642,18 +649,18 @@ begin
|
|||||||
mnuViewFontsize := 'Tamanho da &fonte';
|
mnuViewFontsize := 'Tamanho da &fonte';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTranslations.TranslateToLanguageID(AID: Integer);
|
procedure TTranslations.TranslateToLanguageID(ALangId: TLanguageIds);
|
||||||
begin
|
begin
|
||||||
FLanguageID := AID;
|
FLanguageID := ALangId;
|
||||||
case AID of
|
case ALangId of
|
||||||
1: TranslateToDutch;
|
lidDutch: TranslateToDutch;
|
||||||
2: TranslateToPortuguese;
|
lidPortuguese: TranslateToPortuguese;
|
||||||
else
|
else
|
||||||
TranslateToEnglish;
|
TranslateToEnglish;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TTranslations.GetCurrentLanguageID: Integer;
|
function TTranslations.GetCurrentLanguageID: TLanguageIds;
|
||||||
begin
|
begin
|
||||||
Result := FLanguageID;
|
Result := FLanguageID;
|
||||||
end;
|
end;
|
||||||
|
@ -1757,16 +1757,16 @@ object LazEditMainForm: TLazEditMainForm
|
|||||||
Caption = 'mnuTools'
|
Caption = 'mnuTools'
|
||||||
object mnuToolsLanguage: TMenuItem
|
object mnuToolsLanguage: TMenuItem
|
||||||
Caption = 'mnuToolsLanguage'
|
Caption = 'mnuToolsLanguage'
|
||||||
object mnuEnglish: TMenuItem
|
object mnuLanguageEnglish: TMenuItem
|
||||||
Caption = 'English'
|
Caption = 'English'
|
||||||
OnClick = mnuLanguageChangeClick
|
OnClick = mnuLanguageChangeClick
|
||||||
end
|
end
|
||||||
object mnuDutch: TMenuItem
|
object mnuLanguageDutch: TMenuItem
|
||||||
Tag = -1
|
Tag = -1
|
||||||
Caption = 'Dutch'
|
Caption = 'Dutch'
|
||||||
OnClick = mnuLanguageChangeClick
|
OnClick = mnuLanguageChangeClick
|
||||||
end
|
end
|
||||||
object mnuPortuguese: TMenuItem
|
object mnuLanguagePortuguese: TMenuItem
|
||||||
Tag = -2
|
Tag = -2
|
||||||
Caption = 'Português'
|
Caption = 'Português'
|
||||||
OnClick = mnuLanguageChangeClick
|
OnClick = mnuLanguageChangeClick
|
||||||
|
@ -112,9 +112,9 @@ type
|
|||||||
mnuToolbarsMain: TMenuItem;
|
mnuToolbarsMain: TMenuItem;
|
||||||
mnuInsertSep2: TMenuItem;
|
mnuInsertSep2: TMenuItem;
|
||||||
mnuToolsLanguage: TMenuItem;
|
mnuToolsLanguage: TMenuItem;
|
||||||
mnuEnglish: TMenuItem;
|
mnuLanguageEnglish: TMenuItem;
|
||||||
mnuDutch: TMenuItem;
|
mnuLanguageDutch: TMenuItem;
|
||||||
mnuPortuguese: TMenuItem;
|
mnuLanguagePortuguese: TMenuItem;
|
||||||
mnuTools: TMenuItem;
|
mnuTools: TMenuItem;
|
||||||
mnuAbout: TMenuItem;
|
mnuAbout: TMenuItem;
|
||||||
mnuViewFont: TMenuItem;
|
mnuViewFont: TMenuItem;
|
||||||
@ -455,6 +455,7 @@ type
|
|||||||
procedure UpdateMenuItems;
|
procedure UpdateMenuItems;
|
||||||
procedure CreateMruMenuItemsArray;
|
procedure CreateMruMenuItemsArray;
|
||||||
function TryHlMenuTagToFileType(ATag: PtrInt; out AFileType: TEditorFileType): Boolean;
|
function TryHlMenuTagToFileType(ATag: PtrInt; out AFileType: TEditorFileType): Boolean;
|
||||||
|
function TryLangMenuTagToLangId(ATag: PtrInt; out ALangId: TLanguageIds): Boolean;
|
||||||
|
|
||||||
function FileTypeToFilterIndex(const Index: TEditorFileType): Integer;
|
function FileTypeToFilterIndex(const Index: TEditorFileType): Integer;
|
||||||
procedure ConstructOpenDialogFileFilters;
|
procedure ConstructOpenDialogFileFilters;
|
||||||
@ -629,9 +630,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TLazEditMainForm.mnuLanguageChangeClick(Sender: TObject);
|
procedure TLazEditMainForm.mnuLanguageChangeClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
ALangId: TLanguageIds;
|
||||||
begin
|
begin
|
||||||
vTranslations.TranslateToLanguageID(Abs(TMenuItem(Sender).Tag));
|
if TryLangMenuTagToLangId((Sender as TMenuItem).Tag, ALangId) then
|
||||||
|
begin
|
||||||
|
vTranslations.TranslateToLanguageID(ALangId);
|
||||||
DoTranslateAll();
|
DoTranslateAll();
|
||||||
|
end
|
||||||
|
else debugln(Format('Error: Invalid tag for MenuItem %s: %x',[(Sender as TMenuItem).Name,(Sender as TMenuItem).Tag]));;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -1447,6 +1454,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// Translation
|
// Translation
|
||||||
|
|
||||||
vTranslations.TranslateToLanguageID(Options.Translation);
|
vTranslations.TranslateToLanguageID(Options.Translation);
|
||||||
|
|
||||||
// Toolbars
|
// Toolbars
|
||||||
@ -1665,6 +1673,15 @@ begin
|
|||||||
if Result then AFileType := TEditorFileType(ATag);
|
if Result then AFileType := TEditorFileType(ATag);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TLazEditMainForm.TryLangMenuTagToLangId(ATag: PtrInt; out
|
||||||
|
ALangId: TLanguageIds): Boolean;
|
||||||
|
begin
|
||||||
|
ATag := ATag and $FF0000;
|
||||||
|
ATag := ATag shr 16;
|
||||||
|
Result := (ATag >= Ord(Low(TLanguageIds))) and (ATag <= Ord(High(TLanguageIds)));
|
||||||
|
if Result then ALangId := TLanguageIds(ATag);
|
||||||
|
end;
|
||||||
|
|
||||||
function TLazEditMainForm.FileTypeToFilterIndex(const Index: TEditorFileType
|
function TLazEditMainForm.FileTypeToFilterIndex(const Index: TEditorFileType
|
||||||
): Integer;
|
): Integer;
|
||||||
const
|
const
|
||||||
@ -1685,6 +1702,7 @@ var
|
|||||||
//NE: Boolean;
|
//NE: Boolean;
|
||||||
//NS: Boolean;
|
//NS: Boolean;
|
||||||
Index: TEditorFileType;
|
Index: TEditorFileType;
|
||||||
|
LangId: TLanguageIds;
|
||||||
begin
|
begin
|
||||||
for i := 0 to self.ComponentCount - 1 do
|
for i := 0 to self.ComponentCount - 1 do
|
||||||
begin
|
begin
|
||||||
@ -1692,6 +1710,7 @@ begin
|
|||||||
N := C.Name;
|
N := C.Name;
|
||||||
if (C is TAction) or (C is TMenuItem) then
|
if (C is TAction) or (C is TMenuItem) then
|
||||||
begin
|
begin
|
||||||
|
C.Tag := 0; //initialize all Tags to 0
|
||||||
//Things that need an open editor
|
//Things that need an open editor
|
||||||
if Pos('LAYOUT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor;
|
if Pos('LAYOUT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor;
|
||||||
if Pos('EDIT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor;
|
if Pos('EDIT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor;
|
||||||
@ -1714,6 +1733,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
if Pos('MNULANGUAGE', Uppercase(N)) > 0 then
|
||||||
|
begin
|
||||||
|
for LangId := Low(TLanguageIds) to High(TLanguageIds) do
|
||||||
|
begin
|
||||||
|
if ('MNULANGUAGE' + Uppercase(MenuLangNameSuffixes[LangId])= Uppercase(N)) then
|
||||||
|
begin
|
||||||
|
C.Tag := C.Tag or (Ord(LangId) shl 16);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
//Things that need text on the clipboard
|
//Things that need text on the clipboard
|
||||||
if Pos('PASTE',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsClipPaste;
|
if Pos('PASTE',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsClipPaste;
|
||||||
//Things that need a selection in the editor
|
//Things that need a selection in the editor
|
||||||
@ -1738,6 +1767,7 @@ begin
|
|||||||
|
|
||||||
{
|
{
|
||||||
if (C is TMenuItem) or (C is TAction) then
|
if (C is TMenuItem) or (C is TAction) then
|
||||||
|
//if (C = mnuLanguageEnglish) or (C = mnuLanguageDutch) or (C = mnuLanguagePortuguese) then
|
||||||
begin
|
begin
|
||||||
NE := (C.Tag and tgNeedsEditor) > 0;
|
NE := (C.Tag and tgNeedsEditor) > 0;
|
||||||
NS := (C.Tag and tgNeedsSelection) > 0;
|
NS := (C.Tag and tgNeedsSelection) > 0;
|
||||||
|
Reference in New Issue
Block a user