mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 22:19:18 +02:00
IDE: package editor: fixed dnd to directory nodes
git-svn-id: trunk@45614 -
This commit is contained in:
parent
1d8608aa7f
commit
70baddad3d
@ -2526,6 +2526,7 @@ begin
|
|||||||
if IsPartOfProject=AValue then exit;
|
if IsPartOfProject=AValue then exit;
|
||||||
if Project<>nil then Project.BeginUpdate(true);
|
if Project<>nil then Project.BeginUpdate(true);
|
||||||
inherited SetIsPartOfProject(AValue);
|
inherited SetIsPartOfProject(AValue);
|
||||||
|
Modified:=true;
|
||||||
UpdateList(uilPartOfProject,IsPartOfProject);
|
UpdateList(uilPartOfProject,IsPartOfProject);
|
||||||
if IsPartOfProject then UpdateUsageCount(uuIsPartOfProject,0);
|
if IsPartOfProject then UpdateUsageCount(uuIsPartOfProject,0);
|
||||||
UpdateSourceDirectoryReference;
|
UpdateSourceDirectoryReference;
|
||||||
|
@ -19,6 +19,7 @@ object ProjectInspectorForm: TProjectInspectorForm
|
|||||||
Anchors = [akTop, akLeft, akBottom]
|
Anchors = [akTop, akLeft, akBottom]
|
||||||
BorderSpacing.Top = 2
|
BorderSpacing.Top = 2
|
||||||
DefaultItemHeight = 18
|
DefaultItemHeight = 18
|
||||||
|
DragMode = dmAutomatic
|
||||||
MultiSelect = True
|
MultiSelect = True
|
||||||
PopupMenu = ItemsPopupMenu
|
PopupMenu = ItemsPopupMenu
|
||||||
ReadOnly = True
|
ReadOnly = True
|
||||||
|
@ -1223,8 +1223,15 @@ begin
|
|||||||
if Node=FFilesNode then
|
if Node=FFilesNode then
|
||||||
exit(FilesBaseDirectory);
|
exit(FilesBaseDirectory);
|
||||||
Item:=TFileNameItem(Node.Data);
|
Item:=TFileNameItem(Node.Data);
|
||||||
if not (Item is TFileNameItem) then exit;
|
if (Item is TFileNameItem) then begin
|
||||||
Result:=Item.Filename;
|
Result:=Item.Filename;
|
||||||
|
end else if Node.HasAsParent(FFilesNode) then begin
|
||||||
|
// directory node
|
||||||
|
Result:=Node.Text;
|
||||||
|
end else
|
||||||
|
exit;
|
||||||
|
if not FilenameIsAbsolute(Result) then
|
||||||
|
Result:=AppendPathDelim(FilesBaseDirectory)+Result;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TProjectInspectorForm.IsDirectoryNode(Node: TTreeNode): boolean;
|
function TProjectInspectorForm.IsDirectoryNode(Node: TTreeNode): boolean;
|
||||||
|
@ -2759,8 +2759,15 @@ begin
|
|||||||
if Node=FFilesNode then
|
if Node=FFilesNode then
|
||||||
exit(FilesBaseDirectory);
|
exit(FilesBaseDirectory);
|
||||||
Item:=TFileNameItem(Node.Data);
|
Item:=TFileNameItem(Node.Data);
|
||||||
if not (Item is TFileNameItem) then exit;
|
if (Item is TFileNameItem) then begin
|
||||||
Result:=Item.Filename;
|
Result:=Item.Filename;
|
||||||
|
end else if Node.HasAsParent(FFilesNode) then begin
|
||||||
|
// directory node
|
||||||
|
Result:=Node.Text;
|
||||||
|
end else
|
||||||
|
exit;
|
||||||
|
if not FilenameIsAbsolute(Result) then
|
||||||
|
Result:=AppendPathDelim(FilesBaseDirectory)+Result;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackageEditorForm.GetDirectorySummary(DirNode: TTreeNode; out
|
procedure TPackageEditorForm.GetDirectorySummary(DirNode: TTreeNode; out
|
||||||
|
@ -1724,6 +1724,7 @@ var
|
|||||||
NodeData: TPENodeData;
|
NodeData: TPENodeData;
|
||||||
Item: TObject;
|
Item: TObject;
|
||||||
Directory: String;
|
Directory: String;
|
||||||
|
TV: TTreeView;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
SrcFilesEdit:=nil;
|
SrcFilesEdit:=nil;
|
||||||
@ -1736,17 +1737,37 @@ begin
|
|||||||
|
|
||||||
// get source
|
// get source
|
||||||
SrcFilesEdit:=GetFilesEditIntf(Source);
|
SrcFilesEdit:=GetFilesEditIntf(Source);
|
||||||
if (SrcFilesEdit=nil) or SrcFilesEdit.FilesOwnerReadOnly
|
if (SrcFilesEdit=nil) then begin
|
||||||
or (not FilenameIsAbsolute(SrcFilesEdit.FilesBaseDirectory)) then
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.CheckDrag failed: unknown src=',DbgSName(Source)]);
|
||||||
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
|
end;
|
||||||
|
if SrcFilesEdit.FilesOwnerReadOnly
|
||||||
|
or (not FilenameIsAbsolute(SrcFilesEdit.FilesBaseDirectory)) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.CheckDrag failed: src=',DbgSName(SrcFilesEdit.FilesOwner),' readonly=',SrcFilesEdit.FilesOwnerReadOnly,' basedir=',SrcFilesEdit.FilesBaseDirectory]);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
// get target
|
// get target
|
||||||
TargetFilesEdit:=GetFilesEditIntf(Sender);
|
TargetFilesEdit:=GetFilesEditIntf(Sender);
|
||||||
if (TargetFilesEdit=nil) or TargetFilesEdit.FilesOwnerReadOnly
|
if (TargetFilesEdit=nil) then begin
|
||||||
or (not FilenameIsAbsolute(TargetFilesEdit.FilesBaseDirectory)) then
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.CheckDrag failed: unknown target=',DbgSName(Sender)]);
|
||||||
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
|
end;
|
||||||
|
if TargetFilesEdit.FilesOwnerReadOnly
|
||||||
|
or (not FilenameIsAbsolute(TargetFilesEdit.FilesBaseDirectory)) then begin
|
||||||
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
|
debugln(['TPkgManager.CheckDrag failed: target=',DbgSName(TargetFilesEdit.FilesOwner),' readonly=',SrcFilesEdit.FilesOwnerReadOnly,' basedir=',SrcFilesEdit.FilesBaseDirectory]);
|
||||||
|
{$ENDIF}
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
debugln(['TPkgManager.CheckDrag Src=',SrcFilesEdit.FilesOwnerName,' Target=',TargetFilesEdit.FilesOwnerName]);
|
//debugln(['TPkgManager.CheckDrag Src=',SrcFilesEdit.FilesOwnerName,' Target=',TargetFilesEdit.FilesOwnerName]);
|
||||||
|
|
||||||
// check items
|
// check items
|
||||||
aFileCount:=0;
|
aFileCount:=0;
|
||||||
@ -1794,7 +1815,9 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TargetFilesEdit.FilesEditTreeView.GetInsertMarkAt(X,Y,TargetTVNode,TargetTVType);
|
TV:=TargetFilesEdit.FilesEditTreeView;
|
||||||
|
TargetTVNode:=TV.GetNodeAt(X,Y);
|
||||||
|
debugln(['TPkgManager.CheckDrag AAA1 TargetTVNode=',TargetTVNode<>nil,' Y=',Y]);
|
||||||
if TargetTVNode=nil then begin
|
if TargetTVNode=nil then begin
|
||||||
if aDependencyCount>0 then begin
|
if aDependencyCount>0 then begin
|
||||||
TargetTVNode:=TargetFilesEdit.TVNodeRequiredPackages;
|
TargetTVNode:=TargetFilesEdit.TVNodeRequiredPackages;
|
||||||
@ -1803,6 +1826,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
TargetTVType:=tvimAsFirstChild;
|
TargetTVType:=tvimAsFirstChild;
|
||||||
end;
|
end;
|
||||||
|
debugln(['TPkgManager.CheckDrag AAA2 TargetTVNode=',TargetTVNode.Text]);
|
||||||
if TargetFilesEdit.GetNodeDataItem(TargetTVNode,NodeData,Item) then begin
|
if TargetFilesEdit.GetNodeDataItem(TargetTVNode,NodeData,Item) then begin
|
||||||
// move to specific position is not yet supported
|
// move to specific position is not yet supported
|
||||||
// => redirect to parent nodes
|
// => redirect to parent nodes
|
||||||
@ -1815,18 +1839,18 @@ begin
|
|||||||
or TargetFilesEdit.IsDirectoryNode(TargetTVNode);
|
or TargetFilesEdit.IsDirectoryNode(TargetTVNode);
|
||||||
TargetTVType:=tvimAsFirstChild;
|
TargetTVType:=tvimAsFirstChild;
|
||||||
end;
|
end;
|
||||||
|
debugln(['TPkgManager.CheckDrag AAA3 TargetTVNode=',TargetTVNode.Text]);
|
||||||
if TargetFilesEdit.IsDirectoryNode(TargetTVNode)
|
if TargetFilesEdit.IsDirectoryNode(TargetTVNode)
|
||||||
or (TargetTVNode=TargetFilesEdit.TVNodeFiles)
|
or (TargetTVNode=TargetFilesEdit.TVNodeFiles)
|
||||||
then begin
|
then begin
|
||||||
Directory:=TargetFilesEdit.GetNodeFilename(TargetTVNode);
|
Directory:=TargetFilesEdit.GetNodeFilename(TargetTVNode);
|
||||||
if not FilenameIsAbsolute(Directory) then begin
|
if not FilenameIsAbsolute(Directory) then begin
|
||||||
{$IFDEF VerbosePkgEditDrag}
|
{$IFDEF VerbosePkgEditDrag}
|
||||||
debugln(['TPkgManager.CheckDrag: invalid target directory ',Directory]);
|
debugln(['TPkgManager.CheckDrag: invalid target directory="',Directory,'"']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
if TargetTVNode=TargetFilesEdit.TVNodeFiles then
|
TargetTVType:=tvimAsFirstChild;
|
||||||
TargetTVType:=tvimAsFirstChild;
|
|
||||||
if aFileCount>0 then begin
|
if aFileCount>0 then begin
|
||||||
// drag files
|
// drag files
|
||||||
end else if aDirectoryCount>0 then begin
|
end else if aDirectoryCount>0 then begin
|
||||||
|
Loading…
Reference in New Issue
Block a user