view widgets/GenericItemList.cpp @ 59:57c85a9d9b4a

(none)
author benoitrigolleau
date Mon, 28 May 2007 08:14:40 +0000
parents 81921835ddf1
children 486e44e12a5d
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*   
	Sound Access
		EASAIER client application.
		Silogic 2007. Benoit Rigolleau.

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License as
	published by the Free Software Foundation; either version 2 of the
	License, or (at your option) any later version.  See the file
	COPYING included with this distribution for more information.
*/


#include "GenericItemList.h"

#include <QMouseEvent>
#include <QDragEnterEvent>
#include <QDragMoveEvent>
#include <QMimeData>
#include <QObject>
#include <iostream>
#include <QPixmap>
#include <QApplication>

GenericItemList::GenericItemList(QWidget *parent): QFrame(parent){
	setAcceptDrops(true);
	m_clicked=false;
	m_acceptDrag = true;
	//this->setFocusPolicy(Qt::ClickFocus);
}

void GenericItemList::setData(QVariant &data){}


void GenericItemList::setIndex(int index){
	m_index = index;
}

void GenericItemList::configAction(){

}

void GenericItemList::setAcceptDrag(bool status){
	m_acceptDrag = status;
}

/*********************SLOT*********************/

void GenericItemList::mousePressEvent(QMouseEvent *evt)
{
	if(evt->button()==Qt::LeftButton){
		emit GenericItemList::selected(m_index);
		m_clicked=true;
		m_startPos = evt->pos();
	}
	QFrame::mousePressEvent(evt);
}

void GenericItemList::mouseReleaseEvent(QMouseEvent *evt){
	if(evt->button()==Qt::LeftButton){
		m_clicked=false;
	}
}

void GenericItemList::mouseDoubleClickEvent(QMouseEvent *evt){
		emit GenericItemList::doubleClicked();
}

void GenericItemList::mouseMoveEvent(QMouseEvent *evt)
{
	if(m_clicked){
		int distance = (evt->pos() - m_startPos).manhattanLength();
		if(distance>=QApplication::startDragDistance() && m_acceptDrag){
			startDrag();
		}
	}
	QFrame::mouseMoveEvent(evt);
}

void GenericItemList::dragEnterEvent(QDragEnterEvent *evt)
{
	GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
	if(source && source!=this){
		evt->setDropAction(Qt::MoveAction);
		evt->accept();
	}
}

void GenericItemList::dragMoveEvent(QDragMoveEvent *evt)
{
	GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
	if(source && source!=this){
		evt->setDropAction(Qt::MoveAction);
		evt->accept();
	}
}

void GenericItemList::dropEvent(QDropEvent *evt)
{
	std::cerr << "dropEvent";
	//std::cerr << " "<<evt->pos().x;
	//std::cerr << " "<<evt->pos().y;

	GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
	if (source && source!=this){
		std::cerr << "value = "<< source->m_index<<"   "<<m_index <<std::endl;
		emit itemDropped(source->m_index,m_index);
		evt->setDropAction(Qt::MoveAction);
		evt->accept();
	}
}

void GenericItemList::startDrag()
{
	std::cerr << "startDrag";

		QMimeData *mineData = new QMimeData;
		mineData->setText(""+m_index);
		QDrag *drag = new QDrag(this);
		drag->setMimeData(mineData);
		drag->setPixmap(QPixmap(":icons/drag.png"));
		if(drag->start(Qt::MoveAction) == Qt::MoveAction){
			std::cerr << "delete ??????";
		}
}


//void GenericItemList::focusOutEvent ( QFocusEvent *evt ){
//	std::cerr << "focusOutEvent"<<std::endl;
//}

//void GenericItemList::focusInEvent ( QFocusEvent *evt ){
//		std::cerr << "focusInEvent"<<std::endl;
//}