#include <string>
#include "MaFenetre.h"
using namespace std;
MaFenetre::MaFenetre() : QWidget()
{
setWindowTitle("S1kronize 1.0"); //titre de la fenetre
setWindowIcon(QIcon("synchro.png")); //icone de la fenetre
m_apropos = new QPushButton("A propos", this); //déclare le bouton a propos
m_quitter = new QPushButton("Quitter", this);
boutonSelect1 = new QPushButton("Lettre d'origine");
boutonSelect2 = new QPushButton("Lettre de destination");
boutonSelect3 = new QPushButton("Dossier à synchroniser");
m_synchroniser = new QPushButton("SYNCHRONISER", this);
m_synchroniser->setFont(QFont("Comic Sans MS", 10));
m_synchroniser->setToolTip("Go !!!");
QGridLayout *vbox1 = new QGridLayout; //déclare le GridLayout vbox1
progressbar = new QProgressBar(this);
progressbar->setRange(0, 100);
progressbar->setValue(0);
origine = new QLabel(this); //déclare le label origine
destination = new QLabel(this);
lbldossier = new QLabel(this);
groupbox = new QGroupBox("(Information) Disques reliés: ", this); //déclare le groupbox
QDirModel *modele = new QDirModel; //liste les disques
QTreeView *vue = new QTreeView; //déclare le style d'affichage du QDirModel
vue->setModel(modele); //insère la liste des disques dans QTreeView
vbox2 = new QVBoxLayout;
vbox2->addWidget(vue); //ajoute le QTreeView au layout vbox2
groupbox->setLayout(vbox2); //ajoute le layout vbox2 dans le groupbox
etat = new QLabel(this);
// Positionnement des widgets sur la fenetre
vbox1->addWidget(boutonSelect1, 0, 0);
vbox1->addWidget(origine, 0, 1);
vbox1->addWidget(groupbox, 0, 2, 5, 1);
vbox1->addWidget(boutonSelect2, 1, 0);
vbox1->addWidget(destination, 1, 1);
vbox1->addWidget(boutonSelect3, 2, 0);
vbox1->addWidget(lbldossier, 2, 1);
vbox1->addWidget(m_synchroniser, 3, 0, 1, 2);
vbox1->addWidget(m_apropos, 4, 0);
vbox1->addWidget(m_quitter, 4, 1);
vbox1->addWidget(etat, 5, 0);
vbox1->addWidget(progressbar, 6, 0, 1, 3);
setLayout(vbox1); //insère le layout vbox1 dans la fenetre
//connexion des boutons
QObject::connect(boutonSelect1, SIGNAL(clicked()), this, SLOT(afficher1()));
QObject::connect(boutonSelect2, SIGNAL(clicked()), this, SLOT(afficher2()));
QObject::connect(boutonSelect3, SIGNAL(clicked()), this, SLOT(afficher3()));
QObject::connect(m_quitter, SIGNAL(clicked()), this, SLOT(ouvrir()));
QObject::connect(m_apropos, SIGNAL(clicked()), this, SLOT(propos()));
QObject::connect(m_synchroniser, SIGNAL(clicked()), this, SLOT(synchro()));
}
void MaFenetre::ouvrir()
{
int reponse = QMessageBox::warning(this, "Quitter", "Voulez-vous vraiment quitter?", QMessageBox::Yes | QMessageBox::No);
if (reponse == QMessageBox::Yes)
{
QObject::connect(m_oui, SIGNAL(clicked()), qApp, SLOT(quit()));
}
else if (reponse == QMessageBox::No)
{
}
}
void MaFenetre::propos()
{
QMessageBox::information(this, "A propos", "S1kronize a été développé par <strong>Tib</strong> à l'aide du <a href=\"<a href="http://www.siteduzero.com" target="_blank">http://www.siteduzero.com</a>\">Site du Zéro</a>.<br /> Ce programme permet de synchroniser 2 périphériques simultanément. <br />License: aucune (Peut être librement partagé).");
}
void MaFenetre::afficher1()
{
bool ok = false;
lettreO = QInputDialog::getText(this, "Lettre de disque d'origine", "Saisir la lettre du disque d'origine (ex: D)", QLineEdit::Normal, QString(), &ok);
if (ok && !lettreO.isEmpty()) //vérifie que le champ n'est pas vide
{
origine->setText("Elément d'origine--> " + lettreO); //attribue cette valeur au label origine
select1 = lettreO.toStdString().c_str(); //converti lettreO en const char
}
else
{
QMessageBox::warning(this, "Attention", "Aucune lettre n'a été saisie!"); //si champ vide, affiche ce message
}
}
void MaFenetre::afficher2()
{
bool ok = false;
lettreD = QInputDialog::getText(this, "Lettre de disque de destination", "Saisir la lettre du disque de destination (ex: F)", QLineEdit::Normal, QString(), &ok);
if (ok && !lettreD.isEmpty())
{
destination->setText("Elément de destination--> " + lettreD);
select2 = lettreD.toStdString().c_str(); //converti lettreD en const char
}
else
{
QMessageBox::warning(this, "Attention", "Aucune lettre n'a été saisie!");
}
}
void MaFenetre::afficher3()
{
bool ok = false;
dossier = QInputDialog::getText(this, "Dossier", "Saisir le nom du dossier à synchroniser", QLineEdit::Normal, QString(), &ok);
if (ok && !dossier.isEmpty())
{
lbldossier->setText("Dossier--> " + dossier);
select3 = dossier.toStdString().c_str(); //converti dossier en const char
}
else
{
QMessageBox::warning(this, "Attention", "Aucun nom de dossier n'a été saisi");
}
}
void MaFenetre::synchro()
{
QString source;
source = lettreO + ":\\" + dossier + ":\\";
QString destination;
destination = lettreD + ":\\" + dossier + ":\\";
//on crée le dossier dans le disque de destination s'il n'existe pas
QDir dir;
dir.mkpath(lettreD + ":\\" + dossier);
//on se place dans le dossier d'origine spécifié auparavant
QDir::setCurrent(source);
QDir dirSource(source);
//on choisit de copier tous les types de fichiers
QStringList filtre;
filtre << "*.*";
dirSource.setNameFilters(filtre);
//on récupère le nombre de fichiers contenus dans le filtre et donc dans le dossier
int nombre_de_fichiers = dirSource.count();
//stocke le nom du fichier en cours de copie
QString nom_du_fichier;
//On boucle sur le nombre de fichiers contenus dans le répertoire pour tout copier
int i;
for (i=0 ; i < nombre_de_fichiers ; i++ )
{
QString sourcefile;
QString destinationfile;
//on récupère les noms de fichiers stockés dans le filtre et on les stocke
nom_du_fichier = dirSource.entryList(filtre).at(i);
if (nom_du_fichier != "." && nom_du_fichier != "..")
{
//on concatène les chemins source et destination avec le nom du fichier en cours pour passer a la copie
sourcefile = source + nom_du_fichier;
destinationfile = destination + nom_du_fichier;
//affichage du chemin source concaténé avec le nom du fichier en cours de copie
etat->setText("Source: " + sourcefile);
// on effectue la copie
QFile file(sourcefile);
file.copy(destinationfile);
}
}
progressbar->setValue(100);
}