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