/** * @brief Sets the current concert, tells the concert to load data and images and updates widgets contents * @param concert Current concert */ void ConcertWidget::setConcert(Concert *concert) { qDebug() << "Entered, concert=" << concert->name(); concert->loadData(Manager::instance()->mediaCenterInterfaceConcert()); m_concert = concert; updateConcertInfo(); if (concert->downloadsInProgress()) setDisabledTrue(); else setEnabledTrue(); }
/** * @brief Shows the search widget */ void ConcertWidget::onStartScraperSearch() { qDebug() << "Entered"; if (m_concert == 0) { qDebug() << "My concert is invalid"; return; } emit setActionSearchEnabled(false, WidgetConcerts); emit setActionSaveEnabled(false, WidgetConcerts); ConcertSearch::instance()->exec(m_concert->name()); if (ConcertSearch::instance()->result() == QDialog::Accepted) { setDisabledTrue(); m_concert->loadData(ConcertSearch::instance()->scraperId(), Manager::instance()->concertScrapers().at(ConcertSearch::instance()->scraperNo()), ConcertSearch::instance()->infosToLoad()); connect(m_concert, SIGNAL(loaded(Concert*)), this, SLOT(infoLoadDone(Concert*)), Qt::UniqueConnection); } else {
/** * @brief Sets the current concert, tells the concert to load data and images and updates widgets contents * @param concert Current concert */ void ConcertWidget::setConcert(Concert *concert) { qDebug() << "Entered, concert=" << concert->name(); concert->loadData(Manager::instance()->mediaCenterInterfaceConcert()); m_concert = concert; if (!concert->streamDetailsLoaded() && Settings::instance()->autoLoadStreamDetails()) { concert->loadStreamDetailsFromFile(); if (concert->streamDetailsLoaded() && concert->streamDetails()->videoDetails().value("durationinseconds").toInt() != 0) concert->setRuntime(qFloor(concert->streamDetails()->videoDetails().value("durationinseconds").toInt()/60)); } updateConcertInfo(); if (concert->downloadsInProgress()) setDisabledTrue(); else setEnabledTrue(); }
/** * @brief ConcertWidget::ConcertWidget * @param parent */ ConcertWidget::ConcertWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ConcertWidget) { ui->setupUi(this); ui->concertName->clear(); ui->artStackedWidget->setAnimation(QEasingCurve::OutCubic); ui->artStackedWidget->setSpeed(300); QFont font = ui->concertName->font(); font.setPointSize(font.pointSize()+4); ui->concertName->setFont(font); m_concert = 0; m_posterDownloadManager = new DownloadManager(this); connect(ui->poster, SIGNAL(clicked()), this, SLOT(chooseConcertPoster())); connect(ui->backdrop, SIGNAL(clicked()), this, SLOT(chooseConcertBackdrop())); connect(ui->logo, SIGNAL(clicked()), this, SLOT(chooseConcertLogo())); connect(ui->clearArt, SIGNAL(clicked()), this, SLOT(chooseConcertClearArt())); connect(ui->cdArt, SIGNAL(clicked()), this, SLOT(chooseConcertCdArt())); connect(ui->poster, SIGNAL(sigClose()), this, SLOT(deleteConcertPoster())); connect(ui->backdrop, SIGNAL(sigClose()), this, SLOT(deleteConcertBackdrop())); connect(ui->logo, SIGNAL(sigClose()), this, SLOT(deleteConcertLogo())); connect(ui->clearArt, SIGNAL(sigClose()), this, SLOT(deleteConcertClearArt())); connect(ui->cdArt, SIGNAL(sigClose()), this, SLOT(deleteConcertCdArt())); connect(m_posterDownloadManager, SIGNAL(downloadFinished(DownloadManagerElement)), this, SLOT(posterDownloadFinished(DownloadManagerElement))); connect(ui->name, SIGNAL(textChanged(QString)), this, SLOT(concertNameChanged(QString))); connect(ui->buttonRevert, SIGNAL(clicked()), this, SLOT(onRevertChanges())); connect(ui->buttonReloadStreamDetails, SIGNAL(clicked()), this, SLOT(onReloadStreamDetails())); ui->genreCloud->setText(tr("Genres")); ui->genreCloud->setPlaceholder(tr("Add Genre")); connect(ui->genreCloud, SIGNAL(activated(QString)), this, SLOT(addGenre(QString))); connect(ui->genreCloud, SIGNAL(deactivated(QString)), this, SLOT(removeGenre(QString))); ui->tagCloud->setText(tr("Tags")); ui->tagCloud->setPlaceholder(tr("Add Tag")); connect(ui->tagCloud, SIGNAL(activated(QString)), this, SLOT(addTag(QString))); connect(ui->tagCloud, SIGNAL(deactivated(QString)), this, SLOT(removeTag(QString))); ui->poster->setDefaultPixmap(QPixmap(":/img/film_reel.png")); ui->backdrop->setDefaultPixmap(QPixmap(":/img/pictures_alt.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->logo->setDefaultPixmap(QPixmap(":/img/pictures_alt.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->clearArt->setDefaultPixmap(QPixmap(":/img/pictures_alt.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->cdArt->setDefaultPixmap(QPixmap(":/img/pictures_alt.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); m_loadingMovie = new QMovie(":/img/spinner.gif"); m_loadingMovie->start(); setDisabledTrue(); clear(); m_savingWidget = new QLabel(this); m_savingWidget->setMovie(m_loadingMovie); m_savingWidget->hide(); connect(ui->fanarts, SIGNAL(sigRemoveImage(QByteArray)), this, SLOT(onRemoveExtraFanart(QByteArray))); connect(ui->fanarts, SIGNAL(sigRemoveImage(QString)), this, SLOT(onRemoveExtraFanart(QString))); connect(ui->btnAddExtraFanart, SIGNAL(clicked()), this, SLOT(onAddExtraFanart())); // Connect GUI change events to concert object connect(ui->name, SIGNAL(textEdited(QString)), this, SLOT(onNameChange(QString))); connect(ui->artist, SIGNAL(textEdited(QString)), this, SLOT(onArtistChange(QString))); connect(ui->album, SIGNAL(textEdited(QString)), this, SLOT(onAlbumChange(QString))); connect(ui->tagline, SIGNAL(textEdited(QString)), this, SLOT(onTaglineChange(QString))); connect(ui->rating, SIGNAL(valueChanged(double)), this, SLOT(onRatingChange(double))); connect(ui->trailer, SIGNAL(textEdited(QString)), this, SLOT(onTrailerChange(QString))); connect(ui->runtime, SIGNAL(valueChanged(int)), this, SLOT(onRuntimeChange(int))); connect(ui->playcount, SIGNAL(valueChanged(int)), this, SLOT(onPlayCountChange(int))); connect(ui->certification, SIGNAL(editTextChanged(QString)), this, SLOT(onCertificationChange(QString))); connect(ui->watched, SIGNAL(stateChanged(int)), this, SLOT(onWatchedChange(int))); connect(ui->released, SIGNAL(dateChanged(QDate)), this, SLOT(onReleasedChange(QDate))); connect(ui->lastPlayed, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onLastWatchedChange(QDateTime))); connect(ui->overview, SIGNAL(textChanged()), this, SLOT(onOverviewChange())); connect(ui->videoAspectRatio, SIGNAL(valueChanged(double)), this, SLOT(onStreamDetailsEdited())); connect(ui->videoCodec, SIGNAL(textEdited(QString)), this, SLOT(onStreamDetailsEdited())); connect(ui->videoDuration, SIGNAL(timeChanged(QTime)), this, SLOT(onStreamDetailsEdited())); connect(ui->videoHeight, SIGNAL(valueChanged(int)), this, SLOT(onStreamDetailsEdited())); connect(ui->videoWidth, SIGNAL(valueChanged(int)), this, SLOT(onStreamDetailsEdited())); connect(ui->videoScantype, SIGNAL(textEdited(QString)), this, SLOT(onStreamDetailsEdited())); QPainter p; QPixmap revert(":/img/arrow_circle_left.png"); p.begin(&revert); p.setCompositionMode(QPainter::CompositionMode_SourceIn); p.fillRect(revert.rect(), QColor(0, 0, 0, 200)); p.end(); ui->buttonRevert->setIcon(QIcon(revert)); ui->buttonRevert->setVisible(false); }
/** * @brief ConcertWidget::ConcertWidget * @param parent */ ConcertWidget::ConcertWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ConcertWidget) { ui->setupUi(this); ui->concertName->clear(); ui->genres->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); ui->buttonPreviewPoster->setEnabled(false); ui->buttonPreviewBackdrop->setEnabled(false); ui->buttonPreviewLogo->setEnabled(false); ui->buttonPreviewClearArt->setEnabled(false); ui->buttonPreviewCdArt->setEnabled(false); QFont font = ui->concertName->font(); font.setPointSize(font.pointSize()+4); ui->concertName->setFont(font); font = ui->posterResolution->font(); #ifdef Q_WS_WIN font.setPointSize(font.pointSize()-1); #else font.setPointSize(font.pointSize()-2); #endif ui->posterResolution->setFont(font); ui->backdropResolution->setFont(font); ui->logoResolution->setFont(font); ui->clearArtResolution->setFont(font); ui->cdArtResolution->setFont(font); ui->genres->setItemDelegate(new ComboDelegate(ui->genres, WidgetConcerts, ComboDelegateGenres)); m_concert = 0; m_posterDownloadManager = new DownloadManager(this); connect(ui->poster, SIGNAL(clicked()), this, SLOT(chooseConcertPoster())); connect(ui->backdrop, SIGNAL(clicked()), this, SLOT(chooseConcertBackdrop())); connect(ui->logo, SIGNAL(clicked()), this, SLOT(chooseConcertLogo())); connect(ui->clearArt, SIGNAL(clicked()), this, SLOT(chooseConcertClearArt())); connect(ui->cdArt, SIGNAL(clicked()), this, SLOT(chooseConcertCdArt())); connect(m_posterDownloadManager, SIGNAL(downloadFinished(DownloadManagerElement)), this, SLOT(posterDownloadFinished(DownloadManagerElement))); connect(ui->name, SIGNAL(textChanged(QString)), this, SLOT(concertNameChanged(QString))); connect(ui->buttonAddGenre, SIGNAL(clicked()), this, SLOT(addGenre())); connect(ui->buttonRemoveGenre, SIGNAL(clicked()), this, SLOT(removeGenre())); connect(ui->genres, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(onGenreEdited(QTableWidgetItem*))); connect(ui->buttonPreviewPoster, SIGNAL(clicked()), this, SLOT(onPreviewPoster())); connect(ui->buttonPreviewBackdrop, SIGNAL(clicked()), this, SLOT(onPreviewBackdrop())); connect(ui->buttonPreviewLogo, SIGNAL(clicked()), this, SLOT(onPreviewLogo())); connect(ui->buttonPreviewClearArt, SIGNAL(clicked()), this, SLOT(onPreviewClearArt())); connect(ui->buttonPreviewCdArt, SIGNAL(clicked()), this, SLOT(onPreviewCdArt())); connect(ui->buttonRevert, SIGNAL(clicked()), this, SLOT(onRevertChanges())); m_loadingMovie = new QMovie(":/img/spinner.gif"); m_loadingMovie->start(); setDisabledTrue(); clear(); m_savingWidget = new QLabel(this); m_savingWidget->setMovie(m_loadingMovie); m_savingWidget->hide(); // Connect GUI change events to concert object connect(ui->name, SIGNAL(textEdited(QString)), this, SLOT(onNameChange(QString))); connect(ui->tagline, SIGNAL(textEdited(QString)), this, SLOT(onTaglineChange(QString))); connect(ui->rating, SIGNAL(valueChanged(double)), this, SLOT(onRatingChange(double))); connect(ui->trailer, SIGNAL(textEdited(QString)), this, SLOT(onTrailerChange(QString))); connect(ui->runtime, SIGNAL(valueChanged(int)), this, SLOT(onRuntimeChange(int))); connect(ui->playcount, SIGNAL(valueChanged(int)), this, SLOT(onPlayCountChange(int))); connect(ui->certification, SIGNAL(editTextChanged(QString)), this, SLOT(onCertificationChange(QString))); connect(ui->watched, SIGNAL(stateChanged(int)), this, SLOT(onWatchedChange(int))); connect(ui->released, SIGNAL(dateChanged(QDate)), this, SLOT(onReleasedChange(QDate))); connect(ui->lastPlayed, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onLastWatchedChange(QDateTime))); connect(ui->overview, SIGNAL(textChanged()), this, SLOT(onOverviewChange())); QPixmap zoomIn(":/img/zoom_in.png"); QPainter p; p.begin(&zoomIn); p.setCompositionMode(QPainter::CompositionMode_SourceIn); p.fillRect(zoomIn.rect(), QColor(0, 0, 0, 150)); p.end(); ui->buttonPreviewBackdrop->setIcon(QIcon(zoomIn)); ui->buttonPreviewPoster->setIcon(QIcon(zoomIn)); ui->buttonPreviewLogo->setIcon(QIcon(zoomIn)); ui->buttonPreviewClearArt->setIcon(QIcon(zoomIn)); ui->buttonPreviewCdArt->setIcon(QIcon(zoomIn)); QPixmap revert(":/img/arrow_circle_left.png"); p.begin(&revert); p.setCompositionMode(QPainter::CompositionMode_SourceIn); p.fillRect(revert.rect(), QColor(0, 0, 0, 200)); p.end(); ui->buttonRevert->setIcon(QIcon(revert)); ui->buttonRevert->setVisible(false); }
/** * @brief MainWindow::MainWindow * @param parent */ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); MainWindow::m_instance = this; qDebug() << "MediaElch version" << QApplication::applicationVersion() << "starting up"; for (int i=WidgetMovies ; i!=WidgetCertifications ; i++) { QMap<MainActions, bool> actions; for (int n=ActionSearch ; n!=ActionExport ; n++) { actions.insert(static_cast<MainActions>(n), false); } if (static_cast<MainWidgets>(i) == WidgetMovies || static_cast<MainWidgets>(i) == WidgetTvShows || static_cast<MainWidgets>(i) == WidgetConcerts) actions[ActionFilterWidget] = true; m_actions.insert(static_cast<MainWidgets>(i), actions); } m_aboutDialog = new AboutDialog(ui->centralWidget); m_supportDialog = new SupportDialog(ui->centralWidget); m_settingsWindow = new SettingsWindow(ui->centralWidget); m_filterWidget = new FilterWidget(); m_fileScannerDialog = new FileScannerDialog(ui->centralWidget); m_xbmcSync = new XbmcSync(ui->centralWidget); m_renamer = new Renamer(ui->centralWidget); m_settings = Settings::instance(this); m_exportDialog = new ExportDialog(this); setupToolbar(); MessageBox::instance(this)->reposition(this->size()); Manager::instance(); if (!m_settings->mainSplitterState().isNull()) { ui->movieSplitter->restoreState(m_settings->mainSplitterState()); ui->tvShowSplitter->restoreState(m_settings->mainSplitterState()); ui->setsWidget->splitter()->restoreState(m_settings->mainSplitterState()); ui->concertSplitter->restoreState(m_settings->mainSplitterState()); ui->genreWidget->splitter()->restoreState(m_settings->mainSplitterState()); ui->certificationWidget->splitter()->restoreState(m_settings->mainSplitterState()); } if (m_settings->mainWindowSize().isValid() && !m_settings->mainWindowPosition().isNull()) { #ifdef Q_OS_MAC // Ugly workaround from https://bugreports.qt-project.org/browse/QTBUG-3116 // to fix invisible toolbar on mac bool workaround = !isVisible(); if (workaround) { // make "invisible" setWindowOpacity(0); // let Qt update its frameStruts show(); } resize(m_settings->mainWindowSize()); if (workaround) { move(m_settings->mainWindowPosition()); setWindowOpacity(1); } #else resize(m_settings->mainWindowSize()); move(m_settings->mainWindowPosition()); #endif #ifdef Q_OS_WIN32 if (m_settings->mainWindowMaximized()) showMaximized(); #endif } // Size for Screenshots // resize(1121, 735); #ifdef Q_OS_MAC MacFullscreen::addFullscreen(this); #endif connect(ui->filesWidget, SIGNAL(movieSelected(Movie*)), ui->movieWidget, SLOT(setMovie(Movie*))); connect(ui->filesWidget, SIGNAL(movieSelected(Movie*)), ui->movieWidget, SLOT(setEnabledTrue(Movie*))); connect(ui->filesWidget, SIGNAL(noMovieSelected()), ui->movieWidget, SLOT(clear())); connect(ui->filesWidget, SIGNAL(noMovieSelected()), ui->movieWidget, SLOT(setDisabledTrue())); connect(ui->filesWidget, SIGNAL(sigStartSearch()), this, SLOT(onActionSearch())); connect(ui->concertFilesWidget, SIGNAL(concertSelected(Concert*)), ui->concertWidget, SLOT(setConcert(Concert*))); connect(ui->concertFilesWidget, SIGNAL(concertSelected(Concert*)), ui->concertWidget, SLOT(setEnabledTrue(Concert*))); connect(ui->concertFilesWidget, SIGNAL(noConcertSelected()), ui->concertWidget, SLOT(clear())); connect(ui->concertFilesWidget, SIGNAL(noConcertSelected()), ui->concertWidget, SLOT(setDisabledTrue())); connect(ui->tvShowFilesWidget, SIGNAL(sigTvShowSelected(TvShow*)), ui->tvShowWidget, SLOT(onTvShowSelected(TvShow*))); connect(ui->tvShowFilesWidget, SIGNAL(sigSeasonSelected(TvShow*,int)), ui->tvShowWidget, SLOT(onSeasonSelected(TvShow*,int))); connect(ui->tvShowFilesWidget, SIGNAL(sigEpisodeSelected(TvShowEpisode*)), ui->tvShowWidget, SLOT(onEpisodeSelected(TvShowEpisode*))); connect(ui->tvShowFilesWidget, SIGNAL(sigTvShowSelected(TvShow*)), ui->tvShowWidget, SLOT(onSetEnabledTrue(TvShow*))); connect(ui->tvShowFilesWidget, SIGNAL(sigSeasonSelected(TvShow*,int)), ui->tvShowWidget, SLOT(onSetEnabledTrue(TvShow*, int))); connect(ui->tvShowFilesWidget, SIGNAL(sigEpisodeSelected(TvShowEpisode*)), ui->tvShowWidget, SLOT(onSetEnabledTrue(TvShowEpisode*))); connect(ui->tvShowFilesWidget, SIGNAL(sigNothingSelected()), ui->tvShowWidget, SLOT(onClear())); connect(ui->tvShowFilesWidget, SIGNAL(sigNothingSelected()), ui->tvShowWidget, SLOT(onSetDisabledTrue())); connect(ui->movieWidget, SIGNAL(actorDownloadProgress(int,int,int)), this, SLOT(progressProgress(int,int,int))); connect(ui->movieWidget, SIGNAL(actorDownloadStarted(QString,int)), this, SLOT(progressStarted(QString,int))); connect(ui->movieWidget, SIGNAL(actorDownloadFinished(int)), this, SLOT(progressFinished(int))); connect(ui->tvShowWidget, SIGNAL(sigDownloadsStarted(QString,int)), this, SLOT(progressStarted(QString,int))); connect(ui->tvShowWidget, SIGNAL(sigDownloadsProgress(int,int,int)), this, SLOT(progressProgress(int,int,int))); connect(ui->tvShowWidget, SIGNAL(sigDownloadsFinished(int)), this, SLOT(progressFinished(int))); connect(m_filterWidget, SIGNAL(sigFilterChanged(QList<Filter*>,QString)), this, SLOT(onFilterChanged(QList<Filter*>,QString))); connect(ui->movieSplitter, SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(ui->tvShowSplitter, SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(ui->setsWidget->splitter(), SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(ui->genreWidget->splitter(), SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(ui->certificationWidget->splitter(), SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(ui->concertSplitter, SIGNAL(splitterMoved(int,int)), this, SLOT(moveSplitter(int,int))); connect(Manager::instance()->tvShowFileSearcher(), SIGNAL(tvShowsLoaded(int)), ui->tvShowFilesWidget, SLOT(renewModel())); connect(m_fileScannerDialog, SIGNAL(accepted()), this, SLOT(setNewMarks())); connect(m_xbmcSync, SIGNAL(sigTriggerReload()), this, SLOT(onTriggerReloadAll())); connect(m_xbmcSync, SIGNAL(sigFinished()), this, SLOT(onXbmcSyncFinished())); connect(m_renamer, SIGNAL(sigFilesRenamed(Renamer::RenameType)), this, SLOT(onFilesRenamed(Renamer::RenameType))); connect(m_settingsWindow, SIGNAL(sigSaved()), this, SLOT(onRenewModels()), Qt::QueuedConnection); connect(ui->setsWidget, SIGNAL(sigJumpToMovie(Movie*)), this, SLOT(onJumpToMovie(Movie*))); connect(ui->certificationWidget, SIGNAL(sigJumpToMovie(Movie*)), this, SLOT(onJumpToMovie(Movie*))); connect(ui->genreWidget, SIGNAL(sigJumpToMovie(Movie*)), this, SLOT(onJumpToMovie(Movie*))); MovieSearch::instance(ui->centralWidget); TvShowSearch::instance(ui->centralWidget); ImageDialog::instance(ui->centralWidget); MovieListDialog::instance(ui->centralWidget); ImagePreviewDialog::instance(ui->centralWidget); ConcertSearch::instance(ui->centralWidget); TrailerDialog::instance(ui->centralWidget); TvTunesDialog::instance(ui->centralWidget); NameFormatter::instance(this); MovieMultiScrapeDialog::instance(ui->centralWidget); #ifdef Q_OS_WIN32 setStyleSheet(styleSheet() + " #centralWidget { border-bottom: 1px solid rgba(0, 0, 0, 100); } "); QFont font = ui->labelMovies->font(); font.setPointSize(font.pointSize()-3); font.setBold(true); ui->labelMovies->setFont(font); ui->labelConcerts->setFont(font); ui->labelShows->setFont(font); #endif // hack. without only the fileScannerDialog pops up and blocks until it has finished show(); onMenu(WidgetMovies); // Start scanning for files QTimer::singleShot(0, m_fileScannerDialog, SLOT(exec())); }