~ubuntu-branches/ubuntu/saucy/lazarus/saucy

« back to all changes in this revision

Viewing changes to components/codetools/ppugraph.pas

  • Committer: Package Import Robot
  • Author(s): Paul Gevers, Abou Al Montacir, Bart Martens, Paul Gevers
  • Date: 2013-06-08 14:12:17 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20130608141217-7k0cy9id8ifcnutc
Tags: 1.0.8+dfsg-1
[ Abou Al Montacir ]
* New upstream major release and multiple maintenace release offering many
  fixes and new features marking a new milestone for the Lazarus development
  and its stability level.
  - The detailed list of changes can be found here:
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_release_notes
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_fixes_branch
* LCL changes:
  - LCL is now a normal package.
      + Platform independent parts of the LCL are now in the package LCLBase
      + LCL is automatically recompiled when switching the target platform,
        unless pre-compiled binaries for this target are already installed.
      + No impact on existing projects.
      + Linker options needed by LCL are no more added to projects that do
        not use the LCL package.
  - Minor changes in LCL basic classes behaviour
      + TCustomForm.Create raises an exception if a form resource is not
        found.
      + TNotebook and TPage: a new implementation of these classes was added.
      + TDBNavigator: It is now possible to have focusable buttons by setting
        Options = [navFocusableButtons] and TabStop = True, useful for
        accessibility and for devices with neither mouse nor touch screen.
      + Names of TControlBorderSpacing.GetSideSpace and GetSpace were swapped
        and are now consistent. GetSideSpace = Around + GetSpace.
      + TForm.WindowState=wsFullscreen was added
      + TCanvas.TextFitInfo was added to calculate how many characters will
        fit into a specified Width. Useful for word-wrapping calculations.
      + TControl.GetColorResolvingParent and
        TControl.GetRGBColorResolvingParent were added, simplifying the work
        to obtain the final color of the control while resolving clDefault
        and the ParentColor.
      + LCLIntf.GetTextExtentExPoint now has a good default implementation
        which works in any platform not providing a specific implementation.
        However, Widgetset specific implementation is better, when available.
      + TTabControl was reorganized. Now it has the correct class hierarchy
        and inherits from TCustomTabControl as it should.
  - New unit in the LCL:
      + lazdialogs.pas: adds non-native versions of various native dialogs,
        for example TLazOpenDialog, TLazSaveDialog, TLazSelectDirectoryDialog.
        It is used by widgetsets which either do not have a native dialog, or
        do not wish to use it because it is limited. These dialogs can also be
        used by user applications directly.
      + lazdeviceapis.pas: offers an interface to more hardware devices such
        as the accelerometer, GPS, etc. See LazDeviceAPIs
      + lazcanvas.pas: provides a TFPImageCanvas descendent implementing
        drawing in a LCL-compatible way, but 100% in Pascal.
      + lazregions.pas. LazRegions is a wholly Pascal implementation of
        regions for canvas clipping, event clipping, finding in which control
        of a region tree one an event should reach, for drawing polygons, etc.
      + customdrawncontrols.pas, customdrawndrawers.pas,
        customdrawn_common.pas, customdrawn_android.pas and
        customdrawn_winxp.pas: are the Lazarus Custom Drawn Controls -controls
        which imitate the standard LCL ones, but with the difference that they
        are non-native and support skinning.
  - New APIs added to the LCL to improve support of accessibility software
    such as screen readers.
* IDE changes:
  - Many improvments.
  - The detailed list of changes can be found here:
    http://wiki.lazarus.freepascal.org/New_IDE_features_since#v1.0_.282012-08-29.29
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_release_notes#IDE_Changes
* Debugger / Editor changes:
  - Added pascal sources and breakpoints to the disassembler
  - Added threads dialog.
