1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include <QGraphicsTextItem>
10 #include "dialogtypejointure.h"
11 #include "ui_dialogtypejointure.h"
13 #include <QFileDialog>
14 #include <QDesktopServices>
15 #include "xmeawriter.h"
16 #include "xmeareader.h"
17 #include "dialogaboutme.h"
28 setDockNestingEnabled(
true);
30 ui->graphicsView->setRenderHint(QPainter::Antialiasing);
31 ui->graphicsView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
32 ui->graphicsView->setScene(maScene);
35 ui->tableWidgetProperties->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
36 ui->tableWidgetProperties->horizontalHeader()->setStretchLastSection(
true);
38 ui->dockWidgetProperties->setFloating(
false);
39 ui->dockWidgetObjects->setFloating(
false);
41 ui->lineEditObjectName->setFocus();
42 ui->textEditSql->setVisible(
false);
43 QPalette* palette =
new QPalette();
44 QColor couleurFond(Qt::lightGray);
45 QColor couleurTexte(Qt::black);
47 palette->setColor(QPalette::Base,couleurFond);
48 palette->setColor(QPalette::Text,couleurTexte);
49 ui->textEditSql->setPalette(*palette);
64 qDebug()<<
"void MainWindow::effaceTout()";
72 ui->tableWidgetProperties->setRowCount(0);
80 MainWindow::~MainWindow()
87 void MainWindow::on_action_quitter_triggered()
98 if(saved && QMessageBox::question(
this,this->windowTitle(),tr(
"Do you really want to quit gapMea?"),QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
103 if (!saved && QMessageBox::question(
this,this->windowTitle(),tr(
"Your work is not saved, Are you sure ?"),QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
110 void MainWindow::on_action_Add_Entity_triggered()
112 QStringList listeDesChamps;
113 listeDesChamps<<
"numero"<<
"libelle";
114 QString nomTable=ui->lineEditObjectName->text();
115 Entite* tableAjoutee=
new Entite(
this,nomTable,0,0,0,maScene,listeDesChamps,
false);
116 tableAjoutee->setPos(QPoint (
prochainX,30));
118 maScene->addItem(tableAjoutee);
120 ui->lineEditObjectName->clear();
127 ui->listWidgetObjects->addItem(lEntite);
128 prochainX=lEntite->pos().x()+lEntite->boundingRect().width()+10;
129 lEntite->setFlag(QGraphicsItem::ItemIsSelectable);
130 lEntite->setFlag(QGraphicsItem::ItemIsMovable);
137 qDebug()<<
"void MainWindow::tableAjouterChamp()";
139 Property* nouveauChamp=
new Property(
this,
true,maScene,nomDuChamp,typeDuChamp,roleDuChamp,tailleDuChamp,lEntite);
141 nouveauChamp->setData(32,
"Field");
142 nouveauChamp->setData(33,lEntite->
nomEntite+
"."+nomDuChamp);
152 setWindowTitle(
"GapMea "+fileName);
157 ui->listWidgetObjects->setCurrentItem(lEntite);
166 qDebug(
"void MainWindow::selectionne(Property * laPropriete)");
170 ui->pushButtonModifyProperty->setEnabled(
false);
175 ui->lineEditPropertyName->setText(laPropriete->
nom);
176 ui->lineEditPropertyRole->setText(laPropriete->
role);
177 ui->lineEditTaille->setText(laPropriete->
taille);
178 ui->comboBoxPropertyType->setCurrentText(laPropriete->
sonType);
179 ui->lineEditPropertyName->setFocus();
182 void MainWindow::on_pushButtonAddObject_clicked()
185 QString leNom=ui->lineEditObjectName->text();
187 if(leNom!=
"" && !ui->listWidgetObjects->findItems(leNom,Qt::MatchExactly).count()>0 )
189 on_action_Add_Entity_triggered();
194 statusBar()->showMessage(tr(
"Sorry but Object already exists"),2000);
203 void MainWindow::on_action_Object_list_triggered(
bool checked)
207 ui->dockWidgetObjects->show();
211 ui->dockWidgetObjects->hide();
225 ui->groupBoxProperties->setTitle(lEntite->
nomEntite+
'-'+tr(
"Properties"));
228 ui->tableWidgetProperties->setRowCount(vectChamps.size());
230 for(
int no=0;no<vectChamps.size();no++)
232 ui->tableWidgetProperties->setItem(no,0,
new QTableWidgetItem(vectChamps[no]->getNomComplet()));
233 ui->tableWidgetProperties->setItem(no,1,
new QTableWidgetItem(vectChamps[no]->sonType));
234 ui->tableWidgetProperties->setItem(no,2,
new QTableWidgetItem(vectChamps[no]->taille));
235 ui->tableWidgetProperties->setItem(no,3,
new QTableWidgetItem(vectChamps[no]->role));
238 on_tableWidgetProperties_itemSelectionChanged();
240 ((QGraphicsItem*)lEntite)->setSelected(
true);
245 int index=ui->tableWidgetProperties->currentRow();
249 Property* laPropriete=((
Entite*)ui->listWidgetObjects->currentItem())->vecteurChamps[index];
251 laPropriete->
nom=ui->lineEditPropertyName->text();
252 laPropriete->
sonType=ui->comboBoxPropertyType->currentText();
253 laPropriete->
role=ui->lineEditPropertyRole->text();
254 laPropriete->
taille=ui->lineEditTaille->text();
260 ui->pushButtonModifyProperty->setEnabled(
false);
265 statusBar()->showMessage(tr(
"Please select an object first"),2000);
269 void MainWindow::on_pushButtonAddProperty_clicked()
273 if(ui->listWidgetObjects->selectedItems().count()==1)
275 Entite* lEntite=(
Entite*)(ui->listWidgetObjects->selectedItems()).at(0);
277 QString nomDuChamp=ui->lineEditPropertyName->text();
278 QString typeDuChamp=ui->comboBoxPropertyType->currentText();
279 QString roleDuChamp=ui->lineEditPropertyRole->text();
280 QString tailleDuChamp=ui->lineEditTaille->text();
284 ui->tableWidgetProperties->setRowCount(nbChamp);
285 ui->tableWidgetProperties->setItem(nbChamp-1,0,
new QTableWidgetItem(nomDuChamp));
286 ui->tableWidgetProperties->setItem(nbChamp-1,1,
new QTableWidgetItem(typeDuChamp));
287 ui->tableWidgetProperties->setItem(nbChamp-1,2,
new QTableWidgetItem(tailleDuChamp));
288 ui->tableWidgetProperties->setItem(nbChamp-1,3,
new QTableWidgetItem(roleDuChamp));
290 ui->lineEditPropertyName->clear();
291 ui->lineEditPropertyRole->clear();
297 statusBar()->showMessage(tr(
"Please select an object first"),2000);
301 void MainWindow::on_tableWidgetProperties_cellChanged(
int row,
int column)
303 qDebug()<<
"void MainWindow::on_tableWidgetProperties_cellChanged(int row, int column)";
305 if(ui->listWidgetObjects->selectedItems().count()==1)
307 Entite* lEntite=(
Entite*)(ui->listWidgetObjects->selectedItems()).at(0);
309 QString nouvelleValeur=ui->tableWidgetProperties->item(row,column)->text();
315 laPropriete->
nom=nouvelleValeur;
318 laPropriete->
sonType=nouvelleValeur;
321 laPropriete->
taille=nouvelleValeur;
324 laPropriete->
role=nouvelleValeur;
330 else statusBar()->showMessage(tr(
"Select an object first"),2000);
334 qDebug()<<
"void MainWindow::tableSupprimer(Entite* laTableASupprimer)";
335 if(demanderConfirmation && QMessageBox::question(
this,this->windowTitle(),tr(
"Do you confirm deleting Object:")+laTableASupprimer->
nomEntite,QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
337 int no=
vectTable.indexOf(laTableASupprimer);
340 ui->listWidgetObjects->takeItem(no);
342 ui->graphicsView->scene()->removeItem(laTableASupprimer);
343 delete laTableASupprimer;
350 if(!demanderConfirmation)
352 int no=
vectTable.indexOf(laTableASupprimer);
355 ui->listWidgetObjects->takeItem(no);
357 ui->graphicsView->scene()->removeItem(laTableASupprimer);
358 delete laTableASupprimer;
364 void MainWindow::on_lineEditObjectName_textChanged(
const QString &arg1)
367 ui->pushButtonAddObject->setEnabled(!arg1.isEmpty());
370 void MainWindow::on_actionMove_triggered()
372 qDebug()<<
"void dialogRelation::on_toolButtonMove_clicked()";
374 maScene->
outil=
"move";
375 ui->graphicsView->setCursor(QCursor(Qt::ArrowCursor));
376 ui->actionLink->setEnabled(
true);
377 ui->actionMove->setEnabled(
false);
380 void MainWindow::on_actionLink_triggered()
382 qDebug()<<
"void dialogRelation::on_toolButtonJoin_clicked()";
384 maScene->
outil=
"drag";
385 ui->graphicsView->setCursor(QCursor(Qt::PointingHandCursor));
386 ui->actionLink->setEnabled(
false);
387 ui->actionMove->setEnabled(
true);
391 qDebug()<<
"void MainWindow::jointure(Entite* t1,Entite* t2)";
397 dtj.m_ui->comboBoxType->removeItem(0);
398 dtj.m_ui->comboBoxType->removeItem(1);
399 dtj.m_ui->comboBoxType->removeItem(1);
406 QString typ=dtj.m_ui->comboBoxType->currentText();
407 QString relationName=dtj.m_ui->lineEditRelationName->text();
410 Lien * nouveauLien=
new Lien(t1,t2,0,typ,relationName);
411 maScene->addItem(nouveauLien);
416 Lien * nouveauLien=
new Lien(t1,t2,0,typ,relationName);
417 maScene->addItem(nouveauLien);
428 qDebug()<<
"void dialogRelation::supprimerLien(lien * leLien)";
444 void MainWindow::on_actionSave_triggered()
446 QString fichierOuvert=fileName;
447 QString nomFichier=QFileDialog::getSaveFileName(
this,tr(
"Save xmea file"),fichierOuvert,tr(
"MEA Files (*.mea *.xml)"));
449 QFile monFichierXMea(nomFichier);
450 QFileInfo fi(nomFichier);
451 bool ouvertureReussie=monFichierXMea.open(QIODevice::WriteOnly);
455 QString message=tr(
"Error occured saving file");
456 if(monWriter->
writeFile(&monFichierXMea))
458 message=tr(
"File was succesfully saved.");
462 statusBar()->showMessage(message,2000);
467 statusBar()->showMessage(tr(
"Saving is aborted"),2000);
471 void MainWindow::on_action_Open_triggered()
483 QFileDialog::getOpenFileName(
this, tr(
"Open MEA File"),
485 tr(
"MEA Files (*.mea *.xml)"));
486 QFileInfo fi(fileName) ;
487 if (fileName.isEmpty())
490 QFile file(fileName);
491 if (!file.open(QFile::ReadOnly | QFile::Text)) {
492 QMessageBox::warning(
this,
"GAP MEA",
493 tr(
"Cannot read file %1:\n%2.")
495 .arg(file.errorString()));
501 statusBar()->showMessage(tr(
"File loaded"), 2000);
505 ui->textEditSql->clear();
507 ui->textEditSql->setVisible(
false);
508 ui->action_sql->setChecked(
false);
510 ui->graphicsView->setScene(maScene);
511 ui->graphicsView->showMaximized();
514 statusBar()->showMessage(tr(
"Error reading File"), 2000);
517 void MainWindow::on_actionZoom_Best_triggered()
519 ui->graphicsView->fitInView(ui->graphicsView->scene()->itemsBoundingRect(),Qt::KeepAspectRatio);
523 void MainWindow::on_actionZoom_2_triggered()
525 ui->graphicsView->zoomOut();
528 void MainWindow::on_actionZoom_triggered()
530 ui->graphicsView->zoomIn();
533 void MainWindow::on_action_sql_triggered(
bool checked)
535 QVector <Entite*> entitesAProbleme;
536 ui->textEditSql->setVisible(checked);
537 ui->action_sql->setChecked(checked);
540 ui->textEditSql->clear();
541 QVector<Entite*>entitesGeneres;
543 int nbEGDsLeTour=180;
544 while(!(entitesGeneres.count()==nbDEntites || nbEGDsLeTour==0))
551 if(!entitesGeneres.contains(lEntite))
553 ui->textEditSql->append(lEntite->
toSql());
555 ui->textEditSql->append(
"");
556 entitesGeneres.append(lEntite);
562 if(!(entitesGeneres.count()==nbDEntites))
564 statusBar()->showMessage(tr(
"Loop was detected please correct problem first"));
567 msg.setText(tr(
"A loop as been detected while trying to generate SQL"));
568 msg.setInformativeText(tr(
"Your model may contain error\r\n You can try to correct problem or to force generation\r\nDo you want to force SQL generation?"));
569 msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
570 msg.setDefaultButton(QMessageBox::No);
572 if(ret==QMessageBox::Yes)
579 if(!entitesGeneres.contains(lEntite))
581 entitesAProbleme.push_back(lEntite);
582 ui->textEditSql->append(lEntite->
toSql(
true));
584 ui->textEditSql->append(
"");
585 entitesGeneres.append(lEntite);
590 foreach(
Entite* lEntite, entitesAProbleme)
593 foreach (QString laClef, lesClefsEtrangeres) {
594 ui->textEditSql->append(laClef);
603 statusBar()->showMessage(tr(
"SQL was successfully generated."));
625 void MainWindow::on_actionAbout_Qt_triggered()
627 QApplication::aboutQt();
630 void MainWindow::on_action_About_triggered()
638 void MainWindow::on_action_Properties_triggered(
bool checked)
640 ui->dockWidgetProperties->setVisible(checked);
643 void MainWindow::setSaved(
bool ok)
646 ui->actionSave->setEnabled(!ok);
649 void MainWindow::on_tableWidgetProperties_itemSelectionChanged()
651 qDebug()<<
"void MainWindow::on_tableWidgetProperties_itemSelectionChanged()";
653 int numeroDeLigne=ui->tableWidgetProperties->currentRow();
654 if(numeroDeLigne!=-1)
656 if(ui->listWidgetObjects->currentItem()!=NULL)
658 editProperty(((
Entite*)ui->listWidgetObjects->currentItem())->vecteurChamps[numeroDeLigne]);
663 void MainWindow::on_actionNew_Document_triggered()
668 if(QMessageBox::question(
this,this->windowTitle(),tr(
"Your work is not saved, do you want to save it before ?"),QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes)
670 on_actionSave_triggered();
678 ui->textEditSql->clear();
680 on_action_sql_triggered(
false);
687 int noLigne=ui->tableWidgetProperties->currentRow();
688 bool nomDif=ui->tableWidgetProperties->itemAt(0,noLigne)->text()!=ui->lineEditPropertyName->text();
689 bool typeDif=ui->tableWidgetProperties->itemAt(1,noLigne)->text()!=ui->comboBoxPropertyType->currentText();
690 bool tailleDif=ui->tableWidgetProperties->itemAt(2,noLigne)->text()!=ui->lineEditTaille->text();
691 bool roleDif=ui->tableWidgetProperties->itemAt(3,noLigne)->text()!=ui->lineEditPropertyRole->text();
692 activer=(!ui->lineEditPropertyName->text().isEmpty())&&(nomDif||typeDif||tailleDif||roleDif);
693 ui->pushButtonModifyProperty->setEnabled(activer);
697 QString typ=ui->comboBoxPropertyType->currentText();
698 ui->lineEditTaille->setEnabled(typ==
"VARCHAR"|| typ==
"NUMERIC");
701 void MainWindow::on_listWidgetObjects_itemSelectionChanged()
703 ui->pushButtonAddProperty->setEnabled(ui->listWidgetObjects->selectedItems().count()==1);
void setFileName(QString fn)
setFileName
Entite * t2
t2 second object
The DialogTypeJointure class This dialog permit to choose relation type.
The QCustomGraphicsScene class This class is designed to deal with mouse events.
QString nomEntite
nomEntite name of entity
QString toSql(bool withoutFK=false)
toSql
void selectionne(Entite *lEntite)
selectionne
QVector< Entite * > vectTable
vectTable all entities and relations
void tableAjouterChamp(Entite *lEntite, QString nomDuChamp="property name", QString typeDuChamp="Son type", QString roleDuChamp="Son rôle dans l'objet", QString tailleDuChamp="")
tableAjouterChamp
void supprimerLien(Lien *leLien)
supprimerLien
void activeDesactiveInputTaille()
activeDesactiveInputTaille Somme fields need size as varchar
The Lien class a link is betwwen to objects it contains a line a role text cardinality ...
QString sonType
sonType his type ex varchar(25) ou integer
Entite * t1
t1 first object
QVector< Lien * > vectLiens
vectLiens this vector contains adresses of the links concerning entity
void on_listWidgetObjects_itemActivated(QListWidgetItem *item)
on_listWidgetObjects_itemActivated
Entite * lEntite
lEntite object wich contains it
QStringList renvoieClefsEtrangeres(bool constraintInsideTable=true)
renvoieClefsEtrangeres
void on_pushButtonModifyProperty_clicked()
on_pushButtonModifyProperty_clicked whenever modify property is called
void closeEvent(QCloseEvent *event)
closeEvent
int prochainX
prochainX when adding entity it will be drawn there left distance from beginning
QString role
role his role ex father our chief ...
bool readFile(QIODevice *device)
readFile
The XMeaWriter class this class is used to write xml mea file.
bool writeFile(QIODevice *device)
writeFile
MainWindow(QWidget *parent=0)
MainWindow::MainWindow.
void effaceTout()
effaceTout remove all from vectors and scene
QVector< Property * > vecteurChamps
vecteurChamps container for entity's fields
QString taille
taille whenever field type need size
The Property class property is a field it can be placed into entity or relation.
void jointure(Entite *, Entite *)
jointure jointure demandée entre deux tables de la scene
Entite * getEntiteByName(QString nom)
getEntiteByName
void editProperty(Property *laPropriete)
editProperty
bool canBeWriten(QVector< Entite * > vectEntitesGeneres)
canBeWriten
void ajouteTable(Entite *t)
ajouteTable
QString nom
nom his name example weight
void tableSupprimer(Entite *laTableASupprimer, bool demanderConfirmation=true)
tableSupprimer
The Entite class Entity is an object we have to deal with.
The MainWindow class main code of application.
QString outil
outil User Tool it can be move or link
QVector< Lien * > vectLiens
vectLiens all links
void activeDesactiveBoutonApply()
activeDesactiveBoutonApply enable or disable apply button regarding ok application state ...
The XMeaReader class this is to read an xml .mea file.