2006-10-27 15:47:22 +00:00
# include "qetapp.h"
2007-01-29 00:41:12 +00:00
# include "diagramview.h"
# include "diagram.h"
2007-01-30 22:32:21 +00:00
# include "elementspanel.h"
2006-10-27 15:47:22 +00:00
# include "aboutqet.h"
2007-01-20 18:11:42 +00:00
# include "exportdialog.h"
2006-10-27 15:47:22 +00:00
/**
constructeur
@ param parent le widget parent de la fenetre principale
*/
QETApp : : QETApp ( QWidget * parent ) : QMainWindow ( parent ) {
// mise en place de l'interface MDI au centre de l'application
setCentralWidget ( & workspace ) ;
// mise en place du signalmapper
connect ( & windowMapper , SIGNAL ( mapped ( QWidget * ) ) , & workspace , SLOT ( setActiveWindow ( QWidget * ) ) ) ;
// recupere les arguments passes au programme
QStringList args = QCoreApplication : : arguments ( ) ;
// recupere les chemins de fichiers parmi les arguments
2007-01-29 00:41:12 +00:00
QStringList files ;
2006-10-27 15:47:22 +00:00
for ( int i = 1 ; i < args . size ( ) ; + + i ) {
2007-01-29 00:41:12 +00:00
if ( QFileInfo ( args . at ( i ) ) . exists ( ) ) files < < args . at ( i ) ;
2006-10-27 15:47:22 +00:00
}
// si des chemins de fichiers valides sont passes en arguments
2007-01-29 00:41:12 +00:00
QList < DiagramView * > diagram_views ;
if ( files . size ( ) ) {
2006-10-27 15:47:22 +00:00
// alors on ouvre ces fichiers
2007-01-29 00:41:12 +00:00
foreach ( QString file , files ) {
DiagramView * sv = new DiagramView ( this ) ;
if ( sv - > ouvrir ( file ) ) diagram_views < < sv ;
2006-10-27 15:47:22 +00:00
else delete sv ;
}
}
// si aucun schema n'a ete ouvert jusqu'a maintenant, on ouvre un nouveau schema
2007-01-29 00:41:12 +00:00
if ( ! diagram_views . size ( ) ) diagram_views < < new DiagramView ( this ) ;
2006-10-27 15:47:22 +00:00
2007-01-29 00:41:12 +00:00
// ajout de tous les DiagramView necessaires
foreach ( DiagramView * sv , diagram_views ) addDiagramView ( sv ) ;
2006-10-27 15:47:22 +00:00
// titre de la fenetre
setWindowTitle ( tr ( " QElectroTech " ) ) ;
// icone de la fenetre
setWindowIcon ( QIcon ( " :/ico/qet.png " ) ) ;
// barre de statut de la fenetre
statusBar ( ) - > showMessage ( tr ( " QElectrotech " ) ) ;
// ajout du panel d'Appareils en tant que QDockWidget
qdw_pa = new QDockWidget ( tr ( " Panel d'appareils " ) , this ) ;
qdw_pa - > setAllowedAreas ( Qt : : AllDockWidgetAreas ) ;
qdw_pa - > setFeatures ( QDockWidget : : AllDockWidgetFeatures ) ;
qdw_pa - > setMinimumWidth ( 160 ) ;
2007-01-30 22:32:21 +00:00
qdw_pa - > setWidget ( pa = new ElementsPanel ( qdw_pa ) ) ;
2006-10-27 15:47:22 +00:00
addDockWidget ( Qt : : LeftDockWidgetArea , qdw_pa ) ;
// mise en place des actions
actions ( ) ;
// mise en place de la barre d'outils
toolbar ( ) ;
// mise en place des menus
menus ( ) ;
// systray de l'application
if ( QSystemTrayIcon : : isSystemTrayAvailable ( ) ) {
qsti = new QSystemTrayIcon ( QIcon ( " :/ico/qet.png " ) , this ) ;
qsti - > setToolTip ( tr ( " QElectroTech " ) ) ;
connect ( qsti , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( systray ( QSystemTrayIcon : : ActivationReason ) ) ) ;
menu_systray = new QMenu ( tr ( " QElectroTech " ) ) ;
2007-01-29 00:41:12 +00:00
menu_systray - > addAction ( reduce_appli ) ;
2006-10-27 15:47:22 +00:00
menu_systray - > addAction ( quitter_qet ) ;
qsti - > setContextMenu ( menu_systray ) ;
qsti - > show ( ) ;
}
// la fenetre est maximisee par defaut
setMinimumWidth ( 500 ) ;
setMinimumHeight ( 350 ) ;
setWindowState ( Qt : : WindowMaximized ) ;
// connexions signaux / slots pour une interface sensee
2007-01-29 00:41:12 +00:00
connect ( & workspace , SIGNAL ( windowActivated ( QWidget * ) ) , this , SLOT ( slot_updateActions ( ) ) ) ;
connect ( QApplication : : clipboard ( ) , SIGNAL ( dataChanged ( ) ) , this , SLOT ( slot_updateActions ( ) ) ) ;
2006-10-27 15:47:22 +00:00
}
/**
Gere les evenements relatifs au QSystemTrayIcon
@ param raison un entier representant l ' evenement survenu sur le systray
*/
2007-01-29 00:41:12 +00:00
void QETApp : : systray ( QSystemTrayIcon : : ActivationReason reason ) {
2006-10-27 15:47:22 +00:00
if ( ! QSystemTrayIcon : : isSystemTrayAvailable ( ) ) return ;
2007-01-29 00:41:12 +00:00
switch ( reason ) {
2006-10-27 15:47:22 +00:00
case QSystemTrayIcon : : Context :
// affichage du menu
( qsti - > contextMenu ( ) ) - > show ( ) ;
break ;
case QSystemTrayIcon : : DoubleClick :
case QSystemTrayIcon : : Trigger :
// reduction ou restauration de l'application
2007-01-29 00:41:12 +00:00
if ( isVisible ( ) ) systrayReduce ( ) ; else systrayRestore ( ) ;
2006-10-27 15:47:22 +00:00
break ;
case QSystemTrayIcon : : Unknown :
default : // ne rien faire
break ;
}
}
/**
Reduit l ' application dans le systray
*/
2007-01-29 00:41:12 +00:00
void QETApp : : systrayReduce ( ) {
2006-10-27 15:47:22 +00:00
// on sauvegarde la position et les dimensions de l'application
wg = saveGeometry ( ) ;
// on cache l'application
hide ( ) ;
2007-01-29 00:41:12 +00:00
// on ajoute le menu "Restaurer" et on enleve le menu "Masquer"
menu_systray - > insertAction ( reduce_appli , restore_appli ) ;
menu_systray - > removeAction ( reduce_appli ) ;
2006-10-27 15:47:22 +00:00
}
/**
Restaure l ' application reduite dans le systray
*/
2007-01-29 00:41:12 +00:00
void QETApp : : systrayRestore ( ) {
2006-10-27 15:47:22 +00:00
// on restaure la position et les dimensions de l'application
restoreGeometry ( wg ) ;
// on affiche l'application
show ( ) ;
2007-01-29 00:41:12 +00:00
// on ajoute le menu "Masquer" et on enleve le menu "Restaurer"
menu_systray - > insertAction ( restore_appli , reduce_appli ) ;
menu_systray - > removeAction ( restore_appli ) ;
2006-10-27 15:47:22 +00:00
}
/**
Permet de quitter l ' application lors de la fermeture de la fenetre principale
2006-11-11 13:56:40 +00:00
@ param qce Le QCloseEvent correspondant a l ' evenement de fermeture
2006-10-27 15:47:22 +00:00
*/
2006-10-28 11:17:14 +00:00
void QETApp : : closeEvent ( QCloseEvent * qce ) {
2007-01-29 00:41:12 +00:00
quit ( qce ) ;
2006-10-27 15:47:22 +00:00
}
/**
Gere la sortie de l ' application
2006-11-11 13:56:40 +00:00
@ param e Le QCloseEvent correspondant a l ' evenement de fermeture
2006-10-27 15:47:22 +00:00
*/
2007-01-29 00:41:12 +00:00
void QETApp : : quit ( QCloseEvent * e ) {
2006-11-11 13:56:40 +00:00
// quitte directement s'il n'y a aucun schema ouvert
2006-11-16 19:27:29 +00:00
bool peut_quitter = true ;
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) {
2006-11-11 13:56:40 +00:00
// sinon demande la permission de fermer chaque schema
2006-10-27 15:47:22 +00:00
foreach ( QWidget * fenetre , workspace . windowList ( ) ) {
2007-01-29 00:41:12 +00:00
if ( qobject_cast < DiagramView * > ( fenetre ) ) {
2006-10-27 15:47:22 +00:00
workspace . setActiveWindow ( fenetre ) ;
if ( ! fermer ( ) ) {
peut_quitter = false ;
2006-10-28 11:17:14 +00:00
if ( e ! = NULL ) e - > ignore ( ) ;
2006-10-27 15:47:22 +00:00
break ;
}
}
}
2006-11-16 19:27:29 +00:00
}
if ( peut_quitter ) {
if ( QSystemTrayIcon : : isSystemTrayAvailable ( ) ) qsti - > hide ( ) ;
qApp - > quit ( ) ;
2006-10-27 15:47:22 +00:00
}
}
/**
2006-11-11 13:56:40 +00:00
Fait passer la fenetre du mode plein ecran au mode normal et vice - versa
2006-10-27 15:47:22 +00:00
*/
void QETApp : : toggleFullScreen ( ) {
setWindowState ( windowState ( ) ^ Qt : : WindowFullScreen ) ;
}
/**
2007-01-29 00:41:12 +00:00
Active ou desactive l ' antialiasing sur le rendu graphique du Diagram
2006-10-27 15:47:22 +00:00
*/
void QETApp : : toggleAntialiasing ( ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2006-10-27 15:47:22 +00:00
if ( ! sv ) return ;
sv - > setAntialiasing ( ! sv - > antialiased ( ) ) ;
toggle_aa - > setText ( sv - > antialiased ( ) ? tr ( " D \351 sactiver l'&antialiasing " ) : tr ( " Activer l'&antialiasing " ) ) ;
}
/**
Dialogue <EFBFBD> A propos de QElectroTech <EFBFBD>
Le dialogue en question est cree lors du premier appel de cette fonction .
En consequence , sa premiere apparition n ' est pas immediate . Par la suite ,
le dialogue n ' a pas a etre recree et il apparait instantanement . Il est
detruit en meme temps que son parent ( ici , la QETApp ) .
*/
void QETApp : : aPropos ( ) {
static AboutQET * apqet = new AboutQET ( this ) ;
apqet - > exec ( ) ;
}
/**
Mise en place des actions
*/
void QETApp : : actions ( ) {
// icones et labels
2007-01-29 00:41:12 +00:00
nouveau_fichier = new QAction ( QIcon ( " :/ico/new.png " ) , tr ( " &Nouveau " ) , this ) ;
ouvrir_fichier = new QAction ( QIcon ( " :/ico/open.png " ) , tr ( " &Ouvrir " ) , this ) ;
fermer_fichier = new QAction ( QIcon ( " :/ico/fileclose.png " ) , tr ( " &Fermer " ) , this ) ;
enr_fichier = new QAction ( QIcon ( " :/ico/save.png " ) , tr ( " &Enregistrer " ) , this ) ;
enr_fichier_sous = new QAction ( QIcon ( " :/ico/saveas.png " ) , tr ( " Enregistrer sous " ) , this ) ;
importer = new QAction ( QIcon ( " :/ico/import.png " ) , tr ( " &Importer " ) , this ) ;
exporter = new QAction ( QIcon ( " :/ico/export.png " ) , tr ( " E&xporter " ) , this ) ;
imprimer = new QAction ( QIcon ( " :/ico/print.png " ) , tr ( " Imprimer " ) , this ) ;
quitter_qet = new QAction ( QIcon ( " :/ico/exit.png " ) , tr ( " &Quitter " ) , this ) ;
annuler = new QAction ( QIcon ( " :/ico/undo.png " ) , tr ( " Annu&ler " ) , this ) ;
refaire = new QAction ( QIcon ( " :/ico/redo.png " ) , tr ( " Re&faire " ) , this ) ;
couper = new QAction ( QIcon ( " :/ico/cut.png " ) , tr ( " Co&uper " ) , this ) ;
copier = new QAction ( QIcon ( " :/ico/copy.png " ) , tr ( " Cop&ier " ) , this ) ;
coller = new QAction ( QIcon ( " :/ico/paste.png " ) , tr ( " C&oller " ) , this ) ;
sel_tout = new QAction ( tr ( " Tout s \351 lectionner " ) , this ) ;
sel_rien = new QAction ( tr ( " D \351 s \351 lectionner tout " ) , this ) ;
sel_inverse = new QAction ( tr ( " Inverser la s \351 lection " ) , this ) ;
supprimer = new QAction ( QIcon ( " :/ico/delete.png " ) , tr ( " Supprimer " ) , this ) ;
pivoter = new QAction ( QIcon ( " :/ico/pivoter.png " ) , tr ( " Pivoter " ) , this ) ;
infos_diagram = new QAction ( QIcon ( " :/ico/info.png " ) , tr ( " Informations sur le sch \351 ma " ) , this ) ;
add_column = new QAction ( tr ( " Ajouter une colonne " ) , this ) ;
remove_column = new QAction ( tr ( " Enlever une colonne " ) , this ) ;
toggle_aa = new QAction ( tr ( " D \351 sactiver l'&antialiasing " ) , this ) ;
zoom_avant = new QAction ( QIcon ( " :/ico/viewmag+.png " ) , tr ( " Zoom avant " ) , this ) ;
zoom_arriere = new QAction ( QIcon ( " :/ico/viewmag-.png " ) , tr ( " Zoom arri \350 re " ) , this ) ;
zoom_adapte = new QAction ( QIcon ( " :/ico/viewmagfit.png " ) , tr ( " Zoom adapt \351 " ) , this ) ;
zoom_reset = new QAction ( QIcon ( " :/ico/viewmag.png " ) , tr ( " Pas de zoom " ) , this ) ;
mode_selection = new QAction ( QIcon ( " :/ico/select.png " ) , tr ( " Mode Selection " ) , this ) ;
mode_visualise = new QAction ( QIcon ( " :/ico/move.png " ) , tr ( " Mode Visualisation " ) , this ) ;
entrer_pe = new QAction ( QIcon ( " :/ico/entrer_fs.png " ) , tr ( " Passer en &mode plein \351 cran " ) , this ) ;
sortir_pe = new QAction ( QIcon ( " :/ico/sortir_fs.png " ) , tr ( " Sortir du &mode plein \351 cran " ) , this ) ;
configurer = new QAction ( QIcon ( " :/ico/configure.png " ) , tr ( " &Configurer QElectroTech " ) , this ) ;
f_mosaique = new QAction ( tr ( " &Mosa \357 que " ) , this ) ;
f_cascade = new QAction ( tr ( " &Cascade " ) , this ) ;
f_reorganise = new QAction ( tr ( " Arranger les fen \352 tres r \351 duites " ) , this ) ;
f_suiv = new QAction ( tr ( " Fen \352 tre suivante " ) , this ) ;
f_prec = new QAction ( tr ( " Fen \352 tre pr \351 c \351 dente " ) , this ) ;
a_propos_de_qet = new QAction ( QIcon ( " :/ico/qet.png " ) , tr ( " \300 &propos de QElectroTech " ) , this ) ;
a_propos_de_qt = new QAction ( QIcon ( " :/ico/qt.png " ) , tr ( " \300 propos de &Qt " ) , this ) ;
reduce_appli = new QAction ( QIcon ( " :/ico/masquer.png " ) , tr ( " &Masquer " ) , this ) ;
restore_appli = new QAction ( QIcon ( " :/ico/restaurer.png " ) , tr ( " &Restaurer " ) , this ) ;
2006-10-27 15:47:22 +00:00
2006-11-11 13:56:40 +00:00
// info-bulles
2007-01-29 00:41:12 +00:00
reduce_appli - > setToolTip ( tr ( " Reduire QElectroTech dans le systray " ) ) ;
restore_appli - > setToolTip ( tr ( " Restaurer QElectroTech " ) ) ;
2006-10-27 15:47:22 +00:00
// raccourcis clavier
nouveau_fichier - > setShortcut ( QKeySequence : : New ) ;
ouvrir_fichier - > setShortcut ( QKeySequence : : Open ) ;
fermer_fichier - > setShortcut ( QKeySequence : : Close ) ;
enr_fichier - > setShortcut ( QKeySequence : : Save ) ;
importer - > setShortcut ( QKeySequence ( tr ( " Ctrl+Shift+I " ) ) ) ;
exporter - > setShortcut ( QKeySequence ( tr ( " Ctrl+Shift+X " ) ) ) ;
imprimer - > setShortcut ( QKeySequence ( QKeySequence : : Print ) ) ;
quitter_qet - > setShortcut ( QKeySequence ( tr ( " Ctrl+Q " ) ) ) ;
annuler - > setShortcut ( QKeySequence : : Undo ) ;
refaire - > setShortcut ( QKeySequence : : Redo ) ;
couper - > setShortcut ( QKeySequence : : Cut ) ;
copier - > setShortcut ( QKeySequence : : Copy ) ;
coller - > setShortcut ( QKeySequence : : Paste ) ;
sel_tout - > setShortcut ( QKeySequence : : SelectAll ) ;
sel_rien - > setShortcut ( QKeySequence ( tr ( " Ctrl+Shift+A " ) ) ) ;
sel_inverse - > setShortcut ( QKeySequence ( tr ( " Ctrl+I " ) ) ) ;
supprimer - > setShortcut ( QKeySequence : : Delete ) ;
pivoter - > setShortcut ( QKeySequence ( tr ( " P " ) ) ) ;
zoom_avant - > setShortcut ( QKeySequence : : ZoomIn ) ;
zoom_arriere - > setShortcut ( QKeySequence : : ZoomOut ) ;
zoom_adapte - > setShortcut ( QKeySequence ( tr ( " Ctrl+9 " ) ) ) ;
zoom_reset - > setShortcut ( QKeySequence ( tr ( " Ctrl+0 " ) ) ) ;
entrer_pe - > setShortcut ( QKeySequence ( tr ( " Ctrl+Shift+F " ) ) ) ;
sortir_pe - > setShortcut ( QKeySequence ( tr ( " Ctrl+Shift+F " ) ) ) ;
2006-10-28 11:17:14 +00:00
// affichage dans la barre de statut
2006-11-11 13:56:40 +00:00
nouveau_fichier - > setStatusTip ( tr ( " Cr \351 e un nouveau sch \351 ma " ) ) ;
ouvrir_fichier - > setStatusTip ( tr ( " Ouvre un sch \351 ma existant " ) ) ;
fermer_fichier - > setStatusTip ( tr ( " Ferme le sch \351 ma courant " ) ) ;
enr_fichier - > setStatusTip ( tr ( " Enregistre le sch \351 ma courant " ) ) ;
enr_fichier_sous - > setStatusTip ( tr ( " Enregistre le sch \351 ma courant avec un autre nom de fichier " ) ) ;
importer - > setStatusTip ( tr ( " Importe un sch \351 ma dans le sch \351 ma courant " ) ) ;
exporter - > setStatusTip ( tr ( " Exporte le sch \351 ma courant dans un autre format " ) ) ;
imprimer - > setStatusTip ( tr ( " Imprime le sch \351 ma courant " ) ) ;
quitter_qet - > setStatusTip ( tr ( " Ferme l'application QElectroTech " ) ) ;
annuler - > setStatusTip ( tr ( " Annule l'action pr \351 c \351 dente " ) ) ;
refaire - > setStatusTip ( tr ( " Restaure l'action annul \351 e " ) ) ;
couper - > setStatusTip ( tr ( " Transf \350 re les \351 l \351 ments s \351 lectionn \351 s dans le presse-papier " ) ) ;
copier - > setStatusTip ( tr ( " Copie les \351 l \351 ments s \351 lectionn \351 s dans le presse-papier " ) ) ;
coller - > setStatusTip ( tr ( " Place les \351 l \351 ments du presse-papier sur le sch \351 ma " ) ) ;
sel_tout - > setStatusTip ( tr ( " S \351 lectionne tous les \351 l \351 ments du sch \351 ma " ) ) ;
sel_rien - > setStatusTip ( tr ( " D \351 s \351 lectionne tous les \351 l \351 ments du sch \351 ma " ) ) ;
sel_inverse - > setStatusTip ( tr ( " D \351 s \351 lectionne les \351 l \351 ments s \351 lectionn \351 s et s \351 lectionne les \351 l \351 ments non s \351 lectionn \351 s " ) ) ;
supprimer - > setStatusTip ( tr ( " Enl \350 ve les \351 l \351 ments s \351 lectionn \351 s du sch \351 ma " ) ) ;
pivoter - > setStatusTip ( tr ( " Pivote les \351 l \351 ments s \351 lectionn \351 s " ) ) ;
2007-01-29 00:41:12 +00:00
infos_diagram - > setStatusTip ( tr ( " \311 dite les informations affich \351 es par le cartouche " ) ) ;
2007-01-28 00:53:17 +00:00
add_column - > setStatusTip ( tr ( " Ajoute une colonne au sch \351 ma " ) ) ;
remove_column - > setStatusTip ( tr ( " Enl \350 ve une colonne au sch \351 ma " ) ) ;
2006-11-11 13:56:40 +00:00
toggle_aa - > setStatusTip ( tr ( " Active / d \351 sactive l'antialiasing pour le rendu du sch \351 ma courant " ) ) ;
zoom_avant - > setStatusTip ( tr ( " Agrandit le sch \351 ma " ) ) ;
zoom_arriere - > setStatusTip ( tr ( " R \351 tr \351 cit le sch \351 ma " ) ) ;
zoom_adapte - > setStatusTip ( tr ( " Adapte la taille du sch \351 ma afin qu'il soit enti \350 rement visible " ) ) ;
zoom_reset - > setStatusTip ( tr ( " Restaure le zoom par d \351 faut " ) ) ;
mode_selection - > setStatusTip ( tr ( " Permet de s \351 lectionner les \351 l \351 ments " ) ) ;
mode_visualise - > setStatusTip ( tr ( " Permet de visualiser le sch \351 ma sans pouvoir le modifier " ) ) ;
entrer_pe - > setStatusTip ( tr ( " Affiche QElectroTech en mode plein \351 cran " ) ) ;
sortir_pe - > setStatusTip ( tr ( " Affiche QElectroTech en mode fen \352 tr \351 " ) ) ;
configurer - > setStatusTip ( tr ( " Permet de r \351 gler diff \351 rents param \350 tres de QElectroTech " ) ) ;
2006-10-27 15:47:22 +00:00
f_mosaique - > setStatusTip ( tr ( " Dispose les fen \352 tres en mosa \357 que " ) ) ;
f_cascade - > setStatusTip ( tr ( " Dispose les fen \352 tres en cascade " ) ) ;
2007-01-29 00:41:12 +00:00
f_reorganise - > setStatusTip ( tr ( " Aligne les fen \352 tres r \351 duites " ) ) ;
2006-10-27 15:47:22 +00:00
f_suiv - > setStatusTip ( tr ( " Active la fen \352 tre suivante " ) ) ;
f_prec - > setStatusTip ( tr ( " Active la fen \352 tre pr \351 c \351 dente " ) ) ;
2006-11-11 13:56:40 +00:00
a_propos_de_qet - > setStatusTip ( tr ( " Affiche des informations sur QElectroTech " ) ) ;
a_propos_de_qt - > setStatusTip ( tr ( " Affiche des informations sur la biblioth \350 que Qt " ) ) ;
2006-10-27 15:47:22 +00:00
// traitements speciaux
mode_selection - > setCheckable ( true ) ;
mode_visualise - > setCheckable ( true ) ;
mode_selection - > setChecked ( true ) ;
QActionGroup * grp_visu_sel = new QActionGroup ( this ) ;
grp_visu_sel - > addAction ( mode_selection ) ;
grp_visu_sel - > addAction ( mode_visualise ) ;
grp_visu_sel - > setExclusive ( true ) ;
// connexion a des slots
2007-01-29 00:41:12 +00:00
connect ( quitter_qet , SIGNAL ( triggered ( ) ) , this , SLOT ( quit ( ) ) ) ;
2006-10-27 15:47:22 +00:00
connect ( sel_tout , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_selectAll ( ) ) ) ;
connect ( sel_rien , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_selectNothing ( ) ) ) ;
connect ( sel_inverse , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_selectInvert ( ) ) ) ;
connect ( supprimer , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_supprimer ( ) ) ) ;
connect ( pivoter , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_pivoter ( ) ) ) ;
connect ( entrer_pe , SIGNAL ( triggered ( ) ) , this , SLOT ( toggleFullScreen ( ) ) ) ;
connect ( sortir_pe , SIGNAL ( triggered ( ) ) , this , SLOT ( toggleFullScreen ( ) ) ) ;
connect ( mode_selection , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_setSelectionMode ( ) ) ) ;
connect ( mode_visualise , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_setVisualisationMode ( ) ) ) ;
connect ( a_propos_de_qet , SIGNAL ( triggered ( ) ) , this , SLOT ( aPropos ( ) ) ) ;
connect ( a_propos_de_qt , SIGNAL ( triggered ( ) ) , qApp , SLOT ( aboutQt ( ) ) ) ;
2007-01-29 00:41:12 +00:00
connect ( reduce_appli , SIGNAL ( triggered ( ) ) , this , SLOT ( systrayReduce ( ) ) ) ;
connect ( restore_appli , SIGNAL ( triggered ( ) ) , this , SLOT ( systrayRestore ( ) ) ) ;
2006-10-27 15:47:22 +00:00
connect ( zoom_avant , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_zoomPlus ( ) ) ) ;
connect ( zoom_arriere , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_zoomMoins ( ) ) ) ;
connect ( zoom_adapte , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_zoomFit ( ) ) ) ;
connect ( zoom_reset , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_zoomReset ( ) ) ) ;
connect ( imprimer , SIGNAL ( triggered ( ) ) , this , SLOT ( dialogue_imprimer ( ) ) ) ;
connect ( exporter , SIGNAL ( triggered ( ) ) , this , SLOT ( dialogue_exporter ( ) ) ) ;
connect ( enr_fichier_sous , SIGNAL ( triggered ( ) ) , this , SLOT ( dialogue_enregistrer_sous ( ) ) ) ;
connect ( enr_fichier , SIGNAL ( triggered ( ) ) , this , SLOT ( enregistrer ( ) ) ) ;
connect ( nouveau_fichier , SIGNAL ( triggered ( ) ) , this , SLOT ( nouveau ( ) ) ) ;
connect ( ouvrir_fichier , SIGNAL ( triggered ( ) ) , this , SLOT ( ouvrir ( ) ) ) ;
connect ( fermer_fichier , SIGNAL ( triggered ( ) ) , this , SLOT ( fermer ( ) ) ) ;
connect ( couper , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_couper ( ) ) ) ;
connect ( copier , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_copier ( ) ) ) ;
connect ( coller , SIGNAL ( triggered ( ) ) , this , SLOT ( slot_coller ( ) ) ) ;
connect ( toggle_aa , SIGNAL ( triggered ( ) ) , this , SLOT ( toggleAntialiasing ( ) ) ) ;
2006-11-19 18:40:03 +00:00
connect ( f_mosaique , SIGNAL ( triggered ( ) ) , & workspace , SLOT ( tile ( ) ) ) ;
connect ( f_cascade , SIGNAL ( triggered ( ) ) , & workspace , SLOT ( cascade ( ) ) ) ;
connect ( f_reorganise , SIGNAL ( triggered ( ) ) , & workspace , SLOT ( arrangeIcons ( ) ) ) ;
connect ( f_suiv , SIGNAL ( triggered ( ) ) , & workspace , SLOT ( activateNextWindow ( ) ) ) ;
connect ( f_prec , SIGNAL ( triggered ( ) ) , & workspace , SLOT ( activatePreviousWindow ( ) ) ) ;
2007-01-29 00:41:12 +00:00
connect ( infos_diagram , SIGNAL ( activated ( ) ) , this , SLOT ( editInfos ( ) ) ) ;
2007-01-28 00:53:17 +00:00
connect ( add_column , SIGNAL ( activated ( ) ) , this , SLOT ( slot_addColumn ( ) ) ) ;
connect ( remove_column , SIGNAL ( activated ( ) ) , this , SLOT ( slot_removeColumn ( ) ) ) ;
2006-10-27 15:47:22 +00:00
}
/**
Mise en place des menus
*/
void QETApp : : menus ( ) {
QMenu * menu_fichier = menuBar ( ) - > addMenu ( tr ( " &Fichier " ) ) ;
QMenu * menu_edition = menuBar ( ) - > addMenu ( tr ( " & \311 dition " ) ) ;
QMenu * menu_affichage = menuBar ( ) - > addMenu ( tr ( " Afficha&ge " ) ) ;
QMenu * menu_outils = menuBar ( ) - > addMenu ( tr ( " O&utils " ) ) ;
QMenu * menu_config = menuBar ( ) - > addMenu ( tr ( " &Configuration " ) ) ;
menu_fenetres = menuBar ( ) - > addMenu ( tr ( " Fe&n \352 tres " ) ) ;
QMenu * menu_aide = menuBar ( ) - > addMenu ( tr ( " &Aide " ) ) ;
// tear off feature rulezz... pas ^^ mais bon...
menu_fichier - > setTearOffEnabled ( true ) ;
menu_edition - > setTearOffEnabled ( true ) ;
menu_affichage - > setTearOffEnabled ( true ) ;
menu_outils - > setTearOffEnabled ( true ) ;
menu_config - > setTearOffEnabled ( true ) ;
menu_aide - > setTearOffEnabled ( true ) ;
// menu Fichier
menu_fichier - > addAction ( nouveau_fichier ) ;
menu_fichier - > addAction ( ouvrir_fichier ) ;
menu_fichier - > addAction ( enr_fichier ) ;
menu_fichier - > addAction ( enr_fichier_sous ) ;
menu_fichier - > addAction ( fermer_fichier ) ;
menu_fichier - > addSeparator ( ) ;
menu_fichier - > addAction ( importer ) ;
menu_fichier - > addAction ( exporter ) ;
menu_fichier - > addSeparator ( ) ;
menu_fichier - > addAction ( imprimer ) ;
menu_fichier - > addSeparator ( ) ;
menu_fichier - > addAction ( quitter_qet ) ;
// menu Edition
menu_edition - > addAction ( annuler ) ;
menu_edition - > addAction ( refaire ) ;
menu_edition - > addSeparator ( ) ;
menu_edition - > addAction ( couper ) ;
menu_edition - > addAction ( copier ) ;
menu_edition - > addAction ( coller ) ;
menu_edition - > addSeparator ( ) ;
menu_edition - > addAction ( sel_tout ) ;
menu_edition - > addAction ( sel_rien ) ;
menu_edition - > addAction ( sel_inverse ) ;
menu_edition - > addSeparator ( ) ;
menu_edition - > addAction ( supprimer ) ;
menu_edition - > addAction ( pivoter ) ;
2006-11-19 18:40:03 +00:00
menu_edition - > addSeparator ( ) ;
2007-01-29 00:41:12 +00:00
menu_edition - > addAction ( infos_diagram ) ;
2007-01-28 00:53:17 +00:00
menu_edition - > addAction ( add_column ) ;
menu_edition - > addAction ( remove_column ) ;
2006-10-27 15:47:22 +00:00
// menu Affichage > Afficher
QMenu * menu_aff_aff = new QMenu ( tr ( " Afficher " ) ) ;
2006-11-11 13:56:40 +00:00
menu_aff_aff - > setTearOffEnabled ( true ) ;
2006-10-27 15:47:22 +00:00
menu_aff_aff - > addAction ( barre_outils - > toggleViewAction ( ) ) ;
2006-11-11 13:56:40 +00:00
barre_outils - > toggleViewAction ( ) - > setStatusTip ( tr ( " Affiche ou non la barre d'outils " ) ) ;
2006-10-27 15:47:22 +00:00
menu_aff_aff - > addAction ( qdw_pa - > toggleViewAction ( ) ) ;
2006-11-11 13:56:40 +00:00
qdw_pa - > toggleViewAction ( ) - > setStatusTip ( tr ( " Affiche ou non le panel d'appareils " ) ) ;
2006-10-27 15:47:22 +00:00
// menu Affichage
menu_affichage - > addMenu ( menu_aff_aff ) ;
menu_affichage - > addSeparator ( ) ;
menu_affichage - > addAction ( toggle_aa ) ;
menu_affichage - > addSeparator ( ) ;
menu_affichage - > addAction ( zoom_avant ) ;
menu_affichage - > addAction ( zoom_arriere ) ;
menu_affichage - > addAction ( zoom_adapte ) ;
menu_affichage - > addAction ( zoom_reset ) ;
// menu Outils
menu_outils - > addAction ( mode_selection ) ;
menu_outils - > addAction ( mode_visualise ) ;
// menu Configuration
menu_config - > addAction ( entrer_pe ) ;
menu_config - > addAction ( configurer ) ;
2007-01-29 00:41:12 +00:00
// menu Fenetres
2006-10-27 15:47:22 +00:00
slot_updateMenuFenetres ( ) ;
// menu Aide
menu_aide - > addAction ( a_propos_de_qet ) ;
menu_aide - > addAction ( a_propos_de_qt ) ;
}
/**
Mise en place de la barre d ' outils
*/
void QETApp : : toolbar ( ) {
barre_outils = new QToolBar ( tr ( " Outils " ) , this ) ;
// Modes selection / visualisation
barre_outils - > addAction ( mode_selection ) ;
barre_outils - > addAction ( mode_visualise ) ;
barre_outils - > addSeparator ( ) ;
barre_outils - > addAction ( annuler ) ;
barre_outils - > addAction ( refaire ) ;
barre_outils - > addSeparator ( ) ;
barre_outils - > addAction ( couper ) ;
barre_outils - > addAction ( copier ) ;
barre_outils - > addAction ( coller ) ;
barre_outils - > addSeparator ( ) ;
barre_outils - > addAction ( supprimer ) ;
barre_outils - > addAction ( pivoter ) ;
barre_outils - > addSeparator ( ) ;
barre_outils - > addAction ( zoom_avant ) ;
barre_outils - > addAction ( zoom_arriere ) ;
barre_outils - > addAction ( zoom_adapte ) ;
barre_outils - > addAction ( zoom_reset ) ;
// ajout de la barre d'outils a la fenetre principale
addToolBar ( Qt : : TopToolBarArea , barre_outils ) ;
}
/**
gere l ' impression
*/
void QETApp : : dialogue_imprimer ( ) {
2006-11-17 15:21:42 +00:00
QPrinter qprin ;
qprin . setOrientation ( QPrinter : : Landscape ) ;
qprin . setPageSize ( QPrinter : : A4 ) ;
//qprin.setPrintProgram("lp");
QPrintDialog qpd ( & qprin , this ) ;
if ( qpd . exec ( ) = = QDialog : : Accepted ) {
QPainter qp ( & qprin ) ;
2007-01-29 00:41:12 +00:00
Diagram * sc = diagramEnCours ( ) - > scene ;
2006-11-17 15:21:42 +00:00
sc - > setAffichageGrille ( false ) ;
sc - > render ( & qp ) ;
sc - > setAffichageGrille ( true ) ;
}
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Gere l ' export de schema vers un autre format ( PNG pour le moment )
*/
2006-10-27 15:47:22 +00:00
void QETApp : : dialogue_exporter ( ) {
2007-01-29 00:41:12 +00:00
Diagram * sc = diagramEnCours ( ) - > scene ;
2007-01-20 18:11:42 +00:00
ExportDialog ed ( * sc ) ;
ed . exec ( ) ;
2006-10-27 15:47:22 +00:00
}
/**
Methode enregistrant le schema dans le dernier nom de fichier connu .
Si aucun nom de fichier n ' est connu , cette methode appelle la methode enregistrer_sous
@ return true si l ' enregistrement a reussi , false sinon
*/
bool QETApp : : enregistrer ( ) {
2007-01-29 00:41:12 +00:00
if ( ! diagramEnCours ( ) ) return ( false ) ;
return ( diagramEnCours ( ) - > enregistrer ( ) ) ;
2006-10-27 15:47:22 +00:00
}
/**
Cette methode demande un nom de fichier a l ' utilisateur pour enregistrer le schema
Si aucun nom n ' est entre , elle renvoie faux .
Si le nom ne se termine pas par l ' extension . qet , celle - ci est ajoutee .
Si l ' enregistrement reussit , le nom du fichier est conserve et la fonction renvoie true .
Sinon , faux est renvoye .
@ return true si l ' enregistrement a reussi , false sinon
@ todo detecter le chemin du bureau automatiquement
*/
bool QETApp : : dialogue_enregistrer_sous ( ) {
2007-01-29 00:41:12 +00:00
if ( ! diagramEnCours ( ) ) return ( false ) ;
return ( diagramEnCours ( ) - > enregistrer_sous ( ) ) ;
2006-10-27 15:47:22 +00:00
}
/**
Cette methode cree un nouveau schema .
@ return true si tout s ' est bien passe ; false si vous executez cette fonction dans un univers non cartesien ( en fait y ' a pas de return ( false ) : p )
*/
bool QETApp : : nouveau ( ) {
2007-01-29 00:41:12 +00:00
addDiagramView ( new DiagramView ( this ) ) ;
2006-10-27 15:47:22 +00:00
return ( true ) ;
}
/**
Cette fonction demande un nom de fichier a ouvrir a l ' utilisateur
@ return true si l ' ouverture a reussi , false sinon
*/
bool QETApp : : ouvrir ( ) {
// demande un nom de fichier a ouvrir a l'utilisateur
QString nom_fichier = QFileDialog : : getOpenFileName (
this ,
tr ( " Ouvrir un fichier " ) ,
QDir : : homePath ( ) ,
2007-01-29 00:41:12 +00:00
tr ( " Diagram QelectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*) " )
2006-10-27 15:47:22 +00:00
) ;
if ( nom_fichier = = " " ) return ( false ) ;
// verifie que le fichier n'est pas deja ouvert
QString chemin_fichier = QFileInfo ( nom_fichier ) . canonicalFilePath ( ) ;
foreach ( QWidget * fenetre , workspace . windowList ( ) ) {
2007-01-29 00:41:12 +00:00
DiagramView * fenetre_en_cours = qobject_cast < DiagramView * > ( fenetre ) ;
2006-10-27 15:47:22 +00:00
if ( QFileInfo ( fenetre_en_cours - > nom_fichier ) . canonicalFilePath ( ) = = chemin_fichier ) {
workspace . setActiveWindow ( fenetre ) ;
return ( false ) ;
}
}
// ouvre le fichier
2007-01-29 00:41:12 +00:00
DiagramView * sv = new DiagramView ( this ) ;
2006-10-27 15:47:22 +00:00
int code_erreur ;
if ( sv - > ouvrir ( nom_fichier , & code_erreur ) ) {
2007-01-29 00:41:12 +00:00
addDiagramView ( sv ) ;
2006-10-27 15:47:22 +00:00
return ( true ) ;
} else {
QString message_erreur ;
switch ( code_erreur ) {
case 1 : message_erreur = tr ( " Ce fichier n'existe pas. " ) ; break ;
case 2 : message_erreur = tr ( " Impossible de lire ce fichier. " ) ; break ;
case 3 : message_erreur = tr ( " Ce fichier n'est pas un document XML valide. " ) ; break ;
case 4 : message_erreur = tr ( " Une erreur s'est produite lors de l'ouverture du fichier. " ) ; break ;
}
QMessageBox : : warning ( this , tr ( " Erreur " ) , message_erreur ) ;
delete sv ;
return ( false ) ;
}
}
/**
Ferme le document courant
@ return true si la fermeture du fichier a reussi , false sinon
@ todo detecter les modifications et ne demander que si besoin est
*/
bool QETApp : : fermer ( ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2006-10-27 15:47:22 +00:00
if ( ! sv ) return ( false ) ;
2007-01-29 00:41:12 +00:00
bool fermeture_diagram = sv - > close ( ) ;
if ( fermeture_diagram ) delete sv ;
return ( fermeture_diagram ) ;
2006-10-27 15:47:22 +00:00
}
/**
2007-01-29 00:41:12 +00:00
@ return Le DiagramView qui a le focus dans l ' interface MDI
2006-10-27 15:47:22 +00:00
*/
2007-01-29 00:41:12 +00:00
DiagramView * QETApp : : diagramEnCours ( ) {
return ( qobject_cast < DiagramView * > ( workspace . activeWindow ( ) ) ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " couper " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_couper ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > couper ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
2007-01-29 00:41:12 +00:00
Effectue l ' action " copier " sur le diagram en cours
2006-11-11 13:56:40 +00:00
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_copier ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > copier ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " coller " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_coller ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > coller ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
2007-01-29 00:41:12 +00:00
Effectue l ' action " zoom avant " sur le diagram en cours
2006-11-11 13:56:40 +00:00
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_zoomPlus ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > zoomPlus ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " zoom arriere " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_zoomMoins ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > zoomMoins ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
2007-01-29 00:41:12 +00:00
Effectue l ' action " zoom arriere " sur le diagram en cours
2006-11-11 13:56:40 +00:00
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_zoomFit ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > zoomFit ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " zoom par defaut " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_zoomReset ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > zoomReset ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " selectionner tout " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_selectAll ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > selectAll ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " deselectionenr tout " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_selectNothing ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > selectNothing ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " inverser la selection " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_selectInvert ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > selectInvert ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " supprimer " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_supprimer ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > supprimer ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " pivoter " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_pivoter ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > pivoter ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " mode selection " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_setSelectionMode ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > setSelectionMode ( ) ;
2006-10-27 15:47:22 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Effectue l ' action " mode visualisation " sur le schema en cours
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_setVisualisationMode ( ) {
2007-01-29 00:41:12 +00:00
if ( diagramEnCours ( ) ) diagramEnCours ( ) - > setVisualisationMode ( ) ;
2006-10-27 15:47:22 +00:00
}
/**
gere les actions ayant besoin d ' un document ouvert
*/
void QETApp : : slot_updateActions ( ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2006-10-27 15:47:22 +00:00
bool document_ouvert = ( sv ! = 0 ) ;
// actions ayant juste besoin d'un document ouvert
fermer_fichier - > setEnabled ( document_ouvert ) ;
enr_fichier - > setEnabled ( document_ouvert ) ;
enr_fichier_sous - > setEnabled ( document_ouvert ) ;
importer - > setEnabled ( document_ouvert ) ;
exporter - > setEnabled ( document_ouvert ) ;
imprimer - > setEnabled ( document_ouvert ) ;
sel_tout - > setEnabled ( document_ouvert ) ;
sel_rien - > setEnabled ( document_ouvert ) ;
sel_inverse - > setEnabled ( document_ouvert ) ;
zoom_avant - > setEnabled ( document_ouvert ) ;
zoom_arriere - > setEnabled ( document_ouvert ) ;
zoom_adapte - > setEnabled ( document_ouvert ) ;
zoom_reset - > setEnabled ( document_ouvert ) ;
toggle_aa - > setEnabled ( document_ouvert ) ;
2007-01-29 00:41:12 +00:00
infos_diagram - > setEnabled ( document_ouvert ) ;
2006-10-27 15:47:22 +00:00
// actions ayant aussi besoin d'un historique des actions
annuler - > setEnabled ( document_ouvert ) ;
refaire - > setEnabled ( document_ouvert ) ;
// actions ayant aussi besoin d'elements selectionnes
bool elements_selectionnes = document_ouvert ? ( sv - > scene - > selectedItems ( ) . size ( ) > 0 ) : false ;
couper - > setEnabled ( elements_selectionnes ) ;
copier - > setEnabled ( elements_selectionnes ) ;
supprimer - > setEnabled ( elements_selectionnes ) ;
pivoter - > setEnabled ( elements_selectionnes ) ;
// action ayant aussi besoin d'un presse-papier plein
bool peut_coller = QApplication : : clipboard ( ) - > text ( ) ! = QString ( ) ;
coller - > setEnabled ( document_ouvert & & peut_coller ) ;
// actions ayant aussi besoin d'un document ouvert et de la connaissance de son mode
if ( ! document_ouvert ) {
mode_selection - > setEnabled ( false ) ;
mode_visualise - > setEnabled ( false ) ;
} else {
switch ( ( int ) ( sv - > dragMode ( ) ) ) {
case QGraphicsView : : NoDrag :
mode_selection - > setEnabled ( false ) ;
mode_visualise - > setEnabled ( false ) ;
break ;
case QGraphicsView : : ScrollHandDrag :
mode_selection - > setEnabled ( true ) ;
mode_visualise - > setEnabled ( true ) ;
mode_selection - > setChecked ( false ) ;
mode_visualise - > setChecked ( true ) ;
break ;
case QGraphicsView : : RubberBandDrag :
mode_selection - > setEnabled ( true ) ;
mode_visualise - > setEnabled ( true ) ;
mode_selection - > setChecked ( true ) ;
mode_visualise - > setChecked ( false ) ;
break ;
}
}
// actions ayant besoin de la connaissance de son mode
if ( document_ouvert ) toggle_aa - > setText ( sv - > antialiased ( ) ? tr ( " D \351 sactiver l'&antialiasing " ) : tr ( " Activer l'&antialiasing " ) ) ;
slot_updateMenuFenetres ( ) ;
}
2006-11-11 13:56:40 +00:00
/**
Ajoute un schema dans l ' espace de travail
2007-01-29 00:41:12 +00:00
@ param sv L ' objet DiagramView a ajouter a l ' espace de travail
2006-11-11 13:56:40 +00:00
*/
2007-01-29 00:41:12 +00:00
void QETApp : : addDiagramView ( DiagramView * sv ) {
2006-10-27 15:47:22 +00:00
if ( ! sv ) return ;
2007-01-29 00:41:12 +00:00
// on maximise la nouvelle fenetre si la fenetre en cours est inexistante ou bien maximisee
DiagramView * s_v = diagramEnCours ( ) ;
2006-10-27 15:47:22 +00:00
bool maximise = ( ( ! s_v ) | | ( s_v - > windowState ( ) & Qt : : WindowMaximized ) ) ;
2007-01-29 00:41:12 +00:00
// ajoute la fenetre
2006-10-27 15:47:22 +00:00
QWidget * p = workspace . addWindow ( sv ) ;
connect ( sv , SIGNAL ( selectionChanged ( ) ) , this , SLOT ( slot_updateActions ( ) ) ) ;
connect ( sv , SIGNAL ( modeChanged ( ) ) , this , SLOT ( slot_updateActions ( ) ) ) ;
2007-01-29 00:41:12 +00:00
// affiche la fenetre
2006-10-27 15:47:22 +00:00
if ( maximise ) p - > showMaximized ( ) ;
else p - > show ( ) ;
}
2006-11-11 13:56:40 +00:00
/**
met a jour le menu " Fenetres "
*/
2006-10-27 15:47:22 +00:00
void QETApp : : slot_updateMenuFenetres ( ) {
// nettoyage du menu
menu_fenetres - > clear ( ) ;
// actions de fermeture
menu_fenetres - > addAction ( fermer_fichier ) ;
//menu_fenetres -> addAction(closeAllAct);
// actions de reorganisation des fenetres
menu_fenetres - > addSeparator ( ) ;
menu_fenetres - > addAction ( f_mosaique ) ;
menu_fenetres - > addAction ( f_cascade ) ;
menu_fenetres - > addAction ( f_reorganise ) ;
// actiosn de deplacement entre les fenetres
menu_fenetres - > addSeparator ( ) ;
menu_fenetres - > addAction ( f_suiv ) ;
menu_fenetres - > addAction ( f_prec ) ;
// liste des fenetres
QList < QWidget * > fenetres = workspace . windowList ( ) ;
if ( ! fenetres . isEmpty ( ) ) menu_fenetres - > addSeparator ( ) ;
for ( int i = 0 ; i < fenetres . size ( ) ; + + i ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = qobject_cast < DiagramView * > ( fenetres . at ( i ) ) ;
2006-11-11 13:56:40 +00:00
QString sv_titre = sv - > windowTitle ( ) . left ( sv - > windowTitle ( ) . length ( ) - 3 ) ;
QAction * action = menu_fenetres - > addAction ( sv_titre ) ;
action - > setStatusTip ( tr ( " Active la fen \352 tre " ) + sv_titre ) ;
2006-10-27 15:47:22 +00:00
action - > setCheckable ( true ) ;
2007-01-29 00:41:12 +00:00
action - > setChecked ( sv = = diagramEnCours ( ) ) ;
2006-10-27 15:47:22 +00:00
connect ( action , SIGNAL ( triggered ( ) ) , & windowMapper , SLOT ( map ( ) ) ) ;
windowMapper . setMapping ( action , sv ) ;
}
}
2006-10-28 19:39:43 +00:00
/**
2006-11-11 13:56:40 +00:00
Renvoie le dossier des elements communs , c - a - d le chemin du dossier dans
lequel QET doit chercher les definitions XML des elements de la collection QET .
@ return Le chemin du dossier des elements communs
2006-10-28 19:39:43 +00:00
*/
QString QETApp : : commonElementsDir ( ) {
2006-11-16 19:27:29 +00:00
return ( QDir : : current ( ) . path ( ) + " /elements/ " ) ;
2006-10-28 19:39:43 +00:00
}
/**
2006-11-11 13:56:40 +00:00
Renvoie le dossier des elements de l ' utilisateur , c - a - d le chemin du dossier
dans lequel QET chercher les definitions XML des elements propres a
l ' utilisateur .
@ return Le chemin du dossier des elements persos
2006-10-28 19:39:43 +00:00
*/
QString QETApp : : customElementsDir ( ) {
2006-11-16 19:27:29 +00:00
return ( QETApp : : configDir ( ) + " elements/ " ) ;
2006-10-28 19:39:43 +00:00
}
2006-11-11 13:56:40 +00:00
/**
Renvoie le dossier de configuration de QET , c - a - d le chemin du dossier dans
lequel QET lira les informations de configuration et de personnalisation
propres a l ' utilisateur courant . Ce dossier est generalement
C : \ Documents And Settings \ utilisateur \ Application Data \ qet sous Windows et
2007-01-29 00:41:12 +00:00
~ / . qet sous les systemes type UNIX .
2006-11-11 13:56:40 +00:00
@ return Le chemin du dossier de configuration de QElectroTech
*/
2006-10-28 19:39:43 +00:00
QString QETApp : : configDir ( ) {
# ifdef Q_OS_WIN32
2006-11-16 19:27:29 +00:00
return ( QDir : : homePath ( ) + " /Application Data/qet/ " ) ;
2006-10-28 19:39:43 +00:00
# else
return ( QDir : : homePath ( ) + " /.qet/ " ) ;
# endif
}
2006-11-15 22:49:34 +00:00
/**
Permet de connaitre le chemin absolu du fichier * . elmt correspondant a un
chemin symbolique ( du type custom : //outils_pervers/sado_maso/contact_bizarre)
@ param sym_path Chaine de caracteres representant le chemin absolu du fichier
@ return Une chaine de caracteres vide en cas d ' erreur ou le chemin absolu du
fichier * . elmt .
*/
QString QETApp : : realPath ( QString & sym_path ) {
QString directory ;
if ( sym_path . startsWith ( " common:// " ) ) {
directory = commonElementsDir ( ) ;
} else if ( sym_path . startsWith ( " custom:// " ) ) {
directory = customElementsDir ( ) ;
} else return ( QString ( ) ) ;
return ( directory + QDir : : toNativeSeparators ( sym_path . right ( sym_path . length ( ) - 9 ) ) ) ;
}
/**
Construit le chemin symbolique ( du type custom : //outils_pervers/sado_maso/
contact_bizarre ) correspondant a un fichier .
@ param real_pathChaine de caracteres representant le chemin symbolique du fichier
@ return Une chaine de caracteres vide en cas d ' erreur ou le chemin
symbolique designant l ' element .
*/
QString QETApp : : symbolicPath ( QString & real_path ) {
// recupere les dossier common et custom
QString commond = commonElementsDir ( ) ;
QString customd = customElementsDir ( ) ;
QString chemin ;
// analyse le chemin de fichier passe en parametre
if ( real_path . startsWith ( commond ) ) {
chemin = " common:// " + real_path . right ( real_path . length ( ) - commond . length ( ) ) ;
} else if ( real_path . startsWith ( customd ) ) {
chemin = " custom:// " + real_path . right ( real_path . length ( ) - customd . length ( ) ) ;
} else chemin = QString ( ) ;
return ( chemin ) ;
}
2006-11-16 18:27:53 +00:00
/**
@ return Le chemin du dossier contenant les fichiers de langue
*/
QString QETApp : : languagesPath ( ) {
2006-11-16 19:27:29 +00:00
return ( QDir : : current ( ) . path ( ) + " /lang/ " ) ;
2006-11-16 18:27:53 +00:00
}
2006-11-19 18:40:03 +00:00
void QETApp : : editInfos ( ) {
// ne fait rien s'il n'y a pas de schema ouvert
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2006-11-19 18:40:03 +00:00
if ( ! sv ) return ;
2007-01-28 00:53:17 +00:00
// recupere le cartouche du schema
BorderInset * inset = & ( sv - > scene - > border_and_inset ) ;
2006-11-19 18:40:03 +00:00
// construit le dialogue
QDialog popup ;
popup . setMinimumWidth ( 400 ) ;
popup . setWindowTitle ( tr ( " Cartouche du sch \351 ma " ) ) ;
2007-01-28 00:53:17 +00:00
QLineEdit * titre = new QLineEdit ( inset - > title ( ) , & popup ) ;
QLineEdit * auteur = new QLineEdit ( inset - > author ( ) , & popup ) ;
2007-01-29 00:41:12 +00:00
QDate date_diagram = QDate ( inset - > date ( ) ) ;
if ( date_diagram . isNull ( ) | | ! date_diagram . isValid ( ) ) date_diagram = QDate : : currentDate ( ) ;
QDateEdit * date = new QDateEdit ( date_diagram , & popup ) ;
2006-11-19 18:40:03 +00:00
date - > setCalendarPopup ( true ) ;
2007-01-28 00:53:17 +00:00
QLineEdit * fichier = new QLineEdit ( inset - > fileName ( ) , & popup ) ;
QLineEdit * folio = new QLineEdit ( inset - > folio ( ) , & popup ) ;
QWidget bidon ( & popup ) ;
2006-11-19 18:40:03 +00:00
QGridLayout layout_champs ( & bidon ) ;
2007-01-28 00:53:17 +00:00
layout_champs . addWidget ( new QLabel ( tr ( " Titre : " ) ) , 0 , 0 ) ;
layout_champs . addWidget ( titre , 0 , 1 ) ;
layout_champs . addWidget ( new QLabel ( tr ( " Auteur : " ) ) , 1 , 0 ) ;
layout_champs . addWidget ( auteur , 1 , 1 ) ;
layout_champs . addWidget ( new QLabel ( tr ( " Date : " ) ) , 2 , 0 ) ;
layout_champs . addWidget ( date , 2 , 1 ) ;
layout_champs . addWidget ( new QLabel ( tr ( " Fichier : " ) ) , 3 , 0 ) ;
layout_champs . addWidget ( fichier , 3 , 1 ) ;
layout_champs . addWidget ( new QLabel ( tr ( " Folio : " ) ) , 4 , 0 ) ;
layout_champs . addWidget ( folio , 4 , 1 ) ;
2006-11-19 18:40:03 +00:00
// boutons
QDialogButtonBox boutons ( QDialogButtonBox : : Ok | QDialogButtonBox : : Cancel ) ;
connect ( & boutons , SIGNAL ( accepted ( ) ) , & popup , SLOT ( accept ( ) ) ) ;
connect ( & boutons , SIGNAL ( rejected ( ) ) , & popup , SLOT ( accept ( ) ) ) ;
// ajout dans une disposition verticale
QVBoxLayout layout_v ( & popup ) ;
layout_v . addWidget ( & bidon ) ;
layout_v . addWidget ( & boutons ) ;
if ( popup . exec ( ) = = QDialog : : Accepted ) {
2007-01-28 00:53:17 +00:00
inset - > setTitle ( titre - > text ( ) ) ;
inset - > setAuthor ( auteur - > text ( ) ) ;
inset - > setDate ( date - > date ( ) ) ;
inset - > setFileName ( fichier - > text ( ) ) ;
inset - > setFolio ( folio - > text ( ) ) ;
2006-11-19 18:40:03 +00:00
}
}
2007-01-28 00:53:17 +00:00
void QETApp : : slot_addColumn ( ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2007-01-28 00:53:17 +00:00
if ( ! sv ) return ;
// ajoute la colonne
sv - > scene - > border_and_inset . addColumn ( ) ;
// met a jour la zone affichee par la vue
QRectF sr = sv - > sceneRect ( ) ;
sr . setWidth ( 5.0 + sv - > scene - > border_and_inset . borderWidth ( ) ) ;
sv - > setSceneRect ( sr ) ;
// rafraichit la vue
sv - > scene - > update ( sv - > sceneRect ( ) ) ;
}
void QETApp : : slot_removeColumn ( ) {
2007-01-29 00:41:12 +00:00
DiagramView * sv = diagramEnCours ( ) ;
2007-01-28 00:53:17 +00:00
if ( ! sv ) return ;
sv - > scene - > border_and_inset . removeColumn ( ) ;
// on pourrait mettre a jour la zone affichee par la vue
// rafraichit la vue
sv - > scene - > update ( sv - > sceneRect ( ) ) ;
}