Changeset 219 for trunk/Packages/Common


Ignore:
Timestamp:
Jan 17, 2025, 9:05:54 PM (5 days ago)
Author:
chronos
Message:
  • Modified: Updated Common package.
  • Modified: Remove U prefix from unit names.
  • Modified: Use Gneeric.Collections instead of fgl.
  • Modified: Do not use global form variables.
Location:
trunk/Packages/Common
Files:
45 added
6 deleted
2 edited
1 copied
46 moved

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/ApplicationInfo.pas

    r218 r219  
    1 unit UApplicationInfo;
    2 
    3 {$mode delphi}
     1unit ApplicationInfo;
    42
    53interface
    64
    75uses
    8   SysUtils, Classes, Forms, URegistry, Controls, Graphics, LCLType;
     6  SysUtils, Classes, Forms, RegistryEx, Controls, Graphics, LCLType;
    97
    108type
     
    5957procedure Register;
    6058
     59
    6160implementation
    6261
  • trunk/Packages/Common/Common.Delay.pas

    r218 r219  
    1 unit UDelay;
    2 
    3 {$mode delphi}
     1unit Common.Delay;
    42
    53interface
     
    7371
    7472end.
    75 
  • trunk/Packages/Common/Common.lpk

    r215 r219  
    1111      <PathDelim Value="\"/>
    1212      <SearchPaths>
     13        <OtherUnitFiles Value="Forms"/>
    1314        <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)-$(BuildMode)"/>
    1415      </SearchPaths>
     
    3334      <Other>
    3435        <CompilerMessages>
    35           <IgnoredMessages idx6058="True" idx5024="True" idx3124="True" idx3123="True"/>
     36          <IgnoredMessages idx6058="True" idx5071="True" idx5024="True" idx3124="True" idx3123="True"/>
    3637        </CompilerMessages>
    3738      </Other>
     
    4142Source: https://svn.zdechov.net/PascalClassLibrary/Common/"/>
    4243    <License Value="Copy left."/>
    43     <Version Minor="9"/>
    44     <Files Count="29">
     44    <Version Minor="12"/>
     45    <Files Count="40">
    4546      <Item1>
    4647        <Filename Value="StopWatch.pas"/>
     
    4849      </Item1>
    4950      <Item2>
    50         <Filename Value="UCommon.pas"/>
    51         <UnitName Value="UCommon"/>
     51        <Filename Value="Common.pas"/>
     52        <UnitName Value="Common"/>
    5253      </Item2>
    5354      <Item3>
    54         <Filename Value="UDebugLog.pas"/>
    55         <HasRegisterProc Value="True"/>
    56         <UnitName Value="UDebugLog"/>
     55        <Filename Value="DebugLog.pas"/>
     56        <HasRegisterProc Value="True"/>
     57        <UnitName Value="DebugLog"/>
    5758      </Item3>
    5859      <Item4>
    59         <Filename Value="UDelay.pas"/>
    60         <UnitName Value="UDelay"/>
     60        <Filename Value="Common.Delay.pas"/>
     61        <UnitName Value="Common.Delay"/>
    6162      </Item4>
    6263      <Item5>
    63         <Filename Value="UPrefixMultiplier.pas"/>
    64         <HasRegisterProc Value="True"/>
    65         <UnitName Value="UPrefixMultiplier"/>
     64        <Filename Value="PrefixMultiplier.pas"/>
     65        <HasRegisterProc Value="True"/>
     66        <UnitName Value="PrefixMultiplier"/>
    6667      </Item5>
    6768      <Item6>
    68         <Filename Value="UURI.pas"/>
    69         <UnitName Value="UURI"/>
     69        <Filename Value="URI.pas"/>
     70        <UnitName Value="URI"/>
    7071      </Item6>
    7172      <Item7>
    72         <Filename Value="UThreading.pas"/>
    73         <UnitName Value="UThreading"/>
     73        <Filename Value="Threading.pas"/>
     74        <UnitName Value="Threading"/>
    7475      </Item7>
    7576      <Item8>
    76         <Filename Value="UMemory.pas"/>
    77         <UnitName Value="UMemory"/>
     77        <Filename Value="Memory.pas"/>
     78        <UnitName Value="Memory"/>
    7879      </Item8>
    7980      <Item9>
    80         <Filename Value="UResetableThread.pas"/>
    81         <UnitName Value="UResetableThread"/>
     81        <Filename Value="ResetableThread.pas"/>
     82        <UnitName Value="ResetableThread"/>
    8283      </Item9>
    8384      <Item10>
    84         <Filename Value="UPool.pas"/>
    85         <UnitName Value="UPool"/>
     85        <Filename Value="Pool.pas"/>
     86        <UnitName Value="Pool"/>
    8687      </Item10>
    8788      <Item11>
    88         <Filename Value="ULastOpenedList.pas"/>
    89         <HasRegisterProc Value="True"/>
    90         <UnitName Value="ULastOpenedList"/>
     89        <Filename Value="LastOpenedList.pas"/>
     90        <HasRegisterProc Value="True"/>
     91        <UnitName Value="LastOpenedList"/>
    9192      </Item11>
    9293      <Item12>
    93         <Filename Value="URegistry.pas"/>
    94         <UnitName Value="URegistry"/>
     94        <Filename Value="RegistryEx.pas"/>
     95        <UnitName Value="RegistryEx"/>
    9596      </Item12>
    9697      <Item13>
    97         <Filename Value="UJobProgressView.pas"/>
    98         <HasRegisterProc Value="True"/>
    99         <UnitName Value="UJobProgressView"/>
     98        <Filename Value="JobProgressView.pas"/>
     99        <HasRegisterProc Value="True"/>
     100        <UnitName Value="JobProgressView"/>
    100101      </Item13>
    101102      <Item14>
    102         <Filename Value="UXMLUtils.pas"/>
    103         <UnitName Value="UXMLUtils"/>
     103        <Filename Value="XML.pas"/>
     104        <UnitName Value="XML"/>
    104105      </Item14>
    105106      <Item15>
    106         <Filename Value="UApplicationInfo.pas"/>
    107         <HasRegisterProc Value="True"/>
    108         <UnitName Value="UApplicationInfo"/>
     107        <Filename Value="ApplicationInfo.pas"/>
     108        <HasRegisterProc Value="True"/>
     109        <UnitName Value="ApplicationInfo"/>
    109110      </Item15>
    110111      <Item16>
    111         <Filename Value="USyncCounter.pas"/>
    112         <UnitName Value="USyncCounter"/>
     112        <Filename Value="SyncCounter.pas"/>
     113        <UnitName Value="SyncCounter"/>
    113114      </Item16>
    114115      <Item17>
    115         <Filename Value="UListViewSort.pas"/>
    116         <HasRegisterProc Value="True"/>
    117         <UnitName Value="UListViewSort"/>
     116        <Filename Value="ListViewSort.pas"/>
     117        <HasRegisterProc Value="True"/>
     118        <UnitName Value="ListViewSort"/>
    118119      </Item17>
    119120      <Item18>
    120         <Filename Value="UPersistentForm.pas"/>
    121         <HasRegisterProc Value="True"/>
    122         <UnitName Value="UPersistentForm"/>
     121        <Filename Value="PersistentForm.pas"/>
     122        <HasRegisterProc Value="True"/>
     123        <UnitName Value="PersistentForm"/>
    123124      </Item18>
    124125      <Item19>
    125         <Filename Value="UFindFile.pas"/>
    126         <HasRegisterProc Value="True"/>
    127         <UnitName Value="UFindFile"/>
     126        <Filename Value="FindFile.pas"/>
     127        <HasRegisterProc Value="True"/>
     128        <UnitName Value="FindFile"/>
    128129      </Item19>
    129130      <Item20>
    130         <Filename Value="UScaleDPI.pas"/>
    131         <HasRegisterProc Value="True"/>
    132         <UnitName Value="UScaleDPI"/>
     131        <Filename Value="ScaleDPI.pas"/>
     132        <HasRegisterProc Value="True"/>
     133        <UnitName Value="ScaleDPI"/>
    133134      </Item20>
    134135      <Item21>
    135         <Filename Value="UTheme.pas"/>
    136         <HasRegisterProc Value="True"/>
    137         <UnitName Value="UTheme"/>
     136        <Filename Value="Theme.pas"/>
     137        <HasRegisterProc Value="True"/>
     138        <UnitName Value="Theme"/>
    138139      </Item21>
    139140      <Item22>
    140         <Filename Value="UStringTable.pas"/>
    141         <UnitName Value="UStringTable"/>
     141        <Filename Value="StringTable.pas"/>
     142        <UnitName Value="StringTable"/>
    142143      </Item22>
    143144      <Item23>
    144         <Filename Value="UMetaCanvas.pas"/>
    145         <UnitName Value="UMetaCanvas"/>
     145        <Filename Value="MetaCanvas.pas"/>
     146        <UnitName Value="MetaCanvas"/>
    146147      </Item23>
    147148      <Item24>
    148         <Filename Value="UGeometric.pas"/>
    149         <UnitName Value="UGeometric"/>
     149        <Filename Value="Geometric.pas"/>
     150        <UnitName Value="Geometric"/>
    150151      </Item24>
    151152      <Item25>
    152         <Filename Value="UTranslator.pas"/>
    153         <HasRegisterProc Value="True"/>
    154         <UnitName Value="UTranslator"/>
     153        <Filename Value="Translator.pas"/>
     154        <HasRegisterProc Value="True"/>
     155        <UnitName Value="Translator"/>
    155156      </Item25>
    156157      <Item26>
    157         <Filename Value="ULanguages.pas"/>
    158         <UnitName Value="ULanguages"/>
     158        <Filename Value="Languages.pas"/>
     159        <UnitName Value="Languages"/>
    159160      </Item26>
    160161      <Item27>
    161         <Filename Value="UFormAbout.pas"/>
    162         <UnitName Value="UFormAbout"/>
     162        <Filename Value="PixelPointer.pas"/>
     163        <UnitName Value="PixelPointer"/>
    163164      </Item27>
    164165      <Item28>
    165         <Filename Value="UAboutDialog.pas"/>
    166         <HasRegisterProc Value="True"/>
    167         <UnitName Value="UAboutDialog"/>
     166        <Filename Value="DataFile.pas"/>
     167        <UnitName Value="DataFile"/>
    168168      </Item28>
    169169      <Item29>
    170         <Filename Value="UPixelPointer.pas"/>
    171         <UnitName Value="UPixelPointer"/>
     170        <Filename Value="TestCase.pas"/>
     171        <UnitName Value="TestCase"/>
    172172      </Item29>
     173      <Item30>
     174        <Filename Value="Generics.pas"/>
     175        <UnitName Value="Generics"/>
     176      </Item30>
     177      <Item31>
     178        <Filename Value="CommonPackage.pas"/>
     179        <Type Value="Main Unit"/>
     180        <UnitName Value="CommonPackage"/>
     181      </Item31>
     182      <Item32>
     183        <Filename Value="Table.pas"/>
     184        <UnitName Value="Table"/>
     185      </Item32>
     186      <Item33>
     187        <Filename Value="FormEx.pas"/>
     188        <HasRegisterProc Value="True"/>
     189        <UnitName Value="FormEx"/>
     190      </Item33>
     191      <Item34>
     192        <Filename Value="Forms\FormTests.pas"/>
     193        <UnitName Value="FormTests"/>
     194      </Item34>
     195      <Item35>
     196        <Filename Value="Forms\FormTest.pas"/>
     197        <UnitName Value="FormTest"/>
     198      </Item35>
     199      <Item36>
     200        <Filename Value="Forms\FormAbout.pas"/>
     201        <UnitName Value="FormAbout"/>
     202      </Item36>
     203      <Item37>
     204        <Filename Value="Forms\FormKeyShortcuts.pas"/>
     205        <UnitName Value="FormKeyShortcuts"/>
     206      </Item37>
     207      <Item38>
     208        <Filename Value="ItemList.pas"/>
     209        <UnitName Value="ItemList"/>
     210      </Item38>
     211      <Item39>
     212        <Filename Value="Forms\FormItem.pas"/>
     213        <UnitName Value="FormItem"/>
     214      </Item39>
     215      <Item40>
     216        <Filename Value="Forms\FormList.pas"/>
     217        <UnitName Value="FormList"/>
     218      </Item40>
    173219    </Files>
    174220    <CompatibilityMode Value="True"/>
  • trunk/Packages/Common/Common.pas

    r218 r219  
    1 unit UCommon;
    2 
    3 {$mode delphi}
     1unit Common;
    42
    53interface
     
    86  {$IFDEF WINDOWS}Windows,{$ENDIF}
    97  {$IFDEF UNIX}baseunix,{$ENDIF}
    10   Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf,
    11   FileUtil; //, ShFolder, ShellAPI;
     8  Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf, Graphics,
     9  FileUtil, Generics.Collections; //, ShFolder, ShellAPI;
    1210
    1311type
    1412  TArrayOfByte = array of Byte;
    15   TArrayOfString = array of string;
    1613  TExceptionEvent = procedure(Sender: TObject; E: Exception) of object;
    1714
     
    3532  DLLHandle1: HModule;
    3633
    37 {$IFDEF WINDOWS}
    38   GetUserNameEx: procedure (NameFormat: DWORD;
    39     lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
    40 {$ENDIF}
     34  {$IFDEF WINDOWS}
     35    GetUserNameEx: procedure (NameFormat: DWORD;
     36      lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
     37  {$ENDIF}
     38
     39const
     40  clLightBlue = TColor($FF8080);
     41  clLightGreen = TColor($80FF80);
     42  clLightRed = TColor($8080FF);
    4143
    4244function AddLeadingZeroes(const aNumber, Length : integer) : string;
     
    5153function ComputerName: string;
    5254procedure DeleteFiles(APath, AFileSpec: string);
    53 procedure ExecuteProgram(Executable: string; Parameters: array of string);
     55function EndsWith(Text, What: string): Boolean;
     56function Explode(Separator: Char; Data: string): TStringArray;
     57procedure ExecuteProgram(Executable: string; Parameters: array of string;
     58  Environment: array of string; CurrentDirectory: string = '');
     59procedure ExecuteProgramOutput(Executable: string; Parameters: array of string;
     60  Environment: array of string; out Output, Error: string;
     61  out ExitCode: Integer; CurrentDirectory: string = '');
    5462procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
    5563procedure FreeThenNil(var Obj);
     
    5967function GetBit(Variable: QWord; Index: Byte): Boolean;
    6068function GetStringPart(var Text: string; Separator: string): string;
     69function GetEnvironmentVariables: TStringArray;
    6170function GenerateNewName(OldName: string): string;
    6271function GetFileFilterItemExt(Filter: string; Index: Integer): string;
    6372function IntToBin(Data: Int64; Count: Byte): string;
     73function Implode(Separator: string; List: TList<string>): string; overload;
     74function Implode(Separator: string; List: array of string): string; overload;
     75function Implode(Separator: string; List: TStringList; Around: string = ''): string; overload;
    6476function LastPos(const SubStr: String; const S: String): Integer;
    6577function LoadFileToStr(const FileName: TFileName): AnsiString;
    6678function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    67 function MergeArray(A, B: array of string): TArrayOfString;
     79function MergeArray(A, B: array of string): TStringArray;
    6880function OccurenceOfChar(What: Char; Where: string): Integer;
    6981procedure OpenWebPage(URL: string);
     82procedure OpenEmail(Email: string);
    7083procedure OpenFileInShell(FileName: string);
    7184function PosFromIndex(SubStr: string; Text: string;
     
    8194procedure SearchFiles(AList: TStrings; Dir: string;
    8295  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
     96procedure SortStrings(Strings: TStrings);
    8397function SplitString(var Text: string; Count: Word): string;
    8498function StripTags(const S: string): string;
    85 function TryHexToInt(Data: string; var Value: Integer): Boolean;
    86 function TryBinToInt(Data: string; var Value: Integer): Boolean;
    87 procedure SortStrings(Strings: TStrings);
     99function StartsWith(Text, What: string): Boolean;
     100function TryHexToInt(Data: string; out Value: Integer): Boolean;
     101function TryBinToInt(Data: string; out Value: Integer): Boolean;
    88102
    89103
    90104implementation
    91105
    92 function BinToInt(BinStr : string) : Int64;
    93 var
    94   i : byte;
    95   RetVar : Int64;
     106resourcestring
     107  SExecutionError = 'Excution error: %s (exit code: %d)';
     108
     109function StartsWith(Text, What: string): Boolean;
     110begin
     111  Result := Copy(Text, 1, Length(Text)) = What;
     112end;
     113
     114function EndsWith(Text, What: string): Boolean;
     115begin
     116  Result := Copy(Text, Length(Text) - Length(What) + 1, MaxInt) = What;
     117end;
     118
     119function BinToInt(BinStr: string): Int64;
     120var
     121  I: Byte;
     122  RetVar: Int64;
    96123begin
    97124  BinStr := UpperCase(BinStr);
    98   if BinStr[length(BinStr)] = 'B' then Delete(BinStr,length(BinStr),1);
     125  if BinStr[length(BinStr)] = 'B' then Delete(BinStr, Length(BinStr), 1);
    99126  RetVar := 0;
    100   for i := 1 to length(BinStr) do begin
    101     if not (BinStr[i] in ['0','1']) then begin
     127  for I := 1 to Length(BinStr) do begin
     128    if not (BinStr[I] in ['0','1']) then begin
    102129      RetVar := 0;
    103130      Break;
    104131    end;
    105     RetVar := (RetVar shl 1) + (byte(BinStr[i]) and 1) ;
     132    RetVar := (RetVar shl 1) + (Byte(BinStr[I]) and 1);
    106133  end;
    107134
     
    118145  end;
    119146end;
    120 
    121147
    122148procedure DeleteFiles(APath, AFileSpec: string);
     
    136162  FindClose(SearchRec);
    137163end;
    138 
    139164
    140165function GetFileFilterItemExt(Filter: string; Index: Integer): string;
     
    159184  if FileExt <> '.*' then
    160185    FileDialog.FileName := ChangeFileExt(FileDialog.FileName, FileExt)
     186end;
     187
     188function GetEnvironmentVariables: TStringArray;
     189var
     190  I: Integer;
     191begin
     192  Result := Default(TStringArray);
     193  SetLength(Result, GetEnvironmentVariableCount);
     194  for I := 0 to GetEnvironmentVariableCount - 1 do
     195    Result[I] := GetEnvironmentString(I);
    161196end;
    162197
     
    201236end;*)
    202237
     238function Implode(Separator: string; List: array of string): string;
     239var
     240  I: Integer;
     241begin
     242  Result := '';
     243  for I := 0 to Length(List) - 1 do begin
     244    Result := Result + List[I];
     245    if I < Length(List) - 1 then Result := Result + Separator;
     246  end;
     247end;
     248
     249function Implode(Separator: string; List: TStringList; Around: string = ''): string;
     250var
     251  I: Integer;
     252begin
     253  Result := '';
     254  for I := 0 to List.Count - 1 do begin
     255    Result := Result + Around + List[I] + Around;
     256    if I < List.Count - 1 then Result := Result + Separator;
     257  end;
     258end;
     259
    203260function LastPos(const SubStr: String; const S: String): Integer;
    204261begin
     
    246303end;
    247304
    248 function TryHexToInt(Data: string; var Value: Integer): Boolean;
     305function TryHexToInt(Data: string; out Value: Integer): Boolean;
    249306var
    250307  I: Integer;
     
    262319end;
    263320
    264 function TryBinToInt(Data: string; var Value: Integer): Boolean;
     321function TryBinToInt(Data: string; out Value: Integer): Boolean;
    265322var
    266323  I: Integer;
     
    290347end;
    291348
    292 function Explode(Separator: char; Data: string): TArrayOfString;
    293 begin
    294   Result := nil;
    295   SetLength(Result, 0);
    296   while Pos(Separator, Data) > 0 do begin
     349function Explode(Separator: Char; Data: string): TStringArray;
     350var
     351  Index: Integer;
     352begin
     353  Result := Default(TStringArray);
     354  repeat
     355    Index := Pos(Separator, Data);
     356    if Index > 0 then begin
     357      SetLength(Result, Length(Result) + 1);
     358      Result[High(Result)] := Copy(Data, 1, Index - 1);
     359      Delete(Data, 1, Index);
     360    end else Break;
     361  until False;
     362  if Data <> '' then begin
    297363    SetLength(Result, Length(Result) + 1);
    298     Result[High(Result)] := Copy(Data, 1, Pos(Separator, Data) - 1);
    299     Delete(Data, 1, Pos(Separator, Data));
    300   end;
    301   SetLength(Result, Length(Result) + 1);
    302   Result[High(Result)] := Data;
    303 end;
    304 
    305 {$IFDEF Windows}
     364    Result[High(Result)] := Data;
     365  end;
     366end;
     367
     368function Implode(Separator: string; List: TList<string>): string;
     369var
     370  I: Integer;
     371begin
     372  Result := '';
     373  for I := 0 to List.Count - 1 do begin
     374    Result := Result + List[I];
     375    if I < List.Count - 1 then Result := Result + Separator;
     376  end;
     377end;
     378
     379{$IFDEF WINDOWS}
    306380function GetUserName: string;
    307381const
     
    311385begin
    312386  L := MAX_USERNAME_LENGTH + 2;
     387  Result := Default(string);
    313388  SetLength(Result, L);
    314389  if Windows.GetUserName(PChar(Result), L) and (L > 0) then begin
     
    324399  end;
    325400end;
    326 {$endif}
     401{$ENDIF}
    327402
    328403function ComputerName: string;
    329 {$ifdef mswindows}
     404{$IFDEF WINDOWS}
    330405const
    331406 INFO_BUFFER_SIZE = 32767;
     
    342417  end;
    343418end;
    344 {$endif}
    345 {$ifdef unix}
     419{$ENDIF}
     420{$IFDEF UNIX}
    346421var
    347422  Name: UtsName;
     
    351426  Result := Name.Nodename;
    352427end;
    353 {$endif}
    354 
    355 {$ifdef windows}
     428{$ENDIF}
     429
     430{$IFDEF WINDOWS}
    356431function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    357432const
     
    431506procedure LoadLibraries;
    432507begin
    433   {$IFDEF Windows}
     508  {$IFDEF WINDOWS}
    434509  DLLHandle1 := LoadLibrary('secur32.dll');
    435510  if DLLHandle1 <> 0 then
     
    442517procedure FreeLibraries;
    443518begin
    444   {$IFDEF Windows}
     519  {$IFDEF WINDOWS}
    445520  if DLLHandle1 <> 0 then FreeLibrary(DLLHandle1);
    446521  {$ENDIF}
    447522end;
    448523
    449 procedure ExecuteProgram(Executable: string; Parameters: array of string);
     524procedure ExecuteProgram(Executable: string; Parameters: array of string;
     525  Environment: array of string; CurrentDirectory: string = '');
    450526var
    451527  Process: TProcess;
    452528  I: Integer;
    453529begin
     530  Process := TProcess.Create(nil);
    454531  try
    455     Process := TProcess.Create(nil);
    456532    Process.Executable := Executable;
    457533    for I := 0 to Length(Parameters) - 1 do
    458534      Process.Parameters.Add(Parameters[I]);
     535    for I := 0 to Length(Environment) - 1 do
     536      Process.Environment.Add(Environment[I]);
     537    Process.CurrentDirectory := CurrentDirectory;
     538    Process.ShowWindow := swoHIDE;
    459539    Process.Options := [poNoConsole];
    460540    Process.Execute;
     
    464544end;
    465545
     546procedure ExecuteProgramOutput(Executable: string; Parameters: array of string;
     547  Environment: array of string; out Output, Error: string; out ExitCode: Integer;
     548  CurrentDirectory: string);
     549var
     550  Process: TProcess;
     551  I: Integer;
     552  ReadCount: Integer;
     553  Buffer: string;
     554const
     555  BufferSize = 1000;
     556begin
     557  Process := TProcess.Create(nil);
     558  try
     559    Process.Executable := Executable;
     560    for I := 0 to Length(Parameters) - 1 do
     561      Process.Parameters.Add(Parameters[I]);
     562    for I := 0 to Length(Environment) - 1 do
     563      Process.Environment.Add(Environment[I]);
     564    Process.CurrentDirectory := CurrentDirectory;
     565    Process.ShowWindow := swoHIDE;
     566    Process.Options := [poNoConsole, poUsePipes];
     567    Process.Execute;
     568
     569    Output := '';
     570    Error := '';
     571    Buffer := '';
     572    SetLength(Buffer, BufferSize);
     573    while Process.Running do begin
     574      if Process.Output.NumBytesAvailable > 0 then begin
     575        ReadCount := Process.Output.Read(Buffer[1], Length(Buffer));
     576        Output := Output + Copy(Buffer, 1, ReadCount);
     577      end;
     578
     579      if Process.Stderr.NumBytesAvailable > 0 then begin
     580        ReadCount := Process.Stderr.Read(Buffer[1], Length(Buffer));
     581        Error := Error + Copy(Buffer, 1, ReadCount)
     582      end;
     583
     584      Sleep(10);
     585    end;
     586
     587    if Process.Output.NumBytesAvailable > 0 then begin
     588      ReadCount := Process.Output.Read(Buffer[1], Length(Buffer));
     589      Output := Output + Copy(Buffer, 1, ReadCount);
     590    end;
     591
     592    if Process.Stderr.NumBytesAvailable > 0 then begin
     593      ReadCount := Process.Stderr.Read(Buffer[1], Length(Buffer));
     594      Error := Error + Copy(Buffer, 1, ReadCount);
     595    end;
     596
     597    ExitCode := Process.ExitCode;
     598
     599    if (ExitCode <> 0) or (Error <> '') then
     600      raise Exception.Create(Format(SExecutionError, [Output + Error, ExitCode]));
     601  finally
     602    Process.Free;
     603  end;
     604end;
     605
    466606procedure FreeThenNil(var Obj);
    467607begin
     
    475615end;
    476616
     617procedure OpenEmail(Email: string);
     618begin
     619  OpenURL('mailto:' + Email);
     620end;
     621
    477622procedure OpenFileInShell(FileName: string);
    478623begin
    479   ExecuteProgram('cmd.exe', ['/c', 'start', FileName]);
     624  ExecuteProgram('cmd.exe', ['/c', 'start', FileName], []);
    480625end;
    481626
     
    503648end;
    504649
    505 function MergeArray(A, B: array of string): TArrayOfString;
    506 var
    507   I: Integer;
    508 begin
    509   Result := Default(TArrayOfString);
     650function MergeArray(A, B: array of string): TStringArray;
     651var
     652  I: Integer;
     653begin
     654  Result := Default(TStringArray);
    510655  SetLength(Result, Length(A) + Length(B));
    511656  for I := 0 to Length(A) - 1 do
  • trunk/Packages/Common/CommonPackage.pas

    r218 r219  
    33 }
    44
    5 unit Common;
     5unit CommonPackage;
    66
    77{$warn 5023 off : no warning about unused units}
     
    99
    1010uses
    11   StopWatch, UCommon, UDebugLog, UDelay, UPrefixMultiplier, UURI, UThreading,
    12   UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
    13   UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort,
    14   UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, UMetaCanvas,
    15   UGeometric, UTranslator, ULanguages, UFormAbout, UAboutDialog,
    16   UPixelPointer, LazarusPackageIntf;
     11  StopWatch, Common, DebugLog, Common.Delay, PrefixMultiplier, URI, Threading,
     12  Memory, ResetableThread, Pool, LastOpenedList, RegistryEx, JobProgressView,
     13  XML, ApplicationInfo, SyncCounter, ListViewSort, PersistentForm, FindFile,
     14  ScaleDPI, Theme, StringTable, MetaCanvas, Geometric, Translator, Languages,
     15  PixelPointer, DataFile, TestCase, Generics, Table, FormEx, FormTests,
     16  FormTest, FormAbout, FormKeyShortcuts, ItemList, FormItem, FormList,
     17  LazarusPackageIntf;
    1718
    1819implementation
     
    2021procedure Register;
    2122begin
    22   RegisterUnit('UDebugLog', @UDebugLog.Register);
    23   RegisterUnit('UPrefixMultiplier', @UPrefixMultiplier.Register);
    24   RegisterUnit('ULastOpenedList', @ULastOpenedList.Register);
    25   RegisterUnit('UJobProgressView', @UJobProgressView.Register);
    26   RegisterUnit('UApplicationInfo', @UApplicationInfo.Register);
    27   RegisterUnit('UListViewSort', @UListViewSort.Register);
    28   RegisterUnit('UPersistentForm', @UPersistentForm.Register);
    29   RegisterUnit('UFindFile', @UFindFile.Register);
    30   RegisterUnit('UScaleDPI', @UScaleDPI.Register);
    31   RegisterUnit('UTheme', @UTheme.Register);
    32   RegisterUnit('UTranslator', @UTranslator.Register);
    33   RegisterUnit('UAboutDialog', @UAboutDialog.Register);
     23  RegisterUnit('DebugLog', @DebugLog.Register);
     24  RegisterUnit('PrefixMultiplier', @PrefixMultiplier.Register);
     25  RegisterUnit('LastOpenedList', @LastOpenedList.Register);
     26  RegisterUnit('JobProgressView', @JobProgressView.Register);
     27  RegisterUnit('ApplicationInfo', @ApplicationInfo.Register);
     28  RegisterUnit('ListViewSort', @ListViewSort.Register);
     29  RegisterUnit('PersistentForm', @PersistentForm.Register);
     30  RegisterUnit('FindFile', @FindFile.Register);
     31  RegisterUnit('ScaleDPI', @ScaleDPI.Register);
     32  RegisterUnit('Theme', @Theme.Register);
     33  RegisterUnit('Translator', @Translator.Register);
     34  RegisterUnit('FormEx', @FormEx.Register);
    3435end;
    3536
  • trunk/Packages/Common/DebugLog.pas

    r218 r219  
    1 unit UDebugLog;
    2 
    3 {$mode delphi}
     1unit DebugLog;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, fgl, SyncObjs;
     6  Classes, SysUtils, FileUtil, Generics.Collections, SyncObjs;
    97
    108type
     
    1513    Group: string;
    1614    Text: string;
     15  end;
     16
     17  TDebugLogItems = class(TObjectList<TDebugLogItem>)
    1718  end;
    1819
     
    2930    procedure SetMaxCount(const AValue: Integer);
    3031  public
    31     Items: TFPGObjectList<TDebugLogItem>;
     32    Items: TDebugLogItems;
    3233    Lock: TCriticalSection;
    3334    procedure Add(Text: string; Group: string = '');
     
    4445
    4546procedure Register;
     47
    4648
    4749implementation
     
    117119begin
    118120  inherited;
    119   Items := TFPGObjectList<TDebugLogItem>.Create;
     121  Items := TDebugLogItems.Create;
    120122  Lock := TCriticalSection.Create;
    121123  MaxCount := 100;
     
    126128destructor TDebugLog.Destroy;
    127129begin
    128   Items.Free;
    129   Lock.Free;
     130  FreeAndNil(Items);
     131  FreeAndNil(Lock);
    130132  inherited;
    131133end;
    132134
    133135end.
    134 
  • trunk/Packages/Common/FindFile.pas

    r218 r219  
    1919}
    2020
    21 unit UFindFile;
     21unit FindFile;
    2222
    2323interface
     
    3535  private
    3636    s : TStringList;
    37 
    3837    fSubFolder : boolean;
    3938    fAttr: TFileAttrib;
    4039    fPath : string;
    4140    fFileMask : string;
    42 
    4341    procedure SetPath(Value: string);
    4442    procedure FileSearch(const inPath : string);
     
    4644    constructor Create(AOwner: TComponent); override;
    4745    destructor Destroy; override;
    48 
    4946    function SearchForFiles: TStringList;
    5047  published
     
    6562procedure Register;
    6663
     64
    6765implementation
    6866
     
    7775constructor TFindFile.Create(AOwner: TComponent);
    7876begin
    79   inherited Create(AOwner);
     77  inherited;
    8078  Path := IncludeTrailingBackslash(UTF8Encode(GetCurrentDir));
    8179  FileMask := FilterAll;
     
    8785begin
    8886  s.Free;
    89   inherited Destroy;
     87  inherited;
    9088end;
    9189
     
    145143    SysUtils.FindClose(Rec);
    146144  end;
    147 end; 
     145end;
    148146
    149147end.
    150 
  • trunk/Packages/Common/Geometric.pas

    r218 r219  
    1 unit UGeometric;
    2 
    3 {$mode delphi}
     1unit Geometric;
    42
    53interface
     
    108type
    119  TPointArray = array of TPoint;
     10
     11  { TVector }
     12
     13  TVector = record
     14    Position: TPoint;
     15    Direction: TPoint;
     16    function GetLength: Double;
     17    function GetAngle: Double;
     18    procedure SetLength(Value: Double);
     19    class function Create(P1, P2: TPoint): TVector; static;
     20  end;
    1221
    1322function Distance(P1, P2: TPoint): Integer;
     
    1524function AddPoint(const P1, P2: TPoint): TPoint;
    1625function SubPoint(const P1, P2: TPoint): TPoint;
    17 function PointToLineDistance(const P, V, W: TPoint): Integer;
     26function PointToLineDistance(const P, V, W: TPoint; out Intersect: TPoint): Integer;
    1827function ComparePoint(P1, P2: TPoint): Boolean;
    1928function RotatePoint(Center, P: TPoint; Angle: Double): TPoint;
     
    2736function ShiftRect(ARect: TRect; Delta: TPoint): TRect;
    2837
     38
    2939implementation
    3040
     
    5161end;
    5262
    53 function PointToLineDistance(const P, V, W: TPoint): Integer;
     63function PointToLineDistance(const P, V, W: TPoint; out Intersect: TPoint): Integer;
    5464var
    5565  l2, t: Double;
     
    6979  if T < 0 then begin
    7080    Result := Distance(P, V);       // Beyond the 'v' end of the segment
    71     exit;
     81    Intersect := V;
     82    Exit;
    7283  end
    7384  else if T > 1 then begin
    7485    Result := Distance(P, W);  // Beyond the 'w' end of the segment
     86    Intersect := W;
    7587    Exit;
    7688  end;
     
    7890  TT.Y := Trunc(V.Y + T * (W.Y - V.Y));
    7991  Result := Distance(P, TT);
     92  Intersect := TT;
    8093end;
    8194
     
    163176end;
    164177
     178{ TVector }
     179
     180function TVector.GetLength: Double;
     181begin
     182  Result := Sqrt(Sqr(Direction.X) + Sqr(Direction.Y));
     183end;
     184
     185function TVector.GetAngle: Double;
     186begin
     187  Result := ArcTan2(Direction.Y, Direction.X);
     188end;
     189
     190procedure TVector.SetLength(Value: Double);
     191var
     192  Angle: Double;
     193begin
     194  Angle := GetAngle;
     195  Direction := Point(Round(Cos(Angle) * Value),
     196    Round(Sin(Angle) * Value));
     197end;
     198
     199class function TVector.Create(P1, P2: TPoint): TVector;
     200begin
     201  Result.Position := P1;
     202  Result.Direction := Point(P2.X - P1.X, P2.Y - P1.Y);
     203end;
    165204
    166205end.
    167 
  • trunk/Packages/Common/JobProgressView.pas

    r218 r219  
    1 unit UJobProgressView;
    2 
    3 {$MODE Delphi}
     1unit JobProgressView;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms, Syncobjs,
    9   Dialogs, ComCtrls, StdCtrls, ExtCtrls, fgl, UThreading, Math,
     7  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Generics.Collections, Threading, Math,
    108  DateUtils;
    119
     
    7169  end;
    7270
    73   TJobs = class(TFPGObjectList<TJob>)
     71  TJobs = class(TObjectList<TJob>)
    7472  end;
    7573
     
    156154  end;
    157155
    158   //var
    159   //  FormJobProgressView: TFormJobProgressView;
    160 
    161156procedure Register;
    162157
    163158resourcestring
    164159  SExecuted = 'Executed';
     160
    165161
    166162implementation
     
    186182  try
    187183    try
    188       //raise Exception.Create('Exception in job');
    189184      ProgressView.CurrentJob.Method(Job);
    190185    except
     
    642637begin
    643638  FLock.Free;
    644   inherited Destroy;
     639  inherited;
    645640end;
    646641
  • trunk/Packages/Common/Languages.pas

    r218 r219  
    1 unit ULanguages;
    2 
    3 {$mode delphi}{$H+}
     1unit Languages;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, fgl;
     6  Classes, SysUtils, Generics.Collections;
    97
    108type
     
    1715  { TLanguages }
    1816
    19   TLanguages = class(TFPGObjectList<TLanguage>)
     17  TLanguages = class(TObjectList<TLanguage>)
    2018    function SearchByCode(ACode: string): TLanguage;
    2119    procedure AddNew(Code: string; Name: string);
     
    218216  SLang_za = 'Zhuang';
    219217  SLang_zh = 'Chinese';
     218  SLang_zh_Hans = 'Simplified Chinese';
     219  SLang_zh_Hant = 'Traditional Chinese';
    220220  SLang_zu = 'Zulu';
     221
    221222
    222223implementation
     
    230231begin
    231232  I := 0;
    232   while (I < Count) and (TLanguage(Items[I]).Code < ACode) do Inc(I);
    233   if I < Count then Result := TLanguage(Items[I])
     233  while (I < Count) and (Items[I].Code <> ACode) do Inc(I);
     234  if I < Count then Result := Items[I]
    234235    else Result := nil;
    235236end;
     
    441442  AddNew('za', SLang_za);
    442443  AddNew('zh', SLang_zh);
     444  AddNew('zh-Hant', SLang_zh_Hant);
     445  AddNew('zh-Hans', SLang_zh_Hans);
    443446  AddNew('zu', SLang_zu);
    444447end;
    445448
    446449end.
    447 
  • trunk/Packages/Common/Languages/DebugLog.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Jiří Hajda <robie@centrum.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
     12"X-Generator: Poedit 3.0.1\n"
    1113
    12 #: udebuglog.sfilenamenotdefined
     14#: debuglog.sfilenamenotdefined
     15msgctxt "debuglog.sfilenamenotdefined"
    1316msgid "Filename not defined"
    1417msgstr "Neurčen soubor"
  • trunk/Packages/Common/Languages/DebugLog.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: udebuglog.sfilenamenotdefined
     4#: debuglog.sfilenamenotdefined
    55msgid "Filename not defined"
    66msgstr ""
  • trunk/Packages/Common/Languages/FindFile.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: \n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
    11 "Language: cs\n"
    12 "X-Generator: Poedit 1.8.9\n"
     12"X-Generator: Poedit 3.0.1\n"
    1313
    14 #: ufindfile.sdirnotfound
     14#: findfile.sdirnotfound
     15msgctxt "findfile.sdirnotfound"
    1516msgid "Directory not found"
    1617msgstr "Adresář nenalezen"
  • trunk/Packages/Common/Languages/FindFile.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ufindfile.sdirnotfound
     4#: findfile.sdirnotfound
    55msgid "Directory not found"
    66msgstr ""
  • trunk/Packages/Common/Languages/FormAbout.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Chronos <robie@centrum.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
    11 "Language: cs\n"
    12 "X-Generator: Poedit 2.4.1\n"
     12"X-Generator: Poedit 3.4.2\n"
    1313
    14 #: uformabout.slicense
     14#: formabout.sclose
     15msgid "Close"
     16msgstr "Zavřít"
     17
     18#: formabout.shomepage
     19msgid "Home page"
     20msgstr "Domovská stránka"
     21
     22#: formabout.slicense
     23msgctxt "formabout.slicense"
    1524msgid "License"
    1625msgstr "Licence"
    1726
    18 #: uformabout.sreleasedate
     27#: formabout.sreleasedate
     28msgctxt "formabout.sreleasedate"
    1929msgid "Release date"
    2030msgstr "Datum uvolnění"
    2131
    22 #: uformabout.sversion
     32#: formabout.sversion
     33msgctxt "formabout.sversion"
    2334msgid "Version"
    2435msgstr "Verze"
  • trunk/Packages/Common/Languages/FormAbout.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uformabout.slicense
     4#: formabout.sclose
     5msgid "Close"
     6msgstr ""
     7
     8#: formabout.shomepage
     9msgid "Home page"
     10msgstr ""
     11
     12#: formabout.slicense
    513msgid "License"
    614msgstr ""
    715
    8 #: uformabout.sreleasedate
     16#: formabout.sreleasedate
    917msgid "Release date"
    1018msgstr ""
    1119
    12 #: uformabout.sversion
     20#: formabout.sversion
    1321msgid "Version"
    1422msgstr ""
  • trunk/Packages/Common/Languages/JobProgressView.cs.po

    r218 r219  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "X-Generator: Poedit 2.2\n"
     12"X-Generator: Poedit 3.0.1\n"
    1313
    14 #: ujobprogressview.sestimatedtime
     14#: jobprogressview.sestimatedtime
    1515#, object-pascal-format
     16msgctxt "jobprogressview.sestimatedtime"
    1617msgid "Estimated time: %s"
    1718msgstr "Odhadovaný čas: %s"
    1819
    19 #: ujobprogressview.sexecuted
     20#: jobprogressview.sexecuted
     21msgctxt "jobprogressview.sexecuted"
    2022msgid "Executed"
    2123msgstr "Vykonané"
    2224
    23 #: ujobprogressview.sfinished
     25#: jobprogressview.sfinished
     26msgctxt "jobprogressview.sfinished"
    2427msgid "Finished"
    2528msgstr "Dokončené"
    2629
    27 #: ujobprogressview.spleasewait
     30#: jobprogressview.spleasewait
     31msgctxt "jobprogressview.spleasewait"
    2832msgid "Please wait..."
    2933msgstr "Prosím čekejte..."
    3034
    31 #: ujobprogressview.sterminate
     35#: jobprogressview.sterminate
     36msgctxt "jobprogressview.sterminate"
    3237msgid "Termination"
    3338msgstr "Přerušení"
    3439
    35 #: ujobprogressview.stotalestimatedtime
     40#: jobprogressview.stotalestimatedtime
    3641#, object-pascal-format
     42msgctxt "jobprogressview.stotalestimatedtime"
    3743msgid "Total estimated time: %s"
    3844msgstr "Celkový odhadovaný čas: %s"
  • trunk/Packages/Common/Languages/JobProgressView.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ujobprogressview.sestimatedtime
     4#: jobprogressview.sestimatedtime
    55#, object-pascal-format
    66msgid "Estimated time: %s"
    77msgstr ""
    88
    9 #: ujobprogressview.sexecuted
     9#: jobprogressview.sexecuted
    1010msgid "Executed"
    1111msgstr ""
    1212
    13 #: ujobprogressview.sfinished
     13#: jobprogressview.sfinished
    1414msgid "Finished"
    1515msgstr ""
    1616
    17 #: ujobprogressview.spleasewait
     17#: jobprogressview.spleasewait
    1818msgid "Please wait..."
    1919msgstr ""
    2020
    21 #: ujobprogressview.sterminate
     21#: jobprogressview.sterminate
    2222msgid "Termination"
    2323msgstr ""
    2424
    25 #: ujobprogressview.stotalestimatedtime
     25#: jobprogressview.stotalestimatedtime
    2626#, object-pascal-format
    2727msgid "Total estimated time: %s"
  • trunk/Packages/Common/Languages/Languages.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Jiří Hajda <software@mezservis.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
    11 
    12 #: ulanguages.slangauto
     12"X-Generator: Poedit 3.0.1\n"
     13
     14#: languages.slangauto
     15msgctxt "languages.slangauto"
    1316msgid "Automatic"
    1417msgstr "Automaticky"
    1518
    16 #: ulanguages.slang_aa
     19#: languages.slang_aa
     20msgctxt "languages.slang_aa"
    1721msgid "Afar"
    1822msgstr ""
    1923
    20 #: ulanguages.slang_ab
     24#: languages.slang_ab
     25msgctxt "languages.slang_ab"
    2126msgid "Abkhazian"
    2227msgstr "Abcházština"
    2328
    24 #: ulanguages.slang_ae
     29#: languages.slang_ae
     30msgctxt "languages.slang_ae"
    2531msgid "Avestan"
    2632msgstr ""
    2733
    28 #: ulanguages.slang_af
     34#: languages.slang_af
     35msgctxt "languages.slang_af"
    2936msgid "Afrikaans"
    3037msgstr "Afrikánština"
    3138
    32 #: ulanguages.slang_ak
     39#: languages.slang_ak
     40msgctxt "languages.slang_ak"
    3341msgid "Akan"
    3442msgstr ""
    3543
    36 #: ulanguages.slang_am
     44#: languages.slang_am
     45msgctxt "languages.slang_am"
    3746msgid "Amharic"
    3847msgstr ""
    3948
    40 #: ulanguages.slang_an
     49#: languages.slang_an
     50msgctxt "languages.slang_an"
    4151msgid "Aragonese"
    4252msgstr ""
    4353
    44 #: ulanguages.slang_ar
     54#: languages.slang_ar
     55msgctxt "languages.slang_ar"
    4556msgid "Arabic"
    4657msgstr "Arabština"
    4758
    48 #: ulanguages.slang_as
     59#: languages.slang_as
     60msgctxt "languages.slang_as"
    4961msgid "Assamese"
    5062msgstr ""
    5163
    52 #: ulanguages.slang_av
     64#: languages.slang_av
     65msgctxt "languages.slang_av"
    5366msgid "Avaric"
    5467msgstr ""
    5568
    56 #: ulanguages.slang_ay
     69#: languages.slang_ay
     70msgctxt "languages.slang_ay"
    5771msgid "Aymara"
    5872msgstr ""
    5973
    60 #: ulanguages.slang_az
     74#: languages.slang_az
     75msgctxt "languages.slang_az"
    6176msgid "Azerbaijani"
    6277msgstr ""
    6378
    64 #: ulanguages.slang_ba
     79#: languages.slang_ba
     80msgctxt "languages.slang_ba"
    6581msgid "Bashkir"
    6682msgstr ""
    6783
    68 #: ulanguages.slang_be
     84#: languages.slang_be
     85msgctxt "languages.slang_be"
    6986msgid "Belarusian"
    7087msgstr ""
    7188
    72 #: ulanguages.slang_bg
     89#: languages.slang_bg
     90msgctxt "languages.slang_bg"
    7391msgid "Bulgarian"
    7492msgstr "Maďarština"
    7593
    76 #: ulanguages.slang_bh
     94#: languages.slang_bh
     95msgctxt "languages.slang_bh"
    7796msgid "Bihari"
    7897msgstr ""
    7998
    80 #: ulanguages.slang_bi
     99#: languages.slang_bi
     100msgctxt "languages.slang_bi"
    81101msgid "Bislama"
    82102msgstr ""
    83103
    84 #: ulanguages.slang_bm
     104#: languages.slang_bm
     105msgctxt "languages.slang_bm"
    85106msgid "Bambara"
    86107msgstr ""
    87108
    88 #: ulanguages.slang_bn
     109#: languages.slang_bn
     110msgctxt "languages.slang_bn"
    89111msgid "Bengali"
    90112msgstr ""
    91113
    92 #: ulanguages.slang_bo
     114#: languages.slang_bo
     115msgctxt "languages.slang_bo"
    93116msgid "Tibetan"
    94117msgstr "Tibetština"
    95118
    96 #: ulanguages.slang_br
     119#: languages.slang_br
     120msgctxt "languages.slang_br"
    97121msgid "Breton"
    98122msgstr ""
    99123
    100 #: ulanguages.slang_bs
     124#: languages.slang_bs
     125msgctxt "languages.slang_bs"
    101126msgid "Bosnian"
    102127msgstr ""
    103128
    104 #: ulanguages.slang_ca
     129#: languages.slang_ca
     130msgctxt "languages.slang_ca"
    105131msgid "Catalan"
    106132msgstr "Katalánština"
    107133
    108 #: ulanguages.slang_ce
     134#: languages.slang_ce
     135msgctxt "languages.slang_ce"
    109136msgid "Chechen"
    110137msgstr ""
    111138
    112 #: ulanguages.slang_ch
     139#: languages.slang_ch
     140msgctxt "languages.slang_ch"
    113141msgid "Chamorro"
    114142msgstr ""
    115143
    116 #: ulanguages.slang_co
     144#: languages.slang_co
     145msgctxt "languages.slang_co"
    117146msgid "Corsican"
    118147msgstr ""
    119148
    120 #: ulanguages.slang_cr
     149#: languages.slang_cr
     150msgctxt "languages.slang_cr"
    121151msgid "Cree"
    122152msgstr "Kríjština"
    123153
    124 #: ulanguages.slang_cs
     154#: languages.slang_cs
     155msgctxt "languages.slang_cs"
    125156msgid "Czech"
    126157msgstr "Čeština"
    127158
    128 #: ulanguages.slang_cv
     159#: languages.slang_cv
     160msgctxt "languages.slang_cv"
    129161msgid "Chuvash"
    130162msgstr ""
    131163
    132 #: ulanguages.slang_cy
     164#: languages.slang_cy
     165msgctxt "languages.slang_cy"
    133166msgid "Welsh"
    134167msgstr ""
    135168
    136 #: ulanguages.slang_da
     169#: languages.slang_da
     170msgctxt "languages.slang_da"
    137171msgid "Danish"
    138172msgstr "Dánština"
    139173
    140 #: ulanguages.slang_de
     174#: languages.slang_de
     175msgctxt "languages.slang_de"
    141176msgid "German"
    142177msgstr "Němčina"
    143178
    144 #: ulanguages.slang_de_at
     179#: languages.slang_de_at
     180msgctxt "languages.slang_de_at"
    145181msgid "Austrian German"
    146182msgstr "Australská němčina"
    147183
    148 #: ulanguages.slang_de_ch
     184#: languages.slang_de_ch
     185msgctxt "languages.slang_de_ch"
    149186msgid "Swiss German"
    150187msgstr "Švédská němčina"
    151188
    152 #: ulanguages.slang_dv
     189#: languages.slang_dv
     190msgctxt "languages.slang_dv"
    153191msgid "Divehi"
    154192msgstr ""
    155193
    156 #: ulanguages.slang_dz
     194#: languages.slang_dz
     195msgctxt "languages.slang_dz"
    157196msgid "Dzongkha"
    158197msgstr ""
    159198
    160 #: ulanguages.slang_ee
     199#: languages.slang_ee
     200msgctxt "languages.slang_ee"
    161201msgid "Ewe"
    162202msgstr ""
    163203
    164 #: ulanguages.slang_el
     204#: languages.slang_el
     205msgctxt "languages.slang_el"
    165206msgid "Greek"
    166207msgstr "Řečtina"
    167208
    168 #: ulanguages.slang_en
     209#: languages.slang_en
     210msgctxt "languages.slang_en"
    169211msgid "English"
    170212msgstr "Angličtina"
    171213
    172 #: ulanguages.slang_en_au
     214#: languages.slang_en_au
     215msgctxt "languages.slang_en_au"
    173216msgid "Australian English"
    174217msgstr "Australská angličtina"
    175218
    176 #: ulanguages.slang_en_ca
     219#: languages.slang_en_ca
     220msgctxt "languages.slang_en_ca"
    177221msgid "Canadian English"
    178222msgstr "Kanadská angličtina"
    179223
    180 #: ulanguages.slang_en_gb
     224#: languages.slang_en_gb
     225msgctxt "languages.slang_en_gb"
    181226msgid "British English"
    182227msgstr "Britská angličtina"
    183228
    184 #: ulanguages.slang_en_us
     229#: languages.slang_en_us
     230msgctxt "languages.slang_en_us"
    185231msgid "American English"
    186232msgstr "Americká angličtina"
    187233
    188 #: ulanguages.slang_eo
     234#: languages.slang_eo
     235msgctxt "languages.slang_eo"
    189236msgid "Esperanto"
    190237msgstr "Esperanto"
    191238
    192 #: ulanguages.slang_es
     239#: languages.slang_es
     240msgctxt "languages.slang_es"
    193241msgid "Spanish"
    194242msgstr "Španělština"
    195243
    196 #: ulanguages.slang_et
     244#: languages.slang_et
     245msgctxt "languages.slang_et"
    197246msgid "Estonian"
    198247msgstr "Estonština"
    199248
    200 #: ulanguages.slang_eu
     249#: languages.slang_eu
     250msgctxt "languages.slang_eu"
    201251msgid "Basque"
    202252msgstr ""
    203253
    204 #: ulanguages.slang_fa
     254#: languages.slang_fa
     255msgctxt "languages.slang_fa"
    205256msgid "Persian"
    206257msgstr "Perština"
    207258
    208 #: ulanguages.slang_ff
     259#: languages.slang_ff
     260msgctxt "languages.slang_ff"
    209261msgid "Fulah"
    210262msgstr ""
    211263
    212 #: ulanguages.slang_fi
     264#: languages.slang_fi
     265msgctxt "languages.slang_fi"
    213266msgid "Finnish"
    214267msgstr "Finština"
    215268
    216 #: ulanguages.slang_fj
     269#: languages.slang_fj
     270msgctxt "languages.slang_fj"
    217271msgid "Fijian"
    218272msgstr ""
    219273
    220 #: ulanguages.slang_fo
     274#: languages.slang_fo
     275msgctxt "languages.slang_fo"
    221276msgid "Faroese"
    222277msgstr ""
    223278
    224 #: ulanguages.slang_fr
     279#: languages.slang_fr
     280msgctxt "languages.slang_fr"
    225281msgid "French"
    226282msgstr "Francouzština"
    227283
    228 #: ulanguages.slang_fr_be
    229 msgctxt "ulanguages.slang_fr_be"
     284#: languages.slang_fr_be
     285msgctxt "languages.slang_fr_be"
    230286msgid "Walloon"
    231287msgstr ""
    232288
    233 #: ulanguages.slang_fy
     289#: languages.slang_fy
     290msgctxt "languages.slang_fy"
    234291msgid "Frisian"
    235292msgstr ""
    236293
    237 #: ulanguages.slang_ga
     294#: languages.slang_ga
     295msgctxt "languages.slang_ga"
    238296msgid "Irish"
    239297msgstr "Irština"
    240298
    241 #: ulanguages.slang_gd
     299#: languages.slang_gd
     300msgctxt "languages.slang_gd"
    242301msgid "Gaelic"
    243302msgstr ""
    244303
    245 #: ulanguages.slang_gl
     304#: languages.slang_gl
     305msgctxt "languages.slang_gl"
    246306msgid "Gallegan"
    247307msgstr ""
    248308
    249 #: ulanguages.slang_gn
     309#: languages.slang_gn
     310msgctxt "languages.slang_gn"
    250311msgid "Guarani"
    251312msgstr ""
    252313
    253 #: ulanguages.slang_gu
     314#: languages.slang_gu
     315msgctxt "languages.slang_gu"
    254316msgid "Gujarati"
    255317msgstr ""
    256318
    257 #: ulanguages.slang_gv
     319#: languages.slang_gv
     320msgctxt "languages.slang_gv"
    258321msgid "Manx"
    259322msgstr ""
    260323
    261 #: ulanguages.slang_ha
     324#: languages.slang_ha
     325msgctxt "languages.slang_ha"
    262326msgid "Hausa"
    263327msgstr ""
    264328
    265 #: ulanguages.slang_he
     329#: languages.slang_he
     330msgctxt "languages.slang_he"
    266331msgid "Hebrew"
    267332msgstr "Hebrejština"
    268333
    269 #: ulanguages.slang_hi
     334#: languages.slang_hi
     335msgctxt "languages.slang_hi"
    270336msgid "Hindi"
    271337msgstr ""
    272338
    273 #: ulanguages.slang_ho
     339#: languages.slang_ho
     340msgctxt "languages.slang_ho"
    274341msgid "Hiri Motu"
    275342msgstr ""
    276343
    277 #: ulanguages.slang_hr
     344#: languages.slang_hr
     345msgctxt "languages.slang_hr"
    278346msgid "Croatian"
    279347msgstr "Chorvatština"
    280348
    281 #: ulanguages.slang_ht
     349#: languages.slang_ht
     350msgctxt "languages.slang_ht"
    282351msgid "Haitian"
    283352msgstr ""
    284353
    285 #: ulanguages.slang_hu
     354#: languages.slang_hu
     355msgctxt "languages.slang_hu"
    286356msgid "Hungarian"
    287357msgstr "Maďarština"
    288358
    289 #: ulanguages.slang_hy
     359#: languages.slang_hy
     360msgctxt "languages.slang_hy"
    290361msgid "Armenian"
    291362msgstr "Arménština"
    292363
    293 #: ulanguages.slang_hz
     364#: languages.slang_hz
     365msgctxt "languages.slang_hz"
    294366msgid "Herero"
    295367msgstr ""
    296368
    297 #: ulanguages.slang_ia
     369#: languages.slang_ia
     370msgctxt "languages.slang_ia"
    298371msgid "Interlingua"
    299372msgstr ""
    300373
    301 #: ulanguages.slang_id
     374#: languages.slang_id
     375msgctxt "languages.slang_id"
    302376msgid "Indonesian"
    303377msgstr ""
    304378
    305 #: ulanguages.slang_ie
     379#: languages.slang_ie
     380msgctxt "languages.slang_ie"
    306381msgid "Interlingue"
    307382msgstr ""
    308383
    309 #: ulanguages.slang_ig
     384#: languages.slang_ig
     385msgctxt "languages.slang_ig"
    310386msgid "Igbo"
    311387msgstr ""
    312388
    313 #: ulanguages.slang_ii
     389#: languages.slang_ii
     390msgctxt "languages.slang_ii"
    314391msgid "Sichuan Yi"
    315392msgstr ""
    316393
    317 #: ulanguages.slang_ik
     394#: languages.slang_ik
     395msgctxt "languages.slang_ik"
    318396msgid "Inupiaq"
    319397msgstr ""
    320398
    321 #: ulanguages.slang_io
     399#: languages.slang_io
     400msgctxt "languages.slang_io"
    322401msgid "Ido"
    323402msgstr ""
    324403
    325 #: ulanguages.slang_is
     404#: languages.slang_is
     405msgctxt "languages.slang_is"
    326406msgid "Icelandic"
    327407msgstr "Islandština"
    328408
    329 #: ulanguages.slang_it
     409#: languages.slang_it
     410msgctxt "languages.slang_it"
    330411msgid "Italian"
    331412msgstr "Italština"
    332413
    333 #: ulanguages.slang_iu
     414#: languages.slang_iu
     415msgctxt "languages.slang_iu"
    334416msgid "Inuktitut"
    335417msgstr ""
    336418
    337 #: ulanguages.slang_ja
     419#: languages.slang_ja
     420msgctxt "languages.slang_ja"
    338421msgid "Japanese"
    339422msgstr "Japonština"
    340423
    341 #: ulanguages.slang_jv
     424#: languages.slang_jv
     425msgctxt "languages.slang_jv"
    342426msgid "Javanese"
    343427msgstr ""
    344428
    345 #: ulanguages.slang_ka
     429#: languages.slang_ka
     430msgctxt "languages.slang_ka"
    346431msgid "Georgian"
    347432msgstr "Gruzínština"
    348433
    349 #: ulanguages.slang_kg
     434#: languages.slang_kg
     435msgctxt "languages.slang_kg"
    350436msgid "Kongo"
    351437msgstr "Konžština"
    352438
    353 #: ulanguages.slang_ki
     439#: languages.slang_ki
     440msgctxt "languages.slang_ki"
    354441msgid "Kikuyu"
    355442msgstr ""
    356443
    357 #: ulanguages.slang_kj
     444#: languages.slang_kj
     445msgctxt "languages.slang_kj"
    358446msgid "Kuanyama"
    359447msgstr ""
    360448
    361 #: ulanguages.slang_kk
     449#: languages.slang_kk
     450msgctxt "languages.slang_kk"
    362451msgid "Kazakh"
    363452msgstr ""
    364453
    365 #: ulanguages.slang_kl
     454#: languages.slang_kl
     455msgctxt "languages.slang_kl"
    366456msgid "Greenlandic"
    367457msgstr "Grónština"
    368458
    369 #: ulanguages.slang_km
     459#: languages.slang_km
     460msgctxt "languages.slang_km"
    370461msgid "Khmer"
    371462msgstr ""
    372463
    373 #: ulanguages.slang_kn
     464#: languages.slang_kn
     465msgctxt "languages.slang_kn"
    374466msgid "Kannada"
    375467msgstr "Kannadština"
    376468
    377 #: ulanguages.slang_ko
     469#: languages.slang_ko
     470msgctxt "languages.slang_ko"
    378471msgid "Korean"
    379472msgstr "Korejština"
    380473
    381 #: ulanguages.slang_kr
     474#: languages.slang_kr
     475msgctxt "languages.slang_kr"
    382476msgid "Kanuri"
    383477msgstr ""
    384478
    385 #: ulanguages.slang_ks
     479#: languages.slang_ks
     480msgctxt "languages.slang_ks"
    386481msgid "Kashmiri"
    387482msgstr ""
    388483
    389 #: ulanguages.slang_ku
     484#: languages.slang_ku
     485msgctxt "languages.slang_ku"
    390486msgid "Kurdish"
    391487msgstr ""
    392488
    393 #: ulanguages.slang_kv
     489#: languages.slang_kv
     490msgctxt "languages.slang_kv"
    394491msgid "Komi"
    395492msgstr ""
    396493
    397 #: ulanguages.slang_kw
     494#: languages.slang_kw
     495msgctxt "languages.slang_kw"
    398496msgid "Cornish"
    399497msgstr "Kornština"
    400498
    401 #: ulanguages.slang_ky
     499#: languages.slang_ky
     500msgctxt "languages.slang_ky"
    402501msgid "Kirghiz"
    403502msgstr ""
    404503
    405 #: ulanguages.slang_la
     504#: languages.slang_la
     505msgctxt "languages.slang_la"
    406506msgid "Latin"
    407507msgstr "Latina"
    408508
    409 #: ulanguages.slang_lb
     509#: languages.slang_lb
     510msgctxt "languages.slang_lb"
    410511msgid "Luxembourgish"
    411512msgstr "Lucemburština"
    412513
    413 #: ulanguages.slang_lg
     514#: languages.slang_lg
     515msgctxt "languages.slang_lg"
    414516msgid "Ganda"
    415517msgstr ""
    416518
    417 #: ulanguages.slang_li
     519#: languages.slang_li
     520msgctxt "languages.slang_li"
    418521msgid "Limburgan"
    419522msgstr ""
    420523
    421 #: ulanguages.slang_ln
     524#: languages.slang_ln
     525msgctxt "languages.slang_ln"
    422526msgid "Lingala"
    423527msgstr ""
    424528
    425 #: ulanguages.slang_lo
     529#: languages.slang_lo
     530msgctxt "languages.slang_lo"
    426531msgid "Lao"
    427532msgstr "Laoština"
    428533
    429 #: ulanguages.slang_lt
     534#: languages.slang_lt
     535msgctxt "languages.slang_lt"
    430536msgid "Lithuanian"
    431537msgstr "Litevština"
    432538
    433 #: ulanguages.slang_lu
     539#: languages.slang_lu
     540msgctxt "languages.slang_lu"
    434541msgid "Luba-Katanga"
    435542msgstr ""
    436543
    437 #: ulanguages.slang_lv
     544#: languages.slang_lv
     545msgctxt "languages.slang_lv"
    438546msgid "Latvian"
    439547msgstr "Lotyština"
    440548
    441 #: ulanguages.slang_mg
     549#: languages.slang_mg
     550msgctxt "languages.slang_mg"
    442551msgid "Malagasy"
    443552msgstr ""
    444553
    445 #: ulanguages.slang_mh
     554#: languages.slang_mh
     555msgctxt "languages.slang_mh"
    446556msgid "Marshallese"
    447557msgstr ""
    448558
    449 #: ulanguages.slang_mi
     559#: languages.slang_mi
     560msgctxt "languages.slang_mi"
    450561msgid "Maori"
    451562msgstr ""
    452563
    453 #: ulanguages.slang_mk
     564#: languages.slang_mk
     565msgctxt "languages.slang_mk"
    454566msgid "Macedonian"
    455567msgstr "Makedonština"
    456568
    457 #: ulanguages.slang_ml
     569#: languages.slang_ml
     570msgctxt "languages.slang_ml"
    458571msgid "Malayalam"
    459572msgstr ""
    460573
    461 #: ulanguages.slang_mn
     574#: languages.slang_mn
     575msgctxt "languages.slang_mn"
    462576msgid "Mongolian"
    463577msgstr "Mongolština"
    464578
    465 #: ulanguages.slang_mo
     579#: languages.slang_mo
     580msgctxt "languages.slang_mo"
    466581msgid "Moldavian"
    467582msgstr "Moldavština"
    468583
    469 #: ulanguages.slang_mr
     584#: languages.slang_mr
     585msgctxt "languages.slang_mr"
    470586msgid "Marathi"
    471587msgstr ""
    472588
    473 #: ulanguages.slang_ms
     589#: languages.slang_ms
     590msgctxt "languages.slang_ms"
    474591msgid "Malay"
    475592msgstr ""
    476593
    477 #: ulanguages.slang_mt
     594#: languages.slang_mt
     595msgctxt "languages.slang_mt"
    478596msgid "Maltese"
    479597msgstr ""
    480598
    481 #: ulanguages.slang_my
     599#: languages.slang_my
     600msgctxt "languages.slang_my"
    482601msgid "Burmese"
    483602msgstr ""
    484603
    485 #: ulanguages.slang_na
     604#: languages.slang_na
     605msgctxt "languages.slang_na"
    486606msgid "Nauru"
    487607msgstr ""
    488608
    489 #: ulanguages.slang_nb
     609#: languages.slang_nb
     610msgctxt "languages.slang_nb"
    490611msgid "Norwegian Bokmaal"
    491612msgstr ""
    492613
    493 #: ulanguages.slang_nd
     614#: languages.slang_nd
     615msgctxt "languages.slang_nd"
    494616msgid "Ndebele, North"
    495617msgstr ""
    496618
    497 #: ulanguages.slang_ne
     619#: languages.slang_ne
     620msgctxt "languages.slang_ne"
    498621msgid "Nepali"
    499622msgstr ""
    500623
    501 #: ulanguages.slang_ng
     624#: languages.slang_ng
     625msgctxt "languages.slang_ng"
    502626msgid "Ndonga"
    503627msgstr ""
    504628
    505 #: ulanguages.slang_nl
     629#: languages.slang_nl
     630msgctxt "languages.slang_nl"
    506631msgid "Dutch"
    507632msgstr "Němčina"
    508633
    509 #: ulanguages.slang_nl_be
     634#: languages.slang_nl_be
     635msgctxt "languages.slang_nl_be"
    510636msgid "Flemish"
    511637msgstr ""
    512638
    513 #: ulanguages.slang_nn
     639#: languages.slang_nn
     640msgctxt "languages.slang_nn"
    514641msgid "Norwegian Nynorsk"
    515642msgstr ""
    516643
    517 #: ulanguages.slang_no
     644#: languages.slang_no
     645msgctxt "languages.slang_no"
    518646msgid "Norwegian"
    519647msgstr "Norština"
    520648
    521 #: ulanguages.slang_nr
     649#: languages.slang_nr
     650msgctxt "languages.slang_nr"
    522651msgid "Ndebele, South"
    523652msgstr ""
    524653
    525 #: ulanguages.slang_nv
     654#: languages.slang_nv
     655msgctxt "languages.slang_nv"
    526656msgid "Navajo"
    527657msgstr "Navažština"
    528658
    529 #: ulanguages.slang_ny
     659#: languages.slang_ny
     660msgctxt "languages.slang_ny"
    530661msgid "Chichewa"
    531662msgstr ""
    532663
    533 #: ulanguages.slang_oc
     664#: languages.slang_oc
     665msgctxt "languages.slang_oc"
    534666msgid "Occitan"
    535667msgstr ""
    536668
    537 #: ulanguages.slang_oj
     669#: languages.slang_oj
     670msgctxt "languages.slang_oj"
    538671msgid "Ojibwa"
    539672msgstr ""
    540673
    541 #: ulanguages.slang_om
     674#: languages.slang_om
     675msgctxt "languages.slang_om"
    542676msgid "Oromo"
    543677msgstr ""
    544678
    545 #: ulanguages.slang_or
     679#: languages.slang_or
     680msgctxt "languages.slang_or"
    546681msgid "Oriya"
    547682msgstr ""
    548683
    549 #: ulanguages.slang_os
     684#: languages.slang_os
     685msgctxt "languages.slang_os"
    550686msgid "Ossetian"
    551687msgstr ""
    552688
    553 #: ulanguages.slang_pa
     689#: languages.slang_pa
     690msgctxt "languages.slang_pa"
    554691msgid "Panjabi"
    555692msgstr ""
    556693
    557 #: ulanguages.slang_pi
     694#: languages.slang_pi
     695msgctxt "languages.slang_pi"
    558696msgid "Pali"
    559697msgstr ""
    560698
    561 #: ulanguages.slang_pl
     699#: languages.slang_pl
     700msgctxt "languages.slang_pl"
    562701msgid "Polish"
    563702msgstr "Polština"
    564703
    565 #: ulanguages.slang_ps
     704#: languages.slang_ps
     705msgctxt "languages.slang_ps"
    566706msgid "Pushto"
    567707msgstr ""
    568708
    569 #: ulanguages.slang_pt
     709#: languages.slang_pt
     710msgctxt "languages.slang_pt"
    570711msgid "Portuguese"
    571712msgstr "Portugalština"
    572713
    573 #: ulanguages.slang_pt_br
     714#: languages.slang_pt_br
     715msgctxt "languages.slang_pt_br"
    574716msgid "Brazilian Portuguese"
    575717msgstr "Brazislká portugalština"
    576718
    577 #: ulanguages.slang_qu
     719#: languages.slang_qu
     720msgctxt "languages.slang_qu"
    578721msgid "Quechua"
    579722msgstr ""
    580723
    581 #: ulanguages.slang_rm
     724#: languages.slang_rm
     725msgctxt "languages.slang_rm"
    582726msgid "Raeto-Romance"
    583727msgstr ""
    584728
    585 #: ulanguages.slang_rn
     729#: languages.slang_rn
     730msgctxt "languages.slang_rn"
    586731msgid "Rundi"
    587732msgstr ""
    588733
    589 #: ulanguages.slang_ro
     734#: languages.slang_ro
     735msgctxt "languages.slang_ro"
    590736msgid "Romanian"
    591737msgstr "Romština"
    592738
    593 #: ulanguages.slang_ru
     739#: languages.slang_ru
     740msgctxt "languages.slang_ru"
    594741msgid "Russian"
    595742msgstr "Ruština"
    596743
    597 #: ulanguages.slang_rw
     744#: languages.slang_rw
     745msgctxt "languages.slang_rw"
    598746msgid "Kinyarwanda"
    599747msgstr ""
    600748
    601 #: ulanguages.slang_sa
     749#: languages.slang_sa
     750msgctxt "languages.slang_sa"
    602751msgid "Sanskrit"
    603752msgstr ""
    604753
    605 #: ulanguages.slang_sc
     754#: languages.slang_sc
     755msgctxt "languages.slang_sc"
    606756msgid "Sardinian"
    607757msgstr ""
    608758
    609 #: ulanguages.slang_sd
     759#: languages.slang_sd
     760msgctxt "languages.slang_sd"
    610761msgid "Sindhi"
    611762msgstr ""
    612763
    613 #: ulanguages.slang_se
     764#: languages.slang_se
     765msgctxt "languages.slang_se"
    614766msgid "Northern Sami"
    615767msgstr ""
    616768
    617 #: ulanguages.slang_sg
     769#: languages.slang_sg
     770msgctxt "languages.slang_sg"
    618771msgid "Sango"
    619772msgstr ""
    620773
    621 #: ulanguages.slang_si
     774#: languages.slang_si
     775msgctxt "languages.slang_si"
    622776msgid "Sinhalese"
    623777msgstr ""
    624778
    625 #: ulanguages.slang_sk
     779#: languages.slang_sk
     780msgctxt "languages.slang_sk"
    626781msgid "Slovak"
    627782msgstr "Slovenština"
    628783
    629 #: ulanguages.slang_sl
     784#: languages.slang_sl
     785msgctxt "languages.slang_sl"
    630786msgid "Slovenian"
    631787msgstr "Slovinština"
    632788
    633 #: ulanguages.slang_sm
     789#: languages.slang_sm
     790msgctxt "languages.slang_sm"
    634791msgid "Samoan"
    635792msgstr ""
    636793
    637 #: ulanguages.slang_sn
     794#: languages.slang_sn
     795msgctxt "languages.slang_sn"
    638796msgid "Shona"
    639797msgstr ""
    640798
    641 #: ulanguages.slang_so
     799#: languages.slang_so
     800msgctxt "languages.slang_so"
    642801msgid "Somali"
    643802msgstr ""
    644803
    645 #: ulanguages.slang_sq
     804#: languages.slang_sq
     805msgctxt "languages.slang_sq"
    646806msgid "Albanian"
    647807msgstr "Albánština"
    648808
    649 #: ulanguages.slang_sr
     809#: languages.slang_sr
     810msgctxt "languages.slang_sr"
    650811msgid "Serbian"
    651812msgstr ""
    652813
    653 #: ulanguages.slang_ss
     814#: languages.slang_ss
     815msgctxt "languages.slang_ss"
    654816msgid "Swati"
    655817msgstr ""
    656818
    657 #: ulanguages.slang_st
     819#: languages.slang_st
     820msgctxt "languages.slang_st"
    658821msgid "Sotho, Southern"
    659822msgstr ""
    660823
    661 #: ulanguages.slang_su
     824#: languages.slang_su
     825msgctxt "languages.slang_su"
    662826msgid "Sundanese"
    663827msgstr "Sundština"
    664828
    665 #: ulanguages.slang_sv
     829#: languages.slang_sv
     830msgctxt "languages.slang_sv"
    666831msgid "Swedish"
    667832msgstr "Švédština"
    668833
    669 #: ulanguages.slang_sw
     834#: languages.slang_sw
     835msgctxt "languages.slang_sw"
    670836msgid "Swahili"
    671837msgstr ""
    672838
    673 #: ulanguages.slang_ta
     839#: languages.slang_ta
     840msgctxt "languages.slang_ta"
    674841msgid "Tamil"
    675842msgstr ""
    676843
    677 #: ulanguages.slang_te
     844#: languages.slang_te
     845msgctxt "languages.slang_te"
    678846msgid "Telugu"
    679847msgstr ""
    680848
    681 #: ulanguages.slang_tg
     849#: languages.slang_tg
     850msgctxt "languages.slang_tg"
    682851msgid "Tajik"
    683852msgstr ""
    684853
    685 #: ulanguages.slang_th
     854#: languages.slang_th
     855msgctxt "languages.slang_th"
    686856msgid "Thai"
    687857msgstr ""
    688858
    689 #: ulanguages.slang_ti
     859#: languages.slang_ti
     860msgctxt "languages.slang_ti"
    690861msgid "Tigrinya"
    691862msgstr ""
    692863
    693 #: ulanguages.slang_tk
     864#: languages.slang_tk
     865msgctxt "languages.slang_tk"
    694866msgid "Turkmen"
    695867msgstr ""
    696868
    697 #: ulanguages.slang_tl
     869#: languages.slang_tl
     870msgctxt "languages.slang_tl"
    698871msgid "Tagalog"
    699872msgstr ""
    700873
    701 #: ulanguages.slang_tn
     874#: languages.slang_tn
     875msgctxt "languages.slang_tn"
    702876msgid "Tswana"
    703877msgstr ""
    704878
    705 #: ulanguages.slang_to
     879#: languages.slang_to
     880msgctxt "languages.slang_to"
    706881msgid "Tonga"
    707882msgstr ""
    708883
    709 #: ulanguages.slang_tr
     884#: languages.slang_tr
     885msgctxt "languages.slang_tr"
    710886msgid "Turkish"
    711887msgstr "Turečtina"
    712888
    713 #: ulanguages.slang_ts
     889#: languages.slang_ts
     890msgctxt "languages.slang_ts"
    714891msgid "Tsonga"
    715892msgstr ""
    716893
    717 #: ulanguages.slang_tt
     894#: languages.slang_tt
     895msgctxt "languages.slang_tt"
    718896msgid "Tatar"
    719897msgstr "Tatarština"
    720898
    721 #: ulanguages.slang_tw
     899#: languages.slang_tw
     900msgctxt "languages.slang_tw"
    722901msgid "Twi"
    723902msgstr ""
    724903
    725 #: ulanguages.slang_ty
     904#: languages.slang_ty
     905msgctxt "languages.slang_ty"
    726906msgid "Tahitian"
    727907msgstr ""
    728908
    729 #: ulanguages.slang_ug
     909#: languages.slang_ug
     910msgctxt "languages.slang_ug"
    730911msgid "Uighur"
    731912msgstr ""
    732913
    733 #: ulanguages.slang_uk
     914#: languages.slang_uk
     915msgctxt "languages.slang_uk"
    734916msgid "Ukrainian"
    735917msgstr "Ukrajinština"
    736918
    737 #: ulanguages.slang_ur
     919#: languages.slang_ur
     920msgctxt "languages.slang_ur"
    738921msgid "Urdu"
    739922msgstr ""
    740923
    741 #: ulanguages.slang_uz
     924#: languages.slang_uz
     925msgctxt "languages.slang_uz"
    742926msgid "Uzbek"
    743927msgstr ""
    744928
    745 #: ulanguages.slang_ve
     929#: languages.slang_ve
     930msgctxt "languages.slang_ve"
    746931msgid "Venda"
    747932msgstr ""
    748933
    749 #: ulanguages.slang_vi
     934#: languages.slang_vi
     935msgctxt "languages.slang_vi"
    750936msgid "Vietnamese"
    751937msgstr "Vietnamština"
    752938
    753 #: ulanguages.slang_vo
     939#: languages.slang_vo
     940msgctxt "languages.slang_vo"
    754941msgid "Volapuk"
    755942msgstr ""
    756943
    757 #: ulanguages.slang_wa
    758 msgctxt "ulanguages.slang_wa"
     944#: languages.slang_wa
     945msgctxt "languages.slang_wa"
    759946msgid "Walloon"
    760947msgstr ""
    761948
    762 #: ulanguages.slang_wo
     949#: languages.slang_wo
     950msgctxt "languages.slang_wo"
    763951msgid "Wolof"
    764952msgstr ""
    765953
    766 #: ulanguages.slang_xh
     954#: languages.slang_xh
     955msgctxt "languages.slang_xh"
    767956msgid "Xhosa"
    768957msgstr ""
    769958
    770 #: ulanguages.slang_yi
     959#: languages.slang_yi
     960msgctxt "languages.slang_yi"
    771961msgid "Yiddish"
    772962msgstr ""
    773963
    774 #: ulanguages.slang_yo
     964#: languages.slang_yo
     965msgctxt "languages.slang_yo"
    775966msgid "Yoruba"
    776967msgstr ""
    777968
    778 #: ulanguages.slang_za
     969#: languages.slang_za
     970msgctxt "languages.slang_za"
    779971msgid "Zhuang"
    780972msgstr ""
    781973
    782 #: ulanguages.slang_zh
     974#: languages.slang_zh
     975msgctxt "languages.slang_zh"
    783976msgid "Chinese"
    784977msgstr "Čínština"
    785978
    786 #: ulanguages.slang_zu
     979#: languages.slang_zh_hans
     980msgid "Simplified Chinese"
     981msgstr ""
     982
     983#: languages.slang_zh_hant
     984msgid "Traditional Chinese"
     985msgstr ""
     986
     987#: languages.slang_zu
     988msgctxt "languages.slang_zu"
    787989msgid "Zulu"
    788990msgstr "Zuluština"
  • trunk/Packages/Common/Languages/Languages.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: ulanguages.slangauto
     4#: languages.slangauto
    55msgid "Automatic"
    66msgstr ""
    77
    8 #: ulanguages.slang_aa
     8#: languages.slang_aa
    99msgid "Afar"
    1010msgstr ""
    1111
    12 #: ulanguages.slang_ab
     12#: languages.slang_ab
    1313msgid "Abkhazian"
    1414msgstr ""
    1515
    16 #: ulanguages.slang_ae
     16#: languages.slang_ae
    1717msgid "Avestan"
    1818msgstr ""
    1919
    20 #: ulanguages.slang_af
     20#: languages.slang_af
    2121msgid "Afrikaans"
    2222msgstr ""
    2323
    24 #: ulanguages.slang_ak
     24#: languages.slang_ak
    2525msgid "Akan"
    2626msgstr ""
    2727
    28 #: ulanguages.slang_am
     28#: languages.slang_am
    2929msgid "Amharic"
    3030msgstr ""
    3131
    32 #: ulanguages.slang_an
     32#: languages.slang_an
    3333msgid "Aragonese"
    3434msgstr ""
    3535
    36 #: ulanguages.slang_ar
     36#: languages.slang_ar
    3737msgid "Arabic"
    3838msgstr ""
    3939
    40 #: ulanguages.slang_as
     40#: languages.slang_as
    4141msgid "Assamese"
    4242msgstr ""
    4343
    44 #: ulanguages.slang_av
     44#: languages.slang_av
    4545msgid "Avaric"
    4646msgstr ""
    4747
    48 #: ulanguages.slang_ay
     48#: languages.slang_ay
    4949msgid "Aymara"
    5050msgstr ""
    5151
    52 #: ulanguages.slang_az
     52#: languages.slang_az
    5353msgid "Azerbaijani"
    5454msgstr ""
    5555
    56 #: ulanguages.slang_ba
     56#: languages.slang_ba
    5757msgid "Bashkir"
    5858msgstr ""
    5959
    60 #: ulanguages.slang_be
     60#: languages.slang_be
    6161msgid "Belarusian"
    6262msgstr ""
    6363
    64 #: ulanguages.slang_bg
     64#: languages.slang_bg
    6565msgid "Bulgarian"
    6666msgstr ""
    6767
    68 #: ulanguages.slang_bh
     68#: languages.slang_bh
    6969msgid "Bihari"
    7070msgstr ""
    7171
    72 #: ulanguages.slang_bi
     72#: languages.slang_bi
    7373msgid "Bislama"
    7474msgstr ""
    7575
    76 #: ulanguages.slang_bm
     76#: languages.slang_bm
    7777msgid "Bambara"
    7878msgstr ""
    7979
    80 #: ulanguages.slang_bn
     80#: languages.slang_bn
    8181msgid "Bengali"
    8282msgstr ""
    8383
    84 #: ulanguages.slang_bo
     84#: languages.slang_bo
    8585msgid "Tibetan"
    8686msgstr ""
    8787
    88 #: ulanguages.slang_br
     88#: languages.slang_br
    8989msgid "Breton"
    9090msgstr ""
    9191
    92 #: ulanguages.slang_bs
     92#: languages.slang_bs
    9393msgid "Bosnian"
    9494msgstr ""
    9595
    96 #: ulanguages.slang_ca
     96#: languages.slang_ca
    9797msgid "Catalan"
    9898msgstr ""
    9999
    100 #: ulanguages.slang_ce
     100#: languages.slang_ce
    101101msgid "Chechen"
    102102msgstr ""
    103103
    104 #: ulanguages.slang_ch
     104#: languages.slang_ch
    105105msgid "Chamorro"
    106106msgstr ""
    107107
    108 #: ulanguages.slang_co
     108#: languages.slang_co
    109109msgid "Corsican"
    110110msgstr ""
    111111
    112 #: ulanguages.slang_cr
     112#: languages.slang_cr
    113113msgid "Cree"
    114114msgstr ""
    115115
    116 #: ulanguages.slang_cs
     116#: languages.slang_cs
    117117msgid "Czech"
    118118msgstr ""
    119119
    120 #: ulanguages.slang_cv
     120#: languages.slang_cv
    121121msgid "Chuvash"
    122122msgstr ""
    123123
    124 #: ulanguages.slang_cy
     124#: languages.slang_cy
    125125msgid "Welsh"
    126126msgstr ""
    127127
    128 #: ulanguages.slang_da
     128#: languages.slang_da
    129129msgid "Danish"
    130130msgstr ""
    131131
    132 #: ulanguages.slang_de
     132#: languages.slang_de
    133133msgid "German"
    134134msgstr ""
    135135
    136 #: ulanguages.slang_de_at
     136#: languages.slang_de_at
    137137msgid "Austrian German"
    138138msgstr ""
    139139
    140 #: ulanguages.slang_de_ch
     140#: languages.slang_de_ch
    141141msgid "Swiss German"
    142142msgstr ""
    143143
    144 #: ulanguages.slang_dv
     144#: languages.slang_dv
    145145msgid "Divehi"
    146146msgstr ""
    147147
    148 #: ulanguages.slang_dz
     148#: languages.slang_dz
    149149msgid "Dzongkha"
    150150msgstr ""
    151151
    152 #: ulanguages.slang_ee
     152#: languages.slang_ee
    153153msgid "Ewe"
    154154msgstr ""
    155155
    156 #: ulanguages.slang_el
     156#: languages.slang_el
    157157msgid "Greek"
    158158msgstr ""
    159159
    160 #: ulanguages.slang_en
     160#: languages.slang_en
    161161msgid "English"
    162162msgstr ""
    163163
    164 #: ulanguages.slang_en_au
     164#: languages.slang_en_au
    165165msgid "Australian English"
    166166msgstr ""
    167167
    168 #: ulanguages.slang_en_ca
     168#: languages.slang_en_ca
    169169msgid "Canadian English"
    170170msgstr ""
    171171
    172 #: ulanguages.slang_en_gb
     172#: languages.slang_en_gb
    173173msgid "British English"
    174174msgstr ""
    175175
    176 #: ulanguages.slang_en_us
     176#: languages.slang_en_us
    177177msgid "American English"
    178178msgstr ""
    179179
    180 #: ulanguages.slang_eo
     180#: languages.slang_eo
    181181msgid "Esperanto"
    182182msgstr ""
    183183
    184 #: ulanguages.slang_es
     184#: languages.slang_es
    185185msgid "Spanish"
    186186msgstr ""
    187187
    188 #: ulanguages.slang_et
     188#: languages.slang_et
    189189msgid "Estonian"
    190190msgstr ""
    191191
    192 #: ulanguages.slang_eu
     192#: languages.slang_eu
    193193msgid "Basque"
    194194msgstr ""
    195195
    196 #: ulanguages.slang_fa
     196#: languages.slang_fa
    197197msgid "Persian"
    198198msgstr ""
    199199
    200 #: ulanguages.slang_ff
     200#: languages.slang_ff
    201201msgid "Fulah"
    202202msgstr ""
    203203
    204 #: ulanguages.slang_fi
     204#: languages.slang_fi
    205205msgid "Finnish"
    206206msgstr ""
    207207
    208 #: ulanguages.slang_fj
     208#: languages.slang_fj
    209209msgid "Fijian"
    210210msgstr ""
    211211
    212 #: ulanguages.slang_fo
     212#: languages.slang_fo
    213213msgid "Faroese"
    214214msgstr ""
    215215
    216 #: ulanguages.slang_fr
     216#: languages.slang_fr
    217217msgid "French"
    218218msgstr ""
    219219
    220 #: ulanguages.slang_fr_be
    221 msgctxt "ulanguages.slang_fr_be"
     220#: languages.slang_fr_be
     221msgctxt "languages.slang_fr_be"
    222222msgid "Walloon"
    223223msgstr ""
    224224
    225 #: ulanguages.slang_fy
     225#: languages.slang_fy
    226226msgid "Frisian"
    227227msgstr ""
    228228
    229 #: ulanguages.slang_ga
     229#: languages.slang_ga
    230230msgid "Irish"
    231231msgstr ""
    232232
    233 #: ulanguages.slang_gd
     233#: languages.slang_gd
    234234msgid "Gaelic"
    235235msgstr ""
    236236
    237 #: ulanguages.slang_gl
     237#: languages.slang_gl
    238238msgid "Gallegan"
    239239msgstr ""
    240240
    241 #: ulanguages.slang_gn
     241#: languages.slang_gn
    242242msgid "Guarani"
    243243msgstr ""
    244244
    245 #: ulanguages.slang_gu
     245#: languages.slang_gu
    246246msgid "Gujarati"
    247247msgstr ""
    248248
    249 #: ulanguages.slang_gv
     249#: languages.slang_gv
    250250msgid "Manx"
    251251msgstr ""
    252252
    253 #: ulanguages.slang_ha
     253#: languages.slang_ha
    254254msgid "Hausa"
    255255msgstr ""
    256256
    257 #: ulanguages.slang_he
     257#: languages.slang_he
    258258msgid "Hebrew"
    259259msgstr ""
    260260
    261 #: ulanguages.slang_hi
     261#: languages.slang_hi
    262262msgid "Hindi"
    263263msgstr ""
    264264
    265 #: ulanguages.slang_ho
     265#: languages.slang_ho
    266266msgid "Hiri Motu"
    267267msgstr ""
    268268
    269 #: ulanguages.slang_hr
     269#: languages.slang_hr
    270270msgid "Croatian"
    271271msgstr ""
    272272
    273 #: ulanguages.slang_ht
     273#: languages.slang_ht
    274274msgid "Haitian"
    275275msgstr ""
    276276
    277 #: ulanguages.slang_hu
     277#: languages.slang_hu
    278278msgid "Hungarian"
    279279msgstr ""
    280280
    281 #: ulanguages.slang_hy
     281#: languages.slang_hy
    282282msgid "Armenian"
    283283msgstr ""
    284284
    285 #: ulanguages.slang_hz
     285#: languages.slang_hz
    286286msgid "Herero"
    287287msgstr ""
    288288
    289 #: ulanguages.slang_ia
     289#: languages.slang_ia
    290290msgid "Interlingua"
    291291msgstr ""
    292292
    293 #: ulanguages.slang_id
     293#: languages.slang_id
    294294msgid "Indonesian"
    295295msgstr ""
    296296
    297 #: ulanguages.slang_ie
     297#: languages.slang_ie
    298298msgid "Interlingue"
    299299msgstr ""
    300300
    301 #: ulanguages.slang_ig
     301#: languages.slang_ig
    302302msgid "Igbo"
    303303msgstr ""
    304304
    305 #: ulanguages.slang_ii
     305#: languages.slang_ii
    306306msgid "Sichuan Yi"
    307307msgstr ""
    308308
    309 #: ulanguages.slang_ik
     309#: languages.slang_ik
    310310msgid "Inupiaq"
    311311msgstr ""
    312312
    313 #: ulanguages.slang_io
     313#: languages.slang_io
    314314msgid "Ido"
    315315msgstr ""
    316316
    317 #: ulanguages.slang_is
     317#: languages.slang_is
    318318msgid "Icelandic"
    319319msgstr ""
    320320
    321 #: ulanguages.slang_it
     321#: languages.slang_it
    322322msgid "Italian"
    323323msgstr ""
    324324
    325 #: ulanguages.slang_iu
     325#: languages.slang_iu
    326326msgid "Inuktitut"
    327327msgstr ""
    328328
    329 #: ulanguages.slang_ja
     329#: languages.slang_ja
    330330msgid "Japanese"
    331331msgstr ""
    332332
    333 #: ulanguages.slang_jv
     333#: languages.slang_jv
    334334msgid "Javanese"
    335335msgstr ""
    336336
    337 #: ulanguages.slang_ka
     337#: languages.slang_ka
    338338msgid "Georgian"
    339339msgstr ""
    340340
    341 #: ulanguages.slang_kg
     341#: languages.slang_kg
    342342msgid "Kongo"
    343343msgstr ""
    344344
    345 #: ulanguages.slang_ki
     345#: languages.slang_ki
    346346msgid "Kikuyu"
    347347msgstr ""
    348348
    349 #: ulanguages.slang_kj
     349#: languages.slang_kj
    350350msgid "Kuanyama"
    351351msgstr ""
    352352
    353 #: ulanguages.slang_kk
     353#: languages.slang_kk
    354354msgid "Kazakh"
    355355msgstr ""
    356356
    357 #: ulanguages.slang_kl
     357#: languages.slang_kl
    358358msgid "Greenlandic"
    359359msgstr ""
    360360
    361 #: ulanguages.slang_km
     361#: languages.slang_km
    362362msgid "Khmer"
    363363msgstr ""
    364364
    365 #: ulanguages.slang_kn
     365#: languages.slang_kn
    366366msgid "Kannada"
    367367msgstr ""
    368368
    369 #: ulanguages.slang_ko
     369#: languages.slang_ko
    370370msgid "Korean"
    371371msgstr ""
    372372
    373 #: ulanguages.slang_kr
     373#: languages.slang_kr
    374374msgid "Kanuri"
    375375msgstr ""
    376376
    377 #: ulanguages.slang_ks
     377#: languages.slang_ks
    378378msgid "Kashmiri"
    379379msgstr ""
    380380
    381 #: ulanguages.slang_ku
     381#: languages.slang_ku
    382382msgid "Kurdish"
    383383msgstr ""
    384384
    385 #: ulanguages.slang_kv
     385#: languages.slang_kv
    386386msgid "Komi"
    387387msgstr ""
    388388
    389 #: ulanguages.slang_kw
     389#: languages.slang_kw
    390390msgid "Cornish"
    391391msgstr ""
    392392
    393 #: ulanguages.slang_ky
     393#: languages.slang_ky
    394394msgid "Kirghiz"
    395395msgstr ""
    396396
    397 #: ulanguages.slang_la
     397#: languages.slang_la
    398398msgid "Latin"
    399399msgstr ""
    400400
    401 #: ulanguages.slang_lb
     401#: languages.slang_lb
    402402msgid "Luxembourgish"
    403403msgstr ""
    404404
    405 #: ulanguages.slang_lg
     405#: languages.slang_lg
    406406msgid "Ganda"
    407407msgstr ""
    408408
    409 #: ulanguages.slang_li
     409#: languages.slang_li
    410410msgid "Limburgan"
    411411msgstr ""
    412412
    413 #: ulanguages.slang_ln
     413#: languages.slang_ln
    414414msgid "Lingala"
    415415msgstr ""
    416416
    417 #: ulanguages.slang_lo
     417#: languages.slang_lo
    418418msgid "Lao"
    419419msgstr ""
    420420
    421 #: ulanguages.slang_lt
     421#: languages.slang_lt
    422422msgid "Lithuanian"
    423423msgstr ""
    424424
    425 #: ulanguages.slang_lu
     425#: languages.slang_lu
    426426msgid "Luba-Katanga"
    427427msgstr ""
    428428
    429 #: ulanguages.slang_lv
     429#: languages.slang_lv
    430430msgid "Latvian"
    431431msgstr ""
    432432
    433 #: ulanguages.slang_mg
     433#: languages.slang_mg
    434434msgid "Malagasy"
    435435msgstr ""
    436436
    437 #: ulanguages.slang_mh
     437#: languages.slang_mh
    438438msgid "Marshallese"
    439439msgstr ""
    440440
    441 #: ulanguages.slang_mi
     441#: languages.slang_mi
    442442msgid "Maori"
    443443msgstr ""
    444444
    445 #: ulanguages.slang_mk
     445#: languages.slang_mk
    446446msgid "Macedonian"
    447447msgstr ""
    448448
    449 #: ulanguages.slang_ml
     449#: languages.slang_ml
    450450msgid "Malayalam"
    451451msgstr ""
    452452
    453 #: ulanguages.slang_mn
     453#: languages.slang_mn
    454454msgid "Mongolian"
    455455msgstr ""
    456456
    457 #: ulanguages.slang_mo
     457#: languages.slang_mo
    458458msgid "Moldavian"
    459459msgstr ""
    460460
    461 #: ulanguages.slang_mr
     461#: languages.slang_mr
    462462msgid "Marathi"
    463463msgstr ""
    464464
    465 #: ulanguages.slang_ms
     465#: languages.slang_ms
    466466msgid "Malay"
    467467msgstr ""
    468468
    469 #: ulanguages.slang_mt
     469#: languages.slang_mt
    470470msgid "Maltese"
    471471msgstr ""
    472472
    473 #: ulanguages.slang_my
     473#: languages.slang_my
    474474msgid "Burmese"
    475475msgstr ""
    476476
    477 #: ulanguages.slang_na
     477#: languages.slang_na
    478478msgid "Nauru"
    479479msgstr ""
    480480
    481 #: ulanguages.slang_nb
     481#: languages.slang_nb
    482482msgid "Norwegian Bokmaal"
    483483msgstr ""
    484484
    485 #: ulanguages.slang_nd
     485#: languages.slang_nd
    486486msgid "Ndebele, North"
    487487msgstr ""
    488488
    489 #: ulanguages.slang_ne
     489#: languages.slang_ne
    490490msgid "Nepali"
    491491msgstr ""
    492492
    493 #: ulanguages.slang_ng
     493#: languages.slang_ng
    494494msgid "Ndonga"
    495495msgstr ""
    496496
    497 #: ulanguages.slang_nl
     497#: languages.slang_nl
    498498msgid "Dutch"
    499499msgstr ""
    500500
    501 #: ulanguages.slang_nl_be
     501#: languages.slang_nl_be
    502502msgid "Flemish"
    503503msgstr ""
    504504
    505 #: ulanguages.slang_nn
     505#: languages.slang_nn
    506506msgid "Norwegian Nynorsk"
    507507msgstr ""
    508508
    509 #: ulanguages.slang_no
     509#: languages.slang_no
    510510msgid "Norwegian"
    511511msgstr ""
    512512
    513 #: ulanguages.slang_nr
     513#: languages.slang_nr
    514514msgid "Ndebele, South"
    515515msgstr ""
    516516
    517 #: ulanguages.slang_nv
     517#: languages.slang_nv
    518518msgid "Navajo"
    519519msgstr ""
    520520
    521 #: ulanguages.slang_ny
     521#: languages.slang_ny
    522522msgid "Chichewa"
    523523msgstr ""
    524524
    525 #: ulanguages.slang_oc
     525#: languages.slang_oc
    526526msgid "Occitan"
    527527msgstr ""
    528528
    529 #: ulanguages.slang_oj
     529#: languages.slang_oj
    530530msgid "Ojibwa"
    531531msgstr ""
    532532
    533 #: ulanguages.slang_om
     533#: languages.slang_om
    534534msgid "Oromo"
    535535msgstr ""
    536536
    537 #: ulanguages.slang_or
     537#: languages.slang_or
    538538msgid "Oriya"
    539539msgstr ""
    540540
    541 #: ulanguages.slang_os
     541#: languages.slang_os
    542542msgid "Ossetian"
    543543msgstr ""
    544544
    545 #: ulanguages.slang_pa
     545#: languages.slang_pa
    546546msgid "Panjabi"
    547547msgstr ""
    548548
    549 #: ulanguages.slang_pi
     549#: languages.slang_pi
    550550msgid "Pali"
    551551msgstr ""
    552552
    553 #: ulanguages.slang_pl
     553#: languages.slang_pl
    554554msgid "Polish"
    555555msgstr ""
    556556
    557 #: ulanguages.slang_ps
     557#: languages.slang_ps
    558558msgid "Pushto"
    559559msgstr ""
    560560
    561 #: ulanguages.slang_pt
     561#: languages.slang_pt
    562562msgid "Portuguese"
    563563msgstr ""
    564564
    565 #: ulanguages.slang_pt_br
     565#: languages.slang_pt_br
    566566msgid "Brazilian Portuguese"
    567567msgstr ""
    568568
    569 #: ulanguages.slang_qu
     569#: languages.slang_qu
    570570msgid "Quechua"
    571571msgstr ""
    572572
    573 #: ulanguages.slang_rm
     573#: languages.slang_rm
    574574msgid "Raeto-Romance"
    575575msgstr ""
    576576
    577 #: ulanguages.slang_rn
     577#: languages.slang_rn
    578578msgid "Rundi"
    579579msgstr ""
    580580
    581 #: ulanguages.slang_ro
     581#: languages.slang_ro
    582582msgid "Romanian"
    583583msgstr ""
    584584
    585 #: ulanguages.slang_ru
     585#: languages.slang_ru
    586586msgid "Russian"
    587587msgstr ""
    588588
    589 #: ulanguages.slang_rw
     589#: languages.slang_rw
    590590msgid "Kinyarwanda"
    591591msgstr ""
    592592
    593 #: ulanguages.slang_sa
     593#: languages.slang_sa
    594594msgid "Sanskrit"
    595595msgstr ""
    596596
    597 #: ulanguages.slang_sc
     597#: languages.slang_sc
    598598msgid "Sardinian"
    599599msgstr ""
    600600
    601 #: ulanguages.slang_sd
     601#: languages.slang_sd
    602602msgid "Sindhi"
    603603msgstr ""
    604604
    605 #: ulanguages.slang_se
     605#: languages.slang_se
    606606msgid "Northern Sami"
    607607msgstr ""
    608608
    609 #: ulanguages.slang_sg
     609#: languages.slang_sg
    610610msgid "Sango"
    611611msgstr ""
    612612
    613 #: ulanguages.slang_si
     613#: languages.slang_si
    614614msgid "Sinhalese"
    615615msgstr ""
    616616
    617 #: ulanguages.slang_sk
     617#: languages.slang_sk
    618618msgid "Slovak"
    619619msgstr ""
    620620
    621 #: ulanguages.slang_sl
     621#: languages.slang_sl
    622622msgid "Slovenian"
    623623msgstr ""
    624624
    625 #: ulanguages.slang_sm
     625#: languages.slang_sm
    626626msgid "Samoan"
    627627msgstr ""
    628628
    629 #: ulanguages.slang_sn
     629#: languages.slang_sn
    630630msgid "Shona"
    631631msgstr ""
    632632
    633 #: ulanguages.slang_so
     633#: languages.slang_so
    634634msgid "Somali"
    635635msgstr ""
    636636
    637 #: ulanguages.slang_sq
     637#: languages.slang_sq
    638638msgid "Albanian"
    639639msgstr ""
    640640
    641 #: ulanguages.slang_sr
     641#: languages.slang_sr
    642642msgid "Serbian"
    643643msgstr ""
    644644
    645 #: ulanguages.slang_ss
     645#: languages.slang_ss
    646646msgid "Swati"
    647647msgstr ""
    648648
    649 #: ulanguages.slang_st
     649#: languages.slang_st
    650650msgid "Sotho, Southern"
    651651msgstr ""
    652652
    653 #: ulanguages.slang_su
     653#: languages.slang_su
    654654msgid "Sundanese"
    655655msgstr ""
    656656
    657 #: ulanguages.slang_sv
     657#: languages.slang_sv
    658658msgid "Swedish"
    659659msgstr ""
    660660
    661 #: ulanguages.slang_sw
     661#: languages.slang_sw
    662662msgid "Swahili"
    663663msgstr ""
    664664
    665 #: ulanguages.slang_ta
     665#: languages.slang_ta
    666666msgid "Tamil"
    667667msgstr ""
    668668
    669 #: ulanguages.slang_te
     669#: languages.slang_te
    670670msgid "Telugu"
    671671msgstr ""
    672672
    673 #: ulanguages.slang_tg
     673#: languages.slang_tg
    674674msgid "Tajik"
    675675msgstr ""
    676676
    677 #: ulanguages.slang_th
     677#: languages.slang_th
    678678msgid "Thai"
    679679msgstr ""
    680680
    681 #: ulanguages.slang_ti
     681#: languages.slang_ti
    682682msgid "Tigrinya"
    683683msgstr ""
    684684
    685 #: ulanguages.slang_tk
     685#: languages.slang_tk
    686686msgid "Turkmen"
    687687msgstr ""
    688688
    689 #: ulanguages.slang_tl
     689#: languages.slang_tl
    690690msgid "Tagalog"
    691691msgstr ""
    692692
    693 #: ulanguages.slang_tn
     693#: languages.slang_tn
    694694msgid "Tswana"
    695695msgstr ""
    696696
    697 #: ulanguages.slang_to
     697#: languages.slang_to
    698698msgid "Tonga"
    699699msgstr ""
    700700
    701 #: ulanguages.slang_tr
     701#: languages.slang_tr
    702702msgid "Turkish"
    703703msgstr ""
    704704
    705 #: ulanguages.slang_ts
     705#: languages.slang_ts
    706706msgid "Tsonga"
    707707msgstr ""
    708708
    709 #: ulanguages.slang_tt
     709#: languages.slang_tt
    710710msgid "Tatar"
    711711msgstr ""
    712712
    713 #: ulanguages.slang_tw
     713#: languages.slang_tw
    714714msgid "Twi"
    715715msgstr ""
    716716
    717 #: ulanguages.slang_ty
     717#: languages.slang_ty
    718718msgid "Tahitian"
    719719msgstr ""
    720720
    721 #: ulanguages.slang_ug
     721#: languages.slang_ug
    722722msgid "Uighur"
    723723msgstr ""
    724724
    725 #: ulanguages.slang_uk
     725#: languages.slang_uk
    726726msgid "Ukrainian"
    727727msgstr ""
    728728
    729 #: ulanguages.slang_ur
     729#: languages.slang_ur
    730730msgid "Urdu"
    731731msgstr ""
    732732
    733 #: ulanguages.slang_uz
     733#: languages.slang_uz
    734734msgid "Uzbek"
    735735msgstr ""
    736736
    737 #: ulanguages.slang_ve
     737#: languages.slang_ve
    738738msgid "Venda"
    739739msgstr ""
    740740
    741 #: ulanguages.slang_vi
     741#: languages.slang_vi
    742742msgid "Vietnamese"
    743743msgstr ""
    744744
    745 #: ulanguages.slang_vo
     745#: languages.slang_vo
    746746msgid "Volapuk"
    747747msgstr ""
    748748
    749 #: ulanguages.slang_wa
    750 msgctxt "ulanguages.slang_wa"
     749#: languages.slang_wa
     750msgctxt "languages.slang_wa"
    751751msgid "Walloon"
    752752msgstr ""
    753753
    754 #: ulanguages.slang_wo
     754#: languages.slang_wo
    755755msgid "Wolof"
    756756msgstr ""
    757757
    758 #: ulanguages.slang_xh
     758#: languages.slang_xh
    759759msgid "Xhosa"
    760760msgstr ""
    761761
    762 #: ulanguages.slang_yi
     762#: languages.slang_yi
    763763msgid "Yiddish"
    764764msgstr ""
    765765
    766 #: ulanguages.slang_yo
     766#: languages.slang_yo
    767767msgid "Yoruba"
    768768msgstr ""
    769769
    770 #: ulanguages.slang_za
     770#: languages.slang_za
    771771msgid "Zhuang"
    772772msgstr ""
    773773
    774 #: ulanguages.slang_zh
     774#: languages.slang_zh
    775775msgid "Chinese"
    776776msgstr ""
    777777
    778 #: ulanguages.slang_zu
     778#: languages.slang_zh_hans
     779msgid "Simplified Chinese"
     780msgstr ""
     781
     782#: languages.slang_zh_hant
     783msgid "Traditional Chinese"
     784msgstr ""
     785
     786#: languages.slang_zu
    779787msgid "Zulu"
    780788msgstr ""
  • trunk/Packages/Common/Languages/Pool.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Chronos <robie@centrum.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
     12"X-Generator: Poedit 3.0.1\n"
    1113
    12 #: upool.sobjectpoolempty
     14#: pool.sobjectpoolempty
     15msgctxt "pool.sobjectpoolempty"
    1316msgid "Object pool is empty"
    1417msgstr "Zásobník objektů je prázdný"
    1518
    16 #: upool.sreleaseerror
     19#: pool.sreleaseerror
     20msgctxt "pool.sreleaseerror"
    1721msgid "Unknown object for release from pool"
    1822msgstr "Neznýmý objekt pro uvolnění ze zásobníku"
  • trunk/Packages/Common/Languages/Pool.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: upool.sobjectpoolempty
     4#: pool.sobjectpoolempty
    55msgid "Object pool is empty"
    66msgstr ""
    77
    8 #: upool.sreleaseerror
     8#: pool.sreleaseerror
    99msgid "Unknown object for release from pool"
    1010msgstr ""
  • trunk/Packages/Common/Languages/ResetableThread.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Chronos <robie@centrum.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
     12"X-Generator: Poedit 3.0.1\n"
    1113
    12 #: uresetablethread.swaiterror
     14#: resetablethread.swaiterror
     15msgctxt "resetablethread.swaiterror"
    1316msgid "WaitFor error"
    1417msgstr "Chyba WaitFor"
  • trunk/Packages/Common/Languages/ResetableThread.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uresetablethread.swaiterror
     4#: resetablethread.swaiterror
    55msgid "WaitFor error"
    66msgstr ""
  • trunk/Packages/Common/Languages/ScaleDPI.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: \n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
    11 "Language: cs\n"
    12 "X-Generator: Poedit 1.8.9\n"
     12"X-Generator: Poedit 3.0.1\n"
    1313
    14 #: uscaledpi.swrongdpi
     14#: scaledpi.swrongdpi
    1515#, object-pascal-format
     16msgctxt "scaledpi.swrongdpi"
    1617msgid "Wrong DPI [%d,%d]"
    1718msgstr "Chybné DPI [%d,%d]"
  • trunk/Packages/Common/Languages/ScaleDPI.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uscaledpi.swrongdpi
     4#: scaledpi.swrongdpi
    55#, object-pascal-format
    66msgid "Wrong DPI [%d,%d]"
  • trunk/Packages/Common/Languages/Threading.cs.po

    r218 r219  
    11msgid ""
    22msgstr ""
    3 "Content-Type: text/plain; charset=UTF-8\n"
    43"Project-Id-Version: \n"
    54"POT-Creation-Date: \n"
     
    76"Last-Translator: Chronos <robie@centrum.cz>\n"
    87"Language-Team: \n"
     8"Language: cs\n"
    99"MIME-Version: 1.0\n"
     10"Content-Type: text/plain; charset=UTF-8\n"
    1011"Content-Transfer-Encoding: 8bit\n"
     12"X-Generator: Poedit 3.0.1\n"
    1113
    12 #: uthreading.scurrentthreadnotfound
     14#: threading.scurrentthreadnotfound
    1315#, object-pascal-format
     16msgctxt "threading.scurrentthreadnotfound"
    1417msgid "Current thread ID %d not found in virtual thread list."
    1518msgstr "Aktuální vlákno ID %d nenalezeno v seznamu virtuálních vláken."
  • trunk/Packages/Common/Languages/Threading.pot

    r218 r219  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: uthreading.scurrentthreadnotfound
     4#: threading.scurrentthreadnotfound
    55#, object-pascal-format
    66msgid "Current thread ID %d not found in virtual thread list."
  • trunk/Packages/Common/LastOpenedList.pas

    r218 r219  
    1 unit ULastOpenedList;
    2 
    3 {$mode delphi}
     1unit LastOpenedList;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Registry, URegistry, Menus, XMLConf, DOM;
     6  Classes, SysUtils, Registry, RegistryEx, Menus, XMLConf, DOM;
    97
    108type
     
    8482destructor TLastOpenedList.Destroy;
    8583begin
    86   Items.Free;
     84  FreeAndNil(Items);
    8785  inherited;
    8886end;
     
    9492begin
    9593  if Assigned(MenuItem) then begin
    96     MenuItem.Clear;
     94    while MenuItem.Count > Items.Count do
     95      MenuItem.Delete(MenuItem.Count - 1);
     96    while MenuItem.Count < Items.Count do begin
     97      NewMenuItem := TMenuItem.Create(MenuItem);
     98      MenuItem.Add(NewMenuItem);
     99    end;
    97100    for I := 0 to Items.Count - 1 do begin
    98       NewMenuItem := TMenuItem.Create(MenuItem);
    99       NewMenuItem.Caption := Items[I];
    100       NewMenuItem.OnClick := ClickAction;
    101       MenuItem.Add(NewMenuItem);
     101      MenuItem.Items[I].Caption := Items[I];
     102      MenuItem.Items[I].OnClick := ClickAction;
    102103    end;
    103104  end;
     
    193194
    194195end.
    195 
  • trunk/Packages/Common/ListViewSort.pas

    r218 r219  
    1 unit UListViewSort;
     1unit ListViewSort;
    22
    33// Date: 2019-05-17
    4 
    5 {$mode delphi}
    64
    75interface
     
    97uses
    108  {$IFDEF Windows}Windows, CommCtrl, LMessages, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
    11   Controls, DateUtils, Dialogs, fgl, Forms, Grids, StdCtrls, ExtCtrls,
    12   LclIntf, LclType, LResources;
     9  Controls, DateUtils, Dialogs, Forms, Grids, StdCtrls, ExtCtrls,
     10  LclIntf, LclType, LResources, Generics.Collections, Generics.Defaults;
    1311
    1412type
     
    1917  TCompareEvent = function (Item1, Item2: TObject): Integer of object;
    2018  TListFilterEvent = procedure (ListViewSort: TListViewSort) of object;
     19
     20  TObjects = TObjectList<TObject>;
    2121
    2222  { TListViewSort }
     
    5252    {$ENDIF}
    5353  public
    54     List: TFPGObjectList<TObject>;
    55     Source: TFPGObjectList<TObject>;
     54    Source: TObjects;
     55    List: TObjects;
    5656    constructor Create(AOwner: TComponent); override;
    5757    destructor Destroy; override;
     
    136136constructor TListViewEx.Create(TheOwner: TComponent);
    137137begin
    138   inherited Create(TheOwner);
     138  inherited;
    139139  Filter := TListViewFilter.Create(Self);
    140140  Filter.Parent := Self;
     
    149149destructor TListViewEx.Destroy;
    150150begin
    151   inherited Destroy;
     151  inherited;
    152152end;
    153153
     
    172172constructor TListViewFilter.Create(AOwner: TComponent);
    173173begin
    174   inherited Create(AOwner);
     174  inherited;
    175175  FStringGrid1 := TStringGrid.Create(Self);
    176176  FStringGrid1.Align := alClient;
     
    338338  ListViewSortCompare: TCompareEvent;
    339339
    340 function ListViewCompare(const Item1, Item2: TObject): Integer;
     340function ListViewCompare(constref Item1, Item2: TObject): Integer;
    341341begin
    342342  Result := ListViewSortCompare(Item1, Item2);
     
    349349  ListViewSortCompare := Compare;
    350350  if (List.Count > 0) then
    351     List.Sort(ListViewCompare);
     351    List.Sort(TComparer<TObject>.Construct(ListViewCompare));
    352352end;
    353353
     
    355355begin
    356356  if Assigned(FOnFilter) then FOnFilter(Self)
    357   else if Assigned(Source) then
    358     List.Assign(Source) else
     357  else if Assigned(Source) then begin
    359358    List.Clear;
     359    List.AddRange(Source);
     360  end;
    360361  if ListView.Items.Count <> List.Count then
    361362    ListView.Items.Count := List.Count;
     
    412413begin
    413414  inherited;
    414   List := TFPGObjectList<TObject>.Create;
    415   List.FreeObjects := False;
     415  List := TObjects.Create;
     416  List.OwnsObjects := False;
    416417end;
    417418
    418419destructor TListViewSort.Destroy;
    419420begin
    420   List.Free;
     421  FreeAndNil(List);
    421422  inherited;
    422423end;
  • trunk/Packages/Common/Memory.pas

    r218 r219  
    1 unit UMemory;
    2 
    3 {$mode Delphi}{$H+}
     1unit Memory;
    42
    53interface
     
    4442  end;
    4543
     44
    4645implementation
    4746
     
    5049procedure TPositionMemory.SetSize(AValue: Integer);
    5150begin
    52   inherited SetSize(AValue);
     51  inherited;
    5352  if FPosition > FSize then FPosition := FSize;
    5453end;
     
    107106begin
    108107  Size := 0;
    109   inherited Destroy;
     108  inherited;
    110109end;
    111110
     
    121120
    122121end.
    123 
  • trunk/Packages/Common/MetaCanvas.pas

    r218 r219  
    1 unit UMetaCanvas;
    2 
    3 {$mode delphi}
     1unit MetaCanvas;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Graphics, Types, fgl;
     6  Classes, SysUtils, Graphics, Types, Generics.Collections;
    97
    108type
     
    1917  end;
    2018
    21   TCanvasObjects = class(TFPGObjectList<TCanvasObject>)
     19  TCanvasObjects = class(TObjectList<TCanvasObject>)
    2220  end;
    2321
     
    6563
    6664  TCanvasPolygon = class(TCanvasObject)
     65    Pen: TPen;
     66    Brush: TBrush;
     67    Points: array of TPoint;
     68    procedure Paint(Canvas: TCanvas); override;
     69    procedure Zoom(Factor: Double); override;
     70    procedure Move(Delta: TPoint); override;
     71    constructor Create;
     72    destructor Destroy; override;
     73  end;
     74
     75  { TCanvasPolyline }
     76
     77  TCanvasPolyline = class(TCanvasObject)
     78    Pen: TPen;
     79    Brush: TBrush;
     80    Points: array of TPoint;
     81    procedure Paint(Canvas: TCanvas); override;
     82    procedure Zoom(Factor: Double); override;
     83    procedure Move(Delta: TPoint); override;
     84    constructor Create;
     85    destructor Destroy; override;
     86  end;
     87
     88  { TCanvasPolyBezier }
     89
     90  TCanvasPolyBezier = class(TCanvasObject)
    6791    Pen: TPen;
    6892    Brush: TBrush;
     
    126150    procedure SetWidth(AValue: Integer); override;
    127151    function GetWidth: Integer; override;
    128     procedure DoLine (x1,y1,x2,y2:integer); override;
     152    procedure DoLine(X1, Y1, X2, Y2: Integer); override;
    129153    procedure DoTextOut(X, Y: Integer; Text: string); override;
    130154    procedure DoRectangle(const Bounds: TRect); override;
     
    135159    procedure DoMoveTo(X, Y: Integer); override;
    136160    procedure DoLineTo(X, Y: Integer); override;
     161    procedure DoPolyline(const Points: array of TPoint); override;
     162    procedure DoPolyBezier(Points: PPoint; NumPts: Integer;
     163      Filled: Boolean = False; Continuous: Boolean = False); override;
    137164  public
    138165    Objects: TCanvasObjects;
     
    143170    procedure TextOut(X,Y: Integer; const Text: String); override;
    144171    procedure Polygon(Points: PPoint; NumPts: Integer; Winding: Boolean = False); override;
     172    procedure Polyline(Points: PPoint; NumPts: Integer); override;
     173    procedure PolyBezier(Points: PPoint; NumPts: Integer;
     174      Filled: Boolean = False; Continuous: Boolean = True); override;
    145175    procedure Ellipse(x1, y1, x2, y2: Integer); override;
    146176    procedure StretchDraw(const DestRect: TRect; SrcGraphic: TGraphic); override;
     
    161191
    162192uses
    163   UGeometric, LCLIntf;
     193  Geometric, LCLIntf;
     194
     195{ TCanvasPolyBezier }
     196
     197procedure TCanvasPolyBezier.Paint(Canvas: TCanvas);
     198begin
     199  Canvas.Pen.Assign(Pen);
     200  Canvas.Brush.Assign(Brush);
     201  Canvas.PolyBezier(Points);
     202end;
     203
     204procedure TCanvasPolyBezier.Zoom(Factor: Double);
     205var
     206  I: Integer;
     207begin
     208  for I := 0 to High(Points) do
     209    Points[I] := Point(Trunc(Points[I].X * Factor),
     210      Trunc(Points[I].Y * Factor));
     211  Pen.Width := Trunc(Pen.Width * Factor);
     212end;
     213
     214procedure TCanvasPolyBezier.Move(Delta: TPoint);
     215var
     216  I: Integer;
     217begin
     218  for I := 0 to High(Points) do
     219    Points[I] := AddPoint(Points[I], Delta);
     220end;
     221
     222constructor TCanvasPolyBezier.Create;
     223begin
     224  Pen := TPen.Create;
     225  Brush := TBrush.Create;
     226end;
     227
     228destructor TCanvasPolyBezier.Destroy;
     229begin
     230  FreeAndNil(Brush);
     231  FreeAndNil(Pen);
     232  inherited;
     233end;
     234
     235{ TCanvasPolyline }
     236
     237procedure TCanvasPolyline.Paint(Canvas: TCanvas);
     238begin
     239  Canvas.Pen.Assign(Pen);
     240  Canvas.Brush.Assign(Brush);
     241  Canvas.Polyline(Points);
     242end;
     243
     244procedure TCanvasPolyline.Zoom(Factor: Double);
     245var
     246  I: Integer;
     247begin
     248  for I := 0 to High(Points) do
     249    Points[I] := Point(Trunc(Points[I].X * Factor),
     250      Trunc(Points[I].Y * Factor));
     251  Pen.Width := Trunc(Pen.Width * Factor);
     252end;
     253
     254procedure TCanvasPolyline.Move(Delta: TPoint);
     255var
     256  I: Integer;
     257begin
     258  for I := 0 to High(Points) do
     259    Points[I] := AddPoint(Points[I], Delta);
     260end;
     261
     262constructor TCanvasPolyline.Create;
     263begin
     264  Pen := TPen.Create;
     265  Brush := TBrush.Create;
     266end;
     267
     268destructor TCanvasPolyline.Destroy;
     269begin
     270  FreeAndNil(Brush);
     271  FreeAndNil(Pen);
     272  inherited;
     273end;
    164274
    165275{ TCanvasPie }
     
    306416destructor TCanvasPolygon.Destroy;
    307417begin
    308   Brush.Free;
    309   Pen.Free;
     418  FreeAndNil(Brush);
     419  FreeAndNil(Pen);
    310420  inherited;
    311421end;
     
    453563end;
    454564
    455 procedure TMetaCanvas.DoLine(x1, y1, x2, y2: integer);
     565procedure TMetaCanvas.DoLine(X1, Y1, X2, Y2: integer);
    456566var
    457567  NewObj: TCanvasLine;
     
    513623    APoints[I] := Points[I];
    514624  DoPolygon(APoints);
     625end;
     626
     627procedure TMetaCanvas.Polyline(Points: PPoint; NumPts: Integer);
     628var
     629  APoints: array of TPoint;
     630  I: Integer;
     631begin
     632  APoints := nil;
     633  SetLength(APoints, NumPts);
     634  for I := 0 to High(APoints) do
     635    APoints[I] := Points[I];
     636  DoPolyline(APoints);
     637end;
     638
     639procedure TMetaCanvas.PolyBezier(Points: PPoint; NumPts: Integer;
     640  Filled: Boolean; Continuous: Boolean);
     641begin
     642  DoPolyBezier(Points, NumPts, Filled, Continuous);
    515643end;
    516644
     
    582710end;
    583711
     712procedure TMetaCanvas.DoPolyline(const Points: array of TPoint);
     713var
     714  NewObj: TCanvasPolyline;
     715  I: Integer;
     716begin
     717  NewObj := TCanvasPolyline.Create;
     718  NewObj.Brush.Assign(Brush);
     719  NewObj.Pen.Assign(Pen);
     720  SetLength(NewObj.Points, Length(Points));
     721  for I := 0 to High(Points) do
     722    NewObj.Points[I] := Points[I];
     723  Objects.Add(NewObj);
     724end;
     725
     726procedure TMetaCanvas.DoPolyBezier(Points: PPoint; NumPts: Integer;
     727  Filled: Boolean; Continuous: Boolean);
     728var
     729  NewObj: TCanvasPolyBezier;
     730  I: Integer;
     731begin
     732  NewObj := TCanvasPolyBezier.Create;
     733  NewObj.Brush.Assign(Brush);
     734  NewObj.Pen.Assign(Pen);
     735  SetLength(NewObj.Points, NumPts);
     736  for I := 0 to High(NewObj.Points) do
     737    NewObj.Points[I] := Points[I];
     738  Objects.Add(NewObj);
     739end;
     740
    584741procedure TMetaCanvas.FillRect(const ARect: TRect);
    585742begin
     
    666823
    667824end.
    668 
  • trunk/Packages/Common/PersistentForm.pas

    r218 r219  
    1 unit UPersistentForm;
    2 
    3 {$mode delphi}
    4 
    5 // Date: 2020-11-26
     1unit PersistentForm;
    62
    73interface
    84
    95uses
    10   Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls,
     6  Classes, SysUtils, Forms, RegistryEx, LCLIntf, Registry, Controls, ComCtrls,
    117  ExtCtrls, LCLType;
    128
     
    2016    FMinVisiblePart: Integer;
    2117    FRegistryContext: TRegistryContext;
     18    FResizeEventOccured: Boolean;
    2219    procedure LoadControl(Control: TControl);
    2320    procedure SaveControl(Control: TControl);
     21    procedure WindowStateChange(Sender: TObject);
    2422  public
    25     FormNormalSize: TRect;
    2623    FormRestoredSize: TRect;
    2724    FormWindowState: TWindowState;
     
    157154    RootKey := RegistryContext.RootKey;
    158155    OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True);
    159     // Normal size
    160     FormNormalSize.Left := ReadIntegerWithDefault('NormalLeft', FormNormalSize.Left);
    161     FormNormalSize.Top := ReadIntegerWithDefault('NormalTop', FormNormalSize.Top);
    162     FormNormalSize.Right := ReadIntegerWithDefault('NormalWidth', FormNormalSize.Right - FormNormalSize.Left)
    163       + FormNormalSize.Left;
    164     FormNormalSize.Bottom := ReadIntegerWithDefault('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top)
    165       + FormNormalSize.Top;
     156
    166157    // Restored size
    167158    FormRestoredSize.Left := ReadIntegerWithDefault('RestoredLeft', FormRestoredSize.Left);
     
    171162    FormRestoredSize.Bottom := ReadIntegerWithDefault('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top)
    172163      + FormRestoredSize.Top;
     164
    173165    // Other state
    174166    FormWindowState := TWindowState(ReadIntegerWithDefault('WindowState', Integer(FormWindowState)));
     
    185177    RootKey := RegistryContext.RootKey;
    186178    OpenKey(RegistryContext.Key + '\Forms\' + Form.Name, True);
    187     // Normal state
    188     WriteInteger('NormalWidth', FormNormalSize.Right - FormNormalSize.Left);
    189     WriteInteger('NormalHeight', FormNormalSize.Bottom - FormNormalSize.Top);
    190     WriteInteger('NormalTop', FormNormalSize.Top);
    191     WriteInteger('NormalLeft', FormNormalSize.Left);
    192     // Restored state
     179
     180    // Restored size
    193181    WriteInteger('RestoredWidth', FormRestoredSize.Right - FormRestoredSize.Left);
    194182    WriteInteger('RestoredHeight', FormRestoredSize.Bottom - FormRestoredSize.Top);
    195183    WriteInteger('RestoredTop', FormRestoredSize.Top);
    196184    WriteInteger('RestoredLeft', FormRestoredSize.Left);
     185
    197186    // Other state
    198187    WriteInteger('WindowState', Integer(FormWindowState));
     
    259248begin
    260249  Self.Form := Form;
     250
    261251  // Set default
    262   FormNormalSize := Bounds((Screen.Width - Form.Width) div 2,
    263     (Screen.Height - Form.Height) div 2, Form.Width, Form.Height);
    264252  FormRestoredSize := Bounds((Screen.Width - Form.Width) div 2,
    265253    (Screen.Height - Form.Height) div 2, Form.Width, Form.Height);
     
    269257  LoadFromRegistry(RegistryContext);
    270258
    271   if not EqualRect(FormNormalSize, FormRestoredSize) or
    272     DefaultMaximized then begin
     259  if (FormWindowState = wsMaximized) or DefaultMaximized then begin
    273260    // Restore to maximized state
    274261    Form.WindowState := wsNormal;
     
    279266    // Restore to normal state
    280267    Form.WindowState := wsNormal;
    281     if FEntireVisible then FormNormalSize := CheckEntireVisible(FormNormalSize)
     268    if FEntireVisible then FormRestoredSize := CheckEntireVisible(FormRestoredSize)
    282269      else if FMinVisiblePart > 0 then
    283     FormNormalSize := CheckPartVisible(FormNormalSize, FMinVisiblePart);
    284     if not EqualRect(FormNormalSize, Form.BoundsRect) then
    285       Form.BoundsRect := FormNormalSize;
     270        FormRestoredSize := CheckPartVisible(FormRestoredSize, FMinVisiblePart);
     271    if not EqualRect(FormRestoredSize, Form.BoundsRect) then
     272      Form.BoundsRect := FormRestoredSize;
    286273  end;
    287274  if FormFullScreen then SetFullScreen(True);
     
    292279begin
    293280  Self.Form := Form;
    294   FormNormalSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
    295   if not FormFullScreen then
    296     FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
    297       Form.RestoredHeight);
    298   FormWindowState := Form.WindowState;
     281  if not FormFullScreen then begin
     282    FormWindowState := Form.WindowState;
     283    if FormWindowState = wsMaximized then begin
     284      FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     285        Form.RestoredHeight);
     286    end else
     287    if FormWindowState = wsNormal then begin
     288      FormRestoredSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
     289    end;
     290  end;
    299291  SaveToRegistry(RegistryContext);
    300292  SaveControl(Form);
     
    311303
    312304procedure TPersistentForm.SetFullScreen(State: Boolean);
     305{$IFDEF UNIX}
     306var
     307  OldHandler: TNotifyEvent;
     308var
     309  I: Integer;
     310{$ENDIF}
    313311begin
    314312  if State then begin
    315313    FormFullScreen := True;
    316     FormNormalSize := Form.BoundsRect;
    317     FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
    318       Form.RestoredHeight);
     314    if Form.WindowState = wsMaximized then begin
     315      FormRestoredSize := Bounds(Form.RestoredLeft, Form.RestoredTop, Form.RestoredWidth,
     316        Form.RestoredHeight);
     317    end else
     318    if Form.WindowState = wsNormal then begin
     319      FormRestoredSize := Bounds(Form.Left, Form.Top, Form.Width, Form.Height);
     320    end;
    319321    FormWindowState := Form.WindowState;
    320     ShowWindow(Form.Handle, SW_SHOWFULLSCREEN);
    321322    {$IFDEF WINDOWS}
    322323    Form.BorderStyle := bsNone;
    323324    {$ENDIF}
     325    Form.WindowState := wsFullscreen;
     326    {$IFDEF UNIX}
     327    // Workaround on Linux, WindowState is rewriten by WMSize event to wsNormal.
     328    // We need for that even to occure
     329    OldHandler := Form.OnWindowStateChange;
     330    Form.OnWindowStateChange := WindowStateChange;
     331    FResizeEventOccured := False;
     332    for I := 0 to 10 do begin
     333      if FResizeEventOccured then Break;
     334      Application.ProcessMessages;
     335      Sleep(1);
     336    end;
     337    Form.OnWindowStateChange := OldHandler;
     338    FormFullScreen := True;
     339    {$ENDIF}
    324340  end else begin
    325341    FormFullScreen := False;
     342    Form.WindowState := wsNormal;
    326343    {$IFDEF WINDOWS}
    327344    Form.BorderStyle := bsSizeable;
    328345    {$ENDIF}
    329     ShowWindow(Form.Handle, SW_SHOWNORMAL);
    330346    if FormWindowState = wsNormal then begin
    331       Form.BoundsRect := FormNormalSize;
     347      Form.WindowState := wsNormal;
     348      Form.BoundsRect := FormRestoredSize;
    332349    end else
    333350    if FormWindowState = wsMaximized then begin
     
    338355end;
    339356
     357procedure TPersistentForm.WindowStateChange(Sender: TObject);
     358begin
     359  Form.WindowState := wsFullscreen;
     360  FResizeEventOccured := True;
     361end;
     362
    340363end.
    341 
  • trunk/Packages/Common/PixelPointer.pas

    r218 r219  
    1 unit UPixelPointer;
     1unit PixelPointer;
    22
    33interface
    44
    55uses
    6   Classes, SysUtils, Graphics;
     6  Math, Classes, SysUtils, Graphics;
    77
    88type
    99  TColor32 = type Cardinal;
    1010  TColor32Component = (ccBlue, ccGreen, ccRed, ccAlpha);
     11  TColor32Planes = array[0..3] of Byte;
    1112
    1213  { TPixel32 }
     
    1415  TPixel32 = packed record
    1516  private
    16     procedure SetRGB(AValue: Cardinal);
    17     function GetRGB: Cardinal;    
     17    procedure SetRGB(AValue: Cardinal); inline;
     18    function GetRGB: Cardinal; inline;
    1819  public
     20    class function CreateRGB(R, G, B: Byte): TPixel32; static;
     21    class function CreateRGBA(R, G, B, A: Byte): TPixel32; static;
    1922    property RGB: Cardinal read GetRGB write SetRGB;
    2023    case Integer of
    2124      0: (B, G, R, A: Byte);
    2225      1: (ARGB: TColor32);
    23       2: (Planes: array[0..3] of Byte);
     26      2: (Planes: TColor32Planes);
    2427      3: (Components: array[TColor32Component] of Byte);
    2528  end;
     
    2932
    3033  TPixelPointer = record
     34  private
     35    function GetPixelARGB: TColor32; inline;
     36    function GetPixelB: Byte; inline;
     37    function GetPixelG: Byte; inline;
     38    function GetPixelPlane(Index: Byte): Byte; inline;
     39    function GetPixelR: Byte; inline;
     40    function GetPixelA: Byte; inline;
     41    function GetPixelPlanes: TColor32Planes;
     42    function GetPixelRGB: Cardinal; inline;
     43    procedure SetPixelARGB(Value: TColor32); inline;
     44    procedure SetPixelB(Value: Byte); inline;
     45    procedure SetPixelG(Value: Byte); inline;
     46    procedure SetPixelPlane(Index: Byte; AValue: Byte); inline;
     47    procedure SetPixelR(Value: Byte); inline;
     48    procedure SetPixelA(Value: Byte); inline;
     49    procedure SetPixelRGB(Value: Cardinal); inline;
     50  public
    3151    Base: PPixel32;
    3252    Pixel: PPixel32;
     
    3555    BytesPerPixel: Integer;
    3656    BytesPerLine: Integer;
     57    Data: PPixel32;
     58    Width: Integer;
     59    Height: Integer;
    3760    procedure NextLine; inline; // Move pointer to start of next line
    3861    procedure PreviousLine; inline; // Move pointer to start of previous line
     
    4164    procedure SetXY(X, Y: Integer); inline; // Set pixel position relative to base
    4265    procedure SetX(X: Integer); inline; // Set horizontal pixel position relative to base
     66    procedure CheckRange; inline; // Check if current pixel position is not out of range
     67    function PosValid: Boolean;
     68    class function Create(Bitmap: TRasterImage; BaseX: Integer = 0; BaseY: Integer = 0): TPixelPointer; static;
     69    property PixelARGB: TColor32 read GetPixelARGB write SetPixelARGB;
     70    property PixelRGB: Cardinal read GetPixelRGB write SetPixelRGB;
     71    property PixelB: Byte read GetPixelB write SetPixelB;
     72    property PixelG: Byte read GetPixelG write SetPixelG;
     73    property PixelR: Byte read GetPixelR write SetPixelR;
     74    property PixelA: Byte read GetPixelA write SetPixelA;
     75    property PixelPlane[Index: Byte]: Byte read GetPixelPlane write SetPixelPlane;
    4376  end;
    4477  PPixelPointer = ^TPixelPointer;
    4578
    46   function PixelPointer(Bitmap: TRasterImage; BaseX: Integer = 0; BaseY: Integer = 0): TPixelPointer; inline;
    4779  function SwapRedBlue(Color: TColor32): TColor32;
    4880  procedure BitmapCopyRect(DstBitmap: TRasterImage; DstRect: TRect; SrcBitmap: TRasterImage; SrcPos: TPoint);
     
    6092  function ColorToColor32(Color: TColor): TColor32;
    6193
     94
    6295implementation
    6396
     97resourcestring
     98  SOutOfRange = 'Pixel pointer out of range [X: %d, Y: %d, Width: %d, Height: %d]';
     99  SWrongBitmapSize = 'Wrong bitmap size [width: %d, height: %d]';
     100
    64101{ TPixel32 }
    65102
     
    69106end;
    70107
     108class function TPixel32.CreateRGB(R, G, B: Byte): TPixel32;
     109begin
     110  Result.R := R;
     111  Result.G := G;
     112  Result.B := B;
     113  Result.A := 0;
     114end;
     115
     116class function TPixel32.CreateRGBA(R, G, B, A: Byte): TPixel32;
     117begin
     118  Result.R := R;
     119  Result.G := G;
     120  Result.B := B;
     121  Result.A := A;
     122end;
     123
    71124procedure TPixel32.SetRGB(AValue: Cardinal);
    72125begin
    73   R := (AValue shr 16) and $ff;
    74   G := (AValue shr 8) and $ff;
    75   B := (AValue shr 0) and $ff;
     126  ARGB := (ARGB and $ff000000) or (AValue and $ffffff);
    76127end;
    77128
     
    111162end;
    112163
     164procedure TPixelPointer.CheckRange;
     165{$IFOPT R+}
     166var
     167  X: Integer;
     168  Y: Integer;
     169{$ENDIF}
     170begin
     171  {$IFOPT R+}
     172  if (PByte(Pixel) < PByte(Data)) or
     173    (PByte(Pixel) >= PByte(Data) + Height * BytesPerLine) then begin
     174    X := PByte(Pixel) - PByte(Data);
     175    Y := Floor(X / BytesPerLine);
     176    X := X - Y * BytesPerLine;
     177    X := Floor(X / BytesPerPixel);
     178    raise Exception.Create(Format(SOutOfRange, [X, Y, Width, Height]));
     179  end;
     180  {$ENDIF}
     181end;
     182
     183function TPixelPointer.PosValid: Boolean;
     184begin
     185  Result := not ((PByte(Pixel) < PByte(Data)) or
     186    (PByte(Pixel) >= PByte(Data) + Height * BytesPerLine));
     187end;
     188
     189function TPixelPointer.GetPixelPlanes: TColor32Planes;
     190begin
     191  CheckRange;
     192  Result := Pixel^.Planes;
     193end;
     194
     195function TPixelPointer.GetPixelRGB: Cardinal;
     196begin
     197  CheckRange;
     198  Result := Pixel^.RGB;
     199end;
     200
     201procedure TPixelPointer.SetPixelARGB(Value: TColor32);
     202begin
     203  CheckRange;
     204  Pixel^.ARGB := Value;
     205end;
     206
     207procedure TPixelPointer.SetPixelB(Value: Byte);
     208begin
     209  CheckRange;
     210  Pixel^.B := Value;
     211end;
     212
     213procedure TPixelPointer.SetPixelG(Value: Byte);
     214begin
     215  CheckRange;
     216  Pixel^.G := Value;
     217end;
     218
     219procedure TPixelPointer.SetPixelPlane(Index: Byte; AValue: Byte);
     220begin
     221  CheckRange;
     222  Pixel^.Planes[Index] := AValue;
     223end;
     224
     225procedure TPixelPointer.SetPixelR(Value: Byte);
     226begin
     227  CheckRange;
     228  Pixel^.R := Value;
     229end;
     230
     231procedure TPixelPointer.SetPixelA(Value: Byte);
     232begin
     233  CheckRange;
     234  Pixel^.A := Value;
     235end;
     236
     237function TPixelPointer.GetPixelARGB: TColor32;
     238begin
     239  CheckRange;
     240  Result := Pixel^.ARGB;
     241end;
     242
     243function TPixelPointer.GetPixelB: Byte;
     244begin
     245  CheckRange;
     246  Result := Pixel^.B;
     247end;
     248
     249function TPixelPointer.GetPixelG: Byte;
     250begin
     251  CheckRange;
     252  Result := Pixel^.G;
     253end;
     254
     255function TPixelPointer.GetPixelPlane(Index: Byte): Byte;
     256begin
     257  CheckRange;
     258  Result := Pixel^.Planes[Index];
     259end;
     260
     261function TPixelPointer.GetPixelR: Byte;
     262begin
     263  CheckRange;
     264  Result := Pixel^.R;
     265end;
     266
     267function TPixelPointer.GetPixelA: Byte;
     268begin
     269  CheckRange;
     270  Result := Pixel^.A;
     271end;
     272
     273procedure TPixelPointer.SetPixelRGB(Value: Cardinal);
     274begin
     275  CheckRange;
     276  Pixel^.RGB := Value;
     277end;
     278
    113279procedure BitmapCopyRect(DstBitmap: TRasterImage; DstRect: TRect;
    114280  SrcBitmap: TRasterImage; SrcPos: TPoint);
     
    119285  SrcBitmap.BeginUpdate(True);
    120286  DstBitmap.BeginUpdate(True);
    121   SrcPtr := PixelPointer(SrcBitmap, SrcPos.X, SrcPos.Y);
    122   DstPtr := PixelPointer(DstBitmap, DstRect.Left, DstRect.Top);
     287  SrcPtr := TPixelPointer.Create(SrcBitmap, SrcPos.X, SrcPos.Y);
     288  DstPtr := TPixelPointer.Create(DstBitmap, DstRect.Left, DstRect.Top);
    123289  for Y := 0 to DstRect.Height - 1 do begin
    124290    for X := 0 to DstRect.Width - 1 do begin
    125       DstPtr.Pixel^.ARGB := SrcPtr.Pixel^.ARGB;
     291      DstPtr.PixelARGB := SrcPtr.PixelARGB;
    126292      SrcPtr.NextPixel;
    127293      DstPtr.NextPixel;
     
    149315  SrcBitmap.BeginUpdate(True);
    150316  DstBitmap.BeginUpdate(True);
    151   SrcPtr := PixelPointer(SrcBitmap, SrcRect.Left, SrcRect.Top);
    152   DstPtr := PixelPointer(DstBitmap, DstRect.Left, DstRect.Top);
     317  SrcPtr := TPixelPointer.Create(SrcBitmap, SrcRect.Left, SrcRect.Top);
     318  DstPtr := TPixelPointer.Create(DstBitmap, DstRect.Left, DstRect.Top);
    153319  for Y := 0 to DstRect.Height - 1 do begin
    154320    for X := 0 to DstRect.Width - 1 do begin
     
    159325      DstPtr.SetXY(X, Y);
    160326      SrcPtr.SetXY(R.Left, R.Top);
    161       C := SrcPtr.Pixel^.ARGB;
    162       DstPtr.Pixel^.ARGB := C;
     327      C := SrcPtr.PixelARGB;
     328      DstPtr.PixelARGB := C;
    163329      for YY := 0 to R.Height - 1 do begin
    164330        for XX := 0 to R.Width - 1 do begin
    165           DstPtr.Pixel^.ARGB := C;
     331          DstPtr.PixelARGB := C;
    166332          DstPtr.NextPixel;
    167333        end;
     
    180346begin
    181347  Bitmap.BeginUpdate(True);
    182   Ptr := PixelPointer(Bitmap);
     348  Ptr := TPixelPointer.Create(Bitmap);
    183349  for Y := 0 to Bitmap.Height - 1 do begin
    184350    for X := 0 to Bitmap.Width - 1 do begin
    185       Ptr.Pixel^.ARGB := Color;
     351      Ptr.PixelARGB := Color;
    186352      Ptr.NextPixel;
    187353    end;
     
    197363begin
    198364  Bitmap.BeginUpdate(True);
    199   Ptr := PixelPointer(Bitmap, Rect.Left, Rect.Top);
     365  Ptr := TPixelPointer.Create(Bitmap, Rect.Left, Rect.Top);
    200366  for Y := 0 to Rect.Height - 1 do begin
    201367    for X := 0 to Rect.Width - 1 do begin
    202       Ptr.Pixel^.ARGB := Color;
     368      Ptr.PixelARGB := Color;
    203369      Ptr.NextPixel;
    204370    end;
     
    214380begin
    215381  Bitmap.BeginUpdate(True);
    216   Ptr := PixelPointer(Bitmap);
     382  Ptr := TPixelPointer.Create(Bitmap);
    217383  for Y := 0 to Bitmap.Height - 1 do begin
    218384    for X := 0 to Bitmap.Width - 1 do begin
    219       Ptr.Pixel^.ARGB := SwapRedBlue(Ptr.Pixel^.ARGB);
     385      Ptr.PixelARGB := SwapRedBlue(Ptr.PixelARGB);
    220386      Ptr.NextPixel;
    221387    end;
     
    231397begin
    232398  Bitmap.BeginUpdate(True);
    233   Ptr := PixelPointer(Bitmap);
     399  Ptr := TPixelPointer.Create(Bitmap);
    234400  for Y := 0 to Bitmap.Height - 1 do begin
    235401    for X := 0 to Bitmap.Width - 1 do begin
    236       Ptr.Pixel^.ARGB := Ptr.Pixel^.ARGB xor $ffffff;
     402      Ptr.PixelARGB := Ptr.PixelARGB xor $ffffff;
    237403      Ptr.NextPixel;
    238404    end;
     
    251417  Pixel := Color32ToPixel32(Color);
    252418  Bitmap.BeginUpdate(True);
    253   Ptr := PixelPointer(Bitmap);
     419  Ptr := TPixelPointer.Create(Bitmap);
    254420  for Y := 0 to Bitmap.Height - 1 do begin
    255421    for X := 0 to Bitmap.Width - 1 do begin
    256       A := Ptr.Pixel^.A; //(Ptr.Pixel^.A + Pixel.A) shr 1;
    257       R := (Ptr.Pixel^.R + Pixel.R) shr 1;
    258       G := (Ptr.Pixel^.G + Pixel.G) shr 1;
    259       B := (Ptr.Pixel^.B + Pixel.B) shr 1;
    260       Ptr.Pixel^.ARGB := Color32(A, R, G, B);
     422      A := Ptr.PixelA; //(Ptr.PixelA + Pixel.A) shr 1;
     423      R := (Ptr.PixelR + Pixel.R) shr 1;
     424      G := (Ptr.PixelG + Pixel.G) shr 1;
     425      B := (Ptr.PixelB + Pixel.B) shr 1;
     426      Ptr.PixelARGB := Color32(A, R, G, B);
    261427      Ptr.NextPixel;
    262428    end;
     
    294460end;
    295461
    296 function PixelPointer(Bitmap: TRasterImage; BaseX: Integer;
     462class function TPixelPointer.Create(Bitmap: TRasterImage; BaseX: Integer;
    297463  BaseY: Integer): TPixelPointer;
    298464begin
     465  Result.Width := Bitmap.Width;
     466  Result.Height := Bitmap.Height;
     467  if (Result.Width < 0) or (Result.Height < 0) then
     468    raise Exception.Create(Format(SWrongBitmapSize, [Result.Width, Result.Height]));
    299469  Result.BytesPerLine := Bitmap.RawImage.Description.BytesPerLine;
    300470  Result.BytesPerPixel := Bitmap.RawImage.Description.BitsPerPixel shr 3;
     471  Result.Data := PPixel32(Bitmap.RawImage.Data);
    301472  Result.Base := PPixel32(Bitmap.RawImage.Data + BaseX * Result.BytesPerPixel +
    302473    BaseY * Result.BytesPerLine);
     
    309480end;
    310481
    311 
    312482end.
    313 
  • trunk/Packages/Common/Pool.pas

    r218 r219  
    1 unit UPool;
    2 
    3 {$mode Delphi}{$H+}
     1unit Pool;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, fgl, UThreading;
     6  Classes, SysUtils, syncobjs, Generics.Collections, Threading;
    97
    108type
     
    2220    function NewItemObject: TObject; virtual;
    2321  public
    24     Items: TFPGObjectList<TObject>;
    25     FreeItems: TFPGObjectList<TObject>;
     22    Items: TObjectList<TObject>;
     23    FreeItems: TObjectList<TObject>;
    2624    function Acquire: TObject; virtual;
    2725    procedure Release(Item: TObject); virtual;
     
    5957  try
    6058    Lock.Acquire;
    61     inherited SetTotalCount(AValue);
     59    inherited;
    6260  finally
    6361    Lock.Release;
     
    6967  try
    7068    Lock.Acquire;
    71     Result := inherited GetUsedCount;
     69    Result := inherited;
    7270  finally
    7371    Lock.Release;
     
    9088      end;
    9189    end;
    92     Result := inherited Acquire;
     90    Result := inherited;
    9391  finally
    9492    Lock.Release;
     
    10098  try
    10199    Lock.Acquire;
    102     inherited Release(Item);
     100    inherited;
    103101  finally
    104102    Lock.Release;
     
    108106constructor TThreadedPool.Create;
    109107begin
    110   inherited Create;
     108  inherited;
    111109  Lock := TCriticalSection.Create;
    112110end;
     
    115113begin
    116114  TotalCount := 0;
    117   Lock.Free;
    118   inherited Destroy;
     115  FreeAndNil(Lock);
     116  inherited;
    119117end;
    120118
     
    185183begin
    186184  inherited;
    187   Items := TFPGObjectList<TObject>.Create;
    188   FreeItems := TFPGObjectList<TObject>.Create;
    189   FreeItems.FreeObjects := False;
     185  Items := TObjectList<TObject>.Create;
     186  FreeItems := TObjectList<TObject>.Create;
     187  FreeItems.OwnsObjects := False;
    190188  FReleaseEvent := TEvent.Create(nil, False, False, '');
    191189end;
     
    201199
    202200end.
    203 
  • trunk/Packages/Common/PrefixMultiplier.pas

    r218 r219  
    1 unit UPrefixMultiplier;
     1unit PrefixMultiplier;
    22
    33// Date: 2010-06-01
    4 
    5 {$mode delphi}
    64
    75interface
     
    3331  (
    3432    (ShortText: 'y'; FullText: 'yocto'; Value: 1e-24),
    35           (ShortText: 'z'; FullText: 'zepto'; Value: 1e-21),
     33    (ShortText: 'z'; FullText: 'zepto'; Value: 1e-21),
    3634    (ShortText: 'a'; FullText: 'atto'; Value: 1e-18),
    3735    (ShortText: 'f'; FullText: 'femto'; Value: 1e-15),
     
    5452  (
    5553    (ShortText: 'ys'; FullText: 'yocto'; Value: 1e-24),
    56           (ShortText: 'zs'; FullText: 'zepto'; Value: 1e-21),
     54    (ShortText: 'zs'; FullText: 'zepto'; Value: 1e-21),
    5755    (ShortText: 'as'; FullText: 'atto'; Value: 1e-18),
    5856    (ShortText: 'fs'; FullText: 'femto'; Value: 1e-15),
     
    126124
    127125end.
    128 
  • trunk/Packages/Common/RegistryEx.pas

    r218 r219  
    1 unit URegistry;
    2 
    3 {$MODE delphi}
     1unit RegistryEx;
    42
    53interface
     
    3836    function ReadFloatWithDefault(const Name: string;
    3937      DefaultValue: Double): Double;
     38    function ReadDateTimeWithDefault(const Name: string; DefaultValue: TDateTime): TDateTime;
    4039    function DeleteKeyRecursive(const Key: string): Boolean;
    4140    function OpenKey(const Key: string; CanCreate: Boolean): Boolean;
     
    4847    HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
    4948
     49
    5050implementation
    51 
    5251
    5352{ TRegistryContext }
     
    112111end;
    113112
     113function TRegistryEx.ReadDateTimeWithDefault(const Name: string;
     114  DefaultValue: TDateTime): TDateTime;
     115begin
     116  if ValueExists(Name) then Result := ReadDateTime(Name)
     117    else begin
     118      WriteDateTime(Name, DefaultValue);
     119      Result := DefaultValue;
     120    end;
     121end;
     122
    114123function TRegistryEx.DeleteKeyRecursive(const Key: string): Boolean;
    115124var
     
    135144  //CloseKey;
    136145  {$ENDIF}
    137   Result := inherited OpenKey(Key, CanCreate);
     146  Result := inherited;
    138147end;
    139148
  • trunk/Packages/Common/ResetableThread.pas

    r218 r219  
    1 unit UResetableThread;
    2 
    3 {$mode Delphi}{$H+}
     1unit ResetableThread;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, UThreading, UPool;
     6  Classes, SysUtils, syncobjs, Threading, Pool;
    97
    108type
     
    167165  FreeAndNil(FStopEvent);
    168166  FreeAndNil(FLock);
    169   inherited Destroy;
     167  inherited;
    170168end;
    171169
     
    286284constructor TThreadPool.Create;
    287285begin
    288   inherited Create;
     286  inherited;
    289287end;
    290288
     
    293291  TotalCount := 0;
    294292  WaitForEmpty;
    295   inherited Destroy;
     293  inherited;
    296294end;
    297295
    298296end.
    299 
  • trunk/Packages/Common/ScaleDPI.pas

    r218 r219  
    1 unit UScaleDPI;
     1unit ScaleDPI;
    22
    33{ See: http://wiki.lazarus.freepascal.org/High_DPI }
    44
    5 {$mode delphi}{$H+}
    6 
    75interface
    86
    97uses
    10   Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils, fgl;
     8  Classes, Forms, Graphics, Controls, ComCtrls, LCLType, SysUtils,
     9  Generics.Collections;
    1110
    1211type
     
    2827  end;
    2928
    30   TControlDimensions = class(TFPGObjectList<TControlDimension>)
     29  TControlDimensions = class(TObjectList<TControlDimension>)
    3130  end;
    3231
  • trunk/Packages/Common/StopWatch.pas

    r3 r219  
    55
    66uses
    7   {$IFDEF Windows}Windows,{$ENDIF}
     7  {$IFDEF WINDOWS}Windows,{$ENDIF}
    88  SysUtils, DateUtils;
    99
     
    1313  TStopWatch = class
    1414  private
    15     fFrequency : TLargeInteger;
    16     fIsRunning: Boolean;
    17     fIsHighResolution: Boolean;
    18     fStartCount, fStopCount : TLargeInteger;
    19     procedure SetTickStamp(var lInt : TLargeInteger) ;
     15    FFrequency: TLargeInteger;
     16    FIsRunning: Boolean;
     17    FIsHighResolution: Boolean;
     18    FStartCount, fStopCount: TLargeInteger;
     19    procedure SetTickStamp(var Value: TLargeInteger);
    2020    function GetElapsedTicks: TLargeInteger;
    2121    function GetElapsedMiliseconds: TLargeInteger;
    2222    function GetElapsed: string;
    2323  public
    24     constructor Create(const startOnCreate : Boolean = False) ;
     24    constructor Create(const StartOnCreate: Boolean = False) ;
    2525    procedure Start;
    2626    procedure Stop;
    27     property IsHighResolution : Boolean read fIsHighResolution;
    28     property ElapsedTicks : TLargeInteger read GetElapsedTicks;
    29     property ElapsedMiliseconds : TLargeInteger read GetElapsedMiliseconds;
    30     property Elapsed : string read GetElapsed;
    31     property IsRunning : Boolean read fIsRunning;
     27    property IsHighResolution: Boolean read FIsHighResolution;
     28    property ElapsedTicks: TLargeInteger read GetElapsedTicks;
     29    property ElapsedMiliseconds: TLargeInteger read GetElapsedMiliseconds;
     30    property Elapsed: string read GetElapsed;
     31    property IsRunning: Boolean read FIsRunning;
    3232  end;
     33
    3334
    3435implementation
    3536
    36 constructor TStopWatch.Create(const startOnCreate : boolean = false) ;
     37constructor TStopWatch.Create(const StartOnCreate: Boolean = False);
    3738begin
    38   inherited Create;
     39  FIsRunning := False;
    3940
    40   fIsRunning := False;
    41 
    42   {$IFDEF Windows}
     41  {$IFDEF WINDOWS}
    4342  fIsHighResolution := QueryPerformanceFrequency(fFrequency) ;
    4443  {$ELSE}
    45   fIsHighResolution := False;
     44  FIsHighResolution := False;
    4645  {$ENDIF}
    47   if NOT fIsHighResolution then fFrequency := MSecsPerSec;
     46  if NOT FIsHighResolution then FFrequency := MSecsPerSec;
    4847
    4948  if StartOnCreate then Start;
     
    5251function TStopWatch.GetElapsedTicks: TLargeInteger;
    5352begin
    54   Result := fStopCount - fStartCount;
     53  Result := FStopCount - FStartCount;
    5554end;
    5655
    57 procedure TStopWatch.SetTickStamp(var lInt : TLargeInteger) ;
     56procedure TStopWatch.SetTickStamp(var Value: TLargeInteger);
    5857begin
    59   if fIsHighResolution then
     58  if FIsHighResolution then
    6059    {$IFDEF Windows}
    61     QueryPerformanceCounter(lInt)
     60    QueryPerformanceCounter(Value)
    6261    {$ELSE}
    6362    {$ENDIF}
    6463  else
    65     lInt := MilliSecondOf(Now) ;
     64    Value := MilliSecondOf(Now);
    6665end;
    6766
    6867function TStopWatch.GetElapsed: string;
    6968var
    70   dt: TDateTime;
     69  Elapsed: TDateTime;
    7170begin
    72   dt := ElapsedMiliseconds / MSecsPerSec / SecsPerDay;
    73   result := Format('%d days, %s', [Trunc(dt), FormatDateTime('hh:nn:ss.z', Frac(dt))]) ;
     71  Elapsed := ElapsedMiliseconds / MSecsPerSec / SecsPerDay;
     72  Result := Format('%d days, %s', [Trunc(Elapsed), FormatDateTime('hh:nn:ss.z', Frac(Elapsed))]) ;
    7473end;
    7574
    7675function TStopWatch.GetElapsedMiliseconds: TLargeInteger;
    7776begin
    78   Result := (MSecsPerSec * (fStopCount - fStartCount)) div fFrequency;
     77  Result := (MSecsPerSec * (fStopCount - FStartCount)) div FFrequency;
    7978end;
    8079
    8180procedure TStopWatch.Start;
    8281begin
    83   SetTickStamp(fStartCount);
    84   fIsRunning := True;
     82  SetTickStamp(FStartCount);
     83  FIsRunning := True;
    8584end;
    8685
    8786procedure TStopWatch.Stop;
    8887begin
    89   SetTickStamp(fStopCount);
    90   fIsRunning := False;
     88  SetTickStamp(FStopCount);
     89  FIsRunning := False;
    9190end;
    9291
  • trunk/Packages/Common/StringTable.pas

    r218 r219  
    1 unit UStringTable;
    2 
    3 {$mode objfpc}{$H+}
     1unit StringTable;
    42
    53interface
     
    7169end;
    7270
    73 
    7471end.
    75 
  • trunk/Packages/Common/SyncCounter.pas

    r218 r219  
    1 unit USyncCounter;
    2 
    3 {$mode delphi}
     1unit SyncCounter;
    42
    53interface
     
    2523    procedure Assign(Source: TSyncCounter);
    2624  end;
     25
    2726
    2827implementation
     
    6968begin
    7069  Lock.Free;
    71   inherited Destroy;
     70  inherited;
    7271end;
    7372
     
    7978
    8079end.
    81 
  • trunk/Packages/Common/Theme.pas

    r218 r219  
    1 unit UTheme;
     1unit Theme;
    22
    33interface
     
    55uses
    66  Classes, SysUtils, Graphics, ComCtrls, Controls, ExtCtrls, Menus, StdCtrls,
    7   Spin, Forms, fgl, Grids;
     7  Spin, Forms, Generics.Collections, Grids, Registry, LCLType;
    88
    99type
     
    1919  { TThemes }
    2020
    21   TThemes = class(TFPGObjectList<TTheme>)
     21  TThemes = class(TObjectList<TTheme>)
    2222    function AddNew(Name: string): TTheme;
    2323    function FindByName(Name: string): TTheme;
     
    2525  end;
    2626
     27  TDwmSetWindowAttribute = function(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall;
     28
    2729  { TThemeManager }
    2830
     
    3032  private
    3133    FTheme: TTheme;
     34    FActualTheme: TTheme;
     35    DwmapiLib: TLibHandle;
     36    DwmSetWindowAttribute: TDwmSetWindowAttribute;
     37    function Gray(C: TColor): Byte;
    3238    procedure SetTheme(AValue: TTheme);
    33     procedure SetThemeName(AValue: TTheme);
     39    procedure SetThemeName(Name: string);
     40    procedure SetThemedTitleBar(AForm: TForm; Active: Bool);
     41    function IsWindows10OrGreater(BuildNumber: Integer): Boolean;
    3442  public
    3543    Used: Boolean;
    3644    Themes: TThemes;
     45    function IsDarkTheme: Boolean;
    3746    procedure ApplyTheme(Component: TComponent);
    3847    constructor Create(AOwner: TComponent); override;
     
    4049    procedure UseTheme(Form: TForm);
    4150    property Theme: TTheme read FTheme write SetTheme;
    42   end;
     51    property ActualTheme: TTheme read FActualTheme;
     52  end;
     53
     54const
     55  ThemeNameSystem = 'System';
     56  ThemeNameLight = 'Light';
     57  ThemeNameDark = 'Dark';
     58  DwmapiLibName = 'dwmapi.dll';
     59  DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19;
     60  DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
    4361
    4462procedure Register;
     63
    4564
    4665implementation
     
    89108end;
    90109
    91 procedure TThemeManager.SetThemeName(AValue: TTheme);
     110{ TThemeManager }
     111
     112function TThemeManager.Gray(C: TColor): Byte;
     113begin
     114  Result := Trunc(Red(C) * 0.3 + Green(C) * 0.59 + Blue(C) * 0.11);
     115end;
     116
     117function TThemeManager.IsDarkTheme: Boolean;
     118{$IFDEF WINDOWS}
     119var
     120  LightKey: Boolean;
     121  Registry: TRegistry;
     122const
     123  KeyPath = '\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize';
     124  KeyName = 'AppsUseLightTheme';
     125{$ELSE}
     126var
     127  ColorWindow: TColor;
     128  ColorWindowText: TColor;
     129{$ENDIF}
     130begin
     131  Result := False;
     132  {$IFDEF WINDOWS}
     133  Registry := TRegistry.Create;
     134  try
     135    Registry.RootKey := HKEY_CURRENT_USER;
     136    if Registry.OpenKeyReadOnly(KeyPath) then begin
     137      if Registry.ValueExists(KeyName) then
     138        LightKey := Registry.ReadBool(KeyName)
     139      else LightKey := True;
     140    end else LightKey := True;
     141    Result := not LightKey;
     142  finally
     143    Registry.Free;
     144  end;
     145  {$ELSE}
     146  ColorWindow := ColorToRGB(clWindow);
     147  ColorWindowText := ColorToRGB(clWindowText);
     148  Result := Gray(ColorWindow) < Gray(ColorWindowText);
     149  {$ENDIF}
     150end;
     151
     152procedure TThemeManager.SetThemeName(Name: string);
     153begin
     154  Theme := Themes.FindByName(Name);
     155end;
     156
     157function TThemeManager.IsWindows10OrGreater(BuildNumber: Integer): Boolean;
     158begin
     159  {$IFDEF WINDOWS}
     160  Result := (Win32MajorVersion >= 10) and (Win32BuildNumber >= BuildNumber);
     161  {$ELSE}
     162  Result := False;
     163  {$ENDIF}
     164end;
     165
     166procedure TThemeManager.SetThemedTitleBar(AForm: TForm; Active: Bool);
     167var
     168  Attr: DWord;
     169begin
     170  if Assigned(DwmSetWindowAttribute) and IsWindows10OrGreater(17763) then begin
     171    Attr := DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;
     172    if IsWindows10OrGreater(18985) then Attr := DWMWA_USE_IMMERSIVE_DARK_MODE;
     173
     174    DwmSetWindowAttribute(AForm.Handle, Attr, @Active, SizeOf(Active));
     175  end;
     176end;
     177
     178procedure TThemeManager.SetTheme(AValue: TTheme);
    92179begin
    93180  if FTheme = AValue then Exit;
    94181  FTheme := AValue;
    95 end;
    96 
    97 procedure TThemeManager.SetTheme(AValue: TTheme);
    98 begin
    99   if FTheme = AValue then Exit;
    100   FTheme := AValue;
     182  FActualTheme := FTheme;
     183  {$IFDEF WINDOWS}
     184  if Assigned(FTheme) and (FTheme = Themes.FindByName(ThemeNameSystem)) and IsDarkTheme then
     185    FActualTheme := Themes.FindByName(ThemeNameDark);
     186  {$ENDIF}
    101187end;
    102188
     
    104190begin
    105191  inherited;
     192  {$IFDEF WINDOWS}
     193  DwmapiLib := LoadLibrary(DwmapiLibName);
     194  if DwmapiLib <> 0 then DwmSetWindowAttribute := GetProcAddress(DwmapiLib, 'DwmSetWindowAttribute')
     195    else DwmSetWindowAttribute := nil;
     196  {$ENDIF}
     197
    106198  Themes := TThemes.Create;
    107   with Themes.AddNew('System') do begin
     199  with Themes.AddNew(ThemeNameSystem) do begin
    108200    ColorWindow := clWindow;
    109201    ColorWindowText := clWindowText;
     
    112204    ColorControlSelected := clWindow;
    113205  end;
    114   Theme := TTheme(Themes.First);
    115   with Themes.AddNew('Dark') do begin
     206  with Themes.AddNew(ThemeNameDark) do begin
    116207    ColorWindow := RGBToColor($20, $20, $20);
    117208    ColorWindowText := clWhite;
     
    120211    ColorControlSelected := RGBToColor(96, 125, 155);
    121212  end;
    122   with Themes.AddNew('Light') do begin
     213  with Themes.AddNew(ThemeNameLight) do begin
    123214    ColorWindow := clWhite;
    124215    ColorWindowText := clBlack;
     
    127218    ColorControlSelected := RGBToColor(196, 225, 255);
    128219  end;
     220  Theme := TTheme(Themes.First);
    129221end;
    130222
     
    132224begin
    133225  FreeAndNil(Themes);
     226  {$IFDEF WINDOWS}
     227  if DwmapiLib <> 0 then FreeLibrary(DwmapiLib);
     228  {$ENDIF}
    134229  inherited;
    135230end;
     
    150245    (Control is TMemo) or (Control is TListView) or (Control is TCustomDrawGrid) or
    151246    (Control is TCheckBox) or (Control is TPageControl) or (Control is TRadioButton) then begin
    152       Control.Color := FTheme.ColorWindow;
    153       Control.Font.Color := FTheme.ColorWindowText;
     247      Control.Color := FActualTheme.ColorWindow;
     248      Control.Font.Color := FActualTheme.ColorWindowText;
    154249    end else begin
    155       Control.Color := FTheme.ColorControl;
    156       Control.Font.Color := FTheme.ColorControlText;
     250      Control.Color := FActualTheme.ColorControl;
     251      Control.Font.Color := FActualTheme.ColorControlText;
    157252    end;
    158253
    159254    if Control is TCustomDrawGrid then begin
    160       (Control as TCustomDrawGrid).Editor.Color := FTheme.ColorWindow;
    161       (Control as TCustomDrawGrid).Editor.Font.Color := FTheme.ColorWindowText;
     255      (Control as TCustomDrawGrid).Editor.Color := FActualTheme.ColorWindow;
     256      (Control as TCustomDrawGrid).Editor.Font.Color := FActualTheme.ColorWindowText;
    162257    end;
    163258
     
    175270procedure TThemeManager.UseTheme(Form: TForm);
    176271begin
    177   if not Used and (FTheme.Name = 'System') then Exit;
     272  if not Used and (FActualTheme.Name = ThemeNameSystem) then Exit;
    178273  ApplyTheme(Form);
     274  SetThemedTitleBar(Form, FActualTheme.Name = ThemeNameDark);
    179275  Used := True;
    180276end;
    181277
    182 
    183278end.
  • trunk/Packages/Common/Threading.pas

    r218 r219  
    1 unit UThreading;
    2 
    3 {$mode delphi}
     1unit Threading;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Forms, fgl, SyncObjs;
     6  Classes, SysUtils, Forms, Generics.Collections, SyncObjs;
    97
    108type
    119  TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
    1210  TMethodCall = procedure of object;
    13 
    1411
    1512  { TVirtualThread }
     
    10299  { TThreadList }
    103100
    104   TThreadList = class(TFPGObjectList<TVirtualThread>)
     101  TThreadList = class(TObjectList<TVirtualThread>)
    105102    function FindById(Id: TThreadID): TVirtualThread;
    106103    constructor Create; virtual;
     
    191188constructor TThreadList.Create;
    192189begin
    193   inherited Create;
     190  inherited;
    194191end;
    195192
     
    294291    ThreadListLock.Release;
    295292  end;
    296   FThread.Free;
    297   inherited Destroy;
     293  FreeAndNil(FThread);
     294  inherited;
    298295end;
    299296
     
    361358ThreadListLock := TCriticalSection.Create;
    362359ThreadList := TThreadList.Create;
    363 ThreadList.FreeObjects := False;
     360ThreadList.OwnsObjects := False;
    364361
    365362finalization
    366363
    367 ThreadList.Free;
    368 ThreadListLock.Free;
     364FreeAndNil(ThreadList);
     365FreeAndNil(ThreadListLock);
    369366
    370367end.
    371 
  • trunk/Packages/Common/Translator.pas

    r218 r219  
    1 unit UTranslator;
    2 
    3 {$mode delphi}{$H+}
     1unit Translator;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Forms, ExtCtrls, Controls, fgl, LazFileUtils, LazUTF8,
    9   Translations, TypInfo, Dialogs, FileUtil, LCLProc, ULanguages, LCLType,
    10   LCLVersion;
     6  Classes, SysUtils, Forms, ExtCtrls, Controls, LazFileUtils, LazUTF8,
     7  Translations, TypInfo, Dialogs, FileUtil, LCLProc, Languages, LCLType,
     8  LCLVersion, Generics.Collections;
    119
    1210type
    1311  THandleStringEvent = function (AValue: string): string of object;
    1412
    15   TPoFiles = class(TFPGObjectList<TPOFile>)
     13  TPoFiles = class(TObjectList<TPOFile>)
    1614  end;
    1715
     
    2725  { TComponentExcludesList }
    2826
    29   TComponentExcludesList = class(TFPGObjectList<TComponentExcludes>)
     27  TComponentExcludesList = class(TObjectList<TComponentExcludes>)
    3028    function FindByClassType(AClassType: TClass): TComponentExcludes;
    3129    procedure DumpToStrings(Strings: TStrings);
     
    5048    procedure TranslateProperty(Component: TPersistent; PropInfo: PPropInfo);
    5149    function IsExcluded(Component: TPersistent; PropertyName: string): Boolean;
    52     function GetLangFileDir: string;
     50    function GetLangFileDirs: TStrings;
    5351  public
    5452    ComponentExcludes: TComponentExcludesList;
     
    7371  end;
    7472
     73const
     74  PoExt = '.po';
     75
    7576procedure Register;
    7677
    77 const
    78   PoFileExt = '.po';
    79 
    8078
    8179implementation
     80
     81uses
     82  Common;
    8283
    8384procedure Register;
     
    166167  FileList: TStringList;
    167168  I: Integer;
     169  J: Integer;
    168170  LocaleShort: string;
    169171  SearchMask: string;
     172  LangDirs: TStrings;
    170173begin
    171174  FPoFiles.Clear;
    172   if Assigned(FLanguage) then
    173   try
     175  if Assigned(FLanguage) then begin
    174176    LocaleShort := GetLocaleShort;
    175177    SearchMask := '*';
    176178    if LocaleShort <> '' then SearchMask := SearchMask + '.' + LocaleShort;
    177     SearchMask := SearchMask + PoFileExt;
    178     FileList := FindAllFiles(GetLangFileDir, SearchMask);
    179     for I := 0 to FileList.Count - 1 do begin
    180       FileName := FileList[I];
    181       if FileExists(FileName) and (
    182       ((LocaleShort = '') and (Pos('.', FileName) = Pos(PoFileExt, FileName))) or
    183       (LocaleShort <> '')) then FPoFiles.Add(TPOFile.Create(FileName));
    184     end;
    185   finally
    186     FileList.Free;
     179    SearchMask := SearchMask + PoExt;
     180    LangDirs := GetLangFileDirs;
     181    for J := 0 to LangDirs.Count - 1 do begin
     182      FileList := FindAllFiles(LangDirs[J], SearchMask);
     183      try
     184        for I := 0 to FileList.Count - 1 do begin
     185          FileName := FileList[I];
     186          //FileName := FindLocaleFileName('.po');
     187           if FileExists(FileName) and (
     188          ((LocaleShort = '') and (Pos('.', FileName) = Pos(PoExt, FileName))) or
     189          (LocaleShort <> '')) then FPoFiles.Add(TPOFile.Create(FileName));
     190        end;
     191      finally
     192        FileList.Free;
     193      end;
     194    end;
     195    LangDirs.Free;
    187196  end;
    188197end;
     
    245254  I: Integer;
    246255begin
     256
    247257//  PropInfo^.Name;
    248258  // Using IsDefaultPropertyValue will tell us if we should write out
     
    300310end;
    301311
    302 function TTranslator.GetLangFileDir: string;
    303 begin
    304   Result := FPoFilesFolder;
    305   if not FilenameIsAbsolute(Result) then
    306     Result := ExtractFileDir(Application.ExeName) + DirectorySeparator + Result;
     312function TTranslator.GetLangFileDirs: TStrings;
     313var
     314  I: Integer;
     315begin
     316  Result := TStringList.Create;
     317  Result.Delimiter := ';';
     318  Result.StrictDelimiter := True;
     319  Result.DelimitedText := FPoFilesFolder;
     320
     321  for I := 0 to Result.Count - 1 do begin
     322    Result[I] := StringReplace(Result[I], '/', DirectorySeparator, [rfReplaceAll]);
     323    Result[I] := StringReplace(Result[I], '\', DirectorySeparator, [rfReplaceAll]);
     324    if (Copy(Result[I], 1, 1) <> DirectorySeparator) and (Copy(Result[I], 2, 2) <> ':\') then
     325      Result[I] := ExtractFileDir(Application.ExeName) +
     326        DirectorySeparator + Result[I];
     327  end;
    307328end;
    308329
     
    371392var
    372393  I: Integer;
    373   LangDir: string;
    374 begin
    375   LangDir := GetLangFileDir;
     394  J: Integer;
     395  LangDirs: TStrings;
     396begin
     397  LangDirs := GetLangFileDirs;
    376398  Languages.SearchByCode('').Available := True; // Automatic
    377399
    378400  for I := 1 to Languages.Count - 1 do
    379401  with Languages[I] do begin
    380     Available := FileExists(LangDir + DirectorySeparator + ExtractFileNameOnly(Application.ExeName) +
    381       '.' + Code + PoFileExt) or (Code = 'en');
    382   end;
     402    for J := 0 to LangDirs.Count - 1 do begin
     403      if FileExists(LangDirs[J] + DirectorySeparator + ExtractFileNameOnly(Application.ExeName) +
     404        '.' + Code + PoExt) or (Code = 'en') then begin
     405          Available := True;
     406          Continue;
     407        end;
     408    end;
     409  end;
     410  LangDirs.Free;
    383411end;
    384412
     
    468496
    469497  begin
     498
    470499    // ParamStrUTF8(0) is said not to work properly in linux, but I've tested it
    471500    Result := ExtractFilePath(ParamStrUTF8(0)) + LangID +
     
    568597end;
    569598
    570 
    571599end.
    572 
  • trunk/Packages/Common/URI.pas

    r218 r219  
    1 unit UURI;
     1unit URI;
    22
    33// Date: 2011-04-04
    4 
    5 {$mode delphi}
    64
    75interface
     
    8583  end;
    8684
     85
    8786implementation
    8887
     
    183182begin
    184183  Items.Free;
    185   inherited Destroy;
     184  inherited;
    186185end;
    187186
     
    232231begin
    233232  Path.Free;
    234   inherited Destroy;
     233  inherited;
    235234end;
    236235
     
    243242    Fragment := TURI(Source).Fragment;
    244243    Query := TURI(Source).Query;
    245   end else inherited Assign(Source);
     244  end else inherited;
    246245end;
    247246
     
    291290destructor TURL.Destroy;
    292291begin
    293   inherited Destroy;
     292  inherited;
    294293end;
    295294
     
    344343begin
    345344  Directory.Free;
    346   inherited Destroy;
    347 end;
    348 
     345  inherited;
     346end;
    349347
    350348end.
    351 
  • trunk/Packages/Common/XML.pas

    r218 r219  
    1 unit UXMLUtils;
    2 
    3 {$mode delphi}
     1unit XML;
    42
    53interface
     
    1614procedure WriteString(Node: TDOMNode; Name: string; Value: string);
    1715procedure WriteDateTime(Node: TDOMNode; Name: string; Value: TDateTime);
     16procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
    1817function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    1918function ReadInt64(Node: TDOMNode; Name: string; DefaultValue: Int64): Int64;
     
    2120function ReadString(Node: TDOMNode; Name: string; DefaultValue: string): string;
    2221function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime): TDateTime;
     22function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
    2323procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
    2424
    2525
    2626implementation
     27
     28function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
     29var
     30  NewNode: TDOMNode;
     31begin
     32  Result := DefaultValue;
     33  NewNode := Node.FindNode(DOMString(Name));
     34  if Assigned(NewNode) then
     35    Result := StrToFloat(string(NewNode.TextContent));
     36end;
    2737
    2838procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
     
    202212end;
    203213
     214procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
     215var
     216  NewNode: TDOMNode;
     217begin
     218  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     219  NewNode.TextContent := DOMString(FloatToStr(Value));
     220  Node.AppendChild(NewNode);
     221end;
     222
    204223function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
    205224var
     
    254273
    255274end.
    256 
Note: See TracChangeset for help on using the changeset viewer.