Zaher Dirkey wrote:
First, I know i touch a sensitive code but we can discuss about it.
1 - Added TVisualCompont it is between TLCLComponent and and TControl,
it has a properties and methods that have visual effect but still it
unvisible at form. i will use it for BidiMode and ParentBidimode
TMenu, TPopupMenu, TScreen, TTrayIcon and TPopupNotifier and any
component need bidimode , TTheme and TToolbar...
Now it can detect if the Component was inherited from TVisualComponent
to make loop when BidiMode changed in the form/control.
Remove duplicating of implement the same code in both TControl and
TMenu and every TComponent need the BidiMode.
I kept UseRightToLeftScrollBar in TControl
TApplicationProperties must *not* inherit it from TVisualComponent it
is like TApplication have no ParentBidiMode
Fix: TLabel alignment when BidiMode = bdRightToLeft (compatible with Delphi)
I would leave class hierarchi as is. It is not a big problem to copy
property BidiMode to the TMenu, TTrayIcon or anything else.
2 - Add: in FlipChildren now flip the Anchors also.
3- Added: AutoFlipChildren to TApplication, now when change the
BidiMode of Applcication it change the BidiMode of Forms and
FlipChildren for it.
This can Mattias review mostly.
4 - I removed this code from application.inc (see below) in
TApplication.Create, because :
* BidiMode of Application depend on developer choice not depend on
system locale.
* What if i built an English tools/application then run it in right to
left system locale, it will be launch as RightToLeft while it is not
designed for that.
* If we use a multinlanguage, BidiMode changed depend on the language
chosen by user, while every developer has own translation
model/library not only GetText.
it make confused with BidiMode of TForm when the form has ParentBidiMode
Also it force to compile GetText while i am not use GetText.
--------------- this code i commented temporary
{$ifndef wince}// remove ifdef when gettext is fixed
GetLanguageIDs(LangDefault, LangFallback);
if LangDefault <> '' then
FBidiMode := BidiModeMap[IsRTLLang(LangDefault)]
else
FBidiMode := BidiModeMap[IsRTLLang(LangFallback)];
{$else}
FBidiMode := bdLeftToRight;
{$endif}
--------------
If you not like TVisualCompont i can merge the code of BidiMode of it
to TLCLComponent, but not all components have ParentBidiMode Like as
TScreen, TApplicationProperties for example.
This is ok. That code was there temporary. It waited for better solution.
Best regards,
Paul Ishenin.
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus