# include "customWidgets/UBGlobals.h"
# include "core/UBApplication.h"
# include "frameworks/UBFileSystemUtils.h"
# include "gui/UBMediaPlayer.h"
# include "customWidgets/UBMediaWidget.h"
# include "UBTBPageEditWidget.h"
UBTBPageEditWidget : : UBTBPageEditWidget ( UBTeacherBarDataMgr * pDataMgr , QWidget * parent , const char * name ) : QWidget ( parent )
, mpDataMgr ( NULL )
, mpTitleLabel ( NULL )
, mpTitle ( NULL )
, mpMediaLabel ( NULL )
, mpActionLabel ( NULL )
, mpActions ( NULL )
, mpActionButton ( NULL )
, mpLinkLabel ( NULL )
, mpLinks ( NULL )
, mpLinkButton ( NULL )
, mpCommentLabel ( NULL )
, mpComments ( NULL )
, mpDocumentEditbutton ( NULL )
, mpPagePreviewButton ( NULL )
, mpContainer ( NULL )
{
Q_UNUSED ( name ) ;
mpDataMgr = pDataMgr ;
mActions . clear ( ) ;
mUrls . clear ( ) ;
setAttribute ( Qt : : WA_StyledBackground , true ) ;
setStyleSheet ( UBApplication : : globalStyleSheet ( ) ) ;
mLayout . setContentsMargins ( 0 , 0 , 0 , 0 ) ;
setLayout ( & mLayout ) ;
mpContainer = new QWidget ( this ) ;
mpContainer - > setObjectName ( " DockPaletteWidgetBox " ) ;
mpContainer - > setLayout ( & mContainerLayout ) ;
mLayout . addWidget ( mpContainer , 1 ) ;
// 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 & ) ) ) ;
mContainerLayout . addWidget ( mpTitleLabel , 0 ) ;
mContainerLayout . addWidget ( mpTitle , 0 ) ;
// Actions
mpActionLabel = new QLabel ( tr ( " Actions " ) , mpContainer ) ;
mContainerLayout . addWidget ( mpActionLabel , 0 ) ;
mpActions = new UBWidgetList ( mpContainer ) ;
mpActions - > setEmptyText ( tr ( " Add actions " ) ) ;
mContainerLayout . addWidget ( mpActions , 1 ) ;
mpActionButton = new QPushButton ( mpContainer ) ;
mpActionButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mpActionButton - > setText ( tr ( " Add action " ) ) ;
mActionLayout . addWidget ( mpActionButton , 0 ) ;
mActionLayout . addStretch ( 1 ) ;
mContainerLayout . addLayout ( & mActionLayout , 0 ) ;
// Media
mpMediaLabel = new QLabel ( tr ( " Medias " ) , mpContainer ) ;
mContainerLayout . addWidget ( mpMediaLabel , 0 ) ;
mpMediaContainer = new UBTBMediaContainer ( mpContainer ) ;
mpMediaContainer - > setEmptyText ( tr ( " Drop media here " ) ) ;
mContainerLayout . addWidget ( mpMediaContainer , 1 ) ;
// Links
mpLinkLabel = new QLabel ( tr ( " Links " ) , mpContainer ) ;
mContainerLayout . addWidget ( mpLinkLabel , 0 ) ;
mpLinks = new UBWidgetList ( mpContainer ) ;
mContainerLayout . addWidget ( mpLinks , 1 ) ;
mpLinkButton = new QPushButton ( tr ( " Add link " ) , mpContainer ) ;
mpLinkButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mLinkLayout . addWidget ( mpLinkButton , 0 ) ;
mLinkLayout . addStretch ( 1 ) ;
mContainerLayout . addLayout ( & mLinkLayout , 0 ) ;
// Comments
mpCommentLabel = new QLabel ( tr ( " Comments " ) , mpContainer ) ;
mContainerLayout . addWidget ( mpCommentLabel , 0 ) ;
mpComments = new QTextEdit ( mpContainer ) ;
mpComments - > setObjectName ( " DockPaletteWidgetBox " ) ;
mpComments - > setStyleSheet ( " background:white; " ) ;
mContainerLayout . addWidget ( mpComments , 1 ) ;
mpPagePreviewButton = new QPushButton ( tr ( " Preview " ) , this ) ;
mpPagePreviewButton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mpDocumentEditbutton = new QPushButton ( tr ( " Document View " ) , this ) ;
mpDocumentEditbutton - > setObjectName ( " DockPaletteWidgetButton " ) ;
mPagePreviewLayout . addWidget ( mpDocumentEditbutton , 0 ) ;
mPagePreviewLayout . addWidget ( mpPagePreviewButton , 0 ) ;
mPagePreviewLayout . addStretch ( 1 ) ;
mLayout . addLayout ( & mPagePreviewLayout , 0 ) ;
connect ( mpTitle , SIGNAL ( textChanged ( QString ) ) , this , SLOT ( onTitleChanged ( ) ) ) ;
connect ( mpComments , SIGNAL ( textChanged ( ) ) , this , SLOT ( onCommentsChanged ( ) ) ) ;
connect ( mpActionButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onActionButton ( ) ) ) ;
connect ( mpLinkButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onLinkButton ( ) ) ) ;
connect ( mpDocumentEditbutton , SIGNAL ( clicked ( ) ) , this , SLOT ( onDocumentEditClicked ( ) ) ) ;
connect ( mpPagePreviewButton , SIGNAL ( clicked ( ) ) , this , SLOT ( onPagePreviewClicked ( ) ) ) ;
connect ( mpMediaContainer , SIGNAL ( mediaDropped ( QString ) ) , this , SLOT ( onMediaDropped ( QString ) ) ) ;
}
UBTBPageEditWidget : : ~ UBTBPageEditWidget ( )
{
DELETEPTR ( mpDocumentEditbutton ) ;
DELETEPTR ( mpPagePreviewButton ) ;
DELETEPTR ( mpComments ) ;
DELETEPTR ( mpCommentLabel ) ;
DELETEPTR ( mpLinks ) ;
DELETEPTR ( mpLinkLabel ) ;
DELETEPTR ( mpLinkButton ) ;
DELETEPTR ( mpMediaLabel ) ;
DELETEPTR ( mpActionButton ) ;
DELETEPTR ( mpActionLabel ) ;
DELETEPTR ( mpTitleLabel ) ;
DELETEPTR ( mpTitle ) ;
}
void UBTBPageEditWidget : : onTitleChanged ( )
{
mpDataMgr - > setPageTitle ( mpTitle - > text ( ) ) ;
emit valueChanged ( ) ;
}
void UBTBPageEditWidget : : onCommentsChanged ( )
{
mpDataMgr - > setComments ( mpComments - > document ( ) - > toPlainText ( ) ) ;
emit valueChanged ( ) ;
}
void UBTBPageEditWidget : : onActionButton ( )
{
UBTeacherStudentAction * pAction = new UBTeacherStudentAction ( this ) ;
mActions < < pAction ;
mpActions - > addWidget ( pAction ) ;
}
void UBTBPageEditWidget : : onLinkButton ( )
{
UBUrlWidget * pUrl = new UBUrlWidget ( this ) ;
mUrls < < pUrl ;
mpLinks - > addWidget ( pUrl ) ;
}
void UBTBPageEditWidget : : onMediaDropped ( const QString & url )
{
if ( " " ! = url ) {
QWidget * pMedia = mpMediaContainer - > generateMediaWidget ( url ) ;
if ( NULL ! = pMedia ) {
mpDataMgr - > medias ( ) - > append ( pMedia ) ;
mpDataMgr - > addMediaUrl ( url ) ;
mpMediaContainer - > addWidget ( pMedia ) ;
}
}
}
void UBTBPageEditWidget : : onDocumentEditClicked ( )
{
emit changeTBState ( eTeacherBarState_DocumentEdit ) ;
}
void UBTBPageEditWidget : : onPagePreviewClicked ( )
{
emit changeTBState ( eTeacherBarState_PagePreview ) ;
}
void UBTBPageEditWidget : : saveFields ( )
{
mpDataMgr - > actions ( ) - > clear ( ) ;
mpDataMgr - > urls ( ) - > clear ( ) ;
foreach ( UBTeacherStudentAction * pAct , mActions ) {
sAction action ;
action . type = pAct - > comboValue ( ) . toInt ( ) ;
action . content = pAct - > text ( ) ;
mpDataMgr - > actions ( ) - > append ( action ) ;
}
foreach ( UBUrlWidget * pUrl , mUrls ) {
sLink link ;
link . title = pUrl - > title ( ) ;
link . link = pUrl - > url ( ) ;
mpDataMgr - > urls ( ) - > append ( link ) ;
}
// TODO : Medias
}
void UBTBPageEditWidget : : updateFields ( )
{
mpTitle - > setText ( mpDataMgr - > pageTitle ( ) ) ;
foreach ( sAction action , * mpDataMgr - > actions ( ) ) {
UBTeacherStudentAction * pAction = new UBTeacherStudentAction ( this ) ;
pAction - > setComboValue ( action . type ) ;
pAction - > setText ( action . content ) ;
mActions < < pAction ;
mpActions - > addWidget ( pAction ) ;
}
foreach ( sLink link , * mpDataMgr - > urls ( ) ) {
UBUrlWidget * urlWidget = new UBUrlWidget ( this ) ;
urlWidget - > setTitle ( link . title ) ;
urlWidget - > setUrl ( link . link ) ;
mUrls < < urlWidget ;
mpLinks - > addWidget ( urlWidget ) ;
}
// TODO: add the medias
mpComments - > document ( ) - > setPlainText ( mpDataMgr - > comments ( ) ) ;
}
void UBTBPageEditWidget : : clearFields ( )
{
mpTitle - > setText ( " " ) ;
mpComments - > setText ( " " ) ;
foreach ( UBTeacherStudentAction * pAction , mActions ) {
mpActions - > removeWidget ( pAction ) ;
DELETEPTR ( pAction ) ;
}
mActions . clear ( ) ;
foreach ( UBUrlWidget * pLink , mUrls ) {
mpLinks - > removeWidget ( pLink ) ;
DELETEPTR ( pLink ) ;
}
mUrls . clear ( ) ;
mpMediaContainer - > cleanMedias ( ) ;
}
// ---------------------------------------------------------------------------------------------
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 ( 0 ) ;
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 ( 0 ) ;
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 ( )
{
DELETEPTR ( mpTitle ) ;
DELETEPTR ( mpTitleLabel ) ;
DELETEPTR ( mpUrlLabel ) ;
DELETEPTR ( mpUrl ) ;
DELETEPTR ( mpTitleLayout ) ;
DELETEPTR ( mpLabelLayout ) ;
DELETEPTR ( mpLayout ) ;
}
QString UBUrlWidget : : url ( )
{
QString str ;
if ( NULL ! = mpUrl ) {
str = mpUrl - > text ( ) + " ; " + mpTitle - > text ( ) ;
}
return str ;
}
void UBUrlWidget : : setUrl ( const QString & url )
{
if ( NULL ! = mpUrl ) {
mpUrl - > setText ( url ) ;
}
}
// ------------------------------------------------------------------------------------------------------------------------------------
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 ( ) ) {
resourcePath = pEvent - > mimeData ( ) - > text ( ) ;
}
else if ( pEvent - > mimeData ( ) - > hasUrls ( ) ) {
resourcePath = pEvent - > mimeData ( ) - > urls ( ) . at ( 0 ) . toLocalFile ( ) ;
}
else if ( 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 ( ) ) {
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 " ) ) {
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 ;
}
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 ( )
{
DELETEPTR ( mpCombo ) ;
DELETEPTR ( mpText ) ;
DELETEPTR ( mpComboLayout ) ;
DELETEPTR ( mpLayout ) ;
}
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 ) ;
}
}