Exemplo n.º 1
0
void
TestWidget::ReceiveWithFeedback
	(
	JBroadcaster*	sender,
	Message*		message
	)
{
	JXWindowIcon* windowIcon = NULL;

	if (GetWindow()->GetIconWidget(&windowIcon) &&
		sender == windowIcon && message->Is(JXWindowIcon::kAcceptDrop))
		{
		JXWindowIcon::AcceptDrop* data =
			dynamic_cast<JXWindowIcon::AcceptDrop*>(message);
		assert( data != NULL );
		if (!data->WillAcceptDrop())
			{
			data->ShouldAcceptDrop(
				WillAcceptDrop(data->GetTypeList(), data->GetActionPtr(),
							   data->GetPoint(), data->GetTime(), data->GetSource()));
			}
		}

	else
		{
		JXScrollableWidget::ReceiveWithFeedback(sender, message);
		}
}
Exemplo n.º 2
0
//-------------------------------------------------------------------//
// OnDragOver()																		//
//-------------------------------------------------------------------//
// This function takes a drag over request, determines if we are over
// an item, and passes the request to WillAcceptDrop.
//-------------------------------------------------------------------//
DROPEFFECT OleListCtrl::OnDragOver(
	CWnd* pWnd,
	COleDataObject* pDataObject,
	DWORD dwKeyState,
	CPoint point
) {

	DROPEFFECT deReturn = DROPEFFECT_NONE;
	bool bInsertAfter = false;
	int nUnderCursor = 0;

	UINT nHitFlags;
	if ( pDataObject->IsDataAvailable( ClipFormat ) ) 
	{
		// Get item under cursor.
		nUnderCursor = HitTest( point, &nHitFlags );

		// Adjust based on where point is.
		// If we're in the top half of the item, insert before.
		CRect ItemRect;
		GetItemRect( nUnderCursor, &ItemRect, FALSE );
		ItemRect.DeflateRect( 0, 0, 0, ItemRect.Height()/2 );
		bInsertAfter = ( ItemRect.PtInRect( point ) == FALSE );

		deReturn = WillAcceptDrop(
			nUnderCursor,
			bInsertAfter,
			nHitFlags,
			pDataObject,
			dwKeyState,
			true
		);

	// We don't currently handle text drops.
	// } else if ( pDataObject->IsDataAvailable( CF_TEXT ) ) {

	}

	// TO DO
	// Note that this next section is tailored to lists in 
	// REPORT mode.  Other modes may still need further work.

	// Convert to always insert AFTER nUnderCursor.
	// Note that first we adjust nUnderCursor for drags BELOW 
	// the bottom item.
	if ( nHitFlags & LVHT_NOWHERE )
	{
		nUnderCursor = GetItemCount() - 1;
	}
	else if ( !bInsertAfter ) 
		nUnderCursor--;
	
	// Indicate where the drop would be inserted.
	if ( 
			(
					deReturn == DROPEFFECT_COPY
				|| deReturn == DROPEFFECT_MOVE
				|| deReturn == DROPEFFECT_LINK
			)
		
		&& nUnderCursor > -1
	) 
		DrawInsertionLine( nUnderCursor );
	
	else
	{
		if ( m_nItemAboveLine > -1 )
		{
			// Erase the old line.
			RedrawItems( m_nItemAboveLine, m_nItemAboveLine );
			UpdateWindow();
			m_nItemAboveLine = -1;
		}
	}

	return deReturn;

}