Ejemplo n.º 1
0
void ChannelsJoinDialogTreeWidget::mouseDoubleClickEvent(QMouseEvent * e)
{
	QTreeWidgetItem * it = itemAt(e->pos());
	ChannelsJoinDialog * pDialog = (ChannelsJoinDialog *)parentWidget();
	if(!it || !pDialog || !(e->button() & Qt::LeftButton))
		return;

	if(it->type() == ChannelsJoinDialog::HeaderItem)
		return;

	setCurrentItem(it);
	pDialog->itemSelected();
	pDialog->joinClicked();
}
Ejemplo n.º 2
0
void lmcUserTreeWidget::contextMenuEvent(QContextMenuEvent* event) {
    QTreeWidget::contextMenuEvent(event);

    QTreeWidgetItem* item = itemAt(event->pos());
    QPoint pos = event->globalPos();
    if(item && event->reason() != QContextMenuEvent::Mouse) {
        QRect itemRect = visualItemRect(item);
        pos = itemRect.bottomLeft();
        pos.ry() += itemRect.height();
        pos = mapToGlobal(pos);
    }

    emit itemContextMenu(item, pos);
}
Ejemplo n.º 3
0
void Tree::dropEvent(QDropEvent *event)
{
    mainWindow->prepareNewAction();

    if (event->mimeData()->hasUrls() && event->source() == NULL)
    {
        int numSf2 = -1;
        int commandCopy = 0;

        this->clearSelection();
        for (int i = 0; i < event->mimeData()->urls().count(); i++)
        {
            QString path = QUrl::fromPercentEncoding(event->mimeData()->urls().at(i).toEncoded());
            if (!path.isEmpty())
            {
                QString extension = path.split(".").last().toLower();
                if (extension == "sfz" || extension == "sf2" || extension == "sfark")
                    mainWindow->dragAndDrop(path, getItemID(itemAt(event->pos())), &numSf2);
                else if (extension == "wav")
                    mainWindow->dragAndDrop(path, getItemID(itemAt(event->pos())), &commandCopy);
            }
        }
        this->mainWindow->updateActions();
    }
    else
    {
        // Destination
        EltID idDest = this->getItemID(this->itemAt(event->pos()));

        // Constitution de la liste des éléments à copier / lier
        QList<EltID> liste = this->getAllIDs();

        mainWindow->dragAndDrop(idDest, liste);
    }

    mainWindow->updateDo();
}
Ejemplo n.º 4
0
void	My_Layers::mousePressEvent(QMouseEvent *e)
	{
	QPoint point = e->pos();
	//Verifico che point sia dentro una casella della tabella
        QRect visible_area = visualItemRect(item(rowCount()-1,0));
        if (point.y() > visible_area.bottom())
		return;
	if (e->button() == Qt::LeftButton)
		{
			int col = columnAt(point.x());
			
			switch(tipo_tabella)
			{
			case 'V':
				switch(col)
				{
				case 0:
                                        break;
                                case 1:
                                        toogle_select(row(itemAt(point)));
                                        break;
                                case 2:
					toogle_show(row(itemAt(point)));
					break;
				}
				break;
			case 'P':
                                if(col == 1)
                                        toogle_print(row(itemAt(point)));
				break;
                        case 'G':
                                if(col == 1)
                                        toogle_gerber(row(itemAt(point)));
                                break;
                        }
		}
        }
