-
Notifications
You must be signed in to change notification settings - Fork 1
/
field.cpp
230 lines (222 loc) · 7.67 KB
/
field.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include "field.h"
#include <QMenu>
#include <QAction>
#include <QGraphicsSceneMouseEvent>
#include <QGraphicsLineItem>
#include <QDebug>
#include <QTextDocument>
Field::Field(dialogRelation* mum ,bool isFree,QGraphicsScene* pScene,QString pName,QGraphicsItem* pParent)
:QGraphicsTextItem(pName,pParent)
{
qDebug()<<"constructeur de field";
maman=mum;
nomInitial=pName;
//affichage de l'oeil fermé: le champ n'est pas affiché
affiche=false;
oeil=new QGraphicsPixmapItem(QPixmap(":/mini-eye.xpm"),this);
oeil->setPos(-20,5);
oeil->setVisible(affiche);//false puisque non affiché
freeField=isFree;
//affichage du tri
tri=noSort;//pas de tri sur le champ
iconSort=new QGraphicsPixmapItem(QPixmap(),this);
iconSort->setPos(-8,5);
numeroOrdreDansLeSelect=-1;
//pas de condition sur le champ pour l'instant genre ='Dupond' ou <123
cond=NULL;
setAcceptDrops(true);
connect(document(),SIGNAL(contentsChanged()),this,SIGNAL(jAiChange()));
connect(this, SIGNAL(jAiChange()),maman , SLOT(miseAJourResultat()));
}
Field::~Field()
{
qDebug()<<"field::~field()";
if(cond!=NULL)
{
delete cond;
delete trait;
}
if(oeil!=NULL) delete oeil;
if(iconSort !=NULL) delete iconSort;
//le champ s'enlève du vecteur ou il est stocké
if(laTable!=NULL)
{
laTable->vecteurChamps.remove(laTable->vecteurChamps.indexOf(this),1);
}
else
{//champ en dehors d'une table
maman->vectChampsLibres.remove(maman->vectChampsLibres.indexOf(this),1);
}
}
void Field::contextMenuEvent(QGraphicsSceneMouseEvent *event)
{
//ce qui se passe lorsque le menu contextuel du champ est appelé
qDebug()<<"void field::contextMenuEvent(QGraphicsSceneMouseEvent *event)";
//création du menu cntextuel du champ
QMenu menu(QObject::tr("Field Menu"));
//titre du menu contextuel
QAction* titre=new QAction(menu.title(),this);
titre->setDisabled(true);
menu.addAction(titre);
titre->setFont(QFont("verdana",9,3,true));
//si je n'était pas sélectionné, je le deviens
this->setSelected(!this->isSelected());
//création des actions du menu
QAction *removeAction ;
if(freeField)
removeAction = menu.addAction(tr("&Remove"));
QAction *afficherAction = menu.addAction(QIcon(":/mini-eye.xpm"),tr("&Display(on/off)"));
//affichage conditionnel du menu concernant les conditions
QAction *addCondAction;
QAction *removeCondAction;
if(cond==NULL)
{
addCondAction= menu.addAction(QIcon(":/list-add.png"),tr("&Add Condition"));
}
else
{
removeCondAction= menu.addAction(tr("&removeCondition"));
}
//fin affichage du menu concernant les conditions
QAction *choisirCritereDeTriAction=menu.addAction(QIcon(":/stock_sort-criteria.png"),tr("Sort(asc,desc,off)"));
//exécution du menu
QAction* actionChoisie=menu.exec(event->screenPos());
if(actionChoisie!=NULL)
{
//qlq chose a été fait
if (actionChoisie==afficherAction)
{
this->affiche=!this->affiche;
this->oeil->setVisible(this->affiche);
if(this->affiche)
{
this->numeroOrdreDansLeSelect=maman->maxCleDeLaMap()+1;
}
else
{
this->numeroOrdreDansLeSelect=-1;
}
}
else
{
if(actionChoisie==choisirCritereDeTriAction)
{
QMenu menu2;
QAction * asc=menu2.addAction(QIcon(":/upSort.xpm"),tr("&Asc"));
QAction * desc=menu2.addAction(QIcon(":/downSort.xpm"),tr("&Desc"));
QAction * off=menu2.addAction(tr("&Off"));
QAction* triChoisi=menu2.exec(event->screenPos());
if(triChoisi==asc)
{
tri=ascSort;
}
else
{
if(triChoisi==desc)
{
tri=descSort;
}
else
{
if(triChoisi==off)
{
tri=noSort;
}
}
}
QString icon;
switch(tri)
{
case noSort:icon="";break;
case ascSort:icon=":/upSort.xpm";break;
case descSort:icon=":/downSort.xpm";break;
}
this->iconSort->setPixmap(QPixmap(icon));
}
else
{
if(actionChoisie==addCondAction)
{
//faire une zone de saisie pour l'action
//et le trait et l'opérateur
//is null is not null
//= < > <>
ajouteCondition("="+maman->delimiteur+tr("Something")+maman->delimiteur);
}
else
{
if(actionChoisie==removeCondAction) //suppression d'une condition sur un champ
{
delete cond;
cond=NULL;
//effacer le trait aussi
delete trait;
}
else
{
if(actionChoisie==removeAction)
{
//si c'est un champ d'une table redimensionnement
deleteLater();
}
}
}
}
}
emit jAiChange();
}//fi du si qlq chose a ete fait
}
void Field::dropEvent( QGraphicsSceneDragDropEvent* event)
{
qDebug()<<"void field::dropEvent(QDropEvent *event)";
}
void Field::dragEnterEvent( QGraphicsSceneDragDropEvent* event)
{
qDebug()<<"void field::dragEnterEvent(QDragEnterEvent *event)";
event->accept();
}
void Field::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
{
qDebug()<<"void field::dragMoveEvent(QGraphicsSceneDragDropEvent *event)";
event->accept();
}
QString Field::getTri()
{
qDebug()<<"QString field::getTri()";
QString resultat;
switch(tri)
{
case noSort:resultat="";break;
case ascSort:resultat="ASC";break;
case descSort:resultat="DESC";break;
}
return resultat;
}
void Field::ajouteCondition(QString texteCondition)
{
qDebug()<<"void field::ajouteCondition(QString texteCondition)";
cond=new QGraphicsTextItem(texteCondition,this);
QObject::connect(cond->document(),SIGNAL(contentsChanged()),maman, SLOT(miseAJourResultat()));
cond->setPos(100+this->boundingRect().width(),0);
cond->setTextInteractionFlags(Qt::TextEditable);
//et le trait
trait=new QGraphicsLineItem(this->pos().x()+this->boundingRect().width(),QFontMetrics(cond->font()).height()/2,cond->pos().x(),cond->pos().y()+QFontMetrics(cond->font()).height()/2,this);
//prise en compte de la modif pour raffraîchir le résultat de la requête
emit jAiChange();
}
void Field::modifieCondition(QString texteDeLaCondition)
{
qDebug()<<"void field::modifieCondition(QString texteDeLaCondition)";
cond->document()->setPlainText(texteDeLaCondition);
//prise en compte de la modif pour raffraîchir le résultat de la requête
emit jAiChange();
}
QString Field::getNomComplet()
{
qDebug()<<"QString field::getNomComplet()";
if(laTable==NULL || freeField) return(document()->toPlainText());
else
{
return(laTable->getNomTable()+"."+document()->toPlainText());
}
};//renvoie le nom sans ambigüité