@@ -29,6 +29,9 @@ interface
2929 Kernel.Enumerations, EditBtn;
3030
3131type
32+
33+ { TfrmImportList }
34+
3235 TfrmImportList = class (TForm)
3336 bvl1: TBevel;
3437 bvl2: TBevel;
@@ -64,6 +67,10 @@ TfrmImportList = class(TForm)
6467 procedure CheckAllItems (State: TCheckState);
6568 procedure PopulateTree (Tree: TVirtualStringTree; FilePath: String);
6669 function TreeImpToTree (TreeImp, Tree: TVirtualStringTree): Boolean;
70+ procedure MassRelativeToAbsolutePath (Sender: TBaseVirtualTree;
71+ Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
72+ procedure MassAbsoluteToRelativePath (Sender: TBaseVirtualTree;
73+ Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
6774 public
6875 { Public declarations }
6976 class procedure Execute (AOwner: TComponent);
@@ -77,10 +84,10 @@ implementation
7784{ $R *.lfm}
7885
7986uses
80- AppConfig.Main, VirtualTree.Methods,
87+ AppConfig.Main, VirtualTree.Methods, NodeDataTypes.Files,
8188 Utility.FileFolder, Utility.XML, Database.Manager, NodeDataTypes.Base,
8289 Kernel.Logger, Kernel.ResourceStrings, Utility.Misc, Kernel.Instance,
83- mormot.core.log;
90+ mormot.core.log, AppConfig.Paths ;
8491
8592procedure TfrmImportList.btnBackClick (Sender: TObject);
8693begin
@@ -118,16 +125,27 @@ procedure TfrmImportList.FormCreate(Sender: TObject);
118125end ;
119126
120127procedure TfrmImportList.FormClose (Sender: TObject; var Action: TCloseAction);
128+ var
129+ ImportPaths: TConfigPaths;
121130begin
122131 Config.ASuiteState := lsNormal;
123132 if (ModalResult = mrOk) and (vstListImp.HasChildren[vstListImp.RootNode]) then
124133 begin
125134 try
135+
136+ ImportPaths := TConfigPaths.Create(edtPathList.Text);
137+ try
138+ vstListImp.IterateSubtree(nil , MassAbsoluteToRelativePath, @ImportPaths, [], True);
139+ finally
140+ ImportPaths.Free;
141+ end ;
142+
126143 if TreeImpToTree(vstListImp, ASuiteInstance.MainTree) then
127144 begin
128145 ShowMessageFmtEx(msgItemsImported, [GetNumberNodeImp(vstListImp)]);
129146 TASuiteLogger.Info(msgItemsImported, [GetNumberNodeImp(vstListImp)]);
130147 end ;
148+
131149 TVirtualTreeMethods.GetAllIcons(ASuiteInstance.MainTree, nil );
132150 except
133151 on E : Exception do
@@ -169,13 +187,24 @@ class procedure TfrmImportList.Execute(AOwner: TComponent);
169187end ;
170188
171189procedure TfrmImportList.tsListShow (Sender: TObject);
190+ var
191+ AsuiteSqlPath: String;
192+ ImportPaths: TConfigPaths;
172193begin
173194 lblTitle.Caption := msgImportTitle3;
174195 btnNext.Caption := msgImport;
175196 btnNext.Enabled := vstListImp.CheckedCount > 0 ;
197+ AsuiteSqlPath := edtPathList.Text;
176198 // Import list in temporary vst
177199 try
178- PopulateTree(vstListImp, edtPathList.Text);
200+ PopulateTree(vstListImp, AsuiteSqlPath);
201+
202+ ImportPaths := TConfigPaths.Create(AsuiteSqlPath);
203+ try
204+ vstListImp.IterateSubtree(nil , MassRelativeToAbsolutePath, @ImportPaths, [], True);
205+ finally
206+ ImportPaths.Free;
207+ end ;
179208 finally
180209 TVirtualTreeMethods.GetAllIcons(vstListImp, nil );
181210 end ;
@@ -307,4 +336,42 @@ function TfrmImportList.TreeImpToTree(TreeImp,
307336 Tree.EndUpdate;
308337end ;
309338
339+ procedure TfrmImportList.MassRelativeToAbsolutePath (Sender: TBaseVirtualTree;
340+ Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
341+ var
342+ ImportPath: TConfigPaths;
343+ NodeData: TvBaseNodeData;
344+ begin
345+ ImportPath := TConfigPaths(Data^);
346+ NodeData := TVirtualTreeMethods.GetNodeItemData(Node, Sender);
347+ if not (NodeData.IsSeparatorItem) then
348+ begin
349+ TvFileNodeData(NodeData).PathIcon := ImportPath.RelativeToAbsolute(TvFileNodeData(NodeData).PathIcon);
350+ if NodeData.IsFileItem then
351+ begin
352+ TvFileNodeData(NodeData).PathFile := ImportPath.RelativeToAbsolute(TvFileNodeData(NodeData).PathFile);
353+ TvFileNodeData(NodeData).WorkingDir := ImportPath.RelativeToAbsolute(TvFileNodeData(NodeData).WorkingDir);
354+ end ;
355+ end ;
356+ end ;
357+
358+ procedure TfrmImportList.MassAbsoluteToRelativePath (Sender: TBaseVirtualTree;
359+ Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
360+ var
361+ ImportPath: TConfigPaths;
362+ NodeData: TvBaseNodeData;
363+ begin
364+ ImportPath := TConfigPaths(Data^);
365+ NodeData := TVirtualTreeMethods.GetNodeItemData(Node, Sender);
366+ if not (NodeData.IsSeparatorItem) then
367+ begin
368+ TvFileNodeData(NodeData).PathIcon := ImportPath.AbsoluteToRelative(TvFileNodeData(NodeData).PathIcon);
369+ if NodeData.IsFileItem then
370+ begin
371+ TvFileNodeData(NodeData).PathFile := ImportPath.AbsoluteToRelative(TvFileNodeData(NodeData).PathFile);
372+ TvFileNodeData(NodeData).WorkingDir := ImportPath.AbsoluteToRelative(TvFileNodeData(NodeData).WorkingDir);
373+ end ;
374+ end ;
375+ end ;
376+
310377end .
0 commit comments