/* Composant du projet recordStation, CopyLeft Etienne RABY 2009-2010 L'intégralité de se fichier est soumis aux contraintes de la Licence CeCILL-B. Une copie doit avoir été fournie avec ce fichier. Si ce n'est pas le cas, voir le site internet : http://www.cecill.info */ #include "MainWindow.h" /*! \brief Constructeur */ MainWindow::MainWindow( QWidget* parent ) : QMainWindow( parent ) { qDebug() << "Info :" << "Demarage de la fenetre principale"; setupUi( this ); this->setStyleSheet("MainWindow{background-image: url(:/Fonts/brushedmetal);}"); fileAndFolderAnalizer = new FolderAnalizer(this); UMS_Tester = new UmsManager(); Recorder = new AudioRec(); Encoder = new AudioEnc(); completerArtist=NULL; completerAlbum=NULL; completerTitle=NULL; this->UMSDeviceStatusChanged(false); this->ConnectLand(); this->SetLang();//Connectland DOIT être appelé avant Slider_Qualite->setMinimum(0); Slider_Qualite->setMaximum(13); Slider_Qualite->setValue(3); UMS_Tester->StartTestUMS(); qDebug() << "Info :" << "Processus de demarage termine."; qDebug() << " "; } /*! \brief Destructeur */ MainWindow::~MainWindow() { qDebug() << "Info :" << "Arret de la fenetre principale"; } /*! \brief Insertion des textes (permet une traduction simplifiée grace à linguist) */ void MainWindow::SetLang() { //MainWindow QString MainTitle(PACKAGE_VERSION); MainTitle.insert(0," V"); MainTitle.insert(0,PACKAGE_NAME); this->setWindowTitle(MainTitle); //Button Btn_ShowRecordSetting->setText(trUtf8("Préparer l'enregistrement")); Btn_RecordSettings_Cancel->setText(trUtf8("Annuler")); Btn_Record_Start->setText(trUtf8("Enregistrer")); Btn_StopRec->setText(trUtf8("Finir l'enregistrement")); Btn_FinishRecording->setText(trUtf8("Retour à la page d'accueil")); Btn_EjectKey->setText(trUtf8("Ejecter la clef USB")); Btn_ShowSoundSetting->setText(trUtf8("Régler le niveau sonore d'entrée.")); Btn_LaunchGnomeVolume->setText(trUtf8("Réglages Avancés")); Btn_EndSetting->setText(trUtf8("Valider")); //Label Lbl_Titre->setText(trUtf8("Nom de la chanson")); Lbl_Artiste->setText(trUtf8("Nom de l'artiste")); Lbl_Album->setText(trUtf8("Nom de l'album")); Lbl_PlugUSB_Text->setText(trUtf8("Branchez une clef USB")); Lbl_Info_Setting_Sound->setText(trUtf8("Lancez la lecture de votre musique et réglez le volume afin que le son émis par la station d'encodage ne soit pas saturé mais bien audible.")); Lbl_Rec_Text_Rec->setText(trUtf8("Enregistrement")); Lbl_Rec_Text_Enc->setText(trUtf8("Encodage")); Lbl_Rec_Text_Tag->setText(trUtf8("Insertion des informations (Tags)")); //Line Edit LEdit_Titre->setText(trUtf8("Titre_inconnu")); LEdit_Artiste->setText(trUtf8("Artiste_inconnu")); LEdit_Album->setText(trUtf8("Album_inconnu")); } /*! \brief Connections SIGNAUX/SLOTS (appelé par le constructeur) */ void MainWindow::ConnectLand() { //Changement de page connect(Btn_RecordSettings_Cancel, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); connect(Btn_FinishRecording, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); connect(Btn_EndSetting, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); connect(Btn_ShowSoundSetting, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); connect(Btn_ShowRecordSetting, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); connect(Btn_Record_Start, SIGNAL(clicked()), this, SLOT(switchStackedWidgetPage())); //USB connect(Btn_EjectKey, SIGNAL(clicked()), UMS_Tester, SLOT(EjectUMS())); connect(UMS_Tester, SIGNAL(stateChanged(bool)), this, SLOT(UMSDeviceStatusChanged(bool))); //Réglage RecordType connect(Slider_Qualite,SIGNAL(valueChanged(int)), Encoder, SLOT(setQuality(int))); connect(Encoder,SIGNAL(infoBitRateSelected(int)),this,SLOT(setRecordQualityRefeshInfo(int))); connect(LEdit_Artiste, SIGNAL(textChanged(QString)), this, SLOT(tagsChanged(QString))); connect(LEdit_Album, SIGNAL(textChanged(QString)), this, SLOT(tagsChanged(QString))); connect(LEdit_Titre, SIGNAL(textChanged(QString)), this, SLOT(tagsChanged(QString))); //Enregistrement connect(Btn_StopRec, SIGNAL(clicked()), Recorder, SLOT(stopRecord())); connect(Recorder, SIGNAL(recFinished(int)), this, SLOT(processEnded(int))); connect(Encoder, SIGNAL(tagFinished(int)), this, SLOT(processEnded(int))); //CompletionMode connect(fileAndFolderAnalizer, SIGNAL(newListItem(QStringList, QLineEdit*)), this, SLOT(setCompletion(QStringList, QLineEdit*))); } /*! \brief SLOT changeant la page du MainStackedWidget La page est déterminée à l'aide de l'utilisation de sender() \note Si la fonction est appelére par un objet inconnue, la page renvoyée est celle d'accueil. */ void MainWindow::switchStackedWidgetPage() { if(sender()==Btn_RecordSettings_Cancel) { if(completerArtist!=NULL){delete completerArtist;completerArtist=NULL;} if(completerArtist!=NULL){delete completerAlbum;completerAlbum=NULL;} if(completerArtist!=NULL){delete completerTitle;completerTitle=NULL;} MainStackedWidget->setCurrentIndex(0); } else if(sender()==Btn_FinishRecording) { Recorder->deleteTmpFile(); if(completerArtist!=NULL){delete completerArtist;completerArtist=NULL;} if(completerArtist!=NULL){delete completerAlbum;completerAlbum=NULL;} if(completerArtist!=NULL){delete completerTitle;completerTitle=NULL;} // Lbl_Rec_Img_Rec->setPixmap(QPixmap()); // Lbl_Rec_Img_Enc->setPixmap(QPixmap()); // Lbl_Rec_Img_Tag->setPixmap(QPixmap()); Spinner_Rec_Img_Rec->setImage(":/Textures/Spinner.png");//QPixmap(":/Status/Succes")); Spinner_Rec_Img_Rec->setSpeed(15, 5); Spinner_Rec_Img_Enc->setImage(":/Textures/Spinner.png");//QPixmap(":/Status/Succes")); Spinner_Rec_Img_Enc->setSpeed(15, 5); Spinner_Rec_Img_Tag->setImage(":/Textures/Spinner.png");//QPixmap(":/Status/Succes")); Spinner_Rec_Img_Tag->setSpeed(15, 5); Btn_StopRec->setEnabled(true); Btn_FinishRecording->setEnabled(false); MainStackedWidget->setCurrentIndex(0); } else if(sender()==Btn_EndSetting) {MainStackedWidget->setCurrentIndex(0);} else if(sender()==Btn_ShowSoundSetting) {MainStackedWidget->setCurrentIndex(3);} else if(sender()==Btn_ShowRecordSetting) { fileAndFolderAnalizer->setPath(UMS_Tester->getUMSPath()); fileAndFolderAnalizer->enableListFile(false); fileAndFolderAnalizer->enableListFolder(true); fileAndFolderAnalizer->setReceiver(LEdit_Artiste); fileAndFolderAnalizer->run(); MainStackedWidget->setCurrentIndex(1); } else if(sender()==Btn_Record_Start) { MainStackedWidget->setCurrentIndex(2); Recorder->startRecord(); } else { if(completerArtist!=NULL){delete completerArtist;completerArtist=NULL;} if(completerArtist!=NULL){delete completerAlbum;completerAlbum=NULL;} if(completerArtist!=NULL){delete completerTitle;completerTitle=NULL;} MainStackedWidget->setCurrentIndex(0); } } /*! \brief SLOT appelé lors d'un changement d'état de périphérique UMS */ void MainWindow::UMSDeviceStatusChanged(bool Status) { if(!Status) { switchStackedWidgetPage();//Retour page d'acceuil en supprimant les Completions Btn_ShowRecordSetting->setEnabled(false); Btn_EjectKey->setEnabled(false); Lbl_PlugUSB_Text->setVisible(true); Lbl_PlugUSB_Img->setVisible(true); } else { Btn_ShowRecordSetting->setEnabled(true); Btn_EjectKey->setEnabled(true); Lbl_PlugUSB_Text->setVisible(false); Lbl_PlugUSB_Img->setVisible(false); } } /*! \brief Mise à jour du label d'information de qualité d'enregistrement. SLOT appelé lors d'un changement de réglage de qualité d'enregistrement. */ void MainWindow::setRecordQualityRefeshInfo(int kbits) { Lbl_Qualite->setText(trUtf8("Qualité de l'enregistrement : ") + QString::number(kbits) + trUtf8("kbps")); } /*! \brief SLOT appelé lorque un tag est modifié. */ void MainWindow::tagsChanged(QString newTag) { if(sender()==LEdit_Artiste) { Encoder->setArtist(newTag); fileAndFolderAnalizer->setPath(UMS_Tester->getUMSPath() + "/" + newTag); fileAndFolderAnalizer->enableListFile(false); fileAndFolderAnalizer->enableListFolder(true); fileAndFolderAnalizer->setReceiver(LEdit_Album); fileAndFolderAnalizer->run(); } else if(sender()==LEdit_Album) { Encoder->setAlbum(newTag); } else if(sender()==LEdit_Titre) { Encoder->setTitle(newTag); } } /*! \brief SLOT appelé lors de la fin d'une partie du processus d'enregistrement pour lancer la suivante. \todo HIGHT : prendre en compte Encoder->encFinished(int) */ void MainWindow::processEnded(int exitCode) { if(sender()==Recorder) { Btn_StopRec->setEnabled(false); //Lbl_Rec_Img_Rec->setPixmap(QPixmap(":/Status/Succes")); //Spinner_Rec_Img_Rec->setPixmap(QPixmap(":/Status/Succes")); Spinner_Rec_Img_Rec->setImage(":/Status/Succes32");//QPixmap(":/Status/Succes")); Spinner_Rec_Img_Rec->setSpeed(0, 0, true); Encoder->setDestPath(UMS_Tester->getUMSPath()); Encoder->startEnc(); } else if(sender()==Encoder) { Btn_FinishRecording->setEnabled(true); if(exitCode==0) { Spinner_Rec_Img_Enc->setImage(":/Status/Succes32"); Spinner_Rec_Img_Enc->setSpeed(0, 0, true); Spinner_Rec_Img_Tag->setImage(":/Status/Succes32"); Spinner_Rec_Img_Tag->setSpeed(0, 0, true); } else { Spinner_Rec_Img_Enc->setImage(":/Status/Error"); Spinner_Rec_Img_Enc->setSpeed(0, 0, true); Spinner_Rec_Img_Tag->setImage(":/Status/Error"); Spinner_Rec_Img_Tag->setSpeed(0, 0, true); } } } void MainWindow::setCompletion(QStringList Items, QLineEdit* Receiver) { if(Receiver==LEdit_Artiste) { completerArtist = new QCompleter(Items, this); completerArtist->setCaseSensitivity(Qt::CaseInsensitive); Receiver->setCompleter(completerArtist); } else if(Receiver==LEdit_Album) { completerAlbum = new QCompleter(Items, this); completerAlbum->setCaseSensitivity(Qt::CaseInsensitive); Receiver->setCompleter(completerAlbum); } else if(Receiver==LEdit_Titre) { completerTitle = new QCompleter(Items, this); completerTitle->setCaseSensitivity(Qt::CaseInsensitive); Receiver->setCompleter(completerTitle); } }