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@133
|
34 GenericItemList::~GenericItemList(){
|
benoitrigolleau@133
|
35
|
benoitrigolleau@133
|
36 }
|
benoitrigolleau@133
|
37
|
benoitrigolleau@56
|
38 void GenericItemList::setData(QVariant &data){}
|
benoitrigolleau@56
|
39
|
benoitrigolleau@56
|
40
|
benoitrigolleau@56
|
41 void GenericItemList::setIndex(int index){
|
benoitrigolleau@56
|
42 m_index = index;
|
benoitrigolleau@56
|
43 }
|
benoitrigolleau@56
|
44
|
benoitrigolleau@56
|
45 void GenericItemList::configAction(){
|
benoitrigolleau@56
|
46
|
benoitrigolleau@56
|
47 }
|
benoitrigolleau@56
|
48
|
benoitrigolleau@59
|
49 void GenericItemList::setAcceptDrag(bool status){
|
benoitrigolleau@59
|
50 m_acceptDrag = status;
|
benoitrigolleau@59
|
51 }
|
benoitrigolleau@59
|
52
|
benoitrigolleau@59
|
53 /*********************SLOT*********************/
|
benoitrigolleau@56
|
54
|
benoitrigolleau@56
|
55 void GenericItemList::mousePressEvent(QMouseEvent *evt)
|
benoitrigolleau@56
|
56 {
|
benoitrigolleau@56
|
57 if(evt->button()==Qt::LeftButton){
|
benoitrigolleau@56
|
58 emit GenericItemList::selected(m_index);
|
benoitrigolleau@56
|
59 m_clicked=true;
|
benoitrigolleau@56
|
60 m_startPos = evt->pos();
|
benoitrigolleau@56
|
61 }
|
benoitrigolleau@56
|
62 QFrame::mousePressEvent(evt);
|
benoitrigolleau@56
|
63 }
|
benoitrigolleau@56
|
64
|
benoitrigolleau@56
|
65 void GenericItemList::mouseReleaseEvent(QMouseEvent *evt){
|
benoitrigolleau@56
|
66 if(evt->button()==Qt::LeftButton){
|
benoitrigolleau@56
|
67 m_clicked=false;
|
benoitrigolleau@56
|
68 }
|
benoitrigolleau@56
|
69 }
|
benoitrigolleau@56
|
70
|
benoitrigolleau@56
|
71 void GenericItemList::mouseDoubleClickEvent(QMouseEvent *evt){
|
benoitrigolleau@56
|
72 emit GenericItemList::doubleClicked();
|
benoitrigolleau@56
|
73 }
|
benoitrigolleau@56
|
74
|
benoitrigolleau@56
|
75 void GenericItemList::mouseMoveEvent(QMouseEvent *evt)
|
benoitrigolleau@56
|
76 {
|
benoitrigolleau@56
|
77 if(m_clicked){
|
benoitrigolleau@56
|
78 int distance = (evt->pos() - m_startPos).manhattanLength();
|
benoitrigolleau@59
|
79 if(distance>=QApplication::startDragDistance() && m_acceptDrag){
|
benoitrigolleau@56
|
80 startDrag();
|
benoitrigolleau@56
|
81 }
|
benoitrigolleau@56
|
82 }
|
benoitrigolleau@56
|
83 QFrame::mouseMoveEvent(evt);
|
benoitrigolleau@56
|
84 }
|
benoitrigolleau@56
|
85
|
benoitrigolleau@56
|
86 void GenericItemList::dragEnterEvent(QDragEnterEvent *evt)
|
benoitrigolleau@56
|
87 {
|
benoitrigolleau@56
|
88 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@97
|
89 if(source && source!=this && source->parentWidget()==this->parentWidget()){
|
benoitrigolleau@56
|
90 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
91 evt->accept();
|
benoitrigolleau@56
|
92 }
|
benoitrigolleau@56
|
93 }
|
benoitrigolleau@56
|
94
|
benoitrigolleau@56
|
95 void GenericItemList::dragMoveEvent(QDragMoveEvent *evt)
|
benoitrigolleau@56
|
96 {
|
benoitrigolleau@56
|
97 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@97
|
98 if(source && source!=this && source->parentWidget()==this->parentWidget()){
|
benoitrigolleau@56
|
99 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
100 evt->accept();
|
benoitrigolleau@56
|
101 }
|
benoitrigolleau@56
|
102 }
|
benoitrigolleau@56
|
103
|
benoitrigolleau@56
|
104 void GenericItemList::dropEvent(QDropEvent *evt)
|
benoitrigolleau@56
|
105 {
|
benoitrigolleau@56
|
106 std::cerr << "dropEvent";
|
benoitrigolleau@56
|
107 //std::cerr << " "<<evt->pos().x;
|
benoitrigolleau@56
|
108 //std::cerr << " "<<evt->pos().y;
|
benoitrigolleau@56
|
109
|
benoitrigolleau@56
|
110 GenericItemList *source = qobject_cast<GenericItemList *>(evt->source());
|
benoitrigolleau@97
|
111 if (source && source!=this && source->parentWidget()==this->parentWidget()){
|
benoitrigolleau@56
|
112 std::cerr << "value = "<< source->m_index<<" "<<m_index <<std::endl;
|
benoitrigolleau@56
|
113 emit itemDropped(source->m_index,m_index);
|
benoitrigolleau@56
|
114 evt->setDropAction(Qt::MoveAction);
|
benoitrigolleau@56
|
115 evt->accept();
|
benoitrigolleau@56
|
116 }
|
benoitrigolleau@56
|
117 }
|
benoitrigolleau@56
|
118
|
benoitrigolleau@56
|
119 void GenericItemList::startDrag()
|
benoitrigolleau@56
|
120 {
|
benoitrigolleau@56
|
121 std::cerr << "startDrag";
|
benoitrigolleau@56
|
122
|
benoitrigolleau@56
|
123 QMimeData *mineData = new QMimeData;
|
benoitrigolleau@56
|
124 mineData->setText(""+m_index);
|
benoitrigolleau@56
|
125 QDrag *drag = new QDrag(this);
|
benoitrigolleau@56
|
126 drag->setMimeData(mineData);
|
benoitrigolleau@56
|
127 drag->setPixmap(QPixmap(":icons/drag.png"));
|
benoitrigolleau@56
|
128 if(drag->start(Qt::MoveAction) == Qt::MoveAction){
|
benoitrigolleau@56
|
129 std::cerr << "delete ??????";
|
benoitrigolleau@56
|
130 }
|
benoitrigolleau@56
|
131 }
|
benoitrigolleau@56
|
132
|
benoitrigolleau@56
|
133
|
benoitrigolleau@56
|
134 //void GenericItemList::focusOutEvent ( QFocusEvent *evt ){
|
benoitrigolleau@56
|
135 // std::cerr << "focusOutEvent"<<std::endl;
|
benoitrigolleau@56
|
136 //}
|
benoitrigolleau@56
|
137
|
benoitrigolleau@56
|
138 //void GenericItemList::focusInEvent ( QFocusEvent *evt ){
|
benoitrigolleau@56
|
139 // std::cerr << "focusInEvent"<<std::endl;
|
benoitrigolleau@56
|
140 //} |