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

« back to all changes in this revision

Viewing changes to ide/filereferencelist.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:
1
 
{  $Id: filereferencelist.pas 28728 2010-12-16 15:43:50Z mattias $  }
2
1
{
3
2
 /***************************************************************************
4
3
                            filereferencelist.pas
39
38
interface
40
39
 
41
40
uses
42
 
  Classes, SysUtils, LCLProc, AVL_Tree, FileProcs, IDEProcs;
 
41
  Classes, SysUtils, LCLProc, FileProcs, AvgLvlTree, IDEProcs;
43
42
  
44
43
type
45
44
  { TFileReference }
66
65
  private
67
66
    FOnChanged: TNotifyEvent;
68
67
    FTimeStamp: integer;
69
 
    FTree: TAVLTree; // tree of TFileReference sorted for filename
 
68
    FTree: TAvgLvlTree; // tree of TFileReference sorted for filename
70
69
    FFlags: TFileReferenceFlags;
71
70
    FSearchPath: string;
72
71
    FUpdateLock: integer;
93
92
 
94
93
function CompareFileReferences(Data1, Data2: Pointer): integer;
95
94
var
96
 
  FileRef1: TFileReference;
97
 
  FileRef2: TFileReference;
 
95
  FileRef1: TFileReference absolute Data1;
 
96
  FileRef2: TFileReference absolute Data2;
98
97
begin
99
 
  FileRef1:=TFileReference(Data1);
100
 
  FileRef2:=TFileReference(Data2);
101
98
  Result:=CompareFilenames(FileRef1.Filename,FileRef2.Filename);
102
99
end;
103
100
 
104
101
function CompareFileNameAndReference(Key, Data: Pointer): integer;
105
102
var
106
 
  Filename: String;
107
 
  FileRef: TFileReference;
 
103
  FileRef: TFileReference absolute Data;
108
104
begin
109
 
  Filename:=String(Key);
110
 
  FileRef:=TFileReference(Data);
111
 
  Result:=CompareFilenames(Filename,FileRef.Filename);
 
105
  Result:=CompareFilenames(AnsiString(Key),FileRef.Filename);
112
106
end;
113
107
 
114
108
{ TFileReferenceList }
116
110
procedure TFileReferenceList.UpdateSearchPath;
117
111
var
118
112
  SearchPathLen: Integer;
119
 
  ANode: TAVLTreeNode;
 
113
  ANode: TAvgLvlTreeNode;
120
114
  StartPos: Integer;
121
115
  CurFileLen: Integer;
122
116
  CurFileName: String;
188
182
destructor TFileReferenceList.Destroy;
189
183
begin
190
184
  Clear;
191
 
  FTree.Free;
192
 
  FTree:=nil;
 
185
  FreeAndNil(FTree);
193
186
  inherited Destroy;
194
187
end;
195
188
 
219
212
 
220
213
procedure TFileReferenceList.AddFilename(const Filename: string);
221
214
var
222
 
  ANode: TAVLTreeNode;
 
215
  ANode: TAvgLvlTreeNode;
223
216
  NewFileRef: TFileReference;
224
217
begin
225
218
  if Filename='' then exit;
226
219
  if FTree<>nil then begin
227
 
    ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
 
220
    ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
228
221
    if ANode<>nil then begin
229
222
      inc(TFileReference(ANode.Data).fReferenceCount);
230
223
      exit;
233
226
  NewFileRef:=TFileReference.Create;
234
227
  NewFileRef.fFilename:=Filename;
235
228
  inc(NewFileRef.fReferenceCount);
236
 
  if FTree=nil then FTree:=TAVLTree.Create(@CompareFileReferences);
 
229
  if FTree=nil then FTree:=TAvgLvlTree.Create(@CompareFileReferences);
237
230
  FTree.Add(NewFileRef);
238
231
  Invalidate;
239
232
end;
240
233
 
241
234
procedure TFileReferenceList.RemoveFilename(const Filename: string);
242
235
var
243
 
  ANode: TAVLTreeNode;
 
236
  ANode: TAvgLvlTreeNode;
244
237
  CurFileRef: TFileReference;
245
238
begin
246
239
  if Filename='' then exit;
247
240
  if FTree=nil then exit;
248
 
  ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
 
241
  ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
249
242
  if ANode=nil then exit;
250
243
  CurFileRef:=TFileReference(ANode.Data);
251
244
  dec(CurFileRef.fReferenceCount);
252
245
  if CurFileRef.fReferenceCount=0 then begin
253
 
    FTree.Remove(CurFileRef);
 
246
    FTree.Delete(ANode);
254
247
    CurFileRef.Free;
255
248
    Invalidate;
256
249
  end;
257
250
end;
258
251
 
259
 
function TFileReferenceList.GetFileReference(const Filename: string
260
 
  ): TFileReference;
 
252
function TFileReferenceList.GetFileReference(const Filename: string): TFileReference;
261
253
var
262
 
  ANode: TAVLTreeNode;
 
254
  ANode: TAvgLvlTreeNode;
263
255
begin
264
256
  Result:=nil;
265
257
  if FTree=nil then exit;
266
 
  ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
 
258
  ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
267
259
  if ANode=nil then exit;
268
260
  Result:=TFileReference(ANode.Data);
269
261
end;
276
268
 
277
269
function TFileReferenceList.CreateFileList: TStringList;
278
270
var
279
 
  ANode: TAVLTreeNode;
 
271
  ANode: TAvgLvlTreeNode;
280
272
begin
281
273
  Result:=TStringList.Create;
282
274
  if FTree=nil then exit;