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