Ejemplo n.º 5
0
void PopupDropperView::dragMoveEvent( QDragMoveEvent *event )
{
    //qDebug() << "PopupDropperView::dragMoveEvent";
    QGraphicsItem* item = itemAt( event->pos() );

    #define svgitem(x) dynamic_cast<QGraphicsSvgItem*>(x)
    #define textitem(x) dynamic_cast<QGraphicsTextItem*>(x)
    #define borderitem(x) dynamic_cast<QGraphicsRectItem*>(x)

    if( !svgitem(item) && !textitem(item) && !borderitem(item) )
    {
        if( d->lastItem )
            d->lastItem->hoverLeft();
        d->lastItem = 0;
    }
    else if( svgitem(item) &&
            d->lastItem != dynamic_cast<PopupDropperItem*>( svgitem(item)->parentItem() ) )
    {
        //qDebug() << "svg item";
        if( d->lastItem )
            d->lastItem->hoverLeft();
        static_cast<PopupDropperItem*>( svgitem(item)->parentItem() )->hoverEntered();
        d->lastItem = static_cast<PopupDropperItem*>( svgitem(item)->parentItem() );
    }
    else if( textitem(item) && 
             d->lastItem != dynamic_cast<PopupDropperItem*>( textitem(item)->parentItem() ) )
    {
        //qDebug() << "text item";
        if( d->lastItem )
            d->lastItem->hoverLeft();
        static_cast<PopupDropperItem*>( textitem(item)->parentItem() )->hoverEntered();
        d->lastItem = static_cast<PopupDropperItem*>( textitem(item)->parentItem() );
    }
    else if( borderitem(item) && 
             d->lastItem != dynamic_cast<PopupDropperItem*>( borderitem(item)->parentItem() ) )
    {
        //qDebug() << "border item";
        if( d->lastItem )
            d->lastItem->hoverLeft();
        static_cast<PopupDropperItem*>( borderitem(item)->parentItem() )->hoverEntered();
        d->lastItem = static_cast<PopupDropperItem*>( borderitem(item)->parentItem() );
    }
    
    #undef borderitem
    #undef textitem
    #undef pditem

    event->accept();
}
void TeQtViewsListView::contentsDragMoveEvent(QDragMoveEvent *e)
{
	if(pressedThemeItem_)
		pressedThemeItem_->setOpen(themeOpen_);

	if(e->source() != viewport())
	{
		e->ignore();
		e->acceptAction(false);
		return;
	}

    QPoint p = contentsToViewport(((QDragMoveEvent*)e)->pos());
    TeQtCheckListItem *item = (TeQtCheckListItem*)itemAt(p);
    if (item)
	{
		if (p.x() < treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0)) + itemMargin())
		{
			e->ignore();
			e->acceptAction(false);
		}
		else
		{
			if(item->getType() == TeQtCheckListItem::THEME || item->getType() == TeQtCheckListItem::VIEW)
			{
				e->accept();
				e->acceptAction();
			}
			else
			{
				e->ignore();
				e->acceptAction(false);
				if(currentThemeItem_)
				{
					unselectAllItems();
					currentThemeItem_->parent()->setSelected(true);
					currentThemeItem_->parent()->repaint();
					currentThemeItem_->setSelected(true);
					repaint();
				}
			}
		}
    }
	else
	{
		e->ignore();
		e->acceptAction(false);
	}
}
bool HierarchyTreeControl::GetMoveItemID(QDropEvent *event, HierarchyTreeNode::HIERARCHYTREENODEID &insertInTo, HierarchyTreeNode::HIERARCHYTREENODEID &insertAfter)
{
	DropIndicatorPosition position = dropIndicatorPosition();
	
	QTreeWidgetItem* item = itemAt(event->pos());
	if (!item)
		return false;

	if (item == currentItem())
		return false;

	insertInTo = HierarchyTreeNode::HIERARCHYTREENODEID_EMPTY;
	
	switch (position)
	{
		case OnViewport:
		{
			return false;
		}break;
		case OnItem:
		{
			QVariant data = item->data(ITEM_ID);
			insertInTo = data.toInt();
			insertAfter = HierarchyTreeNode::HIERARCHYTREENODEID_EMPTY;
		} break;
		case AboveItem:
		{
			QTreeWidgetItem* parent = item->parent();
			if (parent)
				insertInTo = parent->data(ITEM_ID).toInt();
			QTreeWidgetItem* above = itemAbove(item);
			if (!above)
				return false;
			insertAfter = above->data(ITEM_ID).toInt();
		} break;
		case BelowItem:
		{
			QTreeWidgetItem* parent = item->parent();
			if (parent)
				insertInTo = parent->data(ITEM_ID).toInt();
			insertAfter = item->data(ITEM_ID).toInt();
		}break;
	}
	
	if (currentItem() && currentItem()->data(ITEM_ID) == insertAfter)
		return false;

	return true;
}
TEST(qpsContainerModel, qObjectPtrListReferenceItemAt)
{
    using QObjects = qps::ContainerModel< QVector, QObject* >;
    QObjects objects;

    QObject* o1{new QObject()};
    QObject* o2{new QObject()};

    objects.append( o1 );
    objects.append( new QObject() );
    objects.append( o2 );

    auto listRef = objects.getListReference();
    ASSERT_TRUE( listRef != nullptr );
    ASSERT_TRUE( ( listRef->itemAt(0) != QVariant{} ) );
    EXPECT_TRUE( ( qvariant_cast<QObject*>( listRef->itemAt(0) ) == o1 ) );
    EXPECT_TRUE( ( qvariant_cast<QObject*>( listRef->itemAt(2) ) == o2 ) );
    ASSERT_TRUE( ( listRef->itemAt(3) == QVariant{} ) );

    ASSERT_TRUE( ( listRef->at(0) != nullptr ) );
    EXPECT_TRUE( ( listRef->at(0) == o1 ) );
    EXPECT_TRUE( ( listRef->at(2) == o2 ) );
    ASSERT_TRUE( ( listRef->at(3) == nullptr ) );
}
Ejemplo n.º 9
0
void KasBar::mouseReleaseEvent(QMouseEvent *ev)
{
   if ( !inDrag ) {
       KasItem *i = itemAt( ev->pos() );
       if ( i )
	   i->mouseReleaseEvent( ev );
   }
   else if ( detached ) {
       setDetachedPosition( pos() );
       emit configChanged();
   }

   pressPos = QPoint();
   inDrag = false;
}
Ejemplo n.º 10
0
void FeedListWidget::dragMoveEvent(QDragMoveEvent *event)
{
    QTreeWidget::dragMoveEvent(event);

    QTreeWidgetItem *item = itemAt(event->pos());
    // Prohibit dropping onto global unread counter
    if (item == m_unreadStickyItem)
        event->ignore();
    // Prohibit dragging of global unread counter
    else if (selectedItems().contains(m_unreadStickyItem))
        event->ignore();
    // Prohibit dropping onto feeds
    else if (item && isFeed(item))
        event->ignore();
}
Ejemplo n.º 11
0
//-----------------------------------------------
void KFileDnDDetailView::contentsDragEnterEvent( QDragEnterEvent *e ) {

    kdDebug (9020) << "KFileDnDDetailView::contentsDragEnterEvent" << endl;

	if ( ! acceptDrag( e ) ) {
		e->accept( false );
		return;
	}
	e->acceptAction();
	QListViewItem *i = itemAt( contentsToViewport( e->pos() ) );
	if ( i && m_useAutoOpenTimer ) {
		m_dropItem = i;
		m_autoOpenTimer.start( m_autoOpenTime );
	}
}
bool KviTalListWidget::event(QEvent * e)
{

	if (e->type() == QEvent::ToolTip)
	{
	    QHelpEvent *helpEvent = static_cast<QHelpEvent *>(e);
		const QPoint &p=helpEvent->pos();
		QListWidgetItem *item=itemAt(p);
		if (item)
		{
			emit tipRequest(item,p);
		}
	}
	return QListWidget::event(e);
}
Ejemplo n.º 13
0
bool BasketTreeListView::event(QEvent *e)
{
    if (e->type() == QEvent::ToolTip) {
        QHelpEvent *he = static_cast<QHelpEvent *>(e);
        QTreeWidgetItem *item = itemAt(he->pos());
        BasketListViewItem* bitem = dynamic_cast<BasketListViewItem*>(item);
        if (bitem && bitem->isAbbreviated()) {
            QRect rect = visualItemRect(bitem);
            QToolTip::showText(rect.topLeft(), bitem->basket()->basketName(),
                               viewport(), rect);
        }
        return true;
    }
    return QTreeWidget::event(e);
}
Ejemplo n.º 14
0
void ListView::contentsMousePressEvent(QMouseEvent *e)
{
    if (e->button() == QObject::LeftButton){
        m_pressedItem = itemAt(contentsToViewport(e->pos()));
        if (m_pressedItem && !m_pressedItem->isSelectable())
            m_pressedItem = NULL;
        if (m_pressedItem)
            repaintItem(m_pressedItem);
#if QT_VERSION < 300
        m_mousePressPos = e->pos();
        QTimer::singleShot(QApplication::startDragTime(), this, SLOT(startDrag()));
#endif
    }
    QListView::contentsMousePressEvent(e);
}
Ejemplo n.º 15
0
/*!
    Destroys the QGraphicsGridLayout object.
*/
QGraphicsGridLayout::~QGraphicsGridLayout()
{
    for (int i = count() - 1; i >= 0; --i) {
        QGraphicsLayoutItem *item = itemAt(i);
        // The following lines can be removed, but this removes the item
        // from the layout more efficiently than the implementation of
        // ~QGraphicsLayoutItem.
        removeAt(i);
        if (item) {
            item->setParentLayoutItem(0);
            if (item->ownedByLayout())
                delete item;
        }
    }
}
Ejemplo n.º 16
0
void CWizCategoryBaseView::startDrag(Qt::DropActions supportedActions)
{
    Q_UNUSED(supportedActions);

    QPoint pt = mapFromGlobal(QCursor::pos());

    if (CWizCategoryViewTagItem* item = dynamic_cast<CWizCategoryViewTagItem*>(itemAt(pt)))
    {
        QDrag* drag = new QDrag(this);
        QMimeData* mimeData = new QMimeData();
        mimeData->setData(WIZNOTE_MIMEFORMAT_TAGS, item->tag().strGUID.toUtf8());
        drag->setMimeData(mimeData);
        drag->exec(Qt::CopyAction);
    }
}
Ejemplo n.º 17
0
bool KWalletEntryList::acceptDrag(QDropEvent* e) const {
	QListViewItem *i = itemAt(contentsToViewport(e->pos()));
	if (i) {
		if (e->provides("application/x-kwallet-entry") ||
				e->provides("text/uri-list")) {
			return true;
		}
	}
	if ((e->provides("application/x-kwallet-folder") &&
			e->source() != viewport()) || 
			e->provides("text/uri-list")) {
		return true;
	}
	return false;
}
Ejemplo n.º 18
0
void DirectoryView::contentsDragEnterEvent( QDragEnterEvent *e )
{
    if ( !QUriDrag::canDecode(e) ) {
	e->ignore();
	return;
    }

    oldCurrent = currentItem();

    QListViewItem *i = itemAt( contentsToViewport(e->pos()) );
    if ( i ) {
	dropItem = i;
	autoopen_timer->start( autoopenTime );
    }
}
Ejemplo n.º 19
0
void DirectoryView::contentsMousePressEvent( QMouseEvent* e )
{
    QListView::contentsMousePressEvent(e);
    QPoint p( contentsToViewport( e->pos() ) );
    QListViewItem *i = itemAt( p );
    if ( i ) {
        // if the user clicked into the root decoration of the item, don't try to start a drag!
        if ( p.x() > header()->cellPos( header()->mapToActual( 0 ) ) +
             treeStepSize() * ( i->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() ||
             p.x() < header()->cellPos( header()->mapToActual( 0 ) ) ) {
            presspos = e->pos();
            mousePressed = TRUE;
        }
    }
}
Ejemplo n.º 20
0
void ListView::contentsMouseReleaseEvent(QMouseEvent *e)
{
#if QT_VERSION < 300
    m_mousePressPos = QPoint(0, 0);
#endif
    QListView::contentsMouseReleaseEvent(e);
    if (m_pressedItem){
        QListViewItem *item = m_pressedItem;
        m_pressedItem = NULL;
        item->repaint();
        QListViewItem *citem = itemAt(contentsToViewport(e->pos()));
        if (item == citem)
            emit clickItem(item);
    }
}
Ejemplo n.º 21
0
void FileTransferWidget::mousePressEvent (QMouseEvent *e)
{
	if (e->button() == Qt::RightButton)
	{
		// we have 3 items: the one on the first column is the real one (has a transfer() member)
		// others are just fakes
		QTableWidgetItem *clicked = itemAt(e->pos());
		if(clicked)
		{
			FileTransferItem *i = (FileTransferItem*) item(clicked->row(),0);
			if (i) emit rightButtonPressed(i, QCursor::pos());
		}
	}
	QTableWidget::mousePressEvent(e);
}
Ejemplo n.º 22
0
void CXmlPropertyList::viewportDragMoveEvent ( QDragMoveEvent *e )
{
    PropertyListItem *i = (PropertyListItem*) itemAt( e->pos() );
    if( !i ) {
	e->ignore();
	return;
    }

    if ( ::qt_cast<PropertyColorItem*>(i) && QColorDrag::canDecode( e ) )
	e->accept();
    else if ( ::qt_cast<PropertyPixmapItem*>(i) && QImageDrag::canDecode( e ) )
	e->accept();
    else
	e->ignore();
}
Ejemplo n.º 23
0
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
void FilterLibraryTreeWidget::onCustomContextMenuRequested(const QPoint& pos)
{
    QTreeWidgetItem* item = itemAt(pos);

    if (item)
    {
        // Note: We must map the point to global from the viewport to
        // account for the header.
        showContextMenu( item, viewport()->mapToGlobal(pos) );
    }
    else
    {
        showContextMenu( NULL, mapToGlobal(pos) );
    }
}
Ejemplo n.º 24
0
int QStackedLayoutHFW::heightForWidth(int width) const
{
    const int n = count();

    int hfw = 0;
    for (int i = 0; i < n; ++i) {
        if (QLayoutItem *item = itemAt(i)) {
            if (QWidget *w = item->widget())
                hfw = qMax(hfw, w->heightForWidth(width));
        }
    }

    hfw = qMax(hfw, minimumSize().height());
    return hfw;
}
Ejemplo n.º 25
0
void neuralScene::mouseMoveEvent( QGraphicsSceneMouseEvent * event ) {
	if (mode == STANDARD) {
		QGraphicsScene::mouseMoveEvent(event);
	}
	if (mode == SYNAPSECREATION) {
        QGraphicsItem *item = itemAt(event->scenePos(), QTransform());
	    neuronItem* neuron = qgraphicsitem_cast<neuronItem*>(item);
        if (item!=0 and neuron==0) neuron = qgraphicsitem_cast<neuronItem*>(item->parentItem());
		if (neuron==0) {
			tempSynapse->setTempPos(event->scenePos());
		} else {
			tempSynapse->setTempPos(neuron->pos());
		}
	}
}
Ejemplo n.º 26
0
void FileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * me )
{
	if( m_mousePressed == true &&
		( m_pressPos - me->pos() ).manhattanLength() >
					QApplication::startDragDistance() )
	{
		// make sure any playback is stopped
		mouseReleaseEvent( NULL );

		FileItem * f = dynamic_cast<FileItem *>( itemAt( m_pressPos ) );
		if( f != NULL )
		{
			switch( f->type() )
			{
				case FileItem::PresetFile:
					new StringPairDrag( f->handling() == FileItem::LoadAsPreset ?
							"presetfile" : "pluginpresetfile",
							f->fullName(),
							embed::getIconPixmap( "preset_file" ), this );
					break;

				case FileItem::SampleFile:
					new StringPairDrag( "samplefile", f->fullName(),
							embed::getIconPixmap( "sample_file" ), this );
					break;
				case FileItem::SoundFontFile:
					new StringPairDrag( "soundfontfile", f->fullName(),
							embed::getIconPixmap( "soundfont_file" ), this );
					break;
				case FileItem::VstPluginFile:
					new StringPairDrag( "vstpluginfile", f->fullName(),
							embed::getIconPixmap( "vst_plugin_file" ), this );
					break;
				case FileItem::MidiFile:
					new StringPairDrag( "importedproject", f->fullName(),
							embed::getIconPixmap( "midi_file" ), this );
					break;
				case FileItem::ProjectFile:
					new StringPairDrag( "projectfile", f->fullName(),
							embed::getIconPixmap( "project_file" ), this );
					break;

				default:
					break;
			}
		}
	}
}
void EntitiesTreeWidget::mousePressEvent(QMouseEvent *event)
{
    QTreeWidgetItem *selectedItem = itemAt(event->pos());

    // If the selected Item exists
//    if (selectedItem && event->button() == Qt::MouseButton::LeftButton){

//        if(!selectedItem->data(0,Qt::UserRole).isValid()){
//            QTreeWidget::mousePressEvent(event);
//            return;
//        }
//        qlonglong pointer = selectedItem->data(0,Qt::UserRole + 1).toLongLong();

//        QMimeData *mimeData = new QMimeData;
//        QByteArray strPointer = QString("%1").arg(pointer).toLatin1();
//        mimeData->setData("pointer",strPointer);

//        if(selectedItem->data(0,Qt::UserRole).toInt() == (int)yarp::manager::MODULE){
//            mimeData->setText("module");
//        }
//        if(selectedItem->data(0,Qt::UserRole).toInt() == (int)yarp::manager::APPLICATION){
//            mimeData->setText("application");
//        }

//        QFontMetrics fontMetric(font());
//        int textWidth = fontMetric.width(selectedItem->text(0));

//        QDrag *drag = new QDrag(this);
//        drag->setMimeData(mimeData);
//        QPixmap pix(textWidth + 40,18);
//        QPainter painter(&pix);
//        QPen pen(QBrush(QColor((Qt::blue))),1);
//        painter.setPen(pen);
//        painter.fillRect(0,0,textWidth + 40,18,QBrush(QColor((Qt::lightGray))));
//        painter.drawRect(0,0,textWidth + 39,17);
//        painter.drawImage(QRectF(1,1,16,16),QImage(":/module22.svg"));
//        painter.drawText(QRectF(16,1,textWidth + 20,16),Qt::AlignCenter,selectedItem->text(0));
//        //pix.fill(QColor(Qt::red));
//        drag->setPixmap(pix);


//        drag->exec(Qt::CopyAction);


//    }

    QTreeWidget::mousePressEvent(event);
}
Ejemplo n.º 28
0
void FunctionsTreeWidget::dropEvent(QDropEvent *event)
{
    QTreeWidgetItem *dropItem = itemAt(event->pos());

    if (m_draggedItems.count() == 0 || dropItem == NULL)
        return;

    QVariant var = dropItem->data(COL_NAME, Qt::UserRole + 1);
    if (var.isValid() == false)
        return;

    int dropType = var.toInt();
    //QString folderName = dropItem->text(COL_PATH);

    foreach (QTreeWidgetItem *item, m_draggedItems)
    {
        quint32 dragFID = item->data(COL_NAME, Qt::UserRole).toUInt();
        Function *dragFunc = m_doc->function(dragFID);
        if (dragFunc != NULL && dragFunc->type() == dropType)
        {
            QTreeWidget::dropEvent(event);
            quint32 fid = item->data(COL_NAME, Qt::UserRole).toUInt();
            Function *func = m_doc->function(fid);
            if (func != NULL)
                func->setPath(dropItem->text(COL_PATH));
            // if item is a Scene with Sequence children attached,
            // set the new path of children too
            if (item->childCount() > 0)
            {
                for (int i = 0; i < item->childCount(); i++)
                {
                    QTreeWidgetItem *child = item->child(i);
                    quint32 childFID = child->data(COL_NAME, Qt::UserRole).toUInt();
                    Function *childFunc = m_doc->function(childFID);
                    if (childFunc != NULL)
                        childFunc->setPath(dropItem->text(COL_PATH));
                }
            }
        }
        else
        {
            // m_draggedItem is a folder
            int dragType = item->data(COL_NAME, Qt::UserRole + 1).toInt();
            if (dragType == dropType)
                QTreeWidget::dropEvent(event);
            slotItemChanged(item);
        }
    }
Ejemplo n.º 29
0
void DirectoryView::contentsDragMoveEvent(QDragMoveEvent *e)
{
	if (!QUriDrag::canDecode(e))
	{
		e->ignore();
		return;
	}

	QPoint vp = contentsToViewport((reinterpret_cast<QDragMoveEvent*>(e))->pos());
	QListViewItem *i = itemAt(vp);
	if (i)
	{
		setSelected(i, TRUE);
		e->accept();

		if (i != dropItem)
		{
			autoopen_timer->stop();
			dropItem = i;
			autoopen_timer->start(autoopenTime);
        }
        
		switch (e->action())
		{
		case QDropEvent::Copy:
			break;

		case QDropEvent::Move:
			e->acceptAction();
			break;

		case QDropEvent::Link:
			e->acceptAction();
			break;

		default:
			break;
		}
		
	}

	else
	{
		e->ignore();
		autoopen_timer->stop();
		dropItem = 0;
	}
}
void HierarchyTreeControl::HandleDragMoveControlMimeData(QDragMoveEvent *event, const ControlMimeData* /*mimeData*/)
{
    DropIndicatorPosition position = dropIndicatorPosition();
    Logger::Warning("POSITION TYPE^ %i", position);

	// Where we are in tree?
	QTreeWidgetItem* item = itemAt(event->pos());
	if (!item)
	{
		HierarchyTreeController::Instance()->ResetSelectedControl();
		return;
	}

	HierarchyTreeNode::HIERARCHYTREENODEID insertInto = HierarchyTreeNode::HIERARCHYTREENODEID_EMPTY;
	QVariant data = item->data(ITEM_ID);
	insertInto = data.toInt();
	
	// Handle specific types of nodes.
	HierarchyTreeNode* nodeToInsertControlTo = HierarchyTreeController::Instance()->GetTree().GetNode(insertInto);
	if (dynamic_cast<HierarchyTreePlatformNode*>(nodeToInsertControlTo) ||
		dynamic_cast<HierarchyTreeAggregatorControlNode*>(nodeToInsertControlTo))
	{
		// Don't allow to drop the controls directly to Platform or Aggregator.
		HierarchyTreeController::Instance()->ResetSelectedControl();
		return;
	}
	
	// Expand the items while dragging control on them.
	if (!item->isExpanded())
	{
		item->setExpanded(true);
	}

	scrollTo(indexAt(event->pos()));

	HierarchyTreeControlNode* controlNode = dynamic_cast<HierarchyTreeControlNode*>(nodeToInsertControlTo);
	if (controlNode)
	{
		// Don't reselect the same control, if it is already selected.
		if (!HierarchyTreeController::Instance()->IsControlSelected(controlNode))
		{
			HierarchyTreeController::Instance()->ResetSelectedControl();
			HierarchyTreeController::Instance()->SelectControl(controlNode);
		}
	}

	event->accept();
}