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
qcustomgraphicsscene.cpp
1 #include "qcustomgraphicsscene.h"
2 #include <QGraphicsItem>
3 #include <QDrag>
4 #include <QDebug>
5 #include "entite.h"
6 #include "property.h"
7 #include "types.h"
8 #include "ui_mainwindow.h"
9 #include <QMenu>
10 #include <QAction>
11 #include <QInputDialog>
12 #include <QMimeData>
13 #include <mainwindow.h>
14 class MainWindow;
15 
16 QCustomGraphicsScene::QCustomGraphicsScene(QWidget * parent):QGraphicsScene(parent)
17 {
18  outil="move";
19 }
20 void QCustomGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
21 {
22 
23  qDebug("void QCustomGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)");
24  if (mouseEvent->button() == Qt::LeftButton
25  && (itemAt(mouseEvent->scenePos(),QTransform())!=NULL))
26  {
27  //trouver l'objet à la position:
28 
29  QGraphicsItem * elt=itemAt(mouseEvent->scenePos(),QTransform());
30  elt->setSelected(!elt->isSelected());
31  if(elt!=NULL)
32  {
33  //si c'est une table
34  qDebug()<<"youou"<<elt->data(32);
35  bool onACliqueSurUneEntiteOuUnChamp=false;
36  if(elt->data(32)=="Table")
37  {
38  if (!qgraphicsitem_cast<Entite*> (elt ))//le titre dit qu'il est une table
39  {
40  //mais la table est le parent de son parent
41  elt=(Entite*)elt->parentItem()->parentItem();
42  }
43  onACliqueSurUneEntiteOuUnChamp=true;
44 
45 
46  }
47  else//cela peut être un lien ou un field
48  {
49  if(elt->data(32)=="Field")
50  {
51  ((Property*)elt)->emmettreSelected();
52  elt=(Entite*)(((Property*)elt)->lEntite);
53  onACliqueSurUneEntiteOuUnChamp=true;
54 
55  }
56  }
57  //si une table ou le champ d'une table a été sélectionné dans le graphique on chamge la table sélectionnée de la boite liste
58  if(elt!=NULL && onACliqueSurUneEntiteOuUnChamp)
59  {
60  MainWindow * maman=(MainWindow*)parent();
61  maman->ui->listWidgetObjects->setCurrentItem((Entite*) elt);
63  }
64  }
65  if(outil=="drag")
66  {
67  if(!(elt->data(32).toString()=="Field"))
68  {
69  QDrag *drag = new QDrag(((QWidget*)this->parent()));
70  QMimeData *mimeData = new QMimeData;
71  QByteArray qba;
72  qba.append(elt->data(32).toString());
73  qba.append(";");
74  qba.append(elt->data(33).toString());
75  qba.append(";");
76  qba.append(elt->data(34).toString());
77  mimeData->setData("text/"+elt->data(32).toString(),qba);
78  drag->setMimeData(mimeData);
79  //drag->setPixmap(iconPixmap);
80  Qt::DropAction dropAction = drag->exec();
81  }
82  }
83 
84  }
85  else//bouton droit
86  {
87  qDebug()<<"bouton droit";
88  if (mouseEvent->button() == Qt::RightButton)
89  { QGraphicsItem * elementConcerne=NULL;
90  //si personne à la position de la souris
91  if(itemAt(mouseEvent->scenePos(),QTransform())==NULL)
92  {
93  //et personne dans le rectangle autour
94  if(items(QRectF(mouseEvent->scenePos().x()-1,mouseEvent->scenePos().y()-1,2,2)).count()==0)
95  {
96  //construction et appel du menu contextuel de la zone de travail
97  QMenu menuContextuelDeRien(QObject::tr("Workspace Menu"));
98  //ajout du titre
99  QAction* titre=new QAction(menuContextuelDeRien.title(),this);
100  titre->setDisabled(true);
101  menuContextuelDeRien.addAction(titre);
102  //titre->setSeparator(true);
103  titre->setFont(QFont("verdana",9,3,true));
104 
105  //ajout des actions du menu:
106  QAction* printModel=menuContextuelDeRien.addAction(tr("Print"));
107 
108  //option de menu permettant de mémoriser la requête en tant que source de donnée
109  //si la requête est ok
110  //on propose l'action mémoriser
111  MainWindow* maman=(MainWindow*)parent();
112 
113  QAction * actionChoisie=menuContextuelDeRien.exec(mouseEvent->screenPos());
114 #warning impression à développer
115  if(actionChoisie==printModel)
116  {
117  //impression à faire
118  maman->statusBar()->showMessage(tr("Printing document"),2000);
119  }
120  /*else
121  {
122  if(actionChoisie==enregistreCommeSourceDeDonnees)
123  {
124  //a virer de l'application
125 
126  }
127  }*/
128 
129  }
130  else//qlq chose ds le rectangle
131  {
132  elementConcerne=items(QRectF(mouseEvent->scenePos().x()-1,mouseEvent->scenePos().y()-1,2,2))[0];
133  }
134  }
135  else elementConcerne=itemAt(mouseEvent->scenePos(),QTransform());
136  if(elementConcerne!=NULL)
137  {
138  if(elementConcerne->data(32)=="Table")
139  {
140  while(!qgraphicsitem_cast<Entite*> (elementConcerne ))
141  {
142  elementConcerne=elementConcerne->parentItem();
143  }
144  //pb sur les assoc
145  ((Entite*)elementConcerne)->contextMenuEvent(mouseEvent);
146  }
147  else//cela peut être un lien ou un field
148  {
149  if(elementConcerne->data(32)=="Field")
150  {
151 
152  ((Property*)elementConcerne)->emmettreSelected();
153  ((Property*)elementConcerne)->contextMenuEvent(mouseEvent);
154  }
155  else //c'est un champ
156  {
157  if(elementConcerne->data(32)=="Lien")
158  {
159 
160  while(!qgraphicsitem_cast<Lien*> (elementConcerne ))
161  {
162  elementConcerne=elementConcerne->parentItem();
163  }
164 
165  ((Lien*)elementConcerne)->contextMenuEvent(mouseEvent);
166  }
167 
168  }
169  }
170  }//fin if elementConcerne!=NULL
171 
172  }
173  }
174 
175  QGraphicsScene::mousePressEvent(mouseEvent);
176 
177 }
178 
The Lien class a link is betwwen to objects it contains a line a role text cardinality ...
Definition: lien.h:17
void on_listWidgetObjects_itemActivated(QListWidgetItem *item)
on_listWidgetObjects_itemActivated
Definition: mainwindow.cpp:221
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
mousePressEvent
The Property class property is a field it can be placed into entity or relation.
Definition: field.h:13
The Entite class Entity is an object we have to deal with.
Definition: entite.h:20
The MainWindow class main code of application.
Definition: mainwindow.h:20
QString outil
outil User Tool it can be move or link