IDE: package editor: fixed dnd to directory nodes

git-svn-id: trunk@45614 -
This commit is contained in:
mattias 2014-06-22 11:43:34 +00:00
parent 1d8608aa7f
commit 70baddad3d
5 changed files with 53 additions and 13 deletions

View File

@ -2526,6 +2526,7 @@ begin
if IsPartOfProject=AValue then exit;
if Project<>nil then Project.BeginUpdate(true);
inherited SetIsPartOfProject(AValue);
Modified:=true;
UpdateList(uilPartOfProject,IsPartOfProject);
if IsPartOfProject then UpdateUsageCount(uuIsPartOfProject,0);
UpdateSourceDirectoryReference;

View File

@ -19,6 +19,7 @@ object ProjectInspectorForm: TProjectInspectorForm
Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Top = 2
DefaultItemHeight = 18
DragMode = dmAutomatic
MultiSelect = True
PopupMenu = ItemsPopupMenu
ReadOnly = True

View File

@ -1223,8 +1223,15 @@ begin
if Node=FFilesNode then
exit(FilesBaseDirectory);
Item:=TFileNameItem(Node.Data);
if not (Item is TFileNameItem) then exit;
Result:=Item.Filename;
if (Item is TFileNameItem) then begin
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;
function TProjectInspectorForm.IsDirectoryNode(Node: TTreeNode): boolean;

View File

@ -2759,8 +2759,15 @@ begin
if Node=FFilesNode then
exit(FilesBaseDirectory);
Item:=TFileNameItem(Node.Data);
if not (Item is TFileNameItem) then exit;
Result:=Item.Filename;
if (Item is TFileNameItem) then begin
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;
procedure TPackageEditorForm.GetDirectorySummary(DirNode: TTreeNode; out

View File

@ -1724,6 +1724,7 @@ var
NodeData: TPENodeData;
Item: TObject;
Directory: String;
TV: TTreeView;
begin
Result:=false;
SrcFilesEdit:=nil;
@ -1736,17 +1737,37 @@ begin
// get source
SrcFilesEdit:=GetFilesEditIntf(Source);
if (SrcFilesEdit=nil) or SrcFilesEdit.FilesOwnerReadOnly
or (not FilenameIsAbsolute(SrcFilesEdit.FilesBaseDirectory)) then
if (SrcFilesEdit=nil) then begin
{$IFDEF VerbosePkgEditDrag}
debugln(['TPkgManager.CheckDrag failed: unknown src=',DbgSName(Source)]);
{$ENDIF}
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
TargetFilesEdit:=GetFilesEditIntf(Sender);
if (TargetFilesEdit=nil) or TargetFilesEdit.FilesOwnerReadOnly
or (not FilenameIsAbsolute(TargetFilesEdit.FilesBaseDirectory)) then
if (TargetFilesEdit=nil) then begin
{$IFDEF VerbosePkgEditDrag}
debugln(['TPkgManager.CheckDrag failed: unknown target=',DbgSName(Sender)]);
{$ENDIF}
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
aFileCount:=0;
@ -1794,7 +1815,9 @@ begin
exit;
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 aDependencyCount>0 then begin
TargetTVNode:=TargetFilesEdit.TVNodeRequiredPackages;
@ -1803,6 +1826,7 @@ begin
end;
TargetTVType:=tvimAsFirstChild;
end;
debugln(['TPkgManager.CheckDrag AAA2 TargetTVNode=',TargetTVNode.Text]);
if TargetFilesEdit.GetNodeDataItem(TargetTVNode,NodeData,Item) then begin
// move to specific position is not yet supported
// => redirect to parent nodes
@ -1815,18 +1839,18 @@ begin
or TargetFilesEdit.IsDirectoryNode(TargetTVNode);
TargetTVType:=tvimAsFirstChild;
end;
debugln(['TPkgManager.CheckDrag AAA3 TargetTVNode=',TargetTVNode.Text]);
if TargetFilesEdit.IsDirectoryNode(TargetTVNode)
or (TargetTVNode=TargetFilesEdit.TVNodeFiles)
then begin
Directory:=TargetFilesEdit.GetNodeFilename(TargetTVNode);
if not FilenameIsAbsolute(Directory) then begin
{$IFDEF VerbosePkgEditDrag}
debugln(['TPkgManager.CheckDrag: invalid target directory ',Directory]);
debugln(['TPkgManager.CheckDrag: invalid target directory="',Directory,'"']);
{$ENDIF}
exit;
end;
if TargetTVNode=TargetFilesEdit.TVNodeFiles then
TargetTVType:=tvimAsFirstChild;
TargetTVType:=tvimAsFirstChild;
if aFileCount>0 then begin
// drag files
end else if aDirectoryCount>0 then begin