# include "UBTeacherBarWidget.h"
# include "core/UBApplication.h"
# include "core/UBPersistenceManager.h"
# include "UBMainWindow.h"
# include "document/UBDocumentController.h"
# include "document/UBDocumentProxy.h"
# include "board/UBBoardController.h"
# include "board/UBBoardPaletteManager.h"
# include "gui/UBMediaPlayer.h"
# include "frameworks/UBFileSystemUtils.h"
# include "customWidgets/UBDraggableLabel.h"
# include "customWidgets/UBMediaWidget.h"
# include "core/memcheck.h"
UBTeacherBarWidget : : UBTeacherBarWidget ( QWidget * parent , const char * name ) : UBDockPaletteWidget ( parent )
, mpLayout ( NULL )
, mpTitleLayout ( NULL )
, mpDurationLayout ( NULL )
, mpTitleLabel ( NULL )
, mpDurationLabel ( NULL )
, mpTitle ( NULL )
, mpMediaLabel ( NULL )
, mpContainer ( NULL )
, mpContainerLayout ( NULL )
, mpDuration1 ( NULL )
, mpDuration2 ( NULL )
, mpDuration3 ( NULL )
, mpDurationButtons ( NULL )
, mpActionLabel ( NULL )
, mpActions ( NULL )
, mpActionButton ( NULL )
, mpActionLayout ( NULL )
, mpCommentLabel ( NULL )
, mpComments ( NULL )
, mpLinkLabel ( NULL )
, mpLinks ( NULL )
, mpLinkButton ( NULL )
, mpLinkLayout ( NULL )
, mpStackWidget ( NULL )
, mpPreview ( NULL )
, mpMediaContainer ( NULL )
{
setObjectName ( name ) ;
mName = " TeacherBarWidget " ;
mVisibleState = true ;
mActionList . clear ( ) ;
mUrlList . clear ( ) ;
setAttribute ( Qt : : WA_StyledBackground , true ) ;
setStyleSheet ( UBApplication : : globalStyleSheet ( ) ) ;
mIconToLeft = QPixmap ( " :images/teacher_open.png " ) ;
mIconToRight = QPixmap ( " :images/teacher_close.png " ) ;
// Create the GUI
mpContainerLayout = new QVBoxLayout ( this ) ;
setLayout ( mpContainerLayout ) ;
mpContainer = new QWidget ( this ) ;
mpContainer - > setObjectName ( " DockPaletteWidgetBox " ) ;
mpPreview = new UBTeacherBarPreviewWidget ( this ) ;
mpStackWidget = new QStackedWidget ( this ) ;
mpContainerLayout - > addWidget ( mpStackWidget ) ;
mpStackWidget - > addWidget ( mpContainer ) ;
mpStackWidget - > addWidget ( mpPreview ) ;
mpLayout = new QVBoxLayout ( mpContainer ) ;
mpContainer - > setLayout ( mpLayout ) ;
// Title
mpTitleLabel = new QLabel ( tr ( " Title " ) , mpContainer ) ;
mpTitle = new QLineEdit ( mpContainer ) ;
mpTitle - > setObjectName ( " DockPaletteWidgetLineEdit " ) ;
connect ( mpTitle , SIGNAL ( textChanged ( const QString & ) ) , this , SLOT ( onTitleTextChanged ( const QString & ) ) ) ;
mpLayout - > addWidget ( mpTitleLabel , 0 ) ;
mpLayout - > addWidget ( mpTitle , 0 ) ;
// Duration
mpDurationLabel = new QLabel ( tr ( " Duration " ) , mpContainer ) ;
mpLayout - > addWidget ( mpDurationLabel , 0 ) ;
mpDurationLayout = new QHBoxLayout ( ) ;
mpDuration1 = new QCheckBox ( this ) ;
mpDuration1 - > setIcon ( QIcon ( " :images/duration1.png " ) ) ;
mpDuration1 - > setChecked ( true ) ;
mpDurationLayout - > addWidget ( mpDuration1 , 0 ) ;
mpDuration2 = new QCheckBox ( this ) ;
mpDuration2 - > setIcon ( QIcon ( " :images/duration2.png " ) ) ;
mpDurationLayout - > addWidget ( mpDuration2 , 0 ) ;
mpDuration3 = new QCheckBox ( this ) ;
mpDuration3 - > setIcon ( QIcon ( " :images/duration3.png " ) ) ;
mpDurationLayout - > addWidget ( mpDuration3 , 0 ) ;
mpDurationButtons = new QButtonGroup ( mpContainer ) ;
mpDurationButtons - > addButton ( mpDuration1 ) ;
mpDurationButtons - > addButton ( mpDuration2 ) ;
mpDurationButtons - > addButton ( mpDuration3 ) ;
mpLayout - > addLayout ( mpDurationLayout , 0 ) ;
// Actions
mpActionLabel = new QLabel ( tr ( " Actions " ) , mpContainer ) ;
mpLayout - > addWidget ( mpActionLabel , 0 ) ;
mpActions = new UBWidgetList ( mpContainer ) ;
mpActions - > setEmptyText ( tr ( " Add actions " ) ) ;
mpLayout - > addWidget ( mpActions , 1 ) ;
mpActionButton = new QPushButton ( mpContainer ) ;
mpActionButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mpActionButton - > setText ( tr ( " Add action " ) ) ;
mpActionLayout = new QHBoxLayout ( ) ;
mpActionLayout - > addWidget ( mpActionButton , 0 ) ;
mpActionLayout - > addStretch ( 1 ) ;
mpLayout - > addLayout ( mpActionLayout , 0 ) ;
// Media
mpMediaLabel = new QLabel ( tr ( " Medias " ) , mpContainer ) ;
mpLayout - > addWidget ( mpMediaLabel , 0 ) ;
mpMediaContainer = new UBTBMediaContainer ( this ) ;
mpLayout - > addWidget ( mpMediaContainer , 1 ) ;
// Links
mpLinkLabel = new QLabel ( tr ( " Links " ) , mpContainer ) ;
mpLayout - > addWidget ( mpLinkLabel , 0 ) ;
mpLinks = new UBWidgetList ( mpContainer ) ;
mpLayout - > addWidget ( mpLinks , 1 ) ;
mpLinkButton = new QPushButton ( tr ( " Add link " ) , mpContainer ) ;
mpLinkButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mpLinkLayout = new QHBoxLayout ( ) ;
mpLinkLayout - > addWidget ( mpLinkButton , 0 ) ;
mpLinkLayout - > addStretch ( 1 ) ;
mpLayout - > addLayout ( mpLinkLayout , 0 ) ;
// Comments
mpCommentLabel = new QLabel ( tr ( " Comments " ) , mpContainer ) ;
mpLayout - > addWidget ( mpCommentLabel , 0 ) ;
mpComments = new QTextEdit ( this ) ;
mpComments - > setObjectName ( " DockPaletteWidgetBox " ) ;
mpComments - > setStyleSheet ( " background:white; " ) ;
mpLayout - > addWidget ( mpComments , 1 ) ;
connect ( UBApplication : : boardController , SIGNAL ( activeSceneWillChange ( ) ) , this , SLOT ( saveContent ( ) ) ) ;
connect ( UBApplication : : boardController , SIGNAL ( activeSceneChanged ( ) ) , this , SLOT ( loadContent ( ) ) ) ;
connect ( UBApplication : : mainWindow - > actionQuit , SIGNAL ( triggered ( ) ) , this , SLOT ( saveContent ( ) ) ) ;
connect ( mpTitle , SIGNAL ( textChanged ( QString ) ) , this , SLOT ( onValueChanged ( ) ) ) ;
connect ( mpActionButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onActionButton ( ) ) ) ;
connect ( mpLinkButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onLinkButton ( ) ) ) ;
connect ( mpPreview , SIGNAL ( showEditMode ( ) ) , this , SLOT ( onShowEditMode ( ) ) ) ;
connect ( mpMediaContainer , SIGNAL ( mediaDropped ( QString ) ) , this , SLOT ( onMediaDropped ( QString ) ) ) ;
}
UBTeacherBarWidget : : ~ UBTeacherBarWidget ( )
{
if ( NULL ! = mpMediaContainer ) {
delete mpMediaContainer ;
mpMediaContainer = NULL ;
}
if ( NULL ! = mpComments ) {
delete mpComments ;
mpComments = NULL ;
}
if ( NULL ! = mpCommentLabel ) {
delete mpCommentLabel ;
mpCommentLabel = NULL ;
}
if ( NULL ! = mpLinks ) {
delete mpLinks ;
mpLinks = NULL ;
}
if ( NULL ! = mpLinkLabel ) {
delete mpLinkLabel ;
mpLinkLabel = NULL ;
}
if ( NULL ! = mpLinkButton ) {
delete mpLinkButton ;
mpLinkButton = NULL ;
}
if ( NULL ! = mpLinkLayout ) {
delete mpLinkLayout ;
mpLinkLayout = NULL ;
}
if ( NULL ! = mpMediaLabel ) {
delete mpMediaLabel ;
mpMediaLabel = NULL ;
}
if ( NULL ! = mpActionButton ) {
delete mpActionButton ;
mpActionButton = NULL ;
}
if ( NULL ! = mpActionLayout ) {
delete mpActionLayout ;
mpActionLayout = NULL ;
}
if ( NULL ! = mpActionLabel ) {
delete mpActionLabel ;
mpActionLabel = NULL ;
}
if ( NULL ! = mpDurationLabel ) {
delete mpDurationLabel ;
mpDurationLabel = NULL ;
}
if ( NULL ! = mpDuration1 ) {
delete mpDuration1 ;
mpDuration1 = NULL ;
}
if ( NULL ! = mpDuration2 ) {
delete mpDuration2 ;
mpDuration2 = NULL ;
}
if ( NULL ! = mpDuration3 ) {
delete mpDuration3 ;
mpDuration3 = NULL ;
}
if ( NULL ! = mpDurationButtons ) {
delete mpDurationButtons ;
mpDurationButtons = NULL ;
}
if ( NULL ! = mpDurationLayout ) {
delete mpDurationLayout ;
mpDurationLayout = NULL ;
}
if ( NULL ! = mpTitleLabel ) {
delete mpTitleLabel ;
mpTitleLabel = NULL ;
}
if ( NULL ! = mpTitle ) {
delete mpTitle ;
mpTitle = NULL ;
}
if ( NULL ! = mpTitleLayout ) {
delete mpTitleLayout ;
mpTitleLayout = NULL ;
}
if ( NULL ! = mpLayout ) {
delete mpLayout ;
mpLayout = NULL ;
}
if ( NULL ! = mpContainer ) {
delete mpContainer ;
mpContainer = NULL ;
}
if ( NULL ! = mpContainerLayout ) {
delete mpContainerLayout ;
mpContainerLayout = NULL ;
}
if ( NULL ! = mpPreview ) {
delete mpPreview ;
mpPreview = NULL ;
}
if ( NULL ! = mpStackWidget ) {
delete mpStackWidget ;
mpStackWidget = NULL ;
}
}
void UBTeacherBarWidget : : onValueChanged ( )
{
if ( isEmpty ( ) )
{
mIconToLeft = QPixmap ( " :images/teacher_open_disabled.png " ) ;
mIconToRight = QPixmap ( " :images/teacher_close_disabled.png " ) ;
}
else
{
mIconToLeft = QPixmap ( " :images/teacher_open.png " ) ;
mIconToRight = QPixmap ( " :images/teacher_close.png " ) ;
}
UBApplication : : boardController - > paletteManager ( ) - > refreshPalettes ( ) ;
}
void UBTeacherBarWidget : : saveContent ( )
{
sTeacherBarInfos infos ;
// Title
infos . title = mpTitle - > text ( ) ;
// Duration
if ( mpDuration1 - > isChecked ( ) ) {
infos . Duration = eDuration_Quarter ;
} else if ( mpDuration2 - > isChecked ( ) ) {
infos . Duration = eDuration_Half ;
} else {
infos . Duration = eDuration_ThreeQuarter ;
}
// Actions
for ( int i = 0 ; i < mActionList . size ( ) ; i + + ) {
infos . actions < < QString ( " %0;%1 " ) . arg ( mActionList . at ( i ) - > comboValue ( ) ) . arg ( mActionList . at ( i ) - > text ( ) ) ;
}
// Media
foreach ( QString media , mpMediaContainer - > mediaUrls ( ) ) {
infos . medias < < media ;
}
// Links
for ( int j = 0 ; j < mUrlList . size ( ) ; j + + ) {
if ( " " ! = mUrlList . at ( j ) - > url ( ) ) {
infos . urls < < mUrlList . at ( j ) - > url ( ) ;
}
}
// Comments
infos . comments = mpComments - > document ( ) - > toPlainText ( ) ;
UBPersistenceManager : : persistenceManager ( ) - > persistTeacherBar ( UBApplication : : boardController - > activeDocument ( ) , UBApplication : : boardController - > activeSceneIndex ( ) , infos ) ;
}
void UBTeacherBarWidget : : loadContent ( )
{
clearWidgetLists ( ) ;
sTeacherBarInfos nextInfos = UBPersistenceManager : : persistenceManager ( ) - > getTeacherBarInfos ( UBApplication : : boardController - > activeDocument ( ) , UBApplication : : boardController - > activeSceneIndex ( ) ) ;
// Title
mpTitle - > setText ( nextInfos . title ) ;
// Duration
switch ( nextInfos . Duration ) {
case eDuration_Quarter : mpDuration1 - > setChecked ( true ) ;
break ;
case eDuration_Half : mpDuration2 - > setChecked ( true ) ;
break ;
case eDuration_ThreeQuarter : mpDuration3 - > setChecked ( true ) ;
break ;
default : mpDuration1 - > setChecked ( true ) ;
break ;
}
// Actions
for ( int i = 0 ; i < nextInfos . actions . size ( ) ; i + + ) {
QStringList qslAction = nextInfos . actions . at ( i ) . split ( " ; " ) ;
if ( qslAction . size ( ) > = 2 ) {
UBTeacherStudentAction * pAction = new UBTeacherStudentAction ( mpContainer ) ;
pAction - > setComboValue ( qslAction . at ( 0 ) . toInt ( ) ) ;
pAction - > setText ( qslAction . at ( 1 ) ) ;
mActionList < < pAction ;
mpActions - > addWidget ( pAction ) ;
}
}
// Media
foreach ( QString url , nextInfos . medias ) {
if ( " " ! = url ) {
QWidget * pMedia = mpMediaContainer - > generateMediaWidget ( url ) ;
if ( NULL ! = pMedia ) {
mMediaList < < pMedia ;
mpMediaContainer - > addWidget ( pMedia ) ;
}
}
}
// Links
for ( int j = 0 ; j < nextInfos . urls . size ( ) ; j + + ) {
QString qsUrl = nextInfos . urls . at ( j ) ;
if ( " " ! = qsUrl ) {
UBUrlWidget * pLink = new UBUrlWidget ( mpContainer ) ;
pLink - > setUrl ( qsUrl ) ;
mUrlList < < pLink ;
mpLinks - > addWidget ( pLink ) ;
}
}
// Comments
if ( NULL ! = mpComments ) {
mpComments - > document ( ) - > setPlainText ( nextInfos . comments ) ;
}
mpPreview - > mediaViewer ( ) - > cleanMedia ( ) ;
if ( ! isEmpty ( ) ) {
// Update the fields of the preview widget
mpPreview - > setTitle ( mpTitle - > text ( ) ) ;
mpPreview - > mediaViewer ( ) - > loadMedia ( nextInfos . medias ) ;
mpStackWidget - > setCurrentWidget ( mpPreview ) ;
if ( mpDuration1 - > isChecked ( ) ) {
mpPreview - > setDuration ( eDuration_Quarter ) ;
} else if ( mpDuration2 - > isChecked ( ) ) {
mpPreview - > setDuration ( eDuration_Half ) ;
} else {
mpPreview - > setDuration ( eDuration_ThreeQuarter ) ;
}
mpPreview - > clean ( ) ;
// Add the actions
if ( ! mActionList . empty ( ) ) {
QStringList actions ;
foreach ( UBTeacherStudentAction * action , mActionList ) {
QString desc = QString ( " %0;%1 " ) . arg ( action - > comboValue ( ) ) . arg ( action - > text ( ) ) ;
actions < < desc ;
}
mpPreview - > setActions ( actions ) ;
}
// Add the media
if ( nextInfos . medias . count ( ) > 0 ) {
QList < QWidget * > widgetList ;
widgetList . append ( mpPreview - > mediaLabel ( ) ) ;
mpPreview - > mediaViewer ( ) - > loadWidgets ( widgetList , false ) ;
int loadedMedia = mpPreview - > mediaViewer ( ) - > loadMedia ( nextInfos . medias ) ;
if ( loadedMedia )
mpPreview - > mediaLabel ( ) - > setVisible ( true ) ;
}
// Add the links
if ( ! mUrlList . empty ( ) ) {
QStringList links ;
foreach ( UBUrlWidget * url , mUrlList ) {
QStringList list = url - > url ( ) . split ( " ; " ) ;
QString formedlink = " <a href= " ;
if ( ! list . at ( 0 ) . startsWith ( " http:// " ) )
formedlink + = " http:// " ;
formedlink + = list . at ( 0 ) + " > " + list . at ( 1 ) + " </a> " ;
links < < formedlink ;
}
mpPreview - > setLinks ( links ) ;
}
// Add the comments
mpPreview - > setComments ( mpComments - > document ( ) - > toPlainText ( ) ) ;
}
else {
mpStackWidget - > setCurrentWidget ( mpContainer ) ;
}
}
bool UBTeacherBarWidget : : isEmpty ( )
{
return mpTitle - > text ( ) = = " " & &
mpLinks - > empty ( ) & &
mpActions - > empty ( ) & &
mpMediaContainer - > empty ( ) & &
mpComments - > document ( ) - > toPlainText ( ) = = " " ;
}
void UBTeacherBarWidget : : onTitleTextChanged ( const QString & text )
{
mpTitle - > setToolTip ( text ) ;
}
void UBTeacherBarWidget : : onActionButton ( )
{
UBTeacherStudentAction * pAction = new UBTeacherStudentAction ( mpContainer ) ;
mActionList < < pAction ;
mpActions - > addWidget ( pAction ) ;
}
void UBTeacherBarWidget : : onLinkButton ( )
{
UBUrlWidget * pUrl = new UBUrlWidget ( mpContainer ) ;
mUrlList < < pUrl ;
mpLinks - > addWidget ( pUrl ) ;
}
void UBTeacherBarWidget : : clearWidgetLists ( )
{
if ( NULL ! = mpMediaContainer ) {
for ( int i = 0 ; i < mMediaList . size ( ) ; i + + ) {
mpMediaContainer - > removeWidget ( mMediaList . at ( i ) ) ;
delete mMediaList . at ( i ) ;
}
mMediaList . clear ( ) ;
mpMediaContainer - > cleanMedias ( ) ;
}
if ( NULL ! = mpActions ) {
for ( int i = 0 ; i < mActionList . size ( ) ; i + + ) {
mpActions - > removeWidget ( mActionList . at ( i ) ) ;
delete mActionList . at ( i ) ;
}
mActionList . clear ( ) ;
}
if ( NULL ! = mpLinks ) {
for ( int i = 0 ; i < mUrlList . size ( ) ; i + + ) {
mpLinks - > removeWidget ( mUrlList . at ( i ) ) ;
delete mUrlList . at ( i ) ;
}
mUrlList . clear ( ) ;
}
}
void UBTeacherBarWidget : : onShowEditMode ( )
{
mpStackWidget - > setCurrentWidget ( mpContainer ) ;
}
void UBTeacherBarWidget : : onMediaDropped ( const QString & url )
{
if ( " " ! = url ) {
QWidget * pMedia = mpMediaContainer - > generateMediaWidget ( url ) ;
if ( NULL ! = pMedia ) {
mMediaList < < pMedia ;
mpMediaContainer - > addWidget ( pMedia ) ;
}
}
}
// ---------------------------------------------------------------------------------------------
UBTeacherStudentAction : : UBTeacherStudentAction ( QWidget * parent , const char * name ) : QWidget ( parent )
, mpText ( NULL )
, mpLayout ( NULL )
, mpComboLayout ( NULL )
, mpCombo ( NULL )
{
setObjectName ( name ) ;
setAttribute ( Qt : : WA_StyledBackground , true ) ;
setStyleSheet ( UBApplication : : globalStyleSheet ( ) ) ;
// Create the GUI
mpLayout = new QHBoxLayout ( this ) ;
setLayout ( mpLayout ) ;
mpComboLayout = new QVBoxLayout ( ) ;
mpCombo = new QComboBox ( this ) ;
mpCombo - > setObjectName ( " DockPaletteWidgetComboBox " ) ;
mpCombo - > setMinimumWidth ( 80 ) ;
mpCombo - > addItem ( tr ( " Teacher " ) ) ;
mpCombo - > addItem ( tr ( " Student " ) ) ;
mpComboLayout - > addWidget ( mpCombo , 0 ) ;
mpComboLayout - > addStretch ( 1 ) ;
mpLayout - > addLayout ( mpComboLayout , 0 ) ;
mpText = new QTextEdit ( this ) ;
mpText - > setObjectName ( " DockPaletteWidgetBox " ) ;
mpText - > setStyleSheet ( " background:white; " ) ;
mpLayout - > addWidget ( mpText , 1 ) ;
}
UBTeacherStudentAction : : ~ UBTeacherStudentAction ( )
{
if ( NULL ! = mpCombo ) {
delete mpCombo ;
mpCombo = NULL ;
}
if ( NULL ! = mpText ) {
delete mpText ;
mpText = NULL ;
}
if ( NULL ! = mpComboLayout ) {
delete mpComboLayout ;
mpComboLayout = NULL ;
}
if ( NULL ! = mpLayout ) {
delete mpLayout ;
mpLayout = NULL ;
}
}
QString UBTeacherStudentAction : : text ( )
{
QString str ;
if ( NULL ! = mpText ) {
str = mpText - > document ( ) - > toPlainText ( ) ;
}
return str ;
}
QString UBTeacherStudentAction : : comboValue ( )
{
QString str ;
if ( NULL ! = mpCombo ) {
str = QString ( " %0 " ) . arg ( mpCombo - > currentIndex ( ) ) ;
}
return str ;
}
void UBTeacherStudentAction : : setComboValue ( int value )
{
if ( NULL ! = mpCombo ) {
mpCombo - > setCurrentIndex ( value ) ;
}
}
void UBTeacherStudentAction : : setText ( const QString & text )
{
if ( NULL ! = mpText ) {
mpText - > document ( ) - > setPlainText ( text ) ;
}
}
// ---------------------------------------------------------------------------------------------
UBTeacherBarDropMediaZone : : UBTeacherBarDropMediaZone ( QWidget * parent , const char * name ) : QWidget ( parent )
{
setObjectName ( name ) ;
setAcceptDrops ( true ) ;
mWidget = new UBWidgetList ( parent ) ;
mWidget - > setEmptyText ( tr ( " Drag media here ... " ) ) ;
mLayout . addWidget ( mWidget ) ;
setLayout ( & mLayout ) ;
// The next line is disgusting. This is a quickfix that must be reworked later
setContentsMargins ( - 9 , - 9 , - 9 , - 9 ) ;
}
UBTeacherBarDropMediaZone : : ~ UBTeacherBarDropMediaZone ( )
{
cleanMedias ( ) ;
if ( mWidget ) {
delete mWidget ;
mWidget = NULL ;
}
}
void UBTeacherBarDropMediaZone : : cleanMedias ( )
{
foreach ( QWidget * eachWidget , mWidgetList ) {
mWidget - > removeWidget ( eachWidget ) ;
delete eachWidget ;
}
mWidgetList . clear ( ) ;
mMediaList . clear ( ) ;
}
bool UBTeacherBarDropMediaZone : : empty ( )
{
return mWidget - > empty ( ) ;
}
void UBTeacherBarDropMediaZone : : dragEnterEvent ( QDragEnterEvent * pEvent )
{
pEvent - > acceptProposedAction ( ) ;
}
void UBTeacherBarDropMediaZone : : dragLeaveEvent ( QDragLeaveEvent * pEvent )
{
pEvent - > accept ( ) ;
}
void UBTeacherBarDropMediaZone : : addMedia ( QString pMediaPath )
{
if ( ! pMediaPath . isEmpty ( ) )
mMediaList . append ( pMediaPath ) ;
else
qWarning ( ) < < __FUNCTION__ < < " empty path " ;
QString mimeType = UBFileSystemUtils : : mimeTypeFromFileName ( pMediaPath ) ;
if ( mimeType . contains ( " image " ) ) {
QPixmap pix = QPixmap ( pMediaPath ) ;
QLabel * label = new QLabel ( ) ;
label - > setPixmap ( pix ) ;
label - > setScaledContents ( true ) ;
mWidget - > addWidget ( label ) ;
mWidgetList < < label ;
}
else if ( mimeType . contains ( " video " ) | | mimeType . contains ( " audio " ) ) {
UBMediaPlayer * mediaPlayer = new UBMediaPlayer ( ) ;
mediaPlayer - > setFile ( pMediaPath ) ;
mWidget - > addWidget ( mediaPlayer ) ;
mWidgetList < < mediaPlayer ;
}
else {
qWarning ( ) < < " pMediaPath " < < pMediaPath ;
qWarning ( ) < < " bad idea to come here " ;
}
}
void UBTeacherBarDropMediaZone : : reloadMedia ( QStringList pList )
{
cleanMedias ( ) ;
foreach ( QString eachString , pList ) {
addMedia ( eachString ) ;
}
}
void UBTeacherBarDropMediaZone : : dropEvent ( QDropEvent * pEvent )
{
QPixmap pixFromDropEvent ;
QString mimeType ;
QString resourcePath ;
if ( pEvent - > mimeData ( ) - > hasText ( ) ) {
qDebug ( ) < < " pEvent->mimeData()->hasText() " < < pEvent - > mimeData ( ) - > text ( ) ;
resourcePath = pEvent - > mimeData ( ) - > text ( ) ;
}
else if ( pEvent - > mimeData ( ) - > hasUrls ( ) ) {
qDebug ( ) < < " pEvent->mimeData()->hasUrls() " < < pEvent - > mimeData ( ) - > urls ( ) . at ( 0 ) ;
resourcePath = pEvent - > mimeData ( ) - > urls ( ) . at ( 0 ) . toLocalFile ( ) ;
}
else if ( pEvent - > mimeData ( ) - > hasImage ( ) ) {
qDebug ( ) < < " pEvent->mimeData()->hasImage() " ;
pixFromDropEvent . loadFromData ( pEvent - > mimeData ( ) - > imageData ( ) . toByteArray ( ) ) ;
if ( ! pixFromDropEvent . isNull ( ) )
mimeType = " image " ;
}
if ( mimeType . isEmpty ( ) & & resourcePath . isEmpty ( ) ) {
pEvent - > acceptProposedAction ( ) ;
return ;
}
if ( ! resourcePath . isEmpty ( ) )
addMedia ( resourcePath ) ;
pEvent - > acceptProposedAction ( ) ;
}
void UBTeacherBarDropMediaZone : : dragMoveEvent ( QDragMoveEvent * pEvent )
{
pEvent - > acceptProposedAction ( ) ;
}
// ---------------------------------------------------------------------------------------------
UBUrlWidget : : UBUrlWidget ( QWidget * parent , const char * name ) : QWidget ( parent )
, mpLayout ( NULL )
, mpUrlLabel ( NULL )
, mpUrl ( NULL )
{
setObjectName ( name ) ;
setAttribute ( Qt : : WA_StyledBackground , true ) ;
setStyleSheet ( UBApplication : : globalStyleSheet ( ) ) ;
mpLayout = new QVBoxLayout ( this ) ;
setLayout ( mpLayout ) ;
mpLabelLayout = new QHBoxLayout ( this ) ;
mpUrlLabel = new QLabel ( tr ( " Url " ) , this ) ;
mpLabelLayout - > addWidget ( mpUrlLabel , 0 ) ;
mpUrl = new QLineEdit ( this ) ;
mpUrl - > setObjectName ( " DockPaletteWidgetLineEdit " ) ;
mpUrl - > setMinimumHeight ( 20 ) ;
mpLabelLayout - > addWidget ( mpUrl , 1 ) ;
mpTitleLayout = new QHBoxLayout ( this ) ;
mpTitleLabel = new QLabel ( tr ( " Title " ) , this ) ;
mpTitleLayout - > addWidget ( mpTitleLabel , 0 ) ;
mpTitle = new QLineEdit ( this ) ;
mpTitle - > setObjectName ( " DockPaletteWidgetLineEdit " ) ;
mpTitle - > setMinimumHeight ( 20 ) ;
mpTitleLayout - > addWidget ( mpTitle , 1 ) ;
mpLayout - > addLayout ( mpTitleLayout ) ;
mpLayout - > addLayout ( mpLabelLayout ) ;
}
UBUrlWidget : : ~ UBUrlWidget ( )
{
if ( NULL ! = mpTitle ) {
delete mpTitle ;
mpTitle = NULL ;
}
if ( NULL ! = mpTitleLabel ) {
delete mpTitleLabel ;
mpTitleLabel = NULL ;
}
if ( NULL ! = mpUrlLabel ) {
delete mpUrlLabel ;
mpUrlLabel = NULL ;
}
if ( NULL ! = mpUrl ) {
delete mpUrl ;
mpUrl = NULL ;
}
if ( NULL ! = mpTitleLayout ) {
delete mpTitleLayout ;
mpTitleLayout = NULL ;
}
if ( NULL ! = mpLabelLayout ) {
delete mpLabelLayout ;
mpLabelLayout = NULL ;
}
if ( NULL ! = mpLayout ) {
delete mpLayout ;
mpLayout = NULL ;
}
}
QString UBUrlWidget : : url ( )
{
QString str ;
if ( NULL ! = mpUrl ) {
str = mpUrl - > text ( ) + " ; " + mpTitle - > text ( ) ;
}
return str ;
}
void UBUrlWidget : : setUrl ( const QString & url )
{
QStringList list = url . split ( " ; " ) ;
if ( NULL ! = mpUrl ) {
mpUrl - > setText ( list . at ( 0 ) ) ;
mpTitle - > setText ( list . at ( 1 ) ) ;
}
}
// ------------------------------------------------------------------------------------
UBTeacherBarPreviewWidget : : UBTeacherBarPreviewWidget ( QWidget * parent , const char * name ) : QWidget ( parent )
, mpEditButton ( NULL )
, mpTitle ( NULL )
, mpDuration ( NULL )
, mpActionsLabel ( NULL )
, mpMediaLabel ( NULL )
, mpCommentsLabel ( NULL )
, mpComments ( NULL )
, mpLinksLabel ( NULL )
{
setObjectName ( name ) ;
setLayout ( & mLayout ) ;
setAttribute ( Qt : : WA_StyledBackground , true ) ;
setStyleSheet ( UBApplication : : globalStyleSheet ( ) ) ;
// Build the Preview widget
// Title + duration
mpTitle = new QLabel ( this ) ;
mpTitle - > setObjectName ( " UBTeacherBarPreviewTitle " ) ;
mpTitle - > setWordWrap ( true ) ;
mpTitle - > setAlignment ( Qt : : AlignCenter ) ;
mpDuration = new QLabel ( this ) ;
mTitleDurationLayout . addWidget ( mpTitle , 0 ) ;
mTitleDurationLayout . addWidget ( mpDuration , 1 ) ;
mLayout . addLayout ( & mTitleDurationLayout , 0 ) ;
mLayout . addWidget ( & mMediaViewer , 1 ) ;
// The next line is disgusting. This is a quickfix that must be reworked later
mMediaViewer . setContentsMargins ( - 9 , - 9 , - 9 , - 9 ) ;
hideElements ( ) ;
// Edit button
mpEditButton = new QPushButton ( tr ( " Edit infos " ) , this ) ;
mpEditButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mEditLayout . addStretch ( 1 ) ;
mEditLayout . addWidget ( mpEditButton , 0 ) ;
mEditLayout . addStretch ( 1 ) ;
mLayout . addLayout ( & mEditLayout , 0 ) ;
connect ( mpEditButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onEdit ( ) ) ) ;
}
UBTeacherBarPreviewWidget : : ~ UBTeacherBarPreviewWidget ( )
{
if ( NULL ! = mpLinksLabel ) {
delete mpLinksLabel ;
mpLinksLabel = NULL ;
}
if ( NULL ! = mpComments ) {
delete mpComments ;
mpComments = NULL ;
}
if ( NULL ! = mpTitle ) {
delete mpTitle ;
mpTitle = NULL ;
}
if ( NULL ! = mpDuration ) {
delete mpDuration ;
mpDuration = NULL ;
}
if ( NULL ! = mpActionsLabel ) {
delete mpActionsLabel ;
mpActionsLabel = NULL ;
}
if ( NULL ! = mpMediaLabel ) {
delete mpMediaLabel ;
mpMediaLabel = NULL ;
}
if ( NULL ! = mpCommentsLabel ) {
delete mpCommentsLabel ;
mpCommentsLabel = NULL ;
}
if ( NULL ! = mpEditButton ) {
delete mpEditButton ;
mpEditButton = NULL ;
}
}
void UBTeacherBarPreviewWidget : : onEdit ( )
{
emit showEditMode ( ) ;
}
void UBTeacherBarPreviewWidget : : setTitle ( const QString & title )
{
if ( NULL ! = mpTitle ) {
mpTitle - > setText ( title ) ;
}
}
void UBTeacherBarPreviewWidget : : setDuration ( eDuration duration )
{
if ( NULL ! = mpDuration ) {
QPixmap p ;
switch ( duration ) {
case eDuration_Quarter :
p = QPixmap ( " :images/duration1.png " ) ;
break ;
case eDuration_Half :
p = QPixmap ( " :images/duration2.png " ) ;
break ;
case eDuration_ThreeQuarter :
p = QPixmap ( " :images/duration3.png " ) ;
break ;
default :
break ;
}
mpDuration - > setPixmap ( p . scaledToHeight ( 16 , Qt : : SmoothTransformation ) ) ;
}
}
void UBTeacherBarPreviewWidget : : setComments ( const QString & comments )
{
if ( " " ! = comments ) {
mWidgets . clear ( ) ;
mpComments - > setText ( comments ) ;
mpComments - > setVisible ( true ) ;
mpCommentsLabel - > setVisible ( true ) ;
mWidgets < < mpCommentsLabel ;
mMediaViewer . loadWidgets ( mWidgets , false ) ;
mWidgets . clear ( ) ;
mWidgets < < mpComments ;
mMediaViewer . loadWidgets ( mWidgets , true ) ;
}
}
void UBTeacherBarPreviewWidget : : clean ( )
{
mMediaViewer . cleanMedia ( ) ;
hideElements ( ) ;
}
void UBTeacherBarPreviewWidget : : hideElements ( )
{
mpActionsLabel = new QLabel ( tr ( " Actions " ) , this ) ;
mpActionsLabel - > setObjectName ( " UBTeacherBarPreviewSubtitle " ) ;
mpMediaLabel = new QLabel ( tr ( " Medias " ) , this ) ;
mpMediaLabel - > setObjectName ( " UBTeacherBarPreviewSubtitle " ) ;
mpCommentsLabel = new QLabel ( tr ( " Comments " ) , this ) ;
mpCommentsLabel - > setObjectName ( " UBTeacherBarPreviewSubtitle " ) ;
mpComments = new QLabel ( this ) ;
mpComments - > setWordWrap ( true ) ;
mpComments - > setObjectName ( " UBTeacherBarPreviewComments " ) ;
mpLinksLabel = new QLabel ( tr ( " Links " ) , this ) ;
mpLinksLabel - > setObjectName ( " UBTeacherBarPreviewSubtitle " ) ;
mpActionsLabel - > setVisible ( false ) ;
mpMediaLabel - > setVisible ( false ) ;
mpCommentsLabel - > setVisible ( false ) ;
mpComments - > setVisible ( false ) ;
mpLinksLabel - > setVisible ( false ) ;
}
void UBTeacherBarPreviewWidget : : setActions ( QStringList actions )
{
if ( ! actions . empty ( ) ) {
mWidgets . clear ( ) ;
mpActionsLabel - > setVisible ( true ) ;
mWidgets < < mpActionsLabel ;
mediaViewer ( ) - > loadWidgets ( mWidgets , false ) ;
mWidgets . clear ( ) ;
foreach ( QString action , actions ) {
QStringList desc = action . split ( ' ; ' ) ;
if ( 2 < = desc . size ( ) ) {
QString owner = desc . at ( 0 ) ;
QString act = desc . at ( 1 ) ;
mpTmpAction = new UBActionPreview ( this ) ;
mpTmpAction - > setOwner ( owner ) ;
mpTmpAction - > setContent ( act ) ;
mWidgets < < mpTmpAction ;
}
}
mMediaViewer . loadWidgets ( mWidgets , true ) ;
}
}
void UBTeacherBarPreviewWidget : : setLinks ( QStringList links )
{
if ( ! links . empty ( ) ) {
mWidgets . clear ( ) ;
mpLinksLabel - > setVisible ( true ) ;
mWidgets < < mpLinksLabel ;
mMediaViewer . loadWidgets ( mWidgets , false ) ;
mWidgets . clear ( ) ;
foreach ( QString link , links ) {
mpTmpLink = new QLabel ( link , this ) ;
mpTmpLink - > setOpenExternalLinks ( true ) ;
mWidgets < < mpTmpLink ;
}
mMediaViewer . loadWidgets ( mWidgets , true ) ;
}
}
// ------------------------------------------------------------------------------------
UBTeacherBarPreviewMedia : : UBTeacherBarPreviewMedia ( QWidget * parent , const char * name ) : QWidget ( parent )
{
setObjectName ( name ) ;
mWidget = new UBWidgetList ( parent ) ;
// mWidget->setEmptyText(tr("No media found"));
mLayout . addWidget ( mWidget ) ;
// mWidget->setStyleSheet(QString("background-color: red;"));
setLayout ( & mLayout ) ;
mWidgetList . clear ( ) ;
}
UBTeacherBarPreviewMedia : : ~ UBTeacherBarPreviewMedia ( )
{
if ( mWidget ) {
delete mWidget ;
mWidget = NULL ;
}
}
void UBTeacherBarPreviewMedia : : cleanMedia ( )
{
foreach ( QWidget * eachWidget , mWidgetList . keys ( ) ) {
if ( QString ( eachWidget - > metaObject ( ) - > className ( ) ) . contains ( " UBDraggable " ) ) {
mWidget - > removeWidget ( eachWidget ) ;
delete eachWidget ;
eachWidget = NULL ;
}
else {
mWidget - > removeWidget ( eachWidget ) ;
}
}
mWidgetList . clear ( ) ;
}
void UBTeacherBarPreviewMedia : : loadWidgets ( QList < QWidget * > pWidgetsList , bool isResizable )
{
foreach ( QWidget * eachWidget , pWidgetsList ) {
mWidget - > addWidget ( eachWidget ) ;
mWidgetList [ eachWidget ] = " DRAG UNAVAILABLE " ;
}
}
int UBTeacherBarPreviewMedia : : loadMedia ( QStringList pMedias )
{
int addedMedia = 0 ;
foreach ( QString eachString , pMedias ) {
if ( ! eachString . isEmpty ( ) ) {
QString mimeType = UBFileSystemUtils : : mimeTypeFromFileName ( eachString ) ;
if ( mimeType . contains ( " image " ) ) {
UBDraggableLabel * label = new UBDraggableLabel ( ) ;
label - > loadImage ( eachString ) ;
mWidget - > addWidget ( label ) ;
mWidgetList [ label ] = eachString ;
addedMedia + = 1 ;
}
else if ( mimeType . contains ( " video " ) | | mimeType . contains ( " audio " ) ) {
UBDraggableMediaPlayer * mediaPlayer = new UBDraggableMediaPlayer ( ) ;
mediaPlayer - > setFile ( eachString ) ;
mWidget - > addWidget ( mediaPlayer ) ;
mWidgetList [ mediaPlayer ] = eachString ;
addedMedia + = 1 ;
}
else {
qWarning ( ) < < " pMediaPath " < < eachString ;
qWarning ( ) < < " bad idea to come here " ;
}
}
}
return addedMedia ;
}
// -----------------------------------------------------------------------------------------------
UBActionPreview : : UBActionPreview ( QWidget * parent , const char * name ) : QWidget ( parent )
, mpOwner ( NULL )
, mpContent ( NULL )
{
setObjectName ( name ) ;
setLayout ( & mLayout ) ;
mpOwner = new QLabel ( this ) ;
mpOwner - > setObjectName ( " UBActionPreviewOwner " ) ;
mOwnerLayout . addWidget ( mpOwner , 0 ) ;
mOwnerLayout . addStretch ( 1 ) ;
mLayout . addLayout ( & mOwnerLayout ) ;
mpContent = new QLabel ( this ) ;
mpContent - > setObjectName ( " UBActionPreviewContent " ) ;
mpContent - > setWordWrap ( true ) ;
mLayout . addWidget ( mpContent ) ;
setContentsMargins ( - 9 , - 9 , - 9 , - 9 ) ;
}
UBActionPreview : : ~ UBActionPreview ( )
{
if ( NULL ! = mpOwner ) {
delete mpOwner ;
mpOwner = NULL ;
}
if ( NULL ! = mpContent ) {
delete mpContent ;
mpContent = NULL ;
}
}
void UBActionPreview : : setOwner ( const QString & owner )
{
if ( NULL ! = mpOwner & & NULL ! = mpContent ) {
switch ( owner . toInt ( ) ) {
case eActionOwner_Teacher :
mpOwner - > setText ( tr ( " Teacher " ) ) ;
mpContent - > setStyleSheet ( " background:lightblue; border:lightblue; " ) ;
break ;
case eActionOwner_Student :
mpOwner - > setText ( tr ( " Student " ) ) ;
mpContent - > setStyleSheet ( " background:lightgreen; border:lightgreen; " ) ;
break ;
}
}
}
void UBActionPreview : : setContent ( const QString & content )
{
if ( NULL ! = mpContent ) {
mpContent - > setText ( content ) ;
}
}
// ------------------------------------------------------------------------------------------------------------------------------------
UBTBMediaContainer : : UBTBMediaContainer ( QWidget * parent , const char * name ) : UBWidgetList ( parent )
{
setObjectName ( name ) ;
setAcceptDrops ( true ) ;
}
UBTBMediaContainer : : ~ UBTBMediaContainer ( )
{
}
void UBTBMediaContainer : : dropEvent ( QDropEvent * pEvent )
{
QPixmap pixFromDropEvent ;
QString mimeType ;
QString resourcePath ;
if ( pEvent - > mimeData ( ) - > hasText ( ) ) {
qDebug ( ) < < " text dropped " ;
resourcePath = pEvent - > mimeData ( ) - > text ( ) ;
}
else if ( pEvent - > mimeData ( ) - > hasUrls ( ) ) {
qDebug ( ) < < " url dropped " ;
resourcePath = pEvent - > mimeData ( ) - > urls ( ) . at ( 0 ) . toLocalFile ( ) ;
}
else if ( pEvent - > mimeData ( ) - > hasImage ( ) ) {
qDebug ( ) < < " image dropped " ;
pixFromDropEvent . loadFromData ( pEvent - > mimeData ( ) - > imageData ( ) . toByteArray ( ) ) ;
if ( ! pixFromDropEvent . isNull ( ) )
mimeType = " image " ;
}
if ( mimeType . isEmpty ( ) & & resourcePath . isEmpty ( ) ) {
pEvent - > acceptProposedAction ( ) ;
return ;
}
if ( ! resourcePath . isEmpty ( ) ) {
qDebug ( ) < < " emitting 'mediaDropped' " ;
emit mediaDropped ( resourcePath ) ;
pEvent - > acceptProposedAction ( ) ;
}
}
void UBTBMediaContainer : : dragEnterEvent ( QDragEnterEvent * pEvent )
{
pEvent - > acceptProposedAction ( ) ;
}
void UBTBMediaContainer : : dragMoveEvent ( QDragMoveEvent * pEvent )
{
pEvent - > acceptProposedAction ( ) ;
}
void UBTBMediaContainer : : dragLeaveEvent ( QDragLeaveEvent * pEvent )
{
pEvent - > accept ( ) ;
}
void UBTBMediaContainer : : addMedia ( const QString & mediaPath )
{
if ( ! mediaPath . isEmpty ( ) )
mMediaList . append ( mediaPath ) ;
else
qWarning ( ) < < __FUNCTION__ < < " empty path " ;
QString mimeType = UBFileSystemUtils : : mimeTypeFromFileName ( mediaPath ) ;
if ( mimeType . contains ( " image " ) ) {
QPixmap pix = QPixmap ( mediaPath ) ;
QLabel * label = new QLabel ( ) ;
label - > setPixmap ( pix ) ;
label - > setScaledContents ( true ) ;
addWidget ( label ) ;
}
else if ( mimeType . contains ( " video " ) | | mimeType . contains ( " audio " ) ) {
UBMediaPlayer * mediaPlayer = new UBMediaPlayer ( ) ;
mediaPlayer - > setFile ( mediaPath ) ;
addWidget ( mediaPlayer ) ;
}
else {
qWarning ( ) < < " pMediaPath " < < mediaPath ;
qWarning ( ) < < " bad idea to come here " ;
}
}
QStringList UBTBMediaContainer : : mediaUrls ( )
{
return mMediaList ;
}
void UBTBMediaContainer : : cleanMedias ( )
{
mMediaList . clear ( ) ;
}
QWidget * UBTBMediaContainer : : generateMediaWidget ( const QString & url )
{
QWidget * pW = NULL ;
if ( ! url . isEmpty ( ) )
mMediaList . append ( url ) ;
else
qWarning ( ) < < __FUNCTION__ < < " empty path " ;
QString mimeType = UBFileSystemUtils : : mimeTypeFromFileName ( url ) ;
if ( mimeType . contains ( " image " ) ) {
QPixmap pix = QPixmap ( url ) ;
QLabel * label = new QLabel ( ) ;
pix . scaledToWidth ( label - > width ( ) ) ;
label - > resize ( pix . width ( ) , pix . height ( ) ) ;
label - > setPixmap ( pix ) ;
label - > setScaledContents ( true ) ;
pW = label ;
}
else if ( mimeType . contains ( " video " ) | | mimeType . contains ( " audio " ) ) {
UBMediaPlayer * mediaPlayer = new UBMediaPlayer ( ) ;
//UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video);
mediaPlayer - > setFile ( url ) ;
pW = mediaPlayer ;
}
else {
qWarning ( ) < < " pMediaPath " < < url ;
qWarning ( ) < < " bad idea to come here " ;
}
return pW ;
}