* Components changes:
  - TAChart: many fixes and new features
  - CodeTool: support Delphi style generics and new syntax extensions.
  - AggPas: removed to honor free licencing. (Closes: Bug#708695)
[Bart Martens]
* New debian/watch file fixing issues with upstream RC release.
[Abou Al Montacir]
* Avoid changing files in .pc hidden directory, these are used by quilt for
  internal purpose and could lead to surprises during build.
[Paul Gevers]
* Updated get-orig-source target and it compinion script orig-tar.sh so that they
  repack the source file, allowing bug 708695 to be fixed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
uses
33
33
  Classes, SysUtils, dynlibs, PPUParser, CodeTree, AVL_Tree, FileProcs,
34
 
  BasicCodeTools, CodeGraph, CodeToolManager;
 
34
  BasicCodeTools, CodeGraph, CodeToolManager, CodeToolsStructs;
35
35
 
36
36
const
37
37
  FPCPPUGroupPrefix = 'fpc_';
120
120
    procedure ClearAutoDisableFlags;
121
121
    function AddGroup(const NewName: string): TPPUGroup;
122
122
    procedure AddFPCGroupsForCurrentCompiler(const BaseDirectory: string);
123
 
    procedure AddFPCGroups(const FPCPPUBaseDir: string // for example: /usr/lib/fpc/2.2.3/units/i386-linux/
124
 
                );
 
123
    procedure AddFPCGroups(const FPCPPUBaseDir: string); // for example: /usr/lib/fpc/2.2.3/units/i386-linux/
125
124
    procedure AddFPCGroup(const BaseGroupname, Directory: string);
126
125
    function FindGroupWithName(const AName: string): TPPUGroup;
127
126
    function FindMemberWithUnitName(const AName: string): TPPUMember;
181
180
 
182
181
constructor TPPUMember.Create;
183
182
begin
184
 
  KeyNode:=NodeMemManager.NewNode;
 
183
  KeyNode:=TCodeTreeNode.Create;
185
184
  MainUses:=TStringList.Create;
186
185
  ImplementationUses:=TStringList.Create;
187
186
end;
191
190
  FreeAndNil(PPU);
192
191
  FreeAndNil(MainUses);
193
192
  FreeAndNil(ImplementationUses);
194
 
  if KeyNode<>nil then
195
 
    NodeMemManager.DisposeNode(KeyNode);
196
 
  KeyNode:=nil;
 
193
  FreeAndNil(KeyNode);
197
194
  if Group<>nil then
198
195
    Group.InternalRemoveMember(Self);
199
196
  inherited Destroy;
206
203
  ImplementationUses.Clear;
207
204
  InitializationMangledName:='';
208
205
  FinalizationMangledName:='';
209
 
  if PPU=nil then PPU:=TPPU.Create;
 
206
  if PPU=nil then PPU:=TPPU.Create(Self);
210
207
  PPU.LoadFromFile(PPUFilename);
211
208
  debugln('================================================================');
212
209
  DebugLn(['TPPUMember.UpdatePPU Group=',Group.Name,' AUnitName=',Unit_Name,' Filename=',PPUFilename]);
265
262
procedure TPPUGroup.InternalRemoveMember(AMember: TPPUMember);
266
263
begin
267
264
  FUnitGraph.DeleteGraphNode(AMember.KeyNode);
268
 
  FMembers.RemovePointer(AMember);
 
265
  AVLRemovePointer(FMembers,AMember);
269
266
  if Groups<>nil then
270
267
    Groups.InternalRemoveMember(AMember);
271
268
end;
282
279
constructor TPPUGroup.Create;
283
280
begin
284
281
  FMembers:=TAVLTree.Create(@ComparePPUMembersByUnitName);
285
 
  KeyNode:=NodeMemManager.NewNode;
 
282
  KeyNode:=TCodeTreeNode.Create;
286
283
  FUnitGraph:=TCodeGraph.Create;
287
284
end;
288
285
 
291
288
  Clear;
292
289
  FreeAndNil(FUnitGraph);
293
290
  FreeAndNil(FMembers);
294
 
  if KeyNode<>nil then
295
 
    NodeMemManager.DisposeNode(KeyNode);
296
 
  KeyNode:=nil;
 
291
  FreeAndNil(KeyNode);
297
292
  if Groups<>nil then
298
293
    Groups.InternalRemoveGroup(Self);
299
294
  inherited Destroy;
481
476
  RegisterFPLibProcName: String;
482
477
begin
483
478
  Result:=true;
484
 
  {$IFDEF VER2_2_0}
485
 
  LibName:=Name+'.so';
486
 
  {$ELSE}
487
479
  LibName:=Name+'.'+SharedSuffix;
488
 
  {$ENDIF}
489
480
  // needed groups in topological order
490
481
  if Groups.GroupGraph.GetGraphNode(KeyNode,false)=nil then
491
482
    raise Exception.Create('inconsistency');
563
554
 
564
555
procedure TPPUGroups.InternalRemoveMember(AMember: TPPUMember);
565
556
begin
566
 
  FMembers.RemovePointer(AMember);
 
557
  AVLRemovePointer(FMembers,AMember);
567
558
end;
568
559
 
569
560
procedure TPPUGroups.InternalRemoveGroup(AGroup: TPPUGroup);
570
561
begin
571
 
  FGroups.RemovePointer(AGroup);
 
562
  AVLRemovePointer(FGroups,AGroup);
572
563
end;
573
564
 
574
565
procedure TPPUGroups.UpdateTopologicalSortedList;