benoitrigolleau@56
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
benoitrigolleau@56
|
2
|
benoitrigolleau@56
|
3 /*
|
benoitrigolleau@56
|
4 Sound Access
|
benoitrigolleau@56
|
5 EASAIER client application.
|
benoitrigolleau@56
|
6 Silogic 2007. Benoit Rigolleau.
|
benoitrigolleau@56
|
7
|
benoitrigolleau@56
|
8 This program is free software; you can redistribute it and/or
|
benoitrigolleau@56
|
9 modify it under the terms of the GNU General Public License as
|
benoitrigolleau@56
|
10 published by the Free Software Foundation; either version 2 of the
|
benoitrigolleau@56
|
11 License, or (at your option) any later version. See the file
|
benoitrigolleau@56
|
12 COPYING included with this distribution for more information.
|
benoitrigolleau@56
|
13 */
|
benoitrigolleau@56
|
14
|
benoitrigolleau@56
|
15
|
benoitrigolleau@56
|
16 #include "GenericItemList.h"
|
benoitrigolleau@56
|
17
|
benoitrigolleau@56
|
18 #include <QMouseEvent>
|
benoitrigolleau@56
|
19 #include <QDragEnterEvent>
|
benoitrigolleau@56
|
20 #include <QDragMoveEvent>
|
benoitrigolleau@56
|
21 #include <QMimeData>
|
benoitrigolleau@56
|
22 #include <QObject>
|
benoitrigolleau@56
|
23 #include <iostream>
|
benoitrigolleau@56
|
24 #include <QPixmap>
|
benoitrigolleau@56
|
25 #include <QApplication>
|
benoitrigolleau@56
|
26
|
benoitrigolleau@56
|
27 GenericItemList::GenericItemList(QWidget *parent): QFrame(parent){
|
benoitrigolleau@56
|
28 setAcceptDrops(true);
|
benoitrigolleau@56
|
29 m_clicked=false;
|
benoitrigolleau@59
|
30 m_acceptDrag = true;
|
benoitrigolleau@56
|
31 //this->setFocusPolicy(Qt::ClickFocus);
|
benoitrigolleau@56
|
32 }
|
benoitrigolleau@56
|
33
|
benoitrigolleau@56
|
34 void GenericItemList::setData(QVariant &data){}
|
benoitrigolleau@56
|
35
|
benoitrigolleau@56
|
36
|
benoitrigolleau@56
|
37 void GenericItemList::setIndex(int index){
|
benoitrigolleau@56
|
38 m_index = index;
|
benoitrigolleau@56
|
39 }
|
benoitrigolleau@56
|
40
|
benoitrigolleau@56
|
41 void GenericItemList::configAction(){
|
benoitrigolleau@56
|
42
|
benoitrigolleau@56
|
43 }
|
benoitrigolleau@56
|
44
|
benoitrigolleau@59
|
45 void GenericItemList::setAcceptDrag(bool status){
|
benoitrigolleau@59
|
46 m_acceptDrag = status;
|
benoitrigolleau@59
|
47 }
|
benoitrigolleau@59
|
48
|
benoitrigolleau@59
|
49 /*********************SLOT*********************/
|
benoitrigolleau@56
|
50
|
benoitrigolleau@56
|
51 void GenericItemList::mousePressEvent(QMouseEvent *evt)
|
benoitrigolleau@56
|
52 {
|
benoitrigolleau@56
|
53 if(evt->button()==Qt::LeftButton){
|
benoitrigolleau@56
|
54 emit GenericItemList::selected(m_index);
|
benoitrigolleau@56
|
55 m_clicked=true;
|
benoitrigolleau@56
|
56 m_startPos = evt->pos();
|
benoitrigolleau@56
|
57 }
|
benoitrigolleau@56
|
58 QFrame::mousePressEvent(evt);
|
benoitrigolleau@56
|
59 }
|
benoitrigolleau@56
|
60
|
benoitrigolleau@56
|
61 void GenericItemList::mouseReleaseEvent(QMouseEvent *evt){
|
benoitrigolleau@56
|
62 if(evt->button()==Qt::LeftButton){
|
benoitrigolleau@56
|
63 m_clicked=false;
|
benoitrigolleau@56
|
64 }
|
benoitrigolleau@56
|
65 }
|
benoitrigolleau@56
|
66
|
benoitrigolleau@56
|
67 void GenericItemList::mouseDoubleClickEvent(QMouseEvent *evt){
|
benoitrigolleau@56
|
68 emit GenericItemList::doubleClicked();
|
benoitrigolleau@56
|
69 }
|
benoitrigolleau@56
|
70
|
benoitrigolleau@56
|
71 void GenericItemList::mouseMoveEvent(QMouseEvent *evt)
|
benoitrigolleau@56
|
72 {
|
benoitrigolleau@56
|
73 if(m_clicked){
|
benoitrigolleau@56
|
74 int distance = (evt->pos() - m_startPos).manhattanLength();
|
benoitrigolleau@59
|
75 if(distance>=QApplication::startDragDistance() && m_acceptDrag){
|
benoitrigolleau@56
|
76 startDrag();
|
benoitrigolleau@56
|
77 }
|
benoitrigolleau@56
|
78 }
|
benoitrigolleau@56
|
79 QFrame::mouseMoveEvent(evt);
|
benoitrigolleau@56
|
80 }
|
benoitrigolleau@56
|
81
|
benoitrigolleau@56
|
82 void GenericItemList::dragEnterEvent(QDragEnterEvent *evt)
|
benoitrigolleau@56
|
83 {
|
benoitrigolleau@56
|
84 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@56
|
85 if(source && source!=this){
|
benoitrigolleau@56
|
86 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
87 evt->accept();
|
benoitrigolleau@56
|
88 }
|
benoitrigolleau@56
|
89 }
|
benoitrigolleau@56
|
90
|
benoitrigolleau@56
|
91 void GenericItemList::dragMoveEvent(QDragMoveEvent *evt)
|
benoitrigolleau@56
|
92 {
|
benoitrigolleau@56
|
93 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@56
|
94 if(source && source!=this){
|
benoitrigolleau@56
|
95 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
96 evt->accept();
|
benoitrigolleau@56
|
97 }
|
benoitrigolleau@56
|
98 }
|
benoitrigolleau@56
|
99
|
benoitrigolleau@56
|
100 void GenericItemList::dropEvent(QDropEvent *evt)
|
benoitrigolleau@56
|
101 {
|
benoitrigolleau@56
|
102 std::cerr << "dropEvent";
|
benoitrigolleau@56
|
103 //std::cerr << " "<<evt->pos().x;
|
benoitrigolleau@56
|
104 //std::cerr << " "<<evt->pos().y;
|
benoitrigolleau@56
|
105
|
benoitrigolleau@56
|
106 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@56
|
107 if (source && source!=this){
|
benoitrigolleau@56
|
108 std::cerr << "value = "<< source->m_index<<" "<<m_index <<std::endl;
|
benoitrigolleau@56
|
109 emit itemDropped(source->m_index,m_index);
|
benoitrigolleau@56
|
110 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
111 evt->accept();
|
benoitrigolleau@56
|
112 }
|
benoitrigolleau@56
|
113 }
|
benoitrigolleau@56
|
114
|
benoitrigolleau@56
|
115 void GenericItemList::startDrag()
|
benoitrigolleau@56
|
116 {
|
benoitrigolleau@56
|
117 std::cerr << "startDrag";
|
benoitrigolleau@56
|
118
|
benoitrigolleau@56
|
119 QMimeData *mineData = new QMimeData;
|
benoitrigolleau@56
|
120 mineData->setText(""+m_index);
|
benoitrigolleau@56
|
121 QDrag *drag = new QDrag(this);
|
benoitrigolleau@56
|
122 drag->setMimeData(mineData);
|
benoitrigolleau@56
|
123 drag->setPixmap(QPixmap(":icons/drag.png"));
|
benoitrigolleau@56
|
124 if(drag->start(Qt::MoveAction) == Qt::MoveAction){
|
benoitrigolleau@56
|
125 std::cerr << "delete ??????";
|
benoitrigolleau@56
|
126 }
|
benoitrigolleau@56
|
127 }
|
benoitrigolleau@56
|
128
|
benoitrigolleau@56
|
129
|
benoitrigolleau@56
|
130 //void GenericItemList::focusOutEvent ( QFocusEvent *evt ){
|
benoitrigolleau@56
|
131 // std::cerr << "focusOutEvent"<<std::endl;
|
benoitrigolleau@56
|
132 //}
|
benoitrigolleau@56
|
133
|
benoitrigolleau@56
|
134 //void GenericItemList::focusInEvent ( QFocusEvent *evt ){
|
benoitrigolleau@56
|
135 // std::cerr << "focusInEvent"<<std::endl;
|
benoitrigolleau@56
|
136 //} |