diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro index d68fa92b..cab64684 100644 --- a/Sankore_3.1.pro +++ b/Sankore_3.1.pro @@ -49,7 +49,6 @@ include(src/podcast/podcast.pri) include(src/tools/tools.pri) include(src/desktop/desktop.pri) include(src/web/web.pri) -include(src/customWidgets/customWidgets.pri) DEPENDPATH += src/pdf-merger INCLUDEPATH += src/pdf-merger diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index d8f1375f..af39af0c 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -1335,9 +1335,6 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *gro QDomElement curGroupElement = groupDomDocument->createElement(tGroup); curGroupElement.setAttribute(aId, uuid); curParent->appendChild(curGroupElement); - - qDebug() << groupItem->children().count(); - foreach (QGraphicsItem *item, groupItem->childItems()) { QUuid tmpUuid = UBGraphicsScene::getPersonalUuid(item); if (!tmpUuid.isNull()) { diff --git a/src/customWidgets/UBActionableWidget.cpp b/src/customWidgets/UBActionableWidget.cpp deleted file mode 100644 index ba334aca..00000000 --- a/src/customWidgets/UBActionableWidget.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) - * - * This file is part of Open-Sankoré. - * - * Open-Sankoré is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License, - * with a specific linking exception for the OpenSSL project's - * "OpenSSL" library (or with modified versions of it that use the - * same license as the "OpenSSL" library). - * - * Open-Sankoré is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Open-Sankoré. If not, see . - */ - - - -#include -#include - -#include "UBActionableWidget.h" - -#include "core/memcheck.h" - -UBActionableWidget::UBActionableWidget(QWidget *parent, const char *name):QWidget(parent) - , mShowActions(false) -{ - setObjectName(name); - mActions.clear(); - mCloseButtons.setIcon(QIcon(QPixmap(":images/close.svg"))); - mCloseButtons.setGeometry(0, 0, 2*ACTIONSIZE, ACTIONSIZE); - mCloseButtons.setVisible(false); - connect(&mCloseButtons, SIGNAL(clicked()), this, SLOT(onCloseClicked())); -} - -UBActionableWidget::~UBActionableWidget() -{ - -} - -void UBActionableWidget::addAction(eAction act) -{ - if(!mActions.contains(act)){ - mActions << act; - } -} - -void UBActionableWidget::removeAction(eAction act) -{ - if(mActions.contains(act)){ - mActions.remove(mActions.indexOf(act)); - } -} - -void UBActionableWidget::removeAllActions() -{ - mActions.clear(); -} - -void UBActionableWidget::setActionsVisible(bool bVisible) -{ - if(!mActions.empty() && mActions.contains(eAction_Close)){ - mCloseButtons.setVisible(bVisible); - } -} - -void UBActionableWidget::onCloseClicked() -{ - emit close(this); -} - -void UBActionableWidget::setActionsParent(QWidget *parent) -{ - if(mActions.contains(eAction_Close)){ - mCloseButtons.setParent(parent); - } -} - -void UBActionableWidget::unsetActionsParent() -{ - if(mActions.contains(eAction_Close)){ - mCloseButtons.setParent(this); - } -} diff --git a/src/customWidgets/UBActionableWidget.h b/src/customWidgets/UBActionableWidget.h deleted file mode 100644 index cdc8e767..00000000 --- a/src/customWidgets/UBActionableWidget.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) - * - * This file is part of Open-Sankoré. - * - * Open-Sankoré is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License, - * with a specific linking exception for the OpenSSL project's - * "OpenSSL" library (or with modified versions of it that use the - * same license as the "OpenSSL" library). - * - * Open-Sankoré is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Open-Sankoré. If not, see . - */ - - - -#ifndef UBACTIONABLEWIDGET_H -#define UBACTIONABLEWIDGET_H - -#include -#include -#include -#include - -#define ACTIONSIZE 16 - -typedef enum{ - eAction_Close, - eAction_MoveUp, - eAction_MoveDown -}eAction; - -class UBActionableWidget : public QWidget -{ - Q_OBJECT -public: - UBActionableWidget(QWidget* parent=0, const char* name="UBActionableWidget"); - ~UBActionableWidget(); - void addAction(eAction act); - void removeAction(eAction act); - void removeAllActions(); - void setActionsVisible(bool bVisible); - -signals: - void close(QWidget* w); - -protected: - void setActionsParent(QWidget* parent); - void unsetActionsParent(); - QVector mActions; - QPushButton mCloseButtons; - -private slots: - void onCloseClicked(); - -private: - bool mShowActions; - -}; - -#endif // UBACTIONABLEWIDGET_H diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp deleted file mode 100644 index fc57d6ed..00000000 --- a/src/customWidgets/UBMediaWidget.cpp +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) - * - * This file is part of Open-Sankoré. - * - * Open-Sankoré is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License, - * with a specific linking exception for the OpenSSL project's - * "OpenSSL" library (or with modified versions of it that use the - * same license as the "OpenSSL" library). - * - * Open-Sankoré is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Open-Sankoré. If not, see . - */ - - - -#include "core/UBApplication.h" -#include "globals/UBGlobals.h" -#include "UBMediaWidget.h" - -#include "core/memcheck.h" - -/** - * \brief Constructor - * @param type as the media type - * @param parent as the parent widget - * @param name as the object name - */ -UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name):UBActionableWidget(parent, name) - , mpMediaObject(NULL) - , mpVideoWidget(NULL) - , mpAudioOutput(NULL) - , mpLayout(NULL) - , mpSeekerLayout(NULL) - , mpPlayStopButton(NULL) - , mpPauseButton(NULL) - , mpSlider(NULL) - , mAutoUpdate(false) - , mGeneratingThumbnail(false) - , mBorder(5) - , mpMediaContainer(NULL) - , mMediaLayout(NULL) - , mpCover(NULL) -{ - SET_STYLE_SHEET(); - - addAction(eAction_Close); - mType = type; - mpLayout = new QVBoxLayout(this); - setLayout(mpLayout); - - mpPlayStopButton = new UBMediaButton(this); - mpPlayStopButton->setPixmap(QPixmap(":images/play.svg")); - mpPauseButton = new UBMediaButton(this); - mpPauseButton->setPixmap(QPixmap(":images/pause.svg")); - mpPauseButton->setEnabled(false); - mpSlider = new QSlider(this); - mpSlider->setOrientation(Qt::Horizontal); - mpSlider->setMinimum(0); - mpSlider->setMaximum(0); - - mpSeekerLayout = new QHBoxLayout(); - mpSeekerLayout->addWidget(mpPlayStopButton, 0); - mpSeekerLayout->addWidget(mpPauseButton, 0); - mpSeekerLayout->addWidget(mpSlider, 1); - mpSeekerLayout->setContentsMargins(0, 0, 0, 0); - - connect(mpPlayStopButton, SIGNAL(clicked()), this, SLOT(onPlayStopClicked())); - connect(mpPauseButton, SIGNAL(clicked()), this, SLOT(onPauseClicked())); - connect(mpSlider, SIGNAL(valueChanged(int)), this, SLOT(onSliderChanged(int))); -} - -/** - * \brief Destructor - */ -UBMediaWidget::~UBMediaWidget() -{ - unsetActionsParent(); - DELETEPTR(mpMediaObject); - DELETEPTR(mpSlider); - DELETEPTR(mpPauseButton); - DELETEPTR(mpPlayStopButton); - DELETEPTR(mpAudioOutput); - DELETEPTR(mpVideoWidget); - DELETEPTR(mpCover); - DELETEPTR(mpMediaContainer); - DELETEPTR(mpSeekerLayout); - DELETEPTR(mpLayout); -} - -/** - * \brief Set the media file - * @param filePath as the media file path - */ -void UBMediaWidget::setFile(const QString &filePath) -{ - Q_ASSERT("" != filePath); - mFilePath = filePath; - mpMediaObject = new Phonon::MediaObject(this); - mpMediaObject->setTickInterval(TICK_INTERVAL); - connect(mpMediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(onStateChanged(Phonon::State,Phonon::State))); - connect(mpMediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(onTotalTimeChanged(qint64))); - connect(mpMediaObject, SIGNAL(tick(qint64)), this, SLOT(onTick(qint64))); - mpMediaObject->setCurrentSource(Phonon::MediaSource(filePath)); - createMediaPlayer(); -} - -/** - * \brief Get the media type - * @returns the media type - */ -eMediaType UBMediaWidget::mediaType() -{ - return mType; -} - -void UBMediaWidget::showEvent(QShowEvent* event) -{ - if(mType == eMediaType_Audio){ - return; - }else{ - if(!mpVideoWidget){ - mpVideoWidget = new Phonon::VideoWidget(this); - mMediaLayout->addStretch(1); - mMediaLayout->addWidget(mpVideoWidget); - mMediaLayout->addStretch(1); - Phonon::createPath(mpMediaObject, mpVideoWidget); - adaptSizeToVideo(); - mpMediaObject->play(); - mpMediaObject->stop(); - } - QWidget::showEvent(event); - } -} - -void UBMediaWidget::hideEvent(QHideEvent* event) -{ - if(mpMediaObject->state() == Phonon::PlayingState) - mpMediaObject->stop(); - UBActionableWidget::hideEvent(event); -} - -/** - * \brief Create the media player - */ -void UBMediaWidget::createMediaPlayer() -{ - mpMediaContainer = new QWidget(); - mpMediaContainer->setObjectName("UBMediaVideoContainer"); - mMediaLayout = new QHBoxLayout(); - mpMediaContainer->setLayout(mMediaLayout); - - if(eMediaType_Video == mType){ - mMediaLayout->setContentsMargins(10, 10, 10, 10); - if(isVisible()){ - mpVideoWidget = new Phonon::VideoWidget(this); - mMediaLayout->addStretch(1); - mMediaLayout->addWidget(mpVideoWidget); - mMediaLayout->addStretch(1); - Phonon::createPath(mpMediaObject, mpVideoWidget); - adaptSizeToVideo(); - } - mpAudioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this); - Phonon::createPath(mpMediaObject, mpAudioOutput); - }else if(eMediaType_Audio == mType){ - mMediaLayout->setContentsMargins(10, 10, 10, 10); - mpCover = new QLabel(mpMediaContainer); - //mpMediaContainer->setStyleSheet(QString("background: none;")); - setAudioCover(":images/libpalette/soundIcon.svg"); - mpCover->setScaledContents(true); - mMediaLayout->addStretch(1); - mMediaLayout->addWidget(mpCover); - mMediaLayout->addStretch(1); - mpAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); - Phonon::createPath(mpMediaObject, mpAudioOutput); - } - mpLayout->addWidget(mpMediaContainer, 1); - mpLayout->addLayout(mpSeekerLayout, 0); - setActionsParent(mpMediaContainer); -} - -/** - * \brief Adapt the widget size to the video in order to keep the good aspect ratio - */ -void UBMediaWidget::adaptSizeToVideo() -{ - if(NULL != mpMediaContainer){ - int origW = mpMediaContainer->width(); - int origH = mpMediaContainer->height(); - int newW = width(); - float scaleFactor = (float)origW/(float)newW; - int newH = origH/scaleFactor; - resize(newW, height() + newH); - } -} - -/** - * \brief Handle the media state change notification - * @param newState as the new state - * @param oldState as the old state - */ -void UBMediaWidget::onStateChanged(Phonon::State newState, Phonon::State oldState) -{ - if(!mGeneratingThumbnail){ - if(Phonon::LoadingState == oldState && Phonon::StoppedState == newState){ - if(eMediaType_Video == mType){ - // We do that here to generate the thumbnail of the video - mGeneratingThumbnail = true; - mpMediaObject->play(); - mpMediaObject->pause(); - mGeneratingThumbnail = false; - } - }else if(Phonon::PlayingState == oldState && Phonon::PausedState == newState){ - mpPlayStopButton->setPixmap(QPixmap(":images/play.svg")); - mpPauseButton->setEnabled(false); - }else if((Phonon::PausedState == oldState && Phonon::PlayingState == newState) || - (Phonon::StoppedState == oldState && Phonon::PlayingState == newState)){ - mpPlayStopButton->setPixmap(QPixmap(":images/stop.svg")); - mpPauseButton->setEnabled(true); - }else if(Phonon::PlayingState == oldState && Phonon::StoppedState == newState){ - mpPlayStopButton->setPixmap(QPixmap(":images/play.svg")); - mpPauseButton->setEnabled(false); - mpSlider->setValue(0); - } - - } - // if(mType == eMediaType_Video) - // updateView(newState); -} - -/** - * \brief Handles the total time change notification - * @param total as the new total time - */ -void UBMediaWidget::onTotalTimeChanged(qint64 total) -{ - mpSlider->setMaximum(total); -} - -/** - * \brief Handles the tick notification - * @param currentTime as the current time - */ -void UBMediaWidget::onTick(qint64 currentTime) -{ - mAutoUpdate = true; - mpSlider->setValue((int)currentTime); - mAutoUpdate = false; -} - -/** - * \brief Handles the seeker value change notification - * @param value as the new seeker value - */ -void UBMediaWidget::onSliderChanged(int value) -{ - if(!mAutoUpdate){ - mpMediaObject->seek(value); - } -} - -/** - * \brief Toggle Play-Stop - */ -void UBMediaWidget::onPlayStopClicked() -{ - switch(mpMediaObject->state()){ - case Phonon::PlayingState: - mpMediaObject->stop(); - break; - - case Phonon::StoppedState: - case Phonon::PausedState: - mpMediaObject->play(); - break; - default: - break; - } -} - -/** - * \brief Pause the media - */ -void UBMediaWidget::onPauseClicked() -{ - mpMediaObject->pause(); -} - -/** - * Get the border - * @returns the actual border - */ -int UBMediaWidget::border() -{ - return mBorder; -} - -/** - * \brief Handles the resize event - * @param ev as the resize event - */ -void UBMediaWidget::resizeEvent(QResizeEvent* ev) -{ - Q_UNUSED(ev); -} - -/** - * \brief Set the audio cover - * @param coverPath as the cover image file path - */ -void UBMediaWidget::setAudioCover(const QString &coverPath) -{ - if(NULL != mpCover){ - mpCover->setPixmap(QPixmap(coverPath)); - } -} - -// ----------------------------------------------------------------------------------------------------------- -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBMediaButton::UBMediaButton(QWidget *parent, const char *name):QLabel(parent) - , mPressed(false) -{ - setObjectName(name); - resize(UBMEDIABUTTON_SIZE, UBMEDIABUTTON_SIZE); - setStyleSheet(QString("padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;")); -} - -/** - * \brief Destructor - */ -UBMediaButton::~UBMediaButton() -{ - -} - -/** - * \brief Handles the mouse press notification - * @param ev as the mouse press event - */ -void UBMediaButton::mousePressEvent(QMouseEvent* ev) -{ - Q_UNUSED(ev); - mPressed = true; -} - -/** - * \brief Handles the mouse release notification - * @param ev as the mouse release event - */ -void UBMediaButton::mouseReleaseEvent(QMouseEvent* ev) -{ - Q_UNUSED(ev); - if(mPressed){ - mPressed = false; - emit clicked(); - } -} diff --git a/src/customWidgets/UBMediaWidget.h b/src/customWidgets/UBMediaWidget.h deleted file mode 100644 index 973b9226..00000000 --- a/src/customWidgets/UBMediaWidget.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA) - * - * This file is part of Open-Sankoré. - * - * Open-Sankoré is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License, - * with a specific linking exception for the OpenSSL project's - * "OpenSSL" library (or with modified versions of it that use the - * same license as the "OpenSSL" library). - * - * Open-Sankoré is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Open-Sankoré. If not, see . - */ - - - -#ifndef UBMEDIAWIDGET_H -#define UBMEDIAWIDGET_H - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "UBActionableWidget.h" - -#define UBMEDIABUTTON_SIZE 32 -#define TICK_INTERVAL 1000 - -/** - * \brief The media type - */ -typedef enum{ - eMediaType_Video, - eMediaType_Audio -}eMediaType; - -class UBMediaButton : public QLabel -{ - Q_OBJECT -public: - UBMediaButton(QWidget* parent=0, const char* name="UBMediaButton"); - ~UBMediaButton(); - -signals: - void clicked(); - -protected: - void mousePressEvent(QMouseEvent* ev); - void mouseReleaseEvent(QMouseEvent* ev); - -private: - /** And indicator of the press event in progress */ - bool mPressed; -}; - -class UBMediaWidget : public UBActionableWidget -{ - Q_OBJECT -public: - UBMediaWidget(eMediaType type = eMediaType_Video, QWidget* parent=0, const char* name="UBMediaWidget"); - ~UBMediaWidget(); - void setFile(const QString& filePath); - eMediaType mediaType(); - int border(); - void setAudioCover(const QString& coverPath); - void setUrl(const QString& url){mUrl = url;} - QString url(){return mUrl;} - -protected: - void resizeEvent(QResizeEvent* ev); - void showEvent(QShowEvent* event); - void hideEvent(QHideEvent* event); - /** The current media file path */ - QString mFilePath; - -private slots: - void onPlayStopClicked(); - void onPauseClicked(); - void onStateChanged(Phonon::State newState, Phonon::State oldState); - void onTotalTimeChanged(qint64 total); - void onTick(qint64 currentTime); - void onSliderChanged(int value); - -private: - void createMediaPlayer(); - void adaptSizeToVideo(); - - /** The current media type */ - eMediaType mType; - /** The media object */ - Phonon::MediaObject* mpMediaObject; - /** The video renderer */ - Phonon::VideoWidget* mpVideoWidget; - /** The audio renderer */ - Phonon::AudioOutput* mpAudioOutput; - /** The principal layout of this widget */ - QVBoxLayout* mpLayout; - /** The seeker layout */ - QHBoxLayout* mpSeekerLayout; - /** The play-stop button */ - UBMediaButton* mpPlayStopButton; - /** The pause button */ - UBMediaButton* mpPauseButton; - /** The seeker slider */ - QSlider* mpSlider; - /** An indicator of the seeker auto update in progress */ - bool mAutoUpdate; - /** An indicator of the thumbnail generation in progress */ - bool mGeneratingThumbnail; - /** The border */ - int mBorder; - /** A widget that will contain the media */ - QWidget* mpMediaContainer; - /** The media layout */ - QHBoxLayout* mMediaLayout; - /** The audio cover */ - QLabel* mpCover; - /** The media url */ - QString mUrl; -}; - -#endif // UBMEDIAWIDGET_H diff --git a/src/customWidgets/customWidgets.pri b/src/customWidgets/customWidgets.pri deleted file mode 100644 index a3c64030..00000000 --- a/src/customWidgets/customWidgets.pri +++ /dev/null @@ -1,8 +0,0 @@ - -HEADERS += \ - src/customWidgets/UBMediaWidget.h \ - src/customWidgets/UBActionableWidget.h - -SOURCES += \ - src/customWidgets/UBMediaWidget.cpp \ - src/customWidgets/UBActionableWidget.cpp