Changeset 75


Ignore:
Timestamp:
Jun 4, 2024, 12:22:49 AM (5 months ago)
Author:
chronos
Message:
  • Modified: Removed U prefix from unit names.
  • Modified: Updated Common package.
Location:
trunk
Files:
56 added
32 deleted
10 edited
2 copied
85 moved

Legend:

Unmodified
Added
Removed
  • trunk/Compiler/Analyzer.pas

    r74 r75  
    1 unit UAnalyzer;
    2 
    3 {$MODE Delphi}
    4 {$MACRO ON}
     1unit Analyzer;
    52
    63interface
    74
    85uses
    9   SysUtils, Variants, Classes, Contnrs,
    10   Dialogs, USourceCodePascal, FileUtil, SpecializedList;
     6  SysUtils, Variants, Classes, Dialogs, SourceCodePascal, FileUtil,
     7  Generics.Collections;
    118
    129type
     
    5451    CodePosition: TPoint;
    5552    SourceCode2: string;
    56     Tokens: TObjectList; // TObjectList<TToken>
     53    Tokens: TObjectList<TToken>;
    5754    TokenIndex: Integer;
    5855    constructor Create;
     
    8380  end;
    8481
    85   { TListAnalyzer }
    86 
    87   TListAnalyzer = class(TListObject)
     82  { TAnalyzers }
     83
     84  TAnalyzers = class(TObjectList<TAnalyzer>)
    8885    function SearchBySysName(Name: string): TAnalyzer;
    8986    procedure LoadToStrings(Strings: TStrings);
     
    9390  SExpectedButFound = 'Expected "%s" but "%s" found.';
    9491
     92
    9593implementation
    9694
    97 { TListAnalyzer }
    98 
    99 function TListAnalyzer.SearchBySysName(Name: string): TAnalyzer;
     95{ TAnalyzers }
     96
     97function TAnalyzers.SearchBySysName(Name: string): TAnalyzer;
    10098var
    10199  I: Integer;
     
    107105end;
    108106
    109 procedure TListAnalyzer.LoadToStrings(Strings: TStrings);
     107procedure TAnalyzers.LoadToStrings(Strings: TStrings);
    110108var
    111109  I: Integer;
     
    154152constructor TAnalyzer.Create;
    155153begin
    156   Tokens := TObjectList.Create;
     154  Tokens := TObjectList<TToken>.Create;
    157155  {$IFDEF windows}
    158156  LineEndingChar := LineEnding[1];
     
    164162destructor TAnalyzer.Destroy;
    165163begin
    166   Tokens.Free;
    167   inherited Destroy;
     164  FreeAndNil(Tokens);
     165  inherited;
    168166end;
    169167
  • trunk/Compiler/Compiler.pas

    r74 r75  
    1 unit UCompiler;
    2 
    3 {$MODE Delphi}
     1unit Compiler;
    42
    53interface
    64
    75uses
    8   SysUtils, Variants, Classes, Contnrs, FileUtil, UModularSystem, UCompilerAPI,
    9   Dialogs, USourceCodePascal, UProducer, UAnalyzer, SpecializedList, UTarget,
    10   fgl;
     6  SysUtils, Variants, Classes, FileUtil, ModularSystem, CompilerAPI,
     7  Dialogs, SourceCodePascal, Producer, Analyzer, Generics.Collections, Target;
    118
    129type
     
    2017
    2118  TSourceFileManager = class
    22     Files: TListString;
     19    Files: TStringList;
    2320    function LoadStringFromFile(FileName: string): string;
    2421    procedure SaveStringToFile(FileName: string; Content: string);
     
    4542  public
    4643    AbstractCode: TProgram;
    47     ErrorMessages: TFPGObjectList<TErrorMessage>;
     44    ErrorMessages: TObjectList<TErrorMessage>;
    4845    CompiledFolder: string;
    4946
    50     Targets: TListTarget;
    51     Analyzers: TListAnalyzer;
    52     Convertors: TListObject;
    53     Executors: TListObject;
     47    Targets: TTargets;
     48    Analyzers: TAnalyzers;
     49    Convertors: TObjectList<TObject>;
     50    Executors: TObjectList<TObject>;
    5451    API: TCompilerAPI;
    5552    TargetFolder: string;
     
    7370
    7471uses
    75   UAnalyzerPascal;
     72  AnalyzerPascal;
    7673
    7774resourcestring
     
    146143constructor TSourceFileManager.Create;
    147144begin
    148   Files := TListString.Create;
     145  Files := TStringList.Create;
    149146end;
    150147
    151148destructor TSourceFileManager.Destroy;
    152149begin
    153   Files.Free;
    154   inherited Destroy;
     150  FreeAndNil(Files);
     151  inherited;
    155152end;
    156153
     
    168165constructor TCompiler.Create;
    169166begin
    170   Targets := TListTarget.Create;
    171   Analyzers := TListAnalyzer.Create;
    172   Convertors := TListObject.Create;
    173   Executors := TListObject.Create;
     167  Targets := TTargets.Create;
     168  Analyzers := TAnalyzers.Create;
     169  Convertors := TObjectList<TObject>.Create;
     170  Executors := TObjectList<TObject>.Create;
    174171  API := TCompilerAPI.Create;
    175172  API.Compiler := Self;
    176173  AbstractCode := TProgram.Create;
    177   ErrorMessages := TFPGObjectList<TErrorMessage>.Create;
     174  ErrorMessages := TObjectList<TErrorMessage>.Create;
    178175  CompiledFolder := 'Compiled';
    179176  ModuleManager := TModuleManager.Create(nil);
  • trunk/Compiler/CompilerAPI.pas

    r74 r75  
    1 unit UCompilerAPI;
    2 
    3 {$mode delphi}{$H+}
     1unit CompilerAPI;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UModularSystem, UAnalyzer, UTarget, USourceConvertor,
    9   SpecializedList, UExecutor;
     6  Classes, SysUtils, ModularSystem, Analyzer, Target, SourceConvertor,
     7  Generics.Collections, Executor;
    108
    119type
     
    2523  end;
    2624
     25
    2726implementation
    2827
    2928uses
    30   UCompiler;
     29  Compiler;
    3130
    3231
     
    4039procedure TCompilerAPI.UnregisterTarget(AClass: TTargetClass);
    4140begin
    42   TCompiler(Compiler).Targets.Remove(TObject(AClass));
     41  //TCompiler(Compiler).Targets.Remove(TObject(AClass));
    4342end;
    4443
     
    6968destructor TCompilerAPI.Destroy;
    7069begin
    71   inherited Destroy;
     70  inherited;
    7271end;
    7372
  • trunk/Compiler/Executor.pas

    r74 r75  
    1 unit UExecutor;
    2 
    3 {$mode Delphi}{$H+}
     1unit Executor;
    42
    53interface
     
    3331  TExecutorClass = class of TExecutor;
    3432
     33
    3534implementation
    3635
     
    3938procedure TExecutor.SetRunState(AValue: TRunState);
    4039begin
    41   if FRunState=AValue then Exit;
    42   FRunState:=AValue;
     40  if FRunState = AValue then Exit;
     41  FRunState := AValue;
    4342end;
    4443
  • trunk/Compiler/Modules/ASM8051/ProducerASM8051.pas

    r74 r75  
    1 unit UProducerASM8051;
    2 
    3 {$MODE Delphi}
     1unit ProducerASM8051;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, USourceCodePascal, UProducer, Contnrs;
     7  Dialogs, SourceCodePascal, Producer, Generics.Collections;
    108
    119type
     
    3735    procedure GenerateModule(Module: TSourceModule);
    3836  public
    39     AssemblyCode: TObjectList; // TList<TAssemblerLine>
     37    AssemblyCode: TObjectList<TAssemblerLine>;
    4038    procedure AssignToStringList(Target: TStringList); override;
    4139    procedure Produce(Module: TSourceModule); override;
     
    107105constructor TProducerAsm8051.Create;
    108106begin
    109   AssemblyCode := TObjectList.Create;
     107  AssemblyCode := TObjectList<TAssemblerLine>.Create;
    110108  {$IFDEF Windows}
    111109  CompilerPath := 'c:\ASM8051\ASM51.EXE';
  • trunk/Compiler/Modules/ASM8051/TargetASM8051.pas

    r74 r75  
    1 unit UTargetASM8051;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetASM8051;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget;
     6  Classes, SysUtils, Target;
    97
    108type
     
    1614  end;
    1715
     16
    1817implementation
    1918
     
    2221constructor TTargetASM8051.Create;
    2322begin
    24   inherited Create;
     23  inherited;
    2524  SysName := 'ASM8051';
    2625  Name := 'ASM8051';
  • trunk/Compiler/Modules/Brainfuck/ModuleBrainfuck.pas

    r74 r75  
    1 unit UModuleBrainfuck;
    2 
    3 {$mode delphi}{$H+}
     1unit ModuleBrainfuck;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UModularSystem, USourceConvertor;
     6  Classes, SysUtils, ModularSystem, SourceConvertor;
    97
    108type
     
    4240
    4341uses
    44   UCompilerAPI, USourceCodePascal;
     42  CompilerAPI, SourceCodePascal;
    4543
    4644resourcestring
     
    5654constructor TConvertorBFToPascal.Create;
    5755begin
    58   inherited Create;
     56  inherited;
    5957  Name := 'BFToPascal';
    6058  InputType := TSourceBrainfuck;
     
    7169constructor TConvertorTextToBF.Create;
    7270begin
    73   inherited Create;
     71  inherited;
    7472  Name := 'TextToBF';
    7573  InputType := TSourceFileLink;
  • trunk/Compiler/Modules/Delphi/ModuleDelphi.pas

    r74 r75  
    1 unit UModuleDelphi;
    2 
    3 {$mode Delphi}{$H+}
     1unit ModuleDelphi;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget, UExecutor, UModularSystem;
     6  Classes, SysUtils, Target, Executor, ModularSystem;
    97
    108type
     
    2826
    2927uses
    30   UProducerDelphi, UCompilerAPI;
     28  ProducerDelphi, CompilerAPI;
    3129
    3230resourcestring
     
    3836begin
    3937  inherited;
    40   Name := 'Delphi';
     38  Identification := 'Delphi';
    4139  Title := SDelphi;
    4240end;
  • trunk/Compiler/Modules/Delphi/ProducerDelphi.pas

    r74 r75  
    1 unit UProducerDelphi;
    2 
    3 {$MODE Delphi}
     1unit ProducerDelphi;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, USourceCodePascal, UProducer, StrUtils, USourceConvertor;
     7  Dialogs, SourceCodePascal, Producer, StrUtils, SourceConvertor;
    108
    119type
     
    1614  private
    1715    Producer: TProducer;
    18     procedure GenerateUses(UsedModules: TUsedModuleList);
     16    procedure GenerateUses(UsedModules: TUsedModules);
    1917    procedure GenerateModule(Module: TSourceModule);
    2018    procedure GenerateUnit(Module: TSourceModule);
     
    2220    procedure GeneratePackage(Module: TSourceModule);
    2321    procedure GenerateType(AType: TType; AssignSymbol: Char = ':');
    24     procedure GenerateTypes(Types: TTypeList);
     22    procedure GenerateTypes(Types: TTypes);
    2523    procedure GenerateCommonBlockInterface(CommonBlock: TCommonBlock;
    2624      LabelPrefix: string);
    2725    procedure GenerateCommonBlockImplementation(CommonBlock: TCommonBlock;
    2826      LabelPrefix: string);
    29     procedure GenerateFunctions(Functions: TFunctionList);
     27    procedure GenerateFunctions(Functions: TFunctions);
    3028    procedure GenerateFunction(AFunction: TFunction);
    3129    procedure GenerateFunctionHead(AFunction: TFunction);
    32     procedure GenerateConstants(Constants: TConstantList);
     30    procedure GenerateConstants(Constants: TConstants);
    3331    procedure GenerateConstant(Constant: TConstant);
    3432    procedure GenerateBeginEnd(BeginEnd: TBeginEnd);
    35     procedure GenerateVariableList(Variables: TVariableList);
     33    procedure GenerateVariableList(Variables: TVariables);
    3634    procedure GenerateVariable(Variable: TVariable);
    3735    procedure GenerateCommand(Command: TCommand);
     
    4947  end;
    5048
     49
    5150implementation
    5251
     
    7271destructor TProducerPascal.Destroy;
    7372begin
    74   Producer.Free;
     73  FreeAndNil(Producer);
    7574  inherited;
    7675end;
    7776
    78 procedure TProducerPascal.GenerateUses(UsedModules: TUsedModuleList);
     77procedure TProducerPascal.GenerateUses(UsedModules: TUsedModules);
    7978var
    8079  I: Integer;
     
    142141procedure TProducerPascal.GenerateLibrary(Module: TSourceModule);
    143142begin
    144 
    145143end;
    146144
    147145procedure TProducerPascal.GeneratePackage(Module: TSourceModule);
    148146begin
    149 
    150147end;
    151148
     
    192189end;
    193190
    194 procedure TProducerPascal.GenerateTypes(Types: TTypeList);
     191procedure TProducerPascal.GenerateTypes(Types: TTypes);
    195192var
    196193  I: Integer;
     
    231228end;
    232229
    233 procedure TProducerPascal.GenerateFunctions(Functions: TFunctionList);
     230procedure TProducerPascal.GenerateFunctions(Functions: TFunctions);
    234231var
    235232  I: Integer;
     
    280277end;
    281278
    282 procedure TProducerPascal.GenerateConstants(Constants: TConstantList);
     279procedure TProducerPascal.GenerateConstants(Constants: TConstants);
    283280var
    284281  I: Integer;
     
    322319end;
    323320
    324 procedure TProducerPascal.GenerateVariableList(Variables: TVariableList);
     321procedure TProducerPascal.GenerateVariableList(Variables: TVariables);
    325322var
    326323  I: Integer;
  • trunk/Compiler/Modules/GCC/ModuleGCC.pas

    r74 r75  
    1 unit UModuleGCC;
    2 
    3 {$mode delphi}{$H+}
     1unit ModuleGCC;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UModularSystem, UProducerGCC, UTargetGCC, UCompilerAPI;
     6  Classes, SysUtils, ModularSystem, ProducerGCC, TargetGCC, CompilerAPI;
    97
    108type
     
    1311
    1412  TModuleGCC = class(TModule)
     13  public
    1514    Target: TTargetGCC;
    1615    constructor Create(AOwner: TComponent); override;
     
    3130begin
    3231  inherited;
    33   Name := 'GCC';
     32  Identification := 'GCC';
    3433  Title := SGCC;
    3534end;
  • trunk/Compiler/Modules/GCC/ProducerGCC.pas

    r74 r75  
    1 unit UProducerGCC;
    2 
    3 {$MODE Delphi}
     1unit ProducerGCC;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, USourceCode, UProducer, StrUtils;
     7  Dialogs, StdCtrls, SourceCodePascal, Producer, StrUtils;
    108
    119type
     
    1917    procedure Emit(AText: string);
    2018    procedure EmitLn(AText: string = '');
    21     procedure GenerateUses(UsedModules: TUsedModuleList);
     19    procedure GenerateUses(UsedModules: TUsedModules);
    2220    procedure GenerateModule(Module: TSourceModule);
    2321    procedure GenerateCommonBlock(CommonBlock: TCommonBlock;
    2422      LabelPrefix: string);
    2523    procedure GenerateType(AType: TType);
    26     procedure GenerateTypes(Types: TTypeList);
     24    procedure GenerateTypes(Types: TTypes);
    2725    procedure GenerateProgram(ProgramBlock: TProgram);
    28     procedure GenerateFunctions(Functions: TFunctionList;
     26    procedure GenerateFunctions(Functions: TFunctions;
    2927      Prefix: string = '');
    3028    procedure GenerateBeginEnd(BeginEnd: TBeginEnd);
    31     procedure GenerateVariableList(VariableList: TVariableList);
     29    procedure GenerateVariableList(VariableList: TVariables);
    3230    procedure GenerateVariable(Variable: TVariable);
    3331    procedure GenerateCommand(Command: TCommand);
     
    113111end;
    114112
    115 procedure TProducerGCCC.GenerateUses(UsedModules: TUsedModuleList);
     113procedure TProducerGCCC.GenerateUses(UsedModules: TUsedModules);
    116114var
    117115  I: Integer;
     
    155153end;
    156154
    157 procedure TProducerGCCC.GenerateFunctions(Functions: TFunctionList;
    158   Prefix: string = '');
     155procedure TProducerGCCC.GenerateFunctions(Functions: TFunctions; Prefix: string
     156  );
    159157var
    160158  I: Integer;
     
    202200end;
    203201
    204 procedure TProducerGCCC.GenerateVariableList(VariableList: TVariableList);
     202procedure TProducerGCCC.GenerateVariableList(VariableList: TVariables);
    205203var
    206204  I: Integer;
     
    361359end;
    362360
    363 procedure TProducerGCCC.GenerateTypes(Types: TTypeList);
     361procedure TProducerGCCC.GenerateTypes(Types: TTypes);
    364362var
    365363  I: Integer;
  • trunk/Compiler/Modules/GCC/TargetGCC.pas

    r74 r75  
    1 unit UTargetGCC;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetGCC;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget;
     6  Classes, SysUtils, Target;
    97
    108type
     
    2220constructor TTargetGCC.Create;
    2321begin
    24   inherited Create;
     22  inherited;
    2523  SysName := 'GCC';
    2624  Name := 'GCC';
  • trunk/Compiler/Modules/Interpretter/ModuleInterpretter.pas

    r74 r75  
    1 unit UModuleInterpretter;
    2 
    3 {$mode Delphi}{$H+}
     1unit ModuleInterpretter;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget, UExecutor, USourceCodePascal, Dialogs,
    9   SpecializedList, UModularSystem;
     6  Classes, SysUtils, Target, Executor, SourceCodePascal, Dialogs,
     7  Generics.Collections, ModularSystem;
    108
    119type
     
    3028    function Evaluate(Expression: TExpression): TValue;
    3129  public
    32     Variables: TListObject;
     30    Variables: TObjectList<TVariable>;
    3331    procedure Run; override;
    3432    constructor Create;
     
    4745
    4846uses
    49   UCompiler, UCompilerAPI;
     47  Compiler, CompilerAPI;
    5048
    5149resourcestring
     
    5856begin
    5957  inherited;
    60   Name := 'Interpretter';
     58  Identification := 'Interpretter';
    6159  Title := 'Interpretter';
    6260  Version := '0.1';
     
    187185constructor TExecutorInterpretter.Create;
    188186begin
    189   Variables := TListObject.Create;
     187  Variables := TVariables.Create;
    190188end;
    191189
    192190destructor TExecutorInterpretter.Destroy;
    193191begin
    194   Variables.Free;
    195   inherited Destroy;
     192  FreeAndnil(Variables);
     193  inherited;
    196194end;
    197195
  • trunk/Compiler/Modules/Pascal/AnalyzerPascal.pas

    r74 r75  
    1 unit UAnalyzerPascal;
    2 
    3 {$mode delphi}
     1unit AnalyzerPascal;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UAnalyzer, USourceCodePascal, Dialogs, USourceConvertor;
     6  Classes, SysUtils, Analyzer, SourceCodePascal, Dialogs, SourceConvertor;
    97
    108type
     
    1614  public
    1715    Parser: TAnalyzer;
    18     function DebugExpressions(List: TListExpression): string;
     16    function DebugExpressions(List: TExpressions): string;
    1917    function ParseFile(Name: string): Boolean;
    2018    function ParseWhileDo(var WhileDo: TWhileDo; SourceCode: TCommonBlock): Boolean;
    2119    function ParseExpression(SourceCode: TExpression): Boolean;
    2220    function ParseExpressionParenthases(SourceCode: TExpression;
    23       Expressions: TListExpression): Boolean;
     21      Expressions: TExpressions): Boolean;
    2422    function ParseExpressionOperator(SourceCode: TExpression;
    25       Expressions: TListExpression): Boolean;
     23      Expressions: TExpressions): Boolean;
    2624    function ParseExpressionRightValue(SourceCode: TExpression;
    27       Expressions: TListExpression): Boolean;
     25      Expressions: TExpressions): Boolean;
    2826    function ParseExpressionFunctionCall(SourceCode: TExpression;
    29       Expressions: TListExpression; var Func: TFunctionCall): Boolean;
    30     function ParseUses(SourceCode: TUsedModuleList; AExported: Boolean): Boolean;
    31     function ParseUsesItem(SourceCode: TUsedModuleList; AExported: Boolean): Boolean;
     27      Expressions: TExpressions; var Func: TFunctionCall): Boolean;
     28    function ParseUses(SourceCode: TUsedModules; AExported: Boolean): Boolean;
     29    function ParseUsesItem(SourceCode: TUsedModules; AExported: Boolean): Boolean;
    3230    function ParseModule(ProgramCode: TProgram): TSourceModule;
    3331    function ParseUnit(var SourceCode: TModuleUnit; ProgramCode: TProgram): Boolean;
     
    4038    function ParseCommand(SourceCode: TCommonBlock): TCommand;
    4139    function ParseBeginEnd(var BeginEnd: TBeginEnd; SourceCode: TCommonBlock): Boolean;
    42     function ParseFunction(SourceCode: TFunctionList; Exported: Boolean = False): Boolean;
     40    function ParseFunction(SourceCode: TFunctions; Exported: Boolean = False): Boolean;
    4341    procedure ParseFunctionParameters(SourceCode: TFunction; ValidateParams: Boolean = False);
    4442    function ParseIfThenElse(var IfThenElse: TIfThenElse; SourceCode: TCommonBlock): Boolean;
     
    4644    function ParseAssigment(var Assignment: TAssignment; SourceCode: TCommonBlock): Boolean;
    4745    function ParseFunctionCall(var Call: TFunctionCall; SourceCode: TCommonBlock): Boolean;
    48     function ParseVariableList(SourceCode: TVariableList; Exported: Boolean = False): Boolean;
    49     procedure ParseVariable(SourceCode: TVariableList; Exported: Boolean = False);
    50     function ParseConstantList(SourceCode: TConstantList; Exported: Boolean = False): Boolean;
    51     function ParseConstant(SourceCode: TConstantList; Exported: Boolean = False): Boolean;
    52     function ParseType(TypeList: TTypeList; var NewType: TType; ExpectName: Boolean = True;
     46    function ParseVariableList(SourceCode: TVariables; Exported: Boolean = False): Boolean;
     47    procedure ParseVariable(SourceCode: TVariables; Exported: Boolean = False);
     48    function ParseConstantList(SourceCode: TConstants; Exported: Boolean = False): Boolean;
     49    function ParseConstant(SourceCode: TConstants; Exported: Boolean = False): Boolean;
     50    function ParseType(TypeList: TTypes; var NewType: TType; ExpectName: Boolean = True;
    5351      AssignSymbol: string = '='; ForwardDeclaration: Boolean = False): Boolean;
    5452    function ParseTypeParameters(var NewType: TType): Boolean;
     
    8684  SNotRecordOrClass = '"%s" not record or class';
    8785
     86
    8887implementation
    8988
    9089{ TAnalyzerPascal }
    9190
    92 function TAnalyzerPascal.DebugExpressions(List: TListExpression): string;
     91function TAnalyzerPascal.DebugExpressions(List: TExpressions): string;
    9392var
    9493  I: Integer;
     
    152151function TAnalyzerPascal.ParseExpression(SourceCode: TExpression): Boolean;
    153152var
    154   Expressions: TListExpression;
     153  Expressions: TExpressions;
    155154  I: Integer;
    156155  II: Integer;
     
    158157(*  with Parser do
    159158  try
    160     Expressions := TListExpression.Create;
     159    Expressions := TExpressions.Create;
    161160    Expressions.Add(TExpression.Create);
    162161    with SourceCode do begin
     
    206205
    207206function TAnalyzerPascal.ParseExpressionParenthases(SourceCode: TExpression;
    208   Expressions: TListExpression): Boolean;
     207  Expressions: TExpressions): Boolean;
    209208var
    210209  NewExpression: TExpression;
     
    230229
    231230function TAnalyzerPascal.ParseExpressionOperator(SourceCode: TExpression;
    232   Expressions: TListExpression): Boolean;
     231  Expressions: TExpressions): Boolean;
    233232begin
    234233  (*if IsOperator(NextToken) then begin
     
    241240
    242241function TAnalyzerPascal.ParseExpressionRightValue(SourceCode: TExpression;
    243   Expressions: TListExpression): Boolean;
     242  Expressions: TExpressions): Boolean;
    244243var
    245244  UseType: TType;
     
    348347    end;
    349348    if Assigned(NewExpression) then begin
    350       TExpression(Expressions.Last).SubItems.Last := NewExpression;
     349      TExpression(Expressions.Last).SubItems[TExpression(Expressions.Last).SubItems.Count - 1] := NewExpression;
    351350      with TExpression(Expressions.Items[Expressions.Add(TExpression.Create)]) do
    352351      begin
    353352        CommonBlock := SourceCode.CommonBlock;
    354         SubItems.First := NewExpression;
     353        SubItems[0] := NewExpression;
    355354      end;
    356355      Result := True;
     
    364363
    365364function TAnalyzerPascal.ParseExpressionFunctionCall(SourceCode: TExpression;
    366   Expressions: TListExpression; var Func: TFunctionCall): Boolean;
     365  Expressions: TExpressions; var Func: TFunctionCall): Boolean;
    367366var
    368367  UseFunction: TFunction;
     
    666665{ TParserParseFunctionList }
    667666
    668 function TAnalyzerPascal.ParseFunction(SourceCode: TFunctionList;
     667function TAnalyzerPascal.ParseFunction(SourceCode: TFunctions;
    669668  Exported: Boolean = False): Boolean;
    670669var
     
    796795        while (NextToken <> ')') and (NextTokenType <> ttEndOfFile) do begin
    797796          // while IsIdentificator(NextCode) do begin
    798           with TParameterList(Parameters) do begin
     797          with TParameters(Parameters) do begin
    799798            VariableName := ReadToken;
    800799            if VariableName = 'var' then begin
     
    948947{ TParserVariableList }
    949948
    950 function TAnalyzerPascal.ParseVariableList(SourceCode: TVariableList; Exported: Boolean = False): Boolean;
     949function TAnalyzerPascal.ParseVariableList(SourceCode: TVariables; Exported: Boolean = False): Boolean;
    951950var
    952951  NewValueType: TType;
     
    968967{ TParserVariable }
    969968
    970 procedure TAnalyzerPascal.ParseVariable(SourceCode: TVariableList; Exported: Boolean = False);
     969procedure TAnalyzerPascal.ParseVariable(SourceCode: TVariables; Exported: Boolean = False);
    971970var
    972971  VariableName: string;
     
    10161015{ TParserConstantList }
    10171016
    1018 function TAnalyzerPascal.ParseConstantList(SourceCode: TConstantList; Exported: Boolean = False): Boolean;
     1017function TAnalyzerPascal.ParseConstantList(SourceCode: TConstants; Exported: Boolean = False): Boolean;
    10191018begin
    10201019  with Parser do
     
    10301029end;
    10311030
    1032 function TAnalyzerPascal.ParseConstant(SourceCode: TConstantList;
     1031function TAnalyzerPascal.ParseConstant(SourceCode: TConstants;
    10331032  Exported: Boolean): Boolean;
    10341033var
     
    10821081{ TParserType }
    10831082
    1084 function TAnalyzerPascal.ParseType(TypeList: TTypeList; var NewType: TType; ExpectName: Boolean = True;
     1083function TAnalyzerPascal.ParseType(TypeList: TTypes; var NewType: TType; ExpectName: Boolean = True;
    10851084  AssignSymbol: string = '='; ForwardDeclaration: Boolean = False): Boolean;
    10861085begin
     
    14711470{ TParserUsedModuleList }
    14721471
    1473 function TAnalyzerPascal.ParseUses(SourceCode: TUsedModuleList; AExported: Boolean): Boolean;
     1472function TAnalyzerPascal.ParseUses(SourceCode: TUsedModules; AExported: Boolean): Boolean;
    14741473var
    14751474  NewUsedModule: TUsedModule;
     
    14881487end;
    14891488
    1490 function TAnalyzerPascal.ParseUsesItem(SourceCode: TUsedModuleList;
     1489function TAnalyzerPascal.ParseUsesItem(SourceCode: TUsedModules;
    14911490  AExported: Boolean): Boolean;
    14921491begin
  • trunk/Compiler/Modules/Pascal/ModulePascal.pas

    r74 r75  
    1 unit UModulePascal;
    2 
    3 {$mode delphi}{$H+}
     1unit ModulePascal;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UModularSystem, UAnalyzerPascal;
     6  Classes, SysUtils, ModularSystem, AnalyzerPascal;
    97
    108type
     
    2422
    2523uses
    26   UCompilerAPI;
     24  CompilerAPI;
    2725
    2826{ TModulePascal }
     
    3129begin
    3230  inherited;
    33   Name := 'Pascal';
     31  Identification := 'Pascal';
    3432  Title := 'Pascal';
    3533  Version := '0.1';
     
    3836destructor TModulePascal.Destroy;
    3937begin
    40   inherited Destroy;
     38  inherited;
    4139end;
    4240
  • trunk/Compiler/Modules/Pascal/SourceCodePascal.pas

    r74 r75  
    1 unit USourceCodePascal;
    2 
    3 {$MODE Delphi}
    4 {$MACRO ON}
     1unit SourceCodePascal;
    52
    63interface
    74
    85uses
    9   SysUtils, Variants, Classes, Dialogs, SpecializedList, USourceConvertor;
     6  SysUtils, Variants, Classes, Dialogs, Generics.Collections, SourceConvertor;
    107
    118type
     
    2219
    2320  TCommonBlock = class;
    24   TTypeList = class;
    25   TConstantList = class;
    26   TVariableList = class;
    27   TFunctionList = class;
    28   TListExpression = class;
     21  TTypes = class;
     22  TConstants = class;
     23  TVariables = class;
     24  TFunctions = class;
     25  TExpressions = class;
    2926  TExpression = class;
    3027  TFunction = class;
     
    4037
    4138  TContext = class
    42 
    43   end;
    44 
    45   TCommandList = class;
     39  end;
     40
     41  TCommands = class;
    4642
    4743  TCommand = class
     
    5753  end;
    5854
    59   // TListExpression = TGObjectList<Integer, TExpression>
    60   TListExpression = class(TListObject);
     55  { TExpressions }
     56
     57  TExpressions = class(TObjectList<TExpression>)
     58    procedure Assign(Source: TExpressions);
     59  end;
    6160
    6261  { TFunctionCall }
     
    6463  TFunctionCall = class(TCommand)
    6564    FunctionRef: TFunction;
    66     ParameterExpression: TListExpression;
     65    ParameterExpression: TExpressions;
    6766    constructor Create;
    6867    destructor Destroy; override;
     
    7069
    7170  TBeginEnd = class(TCommand)
    72     Commands: TCommandList;
     71    Commands: TCommands;
    7372    CommonBlock: TCommonBlock;
    7473    procedure Clear;
     
    9089
    9190  TRepeatUntil = class(TCommand)
    92     Block: TCommandList;
     91    Block: TCommands;
    9392    Condition: TExpression;
    9493  end;
     
    120119  end;
    121120
    122   // TListCaseOfEndBranche = TGObjectList<Integer, TCaseOfEndBranche>
    123   TListCaseOfEndBranche = class(TListObject);
     121  TListCaseOfEndBranche = class(TObjectList<TCaseOfEndBranche>);
    124122
    125123  TCaseOfEnd = class(TCommand)
     
    132130
    133131  TTryFinally = class(TCommand)
    134     Block: TCommandList;
    135     FinallyBlock: TCommandList;
     132    Block: TCommands;
     133    FinallyBlock: TCommands;
    136134  end;
    137135
    138136  TTryExcept = class(TCommand)
    139     Block: TCommandList;
    140     ExceptBlock: TCommandList;
    141   end;
    142 
    143   // TCommandList = TGObjectList<Integer, TCommand>
    144   TCommandList = class(TListObject);
     137    Block: TCommands;
     138    ExceptBlock: TCommands;
     139  end;
     140
     141  TCommands = class(TObjectList<TCommand>);
    145142
    146143  TCommonBlockSection = (cbsVariable, cbsType, cbsConstant);
     
    150147    Parent: TCommonBlock;
    151148    ParentModule: TSourceModule;
    152     Constants: TConstantList;
    153     Types: TTypeList;
    154     Variables: TVariableList;
    155     Functions: TFunctionList;
    156     Order: TListObject;
     149    Constants: TConstants;
     150    Types: TTypes;
     151    Variables: TVariables;
     152    Functions: TFunctions;
     153    Order: TObjectList<TObject>;
    157154    Code: TBeginEnd;
    158155    constructor Create; virtual;
     
    166163    ForwardDeclared: Boolean;
    167164    Internal: Boolean;
    168     Parent: TTypeList;
     165    Parent: TTypes;
    169166    Name: string;
    170167    Size: Integer;
     
    172169    Exported: Boolean;
    173170    Visibility: TTypeVisibility;
    174     Parameters: TTypeList;
     171    Parameters: TTypes;
    175172    procedure Assign(Source: TType);
    176173    constructor Create;
     
    178175  end;
    179176
    180   // TListType = TGObjectList<Integer, TType>
    181   TListType = class(TListObject);
    182 
    183   TTypeList = class(TListType)
     177  { TTypes }
     178
     179  TTypes = class(TObjectList<TType>)
    184180    Parent: TCommonBlock;
    185181    function Search(Name: string; Exported: Boolean = False): TType;
    186182    destructor Destroy; override;
     183    function AddNew: TType;
    187184  end;
    188185
     
    214211  end;
    215212
    216   // TListEnumItem = TGObjectList<Integer, TEnumItem>
    217   TListEnumItem = class(TListObject);
     213  TEnumItems = class(TObjectList<TEnumItem>);
    218214
    219215  TTypeEnumeration = class(TType)
    220     Items: TListEnumItem;
     216    Items: TEnumItems;
    221217    constructor Create;
    222218    destructor Destroy; override;
     
    239235  end;
    240236
    241   // TListConstant = TGObjectList<Integer, TConstant>
    242   TListConstant = class(TListObject);
    243 
    244   TConstantList = class(TListConstant)
     237  TConstants = class(TObjectList<TConstant>)
    245238    Parent: TCommonBlock;
    246239    function Search(Name: string): TConstant;
     
    256249  end;
    257250
    258   // TListVariable = TGObjectList<Integer, TVariable>
    259   TListVariable = class(TListObject);
    260 
    261   TVariableList = class(TListVariable)
     251  TVariables = class(TObjectList<TVariable>)
    262252    Parent: TCommonBlock;
    263253    function Search(Name: string; Exported: Boolean = False): TVariable;
     
    268258  end;
    269259
    270   // TListParameter = TGObjectList<Integer, TParameter>
    271   TListParameter = class(TListObject);
    272 
    273   TParameterList = class(TListParameter)
     260  TParameters = class(TObjectList<TParameter>)
    274261    Parent: TFunction;
    275262    function Search(Name: string): TParameter;
     
    288275    Value: TValue;
    289276    OperatorName: string;
    290     SubItems: TListExpression;
     277    SubItems: TExpressions;
    291278    Associated: Boolean;
    292279    Braces: Boolean;
     
    302289    Internal: Boolean;
    303290    FunctionType: TFunctionType;
    304     Parameters: TParameterList;
     291    Parameters: TParameters;
    305292    ResultType: TType;
    306293    Exported: Boolean;
     
    310297  end;
    311298
    312   // TListFunction = TGObjectList<Integer, TFunction>
    313   TListFunction = class(TListObject);
    314 
    315   TFunctionList = class(TListFunction)
     299  { TFunctions }
     300
     301  TFunctions = class(TObjectList<TFunction>)
    316302    Parent: TCommonBlock;
    317303    function Search(Name: string; Exported: Boolean = False): TFunction;
    318304    destructor Destroy; override;
     305    function AddNew: TFunction;
    319306  end;
    320307
     
    326313  end;
    327314
    328   // TListUsedModule = TGObjectList<Integer, TUsedModule>
    329   TListUsedModule = class(TListObject);
    330 
    331   TUsedModuleList = class(TListUsedModule)
     315  TUsedModules = class(TObjectList<TUsedModule>)
    332316    ParentModule: TSourceModule;
    333317  end;
     
    340324    Name: string;
    341325    TargetFile: string;
    342     UsedModules: TUsedModuleList;
     326    UsedModules: TUsedModules;
    343327    Body: TCommonBlock;
    344328    Internal: Boolean;
     
    374358  end;
    375359
    376   // TListModule = TGObjectList<Integer, TModule>
    377   TListModule = class(TListObject);
    378 
    379   { TModuleList }
    380 
    381   TModuleList = class(TListModule)
     360  { TModules }
     361
     362  TModules = class(TObjectList<TSourceModule>)
    382363    function Search(Name: string): TSourceModule;
    383364  end;
     
    387368  TProgram = class(TSource)
    388369    Device: TDevice;
    389     Modules: TModuleList;
     370    Modules: TModules;
    390371    MainModule: TSourceModule;
    391372    procedure Clear;
     
    408389  SAssignmentError = 'Assignment error';
    409390
     391
    410392implementation
    411393
     
    415397begin
    416398  inherited;
    417   Parameters := TParameterList.Create;
     399  Parameters := TParameters.Create;
    418400  Parameters.Parent := Self;
    419401  //ResultType := TType.Create;
     
    422404destructor TFunction.Destroy;
    423405begin
    424   Parameters.Free;
    425 //  ResultType.Free;
     406  FreeAndNil(Parameters);
     407//  FreeAndNil(ResultType);
    426408  inherited;
    427409end;
     
    438420begin
    439421  Device := TDevice.Create;
    440   Modules := TModuleList.Create;
     422  Modules := TModules.Create;
    441423end;
    442424
    443425destructor TProgram.Destroy;
    444426begin
    445   Modules.Free;
    446   Device.Free;
    447 end;
    448 
    449 { TConstant }
    450 
    451 
    452 { TConstantList }
    453 
    454 destructor TConstantList.Destroy;
    455 begin
    456   inherited;
    457 end;
    458 
    459 function TConstantList.Search(Name: string): TConstant;
     427  FreeAndNil(Modules);
     428  FreeAndNil(Device);
     429end;
     430
     431{ TConstants }
     432
     433destructor TConstants.Destroy;
     434begin
     435  inherited;
     436end;
     437
     438function TConstants.Search(Name: string): TConstant;
    460439var
    461440  I: Integer;
     
    476455begin
    477456  inherited;
    478   UsedModules := TUsedModuleList.Create;
     457  UsedModules := TUsedModules.Create;
    479458  UsedModules.ParentModule := Self;
    480459  Body := TCommonBlock.Create;
     
    484463destructor TSourceModule.Destroy;
    485464begin
    486   Body.Free;
    487   UsedModules.Free;
     465  FreeAndNil(Body);
     466  FreeAndNil(UsedModules);
    488467  inherited;
    489468end;
     
    504483constructor TCommonBlock.Create;
    505484begin
    506   Constants := TConstantList.Create;
     485  Constants := TConstants.Create;
    507486  Constants.Parent := Self;
    508   Types := TTypeList.Create;
     487  Types := TTypes.Create;
    509488  Types.Parent := Self;
    510   Variables := TVariableList.Create;
     489  Variables := TVariables.Create;
    511490  Variables.Parent := Self;
    512   Functions := TFunctionList.Create;
     491  Functions := TFunctions.Create;
    513492  Functions.Parent := Self;
    514493  Code := TBeginEnd.Create;
    515494  Code.Parent := Self;
    516495  Code.CommonBlock := Self;
    517   Order := TListObject.Create;
     496  Order := TObjectList<TObject>.Create;
    518497  Order.OwnsObjects := False;
    519498end;
     
    521500destructor TCommonBlock.Destroy;
    522501begin
    523   Constants.Free;
    524   Types.Free;
    525   Variables.Free;
    526   Functions.Free;
    527   Code.Free;
    528   Order.Free;
    529   inherited;
    530 end;
    531 
    532 { TTypeList }
    533 
    534 destructor TTypeList.Destroy;
    535 begin
    536   inherited;
    537 end;
    538 
    539 function TTypeList.Search(Name: string; Exported: Boolean = False): TType;
     502  FreeAndNil(Constants);
     503  FreeAndNil(Types);
     504  FreeAndNil(Variables);
     505  FreeAndNil(Functions);
     506  FreeAndNil(Code);
     507  FreeAndNil(Order);
     508  inherited;
     509end;
     510
     511{ TTypes }
     512
     513destructor TTypes.Destroy;
     514begin
     515  inherited;
     516end;
     517
     518function TTypes.AddNew: TType;
     519begin
     520  Result := TType.Create;
     521  Add(Result);
     522end;
     523
     524function TTypes.Search(Name: string; Exported: Boolean = False): TType;
    540525var
    541526  I: Integer;
     
    557542end;
    558543
    559 { TVariableList }
    560 
    561 destructor TVariableList.Destroy;
    562 begin
    563   inherited;
    564 end;
    565 
    566 function TVariableList.Search(Name: string; Exported: Boolean = False): TVariable;
     544{ TVariables }
     545
     546destructor TVariables.Destroy;
     547begin
     548  inherited;
     549end;
     550
     551function TVariables.Search(Name: string; Exported: Boolean = False): TVariable;
    567552var
    568553  I: Integer;
     
    602587end;
    603588
    604 { TFunctionList }
    605 
    606 destructor TFunctionList.Destroy;
    607 begin
    608   inherited;
    609 end;
    610 
    611 function TFunctionList.Search(Name: string; Exported: Boolean): TFunction;
     589{ TFunctions }
     590
     591destructor TFunctions.Destroy;
     592begin
     593  inherited;
     594end;
     595
     596function TFunctions.AddNew: TFunction;
     597begin
     598  Result := TFunction.Create;
     599  Add(Result);
     600end;
     601
     602function TFunctions.Search(Name: string; Exported: Boolean): TFunction;
    612603var
    613604  I: Integer;
     
    631622constructor TExpression.Create;
    632623begin
    633   SubItems := TListExpression.Create;
     624  SubItems := TExpressions.Create;
    634625  SubItems.Count := 2;
    635626  SubItems.OwnsObjects := False;
     
    638629destructor TExpression.Destroy;
    639630begin
    640   SubItems.Free;
     631  FreeAndNil(SubItems);
    641632  inherited;
    642633end;
     
    654645end;
    655646
    656 { TParameterList }
    657 
    658 destructor TParameterList.Destroy;
    659 begin
    660   inherited;
    661 end;
    662 
    663 function TParameterList.Search(Name: string): TParameter;
     647{ TParameters }
     648
     649destructor TParameters.Destroy;
     650begin
     651  inherited;
     652end;
     653
     654function TParameters.Search(Name: string): TParameter;
    664655var
    665656  I: Integer;
     
    675666procedure TBeginEnd.Clear;
    676667begin
    677 
    678668end;
    679669
     
    681671begin
    682672  inherited;
    683   Commands := TCommandList.Create;
     673  Commands := TCommands.Create;
    684674end;
    685675
    686676destructor TBeginEnd.Destroy;
    687677begin
    688   Commands.Free;
     678  FreeAndNil(Commands);
    689679  inherited;
    690680end;
     
    699689destructor TAssignment.Destroy;
    700690begin
    701   Source.Free;
    702   inherited;
     691  FreeAndNil(Source);
     692  inherited;
     693end;
     694
     695{ TExpressions }
     696
     697procedure TExpressions.Assign(Source: TExpressions);
     698var
     699  I: Integer;
     700begin
     701  while Count > Source.Count do Delete(Count - 1);
     702  while Count < Source.Count do Add(TExpression.Create);
     703  for I := 0 to Count - 1 do
     704    Items[I].Assign(Source[I]);
    703705end;
    704706
     
    713715destructor TWhileDo.Destroy;
    714716begin
    715   Condition.Free;
    716   Command.Free;
     717  FreeAndNil(Condition);
     718  FreeAndNil(Command);
    717719  inherited;
    718720end;
     
    728730destructor TCaseOfEnd.Destroy;
    729731begin
    730   Branches.Free;
     732  FreeAndNil(Branches);
    731733  inherited;
    732734end;
     
    741743destructor TIfThenElse.Destroy;
    742744begin
    743   Condition.Free;
    744   inherited Destroy;
     745  FreeAndNil(Condition);
     746  inherited;
    745747end;
    746748
     
    750752begin
    751753  inherited;
    752   ParameterExpression := TListExpression.Create;
     754  ParameterExpression := TExpressions.Create;
    753755end;
    754756
    755757destructor TFunctionCall.Destroy;
    756758begin
    757   ParameterExpression.Free;
    758   inherited Destroy;
     759  FreeAndNil(ParameterExpression);
     760  inherited;
    759761end;
    760762
     
    770772destructor TForToDo.Destroy;
    771773begin
    772   Start.Free;
    773   Stop.Free;;
    774   inherited Destroy;
     774  FreeAndNil(Start);
     775  FreeAndNil(Stop);
     776  inherited;
    775777end;
    776778
     
    785787destructor TTypeRecord.Destroy;
    786788begin
    787   CommonBlock.Free;
    788   inherited Destroy;
    789 end;
    790 
    791 { TModuleList }
    792 
    793 function TModuleList.Search(Name: string): TSourceModule;
     789  FreeAndNil(CommonBlock);
     790  inherited;
     791end;
     792
     793{ TModules }
     794
     795function TModules.Search(Name: string): TSourceModule;
    794796var
    795797  I: Integer;
     
    820822function TSourceModule.SearchConstant(Name: string; Outside: Boolean): TConstant;
    821823begin
    822 
    823824end;
    824825
     
    864865destructor TModuleProgram.Destroy;
    865866begin
    866   inherited Destroy;
     867  inherited;
    867868end;
    868869
     
    881882destructor TModuleUnit.Destroy;
    882883begin
    883   InititializeSection.Free;
    884   FinalalizeSection.Free;
    885   inherited Destroy;
     884  FreeAndNil(InititializeSection);
     885  FreeAndNil(FinalalizeSection);
     886  inherited;
    886887end;
    887888
     
    891892begin
    892893  inherited;
    893   Items := TListEnumItem.Create;
     894  Items := TEnumItems.Create;
    894895end;
    895896
    896897destructor TTypeEnumeration.Destroy;
    897898begin
    898   Items.Free;
    899   inherited Destroy;
     899  FreeAndNil(Items);
     900  inherited;
    900901end;
    901902
     
    910911destructor TTypeClass.Destroy;
    911912begin
    912   CommonBlock.Free;
    913   inherited Destroy;
     913  FreeAndNil(CommonBlock);
     914  inherited;
    914915end;
    915916
     
    942943constructor TType.Create;
    943944begin
    944   Parameters := TTypeList.Create;
     945  Parameters := TTypes.Create;
    945946  //Parameters.Parent := Parent.Parent;
    946947end;
     
    948949destructor TType.Destroy;
    949950begin
    950   Parameters.Free;
    951   inherited Destroy;
     951  FreeAndNil(Parameters);
     952  inherited;
    952953end;
    953954
  • trunk/Compiler/Producer.pas

    r74 r75  
    1 unit UProducer;
    2 
    3 {$MODE Delphi}
     1unit Producer;
    42
    53interface
    64
    75uses
    8   USourceCodePascal, Classes, SysUtils, StrUtils, SpecializedList, Process,
     6  SourceCodePascal, Classes, SysUtils, StrUtils, Generics.Collections, Process,
    97  FileUtil, Forms;
    108
  • trunk/Compiler/SourceConvertor.pas

    r74 r75  
    1 unit USourceConvertor;
    2 
    3 {$mode delphi}{$H+}
     1unit SourceConvertor;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, SpecializedList;
     6  Classes, SysUtils, Generics.Collections;
    97
    108type
     
    2220
    2321  TSourceText = class(TSource)
    24     Code: TListString;
     22    Code: TStringList;
    2523    constructor Create;
    2624    destructor Destroy; override;
     
    2826
    2927  TSourceList = class
    30     Items: TListObject; // TListObject<TSource>
     28    Items: TObjectList<TSource>;
    3129  end;
    3230
     
    5755procedure TConvertor.Convert(Input, Output: TSourceList);
    5856begin
    59 
    6057end;
    6158
     
    7471constructor TSourceText.Create;
    7572begin
    76   Code := TListString.Create;
     73  Code := TStringList.Create;
    7774end;
    7875
    7976destructor TSourceText.Destroy;
    8077begin
    81   Code.Free;
    82   inherited Destroy;
     78  FreeAndNil(Code);
     79  inherited;
    8380end;
    8481
  • trunk/Compiler/Target.pas

    r74 r75  
    1 unit UTarget;
    2 
    3 {$mode Delphi}{$H+}
     1unit Target;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UProducer, UExecutor, SpecializedList;
     6  Classes, SysUtils, Producer, Executor, Generics.Collections;
    97
    108type
     
    1715    Producer: TProducer;
    1816    Executor: TExecutor;
    19     Compiler: TObject; //TCompiler
     17    Compiler: TObject; // TCompiler
    2018    constructor Create; virtual;
    2119    destructor Destroy; override;
     
    2422  TTargetClass = class of TTarget;
    2523
    26   { TListTarget }
     24  { TTargets }
    2725
    28   TListTarget = class(TListObject)
     26  TTargets = class(TObjectList<TTarget>)
    2927    function SearchBySysName(Name: string): TTarget;
    3028    procedure LoadToStrings(Strings: TStrings);
     
    4341destructor TTarget.Destroy;
    4442begin
    45   Producer.Free;
    46   Executor.Free;
    47   inherited Destroy;
     43  FreeAndNil(Producer);
     44  FreeAndNil(Executor);
     45  inherited;
    4846end;
    4947
    50 { TListTarget }
     48{ TTargets }
    5149
    52 function TListTarget.SearchBySysName(Name: string): TTarget;
     50function TTargets.SearchBySysName(Name: string): TTarget;
    5351var
    5452  I: Integer;
     
    6058end;
    6159
    62 procedure TListTarget.LoadToStrings(Strings: TStrings);
     60procedure TTargets.LoadToStrings(Strings: TStrings);
    6361var
    6462  I: Integer;
  • trunk/Compiler/Target/Dynamic C/ProducerDynamicC.pas

    r74 r75  
    1 unit UProducerDynamicc;
    2 
    3 {$MODE Delphi}
     1unit ProducerDynamicC;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, USourceCodePascal, UProducer, StrUtils;
     7  Dialogs, StdCtrls, SourceCodePascal, Producer, StrUtils;
    108
    119type
     
    1715    function TranslateType(Name: string): string;
    1816    function TranslateOperator(Name: string): string;
    19     procedure GenerateUses(UsedModules: TUsedModuleList);
     17    procedure GenerateUses(UsedModules: TUsedModules);
    2018    procedure GenerateModule(Module: TSourceModule);
    2119    procedure GenerateCommonBlock(CommonBlock: TCommonBlock;
    2220      LabelPrefix: string);
    2321    procedure GenerateType(AType: TType);
    24     procedure GenerateTypes(Types: TTypeList);
     22    procedure GenerateTypes(Types: TTypes);
    2523    procedure GenerateProgram(ProgramBlock: TProgram);
    26     procedure GenerateFunctions(Functions: TFunctionList;
     24    procedure GenerateFunctions(Functions: TFunctions;
    2725      Prefix: string = ''; HeaderOnly: Boolean = False);
    2826    procedure GenerateBeginEnd(BeginEnd: TBeginEnd);
    29     procedure GenerateVariableList(VariableList: TVariableList);
     27    procedure GenerateVariableList(VariableList: TVariables);
    3028    procedure GenerateVariable(Variable: TVariable);
    3129    procedure GenerateCommand(Command: TCommand);
     
    4341  end;
    4442
     43
    4544implementation
    4645
     
    5655destructor TProducerDynamicC.Destroy;
    5756begin
    58   TextSource.Free;
     57  FreeAndNil(TextSource);
    5958  inherited;
    6059end;
     
    8786end;
    8887
    89 procedure TProducerDynamicC.GenerateUses(UsedModules: TUsedModuleList);
     88procedure TProducerDynamicC.GenerateUses(UsedModules: TUsedModules);
    9089var
    9190  I: Integer;
     
    150149end;
    151150
    152 procedure TProducerDynamicC.GenerateFunctions(Functions: TFunctionList;
     151procedure TProducerDynamicC.GenerateFunctions(Functions: TFunctions;
    153152  Prefix: string = ''; HeaderOnly: Boolean = False);
    154153var
     
    197196end;
    198197
    199 procedure TProducerDynamicC.GenerateVariableList(VariableList: TVariableList);
     198procedure TProducerDynamicC.GenerateVariableList(VariableList: TVariables);
    200199var
    201200  I: Integer;
     
    360359end;
    361360
    362 procedure TProducerDynamicC.GenerateTypes(Types: TTypeList);
     361procedure TProducerDynamicC.GenerateTypes(Types: TTypes);
    363362var
    364363  I: Integer;
  • trunk/Compiler/Target/GCC/ProducerGCC.pas

    r74 r75  
    1 unit UProducerGCC;
    2 
    3 {$MODE Delphi}
     1unit ProducerGCC;
    42
    53interface
    64
    75uses
    8   SysUtils, Variants, Classes, Graphics, Controls, Forms,
    9   Dialogs, StdCtrls, USourceCodePascal, UProducer, StrUtils;
     6  SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
     7  SourceCodePascal, Producer, StrUtils;
    108
    119type
     
    1917    procedure Emit(AText: string);
    2018    procedure EmitLn(AText: string = '');
    21     procedure GenerateUses(UsedModules: TUsedModuleList);
     19    procedure GenerateUses(UsedModules: TUsedModules);
    2220    procedure GenerateModule(Module: TSourceModule);
    2321    procedure GenerateCommonBlock(CommonBlock: TCommonBlock;
    2422      LabelPrefix: string);
    2523    procedure GenerateType(AType: TType);
    26     procedure GenerateTypes(Types: TTypeList);
     24    procedure GenerateTypes(Types: TTypes);
    2725    procedure GenerateProgram(ProgramBlock: TProgram);
    28     procedure GenerateFunctions(Functions: TFunctionList;
     26    procedure GenerateFunctions(Functions: TFunctions;
    2927      Prefix: string = '');
    3028    procedure GenerateBeginEnd(BeginEnd: TBeginEnd);
    31     procedure GenerateVariableList(VariableList: TVariableList);
     29    procedure GenerateVariableList(VariableList: TVariables);
    3230    procedure GenerateVariable(Variable: TVariable);
    3331    procedure GenerateCommand(Command: TCommand);
     
    4846  end;
    4947
     48
    5049implementation
    5150
     
    6665destructor TProducerGCCC.Destroy;
    6766begin
    68   TextSource.Free;
     67  FreeAndNil(TextSource);
    6968  inherited;
    7069end;
     
    113112end;
    114113
    115 procedure TProducerGCCC.GenerateUses(UsedModules: TUsedModuleList);
     114procedure TProducerGCCC.GenerateUses(UsedModules: TUsedModules);
    116115var
    117116  I: Integer;
     
    155154end;
    156155
    157 procedure TProducerGCCC.GenerateFunctions(Functions: TFunctionList;
     156procedure TProducerGCCC.GenerateFunctions(Functions: TFunctions;
    158157  Prefix: string = '');
    159158var
     
    202201end;
    203202
    204 procedure TProducerGCCC.GenerateVariableList(VariableList: TVariableList);
     203procedure TProducerGCCC.GenerateVariableList(VariableList: TVariables);
    205204var
    206205  I: Integer;
     
    361360end;
    362361
    363 procedure TProducerGCCC.GenerateTypes(Types: TTypeList);
     362procedure TProducerGCCC.GenerateTypes(Types: TTypes);
    364363var
    365364  I: Integer;
  • trunk/Compiler/Target/Java/TargetJava.pas

    r74 r75  
    1 unit UTargetJava;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetJava;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget;
     6  Classes, SysUtils, Target;
    97
    108type
     
    2220constructor TTargetJava.Create;
    2321begin
    24   inherited Create;
     22  inherited;
    2523  SysName := 'Java';
    2624  Name := 'Java';
  • trunk/Compiler/Target/NASM/TargetNASM.pas

    r74 r75  
    1 unit UTargetNASM;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetNASM;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget;
     6  Classes, SysUtils, Target;
    97
    108type
     
    2321constructor TTargetNASM.Create;
    2422begin
    25   inherited Create;
     23  inherited;
    2624  Name := 'NASM';
    2725  SysName := 'NASM';
  • trunk/Compiler/Target/PHP/TargetPHP.pas

    r74 r75  
    1 unit UTargetPHP;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetPHP;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget;
     6  Classes, SysUtils, Target;
    97
    108type
     
    1614  end;
    1715
     16
    1817implementation
    1918
     
    2221constructor TTargetPHP.Create;
    2322begin
    24   inherited Create;
     23  inherited;
    2524  SysName := 'PHP';
    2625  Name := 'PHP';
  • trunk/Compiler/Target/XML/TargetXML.pas

    r74 r75  
    1 unit UTargetXML;
    2 
    3 {$mode Delphi}{$H+}
     1unit TargetXML;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UTarget, UProducer, USourceCodePascal;
     6  Classes, SysUtils, Target, Producer, SourceCodePascal;
    97
    108type
     
    9189constructor TTargetXML.Create;
    9290begin
    93   inherited Create;
     91  inherited;
    9492  SysName := 'XML';
    9593  Name := 'XML';
  • trunk/Compiler/TranspascalCompiler.lpk

    r74 r75  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    3   <Package Version="4">
     3  <Package Version="5">
    44    <PathDelim Value="\"/>
    55    <Name Value="TranspascalCompiler"/>
     
    2525    </CompilerOptions>
    2626    <Version Minor="1"/>
    27     <Files Count="27">
     27    <Files Count="28">
    2828      <Item1>
    29         <Filename Value="UCompiler.pas"/>
    30         <UnitName Value="UCompiler"/>
     29        <Filename Value="Compiler.pas"/>
     30        <UnitName Value="Compiler"/>
    3131      </Item1>
    3232      <Item2>
    33         <Filename Value="Modules\Pascal\USourceCodePascal.pas"/>
    34         <UnitName Value="USourceCodePascal"/>
     33        <Filename Value="Modules\Pascal\SourceCodePascal.pas"/>
     34        <UnitName Value="SourceCodePascal"/>
    3535      </Item2>
    3636      <Item3>
    37         <Filename Value="UProducer.pas"/>
    38         <UnitName Value="UProducer"/>
     37        <Filename Value="Producer.pas"/>
     38        <UnitName Value="Producer"/>
    3939      </Item3>
    4040      <Item4>
    41         <Filename Value="UAnalyzer.pas"/>
    42         <UnitName Value="UAnalyzer"/>
     41        <Filename Value="Analyzer.pas"/>
     42        <UnitName Value="Analyzer"/>
    4343      </Item4>
    4444      <Item5>
    45         <Filename Value="UTarget.pas"/>
    46         <UnitName Value="UTarget"/>
     45        <Filename Value="Target.pas"/>
     46        <UnitName Value="Target"/>
    4747      </Item5>
    4848      <Item6>
    49         <Filename Value="UExecutor.pas"/>
    50         <UnitName Value="UExecutor"/>
     49        <Filename Value="Executor.pas"/>
     50        <UnitName Value="Executor"/>
    5151      </Item6>
    5252      <Item7>
    53         <Filename Value="Modules\Pascal\UAnalyzerPascal.pas"/>
    54         <UnitName Value="UAnalyzerPascal"/>
     53        <Filename Value="Modules\Pascal\AnalyzerPascal.pas"/>
     54        <UnitName Value="AnalyzerPascal"/>
    5555      </Item7>
    5656      <Item8>
    57         <Filename Value="Target\Dynamic C\UProducerDynamicc.pas"/>
    58         <UnitName Value="UProducerDynamicC"/>
     57        <Filename Value="Target\Dynamic C\ProducerDynamicC.pas"/>
     58        <UnitName Value="ProducerDynamicC"/>
    5959      </Item8>
    6060      <Item9>
    61         <Filename Value="Modules\ASM8051\UProducerASM8051.pas"/>
    62         <UnitName Value="UProducerAsm8051"/>
     61        <Filename Value="Modules\ASM8051\ProducerASM8051.pas"/>
     62        <UnitName Value="ProducerASM8051"/>
    6363      </Item9>
    6464      <Item10>
    65         <Filename Value="Modules\ASM8051\UTargetASM8051.pas"/>
    66         <UnitName Value="UTargetASM8051"/>
     65        <Filename Value="Modules\ASM8051\TargetASM8051.pas"/>
     66        <UnitName Value="TargetASM8051"/>
    6767      </Item10>
    6868      <Item11>
    69         <Filename Value="Modules\GCC\UTargetGCC.pas"/>
    70         <UnitName Value="UTargetGCC"/>
     69        <Filename Value="Modules\GCC\TargetGCC.pas"/>
     70        <UnitName Value="TargetGCC"/>
    7171      </Item11>
    7272      <Item12>
    73         <Filename Value="Modules\GCC\UProducerGCC.pas"/>
    74         <UnitName Value="UProducerGCC"/>
     73        <Filename Value="Modules\GCC\ProducerGCC.pas"/>
     74        <UnitName Value="ProducerGCC"/>
    7575      </Item12>
    7676      <Item13>
    77         <Filename Value="Modules\Delphi\UProducerDelphi.pas"/>
    78         <UnitName Value="UProducerDelphi"/>
     77        <Filename Value="Modules\Delphi\ProducerDelphi.pas"/>
     78        <UnitName Value="ProducerDelphi"/>
    7979      </Item13>
    8080      <Item14>
    81         <Filename Value="Modules\Delphi\UModuleDelphi.pas"/>
    82         <UnitName Value="UModuleDelphi"/>
     81        <Filename Value="Modules\Delphi\ModuleDelphi.pas"/>
     82        <UnitName Value="ModuleDelphi"/>
    8383      </Item14>
    8484      <Item15>
    85         <Filename Value="Target\PHP\UTargetPHP.pas"/>
    86         <UnitName Value="UTargetPHP"/>
     85        <Filename Value="Target\PHP\TargetPHP.pas"/>
     86        <UnitName Value="TargetPHP"/>
    8787      </Item15>
    8888      <Item16>
    89         <Filename Value="Target\Java\UTargetJava.pas"/>
    90         <UnitName Value="UTargetJava"/>
     89        <Filename Value="Target\Java\TargetJava.pas"/>
     90        <UnitName Value="TargetJava"/>
    9191      </Item16>
    9292      <Item17>
    93         <Filename Value="Target\XML\UTargetXML.pas"/>
    94         <UnitName Value="UTargetXML"/>
     93        <Filename Value="Target\XML\TargetXML.pas"/>
     94        <UnitName Value="TargetXML"/>
    9595      </Item17>
    9696      <Item18>
    97         <Filename Value="Modules\Interpretter\UModuleInterpretter.pas"/>
    98         <UnitName Value="UModuleInterpretter"/>
     97        <Filename Value="Modules\Interpretter\ModuleInterpretter.pas"/>
     98        <UnitName Value="ModuleInterpretter"/>
    9999      </Item18>
    100100      <Item19>
    101         <Filename Value="Target\NASM\UTargetNASM.pas"/>
    102         <UnitName Value="UTargetNASM"/>
     101        <Filename Value="Target\NASM\TargetNASM.pas"/>
     102        <UnitName Value="TargetNASM"/>
    103103      </Item19>
    104104      <Item20>
    105         <Filename Value="Modules\Pascal\UModulePascal.pas"/>
    106         <UnitName Value="UModulePascal"/>
     105        <Filename Value="Modules\Pascal\ModulePascal.pas"/>
     106        <UnitName Value="ModulePascal"/>
    107107      </Item20>
    108108      <Item21>
    109         <Filename Value="UCompilerAPI.pas"/>
    110         <UnitName Value="UCompilerAPI"/>
     109        <Filename Value="CompilerAPI.pas"/>
     110        <UnitName Value="CompilerAPI"/>
    111111      </Item21>
    112112      <Item22>
    113         <Filename Value="Modules\GCC\UModuleGCC.pas"/>
    114         <UnitName Value="UModuleGCC"/>
     113        <Filename Value="Modules\GCC\ModuleGCC.pas"/>
     114        <UnitName Value="ModuleGCC"/>
    115115      </Item22>
    116116      <Item23>
    117         <Filename Value="USourceConvertor.pas"/>
    118         <UnitName Value="USourceConvertor"/>
     117        <Filename Value="SourceConvertor.pas"/>
     118        <UnitName Value="SourceConvertor"/>
    119119      </Item23>
    120120      <Item24>
    121         <Filename Value="Modules\Brainfuck\UModuleBrainfuck.pas"/>
    122         <UnitName Value="UModuleBrainfuck"/>
     121        <Filename Value="Modules\Brainfuck\ModuleBrainfuck.pas"/>
     122        <UnitName Value="ModuleBrainfuck"/>
    123123      </Item24>
    124124      <Item25>
    125         <Filename Value="Modules\PHP\UModulePHP.pas"/>
    126         <UnitName Value="UModulePHP"/>
     125        <Filename Value="Modules\PHP\ModulePHP.pas"/>
     126        <UnitName Value="ModulePHP"/>
    127127      </Item25>
    128128      <Item26>
    129         <Filename Value="Modules\Java\UModuleJava.pas"/>
    130         <UnitName Value="UModuleJava"/>
     129        <Filename Value="Modules\Java\ModuleJava.pas"/>
     130        <UnitName Value="ModuleJava"/>
    131131      </Item26>
    132132      <Item27>
    133         <Filename Value="Modules\ASM8051\UModuleASM8051.pas"/>
    134         <UnitName Value="UModuleASM8051"/>
     133        <Filename Value="Modules\ASM8051\ModuleASM8051.pas"/>
     134        <UnitName Value="ModuleASM8051"/>
    135135      </Item27>
     136      <Item28>
     137        <Filename Value="Target\GCC\ProducerGCC.pas"/>
     138        <UnitName Value="ProducerGCC"/>
     139      </Item28>
    136140    </Files>
    137     <RequiredPkgs Count="4">
     141    <CompatibilityMode Value="True"/>
     142    <RequiredPkgs Count="3">
    138143      <Item1>
    139144        <PackageName Value="ModularSystem"/>
     
    141146      </Item1>
    142147      <Item2>
    143         <PackageName Value="TemplateGenerics"/>
     148        <PackageName Value="LCL"/>
    144149      </Item2>
    145150      <Item3>
    146         <PackageName Value="LCL"/>
    147       </Item3>
    148       <Item4>
    149151        <PackageName Value="FCL"/>
    150152        <MinVersion Major="1" Valid="True"/>
    151       </Item4>
     153      </Item3>
    152154    </RequiredPkgs>
    153155    <UsageOptions>
  • trunk/Compiler/TranspascalCompiler.pas

    r74 r75  
    99
    1010uses
    11   UCompiler, USourceCodePascal, UProducer, UAnalyzer, UTarget, UExecutor,
    12   UAnalyzerPascal, UProducerDynamicc, UProducerASM8051, UTargetASM8051,
    13   UTargetGCC, UProducerGCC, UProducerDelphi, UModuleDelphi, UTargetPHP,
    14   UTargetJava, UTargetXML, UModuleInterpretter, UTargetNASM, UModulePascal,
    15   UCompilerAPI, UModuleGCC, USourceConvertor, UModuleBrainfuck, UModulePHP,
    16   UModuleJava, UModuleASM8051, LazarusPackageIntf;
     11  Compiler, SourceCodePascal, Producer, Analyzer, Target, Executor,
     12  AnalyzerPascal, ProducerDynamicC, ProducerASM8051, TargetASM8051, TargetGCC,
     13  ProducerGCC, ProducerDelphi, ModuleDelphi, TargetPHP, TargetJava, TargetXML,
     14  ModuleInterpretter, TargetNASM, ModulePascal, CompilerAPI, ModuleGCC,
     15  SourceConvertor, ModuleBrainfuck, ModulePHP, ModuleJava, ModuleASM8051,
     16  LazarusPackageIntf;
    1717
    1818implementation
  • trunk/IDE/Core.lfm

    r74 r75  
    33  OnDestroy = DataModuleDestroy
    44  OldCreateOrder = False
    5   Height = 381
    6   HorizontalOffset = 652
    7   VerticalOffset = 519
    8   Width = 466
     5  Height = 572
     6  HorizontalOffset = 978
     7  VerticalOffset = 779
     8  Width = 699
     9  PPI = 144
    910  object LastOpenedFiles: TLastOpenedList
    1011    MaxCount = 10
    1112    OnChange = LastOpenedFilesChange
    12     left = 48
    13     top = 24
     13    Left = 72
     14    Top = 36
    1415  end
    15   object CoolTranslator1: TCoolTranslator
     16  object Translator1: TTranslator
    1617    POFilesFolder = 'Languages'
    17     left = 48
    18     top = 80
     18    Left = 72
     19    Top = 120
    1920  end
    2021  object DebugLog1: TDebugLog
     
    2223    FileName = 'DebugLog.txt'
    2324    MaxCount = 100
    24     left = 48
    25     top = 136
     25    Left = 72
     26    Top = 204
    2627  end
    2728  object ApplicationInfo: TApplicationInfo
     
    4041    RegistryKey = '\Software\Chronosoft\Transpascal'
    4142    RegistryRoot = rrKeyCurrentUser
    42     left = 48
    43     top = 200
     43    Left = 72
     44    Top = 300
    4445  end
    4546  object ModuleManager1: TModuleManager
    4647    Options = []
    47     left = 242
    48     top = 98
     48    Left = 363
     49    Top = 147
    4950  end
    5051end
  • trunk/IDE/Core.pas

    r74 r75  
    1 unit UCore;
    2 
    3 {$mode delphi}
     1unit Core;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, ULastOpenedList, UProject, UApplicationInfo,
    9   UCompiler, URegistry, Registry, UDebugLog, UCoolTranslator, UTarget,
    10   USourceCodePascal, UModularSystem;
     6  Classes, SysUtils, FileUtil, LastOpenedList, Project, ApplicationInfo,
     7  Compiler, Registry, RegistryEx, DebugLog, Translator, Target,
     8  SourceCodePascal, ModularSystem;
    119
    1210type
     
    3230  TCore = class(TDataModule)
    3331    ApplicationInfo: TApplicationInfo;
    34     CoolTranslator1: TCoolTranslator;
     32    Translator1: TTranslator;
    3533    DebugLog1: TDebugLog;
    3634    LastOpenedFiles: TLastOpenedList;
     
    4745    LogParsing: Boolean;
    4846    Project: TProject;
    49     ProjectTemplates: TProjectTemplateList;
     47    ProjectTemplates: TProjectTemplates;
    5048    TargetProject: TProject;
    5149    Compiler: TCustomCompiler;
     
    6967
    7068uses
    71   UFormMain, UProjectTemplates, UIDEModulePascal, UModulePascal, UModuleGCC,
    72   UModuleInterpretter, UModuleDelphi, UModulePHP, UModuleJava, UModuleASM8051;
     69  FormMain, ProjectTemplates, IDEModulePascal, ModulePascal, ModuleGCC,
     70  ModuleInterpretter, ModuleDelphi, ModulePHP, ModuleJava, ModuleASM8051;
    7371
    7472{ TCore }
     
    7977  Project.LoadFromFile(FileName);
    8078  LastOpenedFiles.AddItem(FileName);
    81   FormMain.UpdateInterface;
     79  FormMain.FormMain.UpdateInterface;
    8280end;
    8381
     
    102100  //Compiler.OnSaveTarget := SaveSourceFile;
    103101  Project := TProject.Create;
    104   ProjectTemplates := TProjectTemplateList.Create;
     102  ProjectTemplates := TProjectTemplates.Create;
    105103  TargetProject := TProject.Create;
    106104  LastOpenedFiles := TLastOpenedList.Create(nil);
     
    136134procedure TCore.LastOpenedFilesChange(Sender: TObject);
    137135begin
    138   LastOpenedFiles.LoadToMenuItem(FormMain.MenuItemOpenRecent,
    139     FormMain.OpenRecentClick);
    140   LastOpenedFiles.LoadToMenuItem(FormMain.PopupMenu1.Items,
    141     FormMain.OpenRecentClick);
     136  LastOpenedFiles.LoadToMenuItem(FormMain.FormMain.MenuItemOpenRecent,
     137    FormMain.FormMain.OpenRecentClick);
     138  LastOpenedFiles.LoadToMenuItem(FormMain.FormMain.PopupMenu1.Items,
     139    FormMain.FormMain.OpenRecentClick);
    142140end;
    143141
    144142procedure TCore.ProjectChange(Sender: TObject);
    145143begin
    146   FormMain.UpdateInterface;
     144  FormMain.FormMain.UpdateInterface;
    147145end;
    148146
    149147function TCore.LoadSourceFile(FileName: string; var Content: string): Boolean;
    150148begin
    151 
    152149end;
    153150
    154151function TCore.SaveSourceFile(FileName: string; const Content: string): Boolean;
    155152begin
    156 
    157153end;
    158154
     
    173169        else LogParsing := False;
    174170      if ValueExists('LanguageCode') then
    175         CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode(ReadString('LanguageCode'))
    176         else CoolTranslator1.Language := CoolTranslator1.Languages.SearchByCode('');
     171        Translator1.Language := Translator1.Languages.SearchByCode(ReadString('LanguageCode'))
     172        else Translator1.Language := Translator1.Languages.SearchByCode('');
    177173    finally
    178174      Free;
    179175    end;
    180   LastOpenedFiles.LoadFromRegistry(RegContext(Root, Key + '\LastOpenedFiles')); //Root, Key + '\LastOpenedFiles');
     176  LastOpenedFiles.LoadFromRegistry(TRegistryContext.Create(Root, Key + '\LastOpenedFiles')); //Root, Key + '\LastOpenedFiles');
    181177  Compiler.LoadFromRegistry(Root, Key + '\Compiler');
    182   FormMain.LoadFromRegistry(Root, Key);
     178  FormMain.FormMain.LoadFromRegistry(Root, Key);
    183179end;
    184180
     
    194190        else WriteString('TargetName', '');
    195191      WriteBool('LogParsing', LogParsing);
    196       if Assigned(CoolTranslator1.Language) and (CoolTranslator1.Language.Code <> '') then
    197         WriteString('LanguageCode', CoolTranslator1.Language.Code)
     192      if Assigned(Translator1.Language) and (Translator1.Language.Code <> '') then
     193        WriteString('LanguageCode', Translator1.Language.Code)
    198194        else WriteString('LanguageCode', '');
    199195    finally
    200196      Free;
    201197    end;
    202   LastOpenedFiles.SaveToRegistry(RegContext(Root, Key + '\LastOpenedFiles'));
     198  LastOpenedFiles.SaveToRegistry(TRegistryContext.Create(Root, Key + '\LastOpenedFiles'));
    203199  Compiler.SaveToRegistry(Root, Key + '\Compiler');
    204   FormMain.SaveToRegistry(Root, Key);
     200  FormMain.FormMain.SaveToRegistry(Root, Key);
    205201end;
    206202
     
    237233    Name := 'System';
    238234    Internal := True;
    239     with TType(Body.Types.AddNew(TType.Create)) do begin
     235    with Body.Types.AddNew do begin
    240236      Name := 'Byte';
    241237      Size := 1;
    242238      Internal := True;
    243239    end;
    244     with TType(Body.Types.AddNew(TType.Create)) do begin
     240    with Body.Types.AddNew do begin
    245241      Name := 'ShortInt';
    246242      Size := 1;
    247243      Internal := True;
    248244    end;
    249     with TType(Body.Types.AddNew(TType.Create)) do begin
     245    with Body.Types.AddNew do begin
    250246      Name := 'Word';
    251247      Size := 2;
    252248      Internal := True;
    253249    end;
    254     with TType(Body.Types.AddNew(TType.Create)) do begin
     250    with Body.Types.AddNew do begin
    255251      Name := 'SmallInt';
    256252      Size := 2;
    257253      Internal := True;
    258254    end;
    259     with TType(Body.Types.AddNew(TType.Create)) do begin
     255    with Body.Types.AddNew do begin
    260256      Name := 'Cardinal';
    261257      Size := 4;
    262258      Internal := True;
    263259    end;
    264     with TType(Body.Types.AddNew(TType.Create)) do begin
     260    with Body.Types.AddNew do begin
    265261      Name := 'Integer';
    266262      Size := 4;
    267263      Internal := True;
    268264    end;
    269     with TType(Body.Types.AddNew(TType.Create)) do begin
     265    with Body.Types.AddNew do begin
    270266      Name := 'UInt64';
    271267      Size := 8;
    272268      Internal := True;
    273269    end;
    274     with TType(Body.Types.AddNew(TType.Create)) do begin
     270    with Body.Types.AddNew do begin
    275271      Name := 'Int64';
    276272      Size := 8;
    277273      Internal := True;
    278274    end;
    279     with TFunction(Body.Functions.AddNew(TFunction.Create)) do begin
     275    with Body.Functions.AddNew do begin
    280276      Name := 'WriteLn';
    281277      Internal := True;
  • trunk/IDE/Forms/FormCodeTree.pas

    r74 r75  
    1 unit UFormCodeTree;
    2 
    3 {$mode Delphi}{$H+}
     1unit FormCodeTree;
    42
    53interface
     
    2018  end;
    2119
    22 var
    23   FormCodeTree: TFormCodeTree;
    2420
    2521implementation
  • trunk/IDE/Forms/FormExternalProducerOutput.pas

    r74 r75  
    1 unit UFormExternalProducerOutput;
    2 
    3 {$mode delphi}
     1unit FormExternalProducerOutput;
    42
    53interface
     
    2018  end;
    2119
    22 var
    23   FormExternalProducerOutput: TFormExternalProducerOutput;
    2420
    2521implementation
  • trunk/IDE/Forms/FormMain.lfm

    r74 r75  
    11object FormMain: TFormMain
    22  Left = 799
    3   Height = 501
     3  Height = 752
    44  Top = 435
    5   Width = 695
     5  Width = 1042
    66  Caption = 'Transpascal IDE'
    7   ClientHeight = 467
    8   ClientWidth = 695
    9   Font.Height = -11
     7  ClientHeight = 752
     8  ClientWidth = 1042
     9  DesignTimePPI = 144
     10  Font.Height = -17
    1011  Font.Name = 'Tahoma'
    1112  Menu = MainMenu
     
    1516  OnShow = FormShow
    1617  Position = poDesktopCenter
    17   LCLVersion = '1.8.0.4'
     18  LCLVersion = '3.2.0.0'
    1819  object Splitter3: TSplitter
    1920    Cursor = crVSplit
    2021    Left = 0
    21     Height = 5
    22     Top = 462
    23     Width = 695
     22    Height = 8
     23    Top = 744
     24    Width = 1042
    2425    Align = alBottom
    2526    ResizeAnchor = akBottom
     
    2728  object ToolBar1: TToolBar
    2829    Left = 0
    29     Height = 26
     30    Height = 39
    3031    Top = 0
    31     Width = 695
     32    Width = 1042
    3233    Images = ImageList1
    3334    ParentShowHint = False
     
    4041    end
    4142    object ToolButton2: TToolButton
    42       Left = 24
     43      Left = 36
    4344      Top = 2
    4445      Action = AProjectOpen
     
    4748    end
    4849    object ToolButton3: TToolButton
    49       Left = 59
     50      Left = 89
    5051      Top = 2
    5152      Action = AProjectSave
    5253    end
    5354    object ToolButton4: TToolButton
    54       Left = 82
     55      Left = 124
    5556      Top = 2
    5657      Action = AProjectClose
    5758    end
    5859    object ToolButton5: TToolButton
    59       Left = 105
    60       Height = 22
     60      Left = 159
     61      Height = 33
    6162      Top = 2
    6263      Style = tbsSeparator
    6364    end
    6465    object ToolButton6: TToolButton
    65       Left = 113
     66      Left = 167
    6667      Top = 2
    6768      Action = AViewOptions
    6869    end
    6970    object ToolButton7: TToolButton
    70       Left = 136
     71      Left = 202
    7172      Top = 2
    7273      Action = ABuild
    7374    end
    7475    object ToolButton8: TToolButton
    75       Left = 159
     76      Left = 237
    7677      Top = 2
    7778      Action = ARun
    7879    end
    7980    object ToolButton9: TToolButton
    80       Left = 182
     81      Left = 272
    8182      Top = 2
    8283      Action = APause
    8384    end
    8485    object ToolButton10: TToolButton
    85       Left = 205
     86      Left = 307
    8687      Top = 2
    8788      Action = AStop
    8889    end
    8990    object ComboBoxTarget: TComboBox
    90       Left = 228
     91      Left = 342
    9192      Height = 40
    9293      Top = 2
    93       Width = 100
     94      Width = 150
    9495      ItemHeight = 0
    95       OnChange = ComboBoxTargetChange
    9696      Style = csDropDownList
    9797      TabOrder = 0
     98      OnChange = ComboBoxTargetChange
    9899    end
    99100    object ToolButton11: TToolButton
    100       Left = 328
     101      Left = 492
    101102      Top = 2
    102103      Action = AViewTargets
     
    104105  end
    105106  object Splitter1: TSplitter
    106     Left = 490
    107     Height = 330
    108     Top = 26
    109     Width = 5
     107    Left = 734
     108    Height = 545
     109    Top = 39
     110    Width = 8
    110111    Align = alRight
    111112    ResizeAnchor = akRight
    112113  end
    113114  object PageControlRight: TPageControl
    114     Left = 495
    115     Height = 330
    116     Top = 26
    117     Width = 200
     115    Left = 742
     116    Height = 545
     117    Top = 39
     118    Width = 300
    118119    ActivePage = TabSheetExternalProducer
    119120    Align = alRight
     
    136137  object PageControlBottom: TPageControl
    137138    Left = 0
    138     Height = 101
    139     Top = 361
    140     Width = 695
     139    Height = 152
     140    Top = 592
     141    Width = 1042
    141142    ActivePage = TabSheetMessages
    142143    Align = alBottom
     
    154155    Cursor = crVSplit
    155156    Left = 0
    156     Height = 5
    157     Top = 356
    158     Width = 695
     157    Height = 8
     158    Top = 584
     159    Width = 1042
    159160    Align = alBottom
    160161    ResizeAnchor = akBottom
     
    162163  object PageControlMain: TPageControl
    163164    Left = 0
    164     Height = 330
    165     Top = 26
    166     Width = 490
    167     ActivePage = TabSheetSource
     165    Height = 545
     166    Top = 39
     167    Width = 734
     168    ActivePage = TabSheetTarget
    168169    Align = alClient
    169     TabIndex = 0
     170    TabIndex = 1
    170171    TabOrder = 6
    171172    object TabSheetSource: TTabSheet
     
    178179  object MainMenu: TMainMenu
    179180    Images = ImageList1
    180     left = 115
    181     top = 160
     181    Left = 173
     182    Top = 240
    182183    object MenuItem1: TMenuItem
    183184      Caption = 'Project'
     
    288289  object ActionList1: TActionList
    289290    Images = ImageList1
    290     left = 112
    291     top = 216
     291    Left = 168
     292    Top = 324
    292293    object AProjectNew: TAction
    293294      Category = 'Project'
     
    448449    DefaultExt = '.tppr'
    449450    Filter = 'Project file (*.tppr)|*.tppr|Any file (*.*)|*.*'
    450     left = 115
    451     top = 54
     451    Left = 173
     452    Top = 81
    452453  end
    453454  object SaveDialogProject: TSaveDialog
    454455    DefaultExt = '.tppr'
    455456    Filter = 'Project file (*.tppr)|*.tppr|Any file (*.*)|*.*'
    456     left = 115
    457     top = 104
     457    Left = 173
     458    Top = 156
    458459  end
    459460  object ImageList1: TImageList
    460     left = 112
    461     top = 272
     461    Left = 168
     462    Top = 408
    462463    Bitmap = {
    463       4C690F0000001000000010000000000000000000000000000000000000000000
    464       0000000000000000000000000000000000000000000000000000000000000000
    465       0000000000000000000000000000000000000000000000000000000000000000
    466       0000000000000000000000000000000000000000000000000000000000000000
    467       0000000000000000000000000000000000000000000000000000000000000000
    468       0000000000000000000000000000000000000000000000000000000000000000
    469       0000000000000000000000000000000000000000000000000000000000000000
    470       0000000000000000000000000000000000000000000000000000000000000000
    471       0000000000000000000000000000000000000000000000000000000000000000
    472       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    473       0000000000000000000000000000000000000000000000000000000000000000
    474       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    475       0000000000000000000000000000000000000000000000000000000000000000
    476       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    477       0000000000000000000000000000000000000000000000000000000000000000
    478       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    479       0000000000000000000000000000000000000000000000000000000000000000
    480       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    481       0000000000000000000000000000000000000000000000000000000000000000
    482       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    483       0000000000000000000000000000000000000000000000000000000000000000
    484       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    485       0000000000000000000000000000000000000000000000000000000000000000
    486       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    487       0000000000000000000000000000000000000000000000000000000000000000
    488       0000000000000000000000000000000000000000000000000000000000000000
    489       0000000000000000000000000000000000000000000000000000000000000000
    490       0000000000000000000000000000000000000000000000000000000000000000
    491       0000000000000000000000000000000000000000000000000000000000000000
    492       0000000000000000000000000000000000000000000000000000000000000000
    493       0000000000000000000000000000000000000000000000000000000000000000
    494       0000000000000000000000000000000000000000000000000000000000000000
    495       0000000000000000000000000000000000000000000000000000000000000000
    496       0000000000000000000000000000000000000000000000000000000000000000
    497       0000000000000000000000000000000000000000000000000000000000000000
    498       00000000000000000000000000FF000000FF0000000000000000000000000000
    499       0000000000000000000000000000000000000000000000000000000000000000
    500       0000000000FF000000FF800080FF800080FF000000FF00000000000000000000
    501       0000000000000000000000000000000000000000000000000000000000FF0000
    502       00FF800080FF800080FF800080FF800080FF800080FF000000FF000000000000
    503       000000000000000000000000000000000000000000FF000000FF800080FF8000
    504       80FF800080FF800080FF800080FF800080FF800080FF800080FF000000FF0000
    505       0000000000000000000000000000000000FFC0C0C0FF800080FF800080FF8000
    506       80FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF0000
    507       00FF000000000000000000000000000000FF800080FFC0C0C0FF800080FF8000
    508       80FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF8000
    509       80FF000000FF0000000000000000000000FF800080FF800080FFC0C0C0FF8000
    510       80FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF8000
    511       80FF800080FF000000FF00000000000000FF800080FF800080FF800080FFC0C0
    512       C0FF800080FF800080FF800080FF800080FF800080FF800080FF800080FF8000
    513       80FF800080FF000000FF000000FF000000FF800080FF800080FF800080FF8000
    514       80FFC0C0C0FF800080FF800080FF800080FF800080FF800080FF800080FF0000
    515       00FF000000FF808080FF0000000000000000000000FF800080FF800080FF8000
    516       80FF800080FFC0C0C0FF800080FF800080FF800080FF000000FF000000FF8080
    517       80FFFFFFFFFF808080FF000000000000000000000000000000FF800080FF8000
    518       80FF800080FF800080FFC0C0C0FF000000FF000000FF808080FFC0C0C0FFFFFF
    519       FFFFC0C0C0FF000000FF000000FF000000000000000000000000000000FF8000
    520       80FF800080FF800080FF000000FF808080FFFFFFFFFFC0C0C0FFFFFFFFFFC0C0
    521       C0FF000000FF000000FF00000000000000000000000000000000000000000000
    522       00FF800080FF800080FF000000FFFFFFFFFFC0C0C0FFFFFFFFFF000000FF0000
    523       00FF000000000000000000000000000000000000000000000000000000000000
    524       0000000000FF800080FF000000FF808080FF000000FF000000FF000000000000
    525       0000000000000000000000000000000000000000000000000000000000000000
    526       000000000000000000FF000000FF000000FF0000000000000000000000000000
    527       0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    528       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    529       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    530       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    531       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000A4000000A6000000
    532       A9200000AA7E0000AAB20000AAC80000AAB20000AA7E0000A9200000A6000000
    533       A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000A4000000A6410A0A
    534       AEC13F3FD5E76060EDF86A6AF3FE6060ECF83E3ED4E70A0AADC10000A6410000
    535       A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000A3200A0AABC15555
    536       E3F35A5AE2FF5656DEFF5656DEFF5656DEFF5959E1FF5050DEF30909AAC10000
    537       A320FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000009E7E3939CCE64A4A
    538       D2FF4545CDFF4545CDFF4545CDFF4545CDFF4545CDFF4848D0FF3131C3E60000
    539       9E7EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000009AB24A4AD4F83737
    540       BFFF3737BFFF3131BAFF2727B0FF1C1CA6FF1616A0FF12129CFF2323AEF80000
    541       9AB2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000095C84848D0FE2E2E
    542       B8FF1D1DADFF1212A5FF1111A4FF1111A4FF1111A4FF1111A4FF1B1BADFE0000
    543       95C8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000008FB23434C3F81414
    544       B2FF1111B1FF1111B1FF1111B1FF1111B1FF1111B1FF1111B1FF1414B0F80000
    545       8FB2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000897E1818AFE61414
    546       C1FF1111BFFF1111BFFF1111BFFF1111BFFF1111BFFF1111BFFF0A0AA6E60000
    547       897EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000008420030389C11515
    548       BFF31212CDFF1111CCFF1111CCFF1111CCFF1111CCFF0E0EBCF3020288C10000
    549       8420FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000008100000078410202
    550       7DC10A0AA8E70F0FCAF81111D5FE0F0FCAF80A0AA8E702027DC1000078410000
    551       8100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000008100000075000000
    552       64200000607E000060B2000060C8000060B20000607E00006420000075000000
    553       8100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    554       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    555       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    556       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    557       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    558       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    559       FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
    560       0000000000000000000000000000000000000000000000000000000000000000
    561       0000000000000000000000000000000000000000000000000000000000000000
    562       0000000000000000000000000000000000000000000000000000000000000000
    563       000000000000000000000000000000000000000000001818C0FF1818C0FFC0C0
    564       C0FF000000000000000000000000000000000000000000000000000000000000
    565       00001818C0FF1818C0FFC0C0C0FF00000000000000002020C8FF2020C8FF2020
    566       C8FF2020C8FFC0C0C0FF00000000000000000000000000000000000000002020
    567       C8FF2020C8FFC0C0C0FF000000000000000000000000000000002626CEFF2626
    568       CEFF2626CEFF2626CEFFC0C0C0FF0000000000000000000000002626CEFF2626
    569       CEFFC0C0C0FF0000000000000000000000000000000000000000000000000000
    570       00002929D1FF2929D1FF2929D1FFC0C0C0FF000000002929D1FFC0C0C0FF0000
    571       0000000000000000000000000000000000000000000000000000000000000000
    572       0000000000002C2CD4FF2C2CD4FF2C2CD4FF2C2CD4FF2C2CD4FFC0C0C0FF0000
    573       0000000000000000000000000000000000000000000000000000000000000000
    574       000000000000000000002F2FD7FF2F2FD7FF2F2FD7FFC0C0C0FF000000000000
    575       0000000000000000000000000000000000000000000000000000000000000000
    576       0000000000003232DAFF3232DAFF3232DAFF3232DAFF3232DAFFC0C0C0FF0000
    577       0000000000000000000000000000000000000000000000000000000000000000
    578       00003535DDFF3535DDFF3535DDFFC0C0C0FF000000003535DDFF3535DDFFC0C0
    579       C0FF000000000000000000000000000000000000000000000000000000003838
    580       E0FF3838E0FF3838E0FFC0C0C0FF0000000000000000000000003838E0FF3838
    581       E0FFC0C0C0FF00000000000000000000000000000000000000003A3AE2FF3A3A
    582       E2FF3A3AE2FFC0C0C0FF00000000000000000000000000000000000000003A3A
    583       E2FFC0C0C0FF00000000000000000000000000000000000000003A3AE2FF3A3A
    584       E2FF3A3AE2FFC0C0C0FF00000000000000000000000000000000000000000000
    585       00003A3AE2FFC0C0C0FF00000000000000000000000000000000000000003A3A
    586       E2FFC0C0C0FF0000000000000000000000000000000000000000000000000000
    587       0000000000000000000000000000000000000000000000000000000000000000
    588       0000000000000000000000000000000000000000000000000000000000000000
    589       0000000000003A3AE2FFC0C0C0FF000000000000000000000000000000000000
    590       0000000000000000000000000000000000000000000000000000000000000000
    591       0000000000000000000000000000000000000000000000000000000000000000
    592       0000000000000000000000000000000000000000000000000000000000000000
    593       000000000000000000000000000000000000000000FF000000FF000000FF0000
    594       00FF000000FF000000FF000000FF000000FF0000000000000000000000000000
    595       000000000000000000000000000000000000000000FF000000FFFFFFFFFFFFFF
    596       FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000000000000000000000000000
    597       000000000000000000000000000000000000000000FF008484FF000000FFFFFF
    598       FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000000000000000000000000000
    599       0000840000FF000000000000000000000000000000FF008484FF008484FF0000
    600       00FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000000000000000000000008400
    601       00FF840000FF000000000000000000000000000000FF008484FF008484FF0084
    602       84FF000000FFFFFFFFFFFFFFFFFF000000FF0000000000000000840000FF8400
    603       00FF840000FF840000FF840000FF00000000000000FF008484FF008484FF0084
    604       84FF000000FFFFFFFFFFFFFFFFFF000000FF00000000840000FF840000FF8400
    605       00FF840000FF840000FF840000FF00000000000000FF008484FF008484FF0084
    606       84FF000000FFFFFFFFFFFFFFFFFF000000FF0000000000000000840000FF8400
    607       00FF840000FF840000FF840000FF00000000000000FF008484FF008484FF0084
    608       84FF000000FFFFFFFFFFFFFFFFFF000000FF0000000000000000000000008400
    609       00FF840000FF000000000000000000000000000000FF008484FF008484FF0000
    610       00FF000000FFFFFFFFFFFFFFFFFF000000FF0000000000000000000000000000
    611       0000840000FF000000000000000000000000000000FF008484FF008484FF0084
    612       84FF000000FFFFFFFFFFFFFFFFFF000000FF0000000000000000000000000000
    613       0000000000000000000000000000000000FF000000FF008484FF008484FF0084
    614       84FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    615       00FF0000000000000000000000000000000000000000000000FF008484FF0084
    616       84FF000000FF0000000000000000000000000000000000000000000000000000
    617       0000000000000000000000000000000000000000000000000000000000FF0084
    618       84FF000000FF0000000000000000000000000000000000000000000000000000
    619       0000000000000000000000000000000000000000000000000000000000000000
    620       00FF000000FF0000000000000000000000000000000000000000000000000000
    621       0000000000000000000000000000000000000000000000000000000000000000
    622       0000000000FF0000000000000000000000000000000000000000000000000000
    623       0000000000000000000000000000000000000000000000000000000000000000
    624       0000000000000000000000000000000000000000000000000000000000000000
    625       000000000000000000000000000000000000000000000000000000000000C584
    626       44FFC28342FFD89C6DFFD69668FFD49463FFD69668FFB2793CFFB1783BFF0000
    627       0000000000000000000000000000000000000000000000000000C58442FFDCA2
    628       77FFF3DAC7FFFCF7F1FFFFFEFEFFFFFEFEFFFCF4EDFFF1D6C0FFC7935DFFA66F
    629       33FF0000000000000000000000000000000000000000C48443FFE5B999FFFCF4
    630       EDFFFBD2C1FFFAA887FFFD8757FFFD8454FFF8A582FFF7CEBDFFFAF1E7FFD2A7
    631       7AFFA36A2AFF000000000000000000000000C48445FFDCA277FFFCF4EDFFFABF
    632       A6FFFF7A43FFFFBB9EFFFFF6F3FFFFFEFEFFFEEDE5FFFA9970FFF3B69CFFF8F0
    633       E6FFBB8B56FF986426FF0000000000000000C48341FFF0DAC3FFFAD1C0FFFF79
    634       40FFFF986EFFFFFEFEFFFFC9B2FFFD9164FFFAC6AFFFFEF5F1FFF5773DFFEDC5
    635       B2FFE4CBB3FF905D21FF0000000000000000D1834CFFFCF7F1FFFAA582FFFF73
    636       3AFFFF844EFFFFAE8AFFFE6C2DFFF76727FFF19268FFFFFEFEFFE98354FFD785
    637       60FFF8F1ECFF81551FFF0000000000000000CD844EFFFFFEFEFFFC814CFFFF70
    638       31FFFF6B2CFFFD6928FFF86523FFF49265FFFDF5F1FFF4D4C5FFC65018FFBA59
    639       27FFFEFEFDFF834A1CFF0000000000000000CD8147FFFFFEFEFFF87A46FFF968
    640       29FFF66525FFF16020FFF18653FFFFFEFEFFF0BFA8FFC55A24FFB64C15FFB757
    641       24FFFEFEFDFF7F481AFF0000000000000000CD7F45FFFCF4EDFFEC9772FFE860
    642       21FFE05A1DFFDB5819FFEDAA89FFFFFEFEFFC84E12FFB94C11FFB34C13FFC77B
    643       53FFF6F0ECFF7A4319FF0000000000000000B4793AFFEFD6C1FFEDC5B2FFDD5A
    644       1AFFD55617FFD25313FFD87D4DFFE3A686FFBB4C11FFB34A12FFB64A10FFDEB9
    645       A6FFDCC9B8FF563C0DFF0000000000000000B67734FFD6996BFFF9F0E7FFDDA4
    646       88FFC75013FFC04E11FFDCA688FFFFFEFEFFB54911FFB64A10FFD59E82FFF3EC
    647       E7FF9A7352FF49340DFF000000000000000000000000B2702BFFDBAB80FFF8EF
    648       E7FFE2BBA6FFCC7E56FFC15823FFC05722FFC97F56FFDEBAA7FFF2EBE7FFB393
    649       76FF483108FF0000000000000000000000000000000000000000A1692CFFC088
    650       58FFE0C9B4FFF7F1ECFFFEFDFCFFFEFDFCFFF5F0ECFFDCC9B8FF9E7857FF4731
    651       08FF000000000000000000000000000000000000000000000000000000009164
    652       29FF855A24FF885015FF824A1DFF7E4719FF794417FF583C0EFF49340DFF0000
    653       0000000000000000000000000000000000000000000000000000000000000000
    654       0000000000000000000000000000000000000000000000000000000000000000
    655       0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    656       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    657       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    658       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    659       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    660       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    661       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    662       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    663       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000063000000B7FFFF
    664       FF00FFFFFF00000000FF000000FF000000B7FFFFFF00FFFFFF00000000FF0000
    665       00FF0000008BFFFFFF00FFFFFF00FFFFFF0000000040000000FF000000B7FFFF
    666       FF0000000063000000B7FFFFFF00000000B700000063000000630000008B0000
    667       0020000000FF00000020FFFFFF0000000020000000FF000000FF000000B7FFFF
    668       FF00FFFFFF00FFFFFF00FFFFFF000000008B0000008BFFFFFF00FFFFFF00FFFF
    669       FF00000000FF00000040FFFFFF0000000020000000B70000008B000000B7FFFF
    670       FF00FFFFFF00FFFFFF00FFFFFF00000000FF0000008BFFFFFF00FFFFFF000000
    671       0020000000FF00000020FFFFFF00FFFFFF00FFFFFF000000008B000000B7FFFF
    672       FF00FFFFFF00FFFFFF000000008B000000FF00000040FFFFFF00FFFFFF000000
    673       00FF00000040FFFFFF00FFFFFF00FFFFFF00FFFFFF000000008B000000B7FFFF
    674       FF00FFFFFF0000000040000000FF000000B7FFFFFF00FFFFFF00FFFFFF00FFFF
    675       FF00000000FF00000063FFFFFF00FFFFFF00FFFFFF000000008B000000B7FFFF
    676       FF00FFFFFF00000000FF000000FF00000020FFFFFF00FFFFFF00FFFFFF00FFFF
    677       FF00000000FF0000008BFFFFFF00FFFFFF00FFFFFF000000008B000000B7FFFF
    678       FF0000000063000000FF00000063FFFFFF00FFFFFF0000000063000000B70000
    679       0020000000FF00000063FFFFFF00FFFFFF00FFFFFF000000008B000000B7FFFF
    680       FF000000008B000000FF000000FF000000FF0000008BFFFFFF00000000B70000
    681       00FF000000B7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    682       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    683       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    684       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    685       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    686       FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
    687       FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
    688       0000000000000000000000000000000000000000000000000000000000000000
    689       0000000000000000000000000000000000000000000000000000000000000000
    690       000000000000000000000000000000000000000000FF000000FF000000FF0000
    691       0000000000000000000000000000000000000000000000000000000000000000
    692       0000000000000000000000000000000000FF0000000000000000000000000000
    693       00FF00000000000000FF00000000000000000000000000000000000000000000
    694       0000000000000000000000000000000000000000000000000000000000000000
    695       0000000000FF000000FF0000000000000000000000FF000000FF000000FF0000
    696       0000000000000000000000000000000000000000000000000000000000000000
    697       00FF000000FF000000FF00000000000000FF00FFFFFFFFFFFFFF00FFFFFF0000
    698       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
    699       0000000000000000000000000000000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF
    700       FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF000000FF000000000000
    701       0000000000000000000000000000000000FF00FFFFFFFFFFFFFF00FFFFFFFFFF
    702       FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000000000
    703       0000000000000000000000000000000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF
    704       FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    705       00FF000000FF000000FF000000FF000000FF00FFFFFFFFFFFFFF00FFFFFF0000
    706       00FF008484FF008484FF008484FF008484FF008484FF008484FF008484FF0084
    707       84FF008484FF000000FF00000000000000FFFFFFFFFF00FFFFFF000000FF0084
    708       84FF008484FF008484FF008484FF008484FF008484FF008484FF008484FF0084
    709       84FF000000FF0000000000000000000000FF00FFFFFF000000FF008484FF0084
    710       84FF008484FF008484FF008484FF008484FF008484FF008484FF008484FF0000
    711       00FF000000000000000000000000000000FF000000FF008484FF008484FF0084
    712       84FF008484FF008484FF008484FF008484FF008484FF008484FF000000FF0000
    713       0000000000000000000000000000000000FF000000FF000000FF000000FF0000
    714       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
    715       0000000000000000000000000000000000000000000000000000000000000000
    716       0000000000000000000000000000000000000000000000000000000000000000
    717       0000000000000000000000000000000000000000000000000000000000000000
    718       0000000000000000000000000000000000000000000000000000000000000000
    719       0000000000000000000000000000000000000000000000000000000000000000
    720       0000000000000000000000000000000000000000000000000000000000000000
    721       0000000000000000000000000000000000000000000000000000000000000000
    722       0000000000000000000000000000000000000000000000000000000000000000
    723       0000000000000000000000000000000000000000000000000000DE9077BFDA8A
    724       70FFD88367FFD57C61FF0000000000000000DE9077BFDA8A70FFD88367FFD57C
    725       61FF000000000000000000000000000000000000000000000000D9866CBFEBB0
    726       9DFFF0BBABFFD27457FF0000000000000000D9866CBFEBB09DFFF0BBABFFD274
    727       57FF000000000000000000000000000000000000000000000000D57C61BFE8A7
    728       93FFEDB6A3FFCD6849FF0000000000000000D57C61BFE8A793FFEDB6A3FFCD68
    729       49FF000000000000000000000000000000000000000000000000D27457BFE5A1
    730       8BFFEBAF9AFFC95E3EFF0000000000000000D27457BFE5A18BFFEBAF9AFFC95E
    731       3EFF000000000000000000000000000000000000000000000000CD6849BFE198
    732       81FFE8A793FFC45432FF0000000000000000CD6849BFE19881FFE8A793FFC454
    733       32FF000000000000000000000000000000000000000000000000C86A4DBFE7A5
    734       90FFE5A18BFFBF4A27FF0000000000000000C86A4DBFE7A590FFE5A18BFFBF4A
    735       27FF000000000000000000000000000000000000000000000000B95435BFE299
    736       84FFE29A85FFB5401DFF0000000000000000B95435BFE29984FFE29A85FFB540
    737       1DFF000000000000000000000000000000000000000000000000BF4A27C0D985
    738       6BFFDF957EFFAA3A18FF0000000000000000BF4A27C0D9856BFFDF957EFFAA3A
    739       18FF000000000000000000000000000000000000000000000000B5401DBFD57C
    740       61FFDE9077FF993414FF0000000000000000B5401DBFD57C61FFDE9077FF9934
    741       14FF000000000000000000000000000000000000000000000000AA3A18BFD375
    742       58FFDC8B71FF8A2C0FFF0000000000000000AA3A18BFD37558FFDC8B71FF8A2C
    743       0FFF000000000000000000000000000000000000000000000000993414BFCF6F
    744       50FFDA886DFF7F270BFF0000000000000000993414BFCF6F50FFDA886DFF7F27
    745       0BFF0000000000000000000000000000000000000000000000008A2C0FBF842A
    746       0EFF7C260BFF7A250AFF00000000000000008A2C0FBF842A0EFF7C260BFF7A25
    747       0AFF000000000000000000000000000000000000000000000000000000000000
    748       0000000000000000000000000000000000000000000000000000000000000000
    749       0000000000000000000000000000000000000000000000000000000000000000
    750       0000000000000000000000000000000000000000000000000000000000000000
    751       0000000000000000000000000000000000000000000000000000000000000000
    752       0000000000000000000000000000000000000000000000000000000000000000
    753       000000000000000000000000000000000000000000FF000000FF000000FF0000
    754       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    755       00FF000000FF000000FF0000000000000000000000FF008484FF000000FFFFFF
    756       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    757       00FFFFFFFFFF000000FF0000000000000000000000FF008484FF000000FFFFFF
    758       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    759       00FF000000FF000000FF0000000000000000000000FF008484FF000000FFFFFF
    760       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    761       00FF008484FF000000FF0000000000000000000000FF008484FF000000FFFFFF
    762       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    763       00FF008484FF000000FF0000000000000000000000FF008484FF000000FFFFFF
    764       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    765       00FF008484FF000000FF0000000000000000000000FF008484FF000000FFFFFF
    766       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
    767       00FF008484FF000000FF0000000000000000000000FF008484FF008484FF0000
    768       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0084
    769       84FF008484FF000000FF0000000000000000000000FF008484FF008484FF0084
    770       84FF008484FF008484FF008484FF008484FF008484FF008484FF008484FF0084
    771       84FF008484FF000000FF0000000000000000000000FF008484FF008484FF0000
    772       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    773       00FF008484FF000000FF0000000000000000000000FF008484FF008484FF0000
    774       00FF000000FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFF0000
    775       00FF008484FF000000FF0000000000000000000000FF008484FF008484FF0000
    776       00FF000000FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFF0000
    777       00FF008484FF000000FF0000000000000000000000FF008484FF008484FF0000
    778       00FF000000FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFF0000
    779       00FF008484FF000000FF000000000000000000000000000000FF000000FF0000
    780       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    781       00FF000000FF000000FF00000000000000000000000000000000000000000000
    782       0000000000000000000000000000000000000000000000000000000000000000
    783       0000000000000000000000000000000000000000000000000000000000000000
    784       0000000000000000000000000000000000000000000000000000000000000000
    785       00000000000000000000000000000000000000000000000000FF000000FF0000
    786       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
    787       00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF
    788       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF0000
    789       00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF
    790       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFBDBDBDFF0000
    791       00FF0000000000000000000000000000000000000000000000FFFFFFFFFFFFFF
    792       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF0000
    793       00FF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    794       FFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    795       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    796       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    797       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    798       FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFF
    799       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    800       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    801       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    802       FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFF
    803       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    804       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    805       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    806       FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFF
    807       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    808       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    809       FFFF000000FF00000000000000000000000000000000000000FFFFFFFFFFFFFF
    810       FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    811       FFFF000000FF00000000000000000000000000000000000000FF000000FF0000
    812       00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
    813       00FF000000FF0000000000000000000000000000000000000000000000000000
    814       0000000000000000000000000000000000000000000000000000000000000000
    815       0000000000000000000000000000A37B48FFA37B48FFA27A47FFA27946FFA178
    816       45FFA07744FFA07643FF9F7542FF9E7441FF9E7340FF9D723FFF9C713EFF9C70
    817       3DFF9B6F3CFF9A6E3BFF9A6D3AFFA37B48FFBEA27FFFBEA17EFFBDA17DFFBDA0
    818       7CFFBD9F7CFFBC9F7BFFBB9E7AFFBB9D7AFFBB9D79FFBA9C78FFB99B78FFB99A
    819       77FFB89A76FFB89975FF996C39FFA27A47FFFFFFFFFFFFFFFFFFFEFEFEFFFEFE
    820       FEFFFDFDFDFFFDFDFCFFFCFCFBFFFCFBFBFFFBFBFAFFFBFAF9FFFAFAF9FFFAF9
    821       F8FFF9F9F7FFF9F8F7FF986B37FFA17946FFFFFFFFFF878787FF5D5D5DFFA0A0
    822       A0FFFDFCFCFFFCFCFBFFFCFBFBFFFBFBFAFFFBFAF9FFFAFAF9FFFAF9F8FFF9F8
    823       F7FFF8F8F7FFF8F7F6FF976A36FFA17844FFFEFEFEFF5F5F5FFF949494FF5353
    824       53FFFCFCFBFF7B7B7BFF797979FF757575FF727272FF6E6E6EFF6A6A69FF6666
    825       66FF626262FFF7F7F5FF966935FFA07643FFFEFDFDFF8C8C8CFF525252FFA4A4
    826       A4FFFBFBFAFFFBFBFAFFFAFAF9FFFAF9F8FFF9F9F8FFF9F8F7FFF8F8F6FFF8F7
    827       F6FFF7F7F5FFF7F6F4FF966734FF9F7542FFFDFDFCFFFCFCFCFFFCFCFBFFFBFB
    828       FAFFFBFAFAFFFAFAF9FFFAF9F8FFF9F9F8FFF9F8F7FFF8F8F6FFF8F7F6FFF7F6
    829       F5FFF7F6F4FFF6F5F4FF956633FF9E7441FFFCFCFCFFB5B5B5FF848484FFBEBD
    830       BDFFFAFAF9FFFAF9F8FFF9F9F7FFF9F8F7FFF8F8F6FFF8F7F5FFF7F6F5FFF7F6
    831       F4FFF6F5F3FFF6F5F3FF946531FF9D7340FFFCFBFBFF818181FFC4C4C4FF8F8F
    832       8FFFFAF9F8FF7B7B7AFF797979FF757574FF727171FF6D6D6DFF696969FF6666
    833       65FF626261FFF5F4F2FF936430FF9D723EFFFBFBFAFF9F9F9EFF7F7F7FFFAEAE
    834       ADFFF9F8F7FFF8F8F7FFF8F7F6FFF7F7F5FFF7F6F5FFF6F6F4FFF6F5F3FFF5F4
    835       F3FFF5F4F2FFF4F3F1FF92622FFF9C703DFFFAFAF9FFFAF9F9FFF9F9F8FFF9F8
    836       F7FFF8F8F7FFF8F7F6FFF7F7F5FFF7F6F5FFF6F5F4FFF6F5F3FFF5F4F3FFF5F4
    837       F2FFF4F3F1FFF4F3F0FF92612EFF9B6F3CFFFAF9F8FFBEBEBDFF929292FFBCBC
    838       BBFFF8F7F6FFF7F7F5FFF7F6F4FFF6F5F4FFF6F5F3FFF5F4F2FFF5F4F2FFF4F3
    839       F1FFF4F2F0FFF3F2F0FF91602DFF9A6E3BFFF9F9F8FF7C7C7CFFC4C4C4FF8787
    840       87FFF7F6F5FF7A7A7AFF787878FF747474FF717170FF6D6D6CFF696968FF6565
    841       65FF616161FFF2F1EFFF905F2BFF996D3AFFF9F8F7FF959594FF878787FF9B9A
    842       9AFFF7F6F4FFF6F5F3FFF6F5F3FFF5F4F2FFF4F3F1FFF4F3F1FFF3F2F0FFF3F2
    843       EFFFF2F1EFFFF2F1EEFF8F5E2AFF996C38FFF8F7F6FFF8F7F5FFF7F6F5FFF6F6
    844       F4FFF6F5F3FFF5F5F3FFF5F4F2FFF4F3F1FFF4F3F1FFF3F2F0FFF3F2EFFFF2F1
    845       EFFFF2F0EEFFF1F0EDFF8E5D29FF986B37FF976A36FF966935FF966734FF9566
    846       33FF946532FF946531FF936430FF92622FFF92612EFF91602DFF90602CFF905F
    847       2BFF8F5D2AFF8E5C29FF8D5B28FF000000000000000000000000000000000000
    848       0000000000000000000000000000000000000000000000000000000000000000
    849       0000000000000000000000000000000000000000000000000000000000000000
    850       0000000000000000000000000000000000000000000000000000000000000000
    851       0000000000000000000000000000000000000000000000000000000000000000
    852       0000000000000000000000000000000000000000000000000000000000000000
    853       0000000000000000000000000000000000000000000000000000339966FF0000
    854       00000000000066CC99FF009933FF009933FF009933FF339966FF000000000000
    855       0000000000000000000000000000000000000000000000000000009933FF3399
    856       66FF009933FF009933FF009933FF009933FF009933FF339966FF339966FF0000
    857       0000000000000000000000000000000000000000000000000000009933FF0099
    858       33FF009933FF009933FF66CC99FF000000000000000066CC99FF009933FF66CC
    859       99FF000000000000000000000000000000000000000000000000009933FF0099
    860       33FF009933FF339966FF0000000000000000000000000000000066CC99FF0099
    861       33FF000000000000000000000000000000000000000000000000009933FF0099
    862       33FF009933FF009933FF339966FF000000000000000000000000000000000000
    863       0000000000000000000000000000000000000000000000000000000000000000
    864       0000000000000000000000000000000000000000000000000000000000000000
    865       0000000000000000000000000000000000000000000000000000000000000000
    866       0000000000000000000000000000339966FF009933FF009933FF009933FF0099
    867       33FF000000000000000000000000000000000000000000000000009933FF66CC
    868       99FF00000000000000000000000000000000339966FF009933FF009933FF0099
    869       33FF00000000000000000000000000000000000000000000000066CC99FF0099
    870       33FF66CC99FF000000000000000066CC99FF009933FF009933FF009933FF0099
    871       33FF000000000000000000000000000000000000000000000000000000003399
    872       66FF339966FF009933FF009933FF009933FF009933FF009933FF339966FF0099
    873       33FF000000000000000000000000000000000000000000000000000000000000
    874       0000339966FF009933FF009933FF009933FF66CC99FF00000000000000003399
    875       66FF000000000000000000000000000000000000000000000000000000000000
    876       0000000000000000000000000000000000000000000000000000000000000000
    877       0000000000000000000000000000000000000000000000000000000000000000
    878       0000000000000000000000000000000000000000000000000000000000000000
    879       0000000000000000000000000000000000000000000000000000000000000000
    880       0000000000000000000000000000000000000000000000000000000000000000
    881       0000000000000000000000000000000000000000000000000000000000000000
    882       000000FF00FF0000000000000000000000000000000000000000000000000000
    883       0000000000000000000000000000000000000000000000000000000000000000
    884       000000FF00FF00FF00FF00000000000000000000000000000000000000000000
    885       0000000000000000000000000000000000000000000000000000000000000000
    886       000000FF00FF00FF00FF00FF00FF000000000000000000000000000000000000
    887       0000000000000000000000000000000000000000000000000000000000000000
    888       000000FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000000000
    889       0000000000000000000000000000000000000000000000000000000000000000
    890       000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000000000
    891       0000000000000000000000000000000000000000000000000000000000000000
    892       000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000
    893       0000000000000000000000000000000000000000000000000000000000000000
    894       000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000
    895       0000000000000000000000000000000000000000000000000000000000000000
    896       000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000
    897       0000000000000000000000000000000000000000000000000000000000000000
    898       000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000000000
    899       0000000000000000000000000000000000000000000000000000000000000000
    900       000000FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000000000
    901       0000000000000000000000000000000000000000000000000000000000000000
    902       000000FF00FF00FF00FF00FF00FF000000000000000000000000000000000000
    903       0000000000000000000000000000000000000000000000000000000000000000
    904       000000FF00FF00FF00FF00000000000000000000000000000000000000000000
    905       0000000000000000000000000000000000000000000000000000000000000000
    906       000000FF00FF0000000000000000000000000000000000000000000000000000
    907       0000000000000000000000000000000000000000000000000000000000000000
    908       0000000000000000000000000000000000000000000000000000000000000000
    909       0000000000000000000000000000000000000000000000000000000000000000
    910       0000000000000000000000000000000000000000000000000000000000000000
    911       0000000000000000000000000000000000000000000000000000000000000000
    912       0000000000000000000000000000000000000000000000000000000000000000
    913       0000000000000000000000000000000000000000000000000000000000000000
    914       000000000000000000003131312F313131FF3030301F00000000000000000000
    915       0000000000000000000000000000000000000000000000000000000000000000
    916       000000000000000000002E2E2E3F2E2E2EFF2E2E2E3F00000000000000000000
    917       0000000000000000000000000000000000000000000000000000000000000000
    918       00002A2A2A7F2A2A2ADF2B2B2BFF2B2B2BFF2B2B2BFF2A2A2ADF2A2A2A7F0000
    919       0000000000000000000000000000000000000000000000000000000000002727
    920       279F272727FF282828AF2828284F272727FF2828284F282828AF272727FF2727
    921       279F0000000000000000000000000000000000000000000000002424247F2424
    922       24FF2424245F0000000000000000242424FF00000000000000002424245F2424
    923       24FF2424247F0000000000000000000000000000000000000000202020DF2020
    924       20AF000000000000000000000000202020FF0000000000000000000000002020
    925       20AF202020DF0000000000000000000000001C1C1C1F1C1C1C3F1D1D1DFF1D1D
    926       1D4F0000000000000000000000001D1D1DFF0000000000000000000000001D1D
    927       1D4F1D1D1DFF1C1C1C3F1C1C1C1F1A1A1A1F1A1A1AFF1A1A1AFF1A1A1AFF1A1A
    928       1AFF1A1A1AFF1A1A1AFF1A1A1AFF1A1A1ABF1A1A1AFF1A1A1AFF1A1A1AFF1A1A
    929       1AFF1A1A1AFF1A1A1AFF1A1A1AFF000000001818182F1818183F161616FF1616
    930       167F1818183F1818183F1818183F161616FF1818183F1818183F1818183F1616
    931       167F161616FF1818183F1818181F000000000000000000000000131313DF1313
    932       13AF000000000000000000000000131313FF0000000000000000000000001313
    933       13AF131313DF00000000000000000000000000000000000000000F0F0F7F0F0F
    934       0FFF0E0E0E5F00000000000000000F0F0FFF00000000000000000E0E0E5F0F0F
    935       0FFF1010106F0000000000000000000000000000000000000000000000000D0D
    936       0D9F0C0C0CFF0C0C0CAF0B0B0B4F0C0C0CFF0B0B0B4F0C0C0CAF0C0C0CFF0D0D
    937       0D9F000000000000000000000000000000000000000000000000000000000000
    938       00000909097F090909DF090909FF090909FF090909FF090909DF0909096F0000
    939       0000000000000000000000000000000000000000000000000000000000000000
    940       000000000000000000000505053F050505FF0505053F00000000000000000000
    941       0000000000000000000000000000000000000000000000000000000000000000
    942       000000000000000000000202022F020202FF0303031F00000000000000000000
    943       0000000000000000000000000000
     464      4C7A0F00000010000000100000008C0A00000000000078DAED9A0B544DF91EC7
     465      CFCAB2D6154A8A89A9A5B98C94A644AEC7186118B40C2D8F3CEE6D3AA1282291
     466      9E3A2244EE44629454485C16998C6772EA62702F732F17638CD7984B73178D4E
     467      A7C7E975BEF7FFDF9D73DA67B7CF3E2F83B1FA9DF5B5CFFEEDDFE7F7FBBFF63E
     468      7BEF88446DA66D80B0DAF8779B6FB3577932A96412B75AB49A911139B438B6F4
     469      E4D0C91990032525257A59811C8CDF8C1C1ABF8939B4FC86E660CD6DAB634239
     470      34CCEAD5BC7DD09583CD51E3F03A73B039BA4F8DED17CAC1AE6700DB2A077331
     471      62B1469C0F5AF54D3C8F0CE268B3DE0689447944F9447F7312890E251015125D
     472      516D139AFDF94C9C003FDAD2F268A9B7F7ED32B1B85C111A2A578AC52F142347
     473      DE2AB3B43C524A8FEBE6F739595A1E2E9D31E367F99C394FE0E7F750A3D9B37F
     474      82AFEF4379870E874A691C3F9F9D306CD8B5673E3E37316EDCF5569A30E1DFF0
     475      F4BCF08CC6F1F399853E3EB71443864841E5E97916CECEC7E0E0908FEEDD73D1
     476      B56B167AF73EAAA071FCFCF62BA486D2DDFD341C1D8F90F8FDB0B1C9D3D2FBEF
     477      1F51D2387E3EB5D0CBEB82C2CEAE90C47ECD2B3BBB630A1AC7CF6F4CB0B72F78
     478      6667574A62A5BCB2B4CC7F46E3F8F924A776ED369676EB269577ED7A9DC45FD3
     479      9295D539B9854572298DE3E71389A2475B58AC2AB5B43C58666DFD0F858DCD6D
     480      25DDD27DEAA7C7699C6E3E92683E596762B2DEC464DD89AFA8B609CDFE48912E
     481      FEF7AAB7C5ECED4B40A5BABE1A1DEBE474056CE9CA2374BC6FDFEFC016374697
     482      9F6B2E2E37A0963A96FDDD107373BB05AE8CE1A979787C0FB58C65070EBC07AE
     483      0CCD3178F003A8A566B8FBBA6CE8D0C7508B1BABCBAFB6E1C39F402DA1187378
     484      4372183BD6A6D8EBAA63C2BD069F0CE2F9CC603E298937071F9FC473DFC7F03C
     485      39B83C6505794E0E36AF66D93294E7638DE1CDAD6F70FF397369F4F8EBA9AF73
     486      ED717813D6239737ED3C308F37E799999BE38DD8A5A4B1F8FBDA31B89B15863B
     487      3B16E256FA3C665B1833025F477F0C61760CEEEF8D82FCDE6534D6CA00A59251
     488      63553964774A70799B3FF2970EE2CD7131E9533C3D93C1C436DC2C45FDC10D68
     489      DA30134D49D3A1D8BF06B5DF15A35E56869B0762B12FD415DAEC38A62E65EBA5
     490      F940ECA7405136502367EA2BCB9FA23E231CF2935950543C43518A1F76CEEFAB
     491      C97171ED6854DCBB80FA1BE4392F6614B0734973DBAF16A269EB7CD47F5B0065
     492      B50CD5519FA0FC5221FEFBCFE3D8E2FF8186BFB17612D3DF7AD24E2C1F0E244D
     493      068E6E8272F147A85DE00C59DA4226DFFFD64EC7F7EBC450C85E2071462F0D7F
     494      9DC6D3714A9C04847B028BDCD014D20F8AA0DEA84A0B4213A95D75EB12BEF5B5
     495      C7D9D9CE24B4096B7D1C5AF8C4F10CAF88FD0C750B5D5013F421646227C8D64F
     496      63FC15D283B834A70F4E4EEA865333FB30BC6442CF165E328E19BB175F45E017
     497      F107783CC7113FCEEA81F2431B19FECAE4AE3833C906C727D9E272DC34D454BC
     498      2043DC43C37F13331C2FEF943263F3604E4FDCF67B0F37A7D9E2EEAACFF173FE
     499      7A1451D6A72B4EFA74C1C333F9B87FF534FC4674D6F027A3BC70276311EA2ACA
     500      F0202F19977D6D5132D906F7F39399FA2726DA30ECEDEC3590BF2843E6F2A998
     501      E8D5596B0D1486F7C78F875743F1B20C4F8AF2712DC10FA5B37AA364E61F7155
     502      E28787670FA0F279198E6F5B89099E7FE05D837B42DC50923C0B8FAF7E835A32
     503      47CAA64646D5A4BFB4CDD9D133315E07ABB6ADF35DB08E8C75B26F37ACF17144
     504      C2F81E8819FB1E668DB06AD5E657F3B61B6D6A7E0E9A47748AB5AFBE0EF3F952
     505      38EC28762C3B17DDAAF6A952E823882AD64975DC89AF162B770A4F3DFACF2816
     506      7F4A15C7C76BB5975B9F53E7148F4F538B5B5B88E78E094F9BE6E9E1C1D74EBE
     507      3E7179D5586BD550CF09ABFFF304F814CEFD420A6B2E79FBD4F6FC6FFEBB4803
     508      EF65F00AEE715ABD4337F65945AB1DEA7B55ED77BC06DF77AA59C1ADD07DAB3E
     509      560FAF23D6707159F6BDB82EB1C6CF0C56D37F1359FEE707C359919163D56602
     510      F6704B94F4DEA670DC5DBB00B7E303A1CFCFB51FD62F963E3FB61B1545877173
     511      C54CE8F3738DE496FE72601BCA4FEEC3F58513A1CFCF35925BFA744F0A9E1764
     512      E2EA1723A1CFCF35925BFAD3CE44D05A17A70F843E3FD7AE847E2E2DDBBF05B4
     513      96D4C719FAFC5C3B337DB0F44946129E64AEC389518ED0E7E71AC95DF2C3BA45
     514      78B43D018786DB439F9F6B24B794CE2F996F6478D9419F9F6B24B7F43F91B370
     515      3F651936B959439F9F6B24B7F45F4B7D712F390C12E78ED0E7E71AC92D4D72B5
     516      427CDF8E88FDD012FAFCEFE0DFF961E2F550E7FB3BBEF7793CBF8746F1E6D6E7
     517      FD0D7A177843DE9DE9FA0D36E4F753E837DCF0777726F1E6F6FF37E645669E3F
     518      BF976B809E5711069DB726F3C5C5C57AEF830DBC6E4090E7FEA733C3FEA60143
     519      CDE8FA9C76B4D5FF8DEB9BC8BF89737F5FDC0450ED8D1D8FBD319F614FF438E4
     520      468D45EECA4F91133906D92B46237BF928EC8EF046D6B291C80AFF04BB968E40
     521      E6928F9119369C61CFEF95E0FC9E0414EF5985E2DC7814E7C4E35C4E1C8AB263
     522      51B49B2A0667B3A27166175166144E67AEC4E98C48642C1EC6D4559B92BE6B27
     523      6A6A6A226A446363031A1B1AD0D0508F86FA3AD453D5295057578B3A452D762E
     524      1A823DA4CDD4366CD8007F7F7FE4E6E6A2A95180259C82AAB6065F85FE89F477
     525      2C5333202000E9E9E998366D1AC3C6C5C521262606919191888888C092254B10
     526      1A1A82E0E060CC9D3B17B5B5D5D811329819272569EFE6CD9B3175EA54E4E5E5
     527      35D7246A69AFBA6E0D5397B2B53555D8B1C08B19E3E6BE36B7B9B9BD026C4D33
     528      5B535D85EDC18398F9A1EC89132790447E57CE936B1C779C9AD96A162B67941E
     529      E489DD646EE938252626E2E2C58B484D4D65D8B8B85855FF572062D932848585
     530      212484F63F88F43F10D55595D8367F005917239936E7E464432291E0E8D1235A
     531      635CABAA5BA3AA5B5D2567D82AB90C69733D98F5D4DCDE3A565F396C756BB64A
     532      5E81B44077662DD2F69E3F5F8CB4B4349C3B57A435C62D6C650B5B590139D156
     533      F147CC3AA675E3E3E399FED375446BC6C6C6223A3A1A2B56ACC0B265E1A4FF8B
     534      49FF1722282808818181A894BDC49680FEC820E7006DF3F6EDE90CBB2B33536B
     535      8C5BDA2B636ACA2B5F326CA5EC57A47EE14ACE81A14C7B15DC7112622B7E85AC
     536      A21C5FFABB30E7005DC7742DD2F544D7447AD040666EE9FCD031A6E344FBBA45
     537      ECC6B439D5DF155FFEC5057FFD73BF77EA59645046B0A63FC1D73220CA18A411
     538      FB984E53C7B13836AF37078761DAC0690FDB27C4F3D5D2F4C9C0FA06F5F975CC
     539      09773C05DACF373EAD72E830BE31E6AE03C1FAAA5A426B401FCFD75E767BDE86
     540      39790D4F02309B372707581F7379537280E7632E6F4C0E087CDE54FD3735FE6F
     541      6AFDB599C8D3D3D3830803060CE8650AEFEEEEEE4D04BA358673757595103DEA
     542      DFBF3FD4A2FBD4AF8F757676CE2142BF7EFD0A88A6A8BE4FA1FBF43B3DAE8BED
     543      D3A78F840844012C1F58DF0354C779DBE1E4E4F488A880E30367BF80C6B17D0E
     544      0E0EBD88BC1D1D1D4134857D8CFA38FB53A88FC653AE67CF9E54109054E838CD
     545      696F6FEF41E4DDBD7B771049E877B5A88FB32F61F9B4D685ADADED23A2028E0F
     546      9CFD021AC7377ED6D6D6122258595905B07C1A9EFAE97E972E5D96EA9AC3CE9D
     547      3BE774EAD40944051D3B769C42BFABB605F43B3DAE6F0D75E8D04142F488082C
     548      D1FDA5C6ACE3F6EDDB7B13816E4D397F2C2C2C3C88D0AE5D3B9DE7DFFF0101C8
     549      8363
    944550    }
    945551  end
    946552  object PopupMenu1: TPopupMenu
    947     left = 196
    948     top = 54
     553    Left = 294
     554    Top = 81
    949555  end
    950556end
  • trunk/IDE/Forms/FormMain.pas

    r74 r75  
    1 unit UFormMain;
    2 
    3 {$MODE Delphi}
     1unit FormMain;
    42
    53interface
     
    75uses
    86  SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
    9   ComCtrls, ExtCtrls, SynEdit, SynHighlighterPas, Registry,
    10   UProject, FileUtil, Menus, ActnList, DateUtils,
    11   UFormTargetCode, UFormCodeTree, URegistry;
     7  ComCtrls, ExtCtrls, SynEdit, SynHighlighterPas, Registry, Project, FileUtil,
     8  Menus, ActnList, DateUtils, FormTargetCode, FormCodeTree, RegistryEx,
     9  FormMessages, FormSourceCode, FormProject, FormTargetProject, FormTargets,
     10  FormExternalProducerOutput;
    1211
    1312type
     
    145144    procedure UpdateTitle;
    146145    procedure ProducerProcessOutput(Text: string);
     146    procedure ShowProject(ProjectFile: TProjectFile);
     147    procedure ShowTargetCode(ProjectFile: TProjectFile);
    147148  public
     149    FormMessages: TFormMessages;
     150    FormSourceCode: TFormSourceCode;
     151    FormProject: TFormProject;
     152    FormTargetCode: TFormTargetCode;
     153    FormTargetProject: TFormTargetProject;
     154    FormExternalProducerOutput: TFormExternalProducerOutput;
     155    FormTargets: TFormTargets;
     156    FormCodeTree: TFormCodeTree;
    148157    procedure LoadFromRegistry(Root: HKEY; const Key: string);
    149158    procedure SaveToRegistry(Root: HKEY; const Key: string);
     
    162171
    163172uses
    164   UCore, UFormMessages, UFormSourceCode, UFormProject, UCommon, UFormAbout, UFormOptions,
    165   UFormTargets, UTarget, UExecutor, UFormProjectNew,
    166   UFormTargetProject, UFormExternalProducerOutput;
     173  Core, Common, FormAbout, FormOptions, Target, Executor, FormProjectNew;
    167174
    168175resourcestring
     
    175182  FormSourceCode.Save;
    176183  AProjectSave.Execute;
    177   with Core do begin
     184  with Core.Core do begin
    178185    // Compile project file
    179186    Compiler.Init;
     
    214221procedure TFormMain.AResetExecute(Sender: TObject);
    215222begin
    216   Core.Compiler.Target.Executor.Reset;
     223  Core.Core.Compiler.Target.Executor.Reset;
    217224end;
    218225
     
    220227begin
    221228  ABuildExecute(Self);
    222   Core.Compiler.Target.Executor.Run;
     229  Core.Core.Compiler.Target.Executor.Run;
    223230end;
    224231
    225232procedure TFormMain.ARunToCursorExecute(Sender: TObject);
    226233begin
    227   Core.Compiler.Target.Executor.RunToCursor(0); // determine position
     234  Core.Core.Compiler.Target.Executor.RunToCursor(0); // determine position
    228235end;
    229236
    230237procedure TFormMain.AStepInExecute(Sender: TObject);
    231238begin
    232   Core.Compiler.Target.Executor.StepIn;
     239  Core.Core.Compiler.Target.Executor.StepIn;
    233240end;
    234241
    235242procedure TFormMain.AStepOutExecute(Sender: TObject);
    236243begin
    237   Core.Compiler.Target.Executor.StepOut;
     244  Core.Core.Compiler.Target.Executor.StepOut;
    238245end;
    239246
    240247procedure TFormMain.AStepOverExecute(Sender: TObject);
    241248begin
    242   Core.Compiler.Target.Executor.StepOver;
     249  Core.Core.Compiler.Target.Executor.StepOver;
    243250end;
    244251
    245252procedure TFormMain.AStopExecute(Sender: TObject);
    246253begin
    247   Core.Compiler.Target.Executor.Stop;
     254  Core.Core.Compiler.Target.Executor.Stop;
    248255end;
    249256
     
    264271
    265272procedure TFormMain.AViewOptionsExecute(Sender: TObject);
    266 begin
    267   FormOptions.ShowModal;
     273var
     274  FormOptions: TFormOptions;
     275begin
     276  FormOptions := TFormOptions.Create(nil);
     277  try
     278    FormOptions.ShowModal;
     279  finally
     280    FormOptions.Free;
     281  end;
    268282end;
    269283
     
    280294procedure TFormMain.AViewSourceEditorExecute(Sender: TObject);
    281295begin
    282 
    283296end;
    284297
     
    288301  F: TFileStream;
    289302begin
    290   FileName := ExtractFileDir(Core.Project.FileName) + Name + '.pas';
     303  FileName := ExtractFileDir(Core.Core.Project.FileName) + Name + '.pas';
    291304  if FileExists(FileName) then
    292305  try
     
    303316procedure TFormMain.UpdateInterface;
    304317begin
    305   with Core do begin
    306   UpdateTitle;
    307   AProjectClose.Enabled := Assigned(Project);
    308   AProjectSave.Enabled := Assigned(Project) and Project.Modified;
    309   AProjectSaveAs.Enabled := Assigned(Project);
    310   (*AProgramRun.Enabled := Project.Active and (BrainFuckInterpreter.State = rsStopped);
    311   AProgramPause.Enabled := Project.Active and (BrainFuckInterpreter.State = rsRunning);
    312   AProgramStop.Enabled := Project.Active and (BrainFuckInterpreter.State <> rsStopped);*)
    313   ABuild.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
    314     Assigned(Compiler.Target.Producer);
    315   APause.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
    316     Assigned(Compiler.Target.Executor) and (Compiler.Target.Executor.State = rsRunning);
    317   ARun.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
    318     Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsStopped) or
    319     (Compiler.Target.Executor.State = rsPaused));
    320   AStop.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
    321     Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsRunning) or
    322     (Compiler.Target.Executor.State = rsPaused));
    323   AStepIn.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
    324     Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsRunning) or
    325     (Compiler.Target.Executor.State = rsPaused));
    326   AStepOut.Enabled := AStepIn.Enabled;
    327   AStepOver.Enabled := AStepIn.Enabled;
    328   ARunToCursor.Enabled := AStepIn.Enabled;
     318  with Core.Core do begin
     319    UpdateTitle;
     320    AProjectClose.Enabled := Assigned(Project);
     321    AProjectSave.Enabled := Assigned(Project) and Project.Modified;
     322    AProjectSaveAs.Enabled := Assigned(Project);
     323    (*AProgramRun.Enabled := Project.Active and (BrainFuckInterpreter.State = rsStopped);
     324    AProgramPause.Enabled := Project.Active and (BrainFuckInterpreter.State = rsRunning);
     325    AProgramStop.Enabled := Project.Active and (BrainFuckInterpreter.State <> rsStopped);*)
     326    ABuild.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
     327      Assigned(Compiler.Target.Producer);
     328    APause.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
     329      Assigned(Compiler.Target.Executor) and (Compiler.Target.Executor.State = rsRunning);
     330    ARun.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
     331      Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsStopped) or
     332      (Compiler.Target.Executor.State = rsPaused));
     333    AStop.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
     334      Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsRunning) or
     335      (Compiler.Target.Executor.State = rsPaused));
     336    AStepIn.Enabled := Assigned(Project) and Assigned(Compiler.Target) and
     337      Assigned(Compiler.Target.Executor) and ((Compiler.Target.Executor.State = rsRunning) or
     338      (Compiler.Target.Executor.State = rsPaused));
     339    AStepOut.Enabled := AStepIn.Enabled;
     340    AStepOver.Enabled := AStepIn.Enabled;
     341    ARunToCursor.Enabled := AStepIn.Enabled;
    329342  end;
    330343
    331344  UpdateMenu;
    332   Core.Compiler.Targets.LoadToStrings(ComboBoxTarget.Items);
    333   ComboBoxTarget.ItemIndex := Core.Compiler.Targets.IndexOf(Core.Compiler.Target);
     345  Core.Core.Compiler.Targets.LoadToStrings(ComboBoxTarget.Items);
     346  ComboBoxTarget.ItemIndex := Core.Core.Compiler.Targets.IndexOf(Core.Core.Compiler.Target);
    334347  FormSourceCode.UpdateInterface;
    335348  FormTargetCode.UpdateInterface;
     
    435448begin
    436449  with TMenuItem(Sender) do begin
    437     Core.Compiler.Target := TTarget(Core.Compiler.Targets[MenuIndex]);
     450    Core.Core.Compiler.Target := TTarget(Core.Core.Compiler.Targets[MenuIndex]);
    438451    UpdateInterface;
    439452  end;
     
    446459begin
    447460  MenuItemProducer.Clear;
    448   with Core do
     461  with Core.Core do
    449462  for I := 0 to Compiler.Targets.Count - 1 do begin
    450463    NewMenuItem := TMenuItem.Create(MenuItemProducer);
     
    461474  Title: string;
    462475begin
    463   Title := Core.ApplicationInfo.AppName;
    464   if Assigned(Core.Project) then begin
    465     if Core.Project.FileName <> '' then Title := Core.Project.FileName + ' - ' + Title;
    466     if Core.Project.Modified then Title := Title + ' *';
     476  Title := Core.Core.ApplicationInfo.AppName;
     477  if Assigned(Core.Core.Project) then begin
     478    if Core.Core.Project.FileName <> '' then Title := Core.Core.Project.FileName + ' - ' + Title;
     479    if Core.Core.Project.Modified then Title := Title + ' *';
    467480  end;
    468481  Caption := Title;
     
    474487end;
    475488
     489procedure TFormMain.ShowProject(ProjectFile: TProjectFile);
     490begin
     491  FormMain.TabSheetSource.Show;
     492  FormSourceCode.ProjectFile := ProjectFile;
     493end;
     494
     495procedure TFormMain.ShowTargetCode(ProjectFile: TProjectFile);
     496begin
     497  FormTargetCode.ProjectFile := ProjectFile;
     498  FormMain.TabSheetTarget.Show;
     499  FormTargetCode.SynEdit1.Lines.Assign(ProjectFile.Source);
     500end;
     501
    476502procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
    477503begin
    478504  AProjectClose.Execute;
    479   Core.SaveToRegistry(HKEY(Core.ApplicationInfo.RegistryRoot), Core.ApplicationInfo.RegistryKey);
     505  Core.Core.SaveToRegistry(HKEY(Core.Core.ApplicationInfo.RegistryRoot), Core.Core.ApplicationInfo.RegistryKey);
    480506end;
    481507
     
    484510  I: Integer;
    485511begin
    486   with Core.Compiler.Targets do
     512  FormMessages := TFormMessages.Create(nil);
     513  FormSourceCode := TFormSourceCode.Create(nil);
     514  FormProject := TFormProject.Create(nil);
     515  FormProject.OnShowProject := ShowProject;
     516  FormTargetCode := TFormTargetCode.Create(nil);
     517  FormTargetProject := TFormTargetProject.Create(nil);
     518  FormTargetProject.OnShowTargetCode := ShowTargetCode;
     519  FormExternalProducerOutput := TFormExternalProducerOutput.Create(nil);
     520  FormTargets := TFormTargets.Create(nil);
     521  FormCodeTree := TFormCodeTree.Create(nil);
     522
     523  with Core.Core.Compiler.Targets do
    487524  for I := 0 to Count - 1 do
    488525  with TTarget(Items[I]) do
     
    498535begin
    499536  if Sender is TMenuItem then
    500     Core.ProjectOpen(StringReplace(TMenuItem(Sender).Caption, '&', '', [rfReplaceAll]));
     537    Core.Core.ProjectOpen(StringReplace(TMenuItem(Sender).Caption, '&', '', [rfReplaceAll]));
    501538end;
    502539
    503540procedure TFormMain.FormShow(Sender: TObject);
    504541begin
    505   Core.LoadFromRegistry(HKEY(Core.ApplicationInfo.RegistryRoot), Core.ApplicationInfo.RegistryKey);
     542  Core.Core.LoadFromRegistry(HKEY(Core.Core.ApplicationInfo.RegistryRoot), Core.Core.ApplicationInfo.RegistryKey);
    506543  DockInit;
    507   Core.ProjectTemplatesInit;
    508 
    509   if Core.ReopenLastOpenedFile and (Core.LastOpenedFiles.Items.Count > 0) then
    510   if FileExists(Core.LastOpenedFiles.Items[0]) then
    511     Core.ProjectOpen(Core.LastOpenedFiles.Items[0]);
     544  Core.Core.ProjectTemplatesInit;
     545
     546  if Core.Core.ReopenLastOpenedFile and (Core.Core.LastOpenedFiles.Items.Count > 0) then
     547  if FileExists(Core.Core.LastOpenedFiles.Items[0]) then
     548    Core.Core.ProjectOpen(Core.Core.LastOpenedFiles.Items[0]);
    512549
    513550  WindowState := wsMaximized;
     
    517554procedure TFormMain.AProjectOpenExecute(Sender: TObject);
    518555begin
    519   if Core.LastOpenedFiles.Items.Count > 0 then
    520     OpenDialogProject.FileName := Core.LastOpenedFiles.Items[0]
     556  if Core.Core.LastOpenedFiles.Items.Count > 0 then
     557    OpenDialogProject.FileName := Core.Core.LastOpenedFiles.Items[0]
    521558    else OpenDialogProject.FileName := ExtractFileDir(Application.ExeName);
    522559  if OpenDialogProject.Execute then begin
    523     Core.ProjectOpen(OpenDialogProject.FileName);
     560    Core.Core.ProjectOpen(OpenDialogProject.FileName);
    524561  end;
    525562end;
     
    529566  //if Project.Modified then ;  A
    530567  FormSourceCode.ProjectFile := nil;
    531   FreeAndNil(Core.Project);
     568  FreeAndNil(Core.Core.Project);
    532569  FormProject.UpdateProjectTree;
    533570  UpdateInterface;
     
    540577
    541578procedure TFormMain.AAboutExecute(Sender: TObject);
    542 begin
    543   FormAbout.ShowModal;
     579var
     580  FormAbout: TFormAbout;
     581begin
     582  FormAbout := TFormAbout.Create(nil);
     583  try
     584    FormAbout.ShowModal;
     585  finally
     586    FormAbout.Free;
     587  end;
    544588end;
    545589
    546590procedure TFormMain.AHomepageExecute(Sender: TObject);
    547591begin
    548   OpenWebPage(Core.ApplicationInfo.HomePage);
     592  OpenWebPage(Core.Core.ApplicationInfo.HomePage);
    549593end;
    550594
    551595procedure TFormMain.APauseExecute(Sender: TObject);
    552596begin
    553   Core.Compiler.Target.Executor.Pause;
     597  Core.Core.Compiler.Target.Executor.Pause;
    554598end;
    555599
    556600procedure TFormMain.AProjectNewExecute(Sender: TObject);
    557 begin
     601var
     602  FormProjectNew: TFormProjectNew;
     603begin
     604  FormProjectNew := TFormProjectNew.Create(nil);
    558605  if FormProjectNew.ShowModal = mrOk then begin
    559606    if Assigned(FormProjectNew.ListView1.Selected) then begin
    560607      if TProjectTemplate(FormProjectNew.ListView1.Selected.Data).IsProject then
    561         Core.ProjectNew;
    562       TProjectTemplate(FormProjectNew.ListView1.Selected.Data).InitProject(Core.Project);
     608        Core.Core.ProjectNew;
     609      TProjectTemplate(FormProjectNew.ListView1.Selected.Data).InitProject(Core.Core.Project);
    563610    end;
    564611  end;
     612  FormProjectNew.Free;
    565613  UpdateInterface;
    566614end;
     
    568616procedure TFormMain.AProjectSaveAsExecute(Sender: TObject);
    569617begin
    570   if Core.LastOpenedFiles.Items.Count > 0 then
    571     SaveDialogProject.FileName := Core.LastOpenedFiles.Items[0]
     618  if Core.Core.LastOpenedFiles.Items.Count > 0 then
     619    SaveDialogProject.FileName := Core.Core.LastOpenedFiles.Items[0]
    572620    else SaveDialogProject.FileName := ExtractFileDir(Application.ExeName);
    573   if Assigned(Core.Project) then
     621  if Assigned(Core.Core.Project) then
    574622  if SaveDialogProject.Execute then begin
    575     Core.Project.SaveToFile(SaveDialogProject.FileName);
     623    Core.Core.Project.SaveToFile(SaveDialogProject.FileName);
    576624    FormSourceCode.Save;
    577     Core.Project.Save;
     625    Core.Core.Project.Save;
    578626    UpdateInterface;
    579     Core.LastOpenedFiles.AddItem(SaveDialogProject.FileName);
     627    Core.Core.LastOpenedFiles.AddItem(SaveDialogProject.FileName);
    580628  end;
    581629end;
     
    584632begin
    585633  FormSourceCode.Save;
    586   if not FileExists(Core.Project.FileName) then AProjectSaveAs.Execute
    587     else Core.Project.SaveToFile(Core.Project.FileName);
     634  if not FileExists(Core.Core.Project.FileName) then AProjectSaveAs.Execute
     635    else Core.Core.Project.SaveToFile(Core.Core.Project.FileName);
    588636end;
    589637
     
    591639begin
    592640  with TMenuItem(Sender) do begin
    593     Core.Compiler.Target := TTarget(Core.Compiler.Targets[ComboBoxTarget.ItemIndex]);
     641    Core.Core.Compiler.Target := TTarget(Core.Core.Compiler.Targets[ComboBoxTarget.ItemIndex]);
    594642    UpdateInterface;
    595643  end;
  • trunk/IDE/Forms/FormMessages.pas

    r74 r75  
    1 unit UFormMessages;
    2 
    3 {$mode objfpc}{$H+}
     1unit FormMessages;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   ComCtrls, UProject, UCompiler;
     7  ComCtrls, Project, Compiler;
    108
    119type
     10  TSelectFileEvent = procedure(FileName: string; Position: TPoint);
    1211
    1312  { TFormMessages }
     
    1514  TFormMessages = class(TForm)
    1615    ListView1: TListView;
    17     procedure ListBoxMessagesSelectionChange(Sender: TObject; User: boolean);
     16    procedure ListBoxMessagesSelectionChange(Sender: TObject; User: Boolean);
    1817    procedure ListView1Click(Sender: TObject);
    1918    procedure ListView1Data(Sender: TObject; Item: TListItem);
     
    2120      Selected: Boolean);
    2221  private
    23     { private declarations }
     22    FOnSelectFile: TSelectFileEvent;
    2423  public
    2524    procedure Reload;
     25    property OnSelectFile: TSelectFileEvent read FOnSelectFile write FOnSelectFile;
    2626  end;
    2727
    28 var
    29   FormMessages: TFormMessages;
    3028
    3129implementation
     
    3432
    3533uses
    36   UCore, UFormMain, UFormSourceCode;
     34  Core, FormMain, FormSourceCode;
    3735
    3836{ TFormMessages }
    3937
    4038procedure TFormMessages.ListBoxMessagesSelectionChange(Sender: TObject;
    41   User: boolean);
     39  User: Boolean);
    4240begin
    43 
    4441end;
    4542
     
    5249procedure TFormMessages.ListView1Data(Sender: TObject; Item: TListItem);
    5350begin
    54   with Core, FormMain, FormSourceCode do
     51  with Core.Core, FormMain.FormMain do
    5552  with TErrorMessage(Compiler.ErrorMessages[Item.Index]) do begin
    5653    if FileName = '' then Item.Caption := ' '
     
    6865  P: TPoint;
    6966begin
    70   with Core, FormSourceCode do
     67  with Core.Core do
    7168  if Assigned(ListView1.Selected) then
    7269  with TErrorMessage(ListView1.Selected.Data) do
    7370  if FileName <> '' then begin
    74     ProjectFile := Project.Files.SearchFile(FileName);
    75     if Assigned(ProjectFile) then
    76       SynEditSource.Lines.Assign(ProjectFile.Source)
    77       else if FileExists(FileName) then
    78         SynEditSource.Lines.LoadFromFile(FileName);
    79     SynEditSource.CaretXY := Position;
    80     TForm(SynEditSource.Owner).Show;
    81     SynEditSource.SetFocus;
     71    if Assigned(FOnSelectFile) then
     72      FOnSelectFile(FileName, Position);
    8273  end;
    8374end;
     
    8576procedure TFormMessages.Reload;
    8677begin
    87   ListView1.Items.Count := Core.Compiler.ErrorMessages.Count;
     78  ListView1.Items.Count := Core.Core.Compiler.ErrorMessages.Count;
    8879  ListView1.Refresh;
    8980end;
  • trunk/IDE/Forms/FormOptions.pas

    r74 r75  
    1 unit UFormOptions;
    2 
    3 {$mode delphi}
     1unit FormOptions;
    42
    53interface
     
    2624  end;
    2725
    28 var
    29   FormOptions: TFormOptions;
    3026
    3127implementation
     
    3430
    3531uses
    36   UCore, UFormMain, ULanguages;
     32  Core, Languages;
    3733
    3834{ TFormOptions }
     
    4137begin
    4238  if ComboBoxLanguage.ItemIndex <> -1 then
    43     Core.CoolTranslator1.Language := TLanguage(ComboBoxLanguage.Items.Objects[ComboBoxLanguage.ItemIndex]);
    44   Core.ReopenLastOpenedFile := CheckBoxReopenProject.Checked;
     39    Core.Core.Translator1.Language := TLanguage(ComboBoxLanguage.Items.Objects[ComboBoxLanguage.ItemIndex]);
     40  Core.Core.ReopenLastOpenedFile := CheckBoxReopenProject.Checked;
    4541end;
    4642
    4743procedure TFormOptions.FormShow(Sender: TObject);
    4844begin
    49   Core.CoolTranslator1.LanguageListToStrings(ComboBoxLanguage.Items);
    50   ComboBoxLanguage.ItemIndex := ComboBoxLanguage.Items.IndexOfObject(Core.CoolTranslator1.Language);
     45  Core.Core.Translator1.LanguageListToStrings(ComboBoxLanguage.Items);
     46  ComboBoxLanguage.ItemIndex := ComboBoxLanguage.Items.IndexOfObject(Core.Core.Translator1.Language);
    5147  if ComboBoxLanguage.ItemIndex = -1 then ComboBoxLanguage.ItemIndex := 0;
    52   CheckBoxReopenProject.Checked := Core.ReopenLastOpenedFile;
     48  CheckBoxReopenProject.Checked := Core.Core.ReopenLastOpenedFile;
    5349end;
    5450
  • trunk/IDE/Forms/FormProject.lfm

    r74 r75  
    11object FormProject: TFormProject
    22  Left = 507
    3   Height = 253
     3  Height = 380
    44  Top = 197
    5   Width = 331
     5  Width = 496
    66  Caption = 'Project manager'
    7   ClientHeight = 253
    8   ClientWidth = 331
    9   LCLVersion = '1.1'
     7  ClientHeight = 380
     8  ClientWidth = 496
     9  DesignTimePPI = 144
     10  LCLVersion = '3.2.0.0'
    1011  object TreeViewProject: TTreeView
    1112    Left = 0
    12     Height = 253
     13    Height = 380
    1314    Top = 0
    14     Width = 331
     15    Width = 496
    1516    Align = alClient
    16     DefaultItemHeight = 16
    1717    PopupMenu = PopupMenuFile
    1818    ReadOnly = True
     
    2424  object PopupMenuFile: TPopupMenu
    2525    Images = FormMain.ImageList1
    26     left = 94
    27     top = 38
     26    Left = 141
     27    Top = 57
    2828    object MenuItem4: TMenuItem
    2929      Action = AShow
     
    4040  end
    4141  object ActionList1: TActionList
    42     left = 184
    43     top = 40
     42    Left = 276
     43    Top = 60
    4444    object AAdd: TAction
    4545      Caption = 'Add'
     
    6060  end
    6161  object OpenDialog1: TOpenDialog
    62     left = 94
    63     top = 98
     62    Left = 141
     63    Top = 147
    6464  end
    6565end
  • trunk/IDE/Forms/FormProject.pas

    r74 r75  
    1 unit UFormProject;
     1unit FormProject;
    22
    33interface
    44
    55uses
    6   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
    7   Menus, ActnList, UProject;
     6  Classes, SysUtils, LazFileUtils, Forms, Controls, Graphics, Dialogs, ComCtrls,
     7  Menus, ActnList, Project;
    88
    99type
     10  TShowProjectEvent = procedure (ProjectFile: TProjectFile) of object;
    1011
    1112  { TFormProject }
     
    3132    procedure TreeViewProjectDblClick(Sender: TObject);
    3233  private
    33     procedure UpdateProjectFiles(Node: TTreeNode; Files: TProjectFileList);
     34    FOnShowProject: TShowProjectEvent;
     35    procedure UpdateProjectFiles(Node: TTreeNode; Files: TProjectFiles);
    3436  public
    3537    procedure UpdateProjectTree;
    3638    procedure UpdateInterface;
     39    property OnShowProject: TShowProjectEvent read FOnShowProject write FOnShowProject;
    3740  end;
    3841
    3942var
    4043  FormProject: TFormProject;
     44
    4145
    4246implementation
     
    4549
    4650uses
    47   UCore, UFormMain, UFormSourceCode, UFormTargetCode, UFormCodeTree;
     51  Core, FormMain, FormSourceCode, FormTargetCode, FormCodeTree;
    4852
    4953resourcestring
     
    5660  );
    5761begin
    58   with FormMain, FormSourceCode do
    5962  if Assigned(Node) then begin
    6063    if TProjectFile(Node.Data) is TProjectFile then begin
     
    107110begin
    108111  if Assigned(TreeViewProject.Selected) then
    109     Core.Project.Files.Remove(TreeViewProject.Selected.Data);
     112    Core.Core.Project.Files.Remove(TreeViewProject.Selected.Data);
    110113  UpdateProjectTree;
    111114end;
     
    126129begin
    127130  if Assigned(TreeViewProject.Selected) then begin
    128     FormMain.TabSheetSource.Show;
    129     FormSourceCode.ProjectFile := TProjectFile(TreeViewProject.Selected.Data);
     131    if Assigned(FOnShowProject) then
     132      FOnShowProject(TProjectFile(TreeViewProject.Selected.Data));
    130133  end;
    131134end;
     
    135138  NewNode: TTreeNode;
    136139begin
    137   with Core, TreeViewProject, Items do
     140  with Core.Core, TreeViewProject, Items do
    138141  try
    139142    BeginUpdate;
     
    147150      (TreeViewProject.TopItem.Count > 0) then
    148151      TreeViewProject.TopItem.Items[0].Selected := True
    149       else FormSourceCode.ProjectFile := nil;
     152      else begin
     153        if Assigned(FOnShowProject) then
     154          FOnShowProject(nil);
     155      end;
    150156  finally
    151157    EndUpdate;
     
    158164end;
    159165
    160 procedure TFormProject.UpdateProjectFiles(Node: TTreeNode; Files: TProjectFileList);
     166procedure TFormProject.UpdateProjectFiles(Node: TTreeNode; Files: TProjectFiles);
    161167var
    162168  I: Integer;
  • trunk/IDE/Forms/FormProjectNew.pas

    r74 r75  
    1 unit UFormProjectNew;
    2 
    3 {$mode delphi}
     1unit FormProjectNew;
    42
    53interface
     
    2321    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
    2422      Selected: Boolean);
    25   private
    26     { private declarations }
    2723  public
    2824    procedure UpdateInterface;
    2925  end;
    30 
    31 var
    32   FormProjectNew: TFormProjectNew;
    3326
    3427
     
    3629
    3730uses
    38   UCore, UFormMain, UProject;
     31  Core, FormMain, Project;
    3932
    4033{$R *.lfm}
     
    7265    ListView1.BeginUpdate;
    7366    ListView1.Items.Clear;
    74     with Core do
     67    with Core.Core do
    7568    for I := 0 to ProjectTemplates.Count - 1 do
    7669    with TProjectTemplate(ProjectTemplates[I]) do
    77     if (not Assigned(Core.Project) and IsProject) or Assigned(Core.Project) then begin
     70    if (not Assigned(Core.Core.Project) and IsProject) or
     71    Assigned(Core.Core.Project) then begin
    7872      NewItem := ListView1.Items.Add;
    7973      NewItem.Caption := Name;
  • trunk/IDE/Forms/FormSourceCode.pas

    r74 r75  
    1 unit UFormSourceCode;
    2 
    3 {$mode objfpc}{$H+}
     1unit FormSourceCode;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
    9   SynEdit, SynHighlighterPas, UProject;
     7  SynEdit, SynHighlighterPas, Project;
    108
    119type
     
    2422    procedure Save;
    2523    procedure UpdateInterface;
     24    procedure SelectFile(FileName: string; Position: TPoint);
    2625  end;
    2726
    28 var
    29   FormSourceCode: TFormSourceCode;
    3027
    3128implementation
    3229
    3330uses
    34   UFormMain, UCore;
     31  FormMain, Core;
    3532
    3633{$R *.lfm}
     
    4138begin
    4239  Save;
    43   if Assigned(Core.Project) and Assigned(ProjectFile) then
     40  if Assigned(Core.Core.Project) and Assigned(ProjectFile) then
    4441    ProjectFile.Modified := True;
    4542end;
     
    6259procedure TFormSourceCode.UpdateInterface;
    6360begin
    64   SynEditSource.Enabled := Assigned(Core.Project);
    65   if not Assigned(Core.Project) then SynEditSource.ClearAll;
     61  SynEditSource.Enabled := Assigned(Core.Core.Project);
     62  if not Assigned(Core.Core.Project) then SynEditSource.ClearAll;
     63end;
     64
     65procedure TFormSourceCode.SelectFile(FileName: string; Position: TPoint);
     66var
     67  ProjectFile: TProjectFile;
     68begin
     69  with Core.Core do begin
     70    ProjectFile := Project.Files.SearchFile(FileName);
     71    if Assigned(ProjectFile) then
     72      SynEditSource.Lines.Assign(ProjectFile.Source)
     73      else if FileExists(FileName) then
     74        SynEditSource.Lines.LoadFromFile(FileName);
     75    SynEditSource.CaretXY := Position;
     76    TForm(SynEditSource.Owner).Show;
     77    SynEditSource.SetFocus;
     78  end;
    6679end;
    6780
  • trunk/IDE/Forms/FormTargetCode.lfm

    r74 r75  
    11object FormTargetCode: TFormTargetCode
    22  Left = 403
    3   Height = 303
     3  Height = 454
    44  Top = 186
    5   Width = 398
     5  Width = 597
    66  Caption = 'Target code'
    7   ClientHeight = 303
    8   ClientWidth = 398
    9   LCLVersion = '0.9.31'
     7  ClientHeight = 454
     8  ClientWidth = 597
     9  DesignTimePPI = 144
     10  LCLVersion = '3.2.0.0'
    1011  inline SynEdit1: TSynEdit
    1112    Left = 0
    12     Height = 303
     13    Height = 454
    1314    Top = 0
    14     Width = 398
     15    Width = 597
    1516    Align = alClient
    16     Font.Height = -13
     17    Font.Height = -20
    1718    Font.Name = 'Courier New'
    1819    Font.Pitch = fpFixed
     
    2122    ParentFont = False
    2223    TabOrder = 0
    23     Gutter.Width = 57
     24    Gutter.Width = 85
    2425    Gutter.MouseActions = <   
    2526      item
     
    527528        Command = emcMouseLink
    528529      end>
     530    MouseTextActions = <>
    529531    MouseSelActions = <   
    530532      item
     
    534536    VisibleSpecialChars = [vscSpace, vscTabAtLast]
    535537    ReadOnly = True
     538    SelectedColor.BackPriority = 50
     539    SelectedColor.ForePriority = 50
     540    SelectedColor.FramePriority = 50
     541    SelectedColor.BoldPriority = 50
     542    SelectedColor.ItalicPriority = 50
     543    SelectedColor.UnderlinePriority = 50
     544    SelectedColor.StrikeOutPriority = 50
    536545    BracketHighlightStyle = sbhsBoth
    537546    BracketMatchColor.Background = clNone
     
    547556    inline SynLeftGutterPartList1: TSynGutterPartList
    548557      object SynGutterMarks1: TSynGutterMarks
    549         Width = 24
     558        Width = 36
    550559        MouseActions = <>
    551560      end
    552561      object SynGutterLineNumber1: TSynGutterLineNumber
    553         Width = 17
     562        Width = 25
    554563        MouseActions = <>
    555564        MarkupInfo.Background = clBtnFace
     
    561570      end
    562571      object SynGutterChanges1: TSynGutterChanges
    563         Width = 4
     572        Width = 6
    564573        MouseActions = <>
    565574        ModifiedColor = 59900
     
    567576      end
    568577      object SynGutterSeparator1: TSynGutterSeparator
    569         Width = 2
     578        Width = 3
    570579        MouseActions = <>
     580        MarkupInfo.Background = clWhite
     581        MarkupInfo.Foreground = clGray
    571582      end
    572583      object SynGutterCodeFolding1: TSynGutterCodeFolding
     584        Width = 15
    573585        MouseActions = <       
    574586          item
     
    625637  object SynPasSyn1: TSynPasSyn
    626638    Enabled = False
    627     AsmAttri.FrameEdges = sfeAround
    628     CommentAttri.FrameEdges = sfeAround
    629     IDEDirectiveAttri.FrameEdges = sfeAround
    630     IdentifierAttri.FrameEdges = sfeAround
    631     KeyAttri.FrameEdges = sfeAround
    632     NumberAttri.FrameEdges = sfeAround
    633     SpaceAttri.FrameEdges = sfeAround
    634     StringAttri.FrameEdges = sfeAround
    635     SymbolAttri.FrameEdges = sfeAround
    636     CaseLabelAttri.FrameEdges = sfeAround
    637     DirectiveAttri.FrameEdges = sfeAround
    638639    CompilerMode = pcmDelphi
    639640    NestedComments = False
    640     left = 174
    641     top = 38
     641    TypeHelpers = True
     642    StringMultilineMode = []
     643    Left = 261
     644    Top = 57
    642645  end
    643646  object SynCppSyn1: TSynCppSyn
    644647    DefaultFilter = 'Soubory C++ (*.c,*.cpp,*.h,*.hpp,*.hh)|*.c;*.cpp;*.h;*.hpp;*.hh'
    645648    Enabled = False
    646     AsmAttri.FrameEdges = sfeAround
    647     CommentAttri.FrameEdges = sfeAround
    648     DirecAttri.FrameEdges = sfeAround
    649     IdentifierAttri.FrameEdges = sfeAround
    650     InvalidAttri.FrameEdges = sfeAround
    651     KeyAttri.FrameEdges = sfeAround
    652     NumberAttri.FrameEdges = sfeAround
    653     SpaceAttri.FrameEdges = sfeAround
    654     StringAttri.FrameEdges = sfeAround
    655     SymbolAttri.FrameEdges = sfeAround
    656     left = 176
    657     top = 85
     649    Left = 264
     650    Top = 128
    658651  end
    659652  object SynXMLSyn1: TSynXMLSyn
    660653    DefaultFilter = 'XML Dokument (*.xml,*.xsd,*.xsl,*.xslt,*.dtd)|*.xml;*.xsd;*.xsl;*.xslt;*.dtd'
    661654    Enabled = False
    662     ElementAttri.FrameEdges = sfeAround
    663     AttributeAttri.FrameEdges = sfeAround
    664     NamespaceAttributeAttri.FrameEdges = sfeAround
    665     AttributeValueAttri.FrameEdges = sfeAround
    666     NamespaceAttributeValueAttri.FrameEdges = sfeAround
    667     TextAttri.FrameEdges = sfeAround
    668     CDATAAttri.FrameEdges = sfeAround
    669     EntityRefAttri.FrameEdges = sfeAround
    670     ProcessingInstructionAttri.FrameEdges = sfeAround
    671     CommentAttri.FrameEdges = sfeAround
    672     DocTypeAttri.FrameEdges = sfeAround
    673     SpaceAttri.FrameEdges = sfeAround
    674     SymbolAttri.FrameEdges = sfeAround
    675655    WantBracesParsed = False
    676     left = 178
    677     top = 133
     656    Left = 267
     657    Top = 200
    678658  end
    679659end
  • trunk/IDE/Forms/FormTargetCode.pas

    r74 r75  
    1 unit UFormTargetCode;
    2 
    3 {$mode Delphi}{$H+}
     1unit FormTargetCode;
    42
    53interface
     
    86  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, SynEdit,
    97  SynHighlighterMulti, SynHighlighterVB, SynHighlighterPas, SynHighlighterCpp,
    10   SynHighlighterXML, UProject;
     8  SynHighlighterXML, Project;
    119
    1210type
     
    2725  end;
    2826
    29 var
    30   FormTargetCode: TFormTargetCode;
    3127
    3228implementation
     
    3531
    3632uses
    37   UCore;
     33  Core;
    3834
    3935procedure TFormTargetCode.SetProjectFile(AValue: TProjectFile);
     
    4844procedure TFormTargetCode.UpdateInterface;
    4945begin
    50   SynEdit1.Enabled := Assigned(Core.Project);
    51   if not Assigned(Core.Project) then SynEdit1.ClearAll;
     46  SynEdit1.Enabled := Assigned(Core.Core.Project);
     47  if not Assigned(Core.Core.Project) then SynEdit1.ClearAll;
    5248end;
    53 
    5449
    5550end.
  • trunk/IDE/Forms/FormTargetOptions.pas

    r74 r75  
    1 unit UFormTargetOptions;
    2 
    3 {$mode delphi}
     1unit FormTargetOptions;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   UTarget;
     7  Target;
    108
    119type
     
    3432  end;
    3533
    36 var
    37   FormTargetOptions: TFormTargetOptions;
    3834
    3935implementation
  • trunk/IDE/Forms/FormTargetProject.pas

    r74 r75  
    1 unit UFormTargetProject;
    2 
    3 {$mode delphi}
     1unit FormTargetProject;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
    9   UProject;
     6  Classes, SysUtils, LazFileUtils, Forms, Controls, Graphics, Dialogs, ComCtrls,
     7  Project;
    108
    119type
     10  TShowTargetCodeEvent = procedure(ProjectFile: TProjectFile) of object;
    1211
    1312  { TFormTargetProject }
     
    1716    procedure TreeViewProjectChange(Sender: TObject; Node: TTreeNode);
    1817  private
    19     procedure UpdateProjectFiles(Node: TTreeNode; Files: TProjectFileList);
     18    FOnShowTargetCode: TShowTargetCodeEvent;
     19    procedure UpdateProjectFiles(Node: TTreeNode; Files: TProjectFiles);
    2020    procedure UpdateProjectTree;
    2121  public
    2222    procedure UpdateInterface;
     23    property OnShowTargetCode: TShowTargetCodeEvent read FOnShowTargetCode
     24      write FOnShowTargetCode;
    2325  end;
    24 
    25 var
    26   FormTargetProject: TFormTargetProject;
    2726
    2827
     
    3231
    3332uses
    34   UCore, UFormMain, UFormTargetCode;
     33  Core, FormMain, FormTargetCode;
    3534
    3635procedure TFormTargetProject.UpdateProjectTree;
     
    3837  NewNode: TTreeNode;
    3938begin
    40   with Core, FormMain, TreeViewProject, Items do begin
     39  with Core.Core, FormMain.FormMain, TreeViewProject, Items do begin
    4140    BeginUpdate;
    4241    Clear;
     
    5049      (TreeViewProject.TopItem.Count > 0) then
    5150      TreeViewProject.TopItem.Items[0].Selected := True
    52       else FormTargetCode.ProjectFile := nil;
     51      else begin
     52        if Assigned(FOnShowTargetCode) then
     53          FOnShowTargetCode(nil);
     54      end;
    5355  end;
    5456end;
     
    6264  Node: TTreeNode);
    6365begin
    64   with FormMain, FormTargetCode do
     66  with FormMain.FormMain do
    6567  if Assigned(Node) then begin
    6668    if TProjectFile(Node.Data) is TProjectFile then begin
    67       ProjectFile := TProjectFile(Node.Data);
    68       FormMain.TabSheetTarget.Show;
    69       SynEdit1.Lines.Assign(TProjectFile(Node.Data).Source);
     69      if Assigned(FOnShowTargetCode) then
     70        FOnShowTargetCode(TProjectFile(Node.Data))
    7071    end;
    7172  end;
    7273end;
    7374
    74 procedure TFormTargetProject.UpdateProjectFiles(Node: TTreeNode; Files: TProjectFileList);
     75procedure TFormTargetProject.UpdateProjectFiles(Node: TTreeNode; Files: TProjectFiles);
    7576var
    7677  I: Integer;
  • trunk/IDE/Forms/FormTargets.lfm

    r74 r75  
    11object FormTargets: TFormTargets
    22  Left = 292
    3   Height = 343
     3  Height = 514
    44  Top = 138
    5   Width = 522
     5  Width = 783
    66  Caption = 'Targets'
    7   ClientHeight = 343
    8   ClientWidth = 522
     7  ClientHeight = 514
     8  ClientWidth = 783
     9  DesignTimePPI = 144
    910  OnShow = FormShow
    10   LCLVersion = '1.1'
     11  LCLVersion = '3.2.0.0'
    1112  object ListView1: TListView
    12     Left = 8
    13     Height = 327
    14     Top = 8
    15     Width = 508
     13    Left = 12
     14    Height = 490
     15    Top = 12
     16    Width = 762
    1617    Anchors = [akTop, akLeft, akRight, akBottom]
    1718    Columns = <   
    1819      item
    1920        Caption = 'Name'
    20         Width = 80
     21        Width = 120
    2122      end   
    2223      item
    2324        Caption = 'Compiler path'
    24         Width = 200
     25        Width = 300
    2526      end   
    2627      item
    2728        Caption = 'Executor path'
    28         Width = 200
     29        Width = 327
    2930      end>
    3031    OwnerData = True
     
    3940  object PopupMenu1: TPopupMenu
    4041    Images = FormMain.ImageList1
    41     left = 124
    42     top = 69
     42    Left = 186
     43    Top = 104
    4344  end
    4445  object ActionList1: TActionList
    45     left = 200
    46     top = 72
     46    Left = 300
     47    Top = 108
    4748    object ATargetOptions: TAction
    4849      Caption = 'Options'
  • trunk/IDE/Forms/FormTargets.pas

    r74 r75  
    1 unit UFormTargets;
    2 
    3 {$mode objfpc}{$H+}
     1unit FormTargets;
    42
    53interface
     
    2725  end;
    2826
    29 var
    30   FormTargets: TFormTargets;
    3127
    3228implementation
     
    3531
    3632uses
    37   UCore, UFormMain, UCompiler, UProducer, UTarget,
    38   UFormTargetOptions;
     33  Core, FormMain, Compiler, Producer, Target, FormTargetOptions;
    3934
    4035resourcestring
     
    5045
    5146procedure TFormTargets.ATargetOptionsExecute(Sender: TObject);
     47var
     48  FormTargetOptions: TFormTargetOptions;
    5249begin
    5350  if Assigned(ListView1.Selected) then begin
     51    FormTargetOptions := TFormTargetOptions.Create(nil);
    5452    FormTargetOptions.LoadControls(TTarget(ListView1.Selected.Data));
    5553    if FormTargetOptions.ShowModal = mrOk then begin
     
    5755      ReloadList;
    5856    end;
     57    FormTargetOptions.Free;
    5958  end;
    6059end;
     
    6261procedure TFormTargets.ListView1Data(Sender: TObject; Item: TListItem);
    6362begin
    64   if (Item.Index >= 0) and (Item.Index < Core.Compiler.Targets.Count) then
    65   with TTarget(Core.Compiler.Targets[Item.Index]) do begin
     63  if (Item.Index >= 0) and (Item.Index < Core.Core.Compiler.Targets.Count) then
     64  with TTarget(Core.Core.Compiler.Targets[Item.Index]) do begin
    6665    Item.Caption := Name;
    67     Item.Data := Core.Compiler.Targets[Item.Index];
     66    Item.Data := Core.Core.Compiler.Targets[Item.Index];
    6867    //Item.SubItems.Add(Producer.CompilerPath);
    6968  end;
     
    7271procedure TFormTargets.ReloadList;
    7372begin
    74   ListView1.Items.Count := Core.Compiler.Targets.Count;
     73  ListView1.Items.Count := Core.Core.Compiler.Targets.Count;
    7574  ListView1.Refresh;
    7675end;
  • trunk/IDE/Languages/Transpascal.cs.po

    r74 r75  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: taboutform.caption
    13 msgctxt "taboutform.caption"
    14 msgid "About"
    15 msgstr "O programu"
    16 
    17 #: taboutform.okbutton.caption
    18 msgctxt "taboutform.okbutton.caption"
    19 msgid "OK"
    20 msgstr "OK"
    21 
    22 #: tcodeform.caption
    23 msgctxt "tcodeform.caption"
    24 msgid "Source code"
    25 msgstr "Zdrojový kód"
    26 
    27 #: tcompiledform.caption
    28 msgid "Compiled code"
    29 msgstr "Přeložený zdroj"
    30 
    31 #: tcompilersettingsform.button1.caption
    32 msgctxt "tcompilersettingsform.button1.caption"
    33 msgid "Browse"
    34 msgstr "Procházet..."
    35 
    36 #: tcompilersettingsform.buttoncancel.caption
    37 msgctxt "tcompilersettingsform.buttoncancel.caption"
    38 msgid "Cancel"
    39 msgstr "Zrušit"
    40 
    41 #: tcompilersettingsform.buttonok.caption
    42 msgctxt "tcompilersettingsform.buttonok.caption"
    43 msgid "Ok"
    44 msgstr "Ok"
    45 
    46 #: tcompilersettingsform.caption
    47 msgctxt "tcompilersettingsform.caption"
     12#: formmain.sbuildfinished
     13#, object-pascal-format
     14msgctxt "formmain.sbuildfinished"
     15msgid "Build finished in %s seconds"
     16msgstr ""
     17
     18#: formproject.senternewfilename
     19#, fuzzy
     20msgctxt "formproject.senternewfilename"
     21msgid "Enter new file name"
     22msgstr "Zadejte nové jméno souboru"
     23
     24#: formproject.srenamesourcefile
     25#, fuzzy
     26msgctxt "formproject.srenamesourcefile"
     27msgid "Rename source file"
     28msgstr "Přejmenování zdrojového souboru"
     29
     30#: formtargets.scompileroptions
     31#, fuzzy
     32msgctxt "formtargets.scompileroptions"
    4833msgid "Compiler options"
    49 msgstr "Volbny překladače"
    50 
    51 #: tcompilersettingsform.label1.caption
    52 msgctxt "tcompilersettingsform.label1.caption"
    53 msgid "Compiler path:"
    54 msgstr "Cesta překladače:"
    55 
    56 #: tformabout.caption
    57 msgctxt "tformabout.caption"
    58 msgid "About"
    59 msgstr "O programu"
    60 
    61 #: tformabout.okbutton.caption
    62 msgctxt "tformabout.okbutton.caption"
    63 msgid "OK"
    64 msgstr "OK"
    65 
    66 #: tformcodetree.caption
    67 msgctxt "tformcodetree.caption"
    68 msgid "Code tree"
    69 msgstr "Strom kódu"
    70 
    71 #: tformcompilers.caption
    72 msgid "Compilers"
    73 msgstr "Překladače"
    74 
    75 #: tformcompilers.listview1.columns[0].caption
    76 msgctxt "tformcompilers.listview1.columns[0].caption"
    77 msgid "Name"
    78 msgstr "Jméno"
    79 
    80 #: tformcompilers.listview1.columns[1].caption
    81 msgctxt "tformcompilers.listview1.columns[1].caption"
    82 msgid "Execution path"
    83 msgstr "Cesta vykonání"
    84 
    85 #: tformcompilersettings.button1.caption
    86 msgctxt "tformcompilersettings.button1.caption"
    87 msgid "Browse"
    88 msgstr "Procházet..."
    89 
    90 #: tformcompilersettings.buttoncancel.caption
    91 msgctxt "tformcompilersettings.buttoncancel.caption"
    92 msgid "Cancel"
    93 msgstr "Zrušit"
    94 
    95 #: tformcompilersettings.buttonok.caption
    96 msgctxt "tformcompilersettings.buttonok.caption"
    97 msgid "Ok"
    98 msgstr "Ok"
    99 
    100 #: tformcompilersettings.caption
    101 msgctxt "tformcompilersettings.caption"
    102 msgid "Compiler options"
    103 msgstr "Volbny překladače"
    104 
    105 #: tformcompilersettings.label1.caption
    106 msgctxt "tformcompilersettings.label1.caption"
    107 msgid "Compiler path:"
    108 msgstr "Cesta překladače:"
    109 
    110 #: tformexternalproduceroutput.caption
    111 msgctxt "tformexternalproduceroutput.caption"
    112 msgid "External producer"
    113 msgstr "Vnější generátor"
     34msgstr "Volby překladače"
     35
     36#: formtargets.scompilerpath
     37#, fuzzy
     38msgctxt "formtargets.scompilerpath"
     39msgid "Compiler path"
     40msgstr "Cesta překladače"
     41
     42#: project.snewproject
     43#, fuzzy
     44msgctxt "project.snewproject"
     45msgid "New project"
     46msgstr "Nový projekt"
     47
     48#: projecttemplates.sconsoleapplication
     49#, fuzzy
     50msgctxt "projecttemplates.sconsoleapplication"
     51msgid "Console application"
     52msgstr "Konzolová aplikace"
     53
     54#: projecttemplates.sguiapplication
     55#, fuzzy
     56msgctxt "projecttemplates.sguiapplication"
     57msgid "GUI application"
     58msgstr "GUI aplikace"
     59
     60#: projecttemplates.spackage
     61#, fuzzy
     62msgctxt "projecttemplates.spackage"
     63msgid "Package"
     64msgstr "Balíček"
     65
     66#: projecttemplates.sunit
     67#, fuzzy
     68msgctxt "projecttemplates.sunit"
     69msgid "Unit"
     70msgstr "Jednotka"
    11471
    11572#: tformmain.aabout.caption
     
    149106
    150107#: tformmain.aprojectnew.caption
    151 #| msgid "New"
    152108msgctxt "tformmain.aprojectnew.caption"
    153109msgid "New..."
     
    339295msgstr "Cílový projekt"
    340296
    341 #: tformmessages.caption
    342 msgctxt "tformmessages.caption"
    343 msgid "Messages"
    344 msgstr "Zprávy"
    345 
    346 #: tformmessages.listview1.columns[0].caption
    347 msgctxt "tformmessages.listview1.columns[0].caption"
    348 msgid "File"
    349 msgstr "Soubor"
    350 
    351 #: tformmessages.listview1.columns[1].caption
    352 msgctxt "tformmessages.listview1.columns[1].caption"
    353 msgid "Position"
    354 msgstr "Pozice"
    355 
    356 #: tformmessages.listview1.columns[2].caption
    357 msgctxt "tformmessages.listview1.columns[2].caption"
    358 msgid "Message"
    359 msgstr "Zpráva"
    360 
    361 #: tformoptions.buttoncancel.caption
    362 msgctxt "tformoptions.buttoncancel.caption"
    363 msgid "Cancel"
    364 msgstr "Zrušit"
    365 
    366 #: tformoptions.buttonok.caption
    367 msgctxt "tformoptions.buttonok.caption"
    368 msgid "Ok"
    369 msgstr "Ok"
    370 
    371 #: tformoptions.caption
    372 msgctxt "tformoptions.caption"
    373 msgid "Options"
    374 msgstr "Volby"
    375 
    376 #: tformoptions.checkboxreopenproject.caption
    377 msgid "Reopen last opened project"
    378 msgstr "Znovuotevřít  naposledy otevřený projekt"
    379 
    380 #: tformoptions.label3.caption
    381 msgid "Interface language:"
    382 msgstr "Jazyk rozhraní:"
    383 
    384 #: tformproducers.caption
    385 msgctxt "tformproducers.caption"
    386 msgid "Producers"
    387 msgstr "Tvůrci"
    388 
    389 #: tformproducers.listview1.columns[0].caption
    390 msgctxt "tformproducers.listview1.columns[0].caption"
    391 msgid "Name"
    392 msgstr "Jméno"
    393 
    394 #: tformproducers.listview1.columns[1].caption
    395 msgctxt "tformproducers.listview1.columns[1].caption"
    396 msgid "Execution path"
    397 msgstr "Cesta vykonání"
    398 
    399297#: tformproject.aadd.caption
    400298msgid "Add"
    401 msgstr "Přidat"
     299msgstr ""
    402300
    403301#: tformproject.adelete.caption
    404302msgid "Delete"
    405 msgstr "Smazat"
     303msgstr ""
    406304
    407305#: tformproject.arename.caption
    408306msgid "Rename"
    409 msgstr "Přejmenovat"
     307msgstr ""
    410308
    411309#: tformproject.ashow.caption
    412310msgid "Show"
    413 msgstr "Ukázat"
     311msgstr ""
    414312
    415313#: tformproject.caption
     314#, fuzzy
    416315msgctxt "tformproject.caption"
    417316msgid "Project manager"
    418317msgstr "Správce projektu"
    419318
    420 #: tformprojectnew.buttoncancel.caption
    421 msgctxt "tformprojectnew.buttoncancel.caption"
    422 msgid "Cancel"
    423 msgstr "Zrušit"
    424 
    425 #: tformprojectnew.buttonok.caption
    426 msgctxt "tformprojectnew.buttonok.caption"
    427 msgid "Ok"
    428 msgstr "Ok"
    429 
    430 #: tformprojectnew.caption
    431 msgid "New item"
    432 msgstr "Nová položka"
    433 
    434 #: tformsourcecode.caption
    435 msgctxt "tformsourcecode.caption"
    436 msgid "Source code"
    437 msgstr "Zdrojový kód"
    438 
    439319#: tformtargetcode.caption
     320#, fuzzy
    440321msgctxt "tformtargetcode.caption"
    441322msgid "Target code"
    442323msgstr "Cílový kód"
    443324
    444 #: tformtargetoptions.button1.caption
    445 msgctxt "tformtargetoptions.button1.caption"
    446 msgid "Ok"
    447 msgstr "Ok"
    448 
    449 #: tformtargetoptions.button2.caption
    450 msgctxt "tformtargetoptions.button2.caption"
    451 msgid "Cancel"
    452 msgstr "Zrušit"
    453 
    454 #: tformtargetoptions.buttonexecutorselect.caption
    455 msgctxt "tformtargetoptions.buttonexecutorselect.caption"
    456 msgid "Select..."
    457 msgstr "Výběr..."
    458 
    459 #: tformtargetoptions.buttonproducerselect.caption
    460 msgctxt "tformtargetoptions.buttonproducerselect.caption"
    461 msgid "Select..."
    462 msgstr "Výběr..."
    463 
    464 #: tformtargetoptions.caption
    465 msgctxt "tformtargetoptions.caption"
    466 msgid "Target options"
    467 msgstr "Volby cíle"
    468 
    469 #: tformtargetoptions.label1.caption
    470 msgid "Name:"
    471 msgstr "Jméno:"
    472 
    473 #: tformtargetoptions.label2.caption
    474 msgctxt "tformtargetoptions.label2.caption"
    475 msgid "Compiler path:"
    476 msgstr "Cesta překladače:"
    477 
    478 #: tformtargetoptions.label3.caption
    479 msgid "Executor path:"
    480 msgstr "Cesta vykonávače:"
    481 
    482 #: tformtargetoptions.labelname.caption
    483 msgid "    "
    484 msgstr "   "
    485 
    486 #: tformtargetproject.caption
    487 msgid "FormTargetProject"
    488 msgstr ""
    489 
    490325#: tformtargets.atargetoptions.caption
     326#, fuzzy
    491327msgctxt "tformtargets.atargetoptions.caption"
    492328msgid "Options"
     
    494330
    495331#: tformtargets.atargetoptions.hint
    496 msgctxt "tformtargets.atargetoptions.hint"
    497332msgid "Target options"
    498 msgstr "Volby cíle"
     333msgstr ""
    499334
    500335#: tformtargets.caption
     336#, fuzzy
    501337msgctxt "tformtargets.caption"
    502338msgid "Targets"
     
    504340
    505341#: tformtargets.listview1.columns[0].caption
    506 msgctxt "tformtargets.listview1.columns[0].caption"
    507342msgid "Name"
    508 msgstr "Jméno"
     343msgstr ""
    509344
    510345#: tformtargets.listview1.columns[1].caption
    511 #| msgid "Execution path"
     346#, fuzzy
    512347msgctxt "tformtargets.listview1.columns[1].caption"
    513348msgid "Compiler path"
     
    516351#: tformtargets.listview1.columns[2].caption
    517352msgid "Executor path"
    518 msgstr "Cesta vykonávače"
    519 
    520 #: tmainform.aabout.caption
    521 msgctxt "tmainform.aabout.caption"
    522 msgid "About..."
    523 msgstr "O aplikaci..."
    524 
    525 #: tmainform.abuild.caption
    526 msgctxt "tmainform.abuild.caption"
    527 msgid "Build"
    528 msgstr "Sestavit"
    529 
    530 #: tmainform.aexit.caption
    531 msgctxt "tmainform.aexit.caption"
    532 msgid "Exit"
    533 msgstr "Ukončit"
    534 
    535 #: tmainform.ahomepage.caption
    536 msgctxt "tmainform.ahomepage.caption"
    537 msgid "Homepage"
    538 msgstr "Domovská stránka"
    539 
    540 #: tmainform.apause.caption
    541 msgctxt "tmainform.apause.caption"
    542 msgid "Pause"
    543 msgstr "Pozastavit"
    544 
    545 #: tmainform.aprojectclose.caption
    546 msgctxt "tmainform.aprojectclose.caption"
    547 msgid "Close"
    548 msgstr "Zavřít"
    549 
    550 #: tmainform.aprojectnew.caption
    551 msgctxt "tmainform.aprojectnew.caption"
    552 msgid "New"
    553 msgstr "Nový"
    554 
    555 #: tmainform.aprojectnew.hint
    556 msgctxt "tmainform.aprojectnew.hint"
    557 msgid "Create new project"
    558 msgstr "Vytvořit nový projekt"
    559 
    560 #: tmainform.aprojectopen.caption
    561 msgctxt "tmainform.aprojectopen.caption"
    562 msgid "Open..."
    563 msgstr "Otevřít..."
    564 
    565 #: tmainform.aprojectopen.hint
    566 msgctxt "tmainform.aprojectopen.hint"
    567 msgid "Open project"
    568 msgstr "Otevřít projekt"
    569 
    570 #: tmainform.aprojectsave.caption
    571 msgctxt "tmainform.aprojectsave.caption"
    572 msgid "Save"
    573 msgstr "Uložit"
    574 
    575 #: tmainform.aprojectsave.hint
    576 msgctxt "tmainform.aprojectsave.hint"
    577 msgid "Save project to disk"
    578 msgstr "Uložit projekt na disk"
    579 
    580 #: tmainform.aprojectsaveas.caption
    581 msgctxt "tmainform.aprojectsaveas.caption"
    582 msgid "Save as..."
    583 msgstr "Uložit jako..."
    584 
    585 #: tmainform.aprojectsaveas.hint
    586 msgctxt "tmainform.aprojectsaveas.hint"
    587 msgid "Save project with custom name"
    588 msgstr "Uložit projekt s vlastním jménem"
    589 
    590 #: tmainform.areset.caption
    591 msgctxt "tmainform.areset.caption"
    592 msgid "Reset"
    593 msgstr "Vynulovat"
    594 
    595 #: tmainform.arun.caption
    596 msgctxt "tmainform.arun.caption"
    597 msgid "Run"
    598 msgstr "Spustit"
    599 
    600 #: tmainform.aruntocursor.caption
    601 msgctxt "tmainform.aruntocursor.caption"
    602 msgid "Run to cursor"
    603 msgstr "Spustit po ukazatel"
    604 
    605 #: tmainform.astepin.caption
    606 msgctxt "tmainform.astepin.caption"
    607 msgid "Step in"
    608 msgstr "Vejít do"
    609 
    610 #: tmainform.astepout.caption
    611 msgctxt "tmainform.astepout.caption"
    612 msgid "Step out"
    613 msgstr "Vyjít ven"
    614 
    615 #: tmainform.astepover.caption
    616 msgctxt "tmainform.astepover.caption"
    617 msgid "Step over"
    618 msgstr "Přejít přes"
    619 
    620 #: tmainform.astop.caption
    621 msgctxt "tmainform.astop.caption"
    622 msgid "Stop"
    623 msgstr "Zastavit"
    624 
    625 #: tmainform.aviewcodetree.caption
    626 msgctxt "tmainform.aviewcodetree.caption"
    627 msgid "Code tree"
    628 msgstr "Strom kódu"
    629 
    630 #: tmainform.aviewcompiledsoruce.caption
    631 msgctxt "tmainform.aviewcompiledsoruce.caption"
    632 msgid "Compiled source"
    633 msgstr "Přeložený zdroj"
    634 
    635 #: tmainform.aviewmessages.caption
    636 msgctxt "tmainform.aviewmessages.caption"
    637 msgid "Messages"
    638 msgstr "Zprávy"
    639 
    640 #: tmainform.aviewobjectinspector.caption
    641 msgctxt "tmainform.aviewobjectinspector.caption"
    642 msgid "Object inspector"
    643 msgstr "Inspektor objektů"
    644 
    645 #: tmainform.aviewoptions.caption
    646 msgctxt "tmainform.aviewoptions.caption"
    647 msgid "Options"
    648 msgstr "Volby"
    649 
    650 #: tmainform.aviewproject.caption
    651 msgctxt "tmainform.aviewproject.caption"
    652 msgid "Project manager"
    653 msgstr "Správce projektu"
    654 
    655 #: tmainform.aviewsourceeditor.caption
    656 msgctxt "tmainform.aviewsourceeditor.caption"
    657 msgid "Source editor"
    658 msgstr "Zdrojový editor"
    659 
    660 #: tmainform.aviewtargets.caption
    661 msgctxt "tmainform.aviewtargets.caption"
    662 msgid "Targets"
    663 msgstr "Cíle"
    664 
    665 #: tmainform.caption
    666 msgctxt "tmainform.caption"
    667 msgid "Transpascal IDE"
    668 msgstr "Transpascal IDE"
    669 
    670 #: tmainform.menuitem1.caption
    671 msgctxt "tmainform.menuitem1.caption"
    672 msgid "Project"
    673 msgstr "Projekt"
    674 
    675 #: tmainform.menuitem12.caption
    676 msgctxt "tmainform.menuitem12.caption"
    677 msgid "-"
    678 msgstr "-"
    679 
    680 #: tmainform.menuitem15.caption
    681 msgctxt "tmainform.menuitem15.caption"
    682 msgid "View"
    683 msgstr "Zobrazit"
    684 
    685 #: tmainform.menuitem22.caption
    686 msgctxt "tmainform.menuitem22.caption"
    687 msgid "-"
    688 msgstr "-"
    689 
    690 #: tmainform.menuitem27.caption
    691 msgctxt "tmainform.menuitem27.caption"
    692 msgid "-"
    693 msgstr "-"
    694 
    695 #: tmainform.menuitem7.caption
    696 msgctxt "tmainform.menuitem7.caption"
    697 msgid "Run"
    698 msgstr "Spustit"
    699 
    700 #: tmainform.menuitem9.caption
    701 msgctxt "tmainform.menuitem9.caption"
    702 msgid "Help"
    703 msgstr "Nápověda"
    704 
    705 #: tmainform.menuitemopenrecent.caption
    706 msgctxt "tmainform.menuitemopenrecent.caption"
    707 msgid "Open recent"
    708 msgstr "Otevřít nedávné"
    709 
    710 #: tmainform.menuitemproducer.caption
    711 #| msgid "Producer"
    712 msgctxt "tmainform.menuitemproducer.caption"
    713 msgid "Target"
    714 msgstr "Cíl"
    715 
    716 #: tmainform.tabsheetbreakpoints.caption
    717 msgctxt "tmainform.tabsheetbreakpoints.caption"
    718 msgid "Breakpoints"
    719 msgstr "Body zastavení"
    720 
    721 #: tmainform.tabsheetcodetree.caption
    722 msgctxt "tmainform.tabsheetcodetree.caption"
    723 msgid "Code Tree"
    724 msgstr "Strom kódu"
    725 
    726 #: tmainform.tabsheetcompiledproject.caption
    727 msgctxt "tmainform.tabsheetcompiledproject.caption"
    728 msgid "Target project"
    729 msgstr "Cílový projekt"
    730 
    731 #: tmainform.tabsheetmessages.caption
    732 msgctxt "tmainform.tabsheetmessages.caption"
    733 msgid "Messages"
    734 msgstr "Zprávy"
    735 
    736 #: tmainform.tabsheetproject.caption
    737 msgctxt "tmainform.tabsheetproject.caption"
    738 msgid "Project"
    739 msgstr "Projekt"
    740 
    741 #: tmainform.tabsheetsource.caption
    742 msgctxt "tmainform.tabsheetsource.caption"
    743 msgid "Source code"
    744 msgstr "Zdrojový kód"
    745 
    746 #: tmainform.tabsheettarget.caption
    747 msgctxt "tmainform.tabsheettarget.caption"
    748 msgid "Target code"
    749 msgstr "Cílový kód"
    750 
    751 #: tmessagesform.caption
    752 msgctxt "tmessagesform.caption"
    753 msgid "Messages"
    754 msgstr "Zprávy"
    755 
    756 #: tmessagesform.listview1.columns[0].caption
    757 msgctxt "tmessagesform.listview1.columns[0].caption"
    758 msgid "File"
    759 msgstr "Soubor"
    760 
    761 #: tmessagesform.listview1.columns[1].caption
    762 msgctxt "tmessagesform.listview1.columns[1].caption"
    763 msgid "Position"
    764 msgstr "Pozice"
    765 
    766 #: tmessagesform.listview1.columns[2].caption
    767 msgctxt "tmessagesform.listview1.columns[2].caption"
    768 msgid "Message"
    769 msgstr "Zpráva"
    770 
    771 #: tprojectmanager.caption
    772 msgctxt "tprojectmanager.caption"
    773 msgid "Project manager"
    774 msgstr "Správce projektu"
    775 
    776 #: uaboutform.sapplicationname
    777 msgctxt "uaboutform.sapplicationname"
    778 msgid "Application name"
    779 msgstr "Jméno aplikace"
    780 
    781 #: uaboutform.semail
    782 msgctxt "uaboutform.semail"
    783 msgid "E-mail"
    784 msgstr "E-mail"
    785 
    786 #: uaboutform.smanufacturer
    787 msgctxt "uaboutform.smanufacturer"
    788 msgid "Company"
    789 msgstr "Společnost"
    790 
    791 #: uaboutform.sreleasedate
    792 msgctxt "uaboutform.sreleasedate"
    793 msgid "Release date"
    794 msgstr "Datum uvolnění"
    795 
    796 #: uaboutform.sversion
    797 msgctxt "uaboutform.sversion"
    798 msgid "Version"
    799 msgstr "Verze"
    800 
    801 #: ucompilersform.scompileroptions
    802 msgctxt "ucompilersform.scompileroptions"
    803 msgid "Compiler options"
    804 msgstr "Volby překladače"
    805 
    806 #: ucompilersform.scompilerpath
    807 msgctxt "ucompilersform.scompilerpath"
    808 msgid "Compiler path"
    809 msgstr "Cesta překladače"
    810 
    811 #: uformabout.sapplicationname
    812 msgctxt "uformabout.sapplicationname"
    813 msgid "Application name"
    814 msgstr "Jméno aplikace"
    815 
    816 #: uformabout.semail
    817 msgctxt "uformabout.semail"
    818 msgid "E-mail"
    819 msgstr "E-mail"
    820 
    821 #: uformabout.smanufacturer
    822 msgctxt "uformabout.smanufacturer"
    823 msgid "Company"
    824 msgstr "Společnost"
    825 
    826 #: uformabout.sreleasedate
    827 msgctxt "uformabout.sreleasedate"
    828 msgid "Release date"
    829 msgstr "Datum uvolnění"
    830 
    831 #: uformabout.sversion
    832 msgctxt "uformabout.sversion"
    833 msgid "Version"
    834 msgstr "Verze"
    835 
    836 #: uformmain.sbuildfinished
    837 msgid "Build finished in %s seconds"
    838 msgstr ""
    839 
    840 #: uformproject.senternewfilename
    841 msgid "Enter new file name"
    842 msgstr "Zadejte nové jméno souboru"
    843 
    844 #: uformproject.srenamesourcefile
    845 msgid "Rename source file"
    846 msgstr "Přejmenování zdrojového souboru"
    847 
    848 #: uformtargets.scompileroptions
    849 msgctxt "uformtargets.scompileroptions"
    850 msgid "Compiler options"
    851 msgstr "Volby překladače"
    852 
    853 #: uformtargets.scompilerpath
    854 msgctxt "uformtargets.scompilerpath"
    855 msgid "Compiler path"
    856 msgstr "Cesta překladače"
    857 
    858 #: umainform.snewproject
    859 msgctxt "umainform.snewproject"
    860 msgid "New project"
    861 msgstr "Nový projekt"
    862 
    863 #: uproject.snewproject
    864 msgctxt "uproject.snewproject"
    865 msgid "New project"
    866 msgstr "Nový projekt"
    867 
    868 #: uprojecttemplates.sconsoleapplication
    869 msgid "Console application"
    870 msgstr "Konzolová aplikace"
    871 
    872 #: uprojecttemplates.sguiapplication
    873 msgid "GUI application"
    874 msgstr "GUI aplikace"
    875 
    876 #: uprojecttemplates.spackage
    877 msgid "Package"
    878 msgstr "Balíček"
    879 
    880 #: uprojecttemplates.sunit
    881 msgid "Unit"
    882 msgstr "Jednotka"
    883 
     353msgstr ""
     354
  • trunk/IDE/Modules/Pascal/IDEModulePascal.pas

    r74 r75  
    1 unit UIDEModulePascal;
    2 
    3 {$mode delphi}
     1unit IDEModulePascal;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UModularSystem;
     6  Classes, SysUtils, ModularSystem;
    97
    108type
     
    2321begin
    2422  inherited;
    25   Name := 'Pascal';
     23  Identification := 'Pascal';
    2624  Title := 'Pascal';
    2725  Version := '0.1';
  • trunk/IDE/Project.pas

    r74 r75  
    1 unit UProject;
    2 
    3 {$mode Delphi}{$H+}
     1unit Project;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, Dialogs, DOM, XMLWrite, XMLRead, FileUtil,
    9   SpecializedList;
     7  Generics.Collections;
    108
    119const
     
    1917  end;
    2018
    21   { TProjectPackageList }
    22 
    23   TProjectPackageList = class(TListObject)
     19  { TProjectPackages }
     20
     21  TProjectPackages = class(TObjectList<TProjectPackage>)
    2422    Parent: TProject;
    2523    procedure Load;
     
    3331  end;
    3432
    35   TProjectBuildConfigList = class(TListObject)
     33  TProjectBuildConfigs = class(TObjectList<TProjectBuildConfig>)
    3634  end;
    3735
     
    5755  end;
    5856
    59   { TProjectFileList }
    60 
    61   TProjectFileList = class(TListObject)
     57  { TProjectFiles }
     58
     59  TProjectFiles = class(TObjectList<TProjectFile>)
    6260    Parent: TProject;
    63     procedure DumpFileList(Files: TListString);
    64     procedure LoadFromList(Files: TListString);
     61    procedure DumpFileList(Files: TStringList);
     62    procedure LoadFromList(Files: TStringList);
    6563    procedure Load;
    6664    procedure Save;
     
    7876  public
    7977    FileName: string;
    80     Files: TProjectFileList;
    81     Packages: TProjectPackageList;
    82     BuildConfigs: TProjectBuildConfigList;
     78    Files: TProjectFiles;
     79    Packages: TProjectPackages;
     80    BuildConfigs: TProjectBuildConfigs;
    8381    MainSource: TProjectFile;
    8482    procedure LoadFromFile(FileName: string);
     
    104102  end;
    105103
    106   { TProjectTemplateList }
    107 
    108   TProjectTemplateList = class(TListObject)
     104  { TProjectTemplates }
     105
     106  TProjectTemplates = class(TObjectList<TProjectTemplate>)
    109107    procedure AddTemplate(Template: TProjectTemplate);
    110108  end;
     
    113111  SNewProject = 'New project';
    114112
     113
    115114implementation
    116115
    117 { TProjectTemplateList }
    118 
    119 procedure TProjectTemplateList.AddTemplate(Template: TProjectTemplate);
     116{ TProjectTemplates }
     117
     118procedure TProjectTemplates.AddTemplate(Template: TProjectTemplate);
    120119begin
    121120  Add(Template);
     
    136135destructor TProjectTemplate.Destroy;
    137136begin
    138   Description.Free;
    139   inherited Destroy;
    140 end;
    141 
    142 { TProjectPackageList }
    143 
    144 procedure TProjectPackageList.Load;
    145 begin
    146 
    147 end;
    148 
    149 procedure TProjectPackageList.Save;
    150 begin
    151 
    152 end;
    153 
    154 procedure TProjectPackageList.SaveToXMLNode(Node: TDOMNode);
    155 begin
    156 
    157 end;
    158 
    159 procedure TProjectPackageList.LoadFromXMLNode(Node: TDOMNode);
    160 begin
    161 
     137  FreeAndNil(Description);
     138  inherited;
     139end;
     140
     141{ TProjectPackages }
     142
     143procedure TProjectPackages.Load;
     144begin
     145end;
     146
     147procedure TProjectPackages.Save;
     148begin
     149end;
     150
     151procedure TProjectPackages.SaveToXMLNode(Node: TDOMNode);
     152begin
     153end;
     154
     155procedure TProjectPackages.LoadFromXMLNode(Node: TDOMNode);
     156begin
    162157end;
    163158
    164159{ TProjectGroup }
    165160
    166 procedure TProjectFileList.DumpFileList(Files: TListString);
     161procedure TProjectFiles.DumpFileList(Files: TStringList);
    167162var
    168163  I: Integer;
     
    173168end;
    174169
    175 procedure TProjectFileList.LoadFromList(Files: TListString);
     170procedure TProjectFiles.LoadFromList(Files: TStringList);
    176171var
    177172  I: Integer;
     
    190185end;
    191186
    192 procedure TProjectFileList.Load;
     187procedure TProjectFiles.Load;
    193188var
    194189  I: Integer;
     
    198193end;
    199194
    200 procedure TProjectFileList.Save;
     195procedure TProjectFiles.Save;
    201196var
    202197  I: Integer;
     
    206201end;
    207202
    208 procedure TProjectFileList.SaveToXMLNode(Node: TDOMNode);
     203procedure TProjectFiles.SaveToXMLNode(Node: TDOMNode);
    209204var
    210205  I: Integer;
     
    219214end;
    220215
    221 procedure TProjectFileList.LoadFromXMLNode(Node: TDOMNode);
     216procedure TProjectFiles.LoadFromXMLNode(Node: TDOMNode);
    222217var
    223218  NewNode: TDomNode;
     
    236231end;
    237232
    238 function TProjectFileList.SearchFile(FileName: string): TProjectFile;
     233function TProjectFiles.SearchFile(FileName: string): TProjectFile;
    239234var
    240235  I: Integer;
     
    250245end;
    251246
    252 function TProjectFileList.AddFile(FileName: string): TProjectFile;
    253 begin
    254   Result := TProjectFile(AddNew(TProjectFile.Create));
     247function TProjectFiles.AddFile(FileName: string): TProjectFile;
     248begin
     249  Result := TProjectFile.Create;
    255250  Result.Parent := Parent;
    256251  Result.FileName := FileName;
     252  Add(Result);
    257253end;
    258254
     
    278274destructor TProjectFile.Destroy;
    279275begin
    280   Source.Free;
    281   inherited Destroy;
     276  FreeAndNil(Source);
     277  inherited;
    282278end;
    283279
     
    419415constructor TProject.Create;
    420416begin
    421   Files := TProjectFileList.Create;
     417  Files := TProjectFiles.Create;
    422418  Files.Parent := Self;
    423   Packages := TProjectPackageList.Create;
     419  Packages := TProjectPackages.Create;
    424420  Packages.Parent := Self;
    425421end;
     
    427423destructor TProject.Destroy;
    428424begin
    429   Files.Free;
    430   Packages.Free;
    431   BuildConfigs.Free;
    432   inherited Destroy;
     425  FreeAndNil(Files);
     426  FreeAndNil(Packages);
     427  FreeAndNil(BuildConfigs);
     428  inherited;
    433429end;
    434430
  • trunk/IDE/ProjectTemplates.pas

    r74 r75  
    1 unit UProjectTemplates;
    2 
    3 {$mode delphi}
     1unit ProjectTemplates;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, UProject;
     6  Classes, SysUtils, Project;
    97
    108type
  • trunk/IDE/TextSource.pas

    r74 r75  
    1 unit UTextSource;
    2 
    3 {$MODE Delphi}
     1unit TextSource;
    42
    53interface
  • trunk/IDE/Transpascal.lpi

    r74 r75  
    22<CONFIG>
    33  <ProjectOptions>
    4     <Version Value="10"/>
     4    <Version Value="12"/>
    55    <PathDelim Value="\"/>
    66    <General>
     7      <Flags>
     8        <CompatibilityMode Value="True"/>
     9      </Flags>
    710      <SessionStorage Value="InProjectDir"/>
    8       <MainUnit Value="0"/>
    911      <Title Value="Transpascal IDE"/>
    1012      <ResourceType Value="res"/>
     
    6870    <PublishOptions>
    6971      <Version Value="2"/>
    70       <IgnoreBinaries Value="False"/>
    71       <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
    72       <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
    7372    </PublishOptions>
    7473    <RunParams>
    75       <local>
    76         <FormatVersion Value="1"/>
    77       </local>
     74      <FormatVersion Value="2"/>
     75      <Modes Count="1">
     76        <Mode0 Name="default"/>
     77      </Modes>
    7878    </RunParams>
    79     <RequiredPackages Count="8">
     79    <RequiredPackages Count="6">
    8080      <Item1>
    8181        <PackageName Value="ModularSystem"/>
     
    8989      </Item2>
    9090      <Item3>
    91         <PackageName Value="CoolTranslator"/>
    92         <DefaultFilename Value="..\Packages\CoolTranslator\CoolTranslator.lpk" Prefer="True"/>
     91        <PackageName Value="LCLBase"/>
     92        <MinVersion Major="1" Release="1" Valid="True"/>
    9393      </Item3>
    9494      <Item4>
    95         <PackageName Value="LCLBase"/>
    96         <MinVersion Major="1" Release="1" Valid="True"/>
     95        <PackageName Value="TranspascalCompiler"/>
     96        <DefaultFilename Value="..\Compiler\TranspascalCompiler.lpk" Prefer="True"/>
    9797      </Item4>
    9898      <Item5>
    99         <PackageName Value="TemplateGenerics"/>
    100         <DefaultFilename Value="..\Packages\TemplateGenerics\TemplateGenerics.lpk" Prefer="True"/>
     99        <PackageName Value="SynEdit"/>
     100        <MinVersion Major="1" Valid="True"/>
    101101      </Item5>
    102102      <Item6>
    103         <PackageName Value="TranspascalCompiler"/>
    104         <DefaultFilename Value="..\Compiler\TranspascalCompiler.lpk" Prefer="True"/>
     103        <PackageName Value="LCL"/>
    105104      </Item6>
    106       <Item7>
    107         <PackageName Value="SynEdit"/>
    108         <MinVersion Major="1" Valid="True"/>
    109       </Item7>
    110       <Item8>
    111         <PackageName Value="LCL"/>
    112       </Item8>
    113105    </RequiredPackages>
    114     <Units Count="20">
     106    <Units Count="19">
    115107      <Unit0>
    116108        <Filename Value="Transpascal.lpr"/>
     
    118110      </Unit0>
    119111      <Unit1>
    120         <Filename Value="Forms\UFormMain.pas"/>
     112        <Filename Value="Forms\FormMain.pas"/>
    121113        <IsPartOfProject Value="True"/>
    122114        <ComponentName Value="FormMain"/>
     
    125117      </Unit1>
    126118      <Unit2>
    127         <Filename Value="UTextSource.pas"/>
     119        <Filename Value="TextSource.pas"/>
    128120        <IsPartOfProject Value="True"/>
    129121      </Unit2>
    130122      <Unit3>
    131         <Filename Value="UProject.pas"/>
     123        <Filename Value="Project.pas"/>
    132124        <IsPartOfProject Value="True"/>
    133125      </Unit3>
    134126      <Unit4>
    135         <Filename Value="Forms\UFormProject.pas"/>
     127        <Filename Value="Forms\FormProject.pas"/>
    136128        <IsPartOfProject Value="True"/>
    137129        <ComponentName Value="FormProject"/>
     
    140132      </Unit4>
    141133      <Unit5>
    142         <Filename Value="Forms\UFormSourceCode.pas"/>
     134        <Filename Value="Forms\FormSourceCode.pas"/>
    143135        <IsPartOfProject Value="True"/>
    144136        <ComponentName Value="FormSourceCode"/>
     
    147139      </Unit5>
    148140      <Unit6>
    149         <Filename Value="Forms\UFormMessages.pas"/>
     141        <Filename Value="Forms\FormMessages.pas"/>
    150142        <IsPartOfProject Value="True"/>
    151143        <ComponentName Value="FormMessages"/>
     
    154146      </Unit6>
    155147      <Unit7>
    156         <Filename Value="Forms\UFormTargetCode.pas"/>
     148        <Filename Value="Forms\FormTargetCode.pas"/>
    157149        <IsPartOfProject Value="True"/>
    158150        <ComponentName Value="FormTargetCode"/>
     
    161153      </Unit7>
    162154      <Unit8>
    163         <Filename Value="Forms\UFormCodeTree.pas"/>
     155        <Filename Value="Forms\FormCodeTree.pas"/>
    164156        <IsPartOfProject Value="True"/>
    165157        <ComponentName Value="FormCodeTree"/>
     
    168160      </Unit8>
    169161      <Unit9>
    170         <Filename Value="Forms\UFormAbout.pas"/>
    171         <IsPartOfProject Value="True"/>
    172         <ComponentName Value="FormAbout"/>
     162        <Filename Value="Forms\FormOptions.pas"/>
     163        <IsPartOfProject Value="True"/>
     164        <ComponentName Value="FormOptions"/>
    173165        <HasResources Value="True"/>
    174166        <ResourceBaseClass Value="Form"/>
    175167      </Unit9>
    176168      <Unit10>
    177         <Filename Value="Forms\UFormOptions.pas"/>
    178         <IsPartOfProject Value="True"/>
    179         <ComponentName Value="FormOptions"/>
     169        <Filename Value="Forms\FormTargets.pas"/>
     170        <IsPartOfProject Value="True"/>
     171        <ComponentName Value="FormTargets"/>
    180172        <HasResources Value="True"/>
    181173        <ResourceBaseClass Value="Form"/>
    182174      </Unit10>
    183175      <Unit11>
    184         <Filename Value="Forms\UFormTargets.pas"/>
    185         <IsPartOfProject Value="True"/>
    186         <ComponentName Value="FormTargets"/>
     176        <Filename Value="Forms\FormProjectNew.pas"/>
     177        <IsPartOfProject Value="True"/>
     178        <ComponentName Value="FormProjectNew"/>
    187179        <HasResources Value="True"/>
    188180        <ResourceBaseClass Value="Form"/>
    189181      </Unit11>
    190182      <Unit12>
    191         <Filename Value="Forms\UFormProjectNew.pas"/>
    192         <IsPartOfProject Value="True"/>
    193         <ComponentName Value="FormProjectNew"/>
    194         <HasResources Value="True"/>
    195         <ResourceBaseClass Value="Form"/>
     183        <Filename Value="ProjectTemplates.pas"/>
     184        <IsPartOfProject Value="True"/>
    196185      </Unit12>
    197186      <Unit13>
    198         <Filename Value="UProjectTemplates.pas"/>
    199         <IsPartOfProject Value="True"/>
     187        <Filename Value="Forms\FormTargetProject.pas"/>
     188        <IsPartOfProject Value="True"/>
     189        <ComponentName Value="FormTargetProject"/>
     190        <HasResources Value="True"/>
     191        <ResourceBaseClass Value="Form"/>
    200192      </Unit13>
    201193      <Unit14>
    202         <Filename Value="Forms\UFormTargetProject.pas"/>
    203         <IsPartOfProject Value="True"/>
    204         <ComponentName Value="FormTargetProject"/>
    205         <HasResources Value="True"/>
    206         <ResourceBaseClass Value="Form"/>
     194        <Filename Value="Core.pas"/>
     195        <IsPartOfProject Value="True"/>
     196        <ComponentName Value="Core"/>
     197        <HasResources Value="True"/>
     198        <ResourceBaseClass Value="DataModule"/>
    207199      </Unit14>
    208200      <Unit15>
    209         <Filename Value="UCore.pas"/>
    210         <IsPartOfProject Value="True"/>
    211         <ComponentName Value="Core"/>
    212         <HasResources Value="True"/>
    213         <ResourceBaseClass Value="DataModule"/>
     201        <Filename Value="Forms\FormTargetOptions.pas"/>
     202        <IsPartOfProject Value="True"/>
     203        <ComponentName Value="FormTargetOptions"/>
     204        <ResourceBaseClass Value="Form"/>
    214205      </Unit15>
    215206      <Unit16>
    216         <Filename Value="Forms\UFormTargetOptions.pas"/>
    217         <IsPartOfProject Value="True"/>
    218         <ComponentName Value="FormTargetOptions"/>
     207        <Filename Value="Forms\FormExternalProducerOutput.pas"/>
     208        <IsPartOfProject Value="True"/>
     209        <ComponentName Value="FormExternalProducerOutput"/>
    219210        <ResourceBaseClass Value="Form"/>
    220211      </Unit16>
    221212      <Unit17>
    222         <Filename Value="Forms\UFormExternalProducerOutput.pas"/>
    223         <IsPartOfProject Value="True"/>
    224         <ComponentName Value="FormExternalProducerOutput"/>
    225         <ResourceBaseClass Value="Form"/>
     213        <Filename Value="Notes.txt"/>
     214        <IsPartOfProject Value="True"/>
    226215      </Unit17>
    227216      <Unit18>
    228         <Filename Value="Notes.txt"/>
     217        <Filename Value="Modules\Pascal\IDEModulePascal.pas"/>
    229218        <IsPartOfProject Value="True"/>
    230219      </Unit18>
    231       <Unit19>
    232         <Filename Value="Modules\Pascal\UIDEModulePascal.pas"/>
    233         <IsPartOfProject Value="True"/>
    234       </Unit19>
    235220    </Units>
    236221  </ProjectOptions>
     
    266251    <Linking>
    267252      <Debugging>
     253        <DebugInfoType Value="dsDwarf3"/>
    268254        <UseHeaptrc Value="True"/>
    269255        <UseExternalDbgSyms Value="True"/>
  • trunk/IDE/Transpascal.lpr

    r74 r75  
    88  {$ENDIF}{$ENDIF}
    99  Forms, Interfaces, SysUtils,
    10   UFormMain {MainForm},
    11   UTextSource, UProject, TranspascalCompiler, UFormProject,
    12 UFormSourceCode, UFormMessages,
    13   UFormTargetCode, UFormCodeTree, TemplateGenerics, CoolTranslator, Common,
    14   UFormAbout, UFormOptions, UFormTargets,
    15 UFormProjectNew, UProjectTemplates, UFormTargetProject, UCore,
    16 UFormTargetOptions, UFormExternalProducerOutput, UIDEModulePascal;
     10  FormMain {MainForm},
     11  TextSource, Project, TranspascalCompiler, FormProject,
     12  FormSourceCode, FormMessages,
     13  FormTargetCode, FormCodeTree, Common,
     14  FormOptions, FormTargets,
     15  FormProjectNew, ProjectTemplates, FormTargetProject, Core,
     16  FormTargetOptions, FormExternalProducerOutput, IDEModulePascal;
    1717
    1818{$R *.res}
     
    2424
    2525begin
    26   Application.Title := 'Transpascal IDE';
     26  Application.Title:='Transpascal IDE';
    2727  {$IFDEF DEBUG}
    2828  // Heap trace
     
    3232
    3333  Application.Initialize;
    34   Application.CreateForm(TCore, Core);
    35   Application.CreateForm(TFormMain, FormMain);
    36   Application.CreateForm(TFormProject, FormProject);
    37   Application.CreateForm(TFormSourceCode, FormSourceCode);
    38   Application.CreateForm(TFormMessages, FormMessages);
    39   Application.CreateForm(TFormTargetCode, FormTargetCode);
    40   Application.CreateForm(TFormCodeTree, FormCodeTree);
    41   Application.CreateForm(TFormAbout, FormAbout);
    42   Application.CreateForm(TFormOptions, FormOptions);
    43   Application.CreateForm(TFormTargets, FormTargets);
    44   Application.CreateForm(TFormProjectNew, FormProjectNew);
    45   Application.CreateForm(TFormTargetProject, FormTargetProject);
    46   Application.CreateForm(TFormTargetOptions, FormTargetOptions);
    47   Application.CreateForm(TFormExternalProducerOutput, FormExternalProducerOutput
    48     );
     34  Application.CreateForm(TCore, Core.Core);
     35  Application.CreateForm(TFormMain, FormMain.FormMain);
    4936  Application.Run;
    5037end.
  • trunk/IDE/UProducerTreeView.pas

    r41 r75  
    11unit UProducerTreeView;
    22
    3 {$mode Delphi}{$H+}
    4 
    53interface
    64
    75uses
    8   Classes, SysUtils, USourceCode, ComCtrls, UProducer, StrUtils;
     6  Classes, SysUtils, SourceCode, ComCtrls, Producer, StrUtils;
    97
    108type
  • trunk/Packages/Common/ApplicationInfo.pas

    r74 r75  
    1 unit UApplicationInfo;
    2 
    3 {$mode delphi}
     1unit ApplicationInfo;
    42
    53interface
    64
    75uses
    8   SysUtils, Registry, Classes, Forms, URegistry;
     6  SysUtils, Classes, Forms, RegistryEx, Controls, Graphics, LCLType;
    97
    108type
     
    1412  TApplicationInfo = class(TComponent)
    1513  private
     14    FDescription: TTranslateString;
     15    FIcon: TBitmap;
    1616    FIdentification: Byte;
     17    FLicense: string;
    1718    FVersionMajor: Byte;
    1819    FVersionMinor: Byte;
     
    3132  public
    3233    constructor Create(AOwner: TComponent); override;
     34    destructor Destroy; override;
    3335    property Version: string read GetVersion;
     36    function GetRegistryContext: TRegistryContext;
    3437  published
    3538    property Identification: Byte read FIdentification write FIdentification;
     
    4447    property EmailContact: string read FEmailContact write FEmailContact;
    4548    property AppName: string read FAppName write FAppName;
     49    property Description: TTranslateString read FDescription write FDescription;
    4650    property ReleaseDate: TDateTime read FReleaseDate write FReleaseDate;
    4751    property RegistryKey: string read FRegistryKey write FRegistryKey;
    4852    property RegistryRoot: TRegistryRoot read FRegistryRoot write FRegistryRoot;
     53    property License: string read FLicense write FLicense;
     54    property Icon: TBitmap read FIcon write FIcon;
    4955  end;
    5056
    5157procedure Register;
    5258
     59
    5360implementation
    54                        
     61
    5562procedure Register;
    5663begin
     
    6976constructor TApplicationInfo.Create(AOwner: TComponent);
    7077begin
    71   inherited Create(AOwner);
     78  inherited;
    7279  FVersionMajor := 1;
    7380  FIdentification := 1;
     
    7582  FRegistryKey := '\Software\' + FAppName;
    7683  FRegistryRoot := rrKeyCurrentUser;
     84  FIcon := TBitmap.Create;
     85end;
     86
     87destructor TApplicationInfo.Destroy;
     88begin
     89  FreeAndNil(FIcon);
     90  inherited;
     91end;
     92
     93function TApplicationInfo.GetRegistryContext: TRegistryContext;
     94begin
     95  Result := TRegistryContext.Create(RegistryRoot, RegistryKey);
    7796end;
    7897
  • trunk/Packages/Common/Common.Delay.pas

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

    r74 r75  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    3   <Package Version="4">
     3  <Package Version="5">
    44    <PathDelim Value="\"/>
    55    <Name Value="Common"/>
     6    <Type Value="RunAndDesignTime"/>
    67    <AddToProjectUsesSection Value="True"/>
    78    <Author Value="Chronos (robie@centrum.cz)"/>
     
    1011      <PathDelim Value="\"/>
    1112      <SearchPaths>
    12         <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
     13        <OtherUnitFiles Value="Forms"/>
     14        <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)-$(BuildMode)"/>
    1315      </SearchPaths>
     16      <Parsing>
     17        <SyntaxOptions>
     18          <SyntaxMode Value="Delphi"/>
     19          <CStyleOperator Value="False"/>
     20          <AllowLabel Value="False"/>
     21          <CPPInline Value="False"/>
     22        </SyntaxOptions>
     23      </Parsing>
     24      <CodeGeneration>
     25        <Optimizations>
     26          <OptimizationLevel Value="0"/>
     27        </Optimizations>
     28      </CodeGeneration>
     29      <Linking>
     30        <Debugging>
     31          <GenerateDebugInfo Value="False"/>
     32        </Debugging>
     33      </Linking>
    1434      <Other>
    1535        <CompilerMessages>
    16           <UseMsgFile Value="True"/>
     36          <IgnoredMessages idx6058="True" idx5071="True" idx5024="True" idx3124="True" idx3123="True"/>
    1737        </CompilerMessages>
    18         <CompilerPath Value="$(CompPath)"/>
    1938      </Other>
    2039    </CompilerOptions>
    21     <Description Value="Various libraries"/>
    22     <License Value="GNU/GPL"/>
    23     <Version Minor="7"/>
    24     <Files Count="19">
     40    <Description Value="Common package with various useful units.
     41
     42Source: https://svn.zdechov.net/PascalClassLibrary/Common/"/>
     43    <License Value="Copy left."/>
     44    <Version Minor="12"/>
     45    <Files Count="36">
    2546      <Item1>
    2647        <Filename Value="StopWatch.pas"/>
     
    2849      </Item1>
    2950      <Item2>
    30         <Filename Value="UCommon.pas"/>
    31         <UnitName Value="UCommon"/>
     51        <Filename Value="Common.pas"/>
     52        <UnitName Value="Common"/>
    3253      </Item2>
    3354      <Item3>
    34         <Filename Value="UDebugLog.pas"/>
    35         <HasRegisterProc Value="True"/>
    36         <UnitName Value="UDebugLog"/>
     55        <Filename Value="DebugLog.pas"/>
     56        <HasRegisterProc Value="True"/>
     57        <UnitName Value="DebugLog"/>
    3758      </Item3>
    3859      <Item4>
    39         <Filename Value="UDelay.pas"/>
    40         <UnitName Value="UDelay"/>
     60        <Filename Value="Common.Delay.pas"/>
     61        <UnitName Value="Common.Delay"/>
    4162      </Item4>
    4263      <Item5>
    43         <Filename Value="UPrefixMultiplier.pas"/>
    44         <UnitName Value="UPrefixMultiplier"/>
     64        <Filename Value="PrefixMultiplier.pas"/>
     65        <HasRegisterProc Value="True"/>
     66        <UnitName Value="PrefixMultiplier"/>
    4567      </Item5>
    4668      <Item6>
    47         <Filename Value="UURI.pas"/>
    48         <UnitName Value="UURI"/>
     69        <Filename Value="URI.pas"/>
     70        <UnitName Value="URI"/>
    4971      </Item6>
    5072      <Item7>
    51         <Filename Value="UThreading.pas"/>
    52         <UnitName Value="UThreading"/>
     73        <Filename Value="Threading.pas"/>
     74        <UnitName Value="Threading"/>
    5375      </Item7>
    5476      <Item8>
    55         <Filename Value="UMemory.pas"/>
    56         <UnitName Value="UMemory"/>
     77        <Filename Value="Memory.pas"/>
     78        <UnitName Value="Memory"/>
    5779      </Item8>
    5880      <Item9>
    59         <Filename Value="UResetableThread.pas"/>
    60         <UnitName Value="UResetableThread"/>
     81        <Filename Value="ResetableThread.pas"/>
     82        <UnitName Value="ResetableThread"/>
    6183      </Item9>
    6284      <Item10>
    63         <Filename Value="UPool.pas"/>
    64         <UnitName Value="UPool"/>
     85        <Filename Value="Pool.pas"/>
     86        <UnitName Value="Pool"/>
    6587      </Item10>
    6688      <Item11>
    67         <Filename Value="ULastOpenedList.pas"/>
    68         <HasRegisterProc Value="True"/>
    69         <UnitName Value="ULastOpenedList"/>
     89        <Filename Value="LastOpenedList.pas"/>
     90        <HasRegisterProc Value="True"/>
     91        <UnitName Value="LastOpenedList"/>
    7092      </Item11>
    7193      <Item12>
    72         <Filename Value="URegistry.pas"/>
    73         <UnitName Value="URegistry"/>
     94        <Filename Value="RegistryEx.pas"/>
     95        <UnitName Value="RegistryEx"/>
    7496      </Item12>
    7597      <Item13>
    76         <Filename Value="UJobProgressView.pas"/>
    77         <HasRegisterProc Value="True"/>
    78         <UnitName Value="UJobProgressView"/>
     98        <Filename Value="JobProgressView.pas"/>
     99        <HasRegisterProc Value="True"/>
     100        <UnitName Value="JobProgressView"/>
    79101      </Item13>
    80102      <Item14>
    81         <Filename Value="UXMLUtils.pas"/>
    82         <UnitName Value="UXMLUtils"/>
     103        <Filename Value="XML.pas"/>
     104        <UnitName Value="XML"/>
    83105      </Item14>
    84106      <Item15>
    85         <Filename Value="UApplicationInfo.pas"/>
    86         <HasRegisterProc Value="True"/>
    87         <UnitName Value="UApplicationInfo"/>
     107        <Filename Value="ApplicationInfo.pas"/>
     108        <HasRegisterProc Value="True"/>
     109        <UnitName Value="ApplicationInfo"/>
    88110      </Item15>
    89111      <Item16>
    90         <Filename Value="USyncCounter.pas"/>
    91         <UnitName Value="USyncCounter"/>
     112        <Filename Value="SyncCounter.pas"/>
     113        <UnitName Value="SyncCounter"/>
    92114      </Item16>
    93115      <Item17>
    94         <Filename Value="UListViewSort.pas"/>
    95         <HasRegisterProc Value="True"/>
    96         <UnitName Value="UListViewSort"/>
     116        <Filename Value="ListViewSort.pas"/>
     117        <HasRegisterProc Value="True"/>
     118        <UnitName Value="ListViewSort"/>
    97119      </Item17>
    98120      <Item18>
    99         <Filename Value="UPersistentForm.pas"/>
    100         <HasRegisterProc Value="True"/>
    101         <UnitName Value="UPersistentForm"/>
     121        <Filename Value="PersistentForm.pas"/>
     122        <HasRegisterProc Value="True"/>
     123        <UnitName Value="PersistentForm"/>
    102124      </Item18>
    103125      <Item19>
    104         <Filename Value="UFindFile.pas"/>
    105         <HasRegisterProc Value="True"/>
    106         <UnitName Value="UFindFile"/>
     126        <Filename Value="FindFile.pas"/>
     127        <HasRegisterProc Value="True"/>
     128        <UnitName Value="FindFile"/>
    107129      </Item19>
     130      <Item20>
     131        <Filename Value="ScaleDPI.pas"/>
     132        <HasRegisterProc Value="True"/>
     133        <UnitName Value="ScaleDPI"/>
     134      </Item20>
     135      <Item21>
     136        <Filename Value="Theme.pas"/>
     137        <HasRegisterProc Value="True"/>
     138        <UnitName Value="Theme"/>
     139      </Item21>
     140      <Item22>
     141        <Filename Value="StringTable.pas"/>
     142        <UnitName Value="StringTable"/>
     143      </Item22>
     144      <Item23>
     145        <Filename Value="MetaCanvas.pas"/>
     146        <UnitName Value="MetaCanvas"/>
     147      </Item23>
     148      <Item24>
     149        <Filename Value="Geometric.pas"/>
     150        <UnitName Value="Geometric"/>
     151      </Item24>
     152      <Item25>
     153        <Filename Value="Translator.pas"/>
     154        <HasRegisterProc Value="True"/>
     155        <UnitName Value="Translator"/>
     156      </Item25>
     157      <Item26>
     158        <Filename Value="Languages.pas"/>
     159        <UnitName Value="Languages"/>
     160      </Item26>
     161      <Item27>
     162        <Filename Value="PixelPointer.pas"/>
     163        <UnitName Value="PixelPointer"/>
     164      </Item27>
     165      <Item28>
     166        <Filename Value="DataFile.pas"/>
     167        <UnitName Value="DataFile"/>
     168      </Item28>
     169      <Item29>
     170        <Filename Value="TestCase.pas"/>
     171        <UnitName Value="TestCase"/>
     172      </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>
    108203    </Files>
     204    <CompatibilityMode Value="True"/>
    109205    <i18n>
    110206      <EnableI18N Value="True"/>
    111207      <OutDir Value="Languages"/>
     208      <EnableI18NForLFM Value="True"/>
    112209    </i18n>
    113     <Type Value="RunAndDesignTime"/>
    114210    <RequiredPkgs Count="2">
    115211      <Item1>
    116         <PackageName Value="TemplateGenerics"/>
     212        <PackageName Value="LCL"/>
    117213      </Item1>
    118214      <Item2>
  • trunk/Packages/Common/Common.pas

    r74 r75  
    1 unit UCommon;
    2 
    3 {$mode delphi}
     1unit Common;
    42
    53interface
    64
    75uses
    8   {$ifdef Windows}Windows,{$endif}
    9   {$ifdef Linux}baseunix,{$endif}
    10   Classes, SysUtils, StrUtils, Dialogs, Process, LCLIntf,
    11   FileUtil; //, ShFolder, ShellAPI;
     6  {$IFDEF WINDOWS}Windows,{$ENDIF}
     7  {$IFDEF UNIX}baseunix,{$ENDIF}
     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
     
    2825    unfDNSDomainName = 11);
    2926
     27  TFilterMethod = function (FileName: string): Boolean of object;
     28  TFileNameMethod = procedure (FileName: string) of object;
     29
    3030var
    3131  ExceptionHandler: TExceptionEvent;
    3232  DLLHandle1: HModule;
    3333
    34 {$IFDEF Windows}
    35   GetUserNameEx: procedure (NameFormat: DWORD;
    36     lpNameBuffer: LPSTR; nSize: PULONG); stdcall;
    37 {$ENDIF}
    38 
    39 function IntToBin(Data: Int64; Count: Byte): string;
     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);
     43
     44function AddLeadingZeroes(const aNumber, Length : integer) : string;
    4045function BinToInt(BinStr: string): Int64;
    41 function TryHexToInt(Data: string; var Value: Integer): Boolean;
    42 function TryBinToInt(Data: string; var Value: Integer): Boolean;
    4346function BinToHexString(Source: AnsiString): string;
    4447//function DelTree(DirName : string): Boolean;
     
    4649function BCDToInt(Value: Byte): Byte;
    4750function CompareByteArray(Data1, Data2: TArrayOfByte): Boolean;
     51procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     52function CombinePaths(Path1, Path2: string): string;
     53function ComputerName: string;
     54procedure DeleteFiles(APath, AFileSpec: string);
     55function Explode(Separator: Char; Data: string): TStringArray;
     56procedure ExecuteProgram(Executable: string; Parameters: array of string);
     57procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
     58procedure FreeThenNil(var Obj);
     59function GetDirCount(Dir: string): Integer;
    4860function GetUserName: string;
    49 function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    50 function SplitString(var Text: string; Count: Word): string;
    5161function GetBitCount(Variable: QWord; MaxIndex: Integer): Integer;
    5262function GetBit(Variable: QWord; Index: Byte): Boolean;
     63function GetStringPart(var Text: string; Separator: string): string;
     64function GenerateNewName(OldName: string): string;
     65function GetFileFilterItemExt(Filter: string; Index: Integer): string;
     66function IntToBin(Data: Int64; Count: Byte): string;
     67function Implode(Separator: string; List: TList<string>): string;
     68function Implode(Separator: string; List: TStringList; Around: string = ''): string;
     69function LastPos(const SubStr: String; const S: String): Integer;
     70function LoadFileToStr(const FileName: TFileName): AnsiString;
     71function LoggedOnUserNameEx(Format: TUserNameFormat): string;
     72function MergeArray(A, B: array of string): TStringArray;
     73function OccurenceOfChar(What: Char; Where: string): Integer;
     74procedure OpenWebPage(URL: string);
     75procedure OpenEmail(Email: string);
     76procedure OpenFileInShell(FileName: string);
     77function PosFromIndex(SubStr: string; Text: string;
     78  StartIndex: Integer): Integer;
     79function PosFromIndexReverse(SubStr: string; Text: string;
     80  StartIndex: Integer): Integer;
     81function RemoveQuotes(Text: string): string;
     82procedure SaveStringToFile(S, FileName: string);
    5383procedure SetBit(var Variable: Int64; Index: Byte; State: Boolean); overload;
    5484procedure SetBit(var Variable: QWord; Index: Byte; State: Boolean); overload;
    5585procedure SetBit(var Variable: Cardinal; Index: Byte; State: Boolean); overload;
    5686procedure SetBit(var Variable: Word; Index: Byte; State: Boolean); overload;
    57 function AddLeadingZeroes(const aNumber, Length : integer) : string;
    58 function LastPos(const SubStr: String; const S: String): Integer;
    59 function GenerateNewName(OldName: string): string;
    60 function GetFileFilterItemExt(Filter: string; Index: Integer): string;
    61 procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
    62 procedure DeleteFiles(APath, AFileSpec: string);
    63 procedure OpenWebPage(URL: string);
    64 procedure OpenFileInShell(FileName: string);
    65 procedure ExecuteProgram(CommandLine: string);
    66 procedure FreeThenNil(var Obj);
    67 function RemoveQuotes(Text: string): string;
    68 function ComputerName: string;
    69 function OccurenceOfChar(What: Char; Where: string): Integer;
    70 function GetDirCount(Dir: string): Integer;
    71 function MergeArray(A, B: array of string): TArrayOfString;
    72 function LoadFileToStr(const FileName: TFileName): AnsiString;
     87procedure SearchFiles(AList: TStrings; Dir: string;
     88  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
     89function SplitString(var Text: string; Count: Word): string;
     90function StripTags(const S: string): string;
     91function TryHexToInt(Data: string; out Value: Integer): Boolean;
     92function TryBinToInt(Data: string; out Value: Integer): Boolean;
     93procedure SortStrings(Strings: TStrings);
    7394
    7495
     
    98119  I: Integer;
    99120begin
     121  Result := '';
    100122  for I := 1 to Length(Source) do begin
    101123    Result := Result + LowerCase(IntToHex(Ord(Source[I]), 2));
     
    112134  Path := IncludeTrailingPathDelimiter(APath);
    113135
    114   Find := FindFirst(UTF8Decode(Path + AFileSpec), faAnyFile xor faDirectory, SearchRec);
     136  Find := FindFirst(Path + AFileSpec, faAnyFile xor faDirectory, SearchRec);
    115137  while Find = 0 do begin
    116     DeleteFile(Path + UTF8Encode(SearchRec.Name));
     138    DeleteFile(Path + SearchRec.Name);
    117139
    118140    Find := SysUtils.FindNext(SearchRec);
     
    185207end;*)
    186208
     209function Implode(Separator: string; List: TStringList; Around: string = ''): string;
     210var
     211  I: Integer;
     212begin
     213  Result := '';
     214  for I := 0 to List.Count - 1 do begin
     215    Result := Result + Around + List[I] + Around;
     216    if I < List.Count - 1 then Result := Result + Separator;
     217  end;
     218end;
     219
    187220function LastPos(const SubStr: String; const S: String): Integer;
    188221begin
     
    230263end;
    231264
    232 function TryHexToInt(Data: string; var Value: Integer): Boolean;
     265function TryHexToInt(Data: string; out Value: Integer): Boolean;
    233266var
    234267  I: Integer;
     
    246279end;
    247280
    248 function TryBinToInt(Data: string; var Value: Integer): Boolean;
     281function TryBinToInt(Data: string; out Value: Integer): Boolean;
    249282var
    250283  I: Integer;
     
    274307end;
    275308
    276 function Explode(Separator: char; Data: string): TArrayOfString;
    277 begin
    278   SetLength(Result, 0);
    279   while Pos(Separator, Data) > 0 do begin
     309function Explode(Separator: Char; Data: string): TStringArray;
     310var
     311  Index: Integer;
     312begin
     313  Result := Default(TStringArray);
     314  repeat
     315    Index := Pos(Separator, Data);
     316    if Index > 0 then begin
     317      SetLength(Result, Length(Result) + 1);
     318      Result[High(Result)] := Copy(Data, 1, Index - 1);
     319      Delete(Data, 1, Index);
     320    end else Break;
     321  until False;
     322  if Data <> '' then begin
    280323    SetLength(Result, Length(Result) + 1);
    281     Result[High(Result)] := Copy(Data, 1, Pos(Separator, Data) - 1);
    282     Delete(Data, 1, Pos(Separator, Data));
    283   end;
    284   SetLength(Result, Length(Result) + 1);
    285   Result[High(Result)] := Data;
    286 end;
    287 
    288 {$IFDEF Windows}
     324    Result[High(Result)] := Data;
     325  end;
     326end;
     327
     328function Implode(Separator: string; List: TList<string>): string;
     329var
     330  I: Integer;
     331begin
     332  Result := '';
     333  for I := 0 to List.Count - 1 do begin
     334    Result := Result + List[I];
     335    if I < List.Count - 1 then Result := Result + Separator;
     336  end;
     337end;
     338
     339{$IFDEF WINDOWS}
    289340function GetUserName: string;
    290341const
     
    294345begin
    295346  L := MAX_USERNAME_LENGTH + 2;
     347  Result := Default(string);
    296348  SetLength(Result, L);
    297349  if Windows.GetUserName(PChar(Result), L) and (L > 0) then begin
     
    307359  end;
    308360end;
    309 {$endif}
     361{$ENDIF}
    310362
    311363function ComputerName: string;
    312 {$ifdef mswindows}
     364{$IFDEF WINDOWS}
    313365const
    314366 INFO_BUFFER_SIZE = 32767;
     
    325377  end;
    326378end;
    327 {$endif}
    328 {$ifdef unix}
     379{$ENDIF}
     380{$IFDEF UNIX}
    329381var
    330382  Name: UtsName;
    331383begin
     384  Name := Default(UtsName);
    332385  fpuname(Name);
    333386  Result := Name.Nodename;
    334387end;
    335 {$endif}
    336 
    337 {$ifdef windows}
     388{$ENDIF}
     389
     390{$IFDEF WINDOWS}
    338391function LoggedOnUserNameEx(Format: TUserNameFormat): string;
    339392const
     
    413466procedure LoadLibraries;
    414467begin
    415   {$IFDEF Windows}
     468  {$IFDEF WINDOWS}
    416469  DLLHandle1 := LoadLibrary('secur32.dll');
    417470  if DLLHandle1 <> 0 then
     
    424477procedure FreeLibraries;
    425478begin
    426   {$IFDEF Windows}
     479  {$IFDEF WINDOWS}
    427480  if DLLHandle1 <> 0 then FreeLibrary(DLLHandle1);
    428481  {$ENDIF}
    429482end;
    430483
    431 procedure ExecuteProgram(CommandLine: string);
     484procedure ExecuteProgram(Executable: string; Parameters: array of string);
    432485var
    433486  Process: TProcess;
     487  I: Integer;
    434488begin
    435489  try
    436490    Process := TProcess.Create(nil);
    437     Process.CommandLine := CommandLine;
     491    Process.Executable := Executable;
     492    for I := 0 to Length(Parameters) - 1 do
     493      Process.Parameters.Add(Parameters[I]);
    438494    Process.Options := [poNoConsole];
    439495    Process.Execute;
     
    454510end;
    455511
     512procedure OpenEmail(Email: string);
     513begin
     514  OpenURL('mailto:' + Email);
     515end;
     516
    456517procedure OpenFileInShell(FileName: string);
    457518begin
    458   ExecuteProgram('cmd.exe /c start "' + FileName + '"');
     519  ExecuteProgram('cmd.exe', ['/c', 'start', FileName]);
    459520end;
    460521
     
    482543end;
    483544
    484 function MergeArray(A, B: array of string): TArrayOfString;
    485 var
    486   I: Integer;
    487 begin
     545function MergeArray(A, B: array of string): TStringArray;
     546var
     547  I: Integer;
     548begin
     549  Result := Default(TStringArray);
    488550  SetLength(Result, Length(A) + Length(B));
    489551  for I := 0 to Length(A) - 1 do
     
    511573end;
    512574
     575function DefaultSearchFilter(const FileName: string): Boolean;
     576begin
     577  Result := True;
     578end;
     579
     580procedure SaveStringToFile(S, FileName: string);
     581var
     582  F: TextFile;
     583begin
     584  AssignFile(F, FileName);
     585  try
     586    ReWrite(F);
     587    Write(F, S);
     588  finally
     589    CloseFile(F);
     590  end;
     591end;
     592
     593procedure SearchFiles(AList: TStrings; Dir: string;
     594  FilterMethod: TFilterMethod = nil; FileNameMethod: TFileNameMethod = nil);
     595var
     596  SR: TSearchRec;
     597begin
     598  Dir := IncludeTrailingPathDelimiter(Dir);
     599  if FindFirst(Dir + '*', faAnyFile, SR) = 0 then
     600    try
     601      repeat
     602        if (SR.Name = '.') or (SR.Name = '..') or (Assigned(FilterMethod) and (not FilterMethod(SR.Name) or
     603          not FilterMethod(Copy(Dir, 3, Length(Dir)) + SR.Name))) then Continue;
     604        if Assigned(FileNameMethod) then
     605          FileNameMethod(Dir + SR.Name);
     606        AList.Add(Dir + SR.Name);
     607        if (SR.Attr and faDirectory) <> 0 then
     608          SearchFiles(AList, Dir + SR.Name, FilterMethod);
     609      until FindNext(SR) <> 0;
     610    finally
     611      FindClose(SR);
     612    end;
     613end;
     614
     615function GetStringPart(var Text: string; Separator: string): string;
     616var
     617  P: Integer;
     618begin
     619  P := Pos(Separator, Text);
     620  if P > 0 then begin
     621    Result := Copy(Text, 1, P - 1);
     622    Delete(Text, 1, P - 1 + Length(Separator));
     623  end else begin
     624    Result := Text;
     625    Text := '';
     626  end;
     627  Result := Trim(Result);
     628  Text := Trim(Text);
     629end;
     630
     631function StripTags(const S: string): string;
     632var
     633  Len: Integer;
     634
     635  function ReadUntil(const ReadFrom: Integer; const C: Char): Integer;
     636  var
     637    J: Integer;
     638  begin
     639    for J := ReadFrom to Len do
     640      if (S[j] = C) then
     641      begin
     642        Result := J;
     643        Exit;
     644      end;
     645    Result := Len + 1;
     646  end;
     647
     648var
     649  I, APos: Integer;
     650begin
     651  Len := Length(S);
     652  I := 0;
     653  Result := '';
     654  while (I <= Len) do begin
     655    Inc(I);
     656    APos := ReadUntil(I, '<');
     657    Result := Result + Copy(S, I, APos - i);
     658    I := ReadUntil(APos + 1, '>');
     659  end;
     660end;
     661
     662function PosFromIndex(SubStr: string; Text: string;
     663  StartIndex: Integer): Integer;
     664var
     665  I, MaxLen: SizeInt;
     666  Ptr: PAnsiChar;
     667begin
     668  Result := 0;
     669  if (StartIndex < 1) or (StartIndex > Length(Text) - Length(SubStr)) then Exit;
     670  if Length(SubStr) > 0 then begin
     671    MaxLen := Length(Text) - Length(SubStr) + 1;
     672    I := StartIndex;
     673    Ptr := @Text[StartIndex];
     674    while (I <= MaxLen) do begin
     675      if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin
     676        Result := I;
     677        Exit;
     678      end;
     679      Inc(I);
     680      Inc(Ptr);
     681    end;
     682  end;
     683end;
     684
     685function PosFromIndexReverse(SubStr: string; Text: string;
     686  StartIndex: Integer): Integer;
     687var
     688  I: SizeInt;
     689  Ptr: PAnsiChar;
     690begin
     691  Result := 0;
     692  if (StartIndex < 1) or (StartIndex > Length(Text)) then Exit;
     693  if Length(SubStr) > 0 then begin
     694    I := StartIndex;
     695    Ptr := @Text[StartIndex];
     696    while (I > 0) do begin
     697      if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin
     698        Result := I;
     699        Exit;
     700      end;
     701      Dec(I);
     702      Dec(Ptr);
     703    end;
     704  end;
     705end;
     706
     707procedure CopyStringArray(Dest: TStringArray; Source: array of string);
     708var
     709  I: Integer;
     710begin
     711  SetLength(Dest, Length(Source));
     712  for I := 0 to Length(Dest) - 1 do
     713    Dest[I] := Source[I];
     714end;
     715
     716function CombinePaths(Path1, Path2: string): string;
     717begin
     718  Result := Path1;
     719  if Result <> '' then Result := Result + DirectorySeparator + Path2
     720    else Result := Path2;
     721end;
     722
     723procedure SortStrings(Strings: TStrings);
     724var
     725  Tmp: TStringList;
     726begin
     727  Strings.BeginUpdate;
     728  try
     729    if Strings is TStringList then begin
     730      TStringList(Strings).Sort;
     731    end else begin
     732      Tmp := TStringList.Create;
     733      try
     734        Tmp.Assign(Strings);
     735        Tmp.Sort;
     736        Strings.Assign(Tmp);
     737      finally
     738        Tmp.Free;
     739      end;
     740    end;
     741  finally
     742    Strings.EndUpdate;
     743  end;
     744end;
    513745
    514746
  • trunk/Packages/Common/CommonPackage.pas

    r74 r75  
    33 }
    44
    5 unit Common;
     5unit CommonPackage;
    66
     7{$warn 5023 off : no warning about unused units}
    78interface
    89
    910uses
    10   StopWatch, UCommon, UDebugLog, UDelay, UPrefixMultiplier, UURI, UThreading,
    11   UMemory, UResetableThread, UPool, ULastOpenedList, URegistry,
    12   UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort,
    13   UPersistentForm, UFindFile, 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, LazarusPackageIntf;
    1417
    1518implementation
     
    1720procedure Register;
    1821begin
    19   RegisterUnit('UDebugLog', @UDebugLog.Register);
    20   RegisterUnit('ULastOpenedList', @ULastOpenedList.Register);
    21   RegisterUnit('UJobProgressView', @UJobProgressView.Register);
    22   RegisterUnit('UApplicationInfo', @UApplicationInfo.Register);
    23   RegisterUnit('UListViewSort', @UListViewSort.Register);
    24   RegisterUnit('UPersistentForm', @UPersistentForm.Register);
    25   RegisterUnit('UFindFile', @UFindFile.Register);
     22  RegisterUnit('DebugLog', @DebugLog.Register);
     23  RegisterUnit('PrefixMultiplier', @PrefixMultiplier.Register);
     24  RegisterUnit('LastOpenedList', @LastOpenedList.Register);
     25  RegisterUnit('JobProgressView', @JobProgressView.Register);
     26  RegisterUnit('ApplicationInfo', @ApplicationInfo.Register);
     27  RegisterUnit('ListViewSort', @ListViewSort.Register);
     28  RegisterUnit('PersistentForm', @PersistentForm.Register);
     29  RegisterUnit('FindFile', @FindFile.Register);
     30  RegisterUnit('ScaleDPI', @ScaleDPI.Register);
     31  RegisterUnit('Theme', @Theme.Register);
     32  RegisterUnit('Translator', @Translator.Register);
     33  RegisterUnit('FormEx', @FormEx.Register);
    2634end;
    2735
  • trunk/Packages/Common/DebugLog.pas

    r74 r75  
    1 unit UDebugLog;
    2 
    3 {$mode delphi}
     1unit DebugLog;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, FileUtil, SpecializedList, 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: TListObject;
     32    Items: TDebugLogItems;
    3233    Lock: TCriticalSection;
    3334    procedure Add(Text: string; Group: string = '');
     
    4445
    4546procedure Register;
     47
    4648
    4749implementation
     
    104106    if ExtractFileDir(FileName) <> '' then
    105107      ForceDirectories(ExtractFileDir(FileName));
    106     if FileExists(FileName) then LogFile := TFileStream.Create(UTF8Decode(FileName), fmOpenWrite)
    107       else LogFile := TFileStream.Create(UTF8Decode(FileName), fmCreate);
     108    if FileExists(FileName) then LogFile := TFileStream.Create(FileName, fmOpenWrite)
     109      else LogFile := TFileStream.Create(FileName, fmCreate);
    108110    LogFile.Seek(0, soFromEnd);
    109111    Text := FormatDateTime('hh:nn:ss.zzz', Now) + ': ' + Text + LineEnding;
     
    117119begin
    118120  inherited;
    119   Items := TListObject.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

    r74 r75  
    1919}
    2020
    21 unit UFindFile;
     21unit FindFile;
    2222
    2323interface
    2424
    2525uses
    26   SysUtils, Classes, Graphics, Controls, Forms, Dialogs, FileCtrl;
     26  SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
    2727
    2828type
     
    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
     
    5552  end;
    5653
     54const
     55{$IFDEF WINDOWS}
     56  FilterAll = '*.*';
     57{$ENDIF}
     58{$IFDEF UNIX}
     59  FilterAll = '*';
     60{$ENDIF}
     61
    5762procedure Register;
     63
    5864
    5965implementation
     
    7177  inherited Create(AOwner);
    7278  Path := IncludeTrailingBackslash(UTF8Encode(GetCurrentDir));
    73   FileMask := '*.*';
     79  FileMask := FilterAll;
    7480  FileAttr := [ffaAnyFile];
    7581  s := TStringList.Create;
     
    7985begin
    8086  s.Free;
    81   inherited Destroy;
     87  inherited;
    8288end;
    8389
     
    109115  Attr := 0;
    110116  if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly;
    111   if ffaHidden in FileAttr then Attr := Attr + faHidden;
    112   if ffaSysFile in FileAttr then Attr := Attr + faSysFile;
    113   if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
     117  if ffaHidden in FileAttr then Attr := Attr + 2; //faHidden; use constant to avoid platform warning
     118  if ffaSysFile in FileAttr then Attr := Attr + 4; //faSysFile; use constant to avoid platform warning
     119  // Deprecated: if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;
    114120  if ffaDirectory in FileAttr then Attr := Attr + faDirectory;
    115121  if ffaArchive in FileAttr then Attr := Attr + faArchive;
    116122  if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile;
    117123
    118   if SysUtils.FindFirst(UTF8Decode(inPath + FileMask), Attr, Rec) = 0 then
     124  if SysUtils.FindFirst(inPath + FileMask, Attr, Rec) = 0 then
    119125  try
    120126    repeat
    121       s.Add(inPath + UTF8Encode(Rec.Name));
     127      s.Add(inPath + Rec.Name);
    122128    until SysUtils.FindNext(Rec) <> 0;
    123129  finally
     
    127133  If not InSubFolders then Exit;
    128134
    129   if SysUtils.FindFirst(UTF8Decode(inPath + '*.*'), faDirectory, Rec) = 0 then
     135  if SysUtils.FindFirst(inPath + FilterAll, faDirectory, Rec) = 0 then
    130136  try
    131137    repeat
    132138      if ((Rec.Attr and faDirectory) > 0) and (Rec.Name <> '.')
    133139      and (Rec.Name <> '..') then
    134         FileSearch(IncludeTrailingBackslash(inPath + UTF8Encode(Rec.Name)));
     140        FileSearch(IncludeTrailingBackslash(inPath + Rec.Name));
    135141    until SysUtils.FindNext(Rec) <> 0;
    136142  finally
    137143    SysUtils.FindClose(Rec);
    138144  end;
    139 end; 
     145end;
    140146
    141147end.
    142 
  • trunk/Packages/Common/JobProgressView.lfm

    r74 r75  
    11object FormJobProgressView: TFormJobProgressView
    22  Left = 467
    3   Height = 246
     3  Height = 414
    44  Top = 252
    5   Width = 328
     5  Width = 647
    66  BorderIcons = [biSystemMenu]
    7   ClientHeight = 246
    8   ClientWidth = 328
    9   Font.Height = -11
    10   Font.Name = 'MS Sans Serif'
     7  ClientHeight = 414
     8  ClientWidth = 647
     9  DesignTimePPI = 144
    1110  OnClose = FormClose
    1211  OnCloseQuery = FormCloseQuery
    1312  OnCreate = FormCreate
    14   OnDestroy = FormDestroy
     13  OnHide = FormHide
     14  OnShow = FormShow
    1515  Position = poScreenCenter
    16   LCLVersion = '1.1'
     16  LCLVersion = '2.2.0.4'
    1717  object PanelOperationsTitle: TPanel
    1818    Left = 0
    19     Height = 24
     19    Height = 38
    2020    Top = 0
    21     Width = 328
     21    Width = 647
    2222    Align = alTop
    2323    BevelOuter = bvNone
    24     ClientHeight = 24
    25     ClientWidth = 328
     24    ClientHeight = 38
     25    ClientWidth = 647
    2626    FullRepaint = False
    2727    TabOrder = 0
    2828    object LabelOperation: TLabel
    29       Left = 8
    30       Height = 13
    31       Top = 8
    32       Width = 66
     29      Left = 10
     30      Height = 26
     31      Top = 10
     32      Width = 99
    3333      Caption = 'Operations:'
    34       Font.Height = -11
    35       Font.Name = 'MS Sans Serif'
    36       Font.Style = [fsBold]
    37       ParentColor = False
    3834      ParentFont = False
    3935    end
     
    4137  object PanelLog: TPanel
    4238    Left = 0
    43     Height = 122
    44     Top = 124
    45     Width = 328
     39    Height = 161
     40    Top = 253
     41    Width = 647
    4642    Align = alClient
    4743    BevelOuter = bvSpace
    48     ClientHeight = 122
    49     ClientWidth = 328
     44    ClientHeight = 161
     45    ClientWidth = 647
    5046    TabOrder = 1
    5147    object MemoLog: TMemo
    52       Left = 8
    53       Height = 106
    54       Top = 8
    55       Width = 312
     48      Left = 10
     49      Height = 141
     50      Top = 10
     51      Width = 627
    5652      Anchors = [akTop, akLeft, akRight, akBottom]
    5753      ReadOnly = True
     
    6258  object PanelProgress: TPanel
    6359    Left = 0
    64     Height = 38
    65     Top = 50
    66     Width = 328
     60    Height = 65
     61    Top = 126
     62    Width = 647
    6763    Align = alTop
    6864    BevelOuter = bvNone
    69     ClientHeight = 38
    70     ClientWidth = 328
     65    ClientHeight = 65
     66    ClientWidth = 647
    7167    TabOrder = 2
    7268    object ProgressBarPart: TProgressBar
    73       Left = 8
    74       Height = 17
    75       Top = 16
    76       Width = 312
     69      Left = 12
     70      Height = 29
     71      Top = 29
     72      Width = 628
    7773      Anchors = [akTop, akLeft, akRight]
    7874      TabOrder = 0
    7975    end
    8076    object LabelEstimatedTimePart: TLabel
    81       Left = 8
    82       Height = 13
     77      Left = 10
     78      Height = 26
    8379      Top = -2
    84       Width = 71
     80      Width = 132
    8581      Caption = 'Estimated time:'
    86       ParentColor = False
    8782    end
    8883  end
    8984  object PanelOperations: TPanel
    9085    Left = 0
    91     Height = 26
    92     Top = 24
    93     Width = 328
     86    Height = 50
     87    Top = 76
     88    Width = 647
    9489    Align = alTop
    9590    BevelOuter = bvNone
    96     ClientHeight = 26
    97     ClientWidth = 328
     91    ClientHeight = 50
     92    ClientWidth = 647
    9893    FullRepaint = False
    9994    TabOrder = 3
    10095    object ListViewJobs: TListView
    101       Left = 8
    102       Height = 16
    103       Top = 5
    104       Width = 312
     96      Left = 10
     97      Height = 38
     98      Top = 6
     99      Width = 627
    105100      Anchors = [akTop, akLeft, akRight, akBottom]
    106101      AutoWidthLastColumn = True
     
    109104      Columns = <     
    110105        item
    111           Width = 312
     106          Width = 614
    112107        end>
    113108      OwnerData = True
     
    122117  object PanelProgressTotal: TPanel
    123118    Left = 0
    124     Height = 36
    125     Top = 88
    126     Width = 328
     119    Height = 62
     120    Top = 191
     121    Width = 647
    127122    Align = alTop
    128123    BevelOuter = bvNone
    129     ClientHeight = 36
    130     ClientWidth = 328
     124    ClientHeight = 62
     125    ClientWidth = 647
    131126    TabOrder = 4
    132127    object LabelEstimatedTimeTotal: TLabel
    133       Left = 8
    134       Height = 13
     128      Left = 10
     129      Height = 26
    135130      Top = 0
    136       Width = 97
     131      Width = 178
    137132      Caption = 'Total estimated time:'
    138       ParentColor = False
    139133    end
    140134    object ProgressBarTotal: TProgressBar
    141       Left = 8
    142       Height = 16
    143       Top = 16
    144       Width = 312
     135      Left = 10
     136      Height = 29
     137      Top = 29
     138      Width = 627
    145139      Anchors = [akTop, akLeft, akRight]
    146140      TabOrder = 0
    147141    end
    148142  end
     143  object PanelText: TPanel
     144    Left = 0
     145    Height = 38
     146    Top = 38
     147    Width = 647
     148    Align = alTop
     149    BevelOuter = bvNone
     150    ClientHeight = 38
     151    ClientWidth = 647
     152    TabOrder = 5
     153    object LabelText: TLabel
     154      Left = 10
     155      Height = 29
     156      Top = 10
     157      Width = 630
     158      Anchors = [akTop, akLeft, akRight]
     159      AutoSize = False
     160    end
     161  end
    149162  object ImageList1: TImageList
    150     BkColor = clForeground
    151     left = 200
    152     top = 8
     163    Left = 240
     164    Top = 10
    153165    Bitmap = {
    154       4C69020000001000000010000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
    155       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    156       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    157       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    158       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    159       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    160       FF00000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    161       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    162       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    163       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    164       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    165       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    166       00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    167       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    168       00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00
    169       FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00
    170       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00
    171       FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00
    172       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    173       00FFFF00FF00000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00
    174       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000
    175       00FF000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00
    176       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000
    177       00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
    178       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
    179       00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    180       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    181       FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    182       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    183       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    184       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    185       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    186       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    187       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    188       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    189       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    190       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    191       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    192       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    193       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    194       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    195       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    196       FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    197       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    198       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    199       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    200       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    201       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    202       FFFF000084FF000000FFFF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    203       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
    204       84FF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000
    205       FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000084FF0000
    206       00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000
    207       00FF000000FF000000FF000000FF000000FF0000FFFF000084FF000000FFFF00
    208       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    209       FF00FF00FF00FF00FF00FF00FF00000000FF000084FF000000FFFF00FF00FF00
    210       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    211       FF00FF00FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00
    212       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    213       FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00
    214       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    215       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    216       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    217       FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
    218       FF00FF00FF00FF00FF00FF00FF00
     166      4C7A0200000010000000100000006A0000000000000078DAE593490E00100C45
     167      7B78F72E5684A63A1142C382BE4F0708F89C955117F4B016BE67B5FC6E96DB97
     168      B0D4B9F4CD949F36DED1DF922B0F1BD11FAB5AFC68DE5C44D40220A9FA779EC8
     169      6A349FD5A435E43CADA1E3678D73F773F1DBF3EFADFFEEFEBBF97F6696BE9D36
    219170    }
    220171  end
     
    223174    Interval = 100
    224175    OnTimer = TimerUpdateTimer
    225     left = 264
    226     top = 8
     176    Left = 384
     177    Top = 10
    227178  end
    228179end
  • trunk/Packages/Common/JobProgressView.pas

    r74 r75  
    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, Contnrs, UThreading,
     7  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Generics.Collections, Threading, Math,
    108  DateUtils;
    119
     
    1311  EstimatedTimeShowTreshold = 4;
    1412  EstimatedTimeShowTresholdTotal = 1;
    15   MemoLogHeight = 200;
    1613  UpdateInterval = 100; // ms
    1714
     
    2421    FLock: TCriticalSection;
    2522    FOnChange: TNotifyEvent;
     23    FText: string;
    2624    FValue: Integer;
    2725    FMax: Integer;
    2826    procedure SetMax(const AValue: Integer);
     27    procedure SetText(AValue: string);
    2928    procedure SetValue(const AValue: Integer);
    3029  public
     
    3534    property Value: Integer read FValue write SetValue;
    3635    property Max: Integer read FMax write SetMax;
     36    property Text: string read FText write SetText;
    3737    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    3838  end;
     
    6969  end;
    7070
     71  TJobs = class(TObjectList<TJob>)
     72  end;
     73
    7174  TJobThread = class(TListedThread)
    7275    procedure Execute; override;
     
    8083  TFormJobProgressView = class(TForm)
    8184    ImageList1: TImageList;
     85    LabelText: TLabel;
    8286    Label2: TLabel;
    8387    LabelOperation: TLabel;
     
    8690    ListViewJobs: TListView;
    8791    MemoLog: TMemo;
     92    PanelText: TPanel;
    8893    PanelProgressTotal: TPanel;
    8994    PanelOperationsTitle: TPanel;
     
    9499    ProgressBarTotal: TProgressBar;
    95100    TimerUpdate: TTimer;
     101    procedure FormHide(Sender: TObject);
     102    procedure FormShow(Sender: TObject);
     103    procedure ReloadJobList;
    96104    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    97     procedure FormDestroy(Sender: TObject);
    98105    procedure ListViewJobsData(Sender: TObject; Item: TListItem);
    99106    procedure TimerUpdateTimer(Sender: TObject);
    100107    procedure FormCreate(Sender: TObject);
    101108    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     109    procedure UpdateHeight;
    102110  public
    103111    JobProgressView: TJobProgressView;
     
    118126    TotalStartTime: TDateTime;
    119127    Log: TStringList;
     128    FForm: TFormJobProgressView;
    120129    procedure SetTerminate(const AValue: Boolean);
    121130    procedure UpdateProgress;
    122     procedure ReloadJobList;
    123     procedure StartJobs;
    124     procedure UpdateHeight;
    125131    procedure JobProgressChange(Sender: TObject);
    126132  public
    127     Form: TFormJobProgressView;
    128     Jobs: TObjectList; // TListObject<TJob>
     133    Jobs: TJobs;
    129134    CurrentJob: TJob;
    130135    CurrentJobIndex: Integer;
     
    132137    destructor Destroy; override;
    133138    procedure Clear;
    134     procedure AddJob(Title: string; Method: TJobProgressViewMethod;
    135       NoThreaded: Boolean = False; WaitFor: Boolean = False);
    136     procedure Start(AAutoClose: Boolean = True);
     139    function AddJob(Title: string; Method: TJobProgressViewMethod;
     140      NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob;
     141    procedure Start;
    137142    procedure Stop;
    138143    procedure TermSleep(Delay: Integer);
     144    property Form: TFormJobProgressView read FForm;
    139145    property Terminate: Boolean read FTerminate write SetTerminate;
    140146  published
     
    148154  end;
    149155
    150   //var
    151   //  FormJobProgressView: TFormJobProgressView;
    152 
    153156procedure Register;
    154157
    155158resourcestring
    156159  SExecuted = 'Executed';
     160
    157161
    158162implementation
     
    172176end;
    173177
     178{ TJobThread }
     179
    174180procedure TJobThread.Execute;
    175181begin
    176182  try
    177183    try
    178       //raise Exception.Create('Exception in job');
    179184      ProgressView.CurrentJob.Method(Job);
    180185    except
     
    189194end;
    190195
    191 procedure TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod;
    192   NoThreaded: Boolean = False; WaitFor: Boolean = False);
     196{ TFormJobProgressView }
     197
     198procedure TFormJobProgressView.UpdateHeight;
    193199var
    194   NewJob: TJob;
    195 begin
    196   NewJob := TJob.Create;
    197   NewJob.ProgressView := Self;
    198   NewJob.Title := Title;
    199   NewJob.Method := Method;
    200   NewJob.NoThreaded := NoThreaded;
    201   NewJob.WaitFor := WaitFor;
    202   NewJob.Progress.Max := 100;
    203   NewJob.Progress.Reset;
    204   NewJob.Progress.OnChange := JobProgressChange;
    205   Jobs.Add(NewJob);
     200  H: Integer;
     201  PanelOperationsVisible: Boolean;
     202  PanelOperationsHeight: Integer;
     203  PanelProgressVisible: Boolean;
     204  PanelProgressTotalVisible: Boolean;
     205  PanelLogVisible: Boolean;
     206  MemoLogHeight: Integer = 200;
     207  I: Integer;
     208  ItemRect: TRect;
     209  MaxH: Integer;
     210begin
     211    H := PanelOperationsTitle.Height;
     212    PanelOperationsVisible := JobProgressView.Jobs.Count > 0;
     213    if PanelOperationsVisible <> PanelOperations.Visible then
     214      PanelOperations.Visible := PanelOperationsVisible;
     215    if ListViewJobs.Items.Count > 0 then begin
     216      Maxh := 0;
     217      for I := 0 to ListViewJobs.Items.Count - 1 do
     218      begin
     219        ItemRect := ListViewJobs.Items[i].DisplayRect(drBounds);
     220        Maxh := Max(Maxh, ItemRect.Top + (ItemRect.Bottom - ItemRect.Top));
     221      end;
     222      PanelOperationsHeight := Scale96ToScreen(12) + Maxh;
     223    end else PanelOperationsHeight := Scale96ToScreen(8);
     224    if PanelOperationsHeight <> PanelOperations.Height then
     225      PanelOperations.Height := PanelOperationsHeight;
     226    if PanelOperationsVisible then
     227      H := H + PanelOperations.Height;
     228
     229    PanelProgressVisible := (JobProgressView.Jobs.Count > 0) and not JobProgressView.Finished;
     230    if PanelProgressVisible <> PanelProgress.Visible then
     231      PanelProgress.Visible := PanelProgressVisible;
     232    if PanelProgressVisible then
     233      H := H + PanelProgress.Height;
     234    PanelProgressTotalVisible := (JobProgressView.Jobs.Count > 1) and not JobProgressView.Finished;
     235    if PanelProgressTotalVisible <> PanelProgressTotal.Visible then
     236      PanelProgressTotal.Visible := PanelProgressTotalVisible;
     237    if PanelProgressTotalVisible then
     238      H := H + PanelProgressTotal.Height;
     239    Constraints.MinHeight := H;
     240    PanelLogVisible := MemoLog.Lines.Count > 0;
     241    if PanelLogVisible <> PanelLog.Visible then
     242      PanelLog.Visible := PanelLogVisible;
     243    if PanelLogVisible then
     244      H := H + Scale96ToScreen(MemoLogHeight);
     245    if PanelText.Visible then
     246      H := H + PanelText.Height;
     247    if Height <> H then begin
     248      Height := H;
     249      Top := (Screen.Height - H) div 2;
     250    end;
     251end;
     252
     253procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject);
     254var
     255  ProgressBarPartVisible: Boolean;
     256  ProgressBarTotalVisible: Boolean;
     257begin
     258  JobProgressView.UpdateProgress;
     259  if Visible and (not ProgressBarPart.Visible) and
     260  Assigned(JobProgressView.CurrentJob) and
     261  (JobProgressView.CurrentJob.Progress.Value > 0) then begin
     262    ProgressBarPartVisible := True;
     263    if ProgressBarPartVisible <> ProgressBarPart.Visible then
     264      ProgressBarPart.Visible := ProgressBarPartVisible;
     265    ProgressBarTotalVisible := True;
     266    if ProgressBarTotalVisible <> ProgressBarTotal.Visible then
     267      ProgressBarTotal.Visible := ProgressBarTotalVisible;
     268  end;
     269  if not Visible then begin
     270    TimerUpdate.Interval := UpdateInterval;
     271    if not JobProgressView.OwnerDraw then Show;
     272  end;
     273  if Assigned(JobProgressView.CurrentJob) then begin
     274    LabelText.Caption := JobProgressView.CurrentJob.Progress.Text;
     275    if LabelText.Caption <> '' then begin
     276      PanelText.Visible := True;
     277      UpdateHeight;
     278    end;
     279  end;
     280end;
     281
     282procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);
     283begin
     284  if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then
     285  with JobProgressView.Jobs[Item.Index] do begin
     286    Item.Caption := Title;
     287    if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1
     288      else if Finished then Item.ImageIndex := 0
     289      else Item.ImageIndex := 2;
     290    Item.Data := JobProgressView.Jobs[Item.Index];
     291  end;
     292end;
     293
     294procedure TFormJobProgressView.FormClose(Sender: TObject;
     295  var CloseAction: TCloseAction);
     296begin
     297end;
     298
     299procedure TFormJobProgressView.FormCreate(Sender: TObject);
     300begin
     301  Caption := SPleaseWait;
     302  try
     303    //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +
     304    //  DirectorySeparator + 'horse.avi';
     305    //Animate1.Active := True;
     306  except
     307
     308  end;
     309end;
     310
     311procedure TFormJobProgressView.ReloadJobList;
     312begin
     313  // Workaround for not showing first line
     314  //Form.ListViewJobs.Items.Count := Jobs.Count + 1;
     315  //Form.ListViewJobs.Refresh;
     316
     317  if ListViewJobs.Items.Count <> JobProgressView.Jobs.Count then
     318    ListViewJobs.Items.Count := JobProgressView.Jobs.Count;
     319  ListViewJobs.Refresh;
     320  Application.ProcessMessages;
     321  UpdateHeight;
     322end;
     323
     324procedure TFormJobProgressView.FormShow(Sender: TObject);
     325begin
     326  ReloadJobList;
     327end;
     328
     329procedure TFormJobProgressView.FormHide(Sender: TObject);
     330begin
     331  JobProgressView.Jobs.Clear;
     332  ReloadJobList;
     333end;
     334
     335procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     336begin
     337  CanClose := JobProgressView.Finished;
     338  JobProgressView.Terminate := True;
     339  Caption := SPleaseWait + STerminate;
     340end;
     341
     342
     343{ TJobProgressView }
     344
     345function TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod;
     346  NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob;
     347begin
     348  Result := TJob.Create;
     349  Result.ProgressView := Self;
     350  Result.Title := Title;
     351  Result.Method := Method;
     352  Result.NoThreaded := NoThreaded;
     353  Result.WaitFor := WaitFor;
     354  Result.Progress.Max := 100;
     355  Result.Progress.Reset;
     356  Result.Progress.OnChange := JobProgressChange;
     357  Jobs.Add(Result);
    206358  //ReloadJobList;
    207359end;
    208360
    209 procedure TJobProgressView.Start(AAutoClose: Boolean = True);
    210 begin
    211   AutoClose := AAutoClose;
    212   StartJobs;
    213 end;
    214 
    215 procedure TJobProgressView.StartJobs;
     361procedure TJobProgressView.Start;
    216362var
    217363  I: Integer;
     
    228374    Form.MemoLog.Clear;
    229375
     376    Form.PanelText.Visible := False;
    230377    Form.LabelEstimatedTimePart.Visible := False;
    231378    Form.LabelEstimatedTimeTotal.Visible := False;
     
    248395    I := 0;
    249396    while I < Jobs.Count do
    250     with TJob(Jobs[I]) do begin
     397    with Jobs[I] do begin
    251398      CurrentJobIndex := I;
    252       CurrentJob := TJob(Jobs[I]);
     399      CurrentJob := Jobs[I];
    253400      JobProgressChange(Self);
    254401      StartTime := Now;
     
    257404      Form.ProgressBarPart.Visible := False;
    258405      //Show;
    259       ReloadJobList;
     406      Form.ReloadJobList;
    260407      Application.ProcessMessages;
    261408      if NoThreaded then begin
     
    263410        Method(CurrentJob);
    264411      end else begin
     412        Thread := TJobThread.Create(True);
    265413        try
    266           Thread := TJobThread.Create(True);
    267414          with Thread do begin
    268415            FreeOnTerminate := False;
     
    295442    //if Visible then Hide;
    296443    Form.MemoLog.Lines.Assign(Log);
    297     if (Form.MemoLog.Lines.Count = 0) and AutoClose then begin
     444    if (Form.MemoLog.Lines.Count = 0) and FAutoClose then begin
    298445      Form.Hide;
    299446    end;
    300     Clear;
     447    if not Form.Visible then Clear;
    301448    Form.Caption := SFinished;
    302449    //LabelEstimatedTimePart.Visible := False;
    303450    Finished := True;
    304451    CurrentJobIndex := -1;
    305     ReloadJobList;
    306   end;
    307 end;
    308 
    309 procedure TJobProgressView.UpdateHeight;
    310 var
    311   H: Integer;
    312   PanelOperationsVisible: Boolean;
    313   PanelOperationsHeight: Integer;
    314   PanelProgressVisible: Boolean;
    315   PanelProgressTotalVisible: Boolean;
    316   PanelLogVisible: Boolean;
    317 begin
    318   with Form do begin
    319   H := PanelOperationsTitle.Height;
    320   PanelOperationsVisible := Jobs.Count > 0;
    321   if PanelOperationsVisible <> PanelOperations.Visible then
    322     PanelOperations.Visible := PanelOperationsVisible;
    323   PanelOperationsHeight := 8 + 18 * Jobs.Count;
    324   if PanelOperationsHeight <> PanelOperations.Height then
    325     PanelOperations.Height := PanelOperationsHeight;
    326   if PanelOperationsVisible then
    327     H := H + PanelOperations.Height;
    328 
    329   PanelProgressVisible := (Jobs.Count > 0) and not Finished;
    330   if PanelProgressVisible <> PanelProgress.Visible then
    331     PanelProgress.Visible := PanelProgressVisible;
    332   if PanelProgressVisible then
    333     H := H + PanelProgress.Height;
    334   PanelProgressTotalVisible := (Jobs.Count > 1) and not Finished;
    335   if PanelProgressTotalVisible <> PanelProgressTotal.Visible then
    336     PanelProgressTotal.Visible := PanelProgressTotalVisible;
    337   if PanelProgressTotalVisible then
    338     H := H + PanelProgressTotal.Height;
    339   Constraints.MinHeight := H;
    340   PanelLogVisible := MemoLog.Lines.Count > 0;
    341   if PanelLogVisible <> PanelLog.Visible then
    342     PanelLog.Visible := PanelLogVisible;
    343   if PanelLogVisible then
    344     H := H + MemoLogHeight;
    345   if Height <> H then Height := H;
     452    Form.ReloadJobList;
    346453  end;
    347454end;
     
    351458  if Assigned(FOnOwnerDraw) then
    352459    FOnOwnerDraw(Self);
    353 end;
    354 
    355 procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject);
    356 var
    357   ProgressBarPartVisible: Boolean;
    358   ProgressBarTotalVisible: Boolean;
    359 begin
    360   JobProgressView.UpdateProgress;
    361   if Visible and (not ProgressBarPart.Visible) and
    362   Assigned(JobProgressView.CurrentJob) and
    363   (JobProgressView.CurrentJob.Progress.Value > 0) then begin
    364     ProgressBarPartVisible := True;
    365     if ProgressBarPartVisible <> ProgressBarPart.Visible then
    366       ProgressBarPart.Visible := ProgressBarPartVisible;
    367     ProgressBarTotalVisible := True;
    368     if ProgressBarTotalVisible <> ProgressBarTotal.Visible then
    369       ProgressBarTotal.Visible := ProgressBarTotalVisible;
    370   end;
    371   if not Visible then begin
    372     TimerUpdate.Interval := UpdateInterval;
    373     if not JobProgressView.OwnerDraw then Show;
    374   end;
    375 end;
    376 
    377 procedure TFormJobProgressView.FormDestroy(Sender:TObject);
    378 begin
    379 end;
    380 
    381 procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);
    382 begin
    383   if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then
    384   with TJob(JobProgressView.Jobs[Item.Index]) do begin
    385     Item.Caption := Title;
    386     if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1
    387       else if Finished then Item.ImageIndex := 0
    388       else Item.ImageIndex := 2;
    389     Item.Data := JobProgressView.Jobs[Item.Index];
    390   end;
    391 end;
    392 
    393 procedure TFormJobProgressView.FormClose(Sender: TObject;
    394   var CloseAction: TCloseAction);
    395 begin
    396   ListViewJobs.Clear;
    397 end;
    398 
    399 procedure TFormJobProgressView.FormCreate(Sender: TObject);
    400 begin
    401   Caption := SPleaseWait;
    402   try
    403     //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +
    404     //  DirectorySeparator + 'horse.avi';
    405     //Animate1.Active := True;
    406   except
    407 
    408   end;
    409460end;
    410461
     
    427478end;
    428479
    429 procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    430 begin
    431   CanClose := JobProgressView.Finished;
    432   JobProgressView.Terminate := True;
    433   Caption := SPleaseWait + STerminate;
    434 end;
    435 
    436480procedure TJobProgressView.SetTerminate(const AValue: Boolean);
    437481var
     
    440484  if AValue = FTerminate then Exit;
    441485  for I := 0 to Jobs.Count - 1 do
    442     TJob(Jobs[I]).Terminate := AValue;
     486    Jobs[I].Terminate := AValue;
    443487  FTerminate := AValue;
    444488end;
     
    489533end;
    490534
    491 procedure TJobProgressView.ReloadJobList;
    492 begin
    493   UpdateHeight;
    494   // Workaround for not showing first line
    495   Form.ListViewJobs.Items.Count := Jobs.Count + 1;
    496   Form.ListViewJobs.Refresh;
    497 
    498   if Form.ListViewJobs.Items.Count <> Jobs.Count then
    499     Form.ListViewJobs.Items.Count := Jobs.Count;
    500   Form.ListViewJobs.Refresh;
    501   //Application.ProcessMessages;
    502 end;
    503 
    504535constructor TJobProgressView.Create(TheOwner: TComponent);
    505536begin
    506537  inherited;
    507538  if not (csDesigning in ComponentState) then begin
    508     Form := TFormJobProgressView.Create(Self);
    509     Form.JobProgressView := Self;
    510   end;
    511   Jobs := TObjectList.Create;
     539    FForm := TFormJobProgressView.Create(Self);
     540    FForm.JobProgressView := Self;
     541  end;
     542  Jobs := TJobs.Create;
    512543  Log := TStringList.Create;
    513544  //PanelOperationsTitle.Height := 80;
    514   ShowDelay := 0; //1000; // ms
     545  AutoClose := True;
     546  ShowDelay := 0;
    515547end;
    516548
     
    518550begin
    519551  Jobs.Clear;
     552  Log.Clear;
    520553  //ReloadJobList;
    521554end;
     
    527560  inherited;
    528561end;
     562
     563{ TProgress }
    529564
    530565procedure TProgress.SetMax(const AValue: Integer);
     
    535570    if FMax < 1 then FMax := 1;
    536571    if FValue >= FMax then FValue := FMax;
     572  finally
     573    FLock.Release;
     574  end;
     575end;
     576
     577procedure TProgress.SetText(AValue: string);
     578begin
     579  try
     580    FLock.Acquire;
     581    if FText = AValue then Exit;
     582    FText := AValue;
    537583  finally
    538584    FLock.Release;
     
    562608end;
    563609
    564 { TProgress }
    565 
    566610procedure TProgress.Increment;
    567611begin
    568   try
    569     FLock.Acquire;
     612  FLock.Acquire;
     613  try
    570614    Value := Value + 1;
    571615  finally
     
    576620procedure TProgress.Reset;
    577621begin
    578   try
    579     FLock.Acquire;
     622  FLock.Acquire;
     623  try
    580624    FValue := 0;
    581625  finally
     
    593637begin
    594638  FLock.Free;
    595   inherited Destroy;
     639  inherited;
    596640end;
    597641
     
    624668destructor TJob.Destroy;
    625669begin
    626   Progress.Free;
     670  FreeAndNil(Progress);
    627671  inherited;
    628672end;
  • trunk/Packages/Common/Languages/DebugLog.cs.po

    r74 r75  
    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/Pool.cs.po

    r74 r75  
    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/ResetableThread.cs.po

    r74 r75  
    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/Threading.cs.po

    r74 r75  
    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
     15#, object-pascal-format
     16msgctxt "threading.scurrentthreadnotfound"
    1317msgid "Current thread ID %d not found in virtual thread list."
    1418msgstr "Aktuální vlákno ID %d nenalezeno v seznamu virtuálních vláken."
  • trunk/Packages/Common/LastOpenedList.pas

    r74 r75  
    1 unit ULastOpenedList;
    2 
    3 {$mode delphi}
     1unit LastOpenedList;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Registry, URegistry, Menus;
     6  Classes, SysUtils, Registry, RegistryEx, Menus, XMLConf, DOM;
    97
    108type
     
    2725    procedure LoadFromRegistry(Context: TRegistryContext);
    2826    procedure SaveToRegistry(Context: TRegistryContext);
     27    procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; Path: string);
     28    procedure SaveToXMLConfig(XMLConfig: TXMLConfig; Path: string);
    2929    procedure AddItem(FileName: string);
     30    function GetFirstFileName: string;
    3031  published
    3132    property MaxCount: Integer read FMaxCount write SetMaxCount;
     
    8182destructor TLastOpenedList.Destroy;
    8283begin
    83   Items.Free;
     84  FreeAndNil(Items);
    8485  inherited;
    8586end;
     
    9192begin
    9293  if Assigned(MenuItem) then begin
    93     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;
    94100    for I := 0 to Items.Count - 1 do begin
    95       NewMenuItem := TMenuItem.Create(MenuItem);
    96       NewMenuItem.Caption := Items[I];
    97       NewMenuItem.OnClick := ClickAction;
    98       MenuItem.Add(NewMenuItem);
     101      MenuItem.Items[I].Caption := Items[I];
     102      MenuItem.Items[I].OnClick := ClickAction;
    99103    end;
    100104  end;
     
    137141    OpenKey(Context.Key, True);
    138142    for I := 0 to Items.Count - 1 do
    139       WriteString('File' + IntToStr(I), UTF8Decode(Items[I]));
     143      WriteString('File' + IntToStr(I), Items[I]);
    140144  finally
    141145    Free;
     146  end;
     147end;
     148
     149procedure TLastOpenedList.LoadFromXMLConfig(XMLConfig: TXMLConfig; Path: string
     150  );
     151var
     152  I: Integer;
     153  Value: string;
     154  Count: Integer;
     155begin
     156  with XMLConfig do begin
     157    Count := GetValue(DOMString(Path + '/Count'), 0);
     158    if Count > MaxCount then Count := MaxCount;
     159    Items.Clear;
     160    for I := 0 to Count - 1 do begin
     161      Value := string(GetValue(DOMString(Path + '/File' + IntToStr(I)), ''));
     162      if Trim(Value) <> '' then Items.Add(Value);
     163    end;
     164    if Assigned(FOnChange) then
     165      FOnChange(Self);
     166  end;
     167end;
     168
     169procedure TLastOpenedList.SaveToXMLConfig(XMLConfig: TXMLConfig; Path: string);
     170var
     171  I: Integer;
     172begin
     173  with XMLConfig do begin
     174    SetValue(DOMString(Path + '/Count'), Items.Count);
     175    for I := 0 to Items.Count - 1 do
     176      SetValue(DOMString(Path + '/File' + IntToStr(I)), DOMString(Items[I]));
     177    Flush;
    142178  end;
    143179end;
     
    151187end;
    152188
     189function TLastOpenedList.GetFirstFileName: string;
     190begin
     191  if Items.Count > 0 then Result := Items[0]
     192    else Result := '';
     193end;
     194
    153195end.
    154 
  • trunk/Packages/Common/ListViewSort.pas

    r74 r75  
    1 unit UListViewSort;
    2 
    3 // Date: 2010-11-03
    4 
    5 {$mode delphi}
     1unit ListViewSort;
     2
     3// Date: 2019-05-17
    64
    75interface
    86
    97uses
    10   {$IFDEF Windows}Windows, CommCtrl, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
    11   Controls, DateUtils, Dialogs, SpecializedList, Forms, Grids, StdCtrls, ExtCtrls;
     8  {$IFDEF Windows}Windows, CommCtrl, LMessages, {$ENDIF}Classes, Graphics, ComCtrls, SysUtils,
     9  Controls, DateUtils, Dialogs, Forms, Grids, StdCtrls, ExtCtrls,
     10  LclIntf, LclType, LResources, Generics.Collections, Generics.Defaults;
    1211
    1312type
     
    1817  TCompareEvent = function (Item1, Item2: TObject): Integer of object;
    1918  TListFilterEvent = procedure (ListViewSort: TListViewSort) of object;
     19
     20  TObjects = TObjectList<TObject>;
     21
     22  { TListViewSort }
    2023
    2124  TListViewSort = class(TComponent)
     
    2831    FColumn: Integer;
    2932    FOrder: TSortOrder;
     33    FOldListViewWindowProc: TWndMethod;
     34    FOnColumnWidthChanged: TNotifyEvent;
     35    procedure DoColumnBeginResize(const AColIndex: Integer);
     36    procedure DoColumnResized(const AColIndex: Integer);
     37    procedure DoColumnResizing(const AColIndex, AWidth: Integer);
    3038    procedure SetListView(const Value: TListView);
    3139    procedure ColumnClick(Sender: TObject; Column: TListColumn);
     
    4048    procedure SetColumn(const Value: Integer);
    4149    procedure SetOrder(const Value: TSortOrder);
     50    {$IFDEF WINDOWS}
     51    procedure NewListViewWindowProc(var AMsg: TMessage);
     52    {$ENDIF}
    4253  public
    43     List: TListObject;
    44     Source: TListObject;
     54    Source: TObjects;
     55    List: TObjects;
    4556    constructor Create(AOwner: TComponent); override;
    4657    destructor Destroy; override;
     
    5869    property OnCustomDraw: TLVCustomDrawItemEvent read FOnCustomDraw
    5970      write FOnCustomDraw;
     71    property OnColumnWidthChanged: TNotifyEvent read FOnColumnWidthChanged
     72      write FOnColumnWidthChanged;
    6073    property Column: Integer read FColumn write SetColumn;
    6174    property Order: TSortOrder read FOrder write SetOrder;
     
    6881    FOnChange: TNotifyEvent;
    6982    FStringGrid1: TStringGrid;
    70     procedure DoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     83    procedure DoOnChange;
     84    procedure GridDoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     85    procedure GridDoOnResize(Sender: TObject);
    7186  public
    7287    constructor Create(AOwner: TComponent); override;
    7388    procedure UpdateFromListView(ListView: TListView);
    7489    function TextEntered: Boolean;
     90    function TextEnteredCount: Integer;
     91    function TextEnteredColumn(Index: Integer): Boolean;
    7592    function GetColValue(Index: Integer): string;
     93    procedure Reset;
    7694    property StringGrid: TStringGrid read FStringGrid1 write FStringGrid1;
    7795  published
     
    7997    property Align;
    8098    property Anchors;
     99    property BorderSpacing;
     100  end;
     101
     102  { TListViewEx }
     103
     104  TListViewEx = class(TWinControl)
     105  private
     106    FFilter: TListViewFilter;
     107    FListView: TListView;
     108    FListViewSort: TListViewSort;
     109    procedure ResizeHanlder;
     110  public
     111    constructor Create(TheOwner: TComponent); override;
     112    destructor Destroy; override;
     113  published
     114    property ListView: TListView read FListView write FListView;
     115    property ListViewSort: TListViewSort read FListViewSort write FListViewSort;
     116    property Filter: TListViewFilter read FFilter write FFilter;
     117    property Visible;
    81118  end;
    82119
     
    88125procedure Register;
    89126begin
    90   RegisterComponents('Common', [TListViewSort, TListViewFilter]);
     127  RegisterComponents('Common', [TListViewSort, TListViewFilter, TListViewEx]);
     128end;
     129
     130{ TListViewEx }
     131
     132procedure TListViewEx.ResizeHanlder;
     133begin
     134end;
     135
     136constructor TListViewEx.Create(TheOwner: TComponent);
     137begin
     138  inherited Create(TheOwner);
     139  Filter := TListViewFilter.Create(Self);
     140  Filter.Parent := Self;
     141  Filter.Align := alBottom;
     142  ListView := TListView.Create(Self);
     143  ListView.Parent := Self;
     144  ListView.Align := alClient;
     145  ListViewSort := TListViewSort.Create(Self);
     146  ListViewSort.ListView := ListView;
     147end;
     148
     149destructor TListViewEx.Destroy;
     150begin
     151  inherited;
    91152end;
    92153
    93154{ TListViewFilter }
    94155
    95 procedure TListViewFilter.DoOnKeyUp(Sender: TObject; var Key: Word;
     156procedure TListViewFilter.DoOnChange;
     157begin
     158  if Assigned(FOnChange) then FOnChange(Self);
     159end;
     160
     161procedure TListViewFilter.GridDoOnKeyUp(Sender: TObject; var Key: Word;
    96162  Shift: TShiftState);
    97163begin
    98   if Assigned(FOnChange) then
    99     FOnChange(Self);
     164  DoOnChange;
     165end;
     166
     167procedure TListViewFilter.GridDoOnResize(Sender: TObject);
     168begin
     169  FStringGrid1.DefaultRowHeight := FStringGrid1.Height;
    100170end;
    101171
     
    113183  FStringGrid1.Options := [goFixedHorzLine, goFixedVertLine, goVertLine,
    114184    goHorzLine, goRangeSelect, goEditing, goAlwaysShowEditor, goSmoothScroll];
    115   FStringGrid1.OnKeyUp := DoOnKeyUp;
     185  FStringGrid1.OnKeyUp := GridDoOnKeyUp;
     186  FStringGrid1.OnResize := GridDoOnResize;
    116187end;
    117188
     
    119190var
    120191  I: Integer;
    121   NewColumn: TGridColumn;
     192  R: TRect;
    122193begin
    123194  with FStringGrid1 do begin
    124     Columns.Clear;
    125195    while Columns.Count > ListView.Columns.Count do Columns.Delete(Columns.Count - 1);
    126     while Columns.Count < ListView.Columns.Count do NewColumn := Columns.Add;
     196    while Columns.Count < ListView.Columns.Count do Columns.Add;
    127197    for I := 0 to ListView.Columns.Count - 1 do begin
    128198      Columns[I].Width := ListView.Columns[I].Width;
     199      if Selection.Left = I then begin
     200        R := CellRect(I, 0);
     201        Editor.Left := R.Left + 2;
     202        Editor.Width := R.Width - 4;
     203      end;
    129204    end;
    130205  end;
     
    132207
    133208function TListViewFilter.TextEntered: Boolean;
     209begin
     210  Result := TextEnteredCount > 0;
     211end;
     212
     213function TListViewFilter.TextEnteredCount: Integer;
    134214var
    135215  I: Integer;
    136216begin
    137   Result := False;
     217  Result := 0;
    138218  for I := 0 to FStringGrid1.ColCount - 1 do begin
    139219    if FStringGrid1.Cells[I, 0] <> '' then begin
    140       Result := True;
    141       Break;
     220      Inc(Result);
    142221    end;
    143222  end;
     223end;
     224
     225function TListViewFilter.TextEnteredColumn(Index: Integer): Boolean;
     226begin
     227  Result := FStringGrid1.Cells[Index, 0] <> '';
    144228end;
    145229
     
    151235end;
    152236
     237procedure TListViewFilter.Reset;
     238var
     239  I: Integer;
     240begin
     241  with StringGrid do
     242  for I := 0 to ColCount - 1 do
     243    Cells[I, 0] := '';
     244  DoOnChange;
     245end;
     246
    153247{ TListViewSort }
    154248
     249{$IFDEF WINDOWS}
     250procedure TListViewSort.NewListViewWindowProc(var AMsg: TMessage);
     251var
     252  vColWidth: Integer;
     253  vMsgNotify: TLMNotify absolute AMsg;
     254  Code: Integer;
     255begin
     256  // call the old WindowProc of ListView
     257  FOldListViewWindowProc(AMsg);
     258
     259  // Currently we care only with WM_NOTIFY message
     260  if AMsg.Msg = WM_NOTIFY then
     261  begin
     262    Code := NMHDR(PHDNotify(vMsgNotify.NMHdr)^.Hdr).Code;
     263    case Code of
     264      HDN_ENDTRACKA, HDN_ENDTRACKW:
     265        DoColumnResized(PHDNotify(vMsgNotify.NMHdr)^.Item);
     266
     267      HDN_BEGINTRACKA, HDN_BEGINTRACKW:
     268        DoColumnBeginResize(PHDNotify(vMsgNotify.NMHdr)^.Item);
     269
     270      HDN_TRACKA, HDN_TRACKW:
     271        begin
     272          vColWidth := -1;
     273          if (PHDNotify(vMsgNotify.NMHdr)^.PItem<>nil)
     274             and (PHDNotify(vMsgNotify.NMHdr)^.PItem^.Mask and HDI_WIDTH <> 0)
     275          then
     276            vColWidth := PHDNotify(vMsgNotify.NMHdr)^.PItem^.cxy;
     277
     278          DoColumnResizing(PHDNotify(vMsgNotify.NMHdr)^.Item, vColWidth);
     279        end;
     280    end;
     281  end;
     282end;
     283{$ENDIF}
     284
     285procedure TListViewSort.DoColumnBeginResize(const AColIndex: Integer);
     286begin
     287end;
     288
     289procedure TListViewSort.DoColumnResizing(const AColIndex, AWidth: Integer);
     290begin
     291end;
     292
     293procedure TListViewSort.DoColumnResized(const AColIndex: Integer);
     294begin
     295  if Assigned(FOnColumnWidthChanged) then
     296    FOnColumnWidthChanged(Self);
     297end;
    155298
    156299procedure TListViewSort.ColumnClick(Sender: TObject; Column: TListColumn);
     
    179322procedure TListViewSort.SetListView(const Value: TListView);
    180323begin
     324  if FListView = Value then Exit;
     325  if Assigned(FListView) then
     326    ListView.WindowProc := FOldListViewWindowProc;
    181327  FListView := Value;
    182328  FListView.OnColumnClick := ColumnClick;
    183329  FListView.OnCustomDrawItem := ListViewCustomDrawItem;
    184330  FListView.OnClick := ListViewClick;
     331  FOldListViewWindowProc := FListView.WindowProc;
     332  {$IFDEF WINDOWS}
     333  FListView.WindowProc := NewListViewWindowProc;
     334  {$ENDIF}
     335end;
     336
     337var
     338  ListViewSortCompare: TCompareEvent;
     339
     340function ListViewCompare(constref Item1, Item2: TObject): Integer;
     341begin
     342  Result := ListViewSortCompare(Item1, Item2);
    185343end;
    186344
    187345procedure TListViewSort.Sort(Compare: TCompareEvent);
    188346begin
     347  // TODO: Because TFLGObjectList compare handler is not class method,
     348  // it is necessary to use simple function compare handler with local variable
     349  ListViewSortCompare := Compare;
    189350  if (List.Count > 0) then
    190     List.Sort(Compare);
     351    List.Sort(TComparer<TObject>.Construct(ListViewCompare));
    191352end;
    192353
     
    194355begin
    195356  if Assigned(FOnFilter) then FOnFilter(Self)
    196   else if Assigned(Source) then
    197     List.Assign(Source) else
     357  else if Assigned(Source) then begin
    198358    List.Clear;
     359    List.AddRange(Source);
     360  end else List.Clear;
    199361  if ListView.Items.Count <> List.Count then
    200362    ListView.Items.Count := List.Count;
    201   if Assigned(FOnCompareItem) then Sort(FOnCompareItem);
     363  if Assigned(FOnCompareItem) and (Order <> soNone) then Sort(FOnCompareItem);
    202364  //ListView.Items[-1]; // Workaround for not show first row if selected
    203365  ListView.Refresh;
     
    251413begin
    252414  inherited;
    253   List := TListObject.Create;
     415  List := TObjects.Create;
    254416  List.OwnsObjects := False;
    255417end;
     
    257419destructor TListViewSort.Destroy;
    258420begin
    259   List.Free;
     421  FreeAndNil(List);
    260422  inherited;
    261423end;
     
    266428  TP1: TPoint;
    267429  XBias, YBias: Integer;
    268   OldColor: TColor;
     430  PenColor: TColor;
     431  BrushColor: TColor;
    269432  BiasTop, BiasLeft: Integer;
    270433  Rect1: TRect;
     
    278441  Item.Left := 0;
    279442  GetCheckBias(XBias, YBias, BiasTop, BiasLeft, ListView);
    280   OldColor := ListView.Canvas.Pen.Color;
     443  PenColor := ListView.Canvas.Pen.Color;
     444  BrushColor := ListView.Canvas.Brush.Color;
    281445  //TP1 := Item.GetPosition;
    282446  lRect := Item.DisplayRect(drBounds); // Windows 7 workaround
     
    290454  ItemLeft := Item.Left;
    291455  ItemLeft := 23; // Windows 7 workaround
    292  
     456
    293457  Rect1.Left := ItemLeft - CheckWidth - BiasLeft + 1 + XBias;
    294458  //ShowMessage(IntToStr(Tp1.Y) + ', ' + IntToStr(BiasTop) + ', ' + IntToStr(XBias));
     
    321485  end;
    322486  //ListView.Canvas.Brush.Color := ListView.Color;
    323   ListView.Canvas.Brush.Color := clWindow;
    324   ListView.Canvas.Pen.Color := OldColor;
     487  ListView.Canvas.Brush.Color := BrushColor;
     488  ListView.Canvas.Pen.Color := PenColor;
    325489end;
    326490
     
    389553    FHeaderHandle := ListView_GetHeader(FListView.Handle);
    390554    for I := 0 to FListView.Columns.Count - 1 do begin
     555      {$push}{$warn 5057 off}
    391556      FillChar(Item, SizeOf(THDItem), 0);
     557      {$pop}
    392558      Item.Mask := HDI_FORMAT;
    393559      Header_GetItem(FHeaderHandle, I, Item);
  • trunk/Packages/Common/Memory.pas

    r74 r75  
    1 unit UMemory;
    2 
    3 {$mode Delphi}{$H+}
     1unit Memory;
    42
    53interface
     
    2422    constructor Create;
    2523    destructor Destroy; override;
     24    procedure WriteMemory(Position: Integer; Memory: TMemory);
     25    procedure ReadMemory(Position: Integer; Memory: TMemory);
    2626    property Data: PByte read FData;
    2727    property Size: Integer read FSize write SetSize;
     
    4242  end;
    4343
     44
    4445implementation
    4546
     
    4849procedure TPositionMemory.SetSize(AValue: Integer);
    4950begin
    50   inherited SetSize(AValue);
     51  inherited;
    5152  if FPosition > FSize then FPosition := FSize;
    5253end;
     
    105106begin
    106107  Size := 0;
    107   inherited Destroy;
     108  inherited;
     109end;
     110
     111procedure TMemory.WriteMemory(Position: Integer; Memory: TMemory);
     112begin
     113  Move(Memory.FData, PByte(PByte(@FData) + Position)^, Memory.Size);
     114end;
     115
     116procedure TMemory.ReadMemory(Position: Integer; Memory: TMemory);
     117begin
     118  Move(PByte(PByte(@FData) + Position)^, Memory.FData, Memory.Size);
    108119end;
    109120
    110121end.
    111 
  • trunk/Packages/Common/Pool.pas

    r74 r75  
    1 unit UPool;
    2 
    3 {$mode Delphi}{$H+}
     1unit Pool;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, syncobjs, SpecializedList, UThreading;
     6  Classes, SysUtils, syncobjs, Generics.Collections, Threading;
    97
    108type
     
    2220    function NewItemObject: TObject; virtual;
    2321  public
    24     Items: TListObject;
    25     FreeItems: TListObject;
     22    Items: TObjectList<TObject>;
     23    FreeItems: TObjectList<TObject>;
    2624    function Acquire: TObject; virtual;
    2725    procedure Release(Item: TObject); virtual;
     
    108106constructor TThreadedPool.Create;
    109107begin
    110   inherited Create;
     108  inherited;
    111109  Lock := TCriticalSection.Create;
    112110end;
     
    116114  TotalCount := 0;
    117115  Lock.Free;
    118   inherited Destroy;
     116  inherited;
    119117end;
    120118
     
    185183begin
    186184  inherited;
    187   Items := TListObject.Create;
    188   FreeItems := TListObject.Create;
     185  Items := TObjectList<TObject>.Create;
     186  FreeItems := TObjectList<TObject>.Create;
    189187  FreeItems.OwnsObjects := False;
    190188  FReleaseEvent := TEvent.Create(nil, False, False, '');
     
    201199
    202200end.
    203 
  • trunk/Packages/Common/PrefixMultiplier.pas

    r74 r75  
    1 unit UPrefixMultiplier;
     1unit PrefixMultiplier;
    22
    33// Date: 2010-06-01
    4 
    5 {$mode delphi}
    64
    75interface
     
    2119  { TPrefixMultiplier }
    2220
    23   TPrefixMultiplier = class
     21  TPrefixMultiplier = class(TComponent)
    2422  private
    25     function TruncateDigits(Value:Double;Digits:Integer=3):Double;
     23    function TruncateDigits(Value: Double; Digits: Integer = 3): Double;
    2624  public
    2725    function Add(Value: Double; PrefixMultipliers: TPrefixMultiplierDef;
     
    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),
     
    7270  );
    7371
     72procedure Register;
     73
     74
    7475implementation
     76
     77procedure Register;
     78begin
     79  RegisterComponents('Common', [TPrefixMultiplier]);
     80end;
    7581
    7682{ TPrefixMultiplier }
     
    9298end;
    9399
    94 function TPrefixMultiplier.Add(Value:Double;PrefixMultipliers:TPrefixMultiplierDef
    95   ;UnitText:string;Digits:Integer):string;
     100function TPrefixMultiplier.Add(Value: Double; PrefixMultipliers: TPrefixMultiplierDef
     101  ; UnitText:string; Digits: Integer): string;
    96102var
    97103  I: Integer;
     
    118124
    119125end.
    120 
  • trunk/Packages/Common/RegistryEx.pas

    r74 r75  
    1 unit URegistry;
    2 
    3 {$MODE Delphi}
     1unit RegistryEx;
    42
    53interface
     
    97
    108type
    11   TRegistryRoot = (rrKeyClassesRoot = HKEY($80000000),
    12     rrKeyCurrentUser = HKEY($80000001),
    13     rrKeyLocalMachine = HKEY($80000002),
    14     rrKeyUsers = HKEY($80000003),
    15     rrKeyPerformanceData = HKEY($80000004),
    16     rrKeyCurrentConfig = HKEY($80000005),
    17     rrKeyDynData = HKEY($80000006));
     9  TRegistryRoot = (rrKeyClassesRoot, rrKeyCurrentUser, rrKeyLocalMachine,
     10    rrKeyUsers, rrKeyPerformanceData, rrKeyCurrentConfig, rrKeyDynData);
    1811
    1912  { TRegistryContext }
     
    2215    RootKey: HKEY;
    2316    Key: string;
     17    class function Create(RootKey: TRegistryRoot; Key: string): TRegistryContext; static; overload;
     18    class function Create(RootKey: HKEY; Key: string): TRegistryContext; static; overload;
    2419    class operator Equal(A, B: TRegistryContext): Boolean;
    2520  end;
     
    3227    procedure SetCurrentContext(AValue: TRegistryContext);
    3328  public
     29    function ReadChar(const Name: string): Char;
     30    procedure WriteChar(const Name: string; Value: Char);
    3431    function ReadBoolWithDefault(const Name: string;
    3532      DefaultValue: Boolean): Boolean;
    3633    function ReadIntegerWithDefault(const Name: string; DefaultValue: Integer): Integer;
    3734    function ReadStringWithDefault(const Name: string; DefaultValue: string): string;
     35    function ReadCharWithDefault(const Name: string; DefaultValue: Char): Char;
    3836    function ReadFloatWithDefault(const Name: string;
    3937      DefaultValue: Double): Double;
     
    4341  end;
    4442
    45 function RegContext(RootKey: HKEY; Key: string): TRegistryContext;
     43const
     44  RegistryRootHKEY: array[TRegistryRoot] of HKEY = (HKEY_CLASSES_ROOT,
     45    HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_PERFORMANCE_DATA,
     46    HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
    4647
    4748
    4849implementation
    49 
    50 function RegContext(RootKey: HKEY; Key: string): TRegistryContext;
    51 begin
    52   Result.RootKey := RootKey;
    53   Result.Key := Key;
    54 end;
    5550
    5651{ TRegistryContext }
     
    5954begin
    6055  Result := (A.Key = B.Key) and (A.RootKey = B.RootKey);
     56end;
     57
     58class function TRegistryContext.Create(RootKey: TRegistryRoot; Key: string): TRegistryContext;
     59begin
     60  Result.RootKey := RegistryRootHKEY[RootKey];
     61  Result.Key := Key;
     62end;
     63
     64class function TRegistryContext.Create(RootKey: HKEY; Key: string): TRegistryContext;
     65begin
     66  Result.RootKey := RootKey;
     67  Result.Key := Key;
    6168end;
    6269
     
    7986    else begin
    8087      WriteString(Name, DefaultValue);
     88      Result := DefaultValue;
     89    end;
     90end;
     91
     92function TRegistryEx.ReadCharWithDefault(const Name: string; DefaultValue: Char
     93  ): Char;
     94begin
     95  if ValueExists(Name) then Result := ReadChar(Name)
     96    else begin
     97      WriteChar(Name, DefaultValue);
    8198      Result := DefaultValue;
    8299    end;
     
    113130function TRegistryEx.OpenKey(const Key: string; CanCreate: Boolean): Boolean;
    114131begin
    115   {$IFDEF Linux}
    116   CloseKey;
     132  {$IFDEF UNIX}
     133  //CloseKey;
    117134  {$ENDIF}
    118135  Result := inherited OpenKey(Key, CanCreate);
     
    121138function TRegistryEx.GetCurrentContext: TRegistryContext;
    122139begin
    123   Result.Key := CurrentPath;
     140  Result.Key := String(CurrentPath);
    124141  Result.RootKey := RootKey;
    125142end;
     
    129146  RootKey := AValue.RootKey;
    130147  OpenKey(AValue.Key, True);
     148end;
     149
     150function TRegistryEx.ReadChar(const Name: string): Char;
     151var
     152  S: string;
     153begin
     154  S := ReadString(Name);
     155  if Length(S) > 0 then Result := S[1]
     156    else Result := #0;
     157end;
     158
     159procedure TRegistryEx.WriteChar(const Name: string; Value: Char);
     160begin
     161  WriteString(Name, Value);
    131162end;
    132163
  • trunk/Packages/Common/ResetableThread.pas

    r74 r75  
    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
     
    156154  FThread.Name := 'ResetableThread';
    157155  FThread.Parent := Self;
    158   FThread.Resume;
     156  FThread.Start;
    159157end;
    160158
     
    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/StopWatch.pas

    r73 r75  
    55
    66uses
    7   {$IFDEF Windows}Windows,{$ENDIF}
     7  {$IFDEF WINDOWS}Windows,{$ENDIF}
    88  SysUtils, DateUtils;
    99
     
    3232  end;
    3333
     34
    3435implementation
    3536
     
    4041  fIsRunning := False;
    4142
    42   {$IFDEF Windows}
     43  {$IFDEF WINDOWS}
    4344  fIsHighResolution := QueryPerformanceFrequency(fFrequency) ;
    4445  {$ELSE}
  • trunk/Packages/Common/SyncCounter.pas

    r74 r75  
    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/Threading.pas

    r74 r75  
    1 unit UThreading;
    2 
    3 {$mode delphi}
     1unit Threading;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, Forms, Contnrs, 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 }
     
    2219    function GetSuspended: Boolean; virtual; abstract;
    2320    function GetTerminated: Boolean; virtual; abstract;
    24     function GetThreadId: Integer; virtual; abstract;
     21    function GetThreadId: TThreadID; virtual; abstract;
    2522    procedure SetFreeOnTerminate(const AValue: Boolean); virtual; abstract;
    2623    procedure SetPriority(const AValue: TThreadPriority); virtual; abstract;
     
    3027    Name: string;
    3128    procedure Execute; virtual; abstract;
    32     procedure Resume; virtual; abstract;
    33     procedure Suspend; virtual; abstract;
    3429    procedure Start; virtual; abstract;
    3530    procedure Terminate; virtual; abstract;
     
    4439    property Terminated: Boolean read GetTerminated write SetTerminated;
    4540    property Finished: Boolean read GetFinished;
    46     property ThreadId: Integer read GetThreadId;
     41    property ThreadId: TThreadID read GetThreadId;
    4742  end;
    4843
     
    7065    function GetSuspended: Boolean; override;
    7166    function GetTerminated: Boolean; override;
    72     function GetThreadId: Integer; override;
     67    function GetThreadId: TThreadID; override;
    7368    procedure SetFreeOnTerminate(const AValue: Boolean); override;
    7469    procedure SetPriority(const AValue: TThreadPriority); override;
     
    8176    procedure Sleep(Delay: Integer); override;
    8277    procedure Execute; override;
    83     procedure Resume; override;
    84     procedure Suspend; override;
    8578    procedure Start; override;
    8679    procedure Terminate; override;
     
    10699  { TThreadList }
    107100
    108   TThreadList = class(TObjectList)
    109     function FindById(Id: Integer): TVirtualThread;
     101  TThreadList = class(TObjectList<TVirtualThread>)
     102    function FindById(Id: TThreadID): TVirtualThread;
    110103    constructor Create; virtual;
    111104  end;
     
    134127    Thread.FreeOnTerminate := False;
    135128    Thread.Method := Method;
    136     Thread.Resume;
     129    Thread.Start;
    137130    while (Thread.State = ttsRunning) or (Thread.State = ttsReady) do begin
    138131      if MainThreadID = ThreadID then Application.ProcessMessages;
     
    155148    Thread.Method := Method;
    156149    Thread.OnFinished := CallBack;
    157     Thread.Resume;
     150    Thread.Start;
    158151    //if Thread.State = ttsExceptionOccured then
    159152    //  raise Exception.Create(Thread.ExceptionMessage);
     
    168161  if MainThreadID = ThreadID then Method
    169162  else begin
    170     Thread := ThreadList.FindById(ThreadID);
     163    try
     164      ThreadListLock.Acquire;
     165      Thread := ThreadList.FindById(ThreadID);
     166    finally
     167      ThreadListLock.Release;
     168    end;
    171169    if Assigned(Thread) then begin
    172170      Thread.Synchronize(Method);
     
    177175{ TThreadList }
    178176
    179 function TThreadList.FindById(Id: Integer): TVirtualThread;
     177function TThreadList.FindById(Id: TThreadID): TVirtualThread;
    180178var
    181179  I: Integer;
    182180begin
    183181  I := 0;
    184   while (I < ThreadList.Count) and (TVirtualThread(ThreadList[I]).ThreadID <> Id) do
     182  while (I < ThreadList.Count) and (ThreadList[I].ThreadID <> Id) do
    185183    Inc(I);
    186   if I < ThreadList.Count then Result := TVirtualThread(ThreadList[I])
     184  if I < ThreadList.Count then Result := ThreadList[I]
    187185    else Result := nil;
    188186end;
     
    237235end;
    238236
    239 function TListedThread.GetThreadId: Integer;
     237function TListedThread.GetThreadId: TThreadID;
    240238begin
    241239  Result := FThread.ThreadID;
     
    294292  end;
    295293  FThread.Free;
    296   inherited Destroy;
     294  inherited;
    297295end;
    298296
     
    313311procedure TListedThread.Execute;
    314312begin
    315 end;
    316 
    317 procedure TListedThread.Resume;
    318 begin
    319   FThread.Resume;
    320 end;
    321 
    322 procedure TListedThread.Suspend;
    323 begin
    324   FThread.Suspend;
    325313end;
    326314
     
    378366
    379367end.
    380 
  • trunk/Packages/Common/URI.pas

    r74 r75  
    1 unit UURI;
     1unit URI;
    22
    33// Date: 2011-04-04
    4 
    5 {$mode delphi}
    64
    75interface
     
    8583  end;
    8684
     85
    8786implementation
    8887
    8988function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    9089var
    91   I, J: Integer;
     90  I: Integer;
    9291  Matched: Boolean;
    9392begin
     
    113112function RightCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    114113var
    115   I, J: Integer;
     114  I: Integer;
    116115  Matched: Boolean;
    117116begin
     
    183182begin
    184183  Items.Free;
    185   inherited Destroy;
     184  inherited;
    186185end;
    187186
     
    202201
    203202procedure TURI.SetAsString(Value: string);
    204 var
    205   HostAddr: string;
    206   HostPort: string;
    207203begin
    208204  LeftCutString(Value, Scheme, ':');
     
    235231begin
    236232  Path.Free;
    237   inherited Destroy;
     233  inherited;
    238234end;
    239235
     
    246242    Fragment := TURI(Source).Fragment;
    247243    Query := TURI(Source).Query;
    248   end else inherited Assign(Source);
     244  end else inherited;
    249245end;
    250246
     
    294290destructor TURL.Destroy;
    295291begin
    296   inherited Destroy;
     292  inherited;
    297293end;
    298294
     
    347343begin
    348344  Directory.Free;
    349   inherited Destroy;
    350 end;
    351 
     345  inherited;
     346end;
    352347
    353348end.
    354 
  • trunk/Packages/Common/XML.pas

    r74 r75  
    1 unit UXMLUtils;
    2 
    3 {$mode delphi}
     1unit XML;
    42
    53interface
     
    75uses
    86  {$IFDEF WINDOWS}Windows,{$ENDIF}
    9   Classes, SysUtils, DateUtils;
     7  Classes, SysUtils, DateUtils, DOM, xmlread;
    108
    119function XMLTimeToDateTime(XMLDateTime: string): TDateTime;
    12 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;
     10function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string;
     11procedure WriteInteger(Node: TDOMNode; Name: string; Value: Integer);
     12procedure WriteInt64(Node: TDOMNode; Name: string; Value: Int64);
     13procedure WriteBoolean(Node: TDOMNode; Name: string; Value: Boolean);
     14procedure WriteString(Node: TDOMNode; Name: string; Value: string);
     15procedure WriteDateTime(Node: TDOMNode; Name: string; Value: TDateTime);
     16procedure WriteDouble(Node: TDOMNode; Name: string; Value: Double);
     17function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
     18function ReadInt64(Node: TDOMNode; Name: string; DefaultValue: Int64): Int64;
     19function ReadBoolean(Node: TDOMNode; Name: string; DefaultValue: Boolean): Boolean;
     20function ReadString(Node: TDOMNode; Name: string; DefaultValue: string): string;
     21function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime): TDateTime;
     22function ReadDouble(Node: TDOMNode; Name: string; DefaultValue: Double): Double;
     23procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
    1324
    1425
    1526implementation
     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;
     37
     38procedure ReadXMLFileParser(out Doc: TXMLDocument; FileName: string);
     39var
     40  Parser: TDOMParser;
     41  Src: TXMLInputSource;
     42  InFile: TFileStream;
     43begin
     44  try
     45    InFile := TFileStream.Create(FileName, fmOpenRead);
     46    Src := TXMLInputSource.Create(InFile);
     47    Parser := TDOMParser.Create;
     48    Parser.Options.PreserveWhitespace := True;
     49    Parser.Parse(Src, Doc);
     50  finally
     51    Src.Free;
     52    Parser.Free;
     53    InFile.Free;
     54  end;
     55end;
    1656
    1757function GetTimeZoneBias: Integer;
     
    2060  TimeZoneInfo: TTimeZoneInformation;
    2161begin
     62  {$push}{$warn 5057 off}
    2263  case GetTimeZoneInformation(TimeZoneInfo) of
    23   TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
    24   TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
     64    TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;
     65    TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;
    2566  else
    2667    Result := 0;
    2768  end;
     69  {$pop}
    2870end;
    2971{$ELSE}
     
    3577function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean;
    3678var
    37   I, J: Integer;
     79  I: Integer;
    3880  Matched: Boolean;
    3981begin
     
    66108  Minute: Integer;
    67109  Second: Integer;
     110  SecondFraction: Double;
    68111  Millisecond: Integer;
    69112begin
     
    88131      if Pos('Z', XMLDateTime) > 0 then
    89132        LeftCutString(XMLDateTime, Part, 'Z');
    90       Millisecond := StrToInt(Part);
     133      SecondFraction := StrToFloat('0' + DefaultFormatSettings.DecimalSeparator + Part);
     134      Millisecond := Trunc(SecondFraction * 1000);
    91135    end else begin
    92136      if Pos('+', XMLDateTime) > 0 then
     
    106150end;
    107151
    108 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;
     152function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string;
    109153const
    110154  Neg: array[Boolean] of string =  ('+', '-');
     
    123167end;
    124168
     169procedure WriteInteger(Node: TDOMNode; Name: string; Value: Integer);
     170var
     171  NewNode: TDOMNode;
     172begin
     173  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     174  NewNode.TextContent := DOMString(IntToStr(Value));
     175  Node.AppendChild(NewNode);
     176end;
     177
     178procedure WriteInt64(Node: TDOMNode; Name: string; Value: Int64);
     179var
     180  NewNode: TDOMNode;
     181begin
     182  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     183  NewNode.TextContent := DOMString(IntToStr(Value));
     184  Node.AppendChild(NewNode);
     185end;
     186
     187procedure WriteBoolean(Node: TDOMNode; Name: string; Value: Boolean);
     188var
     189  NewNode: TDOMNode;
     190begin
     191  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     192  NewNode.TextContent := DOMString(BoolToStr(Value));
     193  Node.AppendChild(NewNode);
     194end;
     195
     196procedure WriteString(Node: TDOMNode; Name: string; Value: string);
     197var
     198  NewNode: TDOMNode;
     199begin
     200  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     201  NewNode.TextContent := DOMString(Value);
     202  Node.AppendChild(NewNode);
     203end;
     204
     205procedure WriteDateTime(Node: TDOMNode; Name: string; Value: TDateTime);
     206var
     207  NewNode: TDOMNode;
     208begin
     209  NewNode := Node.OwnerDocument.CreateElement(DOMString(Name));
     210  NewNode.TextContent := DOMString(DateTimeToXMLTime(Value));
     211  Node.AppendChild(NewNode);
     212end;
     213
     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
     223function ReadInteger(Node: TDOMNode; Name: string; DefaultValue: Integer): Integer;
     224var
     225  NewNode: TDOMNode;
     226begin
     227  Result := DefaultValue;
     228  NewNode := Node.FindNode(DOMString(Name));
     229  if Assigned(NewNode) then
     230    Result := StrToInt(string(NewNode.TextContent));
     231end;
     232
     233function ReadInt64(Node: TDOMNode; Name: string; DefaultValue: Int64): Int64;
     234var
     235  NewNode: TDOMNode;
     236begin
     237  Result := DefaultValue;
     238  NewNode := Node.FindNode(DOMString(Name));
     239  if Assigned(NewNode) then
     240    Result := StrToInt64(string(NewNode.TextContent));
     241end;
     242
     243function ReadBoolean(Node: TDOMNode; Name: string; DefaultValue: Boolean): Boolean;
     244var
     245  NewNode: TDOMNode;
     246begin
     247  Result := DefaultValue;
     248  NewNode := Node.FindNode(DOMString(Name));
     249  if Assigned(NewNode) then
     250    Result := StrToBool(string(NewNode.TextContent));
     251end;
     252
     253function ReadString(Node: TDOMNode; Name: string; DefaultValue: string): string;
     254var
     255  NewNode: TDOMNode;
     256begin
     257  Result := DefaultValue;
     258  NewNode := Node.FindNode(DOMString(Name));
     259  if Assigned(NewNode) then
     260    Result := string(NewNode.TextContent);
     261end;
     262
     263function ReadDateTime(Node: TDOMNode; Name: string; DefaultValue: TDateTime
     264  ): TDateTime;
     265var
     266  NewNode: TDOMNode;
     267begin
     268  Result := DefaultValue;
     269  NewNode := Node.FindNode(DOMString(Name));
     270  if Assigned(NewNode) then
     271    Result := XMLTimeToDateTime(string(NewNode.TextContent));
     272end;
     273
    125274end.
    126 
  • trunk/Packages/ModularSystem/FormModuleList.pas

    r74 r75  
    1 unit UFormModuleList;
    2 
    3 {$mode delphi}
     1unit FormModuleList;
    42
    53interface
     
    75uses
    86  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
    9   ComCtrls, ExtCtrls, Menus, ActnList, StdCtrls, SpecializedList, DateUtils,
    10   UListViewSort, UModularSystem;
     7  ComCtrls, ExtCtrls, Menus, ActnList, StdCtrls, Generics.Collections, DateUtils,
     8  ListViewSort, ModularSystem, Common;
    119
    1210type
     
    8785function ModuleToStr(Module: TObject): string;
    8886
     87
    8988implementation
    9089
     
    130129    if Version <> '' then Item.SubItems.Add(Version)
    131130      else Item.SubItems.Add(' ');
    132     Item.SubItems.Add(Dependencies.Implode(',', StrToStr));
     131    Item.SubItems.Add(Implode(',', Dependencies));
    133132    if FileName <> '' then Item.SubItems.Add(FileName)
    134133      else Item.SubItems.Add(' ');
     
    150149    if (mloShowLicense in FOptions) and (License <> '') then Memo1.Lines.Add(SLicense + ': ' + License);
    151150    if (mloShowDependencies in FOptions) and (Dependencies.Count > 0) then
    152       Memo1.Lines.Add(SDependencies + ': ' + Dependencies.Implode(', ', StrToStr));
     151      Memo1.Lines.Add(SDependencies + ': ' + Implode(', ', Dependencies));
    153152    if (mloShowDescription in FOptions) and (Description.Count > 0) then
    154       Memo1.Lines.Add(SDescription + ': ' + Description.Implode(', ', StrToStr));
     153      Memo1.Lines.Add(SDescription + ': ' + Implode(', ', Description));
    155154  end;
    156155end;
     
    191190procedure TFormModuleList.AStartExecute(Sender: TObject);
    192191var
    193   Modules: TListModule;
     192  Modules: TModules;
    194193  I: Integer;
    195194begin
     
    199198  if not Running then
    200199  try
    201     Modules := TListModule.Create;
     200    Modules := TModules.Create;
    202201    Modules.OwnsObjects := False;
    203202    EnumDependenciesCascade(Modules, [mcNotRunning]);
    204203    if Modules.Count > 0 then begin
    205204      if MessageDlg(Format(SAdditionalModulesStart, [
    206       Identification, Modules.Implode(',', ModuleToStr)]),
     205      Identification, Modules.GetNames]),
    207206      mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    208207        Start;
     
    216215procedure TFormModuleList.AStopExecute(Sender: TObject);
    217216var
    218   Modules: TListModule;
     217  Modules: TModules;
    219218  I: Integer;
    220219begin
     
    224223  if Running then
    225224  try
    226     Modules := TListModule.Create;
     225    Modules := TModules.Create;
    227226    Modules.OwnsObjects := False;
    228227    EnumSuperiorDependenciesCascade(Modules, [mcRunning]);
    229228    if Modules.Count > 0 then begin
    230229      if MessageDlg(Format(SAdditionalModulesStop, [
    231       Identification,
    232       Modules.Implode(',', ModuleToStr)]),
     230      Identification, Modules.GetNames]),
    233231      mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    234232        Stop;
     
    242240procedure TFormModuleList.AUninstallExecute(Sender: TObject);
    243241var
    244   Modules: TListModule;
     242  Modules: TModules;
    245243  I: Integer;
    246244begin
     
    250248  if Installed then
    251249  try
    252     Modules := TListModule.Create;
     250    Modules := TModules.Create;
    253251    Modules.OwnsObjects := False;
    254252    EnumSuperiorDependenciesCascade(Modules, [mcInstalled]);
    255253    if Modules.Count > 0 then begin
    256254      if MessageDlg(Format(SAdditionalModulesUninstall, [
    257       Identification,
    258       Modules.Implode(',', ModuleToStr)]),
     255      Identification, Modules.GetNames]),
    259256      mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    260257        Uninstall;
     
    275272procedure TFormModuleList.AInstallExecute(Sender: TObject);
    276273var
    277   Modules: TListModule;
     274  Modules: TModules;
    278275  I: Integer;
    279276begin
     
    283280  if not Installed then
    284281  try
    285     Modules := TListModule.Create;
     282    Modules := TModules.Create;
    286283    Modules.OwnsObjects := False;
    287284    EnumDependenciesCascade(Modules, [mcNotInstalled]);
    288285    if Modules.Count > 0 then begin
    289286      if MessageDlg(Format(SAdditionalModulesInstall, [
    290       Identification,
    291       Modules.Implode(',', ModuleToStr)]),
     287      Identification, Modules.GetNames]),
    292288      mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    293289        Install;
     
    301297procedure TFormModuleList.AEnableExecute(Sender: TObject);
    302298var
    303   Modules: TListModule;
     299  Modules: TModules;
    304300  I: Integer;
    305301begin
     
    309305  if not Enabled then
    310306  try
    311     Modules := TListModule.Create;
     307    Modules := TModules.Create;
    312308    Modules.OwnsObjects := False;
    313309    EnumDependenciesCascade(Modules, [mcNotRunning]);
    314310    if Modules.Count > 0 then begin
    315311      if MessageDlg(Format(SAdditionalModulesStart, [
    316       Identification, Modules.Implode(',', ModuleToStr)]),
     312      Identification, Modules.GetNames]),
    317313      mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
    318314        Enable;
     
    331327procedure TFormModuleList.ADisableExecute(Sender: TObject);
    332328var
    333   Modules: TListModule;
     329  Modules: TModules;
    334330  I: Integer;
    335331begin
     
    339335  if Enabled then
    340336  try
    341     Modules := TListModule.Create;
     337    Modules := TModules.Create;
    342338    Modules.OwnsObjects := False;
    343339    EnumSuperiorDependenciesCascade(Modules, [mcInstalled]);
    344340    if Modules.Count > 0 then begin
    345341      if MessageDlg(Format(SAdditionalModulesUninstall, [
    346       Identification,
    347       Modules.Implode(',', ModuleToStr)]),
     342      Identification, Modules.GetNames]),
    348343      mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
    349344        Stop;
     
    400395      7: Result := CompareString(TModule(Item1).Version, TModule(
    401396        Item2).Version);
    402       8: Result := CompareString(TModule(Item1).Dependencies.Implode(',', StrToStr),
    403         TModule(Item2).Dependencies.Implode(',', StrToStr));
     397      8: Result := CompareString(Implode(',', TModule(Item1).Dependencies),
     398        Implode(',', TModule(Item2).Dependencies));
    404399      9: Result := CompareString(TModule(Item1).FileName,
    405400        TModule(Item2).FileName);
     
    500495
    501496initialization
    502   {$I UFormModuleList.lrs}
     497  {$I FormModuleList.lrs}
    503498
    504499end.
  • trunk/Packages/ModularSystem/Language/ModularSystem.cs.po

    r74 r75  
    1010"Content-Transfer-Encoding: 8bit\n"
    1111
    12 #: umodularsystem.smodulenotfound
     12#: modularsystem.smodulenotfound
     13#, object-pascal-format
     14msgctxt "modularsystem.smodulenotfound"
    1315msgid "Module \"%1:s\" not found as dependency for module \"%0:s\""
    14 msgstr "Pro modul \"%0:s\" nenalezen závislý modul \"%1:s\""
     16msgstr ""
    1517
  • trunk/Packages/ModularSystem/Language/ModularSystem.pot

    r74 r75  
    22msgstr "Content-Type: text/plain; charset=UTF-8"
    33
    4 #: umodularsystem.smodulenotfound
     4#: modularsystem.smodulenotfound
     5#, object-pascal-format
     6msgctxt "modularsystem.smodulenotfound"
    57msgid "Module \"%1:s\" not found as dependency for module \"%0:s\""
    68msgstr ""
  • trunk/Packages/ModularSystem/ModularSystem.lpk

    r73 r75  
    1 <?xml version="1.0"?>
     1<?xml version="1.0" encoding="UTF-8"?>
    22<CONFIG>
    3   <Package Version="4">
     3  <Package Version="5">
    44    <PathDelim Value="\"/>
    55    <Name Value="ModularSystem"/>
     6    <Type Value="RunAndDesignTime"/>
    67    <Author Value="Chronos (robie@centrum.cz)"/>
    78    <CompilerOptions>
     
    1112        <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
    1213      </SearchPaths>
    13       <Other>
    14         <CompilerMessages>
    15           <MsgFileName Value=""/>
    16         </CompilerMessages>
    17         <CompilerPath Value="$(CompPath)"/>
    18       </Other>
     14      <Parsing>
     15        <SyntaxOptions>
     16          <SyntaxMode Value="Delphi"/>
     17        </SyntaxOptions>
     18      </Parsing>
    1919    </CompilerOptions>
    2020    <Description Value="Modular system"/>
    2121    <License Value="GNU/LGPLv3"/>
    2222    <Version Minor="2"/>
    23     <Files Count="2">
     23    <Files Count="3">
    2424      <Item1>
    25         <Filename Value="UModularSystem.pas"/>
     25        <Filename Value="ModularSystem.pas"/>
    2626        <HasRegisterProc Value="True"/>
    27         <UnitName Value="UModularSystem"/>
     27        <UnitName Value="ModularSystem"/>
    2828      </Item1>
    2929      <Item2>
    30         <Filename Value="UFormModuleList.pas"/>
    31         <UnitName Value="UFormModuleList"/>
     30        <Filename Value="FormModuleList.pas"/>
     31        <UnitName Value="FormModuleList"/>
    3232      </Item2>
     33      <Item3>
     34        <Filename Value="ModularSystemPackage.pas"/>
     35        <Type Value="Main Unit"/>
     36        <UnitName Value="ModularSystemPackage"/>
     37      </Item3>
    3338    </Files>
     39    <CompatibilityMode Value="True"/>
    3440    <i18n>
    3541      <EnableI18N Value="True"/>
     
    3743      <EnableI18NForLFM Value="True"/>
    3844    </i18n>
    39     <Type Value="RunAndDesignTime"/>
    4045    <RequiredPkgs Count="3">
    4146      <Item1>
  • trunk/Packages/ModularSystem/ModularSystem.pas

    r74 r75  
    1 unit UModularSystem;
    2 
    3 {$mode Delphi}{$H+}
     1unit ModularSystem;
    42
    53interface
    64
    75uses
    8   Classes, SysUtils, URegistry, SpecializedList;
     6  Classes, SysUtils, RegistryEx, Generics.Collections;
    97
    108type
    119  TModuleManager = class;
    1210  TModule = class;
    13   TListModule = class;
     11  TModules = class;
    1412
    1513  TAPI = class(TComponent)
    16 
    1714  end;
    1815
     
    3936    FLicense: string;
    4037    FAuthor: string;
    41     FDependencies: TListString;
    42     FDescription: TListString;
     38    FDependencies: TStringList;
     39    FDescription: TStringList;
    4340    FFileName: string;
    4441    FWebSite: string;
     
    6562    procedure Reinstall;
    6663    procedure Upgrade;
    67     procedure EnumDependenciesCascade(ModuleList: TListModule;
     64    procedure EnumDependenciesCascade(ModuleList: TModules;
    6865      Conditions: TModuleConditions = [mcAll]);
    69     procedure EnumSuperiorDependenciesCascade(ModuleList: TListModule;
     66    procedure EnumSuperiorDependenciesCascade(ModuleList: TModules;
    7067      Conditions: TModuleConditions = [mcAll]);
    7168    procedure SetInstalledState(Value: Boolean);
     
    8481    property License: string read FLicense write FLicense;
    8582    property Author: string read FAuthor write FAuthor;
    86     property Dependencies: TListString read FDependencies write FDependencies;
    87     property Description: TListString read FDescription write FDescription;
     83    property Dependencies: TStringList read FDependencies write FDependencies;
     84    property Description: TStringList read FDescription write FDescription;
    8885    property FileName: string read FFileName write FFileName;
    8986    property Category: string read FCategory write FCategory;
     
    9289  end;
    9390
    94   { TListModule }
    95 
    96   TListModule = class(TListObject)
    97   private
     91  { TModules }
     92
     93  TModules = class(TObjectList<TModule>)
    9894  public
    9995    procedure Perform(Actions: array of TModuleAction; Conditions: TModuleConditions = [mcAll]);
    10096    function FindByName(Name: string): TModule;
     97    function GetNames: string;
    10198  end;
    10299
    103100  TModuleManagerOption = (moAutoInstallOnRun, moAuto);
    104101  TModuleManagerOptions = set of TModuleManagerOption;
     102
    105103  { TModuleManager }
    106104
     
    114112    procedure DoUpdate(Sender: TObject);
    115113  public
    116     Modules: TListModule; // TObjectList<TModule>
     114    Modules: TModules;
    117115    function ModuleRunning(Name: string): Boolean;
    118     procedure EnumDependenciesCascade(Module: TModule; ModuleList: TListModule;
     116    procedure EnumDependenciesCascade(Module: TModule; ModuleList: TModules;
    119117      Conditions: TModuleConditions = [mcAll]);
    120118    procedure EnumSuperiorDependenciesCascade(Module: TModule;
    121       ModuleList: TListModule; Conditions: TModuleConditions = [mcAll]);
     119      ModuleList: TModules; Conditions: TModuleConditions = [mcAll]);
    122120    procedure RegisterModule(Module: TModule);
    123121    procedure UnregisterModule(Module: TModule);
     
    145143end;
    146144
    147 { TListModule }
    148 
    149 procedure TListModule.Perform(Actions:  array of TModuleAction;
     145{ TModules }
     146
     147procedure TModules.Perform(Actions:  array of TModuleAction;
    150148  Conditions: TModuleConditions = [mcAll]);
    151149var
     
    153151  A: Integer;
    154152begin
    155   try
    156     BeginUpdate;
    157153  for I := 0 to Count - 1 do
    158154  with TModule(Items[I]) do
     
    173169      if Actions[A] = maDisable then Disable;
    174170    end;
    175   finally
    176     EndUpdate;
    177   end;
    178 end;
    179 
    180 function TListModule.FindByName(Name: string): TModule;
     171end;
     172
     173function TModules.FindByName(Name: string): TModule;
    181174var
    182175  I: Integer;
     
    188181end;
    189182
     183function TModules.GetNames: string;
     184var
     185  I: Integer;
     186begin
     187  Result := '';
     188  for I := 0 to Count - 1 do
     189    Result := Result + ', ' + Items[I].Identification;
     190  Result := Copy(Result, 3, MaxInt);
     191end;
     192
    190193{ TModuleManager }
    191194
     
    216219
    217220procedure TModuleManager.EnumDependenciesCascade(Module: TModule;
    218   ModuleList: TListModule; Conditions: TModuleConditions = [mcAll]);
     221  ModuleList: TModules; Conditions: TModuleConditions = [mcAll]);
    219222var
    220223  DepModule: TModule;
     224  DepModuleName: string;
    221225  I: Integer;
    222226begin
    223227  for I := 0 to Module.Dependencies.Count - 1 do begin
    224     DepModule := Modules.FindByName(Module.Dependencies[I]);
     228    DepModuleName := Module.Dependencies[I];
     229    DepModule := Modules.FindByName(DepModuleName);
    225230    if Assigned(DepModule) then
    226231    with DepModule do begin
     
    236241          Self.EnumDependenciesCascade(DepModule, ModuleList);
    237242        end;
    238     end else raise Exception.CreateFmt(SModuleNotFound, [DepModule.Identification]);
     243    end else raise Exception.CreateFmt(SModuleNotFound, [Module.Dependencies[I], Module.Identification]);
    239244  end;
    240245end;
    241246
    242247procedure TModuleManager.EnumSuperiorDependenciesCascade(Module: TModule;
    243   ModuleList: TListModule; Conditions: TModuleConditions = [mcAll]);
     248  ModuleList: TModules; Conditions: TModuleConditions = [mcAll]);
    244249var
    245250  I: Integer;
     
    267272  Module.FManager := Self;
    268273  Module.API := API;
    269   Modules.Update;
     274  //Modules.Update;
    270275end;
    271276
     
    273278begin
    274279  Modules.Remove(Module);
    275   Modules.Update;
     280  //Modules.Update;
    276281end;
    277282
     
    279284begin
    280285  inherited;
    281   Modules := TListModule.Create;
     286  Modules := TModules.Create;
    282287  Modules.OwnsObjects := False;
    283   Modules.OnUpdate := DoUpdate;
     288  //Modules.OnUpdate := DoUpdate;
    284289end;
    285290
     
    362367procedure TModule.Enable;
    363368var
    364   List: TListModule;
     369  List: TModules;
    365370begin
    366371  if Enabled then Exit;
    367372  FEnabled := True;
    368373  try
    369     List := TListModule.Create;
     374    List := TModules.Create;
    370375    List.OwnsObjects := False;
    371376    EnumDependenciesCascade(List, [mcNotEnabled]);
     
    380385procedure TModule.Disable;
    381386var
    382   List: TListModule;
     387  List: TModules;
    383388begin
    384389  if not Enabled then Exit;
     
    386391  FEnabled := False;
    387392  try
    388     List := TListModule.Create;
     393    List := TModules.Create;
    389394    List.OwnsObjects := False;
    390395    EnumSuperiorDependenciesCascade(List, [mcEnabled]);
     
    393398    List.Free;
    394399  end;
    395   Manager.Modules.Update;
     400  //Manager.Modules.Update;
    396401end;
    397402
     
    418423procedure TModule.Start;
    419424var
    420   List: TListModule;
     425  List: TModules;
    421426  StartTime: TDateTime;
    422427begin
     
    424429  if not Installed then Install;  // Auto install not installed modules
    425430  try
    426     List := TListModule.Create;
     431    List := TModules.Create;
    427432    List.OwnsObjects := False;
    428433    EnumDependenciesCascade(List, [mcNotRunning]);
     
    435440  FStartUpTime := Now - StartTime;
    436441  FRunning := True;
    437   Manager.Modules.Update;
     442  //Manager.Modules.Update;
    438443end;
    439444
    440445procedure TModule.Stop;
    441446var
    442   List: TListModule;
     447  List: TModules;
    443448begin
    444449  if not Running then Exit;
    445450  FRunning := False;
    446451  try
    447     List := TListModule.Create;
     452    List := TModules.Create;
    448453    List.OwnsObjects := False;
    449454    EnumSuperiorDependenciesCascade(List, [mcRunning]);
     
    453458  end;
    454459  DoStop;
    455   Manager.Modules.Update;
     460  //Manager.Modules.Update;
    456461end;
    457462
     
    464469procedure TModule.Install;
    465470var
    466   List: TListModule;
     471  List: TModules;
    467472begin
    468473  if Installed then Exit;
    469474  try
    470     List := TListModule.Create;
     475    List := TModules.Create;
    471476    List.OwnsObjects := False;
    472477    EnumDependenciesCascade(List, [mcNotInstalled]);
     
    478483  DoInstall;
    479484  //Enable; // Auto enable installed module
    480   Manager.Modules.Update;
     485  //Manager.Modules.Update;
    481486end;
    482487
    483488procedure TModule.Uninstall;
    484489var
    485   List: TListModule;
     490  List: TModules;
    486491begin
    487492  if not Installed then Exit;
    488493  if Enabled then Disable; // Auto disable uninstalled module
    489494  try
    490     List := TListModule.Create;
     495    List := TModules.Create;
    491496    List.OwnsObjects := False;
    492497    EnumSuperiorDependenciesCascade(List, [mcInstalled]);
     
    497502  FInstalled := False;
    498503  DoUninstall;
    499   Manager.Modules.Update;
     504  //Manager.Modules.Update;
    500505end;
    501506
     
    515520    Start;
    516521  end else DoUpgrade;
    517   Manager.Modules.Update;
    518 end;
    519 
    520 procedure TModule.EnumDependenciesCascade(ModuleList: TListModule;
     522  //Manager.Modules.Update;
     523end;
     524
     525procedure TModule.EnumDependenciesCascade(ModuleList: TModules;
    521526  Conditions: TModuleConditions = [mcAll]);
    522527begin
     
    525530end;
    526531
    527 procedure TModule.EnumSuperiorDependenciesCascade(ModuleList: TListModule;
     532procedure TModule.EnumSuperiorDependenciesCascade(ModuleList: TModules;
    528533  Conditions: TModuleConditions = [mcAll]);
    529534begin
     
    535540begin
    536541  FInstalled := Value;
    537   Manager.Modules.Update;
     542  //Manager.Modules.Update;
    538543end;
    539544
     
    541546begin
    542547  inherited;
    543   Dependencies := TListString.Create;
    544   Description := TListString.Create;
     548  Dependencies := TStringList.Create;
     549  Description := TStringList.Create;
    545550end;
    546551
  • trunk/Packages/ModularSystem/ModularSystemPackage.pas

    r74 r75  
    33 }
    44
    5 unit ModularSystem;
     5unit ModularSystemPackage;
    66
     7{$warn 5023 off : no warning about unused units}
    78interface
    89
    910uses
    10   UModularSystem, UFormModuleList, LazarusPackageIntf;
     11  ModularSystem, FormModuleList, LazarusPackageIntf;
    1112
    1213implementation
     
    1415procedure Register;
    1516begin
    16   RegisterUnit('UModularSystem', @UModularSystem.Register);
     17  RegisterUnit('ModularSystem', @ModularSystem.Register);
    1718end;
    1819
Note: See TracChangeset for help on using the changeset viewer.