示例#1
0
void CMyTreeCtrl::HandleScrollTimer()
{
	// Doesn't matter that we didn't initialize m_timerticks
	m_timerticks++;

	POINT pt, clientPt;
	GetCursorPos( &pt );
	RECT rect;
	GetClientRect( &rect );
	ClientToScreen( &rect );
	clientPt = pt;
	ScreenToClient( &clientPt );

	CImageList::DragMove(clientPt);

	HTREEITEM hitem = GetFirstVisibleItem();

	if( pt.y < rect.top + 10 )
	{
		// We need to scroll up
		// Scroll slowly if cursor near the treeview control
		int slowscroll = 6 - (rect.top + 10 - pt.y) / 4;
		if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
		{
			CImageList::DragShowNolock(FALSE);
			SendMessage( WM_VSCROLL, SB_LINEUP);
			SelectDropTarget(hitem);
			m_hitemDrop = hitem;
			CImageList::DragShowNolock(TRUE);
		}
	}
	else if( pt.y > rect.bottom - 10 )
	{
		// We need to scroll down
		// Scroll slowly if cursor near the treeview control
		int slowscroll = 6 - (pt.y - rect.bottom + 10 ) / 4;
		if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
		{
			CImageList::DragShowNolock(FALSE);
			SendMessage( WM_VSCROLL, SB_LINEDOWN);
			int nCount = GetVisibleCount();
			for ( int i=0; i<nCount-1; ++i )
				hitem = GetNextVisibleItem(hitem);
			if( hitem )
				SelectDropTarget(hitem);
			m_hitemDrop = hitem;
			CImageList::DragShowNolock(TRUE);
		}
	}
}
示例#2
0
void CTreeCtrlEx::OnMouseMove(UINT nFlags, CPoint point)
{
	HTREEITEM hitem;
	UINT flags;
	if(m_bLDragging)
	{
		if(nFlags==0)
		{
			m_bLDragging=FALSE;
		}
		else
		{
			POINT pt = point;
			ClientToScreen( &pt );
			CImageList::DragMove(pt);
			if ((hitem = HitTest(point, &flags)) != NULL)
			{
				CImageList::DragShowNolock(FALSE);
				SelectDropTarget(hitem);
				m_hitemDrop = hitem;
				if(GetItemData(hitem)>=1000 || GetItemData(hitem)==0)
					CImageList::DragShowNolock(TRUE);
				else
					m_hitemDrop=NULL;
			}
		}
	}
	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#3
0
void CMyTreeCtrl::OnButtonUp()
{
	if (m_bDragging)
	{
		ASSERT(m_pimagelist != NULL);
		m_pimagelist->DragLeave(this);
		m_pimagelist->EndDrag();
		delete m_pimagelist;
		m_pimagelist = NULL;
		if (m_hitemDrag != m_hitemDrop && 
			!IsChildNodeOf(m_hitemDrop, m_hitemDrag) &&
			GetParentItem(m_hitemDrag) != m_hitemDrop &&
			GetParentItem(m_hitemDrag) != NULL &&
			GetParentItem(m_hitemDrop) == NULL )
		{
			m_hitemDragParent = GetParentItem(m_hitemDrag);
			GetParent()->SendMessage(TV_PREDROP,(unsigned int)m_hitemDrag,(long)m_hitemDrop);
			TransferItem(m_hitemDrag, m_hitemDrop);
			DeleteItem(m_hitemDrag);
			GetParent()->PostMessage(TV_POSTDROP,(unsigned int)m_hitemDragParent,NULL);
			m_bItemChanged = TRUE;
		}
		else
			MessageBeep(0);

		ReleaseCapture();
		m_bDragging = FALSE;
		SelectDropTarget(NULL);
		KillTimer(1000);
	}
}
示例#4
0
BOOL CGroupEditTree::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message == WM_KEYDOWN)
	{
		if (GetEditControl() 
			&& (pMsg->wParam == VK_RETURN
			||  pMsg->wParam == VK_ESCAPE))
		{
			::TranslateMessage(pMsg);
			::DispatchMessage(pMsg);
			return TRUE;	// DO NOT process further
		}

		if (pMsg->wParam == VK_ESCAPE 
			&& m_bDragging)
		{
			m_bDragging = 0;
			CImageList::DragLeave(NULL);
			CImageList::EndDrag();
			ReleaseCapture();
			SelectDropTarget(NULL);
			delete m_pDragImage;
			return TRUE;	// DO NOT process further
		}
	}

	return CTreeCtrl::PreTranslateMessage(pMsg);
}
示例#5
0
void CGroupEditTree::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CTreeCtrl::OnLButtonUp(nFlags, point);

	if (m_bDragging)
	{
		m_bDragging = FALSE;
		CImageList::DragLeave(this);
		CImageList::EndDrag();
		ReleaseCapture();

		delete m_pDragImage;

		// Remove drop target highlighting
		SelectDropTarget(NULL);

		if (m_hitemDrag == m_hitemDrop || m_hitemDrop == NULL)
			return;

		// If Drag item is an ancestor of Drop item then return
		HTREEITEM htiParent = m_hitemDrop;
		while ((htiParent = GetParentItem(htiParent)) != NULL)
			if (htiParent == m_hitemDrag)
				return;
		
		Expand(m_hitemDrop, TVE_EXPAND);

		DWORD source = GetItemData(m_hitemDrag);
		DWORD dest = GetItemData(m_hitemDrop) - 0xFFFF;
		TV_INSERTSTRUCT tvstruct;
		tvstruct.hParent = m_hitemDrop;
		tvstruct.hInsertAfter = TVI_SORT;
		tvstruct.item.lParam = source;
		tvstruct.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
		DeleteItem(m_hitemDrag);

		if (source < 0xFFFF)
		{
			opts->piecesgroups[source] = opts->groups[dest];

			tvstruct.item.iImage = 2;
			tvstruct.item.iSelectedImage = 2;
			tvstruct.item.pszText = (char*)opts->pieces[source]->GetName();
			InsertItem(&tvstruct);
		}
		else
		{
			opts->groupsgroups[source - 0xFFFF] = opts->groups[dest];

			tvstruct.item.iImage = 0;
			tvstruct.item.iSelectedImage = 1;
			tvstruct.item.pszText = opts->groups[source - 0xFFFF]->m_strName;

			HTREEITEM hti = InsertItem(&tvstruct);
			AddChildren(hti, opts->groups[source - 0xFFFF]);
		}

//		AddChildren(m_hitemDrop, opts->groups[dest]);
	}
}
示例#6
0
void CGroupEditTree::OnMouseMove(UINT nFlags, CPoint point) 
{
	HTREEITEM hitem;
	UINT flags;

	if (m_bDragging)
	{
		POINT pt = point;
		ClientToScreen(&pt);
		CImageList::DragMove(pt);
		if ((hitem = HitTest(point, &flags)) != NULL)
		{
			CImageList::DragShowNolock(FALSE);
			m_hitemDrop = GetDropTarget(hitem);
			SelectDropTarget(m_hitemDrop);
			CImageList::DragShowNolock(TRUE);
		}
		else
			m_hitemDrop = NULL;

		if (m_hitemDrop)
			SetCursor(m_dropCursor);
		else
			SetCursor(m_noDropCursor);
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#7
0
void CLTWinTreeMgr::OnMouseMove(UINT nFlags, CPoint pt)
{
	CTreeCtrl::OnMouseMove(nFlags, pt);

	//make sure we are in a drag operation
	if(!IsInDrag())
	{
		return;
	}


	//hilite the drop target if one exists
	CLTWinTreeItem* pHit = GetDropTarget(pt);

	if(pHit)
	{
		//this is a valid drop target, so make it look like one
		SelectDropTarget(pHit->m_hTreeItem);
	}

	//move the drag image
	if(m_pDragImage)
	{
		m_pDragImage->DragMove(pt);
	}


}
示例#8
0
void CMyTreeCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	HTREEITEM			hitem;
	UINT				flags;

	if ( m_nTimerIDHover )
	{
		KillTimer( m_nTimerIDHover );
		m_nTimerIDHover = 0;
	}

	if (m_bDragging)
	{
		ASSERT(m_pimagelist != NULL);
		m_pimagelist->DragMove(point);

		// Start the hover timer
		m_nTimerIDHover = SetTimer(TIMER_ID_HOVER, 500, NULL);
		m_hoverPoint=point;

		if ((hitem = HitTest(point, &flags)) != NULL)
		{
			m_pimagelist->DragLeave(this);
			SelectDropTarget(hitem);
			m_hitemDrop = hitem;
			m_pimagelist->DragEnter(this, point);
		}
		else
		{
			m_hitemDrop = NULL;
		}
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#9
0
void CMyTreeCtrl::OnButtonUp()
{
	if (m_bDragging)
	{
		KillTimer( m_nTimerIDScroll );

		ASSERT(m_pimagelist != NULL);
		m_pimagelist->DragLeave(this);
		m_pimagelist->EndDrag();
		delete m_pimagelist;
		m_pimagelist = NULL;

		if (m_hitemDrag != m_hitemDrop && !IsChildNodeOf(m_hitemDrop, m_hitemDrag) && 
															GetParentItem(m_hitemDrag) != m_hitemDrop)
		{
			TransferItem(m_hitemDrag, m_hitemDrop);
			DeleteItem(m_hitemDrag);
		}
		else
			MessageBeep(0);

		m_bDragging = FALSE;
		ReleaseCapture();
		SelectDropTarget(NULL);
	}
}
void EXTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
    EXWaitingTreeCtrl::OnLButtonUp(nFlags, point);
    if (m_bLDragging)
    {
        m_bLDragging = FALSE;
        CImageList::DragLeave(this);
        CImageList::EndDrag();
        ReleaseCapture();

        delete m_pDragImage;

        // Remove drop target highlighting
        SelectDropTarget(NULL);

        if( m_hitemDrag == m_hitemDrop )
            return;

        // If Drag item is an ancestor of Drop item then return
        HTREEITEM htiParent = m_hitemDrop;
        while( (htiParent = GetParentItem( htiParent )) != NULL )
        {
            if( htiParent == m_hitemDrag ) return;
        }

        // Move in data...
        bool bRes = false;
        HTREEITEM htiPrevParent	= GetParentItem( m_hitemDrag );
        /*		EBaseItem * pFromParentItem = (EBaseItem *)GetItemData(htiPrevParent);
        		EBaseItem * pToParentItem = (EBaseItem *)GetItemData(m_hitemDrop);
        		EBaseItem * pDraggedItem = (EBaseItem *)GetItemData(m_hitemDrag);

        		if(pFromParentItem && pFromParentItem->m_pITreeMember &&
        		   pToParentItem && pToParentItem->m_pITreeMember &&
        		   pDraggedItem && pDraggedItem->m_pITreeMember)
        		{
        			bRes = pDraggedItem->m_pITreeMember->MoveItem(pFromParentItem->m_pITreeMember,pToParentItem->m_pITreeMember);
        		}*/
        IXTreeItem * pFromParentItem = (IXTreeItem *)GetItemData(htiPrevParent);
        IXTreeItem * pToParentItem = (IXTreeItem *)GetItemData(m_hitemDrop);
        IXTreeItem * pDraggedItem = (IXTreeItem *)GetItemData(m_hitemDrag);

        if(pFromParentItem && pToParentItem && pDraggedItem)
        {
            bRes = pDraggedItem->MoveItem(pFromParentItem,pToParentItem);
        }
        if(!bRes)
            return;

        // Move in tree
        Expand( m_hitemDrop, TVE_EXPAND ) ;
        HTREEITEM htiNew = CopyBranch( m_hitemDrag, m_hitemDrop, TVI_LAST );
        SelectItem( htiNew );

        if(m_hitemDrop)
            RefreshSubItems(m_hitemDrop);
    }
}
示例#11
0
//-----------------------------------------------------------------------------
// Purpose:
// Input  : eDropType -
//			nFlags -
//			point -
//-----------------------------------------------------------------------------
void CGroupList::Drop(DropType_t eDropType, UINT nFlags, CPoint point)
{
    SelectDropTarget(NULL);

    HTREEITEM hDragItem = m_hDragItem;
    m_hDragItem = NULL;

    //
    // We are dragging. Drop!
    //
    if (m_pDragImageList)
    {
        m_pDragImageList->DragLeave(this);
        m_pDragImageList->EndDrag();
        delete m_pDragImageList;
        m_pDragImageList = NULL;
    }

    //
    // Get the group that we were dragging.
    //
    CVisGroup *pDragGroup = (CVisGroup *)GetItemData(hDragItem);

    //
    // Determine what group was dropped onto.
    //
    HTREEITEM hDropItem = HitTest(point);
    if (hDropItem == hDragItem)
    {
        return;
    }

    CVisGroup *pDropGroup = NULL;
    if (hDropItem)
    {
        pDropGroup = (CVisGroup *)GetItemData(hDropItem);
    }

    if (pDragGroup == pDropGroup)
    {
        // Shouldn't happen, but just in case.
        return;
    }

    CWnd *pwndParent = GetParent();
    if (pwndParent != NULL)
    {
        if (eDropType == DROP_LEFT)
        {
            pwndParent->PostMessage(g_uLeftDragDropMsg, (WPARAM)pDragGroup, (LPARAM)pDropGroup);
        }
        else
        {
            pwndParent->PostMessage(g_uRightDragDropMsg, (WPARAM)pDragGroup, (LPARAM)pDropGroup);
        }
    }
}
示例#12
0
void CNZProjectTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CTreeCtrl::OnLButtonUp(nFlags, point);

	if (m_bDragging)
	{
		// end dragging
		m_bDragging = FALSE;

		try
		{
			CImageList::DragLeave(this);
			CImageList::EndDrag();
			ReleaseCapture();

			delete m_pDragImage;

			// Remove drop target highlighting
			SelectDropTarget(NULL);
			m_htiOldDrop = NULL;

			// If Drag item is a child of Drop item or they ar ethe same node then return
			if( m_htiDrag == m_htiDrop || GetParentItem(m_htiDrag) == m_htiDrop )
				throw "";
			
			CXNode* pNewNode = NULL;
			CXNode* pDragNode = (CXNode*)GetItemData(m_htiDrag);
			CXNode* pDropNode = (CXNode*)GetItemData(m_htiDrop);
			if (pDropNode->m_enNodeType == XNODE_FILE)
				throw"";
			
			this->MoveNode(pDragNode, (CXFolder*)pDropNode);
		}
		catch (...)
		{}

		// kill the expand timer
		if( m_nExpandTimer )
		{
			KillTimer( m_nExpandTimer );
			m_nExpandTimer = 0;
		}

		// kill the scroll timer
		if( m_nScrollTimer )
		{
			KillTimer( m_nScrollTimer );
			m_nScrollTimer = 0;
		}
	}
}
示例#13
0
void CTreeCtrlEx::OnLButtonUp(UINT nFlags, CPoint point)
{
	CTreeCtrl::OnLButtonUp(nFlags, point);

	if(m_bLDragging)
	{
		m_bLDragging=FALSE;
		CImageList::DragLeave(this);
		CImageList::EndDrag();
		ReleaseCapture();
		delete m_pDragImage;
		SelectDropTarget(NULL);

		if(m_hitemDrop!=NULL && m_hitemDrag!=NULL)
		{
			if(GetItemData(m_hitemDrop)!=0)
			{
				if(m_pIdentify->GetGestureById((int)GetItemData(m_hitemDrop))->m_GroupStatus!=1)
				{
					m_hitemDrop=GetParentItem(m_hitemDrop);
				}
				if( (m_hitemDrag==m_hitemDrop) || (m_hitemDrop==NULL) || (GetParentItem(m_hitemDrag)==m_hitemDrop) )
				{
					SelectItem(m_hitemDrag);
					return;
				}
			}

			HTREEITEM htiParent = m_hitemDrop;
			while( (htiParent = GetParentItem( htiParent )) != NULL )
			{
				if( htiParent == m_hitemDrag ) return;
			}
			
			Expand(m_hitemDrop, TVE_EXPAND);
			
			int dataDrag=(int)GetItemData(m_hitemDrag);
			int dataDrop=(int)GetItemData(m_hitemDrop);
			// перемещаем жесты в основном массиве, там внутри модифицируется тунель
			m_pIdentify->Move(
				m_pIdentify->m_Tunnel.GetNumberById(dataDrag),
				m_pIdentify->m_Tunnel.GetNumberById(dataDrop)
				);

			HTREEITEM htiNew=CopyBranch(m_hitemDrag,m_hitemDrop,TVI_SORT);
			DeleteItem(m_hitemDrag);
			SelectItem(htiNew);
		}
	}
}
示例#14
0
void CLTWinTreeMgr::OnLButtonUp(UINT nFlags, CPoint pt)
{
	CTreeCtrl::OnLButtonUp(nFlags, pt);

	//make sure we are in a drag operation
	if(!IsInDrag())
	{
		return;
	}

	//see if we have a place to drop it
	CLTWinTreeItem* pHit = GetDropTarget(pt);

	if(pHit)
	{
		//we are moving it, so lets make the move

		//first erase the old tree
		CTreeCtrl::DeleteItem(m_pDragItem->m_hTreeItem);

		//unlink the item
		UnlinkFromSiblings(m_pDragItem);

		//now build the new tree  recursively
		RebuildDraggedTree(m_pDragItem, pHit);

		//select the moved item
		CTreeCtrl::SelectItem(m_pDragItem->m_hTreeItem);
	}

	//clear the drop target
	SelectDropTarget(NULL);

	//clean up the drag stuff
	m_bDragging		= FALSE;
	m_pDragItem		= NULL;

	//clean up the image list
	if(m_pDragImage)
	{
		m_pDragImage->EndDrag();
		delete m_pDragImage;
		m_pDragImage	= NULL;
	}

	//clean up the cursor
	ReleaseCapture();


}
示例#15
0
void CTreeFileCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	if (IsDragging())
  {
    CRect clientRect;
    GetClientRect(&clientRect);

    //Draw the drag
    POINT pt = point;
    ClientToScreen(&pt);
    CImageList::DragMove(pt);

    //Only select the drop item if we are in the client area
    HTREEITEM hItem = NULL;
    if (clientRect.PtInRect(point))
    {
      UINT flags;
      hItem = HitTest(point, &flags);
      if (m_hItemDrop != hItem)
      {
        CImageList::DragShowNolock(FALSE);
        SelectDropTarget(hItem);
        m_hItemDrop = hItem;
        CImageList::DragShowNolock(TRUE);
      }
    }
    
    if (hItem)
      hItem = GetDropTarget(hItem);

    //Change the cursor to give feedback
    if (hItem)
    {
      if ((GetKeyState(VK_CONTROL) & 0x8000))
        SetCursor(m_DropCopyCursor);
      else
        SetCursor(m_DropMoveCursor);
    }
    else
    {
      if ((GetKeyState(VK_CONTROL) & 0x8000))
        SetCursor(m_NoDropCopyCursor);
      else
        SetCursor(m_NoDropMoveCursor);
    }
  }

  //Let the parent class do its thing	
	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#16
0
void CSharedDirsTreeCtrl::OnCancelMode() 
{
	if (m_pDraggingItem != NULL){
		CImageList::DragLeave(NULL);
		CImageList::EndDrag();
		ReleaseCapture();
		ShowCursor(TRUE);
		SelectDropTarget(NULL);

		delete m_pDraggingItem;
		m_pDraggingItem = NULL;
		RedrawWindow();
	}
	CTreeCtrl::OnCancelMode();
}
HTREEITEM CDragDropTreeCtrl::HighlightDropTarget(CPoint point)
{
    // Find out which item (if any) the cursor is over.
    UINT nFlags;
    HTREEITEM hItem = HitTest(point, &nFlags);

    // Highlight the item, or unhighlight all items if the cursor isn't
    // over an item.
    m_pImageList->DragShowNolock(FALSE);
    SelectDropTarget(hItem);
    m_pImageList->DragShowNolock(TRUE);

    // Return the handle of the highlighted item.
    return hItem;
}
void CDragDropTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
    CTreeCtrl::OnLButtonUp(nFlags, point);

    if (m_bDragging && m_pImageList != NULL)
    {
        // Stop the scroll timer if it's running.
        KillTimer(1);

        // Terminate the dragging operation and release the mouse.
        m_pImageList->DragLeave(this);
        m_pImageList->EndDrag();
        ::ReleaseCapture();
        m_bDragging = FALSE;
        SelectDropTarget(NULL);

        // Delete the image list created by CreateDragImage.
        delete m_pImageList;
        m_pImageList = NULL;

        // Get the HTREEITEM of the drop target and exit now if it's NULL.
        UINT nHitFlags;
        HTREEITEM hItem = HitTest(point, &nHitFlags);
        if (hItem == NULL)
            return;

        if (hItem == m_hDragItem)
            return;
        else if (hItem == GetParentItem(m_hDragItem))
            return;
        else if (IsChildOf(hItem, m_hDragItem))
            return;

        // Move the dragged item and its subitems (if any) to the drop point.
        MoveTree(hItem, m_hDragItem);

        // Mark the item as having children
        TVITEM tvItem;
        tvItem.mask = TVIF_CHILDREN | TVIF_HANDLE;
        tvItem.cChildren = 1;
        tvItem.hItem = hItem;
        SetItem(&tvItem);

        m_hDragItem = NULL;
        if (m_WMOnDropped)
            GetParent()->SendMessage(m_WMOnDropped, (WPARAM)hItem);
    }
}
示例#19
0
void CSiteGroupsTree::OnMouseMove(UINT flags, CPoint point)
{
    if (m_isDragging) {
        CImageList::DragMove(point);
        UINT hitFlags;
        HTREEITEM item = HitTest(point, &hitFlags);
        if (item != m_droppedItem) {
            CImageList::DragShowNolock(FALSE);
            SelectDropTarget(item);
            m_droppedItem = item;
            CImageList::DragShowNolock(TRUE);
        }
    }

    CTreeCtrl::OnMouseMove(flags, point);
}
示例#20
0
void KGTreeCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	HTREEITEM  hItem;
	UINT       flags;

	if (m_nHoverTimerID)
	{
		KillTimer(m_nHoverTimerID);
		m_nHoverTimerID = 0;
	}

	m_nHoverTimerID = SetTimer(1, 800, NULL);
	m_HoverPoint    = point;

	if (m_bDragging)
	{
		CPoint  pt = point;
		CImageList::DragMove(pt);

		CImageList::DragShowNolock(false);
		hItem = HitTest(point, &flags);
		if (hItem)
		{
			SelectDropTarget(hItem);

			CRect rect;
			GetItemRect(hItem, &rect, true);
			rect.left  -= 35;
			m_curPointLeft.x = rect.left;
			m_curPointLeft.y = rect.bottom;
			m_curPointRigh.x = rect.right;
			m_curPointRigh.y = rect.bottom;

			m_hItemDragD = hItem;
		}

		CImageList::DragShowNolock(true);

		CRect  rect;
		GetClientRect(&rect);
		if (point.x < rect.left + 20)
			m_hItemDragD = NULL;
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#21
0
void CNZProjectTreeCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	HTREEITEM		hitem;
	UINT			flags;

	if (m_bDragging)
	{
		//TRACE0("MOUSE MOVE/t");
		POINT pt = point;
		ClientToScreen( &pt );
		CImageList::DragMove(pt);
		if ((hitem = HitTest(point, &flags)) != NULL)
		{
			if( m_htiOldDrop == NULL )
				m_htiOldDrop = GetDropHilightItem();

			CXNode* pNode = (CXNode*)GetItemData(hitem);
			if (pNode->m_enNodeType == XNODE_FILE)
			{
				// use the file's parent (folder or project)
				hitem = pNode->m_pParent->m_hTreeItem;
				ASSERT(hitem);
			}

			// select the node to which we can drop
			CImageList::DragShowNolock(FALSE);
			SelectDropTarget(hitem);
			m_htiDrop = hitem;
			CImageList::DragShowNolock(TRUE);

			// kill the timer if selection changed
			if( m_nExpandTimer && hitem == m_htiOldDrop )
			{
				KillTimer( m_nExpandTimer );
				m_nExpandTimer = 0;
			}
			
			// start the timer again
			if( !m_nExpandTimer )
				m_nExpandTimer = SetTimer( 1000, EXPAND_TIMER, NULL );
		}
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
}
示例#22
0
//-----------------------------------------------------------------------------
// Purpose:
// Input  : nFlags -
//			point -
//-----------------------------------------------------------------------------
void CGroupList::OnMouseMove(UINT nFlags, CPoint point)
{
    CTreeCtrl::OnMouseMove(nFlags, point);

    if (m_bRButtonDown && !m_hDragItem && (point.x != m_ptRButtonDown.x) && (point.y != m_ptRButtonDown.y))
    {
        // First mouse move since a right button down. Start dragging.
        HTREEITEM hItem = HitTest(m_ptRButtonDown);
        BeginDrag(point, hItem);
    }

    if (!m_hDragItem)
    {
        return;
    }

    if (m_pDragImageList)
    {
        m_pDragImageList->DragMove(point);
    }

    //
    // Highlight the item we hit.
    //
    HTREEITEM hItem = HitTest(point);
    if (hItem == GetDropHilightItem())
    {
        return;
    }

    // hide image first
    if (m_pDragImageList)
    {
        m_pDragImageList->DragLeave(this);
        m_pDragImageList->DragShowNolock(FALSE);
    }

    SelectDropTarget(hItem);

    if (m_pDragImageList)
    {
        m_pDragImageList->DragEnter(this, point);
    }
}
示例#23
0
void CSharedDirsTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point){
	
	if (m_pDraggingItem != NULL){
		CPoint pt;
		pt = point;
		ClientToScreen(&pt);

		TVHITTESTINFO tvhti;
		tvhti.pt = pt;
		ScreenToClient(&tvhti.pt);
		HTREEITEM hItemSel = HitTest(&tvhti);
		CDirectoryItem* pDragTarget;
		if (hItemSel != NULL && (pDragTarget = (CDirectoryItem*)GetItemData(hItemSel)) != NULL){
			//only allow dragging to shared folders
			if (pDragTarget->m_eItemType == SDI_DIRECTORY || pDragTarget->m_eItemType == SDI_NO){
				CDirectoryItem* pRealDragItem;
				HTREEITEM htReal = m_pRootUnsharedDirectries->FindItem(m_pDraggingItem);
				// get the original drag src
				if (htReal != NULL && (pRealDragItem = (CDirectoryItem*)GetItemData(htReal)) != NULL){
					EditSharedDirectories(pRealDragItem, true, false);
				}
				else{
					// item was deleted - no problem as when we dont need to update the visible part
					// we can just as well use the contentcopy
					EditSharedDirectories(m_pDraggingItem, true, false);
				}
			}
		}
		
		CImageList::DragLeave(NULL);
		CImageList::EndDrag();
		ReleaseCapture();
		ShowCursor(TRUE);
		SelectDropTarget(NULL);

		delete m_pDraggingItem;
		m_pDraggingItem = NULL;

		RedrawWindow();
	}
	CTreeCtrl::OnLButtonUp(nFlags, point);
}
示例#24
0
void KGTreeCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
	CTreeCtrl::OnLButtonUp(nFlags, point);

	if (m_bDragging)
	{
		m_bDragging = false;
		CImageList::DragLeave(this);
		CImageList::EndDrag();
		ReleaseCapture();
		delete m_pDragImage;

		SelectDropTarget(NULL);
		m_eMoveType = MOVE_TYPE_CUT;
		OnStick((WPARAM)m_hItemDragD, (LPARAM)0);

		KillTimer(m_nScrollTimerID);
		KillTimer(m_nDrawLineTimerID);
	}
}
示例#25
0
//-----------------------------------------------------------------------------
// Purpose:
// Input  : pt -
//			hItem -
//-----------------------------------------------------------------------------
void CGroupList::BeginDrag(CPoint point, HTREEITEM hItem)
{
    m_hDragItem = hItem;
    if (m_hDragItem)
    {
        m_pDragImageList = CreateDragImage(m_hDragItem);
        if (m_pDragImageList)
        {
            CPoint ptHotSpot(0, 0);
            m_pDragImageList->BeginDrag(0, ptHotSpot);
            m_pDragImageList->DragEnter(this, point);
            SelectDropTarget(NULL);
        }

        // Timer handles scrolling the list control when dragging outside the window bounds.
        SetTimer(TIMER_GROUP_DRAG_SCROLL, 300, NULL);

        SetCapture();
    }
}
示例#26
0
void CSiteGroupsTree::OnLButtonUp(UINT flags, CPoint point)
{
    CTreeCtrl::OnLButtonUp(flags, point);

    if (m_isDragging == false)
        return;

    // User is dropping an item

    m_isDragging = false;
    CImageList::DragLeave(this);
    CImageList::EndDrag();
    ReleaseCapture();
    m_dragImageList.reset(0);
    SelectDropTarget(0);

    // Determine whether dropping the item has an effect
    
    // Here we allow a group to be dropped on itself without any effect and without any
    // error message
    if ((m_draggedItem == m_droppedItem) || (m_droppedItem == 0))
        return;

    if (IsDroppableItem(m_draggedItem) == false)
        return;

    WebWatch::SiteItemGroup & draggedGroup = GetGroupFromItem(m_draggedItem);
    WebWatch::SiteItemGroup & droppedGroup = GetGroupFromItem(m_droppedItem);

    if (WebWatch::IsChildOf(draggedGroup, droppedGroup) == true) {
        GetParent()->MessageBox("Cannot move a group into one of its child groups", "Error", MB_OK | MB_ICONERROR);
        return;
    }

    // Do the actual moving
    
    droppedGroup.MoveGroup(draggedGroup);
    
    BuildTree();
    SelectGroup(draggedGroup, true);
}
示例#27
0
void CSharedDirsTreeCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	if (m_pDraggingItem != NULL)
	{
		CPoint pt;

		/* drag the item to the current position */
		pt = point;
		ClientToScreen(&pt);

		CImageList::DragMove(pt);
		CImageList::DragShowNolock(FALSE);
		if (CWnd::WindowFromPoint(pt) != this)
			SetCursor(AfxGetApp()->LoadStandardCursor(IDC_NO));
		else
		{
			TVHITTESTINFO tvhti;
			tvhti.pt = pt;
			ScreenToClient(&tvhti.pt);
			HTREEITEM hItemSel = HitTest(&tvhti);
			CDirectoryItem* pDragTarget;
			if (hItemSel != NULL && (pDragTarget = (CDirectoryItem*)GetItemData(hItemSel)) != NULL){
				//only allow dragging to shared folders
				if (pDragTarget->m_eItemType == SDI_DIRECTORY || pDragTarget->m_eItemType == SDI_NO){
					SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
					SelectDropTarget(pDragTarget->m_htItem);
				}
				else
					SetCursor(AfxGetApp()->LoadStandardCursor(IDC_NO));
			}
			else{
				SetCursor(AfxGetApp()->LoadStandardCursor(IDC_NO));
			}
		}

		CImageList::DragShowNolock(TRUE);
	}

	CTreeCtrl::OnMouseMove(nFlags, point);
}
HTREEITEM CEditTreeCtrl::GetDropTarget(EDropHint & hint) {
	ASSERT(m_pDragData != 0);

	CPoint pt;
	GetCursorPos(&pt);
	ScreenToClient(&pt);

	UINT flags;
	HTREEITEM hDrop = HitTest(pt, &flags);
	hint = GetDropHint(flags);
	m_pDragData->SetDropTarget(hDrop);
	if(hDrop) {
		m_pDragData->DragLeave();	// allow updates

		SelectDropTarget(hDrop);

		if(m_pDragData->CheckExpand(hDrop))
			Expand(hDrop, TVE_EXPAND);

		// Make sure the surrounding items are visible, too
		// This will scroll the tree if necessary.
		HTREEITEM hPrev = GetPrevVisibleItem(hDrop);
		if(hPrev)
			EnsureVisible(hPrev);
		HTREEITEM hNext = GetNextVisibleItem(hDrop);
		if(hNext)
			EnsureVisible(hNext);

		// if the drop target is a descendent of the dragged item, then
		// disallow dropping the item here...
		if(IsAncestor(m_pDragData->GetDragItem(), hDrop) || !CanDropItem(m_pDragData->GetDragItem(), hDrop, hint))
			hint = DROP_NODROP;

		m_pDragData->DragEnter(pt);
	} else if(hint != DROP_NODROP && !CanDropItem(m_pDragData->GetDragItem(), hDrop, hint))
		hint = DROP_NODROP;

	return hDrop;
}
void EXTreeCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
    m_bContextMenuActivated = false; // Hack

    HTREEITEM	hitem;
    UINT		flags;

    if (m_bLDragging)
    {
        POINT pt = point;
        ClientToScreen( &pt );
        CImageList::DragMove(pt);
        if ((hitem = HitTest(point, &flags)) != NULL)
        {
            CImageList::DragShowNolock(FALSE);
            SelectDropTarget(hitem);
            m_hitemDrop = hitem;
            CImageList::DragShowNolock(TRUE);
        }
    }

    EXWaitingTreeCtrl::OnMouseMove(nFlags, point);
}
示例#30
0
// the timer event for expanding nodes in drag n drop procedure
void CNZProjectTreeCtrl::OnTimer(UINT nIDEvent) 
{
	if( nIDEvent == m_nExpandTimer )
	{
		HTREEITEM htiFloat = GetDropHilightItem();
		if( htiFloat && htiFloat == m_htiDrop )
		{
			if( ItemHasChildren( htiFloat ) )
				Expand( htiFloat, TVE_EXPAND );
		}
	}
	else if( nIDEvent == m_nScrollTimer )
	{
		// Doesn't matter that we didn't initialize m_timerticks
		m_timerticks++;

		POINT pt;
		GetCursorPos( &pt );
		RECT rect;
		GetClientRect( &rect );
		ClientToScreen( &rect );

		// NOTE: Screen coordinate is being used because the call
		// to DragEnter had used the Desktop window.
		//CImageList::DragMove(pt);

		HTREEITEM hitem = GetFirstVisibleItem();

		if( pt.y < rect.top + 10 ) // scroll up
		{
			// Scroll slowly if cursor near the treeview control
			int slowscroll = 6 - (rect.top + 10 - pt.y) / 20;
			if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
			{
				CImageList::DragShowNolock(FALSE);
				SendMessage( WM_VSCROLL, SB_LINEUP);
				SelectDropTarget(hitem);
				m_htiDrop = hitem;
				CImageList::DragShowNolock(TRUE);
			}
		}
		else if( pt.y > rect.bottom - 10 ) // scroll down
		{
			// Scroll slowly if cursor near the treeview control
			int slowscroll = 6 - (pt.y - rect.bottom + 10 ) / 20;
			if( 0 == ( m_timerticks % (slowscroll > 0? slowscroll : 1) ) )
			{
				CImageList::DragShowNolock(FALSE);
				SendMessage( WM_VSCROLL, SB_LINEDOWN);
				int nCount = GetVisibleCount();
				for ( int i=0; i<nCount-1; ++i )
					hitem = GetNextVisibleItem(hitem);
				if( hitem )
					SelectDropTarget(hitem);
				m_htiDrop = hitem;
				CImageList::DragShowNolock(TRUE);
			}
		}
	}

	CTreeCtrl::OnTimer(nIDEvent);
}