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:
lazarus-bart 2012-07-02 20:40:02 +00:00
parent e503d1b77f
commit 4a89dd32e2
4 changed files with 64 additions and 22 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;