Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenBoard
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lifo
Nicolas Ollinger
OpenBoard
Commits
33d2bfab
Commit
33d2bfab
authored
Apr 12, 2012
by
shibakaneki
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:Sankore/Sankore-3.1
parents
368a4dc5
8238b22e
Changes
59
Show whitespace changes
Inline
Side-by-side
Showing
59 changed files
with
3065 additions
and
2503 deletions
+3065
-2503
UBCFFAdaptor.cpp
plugins/cffadaptor/src/UBCFFAdaptor.cpp
+22
-20
audio.png
resources/images/teacherGuide/audio.png
+0
-0
image.png
resources/images/teacherGuide/image.png
+0
-0
link.png
resources/images/teacherGuide/link.png
+0
-0
movie.png
resources/images/teacherGuide/movie.png
+0
-0
w3c.png
resources/images/teacherGuide/w3c.png
+0
-0
sankore.qrc
resources/sankore.qrc
+5
-0
style.qss
resources/style.qss
+60
-70
UBImportDocument.cpp
src/adaptors/UBImportDocument.cpp
+1
-1
UBBoardPaletteManager.cpp
src/board/UBBoardPaletteManager.cpp
+12
-5
UBBoardPaletteManager.h
src/board/UBBoardPaletteManager.h
+4
-0
UBBoardView.cpp
src/board/UBBoardView.cpp
+74
-78
UBBoardView.h
src/board/UBBoardView.h
+1
-0
UBApplication.cpp
src/core/UBApplication.cpp
+5
-21
UBApplication.h
src/core/UBApplication.h
+0
-1
UBApplicationController.cpp
src/core/UBApplicationController.cpp
+3
-0
UBPersistenceManager.cpp
src/core/UBPersistenceManager.cpp
+12
-2
UBPersistenceManager.h
src/core/UBPersistenceManager.h
+1
-1
UBActionableWidget.cpp
src/customWidgets/UBActionableWidget.cpp
+15
-0
UBActionableWidget.h
src/customWidgets/UBActionableWidget.h
+15
-0
UBDraggableLabel.cpp
src/customWidgets/UBDraggableLabel.cpp
+0
-39
UBDraggableLabel.h
src/customWidgets/UBDraggableLabel.h
+0
-23
UBDraggableMedia.cpp
src/customWidgets/UBDraggableMedia.cpp
+0
-42
UBDraggableMedia.h
src/customWidgets/UBDraggableMedia.h
+0
-19
UBMediaWidget.cpp
src/customWidgets/UBMediaWidget.cpp
+37
-3
UBMediaWidget.h
src/customWidgets/UBMediaWidget.h
+6
-0
UBWidgetList.cpp
src/customWidgets/UBWidgetList.cpp
+0
-229
UBWidgetList.h
src/customWidgets/UBWidgetList.h
+0
-69
customWidgets.pri
src/customWidgets/customWidgets.pri
+3
-8
UBDesktopAnnotationController.cpp
src/desktop/UBDesktopAnnotationController.cpp
+0
-38
UBDocumentController.cpp
src/document/UBDocumentController.cpp
+34
-10
UBDocumentController.h
src/document/UBDocumentController.h
+3
-1
UBGlobals.h
src/globals/UBGlobals.h
+31
-4
UBActionPalette.cpp
src/gui/UBActionPalette.cpp
+1
-0
UBActionPalette.h
src/gui/UBActionPalette.h
+2
-0
UBCachePropertiesWidget.cpp
src/gui/UBCachePropertiesWidget.cpp
+5
-4
UBDockDownloadWidget.cpp
src/gui/UBDockDownloadWidget.cpp
+3
-2
UBDockTeacherGuideWidget.cpp
src/gui/UBDockTeacherGuideWidget.cpp
+44
-0
UBDockTeacherGuideWidget.h
src/gui/UBDockTeacherGuideWidget.h
+39
-0
UBDocumentNavigator.cpp
src/gui/UBDocumentNavigator.cpp
+0
-1
UBDownloadWidget.cpp
src/gui/UBDownloadWidget.cpp
+4
-3
UBLibItemProperties.cpp
src/gui/UBLibItemProperties.cpp
+4
-3
UBLibNavigatorWidget.cpp
src/gui/UBLibNavigatorWidget.cpp
+4
-3
UBLibWebView.cpp
src/gui/UBLibWebView.cpp
+6
-3
UBLibWidget.cpp
src/gui/UBLibWidget.cpp
+4
-3
UBMediaPlayer.cpp
src/gui/UBMediaPlayer.cpp
+0
-389
UBMediaPlayer.h
src/gui/UBMediaPlayer.h
+0
-107
UBPageNavigationWidget.cpp
src/gui/UBPageNavigationWidget.cpp
+6
-3
UBTGWidgetTreeDelegate.cpp
src/gui/UBTGWidgetTreeDelegate.cpp
+34
-0
UBTGWidgetTreeDelegate.h
src/gui/UBTGWidgetTreeDelegate.h
+35
-0
UBTeacherGuideDelegate.cpp
src/gui/UBTeacherGuideDelegate.cpp
+5
-0
UBTeacherGuideDelegate.h
src/gui/UBTeacherGuideDelegate.h
+10
-0
UBTeacherGuideWidget.cpp
src/gui/UBTeacherGuideWidget.cpp
+500
-0
UBTeacherGuideWidget.h
src/gui/UBTeacherGuideWidget.h
+123
-0
UBTeacherGuideWidgetsTools.cpp
src/gui/UBTeacherGuideWidgetsTools.cpp
+423
-0
UBTeacherGuideWidgetsTools.h
src/gui/UBTeacherGuideWidgetsTools.h
+157
-0
UBThumbnailWidget.cpp
src/gui/UBThumbnailWidget.cpp
+879
-863
UBThumbnailWidget.h
src/gui/UBThumbnailWidget.h
+423
-421
gui.pri
src/gui/gui.pri
+10
-14
No files found.
plugins/cffadaptor/src/UBCFFAdaptor.cpp
View file @
33d2bfab
...
...
@@ -639,7 +639,7 @@ QDomElement UBCFFAdaptor::UBToCFFConverter::parseSvgPageSection(const QDomElemen
void
UBCFFAdaptor
::
UBToCFFConverter
::
writeQDomElementToXML
(
const
QDomNode
&
node
)
{
if
(
!
node
.
isNull
())
if
(
!
node
.
isNull
())
{
if
(
node
.
isText
())
{
mIWBContentWriter
->
writeCharacters
(
node
.
nodeValue
());
...
...
@@ -662,6 +662,7 @@ void UBCFFAdaptor::UBToCFFConverter::writeQDomElementToXML(const QDomNode &node)
mIWBContentWriter
->
writeEndElement
();
}
}
}
bool
UBCFFAdaptor
::
UBToCFFConverter
::
writeExtendedIwbSection
()
...
...
@@ -1322,7 +1323,7 @@ QDomNode UBCFFAdaptor::UBToCFFConverter::findNodeByTagName(const QDomNode &node,
if
(
!
iterNode
.
firstChildElement
().
isNull
())
{
QDomNode
foundNode
=
findNodeByTagName
(
iterNode
.
firstChildElement
(),
tagName
);
if
(
!
foundNode
.
isNull
())
if
(
!
foundNode
.
isNull
())
{
if
(
foundNode
.
isElement
())
{
if
(
tagName
==
foundNode
.
toElement
().
tagName
())
...
...
@@ -1332,6 +1333,7 @@ QDomNode UBCFFAdaptor::UBToCFFConverter::findNodeByTagName(const QDomNode &node,
break
;
}
}
}
if
(
!
iterNode
.
nextSibling
().
isNull
())
iterNode
=
iterNode
.
nextSibling
();
...
...
resources/images/teacherGuide/audio.png
0 → 100644
View file @
33d2bfab
3.22 KB
resources/images/teacherGuide/image.png
0 → 100644
View file @
33d2bfab
3.27 KB
resources/images/teacherGuide/link.png
0 → 100644
View file @
33d2bfab
3.5 KB
resources/images/teacherGuide/movie.png
0 → 100644
View file @
33d2bfab
3.19 KB
resources/images/teacherGuide/w3c.png
0 → 100644
View file @
33d2bfab
3.25 KB
resources/sankore.qrc
View file @
33d2bfab
...
...
@@ -347,5 +347,10 @@
<file>images/licenses/ccbyncsa.png</file>
<file>images/licenses/ccbynd.png</file>
<file>images/licenses/ccbysa.png</file>
<file>images/teacherGuide/audio.png</file>
<file>images/teacherGuide/image.png</file>
<file>images/teacherGuide/link.png</file>
<file>images/teacherGuide/movie.png</file>
<file>images/teacherGuide/w3c.png</file>
</qresource>
</RCC>
resources/style.qss
View file @
33d2bfab
...
...
@@ -4,22 +4,13 @@ QWidget#UBLibPathViewer,
QWidget#UBLibNavigatorWidget,
QWidget#UBLibItemProperties,
QWidget#UBDownloadWidget,
QWidget#UBWidgetList,
QWidget#UBTeacherBarDropMediaZone,
QWidget#UBTBMediaContainer
QWidget#UBTeacherGuideWidget
{
background: #EEEEEE;
border-radius: 10px;
border: 2px solid #999999;
}
QFrame#UBTBSeparator
{
background: #DDDDDD;
border-radius: 2px;
border: 1px solid #DDDDDD;
}
QWidget#UBMediaVideoContainer
{
background: #000000;
...
...
@@ -27,40 +18,6 @@ QWidget#UBMediaVideoContainer
border: 2px solid #999999;
}
QWidget#UBTBPreviewWidget
{
background: #FFFFFF;
border-radius: 10px;
border: 2px solid #999999;
}
QLabel#UBTBPreviewSessionTitle
{
font-size: 12px;
}
QLabel#UBTeacherBarPreviewTitle
{
color: #555555;
font-size : 20px;
font-weight:bold;
padding-left:5px;
}
QLabel#UBMediaPlayerButton
{
padding: 0px 0px 0px 0px;
}
QLabel#UBTeacherBarPreviewSubtitle
{
color: #555555;
font-size : 15px;
font-weight:bold;
padding-left:5px;
}
QWidget#UBLibWebView
{
background: #EEEEEE;
...
...
@@ -68,30 +25,6 @@ QWidget#UBLibWebView
border: 2px solid #999999;
}
QWidget#UBActionPreviewOwner
{
color: #555555;
font-size : 12px;
font-weight: bold;
}
QWidget#UBTeacherBarPreviewComments,
QWidget#UBTeacherBarTargetBox
{
border-radius: 10px;
border: white 2px solid;
padding: 5px 5px 5px 5px;
background-color: white;
}
QWidget#UBActionPreviewContent,
QTextEdit#UBCommentPreview
{
border-radius : 10px;
border: 2px solid #999999;
padding: 5px 5px 5px 5px;
}
QWebView#SearchEngineView
{
background:white;
...
...
@@ -109,9 +42,11 @@ QLabel#DockPaletteWidgetTitle
font-weight:bold;
}
QLineEdit#DockPaletteWidgetLineEdit
QLineEdit#UBTGLineEdit,
QLabel#UBTGMediaDropMeLabel
{
background: white;
border: 1 solid #999999;
border-radius : 10px;
padding: 2px;
}
...
...
@@ -269,3 +204,58 @@ QSlider::groove::horizontal
border-radius:5px;
border:1px solid #555555;
}
QLabel#UBTGEditionDocumentTitle
{
color: black;
font-size : 14px;
font-weight:bold;
}
QLabel#UBTGPresentationDocumentTitle
{
color: black;
font-size : 12px;
font-weight:bold;
}
QLabel#UBTGEditionPageNumberLabel
{
color: black;
font-size : 12px;
font-weight:bold;
}
QLabel#UBTGPresentationPageNumberLabel
{
color: black;
font-size : 12px;
}
UBTGAdaptableText#UBTGEditionPageTitle,
UBTGAdaptableText#UBTGEditionComment
{
color: black;
font-size : 12px;
}
UBTGAdaptableText#UBTGPresentationPageTitle
{
color: black;
font-size:16px;
font-weight:bold;
border : none;
}
UBTGAdaptableText#UBTGPresentationComment
{
color: black;
font-size:12px;
border : none;
}
QFrame#UBTGEditionSeparator,
QFrame#UBTGPresentationSepartor
{
background-color: #cccccc;
}
src/adaptors/UBImportDocument.cpp
View file @
33d2bfab
...
...
@@ -191,7 +191,7 @@ UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString&
return
0
;
}
else
{
UBDocumentProxy
*
newDocument
=
UBPersistenceManager
::
persistenceManager
()
->
createDocumentFromDir
(
documentRootFolder
);
UBDocumentProxy
*
newDocument
=
UBPersistenceManager
::
persistenceManager
()
->
createDocumentFromDir
(
documentRootFolder
,
pGroup
);
UBApplication
::
showMessage
(
tr
(
"Import successful."
));
return
newDocument
;
}
...
...
src/board/UBBoardPaletteManager.cpp
View file @
33d2bfab
...
...
@@ -31,6 +31,7 @@
#include "gui/UBZoomPalette.h"
#include "gui/UBActionPalette.h"
#include "gui/UBFavoriteToolPalette.h"
#include "gui/UBDockTeacherGuideWidget.h"
#include "web/UBWebPage.h"
...
...
@@ -84,6 +85,7 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll
,
mpCachePropWidget
(
NULL
)
,
mpDownloadWidget
(
NULL
)
,
mpDesktopLibWidget
(
NULL
)
,
mpTeacherGuideWidget
(
NULL
)
,
mDownloadInProgress
(
false
)
{
setupPalettes
();
...
...
@@ -135,6 +137,7 @@ void UBBoardPaletteManager::setupDockPaletteWidgets()
mpCachePropWidget
=
new
UBCachePropertiesWidget
();
mpDownloadWidget
=
new
UBDockDownloadWidget
();
mpTeacherGuideWidget
=
new
UBDockTeacherGuideWidget
();
// Add the dock palettes
mLeftPalette
=
new
UBLeftPalette
(
mContainer
);
...
...
@@ -143,6 +146,9 @@ void UBBoardPaletteManager::setupDockPaletteWidgets()
mLeftPalette
->
registerWidget
(
mpPageNavigWidget
);
mLeftPalette
->
addTab
(
mpPageNavigWidget
);
mLeftPalette
->
registerWidget
(
mpTeacherGuideWidget
);
mLeftPalette
->
addTab
(
mpTeacherGuideWidget
);
mLeftPalette
->
connectSignals
();
mRightPalette
=
new
UBRightPalette
(
mContainer
);
...
...
@@ -232,6 +238,7 @@ void UBBoardPaletteManager::setupPalettes()
#endif
}
setupDockPaletteWidgets
();
...
...
src/board/UBBoardPaletteManager.h
View file @
33d2bfab
...
...
@@ -40,6 +40,7 @@ class UBServerXMLHttpRequest;
class
UBKeyboardPalette
;
class
UBMainWindow
;
class
UBApplicationController
;
class
UBDockTeacherGuideWidget
;
class
UBBoardPaletteManager
:
public
QObject
{
...
...
@@ -52,6 +53,7 @@ class UBBoardPaletteManager : public QObject
void
setupLayout
();
UBLeftPalette
*
leftPalette
(){
return
mLeftPalette
;}
UBRightPalette
*
rightPalette
(){
return
mRightPalette
;}
UBStylusPalette
*
stylusPalette
(){
return
mStylusPalette
;}
void
showVirtualKeyboard
(
bool
show
=
true
);
void
initPalettesPosAtStartup
();
void
connectToDocumentController
();
...
...
@@ -134,6 +136,8 @@ class UBBoardPaletteManager : public QObject
// lib widget!
UBLibWidget
*
mpDesktopLibWidget
;
UBDockTeacherGuideWidget
*
mpTeacherGuideWidget
;
bool
mDownloadInProgress
;
private
slots
:
...
...
src/board/UBBoardView.cpp
View file @
33d2bfab
...
...
@@ -35,8 +35,8 @@
#include "gui/UBToolWidget.h"
#include "gui/UBResources.h"
#include "gui/UBMainWindow.h"
#include "gui/UBMediaPlayer.h"
#include "gui/UBThumbnailWidget.h"
#include "gui/UBTeacherGuideWidgetsTools.h"
#include "board/UBBoardController.h"
...
...
@@ -49,9 +49,6 @@
#include "document/UBDocumentProxy.h"
#include "customWidgets/UBDraggableLabel.h"
#include "customWidgets/UBDraggableMedia.h"
#include "tools/UBGraphicsCompass.h"
#include "tools/UBGraphicsCache.h"
#include "tools/UBGraphicsTriangle.h"
...
...
@@ -379,8 +376,7 @@ void UBBoardView::tabletEvent (QTabletEvent * event)
}
void
UBBoardView
::
mousePressEvent
(
QMouseEvent
*
event
)
void
UBBoardView
::
mousePressEvent
(
QMouseEvent
*
event
)
{
if
(
isAbsurdPoint
(
event
->
pos
()))
{
...
...
@@ -390,8 +386,11 @@ UBBoardView::mousePressEvent (QMouseEvent *event)
mMouseDownPos
=
event
->
pos
();
emit
clickOnBoard
();
if
(
event
->
button
()
==
Qt
::
LeftButton
&&
isInteractive
())
{
UBStylusTool
::
Enum
currentTool
=
(
UBStylusTool
::
Enum
)
UBDrawingController
::
drawingController
()
->
stylusTool
();
if
(
!
mTabletStylusIsPressed
)
...
...
@@ -765,11 +764,6 @@ UBBoardView::drawItems (QPainter *painter, int numItems,
}
}
//void UBBoardView::dragEnterEvent (QDragEnterEvent *event)
//{
// // TODO UB 4.x be smarter with drag accept code .... we cannot handle everything ...
// event->acceptProposedAction ();
//}
void
UBBoardView
::
dragMoveEvent
(
QDragMoveEvent
*
event
)
{
...
...
@@ -806,15 +800,17 @@ void UBBoardView::dropEvent (QDropEvent *event)
QGraphicsItem
*
graphicsItemAtPos
=
itemAt
(
event
->
pos
().
x
(),
event
->
pos
().
y
());
UBGraphicsWidgetItem
*
graphicsWidget
=
dynamic_cast
<
UBGraphicsWidgetItem
*>
(
graphicsItemAtPos
);
if
(
graphicsWidget
&&
graphicsWidget
->
acceptDrops
())
{
qDebug
()
<<
event
->
source
();
if
(
graphicsWidget
&&
graphicsWidget
->
acceptDrops
())
{
graphicsWidget
->
processDropEvent
(
event
);
event
->
acceptProposedAction
();
}
else
if
(
!
event
->
source
()
||
dynamic_cast
<
UBThumbnailWidget
*>
(
event
->
source
())
||
dynamic_cast
<
QWebView
*>
(
event
->
source
())
||
dynamic_cast
<
UBDraggableMediaPlayer
*>
(
event
->
source
())
||
dynamic_cast
<
UBDraggableLabel
*>
(
event
->
source
())
||
dynamic_cast
<
UBDraggableMedia
*>
(
event
->
source
()))
{
}
else
if
(
!
event
->
source
()
||
dynamic_cast
<
UBThumbnailWidget
*>
(
event
->
source
())
||
dynamic_cast
<
QWebView
*>
(
event
->
source
())
||
dynamic_cast
<
UBTGMediaWidget
*>
(
event
->
source
()))
{
mController
->
processMimeData
(
event
->
mimeData
(),
mapToScene
(
event
->
pos
()));
event
->
acceptProposedAction
();
}
...
...
src/board/UBBoardView.h
View file @
33d2bfab
...
...
@@ -46,6 +46,7 @@ class UBBoardView : public QGraphicsView
void
resized
(
QResizeEvent
*
event
);
void
hidden
();
void
shown
();
void
clickOnBoard
();
protected
:
...
...
src/core/UBApplication.cpp
View file @
33d2bfab
...
...
@@ -645,22 +645,6 @@ void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment,
painter
->
setPen
(
savedPen
);
}
QString
UBApplication
::
globalStyleSheet
()
{
QString
style
;
QFile
f
(
":style.qss"
);
if
(
f
.
exists
())
{
if
(
f
.
open
(
QIODevice
::
ReadOnly
))
{
style
=
QString
(
f
.
readAll
());
}
}
return
style
;
}
QString
UBApplication
::
urlFromHtml
(
QString
html
)
{
QString
_html
;
...
...
src/core/UBApplication.h
View file @
33d2bfab
...
...
@@ -78,7 +78,6 @@ class UBApplication : public QtSingleApplication
static
void
setDisabled
(
bool
disable
);
static
QObject
*
staticMemoryCleaner
;
static
QString
globalStyleSheet
();
void
decorateActionMenu
(
QAction
*
action
);
void
insertSpaceToToolbarBeforeAction
(
QToolBar
*
toolbar
,
QAction
*
action
,
int
width
=
-
1
);
...
...
src/core/UBApplicationController.cpp
View file @
33d2bfab
...
...
@@ -337,6 +337,9 @@ void UBApplicationController::showBoard()
mMainWindow
->
tutorialToolBar
->
hide
();
mMainWindow
->
boardToolBar
->
show
();
if
(
mMainMode
==
Document
&&
UBApplication
::
documentController
->
getSelectedItemIndex
()
!=
-
1
)
UBApplication
::
boardController
->
setActiveDocumentScene
(
UBApplication
::
documentController
->
getCurrentDocument
(),
UBApplication
::
documentController
->
getSelectedItemIndex
());
mMainMode
=
Board
;
adaptToolBar
();
...
...
src/core/UBPersistenceManager.cpp
View file @
33d2bfab
...
...
@@ -254,13 +254,23 @@ UBDocumentProxy* UBPersistenceManager::createDocument(const QString& pGroupName,
return
doc
;
}
UBDocumentProxy
*
UBPersistenceManager
::
createDocumentFromDir
(
const
QString
&
pDocumentDirectory
)
UBDocumentProxy
*
UBPersistenceManager
::
createDocumentFromDir
(
const
QString
&
pDocumentDirectory
,
const
QString
&
pGroupName
,
const
QString
&
pName
,
bool
withEmptyPage
)
{
checkIfDocumentRepositoryExists
();
UBDocumentProxy
*
doc
=
new
UBDocumentProxy
(
pDocumentDirectory
);
// deleted in UBPersistenceManager::destructor
if
(
pGroupName
.
length
()
>
0
)
{
doc
->
setMetaData
(
UBSettings
::
documentGroupName
,
pGroupName
);
}
if
(
pName
.
length
()
>
0
)
{
doc
->
setMetaData
(
UBSettings
::
documentName
,
pName
);
}
if
(
withEmptyPage
)
createDocumentSceneAt
(
doc
,
0
);
QMap
<
QString
,
QVariant
>
metadatas
=
UBMetadataDcSubsetAdaptor
::
load
(
pDocumentDirectory
);
foreach
(
QString
key
,
metadatas
.
keys
())
...
...
src/core/UBPersistenceManager.h
View file @
33d2bfab
...
...
@@ -46,7 +46,7 @@ class UBPersistenceManager : public QObject
static
void
destroy
();
virtual
UBDocumentProxy
*
createDocument
(
const
QString
&
pGroupName
=
""
,
const
QString
&
pName
=
""
,
bool
withEmptyPage
=
true
);
virtual
UBDocumentProxy
*
createDocumentFromDir
(
const
QString
&
pDocumentDirectory
);
virtual
UBDocumentProxy
*
createDocumentFromDir
(
const
QString
&
pDocumentDirectory
,
const
QString
&
pGroupName
=
""
,
const
QString
&
pName
=
""
,
bool
withEmptyPage
=
false
);
virtual
UBDocumentProxy
*
persistDocumentMetadata
(
UBDocumentProxy
*
pDocumentProxy
);
...
...
src/customWidgets/UBActionableWidget.cpp
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QPainter>
#include <QDebug>
...
...
src/customWidgets/UBActionableWidget.h
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBACTIONABLEWIDGET_H
#define UBACTIONABLEWIDGET_H
...
...
src/customWidgets/UBDraggableLabel.cpp
deleted
100644 → 0
View file @
368a4dc5
#include <QMimeData>
#include <QDrag>
#include <QUrl>
#include "UBDraggableLabel.h"
UBDraggableLabel
::
UBDraggableLabel
(
QWidget
*
parent
)
:
QLabel
(
parent
)
{
}
UBDraggableLabel
::~
UBDraggableLabel
()
{
//NOOP
}
void
UBDraggableLabel
::
loadImage
(
QString
imagePath
)
{
mSourcePath
=
imagePath
;
QPixmap
pix
=
QPixmap
(
mSourcePath
);
setPixmap
(
pix
);
setScaledContents
(
true
);
}
void
UBDraggableLabel
::
mousePressEvent
(
QMouseEvent
*
event
)
{
Q_UNUSED
(
event
);
QMimeData
*
mimeData
=
new
QMimeData
;
QList
<
QUrl
>
urls
;
urls
<<
QUrl
::
fromLocalFile
(
mSourcePath
);
mimeData
->
setUrls
(
urls
);
mimeData
->
setText
(
mSourcePath
);
QDrag
*
drag
=
new
QDrag
(
this
);
drag
->
setMimeData
(
mimeData
);
drag
->
start
();
}
src/customWidgets/UBDraggableLabel.h
deleted
100644 → 0
View file @
368a4dc5
#ifndef UBDRAGGABLELABEL_H
#define UBDRAGGABLELABEL_H
#include <QLabel>
class
UBDraggableLabel
:
public
QLabel
{
Q_OBJECT
public
:
UBDraggableLabel
(
QWidget
*
parent
=
0
);
~
UBDraggableLabel
();
void
loadImage
(
QString
imagePath
);
signals
:
public
slots
:
protected
:
QString
mSourcePath
;
void
mousePressEvent
(
QMouseEvent
*
event
);
};
#endif // UBDRAGGABLELABEL_H
src/customWidgets/UBDraggableMedia.cpp
deleted
100644 → 0
View file @
368a4dc5
#include <QApplication>
#include <QUrl>
#include "UBDraggableMedia.h"
UBDraggableMedia
::
UBDraggableMedia
(
eMediaType
type
,
QWidget
*
parent
,
const
char
*
name
)
:
UBMediaWidget
(
type
,
parent
,
name
)
{
removeAllActions
();
}
UBDraggableMedia
::~
UBDraggableMedia
()
{
}
void
UBDraggableMedia
::
mousePressEvent
(
QMouseEvent
*
ev
)
{
if
(
Qt
::
LeftButton
==
ev
->
button
()){
mDragStartPos
=
ev
->
pos
();
}
}
void
UBDraggableMedia
::
mouseMoveEvent
(
QMouseEvent
*
ev
)
{
if
(
!
(
ev
->
buttons
()
&
Qt
::
LeftButton
)){
return
;
}
if
((
ev
->
pos
()
-
mDragStartPos
).
manhattanLength
()
<
QApplication
::
startDragDistance
()){
return
;
}
QDrag
*
drag
=
new
QDrag
(
this
);
QMimeData
*
mimeData
=
new
QMimeData
;
QList
<
QUrl
>
urls
;
urls
<<
QUrl
(
mFilePath
);
mimeData
->
setText
(
mFilePath
);
mimeData
->
setUrls
(
urls
);
drag
->
setMimeData
(
mimeData
);
drag
->
exec
(
Qt
::
CopyAction
|
Qt
::
MoveAction
);
}
src/customWidgets/UBDraggableMedia.h
deleted
100644 → 0
View file @
368a4dc5
#ifndef UBDRAGGABLEMEDIA_H
#define UBDRAGGABLEMEDIA_H
#include "UBMediaWidget.h"
class
UBDraggableMedia
:
public
UBMediaWidget
{
public
:
UBDraggableMedia
(
eMediaType
type
=
eMediaType_Video
,
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBDraggableMedia"
);
~
UBDraggableMedia
();
protected
:
void
mousePressEvent
(
QMouseEvent
*
ev
);
void
mouseMoveEvent
(
QMouseEvent
*
ev
);
private
:
QPoint
mDragStartPos
;
};
#endif // UBDRAGGABLEMEDIA_H
src/customWidgets/UBMediaWidget.cpp
View file @
33d2bfab
...
...
@@ -34,9 +34,10 @@ UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name)
,
mBorder
(
5
)
,
mpMediaContainer
(
NULL
)
,
mpCover
(
NULL
)
// , mpVideoStackedWidget(NULL)
// , mpSnapshotVideoWidget(NULL)
{
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
addAction
(
eAction_Close
);
mType
=
type
;
...
...
@@ -73,6 +74,8 @@ UBMediaWidget::~UBMediaWidget()
DELETEPTR
(
mpPlayStopButton
);
DELETEPTR
(
mpAudioOutput
);
DELETEPTR
(
mpVideoWidget
);
// DELETEPTR(mpVideoStackedWidget);
// DELETEPTR(mpSnapshotVideoWidget);
DELETEPTR
(
mpMediaObject
);
DELETEPTR
(
mpCover
);
}
...
...
@@ -118,6 +121,13 @@ void UBMediaWidget::showEvent(QShowEvent* event)
QWidget
::
showEvent
(
event
);
}
void
UBMediaWidget
::
hideEvent
(
QHideEvent
*
event
)
{
if
(
mpMediaObject
->
state
()
==
Phonon
::
PlayingState
)
mpMediaObject
->
stop
();
UBActionableWidget
::
hideEvent
(
event
);
}
/**
* \brief Create the media player
*/
...
...
@@ -128,10 +138,17 @@ void UBMediaWidget::createMediaPlayer()
mpMediaContainer
->
setLayout
(
&
mMediaLayout
);
if
(
eMediaType_Video
==
mType
){
mMediaLayout
.
setContentsMargins
(
10
,
10
,
25
,
10
);
mMediaLayout
.
setContentsMargins
(
10
,
10
,
10
,
10
);
if
(
isVisible
()){
mpVideoWidget
=
new
Phonon
::
VideoWidget
(
this
);
mMediaLayout
.
addStretch
(
1
);
// mpVideoStackedWidget = new QStackedWidget(this);
// mpVideoStackedWidget->addWidget(mpVideoWidget);
// mpSnapshotVideoWidget = new QLabel(this);
// mpVideoStackedWidget->addWidget(mpSnapshotVideoWidget);
// mMediaLayout.addWidget(mpVideoStackedWidget,0);
mMediaLayout
.
addWidget
(
mpVideoWidget
,
0
);
mMediaLayout
.
addStretch
(
1
);
Phonon
::
createPath
(
mpMediaObject
,
mpVideoWidget
);
...
...
@@ -171,6 +188,22 @@ void UBMediaWidget::adaptSizeToVideo()
}
}
//void UBMediaWidget::updateView(Phonon::State nextState)
//{
// if(eMediaType_Video == mType){
// if(nextState != Phonon::PlayingState){
// const QPixmap& snapshot = QPixmap::grabWindow(mpVideoWidget->winId());
// if(snapshot.size().width()!= 0){
// mpSnapshotVideoWidget->setPixmap(snapshot);
// mpVideoStackedWidget->setCurrentWidget(mpSnapshotVideoWidget);
// }
// }
// else
// mpVideoStackedWidget->setCurrentWidget(mpVideoWidget);
// }
//}
/**
* \brief Handle the media state change notification
* @param newState as the new state
...
...
@@ -199,6 +232,7 @@ void UBMediaWidget::onStateChanged(Phonon::State newState, Phonon::State oldStat
mpPauseButton
->
setEnabled
(
false
);
mpSlider
->
setValue
(
0
);
}
//updateView(newState);
}
}
...
...
src/customWidgets/UBMediaWidget.h
View file @
33d2bfab
...
...
@@ -21,6 +21,7 @@
#include <QLabel>
#include <QSlider>
#include <QMouseEvent>
#include <QStackedWidget>
#include <phonon/MediaObject>
#include <phonon/VideoWidget>
...
...
@@ -75,6 +76,7 @@ public:
protected
:
void
resizeEvent
(
QResizeEvent
*
ev
);
void
showEvent
(
QShowEvent
*
event
);
void
hideEvent
(
QHideEvent
*
event
);
/** The current media file path */
QString
mFilePath
;
...
...
@@ -89,6 +91,7 @@ private slots:
private
:
void
createMediaPlayer
();
void
adaptSizeToVideo
();
// void updateView(Phonon::State nextState);
/** The current media type */
eMediaType
mType
;
...
...
@@ -122,6 +125,9 @@ private:
QLabel
*
mpCover
;
/** The media url */
QString
mUrl
;
// QStackedWidget* mpVideoStackedWidget;
// QLabel* mpSnapshotVideoWidget;
};
#endif // UBMEDIAWIDGET_H
src/customWidgets/UBWidgetList.cpp
deleted
100644 → 0
View file @
368a4dc5
#include <QDebug>
#include <QScrollBar>
#include <QApplication>
#include <QPainter>
#include "globals/UBGlobals.h"
#include "UBWidgetList.h"
UBWidgetList
::
UBWidgetList
(
QWidget
*
parent
,
eWidgetListOrientation
orientation
,
const
char
*
name
)
:
QScrollArea
(
parent
)
,
mCanRemove
(
true
)
,
mpLayout
(
NULL
)
,
mpContainer
(
NULL
)
,
mMargin
(
10
)
,
mListElementsSpacing
(
10
)
,
mpEmptyLabel
(
NULL
)
,
mpCurrentWidget
(
NULL
)
{
setObjectName
(
name
);
mOrientation
=
orientation
;
mpContainer
=
new
QWidget
(
this
);
mpEmptyLabel
=
new
QLabel
(
this
);
mpEmptyLabel
->
setObjectName
(
"emptyString"
);
mpEmptyLabel
->
setWordWrap
(
true
);
mpEmptyLabel
->
setAlignment
(
Qt
::
AlignCenter
);
if
(
eWidgetListOrientation_Vertical
==
orientation
){
setVerticalScrollBarPolicy
(
Qt
::
ScrollBarAsNeeded
);
setHorizontalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
mpLayout
=
new
QVBoxLayout
(
mpContainer
);
}
else
{
setHorizontalScrollBarPolicy
(
Qt
::
ScrollBarAsNeeded
);
setVerticalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
mpLayout
=
new
QHBoxLayout
(
mpContainer
);
}
mpLayout
->
setContentsMargins
(
margin
(),
margin
(),
margin
(),
margin
());
mpContainer
->
setLayout
(
mpLayout
);
setWidget
(
mpContainer
);
}
UBWidgetList
::~
UBWidgetList
()
{
DELETEPTR
(
mpEmptyLabel
);
DELETEPTR
(
mpLayout
);
DELETEPTR
(
mpContainer
);
}
void
UBWidgetList
::
addWidget
(
QWidget
*
widget
)
{
if
(
NULL
!=
mpLayout
&&
NULL
!=
widget
){
widget
->
setParent
(
mpContainer
);
mpEmptyLabel
->
setVisible
(
false
);
mWidgetInfo
[
widget
]
=
widget
->
size
();
updateView
(
size
());
mpLayout
->
addWidget
(
widget
);
// This call is used only to refresh the size of the widgets
updateSizes
();
}
}
void
UBWidgetList
::
removeWidget
(
QWidget
*
widget
)
{
if
(
NULL
!=
mpLayout
&&
NULL
!=
widget
){
mpLayout
->
removeWidget
(
widget
);
mWidgetInfo
.
remove
(
widget
);
widget
->
setVisible
(
false
);
updateView
(
size
());
if
(
0
==
mpLayout
->
count
()){
mpEmptyLabel
->
setVisible
(
true
);
}
if
(
mpCurrentWidget
==
widget
){
mpCurrentWidget
=
NULL
;
}
}
}
int
UBWidgetList
::
scaleWidgets
(
QSize
pSize
)
{
// to remove the first spacing that shouldn't be there.
int
result
=
-
mListElementsSpacing
;
foreach
(
QWidget
*
eachWidget
,
mWidgetInfo
.
keys
()){
qreal
scaleFactor
=
0
;
int
newWidgetWidth
=
pSize
.
width
();
int
newWidgetHeight
=
pSize
.
height
();
if
(
eWidgetListOrientation_Vertical
==
mOrientation
){
scaleFactor
=
(
float
)
mWidgetInfo
[
eachWidget
].
width
()
/
(
float
)
pSize
.
width
();
newWidgetHeight
=
mWidgetInfo
[
eachWidget
].
height
()
/
scaleFactor
;
result
+=
newWidgetHeight
;
eachWidget
->
setMinimumHeight
(
newWidgetHeight
-
1
);
eachWidget
->
setMaximumHeight
(
newWidgetHeight
);
}
else
{
scaleFactor
=
(
float
)
mWidgetInfo
[
eachWidget
].
height
()
/
(
float
)
pSize
.
height
();
newWidgetWidth
=
mWidgetInfo
[
eachWidget
].
width
()
/
scaleFactor
;
result
+=
newWidgetWidth
;
eachWidget
->
setMinimumWidth
(
newWidgetWidth
-
1
);
eachWidget
->
setMaximumWidth
(
newWidgetWidth
);
}
//Adding a vertical/horizontal space between each element of the list
result
+=
mListElementsSpacing
;
}
return
result
;
}
void
UBWidgetList
::
scaleContainer
(
QSize
pSize
,
int
updateValue
)
{
if
(
eWidgetListOrientation_Vertical
==
mOrientation
)
mpContainer
->
resize
(
pSize
.
width
(),
updateValue
);
else
mpContainer
->
resize
(
updateValue
,
pSize
.
height
());
}
void
UBWidgetList
::
updateView
(
QSize
pSize
)
{
// Widgets on list are resized automatically to fit the mpcontainer.
// so if you want to keep the aspect ratio you have to calculate
// the sum of the new widget height and give it to the mpContainer.
// The container resize will trig the widgets resize and the good
// height permits to respect the aspect ratio.
int
updatedValue
=
scaleWidgets
(
pSize
);
scaleContainer
(
pSize
,
updatedValue
);
}
void
UBWidgetList
::
resizeEvent
(
QResizeEvent
*
ev
)
{
Q_UNUSED
(
ev
);
mpEmptyLabel
->
setGeometry
((
width
()
-
mpEmptyLabel
->
width
())
/
2
,
(
height
()
-
mpEmptyLabel
->
height
())
/
2
,
mpEmptyLabel
->
width
(),
mpEmptyLabel
->
height
());
updateView
(
size
());
updateSizes
();
}
void
UBWidgetList
::
mousePressEvent
(
QMouseEvent
*
ev
)
{
Q_UNUSED
(
ev
);
if
(
mCanRemove
){
QWidget
*
pWAt
=
widgetAt
(
ev
->
pos
());
if
(
NULL
!=
mpCurrentWidget
){
if
(
pWAt
!=
mpCurrentWidget
){
mpCurrentWidget
->
setActionsVisible
(
false
);
update
();
}
}
mpCurrentWidget
=
dynamic_cast
<
UBActionableWidget
*>
(
pWAt
);
if
(
NULL
!=
mpCurrentWidget
){
mpCurrentWidget
->
setActionsVisible
(
true
);
update
();
}
}
update
();
}
QWidget
*
UBWidgetList
::
widgetAt
(
QPoint
p
)
{
QWidget
*
pW
=
NULL
;
pW
=
childAt
(
p
);
if
(
NULL
!=
pW
){
do
{
if
(
"UBTeacherStudentAction"
==
pW
->
objectName
()
||
"UBUrlWidget"
==
pW
->
objectName
()
||
"UBTBMediaPicture"
==
pW
->
objectName
()
||
"UBMediaWidget"
==
pW
->
objectName
()){
return
pW
;
}
else
{
pW
=
pW
->
parentWidget
();
}
}
while
(
NULL
!=
pW
&&
this
!=
pW
);
}
return
pW
;
}
void
UBWidgetList
::
updateSizes
()
{
// Resize all the widgets
foreach
(
QWidget
*
eachWidget
,
mWidgetInfo
.
keys
()){
if
(
NULL
!=
eachWidget
){
QSize
originalSize
=
mWidgetInfo
[
eachWidget
];
int
currentWidth
=
mpContainer
->
width
();
int
currentHeight
=
mpContainer
->
height
();
if
(
eWidgetListOrientation_Vertical
==
mOrientation
){
if
(
verticalScrollBar
()
->
isVisible
()){
currentWidth
-=
verticalScrollBar
()
->
width
();
eachWidget
->
setStyleSheet
(
QString
(
"margin-right:%0;"
).
arg
(
verticalScrollBar
()
->
width
()));
}
float
scaleFactor
=
(
float
)
currentWidth
/
(
float
)
originalSize
.
width
();
currentHeight
=
originalSize
.
height
()
*
scaleFactor
;
}
else
{
if
(
horizontalScrollBar
()
->
isVisible
()){
currentHeight
-=
horizontalScrollBar
()
->
height
();
eachWidget
->
setStyleSheet
(
QString
(
"padding-bottom:%0;"
).
arg
(
horizontalScrollBar
()
->
height
()));
}
float
scaleFactor
=
(
float
)
currentHeight
/
(
float
)
originalSize
.
height
();
currentWidth
=
originalSize
.
width
()
*
scaleFactor
;
}
eachWidget
->
resize
(
currentWidth
,
currentHeight
);
}
}
}
void
UBWidgetList
::
setMargin
(
int
margin
)
{
mMargin
=
margin
;
}
int
UBWidgetList
::
margin
()
{
return
mMargin
;
}
void
UBWidgetList
::
setEmptyText
(
const
QString
&
text
)
{
if
(
NULL
!=
mpEmptyLabel
){
mpEmptyLabel
->
setText
(
text
);
}
}
bool
UBWidgetList
::
empty
()
{
return
mWidgetInfo
.
empty
();
}
src/customWidgets/UBWidgetList.h
deleted
100644 → 0
View file @
368a4dc5
#ifndef UBWIDGETLIST_H
#define UBWIDGETLIST_H
#include <QWidget>
#include <QScrollArea>
#include <QBoxLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QResizeEvent>
#include <QVector>
#include <QLabel>
#include "interfaces/IResizeable.h"
#include "customWidgets/UBActionableWidget.h"
typedef
enum
{
eWidgetListOrientation_Vertical
,
eWidgetListOrientation_Horizontal
}
eWidgetListOrientation
;
class
UBWidgetList
:
public
QScrollArea
{
Q_OBJECT
typedef
struct
{
QSize
size
;
bool
isResizable
;
}
sWidgetProperties
;
public
:
UBWidgetList
(
QWidget
*
parent
=
0
,
eWidgetListOrientation
orientation
=
eWidgetListOrientation_Vertical
,
const
char
*
name
=
"UBWidgetList"
);
~
UBWidgetList
();
void
addWidget
(
QWidget
*
widget
);
void
removeWidget
(
QWidget
*
widget
);
void
setMargin
(
int
margin
);
void
setEmptyText
(
const
QString
&
text
);
int
margin
();
bool
empty
();
void
setListElementSpacing
(
int
margin
)
{
mListElementsSpacing
=
margin
;
}
int
listElementsSpacing
()
{
return
mListElementsSpacing
;
}
signals
:
void
closeWidget
(
QWidget
*
w
);
protected
:
bool
mCanRemove
;
void
resizeEvent
(
QResizeEvent
*
ev
);
void
mousePressEvent
(
QMouseEvent
*
ev
);
private
:
QWidget
*
widgetAt
(
QPoint
p
);
int
scaleWidgets
(
QSize
pSize
);
void
scaleContainer
(
QSize
pSize
,
int
updateValue
);
void
updateView
(
QSize
pSize
);
void
updateSizes
();
QBoxLayout
*
mpLayout
;
QWidget
*
mpContainer
;
eWidgetListOrientation
mOrientation
;
int
mMargin
;
int
mListElementsSpacing
;
QMap
<
QWidget
*
,
QSize
>
mWidgetInfo
;
QLabel
*
mpEmptyLabel
;
UBActionableWidget
*
mpCurrentWidget
;
};
#endif // UBWIDGETLIST_H
src/customWidgets/customWidgets.pri
View file @
33d2bfab
HEADERS += src/customWidgets/UBWidgetList.h \
src/customWidgets/UBDraggableLabel.h \
HEADERS += \
src/customWidgets/UBMediaWidget.h \
src/globals/UBGlobals.h \
src/customWidgets/UBDraggableMedia.h \
src/customWidgets/UBActionableWidget.h
SOURCES += src/customWidgets/UBWidgetList.cpp \
src/customWidgets/UBDraggableLabel.cpp \
SOURCES += \
src/customWidgets/UBMediaWidget.cpp \
src/customWidgets/UBDraggableMedia.cpp \
src/customWidgets/UBActionableWidget.cpp
src/desktop/UBDesktopAnnotationController.cpp
View file @
33d2bfab
...
...
@@ -762,21 +762,6 @@ void UBDesktopAnnotationController::togglePropertyPalette(UBActionPalette *palet
void
UBDesktopAnnotationController
::
switchCursor
(
const
int
tool
)
{
// enum Enum
// {
// Pen = 0,
// Eraser,
// Marker,
// Selector,
// Hand,
// ZoomIn,
// ZoomOut,
// Pointer,
// Line,
// Text,
// Capture
// };
mTransparentDrawingScene
->
setToolCursor
(
tool
);
mTransparentDrawingView
->
setToolCursor
(
tool
);
}
...
...
@@ -826,17 +811,6 @@ void UBDesktopAnnotationController::onDesktopPaletteMaximized()
connect
(
pPointerButton
,
SIGNAL
(
pressed
()),
this
,
SLOT
(
pointerActionPressed
()));
connect
(
pPointerButton
,
SIGNAL
(
released
()),
this
,
SLOT
(
pointerActionReleased
()));
}
// enum Enum
// {
// Hand,
// ZoomIn,
// ZoomOut,
// Line,
// Text,
// Capture
// };
}
/**
...
...
@@ -872,16 +846,6 @@ void UBDesktopAnnotationController::onDesktopPaletteMinimize()
void
UBDesktopAnnotationController
::
TransparentWidgetResized
()
{
/*
int rW = UBApplication::boardController->paletteManager()->rightPalette()->width();
int rH_ = UBApplication::boardController->paletteManager()->rightPalette()->height();
int rH = mTransparentDrawingView->height();
UBApplication::boardController->paletteManager()->rightPalette()->resize(rW+1, rH);
// UBApplication::boardController->paletteManager()->rightPalette()->resize(500, 500);
*/
onTransparentWidgetResized
();
}
...
...
@@ -900,8 +864,6 @@ void UBDesktopAnnotationController::onTransparentWidgetResized()
UBApplication
::
boardController
->
paletteManager
()
->
leftPalette
()
->
resize
(
lW
+
1
,
rH
);
UBApplication
::
boardController
->
paletteManager
()
->
leftPalette
()
->
resize
(
lW
,
rH
);
// mRightPalette->resize(mRightPalette->width(), mTransparentDrawingView->height());
}
void
UBDesktopAnnotationController
::
updateMask
(
bool
bTransparent
)
...
...
src/document/UBDocumentController.cpp
View file @
33d2bfab
...
...
@@ -160,6 +160,9 @@ void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurr
mDocumentUI
->
documentTreeWidget
->
scrollToItem
(
selected
);
mDocumentThumbs
=
UBThumbnailAdaptor
::
load
(
selectedDocumentProxy
());
refreshDocumentThumbnailsView
();
mSelectionType
=
Document
;
}
}
...
...
@@ -268,11 +271,10 @@ void UBDocumentController::refreshDocumentThumbnailsView()
if
(
proxy
)
{
mCurrentDocument
=
proxy
;
QList
<
QPixmap
>
thumbs
=
UBThumbnailAdaptor
::
load
(
proxy
);
for
(
int
i
=
0
;
i
<
t
humbs
.
count
();
i
++
)
for
(
int
i
=
0
;
i
<
mDocumentT
humbs
.
count
();
i
++
)
{
QPixmap
pix
=
t
humbs
.
at
(
i
);
QPixmap
pix
=
mDocumentT
humbs
.
at
(
i
);
QGraphicsPixmapItem
*
pixmapItem
=
new
UBSceneThumbnailPixmap
(
pix
,
proxy
,
i
);
// deleted by the tree widget
if
(
proxy
==
mBoardController
->
activeDocument
()
&&
mBoardController
->
activeSceneIndex
()
==
i
)
...
...
@@ -507,7 +509,7 @@ void UBDocumentController::openSelectedItem()
if
(
proxy
&&
isOKToOpenDocument
(
proxy
))
{
mBoardController
->
setActiveDocumentScene
(
proxy
,
thumb
->
sceneIndex
());
//
mBoardController->setActiveDocumentScene(proxy, thumb->sceneIndex());
UBApplication
::
applicationController
->
showBoard
();
}
}
...
...
@@ -561,6 +563,7 @@ void UBDocumentController::duplicateSelectedItem()
foreach
(
int
sceneIndex
,
selectedSceneIndexes
)
{
UBPersistenceManager
::
persistenceManager
()
->
duplicateDocumentScene
(
proxy
,
sceneIndex
+
offset
);
mDocumentThumbs
.
insert
(
sceneIndex
+
offset
,
mDocumentThumbs
.
at
(
sceneIndex
+
offset
));
offset
++
;
}
}
...
...
@@ -921,6 +924,7 @@ void UBDocumentController::itemClicked(QTreeWidgetItem * item, int column )
Q_UNUSED
(
item
);
Q_UNUSED
(
column
);
selectDocument
(
selectedDocumentProxy
(),
false
);
itemSelectionChanged
();
}
...
...
@@ -1043,6 +1047,7 @@ void UBDocumentController::addFolderOfImages()
{
document
->
setMetaData
(
UBSettings
::
documentUpdatedAt
,
UBStringUtils
::
toUtcIsoDateTime
(
QDateTime
::
currentDateTime
()));
UBMetadataDcSubsetAdaptor
::
persist
(
document
);
mDocumentThumbs
=
UBThumbnailAdaptor
::
load
(
selectedDocumentProxy
());
refreshDocumentThumbnailsView
();
}
}
...
...
@@ -1057,6 +1062,7 @@ void UBDocumentController::addFileToDocument()
if
(
document
)
{
addFileToDocument
(
document
);
mDocumentThumbs
=
UBThumbnailAdaptor
::
load
(
document
);
refreshDocumentThumbnailsView
();
}
}
...
...
@@ -1108,12 +1114,9 @@ void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source,
proxy
->
setMetaData
(
UBSettings
::
documentUpdatedAt
,
UBStringUtils
::
toUtcIsoDateTime
(
QDateTime
::
currentDateTime
()));
UBMetadataDcSubsetAdaptor
::
persist
(
proxy
);
mDocumentThumbs
.
insert
(
target
,
mDocumentThumbs
.
takeAt
(
source
));
refreshDocumentThumbnailsView
();
// Notify the move to anyone interested in knowing it
emit
movedToIndex
(
target
);
UBApplication
::
boardController
->
setActiveDocumentScene
(
proxy
,
target
);
mDocumentUI
->
thumbnailWidget
->
hightlightItem
(
target
);
}
...
...
@@ -1321,7 +1324,8 @@ void UBDocumentController::addToDocument()
}
int
newActiveSceneIndex
=
selectedItems
.
count
()
==
mBoardController
->
activeDocument
()
->
pageCount
()
?
0
:
oldActiveSceneIndex
+
1
;
mBoardController
->
setActiveDocumentScene
(
mBoardController
->
activeDocument
(),
newActiveSceneIndex
);
mDocumentUI
->
thumbnailWidget
->
selectItemAt
(
newActiveSceneIndex
,
false
);
selectDocument
(
mBoardController
->
activeDocument
());
mBoardController
->
activeDocument
()
->
setMetaData
(
UBSettings
::
documentUpdatedAt
,
UBStringUtils
::
toUtcIsoDateTime
(
QDateTime
::
currentDateTime
()));
UBMetadataDcSubsetAdaptor
::
persist
(
mBoardController
->
activeDocument
());
...
...
@@ -1495,6 +1499,7 @@ void UBDocumentController::addImages()
{
document
->
setMetaData
(
UBSettings
::
documentUpdatedAt
,
UBStringUtils
::
toUtcIsoDateTime
(
QDateTime
::
currentDateTime
()));
UBMetadataDcSubsetAdaptor
::
persist
(
document
);
mDocumentThumbs
=
UBThumbnailAdaptor
::
load
(
selectedDocumentProxy
());
refreshDocumentThumbnailsView
();
}
}
...
...
@@ -1605,6 +1610,13 @@ void UBDocumentController::deletePages(QList<QGraphicsItem *> itemsToDelete)
UBPersistenceManager
::
persistenceManager
()
->
deleteDocumentScenes
(
proxy
,
sceneIndexes
);
proxy
->
setMetaData
(
UBSettings
::
documentUpdatedAt
,
UBStringUtils
::
toUtcIsoDateTime
(
QDateTime
::
currentDateTime
()));
UBMetadataDcSubsetAdaptor
::
persist
(
proxy
);
int
offset
=
0
;
foreach
(
int
index
,
sceneIndexes
)
{
mDocumentThumbs
.
removeAt
(
index
-
offset
);
offset
++
;
}
refreshDocumentThumbnailsView
();
int
minIndex
=
proxy
->
pageCount
()
-
1
;
...
...
@@ -1616,3 +1628,15 @@ void UBDocumentController::deletePages(QList<QGraphicsItem *> itemsToDelete)
}
}
}
int
UBDocumentController
::
getSelectedItemIndex
()
{
QList
<
QGraphicsItem
*>
selectedItems
=
mDocumentUI
->
thumbnailWidget
->
selectedItems
();
if
(
selectedItems
.
count
()
>
0
)
{
UBSceneThumbnailPixmap
*
thumb
=
dynamic_cast
<
UBSceneThumbnailPixmap
*>
(
selectedItems
.
last
());
return
thumb
->
sceneIndex
();
}
else
return
-
1
;
}
\ No newline at end of file
src/document/UBDocumentController.h
View file @
33d2bfab
...
...
@@ -48,8 +48,9 @@ class UBDocumentController : public QObject
QWidget
*
controlView
();
UBDocumentProxyTreeItem
*
findDocument
(
UBDocumentProxy
*
proxy
);
bool
addFileToDocument
(
UBDocumentProxy
*
document
);
UBDocumentProxy
*
getCurrentDocument
();
UBDocumentProxy
*
getCurrentDocument
()
{
return
mCurrentDocument
;
}
;
void
deletePages
(
QList
<
QGraphicsItem
*>
itemsToDelete
);
int
getSelectedItemIndex
();
signals
:
void
refreshThumbnails
();
...
...
@@ -111,6 +112,7 @@ class UBDocumentController : public QObject
bool
mToolsPalettePositionned
;
UBDocumentGroupTreeItem
*
mTrashTi
;
UBDocumentProxy
*
mCurrentDocument
;
QList
<
QPixmap
>
mDocumentThumbs
;
// UBKeyboardPalette *mKeyboardPalette;
...
...
src/globals/UBGlobals.h
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBGLOBALS_H
#define UBGLOBALS_H
#include <QString>
#include <QFile>
#define DELETEPTR(ptr) if(NULL != ptr){ \
delete ptr; \
ptr = NULL; \
}
#define SET_STYLE_SHEET() {\
setAttribute(Qt::WA_StyledBackground, true);\
QString style;\
QFile f(":style.qss");\
if(f.exists() && f.open(QIODevice::ReadOnly))\
style = QString(f.readAll());\
setStyleSheet(style);\
}
#ifdef Q_WS_WIN
#define WARNINGS_DISABLE __pragma(warning(push, 0));
...
...
src/gui/UBActionPalette.cpp
View file @
33d2bfab
...
...
@@ -231,6 +231,7 @@ void UBActionPalette::mouseReleaseEvent(QMouseEvent * event)
void
UBActionPalette
::
actionChanged
()
{
emit
itemOnActionPaletteChanged
();
for
(
int
i
=
0
;
i
<
mActions
.
length
()
&&
i
<
mButtons
.
length
();
i
++
)
{
mButtons
.
at
(
i
)
->
setVisible
(
mActions
.
at
(
i
)
->
isVisible
());
...
...
src/gui/UBActionPalette.h
View file @
33d2bfab
...
...
@@ -56,10 +56,12 @@ class UBActionPalette : public UBFloatingPalette
public
slots
:
void
close
();
signals
:
void
closed
();
void
buttonGroupClicked
(
int
id
);
void
customMouseReleased
();
void
itemOnActionPaletteChanged
();
protected
:
virtual
void
paintEvent
(
QPaintEvent
*
event
);
...
...
src/gui/UBCachePropertiesWidget.cpp
View file @
33d2bfab
...
...
@@ -7,6 +7,7 @@
#include "core/UBApplication.h"
#include "core/UBApplicationController.h"
#include "globals/UBGlobals.h"
#include "board/UBBoardController.h"
#include "domain/UBGraphicsScene.h"
...
...
@@ -34,8 +35,8 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na
,
mpCurrentCache
(
NULL
)
{
setObjectName
(
name
);
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
()
);
SET_STYLE_SHEET
(
);
mName
=
"CachePropWidget"
;
mVisibleState
=
false
;
...
...
src/gui/UBDockDownloadWidget.cpp
View file @
33d2bfab
...
...
@@ -15,6 +15,8 @@
#include "UBDockDownloadWidget.h"
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
UBDockDownloadWidget
::
UBDockDownloadWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
UBDockPaletteWidget
(
parent
,
name
)
,
mpLayout
(
NULL
)
,
mpDLWidget
(
NULL
)
...
...
@@ -22,8 +24,7 @@ UBDockDownloadWidget::UBDockDownloadWidget(QWidget *parent, const char *name):UB
mName
=
"DownloadWidget"
;
mVisibleState
=
false
;
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
mIconToLeft
=
QPixmap
(
":images/download_open.png"
);
mIconToRight
=
QPixmap
(
":images/download_close.png"
);
...
...
src/gui/UBDockTeacherGuideWidget.cpp
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
#include "UBDockTeacherGuideWidget.h"
#include "UBTeacherGuideWidget.h"
UBDockTeacherGuideWidget
::
UBDockTeacherGuideWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
UBDockPaletteWidget
(
parent
,
name
)
,
mpTeacherGuideWidget
(
NULL
)
{
mName
=
"TeacherGuide"
;
SET_STYLE_SHEET
();
mIconToLeft
=
QPixmap
(
":images/teacher_open.png"
);
mIconToRight
=
QPixmap
(
":images/teacher_close.png"
);
mpLayout
=
new
QVBoxLayout
(
this
);
setLayout
(
mpLayout
);
mpTeacherGuideWidget
=
new
UBTeacherGuideWidget
(
this
);
mpLayout
->
addWidget
(
mpTeacherGuideWidget
);
}
UBDockTeacherGuideWidget
::~
UBDockTeacherGuideWidget
()
{
DELETEPTR
(
mpTeacherGuideWidget
);
DELETEPTR
(
mpLayout
);
}
src/gui/UBDockTeacherGuideWidget.h
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBDOCKTEACHERGUIDEWIDGET_H
#define UBDOCKTEACHERGUIDEWIDGET_H
class
QVBoxLayout
;
class
UBTeacherGuideWidget
;
#include "UBDockPaletteWidget.h"
class
UBDockTeacherGuideWidget
:
public
UBDockPaletteWidget
{
Q_OBJECT
public
:
UBDockTeacherGuideWidget
(
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBDockTeacherGuideWidget"
);
~
UBDockTeacherGuideWidget
();
bool
visibleInMode
(
eUBDockPaletteWidgetMode
mode
){
return
mode
==
eUBDockPaletteWidget_BOARD
;
}
private
:
QVBoxLayout
*
mpLayout
;
UBTeacherGuideWidget
*
mpTeacherGuideWidget
;
};
#endif // UBDOCKTEACHERGUIDEWIDGET_H
src/gui/UBDocumentNavigator.cpp
View file @
33d2bfab
...
...
@@ -56,7 +56,6 @@ UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGra
setFrameShadow
(
QFrame
::
Plain
);
connect
(
UBApplication
::
boardController
,
SIGNAL
(
activeSceneChanged
()),
this
,
SLOT
(
addNewPage
()));
connect
(
UBApplication
::
boardController
,
SIGNAL
(
setDocOnPageNavigator
(
UBDocumentProxy
*
)),
this
,
SLOT
(
generateThumbnails
()));
connect
(
mScene
,
SIGNAL
(
selectionChanged
()),
this
,
SLOT
(
onSelectionChanged
()));
connect
(
UBApplication
::
boardController
,
SIGNAL
(
documentReorganized
(
int
)),
this
,
SLOT
(
onMovedToIndex
(
int
)));
}
...
...
src/gui/UBDownloadWidget.cpp
View file @
33d2bfab
...
...
@@ -18,8 +18,10 @@
#include <QApplication>
#include "UBDownloadWidget.h"
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
#include "core/UBApplication.h"
#include "core/memcheck.h"
/**
...
...
@@ -36,8 +38,7 @@ UBDownloadWidget::UBDownloadWidget(QWidget *parent, const char *name):QWidget(pa
{
setObjectName
(
name
);
setWindowTitle
(
tr
(
"Downloading files"
));
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
resize
(
400
,
300
);
mpLayout
=
new
QVBoxLayout
(
this
);
...
...
src/gui/UBLibItemProperties.cpp
View file @
33d2bfab
...
...
@@ -18,10 +18,12 @@
#include "core/UBApplication.h"
#include "core/UBDownloadManager.h"
#include "core/memcheck.h"
#include "frameworks/UBFileSystemUtils.h"
#include "core/memcheck.h"
#include "globals/UBGlobals.h"
/**
* \brief Constructor
...
...
@@ -43,8 +45,7 @@ UBLibItemProperties::UBLibItemProperties(QWidget *parent, const char *name):QWid
{
setObjectName
(
name
);
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
// Create the GUI
mpLayout
=
new
QVBoxLayout
(
this
);
...
...
src/gui/UBLibNavigatorWidget.cpp
View file @
33d2bfab
...
...
@@ -18,6 +18,8 @@
#include "core/UBApplication.h"
#include "core/memcheck.h"
#include "globals/UBGlobals.h"
static
int
lowBoundForSlider
=
40
;
static
int
topBoundForSlider
=
120
;
static
int
tickIntervalForSlider
=
10
;
...
...
@@ -35,8 +37,7 @@ UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QW
{
setObjectName
(
name
);
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
setAcceptDrops
(
true
);
...
...
src/gui/UBLibWebView.cpp
View file @
33d2bfab
#include <QDomDocument>
#include "core/UBApplication.h"
#include "core/memcheck.h"
#include "board/UBBoardController.h"
#include "globals/UBGlobals.h"
#include "UBLibWebView.h"
#include "core/memcheck.h"
UBLibWebView
::
UBLibWebView
(
QWidget
*
parent
,
const
char
*
name
)
:
QWidget
(
parent
)
,
mpView
(
NULL
)
...
...
@@ -15,8 +19,7 @@ UBLibWebView::UBLibWebView(QWidget* parent, const char* name):QWidget(parent)
{
setObjectName
(
name
);
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
mpLayout
=
new
QVBoxLayout
();
setLayout
(
mpLayout
);
...
...
src/gui/UBLibWidget.cpp
View file @
33d2bfab
...
...
@@ -15,10 +15,12 @@
#include <QDebug>
#include "UBLibWidget.h"
#include "core/UBApplication.h"
#include "core/UBApplication.h"
#include "core/memcheck.h"
#include "globals/UBGlobals.h"
/**
* \brief Constructor
* @param parent as the parent widget
...
...
@@ -37,8 +39,7 @@ UBLibWidget::UBLibWidget(QWidget *parent, const char *name):UBDockPaletteWidget(
mName
=
"LibWidget"
;
mVisibleState
=
true
;
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
());
SET_STYLE_SHEET
();
mIconToLeft
=
QPixmap
(
":images/library_open.png"
);
mIconToRight
=
QPixmap
(
":images/library_close.png"
);
...
...
src/gui/UBMediaPlayer.cpp
deleted
100644 → 0
View file @
368a4dc5
#include "UBMediaPlayer.h"
#include <QtGui>
#define SLIDER_RANGE 8
MediaVideoWidget
::
MediaVideoWidget
(
UBMediaPlayer
*
player
,
QWidget
*
parent
)
:
Phonon
::
VideoWidget
(
parent
),
m_player
(
player
)
/*, m_action(this)*/
{
// m_action.setCheckable(true);
// m_action.setChecked(false);
// m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return));
// m_action.setShortcutContext(Qt::WindowShortcut);
// connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool)));
// addAction(&m_action);
// setAcceptDrops(true);
}
void
MediaVideoWidget
::
timerEvent
(
QTimerEvent
*
e
)
{
if
(
e
->
timerId
()
==
m_timer
.
timerId
())
{
//let's store the cursor shape
#ifndef QT_NO_CURSOR
setCursor
(
Qt
::
BlankCursor
);
#endif
}
Phonon
::
VideoWidget
::
timerEvent
(
e
);
}
UBMediaPlayer
::
UBMediaPlayer
()
:
playButton
(
0
),
m_AudioOutput
(
Phonon
::
VideoCategory
),
m_videoWidget
(
new
MediaVideoWidget
(
this
))
{
setContextMenuPolicy
(
Qt
::
CustomContextMenu
);
m_videoWidget
->
setContextMenuPolicy
(
Qt
::
CustomContextMenu
);
QSize
buttonSize
(
26
,
20
);
// QPushButton *openButton = new QPushButton(this);
//// openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
//// QPalette bpal;
//// QColor arrowcolor = bpal.buttonText().color();
//// if (arrowcolor == Qt::black)
//// arrowcolor = QColor(80, 80, 80);
//// bpal.setBrush(QPalette::ButtonText, arrowcolor);
//// openButton->setPalette(bpal);
// rewindButton = new QPushButton(this);
// rewindButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward));
// forwardButton = new QPushButton(this);
// forwardButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward));
// forwardButton->setEnabled(false);
playButton
=
new
QPushButton
(
this
);
playIcon
=
style
()
->
standardIcon
(
QStyle
::
SP_MediaPlay
);
pauseIcon
=
style
()
->
standardIcon
(
QStyle
::
SP_MediaPause
);
playButton
->
setIcon
(
playIcon
);
slider
=
new
Phonon
::
SeekSlider
(
this
);
slider
->
setMediaObject
(
&
m_MediaObject
);
QVBoxLayout
*
vLayout
=
new
QVBoxLayout
(
this
);
vLayout
->
setContentsMargins
(
1
,
1
,
1
,
1
);
// QHBoxLayout *layout = new QHBoxLayout();
// info = new QLabel(this);
// info->setMinimumHeight(70);
// info->setAcceptDrops(false);
// info->setMargin(2);
// info->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
// info->setLineWidth(2);
// info->setAutoFillBackground(true);
// QPalette palette;
// palette.setBrush(QPalette::WindowText, Qt::white);
#ifndef Q_WS_MAC
// rewindButton->setMinimumSize(buttonSize);
// forwardButton->setMinimumSize(buttonSize);
playButton
->
setMinimumSize
(
buttonSize
);
#endif
// info->setStyleSheet("border-image:url(:/images/screen.png) ; border-width:3px");
// info->setPalette(palette);
// info->setText(tr("<center>No media</center>"));
// layout->addWidget(rewindButton);
// layout->addWidget(playButton);
// layout->addWidget(forwardButton);
// layout->addStretch();
// vLayout->addWidget(info);
initVideoWindow
();
vLayout
->
addWidget
(
&
m_videoWindow
);
// m_videoWidget->setStyleSheet(QString("background:red;"));
QVBoxLayout
*
buttonPanelLayout
=
new
QVBoxLayout
();
#ifndef Q_WS_WIN
m_videoWindow
.
hide
();
#endif
// buttonPanelLayout->addLayout(layout);
// timeLabel = new QLabel(this);
progressLabel
=
new
QLabel
(
this
);
QWidget
*
sliderPanel
=
new
QWidget
(
this
);
// sliderPanel->setStyleSheet(QString("background:green;"));
QHBoxLayout
*
sliderLayout
=
new
QHBoxLayout
();
// playButton->setStyleSheet(QString("background:yellow;"));
sliderLayout
->
addWidget
(
playButton
);
sliderLayout
->
addWidget
(
slider
);
// sliderLayout->addWidget(timeLabel);
sliderLayout
->
addWidget
(
progressLabel
);
sliderLayout
->
setContentsMargins
(
0
,
0
,
0
,
0
);
sliderPanel
->
setLayout
(
sliderLayout
);
buttonPanelLayout
->
addWidget
(
sliderPanel
);
buttonPanelLayout
->
setContentsMargins
(
0
,
0
,
0
,
0
);
#ifdef Q_OS_MAC
// layout->setSpacing(4);
buttonPanelLayout
->
setSpacing
(
0
);
// info->setMinimumHeight(100);
// info->setFont(QFont("verdana", 15));
// openButton->setFocusPolicy(Qt::NoFocus);
#endif
QWidget
*
buttonPanelWidget
=
new
QWidget
(
this
);
buttonPanelWidget
->
setSizePolicy
(
QSizePolicy
::
Preferred
,
QSizePolicy
::
Fixed
);
buttonPanelWidget
->
setLayout
(
buttonPanelLayout
);
vLayout
->
addWidget
(
buttonPanelWidget
);
QHBoxLayout
*
labelLayout
=
new
QHBoxLayout
();
vLayout
->
addLayout
(
labelLayout
);
setLayout
(
vLayout
);
// Setup signal connections:
// connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewind()));
connect
(
playButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
playPause
()));
// connect(forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
// connect(&m_MediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(updateTime()));
// connect(&m_MediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime()));
connect
(
&
m_MediaObject
,
SIGNAL
(
finished
()),
this
,
SLOT
(
finished
()));
connect
(
&
m_MediaObject
,
SIGNAL
(
stateChanged
(
Phonon
::
State
,
Phonon
::
State
)),
this
,
SLOT
(
stateChanged
(
Phonon
::
State
,
Phonon
::
State
)));
connect
(
&
m_MediaObject
,
SIGNAL
(
bufferStatus
(
int
)),
this
,
SLOT
(
bufferStatus
(
int
)));
connect
(
&
m_MediaObject
,
SIGNAL
(
hasVideoChanged
(
bool
)),
this
,
SLOT
(
hasVideoChanged
(
bool
)));
// rewindButton->setEnabled(false);
playButton
->
setEnabled
(
false
);
// setAcceptDrops(true);
m_audioOutputPath
=
Phonon
::
createPath
(
&
m_MediaObject
,
&
m_AudioOutput
);
Phonon
::
createPath
(
&
m_MediaObject
,
m_videoWidget
);
resize
(
minimumSizeHint
());
}
void
UBMediaPlayer
::
stateChanged
(
Phonon
::
State
newstate
,
Phonon
::
State
oldstate
)
{
if
(
oldstate
==
Phonon
::
LoadingState
)
{
QRect
videoHintRect
=
QRect
(
QPoint
(
0
,
0
),
m_videoWindow
.
sizeHint
());
QApplication
::
desktop
()
->
screenGeometry
().
intersected
(
videoHintRect
);
if
(
m_MediaObject
.
hasVideo
())
{
qApp
->
processEvents
();
resize
(
sizeHint
());
}
else
resize
(
minimumSize
());
}
switch
(
newstate
)
{
case
Phonon
:
:
ErrorState
:
if
(
m_MediaObject
.
errorType
()
==
Phonon
::
FatalError
)
{
playButton
->
setEnabled
(
false
);
// rewindButton->setEnabled(false);
}
else
{
m_MediaObject
.
pause
();
}
QMessageBox
::
warning
(
this
,
"Phonon UBMediaPlayer"
,
m_MediaObject
.
errorString
(),
QMessageBox
::
Close
);
break
;
case
Phonon
:
:
StoppedState
:
// m_videoWidget-> (false);
// Fall through
case
Phonon
:
:
PausedState
:
playButton
->
setIcon
(
playIcon
);
if
(
m_MediaObject
.
currentSource
().
type
()
!=
Phonon
::
MediaSource
::
Invalid
){
playButton
->
setEnabled
(
true
);
// rewindButton->setEnabled(true);
}
else
{
playButton
->
setEnabled
(
false
);
// rewindButton->setEnabled(false);
}
break
;
case
Phonon
:
:
PlayingState
:
playButton
->
setEnabled
(
true
);
playButton
->
setIcon
(
pauseIcon
);
if
(
m_MediaObject
.
hasVideo
())
m_videoWindow
.
show
();
// Fall through
case
Phonon
:
:
BufferingState
:
// rewindButton->setEnabled(true);
break
;
case
Phonon
:
:
LoadingState
:
// rewindButton->setEnabled(false);
break
;
}
}
void
UBMediaPlayer
::
setVolume
(
qreal
volume
)
{
m_AudioOutput
.
setVolume
(
volume
);
}
void
UBMediaPlayer
::
initVideoWindow
()
{
QVBoxLayout
*
videoLayout
=
new
QVBoxLayout
();
videoLayout
->
addWidget
(
m_videoWidget
);
videoLayout
->
setContentsMargins
(
0
,
0
,
0
,
0
);
m_videoWindow
.
setLayout
(
videoLayout
);
m_videoWindow
.
setMinimumSize
(
60
,
40
);
}
void
UBMediaPlayer
::
playPause
()
{
if
(
m_MediaObject
.
state
()
==
Phonon
::
PlayingState
)
m_MediaObject
.
pause
();
else
{
if
(
m_MediaObject
.
currentTime
()
==
m_MediaObject
.
totalTime
())
m_MediaObject
.
seek
(
0
);
m_MediaObject
.
play
();
}
}
void
UBMediaPlayer
::
setFile
(
const
QString
&
fileName
)
{
setWindowTitle
(
fileName
.
right
(
fileName
.
length
()
-
fileName
.
lastIndexOf
(
'/'
)
-
1
));
m_MediaObject
.
setCurrentSource
(
Phonon
::
MediaSource
(
fileName
));
}
void
UBMediaPlayer
::
setLocation
(
const
QString
&
location
)
{
setWindowTitle
(
location
.
right
(
location
.
length
()
-
location
.
lastIndexOf
(
'/'
)
-
1
));
m_MediaObject
.
setCurrentSource
(
Phonon
::
MediaSource
(
QUrl
::
fromEncoded
(
location
.
toUtf8
())));
m_MediaObject
.
play
();
}
void
UBMediaPlayer
::
openFile
()
{
QStringList
fileNames
=
QFileDialog
::
getOpenFileNames
(
this
,
QString
(),
QDesktopServices
::
storageLocation
(
QDesktopServices
::
MusicLocation
));
m_MediaObject
.
clearQueue
();
if
(
fileNames
.
size
()
>
0
)
{
QString
fileName
=
fileNames
[
0
];
setFile
(
fileName
);
for
(
int
i
=
1
;
i
<
fileNames
.
size
();
i
++
)
m_MediaObject
.
enqueue
(
Phonon
::
MediaSource
(
fileNames
[
i
]));
}
}
void
UBMediaPlayer
::
bufferStatus
(
int
percent
)
{
if
(
percent
==
100
)
progressLabel
->
setText
(
QString
());
else
{
QString
str
=
QString
::
fromLatin1
(
"(%1%)"
).
arg
(
percent
);
progressLabel
->
setText
(
str
);
}
}
//void UBMediaPlayer::updateTime()
//{
// long len = m_MediaObject.totalTime();
// long pos = m_MediaObject.currentTime();
// QString timeString;
// if (pos || len)
// {
// int sec = pos/1000;
// int min = sec/60;
// int hour = min/60;
// int msec = pos;
// QTime playTime(hour%60, min%60, sec%60, msec%1000);
// sec = len / 1000;
// min = sec / 60;
// hour = min / 60;
// msec = len;
// QTime stopTime(hour%60, min%60, sec%60, msec%1000);
// QString timeFormat = "m:ss";
// if (hour > 0)
// timeFormat = "h:mm:ss";
// timeString = playTime.toString(timeFormat);
// if (len)
// timeString += " / " + stopTime.toString(timeFormat);
// }
// timeLabel->setText(timeString);
//}
void
UBMediaPlayer
::
rewind
()
{
m_MediaObject
.
seek
(
0
);
}
void
UBMediaPlayer
::
forward
()
{
QList
<
Phonon
::
MediaSource
>
queue
=
m_MediaObject
.
queue
();
if
(
queue
.
size
()
>
0
)
{
m_MediaObject
.
setCurrentSource
(
queue
[
0
]);
// forwardButton->setEnabled(queue.size() > 1);
m_MediaObject
.
play
();
}
}
void
UBMediaPlayer
::
openUrl
()
{
QSettings
settings
;
settings
.
beginGroup
(
QLatin1String
(
"BrowserMainWindow"
));
QString
sourceURL
=
settings
.
value
(
"location"
).
toString
();
bool
ok
=
false
;
sourceURL
=
QInputDialog
::
getText
(
this
,
tr
(
"Open Location"
),
tr
(
"Please enter a valid address here:"
),
QLineEdit
::
Normal
,
sourceURL
,
&
ok
);
if
(
ok
&&
!
sourceURL
.
isEmpty
())
{
setLocation
(
sourceURL
);
settings
.
setValue
(
"location"
,
sourceURL
);
}
}
void
UBMediaPlayer
::
finished
()
{
}
void
UBMediaPlayer
::
hasVideoChanged
(
bool
bHasVideo
)
{
// info->setVisible(!bHasVideo);
m_videoWindow
.
setVisible
(
bHasVideo
);
}
void
UBMediaPlayer
::
resizeEvent
(
QResizeEvent
*
pEvent
)
{
Q_UNUSED
(
pEvent
);
// int origWidth = m_videoWindow.width();
// int origHeight = m_videoWindow.height();
// float scaleFactor = (float)origWidth / (float)width();
// int newWidth = width();
// int newHeigth = origHeight/scaleFactor;
// m_videoWindow.resize(newWidth, newHeigth);
}
//*************************************************************************
UBDraggableMediaPlayer
::
UBDraggableMediaPlayer
()
:
UBMediaPlayer
()
{
// setAcceptDrops(true);
}
void
UBDraggableMediaPlayer
::
setFile
(
const
QString
&
text
)
{
mSourcePath
=
text
;
UBMediaPlayer
::
setFile
(
text
);
}
void
UBDraggableMediaPlayer
::
mousePressEvent
(
QMouseEvent
*
event
)
{
Q_UNUSED
(
event
);
QMimeData
*
mimeData
=
new
QMimeData
;
QList
<
QUrl
>
urls
;
urls
<<
QUrl
::
fromLocalFile
(
mSourcePath
);
mimeData
->
setUrls
(
urls
);
mimeData
->
setText
(
mSourcePath
);
QDrag
*
drag
=
new
QDrag
(
this
);
drag
->
setMimeData
(
mimeData
);
drag
->
start
();
}
src/gui/UBMediaPlayer.h
deleted
100644 → 0
View file @
368a4dc5
#ifndef UBUBMediaPlayer_H
#define UBUBMediaPlayer_H
#include <QtGui/QWidget>
#include <QtGui/QApplication>
#include <QtCore/QTimerEvent>
#include <QtGui/QShowEvent>
#include <QtGui/QIcon>
#include <QtCore/QBasicTimer>
#include <QtGui/QAction>
#include <phonon/audiooutput.h>
#include <phonon/backendcapabilities.h>
#include <phonon/effect.h>
#include <phonon/effectparameter.h>
#include <phonon/effectwidget.h>
#include <phonon/mediaobject.h>
#include <phonon/seekslider.h>
#include <phonon/videowidget.h>
#include <phonon/volumeslider.h>
QT_BEGIN_NAMESPACE
class
QPushButton
;
class
QLabel
;
class
QSlider
;
class
QTextEdit
;
QT_END_NAMESPACE
class
UBMediaPlayer
;
class
MediaVideoWidget
:
public
Phonon
::
VideoWidget
{
Q_OBJECT
;
public
:
MediaVideoWidget
(
UBMediaPlayer
*
player
,
QWidget
*
parent
=
0
);
protected
:
void
timerEvent
(
QTimerEvent
*
e
);
private
:
UBMediaPlayer
*
m_player
;
QBasicTimer
m_timer
;
// QAction m_action;
};
class
UBMediaPlayer
:
public
QWidget
{
Q_OBJECT
public
:
UBMediaPlayer
();
void
setFile
(
const
QString
&
text
);
void
setLocation
(
const
QString
&
location
);
void
setVolume
(
qreal
volume
);
public
slots
:
void
openFile
();
void
rewind
();
void
forward
();
// void updateTime();
void
finished
();
void
playPause
();
protected
:
void
resizeEvent
(
QResizeEvent
*
pEvent
);
private
slots
:
void
stateChanged
(
Phonon
::
State
newstate
,
Phonon
::
State
oldstate
);
void
bufferStatus
(
int
percent
);
void
openUrl
();
void
hasVideoChanged
(
bool
);
private
:
void
initVideoWindow
();
QIcon
playIcon
;
QIcon
pauseIcon
;
QPushButton
*
playButton
;
// QPushButton *rewindButton;
// QPushButton *forwardButton;
Phonon
::
SeekSlider
*
slider
;
// QLabel *timeLabel;
QLabel
*
progressLabel
;
// QLabel *info;
QWidget
m_videoWindow
;
Phonon
::
MediaObject
m_MediaObject
;
Phonon
::
AudioOutput
m_AudioOutput
;
MediaVideoWidget
*
m_videoWidget
;
Phonon
::
Path
m_audioOutputPath
;
};
class
UBDraggableMediaPlayer
:
public
UBMediaPlayer
{
Q_OBJECT
public
:
UBDraggableMediaPlayer
();
void
setFile
(
const
QString
&
text
);
protected
:
QString
mSourcePath
;
void
mousePressEvent
(
QMouseEvent
*
event
);
};
#endif // UBUBMediaPlayer_H
src/gui/UBPageNavigationWidget.cpp
View file @
33d2bfab
...
...
@@ -14,9 +14,12 @@
*/
#include "UBPageNavigationWidget.h"
#include "core/UBApplication.h"
#include "board/UBBoardController.h"
#include "core/memcheck.h"
#include "board/UBBoardController.h"
#include "globals/UBGlobals.h"
/**
* \brief Constructor
* @param parent as the parent widget
...
...
@@ -32,8 +35,8 @@ UBPageNavigationWidget::UBPageNavigationWidget(QWidget *parent, const char *name
setObjectName
(
name
);
mName
=
"PageNavigator"
;
mVisibleState
=
true
;
setAttribute
(
Qt
::
WA_StyledBackground
,
true
);
setStyleSheet
(
UBApplication
::
globalStyleSheet
()
);
SET_STYLE_SHEET
(
);
mIconToRight
=
QPixmap
(
":images/pages_open.png"
);
mIconToLeft
=
QPixmap
(
":images/pages_close.png"
);
...
...
src/gui/UBTGWidgetTreeDelegate.cpp
0 → 100644
View file @
33d2bfab
#include <QApplication>
#include <QStyleOptionButton>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include <QPainter>
#include <QModelIndex>
#include "UBTGWidgetTreeDelegate.h"
UBTGWidgetTreeDelegate
::
UBTGWidgetTreeDelegate
(
QObject
*
parent
)
:
QStyledItemDelegate
(
parent
)
{
//NOOP
}
void
UBTGWidgetTreeDelegate
::
paint
(
QPainter
*
painter
,
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
{
if
(
index
.
data
(
Qt
::
UserRole
)
!=
eUBTGAddSubItemWidgetType_None
){
painter
->
setBackgroundMode
(
Qt
::
OpaqueMode
);
painter
->
setBackground
(
QBrush
(
QColor
(
Qt
::
red
)));
QStyleOptionButton
styleButton
;
styleButton
.
text
=
"pipo"
;
styleButton
.
rect
=
option
.
rect
;
QApplication
::
style
()
->
drawControl
(
QStyle
::
CE_PushButtonLabel
,
&
styleButton
,
painter
);
}
else
QStyledItemDelegate
::
paint
(
painter
,
option
,
index
);
}
QSize
UBTGWidgetTreeDelegate
::
sizeHint
(
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
{
QSize
size
=
QStyledItemDelegate
::
sizeHint
(
option
,
index
);
return
size
;
}
src/gui/UBTGWidgetTreeDelegate.h
0 → 100644
View file @
33d2bfab
#ifndef UBTGWIDGETTREEDELEGATE_H
#define UBTGWIDGETTREEDELEGATE_H
class
QPainter
;
class
QStyleOptionViewItem
;
class
QModelIndex
;
#include <QStyledItemDelegate>
typedef
enum
{
eUBTGAddSubItemWidgetType_None
,
eUBTGAddSubItemWidgetType_Action
,
eUBTGAddSubItemWidgetType_Media
,
eUBTGAddSubItemWidgetType_Url
}
eUBTGAddSubItemWidgetType
;
class
UBTGWidgetTreeDelegate
:
public
QStyledItemDelegate
{
Q_OBJECT
public
:
explicit
UBTGWidgetTreeDelegate
(
QObject
*
parent
=
0
);
virtual
void
paint
(
QPainter
*
painter
,
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
;
virtual
QSize
sizeHint
(
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
;
signals
:
public
slots
:
};
#endif // UBTGWIDGETTREEDELEGATE_H
src/gui/UBTeacherGuideDelegate.cpp
0 → 100644
View file @
33d2bfab
#include "UBTeacherGuideDelegate.h"
UBTeacherGuideDelegate
::
UBTeacherGuideDelegate
()
{
}
src/gui/UBTeacherGuideDelegate.h
0 → 100644
View file @
33d2bfab
#ifndef UBTEACHERGUIDEDELEGATE_H
#define UBTEACHERGUIDEDELEGATE_H
class
UBTeacherGuideDelegate
{
public
:
UBTeacherGuideDelegate
();
};
#endif // UBTEACHERGUIDEDELEGATE_H
src/gui/UBTeacherGuideWidget.cpp
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QDebug>
#include <QLabel>
#include <QVBoxLayout>
#include <QHeaderView>
#include <QTreeWidget>
#include <QPushButton>
#include "UBTeacherGuideWidget.h"
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
#include "board/UBBoardController.h"
#include "board/UBBoardView.h"
#include "board/UBBoardPaletteManager.h"
#include "gui/UBStylusPalette.h"
#include "gui/UBActionPalette.h"
#include "web/UBWebController.h"
#define UBTG_SEPARATOR_FIXED_HEIGHT 3
/***************************************************************************
* class UBTeacherGuideEditionWidget *
***************************************************************************/
UBTeacherGuideEditionWidget
::
UBTeacherGuideEditionWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
QWidget
(
parent
)
,
mpLayout
(
NULL
)
,
mpDocumentTitle
(
NULL
)
,
mpPageNumberLabel
(
NULL
)
,
mpPageTitle
(
NULL
)
,
mpComment
(
NULL
)
,
mpSeparator
(
NULL
)
,
mpTreeWidget
(
NULL
)
,
mpRootWidgetItem
(
NULL
)
,
mpAddAnActionItem
(
NULL
)
,
mpAddAMediaItem
(
NULL
)
,
mpAddALinkItem
(
NULL
)
,
mpTreeDelegate
(
NULL
)
{
setObjectName
(
name
);
mpLayout
=
new
QVBoxLayout
(
this
);
mpPageNumberLabel
=
new
QLabel
(
this
);
mpPageNumberLabel
->
setAlignment
(
Qt
::
AlignRight
);
mpPageNumberLabel
->
setObjectName
(
"UBTGEditionPageNumberLabel"
);
mpLayout
->
addWidget
(
mpPageNumberLabel
);
// tree basic configuration
mpDocumentTitle
=
new
QLabel
(
this
);
mpDocumentTitle
->
setText
(
"Document title"
);
mpDocumentTitle
->
setObjectName
(
"UBTGEditionDocumentTitle"
);
mpLayout
->
addWidget
(
mpDocumentTitle
);
mpPageTitle
=
new
UBTGAdaptableText
(
0
,
this
);
mpPageTitle
->
setObjectName
(
"UBTGEditionPageTitle"
);
mpPageTitle
->
setPlaceHolderText
(
tr
(
"Type title here ..."
));
mpLayout
->
addWidget
(
mpPageTitle
);
mpComment
=
new
UBTGAdaptableText
(
0
,
this
);
mpComment
->
setObjectName
(
"UBTGEditionComment"
);
mpComment
->
setPlaceHolderText
(
tr
(
"Type comment here ..."
));
mpLayout
->
addWidget
(
mpComment
);
mpSeparator
=
new
QFrame
(
this
);
mpSeparator
->
setObjectName
(
"UBTGEditionSeparator"
);
mpSeparator
->
setFixedHeight
(
UBTG_SEPARATOR_FIXED_HEIGHT
);
mpLayout
->
addWidget
(
mpSeparator
);
mpTreeWidget
=
new
QTreeWidget
(
this
);
mpLayout
->
addWidget
(
mpTreeWidget
);
mpTreeDelegate
=
new
UBTGWidgetTreeDelegate
();
mpRootWidgetItem
=
mpTreeWidget
->
invisibleRootItem
();
//mpTreeWidget->setItemDelegate(mpTreeDelegate);
mpTreeWidget
->
setRootIsDecorated
(
false
);
mpTreeWidget
->
setIndentation
(
0
);
mpTreeWidget
->
setDropIndicatorShown
(
false
);
mpTreeWidget
->
header
()
->
close
();
mpTreeWidget
->
setHorizontalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
mpTreeWidget
->
setColumnCount
(
2
);
mpTreeWidget
->
header
()
->
setStretchLastSection
(
false
);
mpTreeWidget
->
header
()
->
setResizeMode
(
0
,
QHeaderView
::
Stretch
);
mpTreeWidget
->
header
()
->
setResizeMode
(
1
,
QHeaderView
::
Fixed
);
mpTreeWidget
->
header
()
->
setDefaultSectionSize
(
18
);
connect
(
mpTreeWidget
,
SIGNAL
(
itemClicked
(
QTreeWidgetItem
*
,
int
)),
this
,
SLOT
(
onAddItemClicked
(
QTreeWidgetItem
*
,
int
)));
connect
(
UBApplication
::
boardController
,
SIGNAL
(
activeSceneChanged
()),
this
,
SLOT
(
onActiveSceneChanged
()));
mpAddAnActionItem
=
new
UBAddItem
(
tr
(
"Add an action"
),
eUBTGAddSubItemWidgetType_Action
,
mpTreeWidget
);
mpAddAMediaItem
=
new
UBAddItem
(
tr
(
"Add a media"
),
eUBTGAddSubItemWidgetType_Media
,
mpTreeWidget
);
mpAddALinkItem
=
new
UBAddItem
(
tr
(
"Add a link"
),
eUBTGAddSubItemWidgetType_Url
,
mpTreeWidget
);
mpRootWidgetItem
->
addChild
(
mpAddAnActionItem
);
mpRootWidgetItem
->
addChild
(
mpAddAMediaItem
);
mpRootWidgetItem
->
addChild
(
mpAddALinkItem
);
}
UBTeacherGuideEditionWidget
::~
UBTeacherGuideEditionWidget
()
{
DELETEPTR
(
mpDocumentTitle
);
DELETEPTR
(
mpPageNumberLabel
);
DELETEPTR
(
mpPageTitle
);
DELETEPTR
(
mpComment
);
DELETEPTR
(
mpSeparator
);
DELETEPTR
(
mpAddAnActionItem
);
DELETEPTR
(
mpAddAMediaItem
);
DELETEPTR
(
mpAddALinkItem
);
DELETEPTR
(
mpTreeDelegate
);
DELETEPTR
(
mpTreeWidget
)
DELETEPTR
(
mpLayout
);
}
void
UBTeacherGuideEditionWidget
::
showEvent
(
QShowEvent
*
event
)
{
mpPageTitle
->
setFocus
();
mpComment
->
setFocus
();
setFocus
();
QWidget
::
showEvent
(
event
);
}
void
UBTeacherGuideEditionWidget
::
onActiveSceneChanged
()
{
cleanData
();
mpPageNumberLabel
->
setText
(
tr
(
"Page: %0"
).
arg
(
UBApplication
::
boardController
->
activeSceneIndex
()
+
1
));
}
void
UBTeacherGuideEditionWidget
::
cleanData
()
{
mpPageTitle
->
setText
(
""
);
mpComment
->
setText
(
""
);
QList
<
QTreeWidgetItem
*>
children
=
mpAddAnActionItem
->
takeChildren
();
children
<<
mpAddAMediaItem
->
takeChildren
();
children
<<
mpAddALinkItem
->
takeChildren
();
foreach
(
QTreeWidgetItem
*
item
,
children
){
DELETEPTR
(
item
);
}
}
QList
<
QTreeWidgetItem
*>
UBTeacherGuideEditionWidget
::
getChildrenList
(
QTreeWidgetItem
*
widgetItem
)
{
QList
<
QTreeWidgetItem
*>
result
;
for
(
int
i
=
0
;
i
<
widgetItem
->
childCount
();
i
+=
1
)
result
<<
widgetItem
->
child
(
i
);
return
result
;
}
QVector
<
tUBGEElementNode
*>
UBTeacherGuideEditionWidget
::
getPageAndCommentData
()
{
QVector
<
tUBGEElementNode
*>
result
;
tUBGEElementNode
*
pageTitle
=
new
tUBGEElementNode
();
pageTitle
->
type
=
"pageTitle"
;
pageTitle
->
attributes
.
insert
(
"value"
,
mpPageTitle
->
text
());
result
<<
pageTitle
;
tUBGEElementNode
*
comment
=
new
tUBGEElementNode
();
comment
->
type
=
"comment"
;
comment
->
attributes
.
insert
(
"value"
,
mpComment
->
text
());
result
<<
comment
;
return
result
;
}
QVector
<
tUBGEElementNode
*>
UBTeacherGuideEditionWidget
::
getData
()
{
QVector
<
tUBGEElementNode
*>
result
;
QList
<
QTreeWidgetItem
*>
children
=
getChildrenList
(
mpAddAnActionItem
);
children
<<
getChildrenList
(
mpAddAMediaItem
);
children
<<
getChildrenList
(
mpAddALinkItem
);
result
<<
getPageAndCommentData
();
foreach
(
QTreeWidgetItem
*
widgetItem
,
children
){
tUBGEElementNode
*
node
=
dynamic_cast
<
iUBTGSavableData
*>
(
mpTreeWidget
->
itemWidget
(
widgetItem
,
0
))
->
saveData
();
if
(
node
)
result
<<
node
;
}
return
result
;
}
void
UBTeacherGuideEditionWidget
::
onAddItemClicked
(
QTreeWidgetItem
*
widget
,
int
column
)
{
int
addSubItemWidgetType
=
widget
->
data
(
column
,
Qt
::
UserRole
).
toInt
();
if
(
column
==
0
&&
addSubItemWidgetType
!=
eUBTGAddSubItemWidgetType_None
){
QTreeWidgetItem
*
newWidgetItem
=
new
QTreeWidgetItem
(
widget
);
newWidgetItem
->
setData
(
column
,
Qt
::
UserRole
,
eUBTGAddSubItemWidgetType_None
);
newWidgetItem
->
setData
(
1
,
Qt
::
UserRole
,
eUBTGAddSubItemWidgetType_None
);
newWidgetItem
->
setIcon
(
1
,
QIcon
(
":images/close.svg"
));
switch
(
addSubItemWidgetType
)
{
case
eUBTGAddSubItemWidgetType_Action
:
mpTreeWidget
->
setItemWidget
(
newWidgetItem
,
0
,
new
UBTGActionWidget
(
widget
));
break
;
case
eUBTGAddSubItemWidgetType_Media
:
mpTreeWidget
->
setItemWidget
(
newWidgetItem
,
0
,
new
UBTGMediaWidget
(
widget
));
break
;
case
eUBTGAddSubItemWidgetType_Url
:
mpTreeWidget
->
setItemWidget
(
newWidgetItem
,
0
,
new
UBTGUrlWidget
());
break
;
default
:
delete
newWidgetItem
;
qCritical
()
<<
"onAddItemClicked no action set"
;
return
;
}
if
(
addSubItemWidgetType
!=
eUBTGAddSubItemWidgetType_None
&&
!
widget
->
isExpanded
()
)
widget
->
setExpanded
(
true
);
else
{
//to update the tree and subtrees
widget
->
setExpanded
(
false
);
widget
->
setExpanded
(
true
);
}
}
else
if
(
column
==
1
&&
addSubItemWidgetType
==
eUBTGAddSubItemWidgetType_None
){
int
index
=
mpTreeWidget
->
currentIndex
().
row
();
QTreeWidgetItem
*
toBeDeletedWidgetItem
=
widget
->
parent
()
->
takeChild
(
index
);
delete
toBeDeletedWidgetItem
;
}
}
/***************************************************************************
* class UBTeacherGuidePresentationWidget *
***************************************************************************/
typedef
enum
{
tUBTGActionAssociateOnClickItem_NONE
,
tUBTGActionAssociateOnClickItem_URL
,
tUBTGActionAssociateOnClickItem_MEDIA
,
tUBTGActionAssociateOnClickItem_EXPAND
}
tUBTGActionAssociateOnClickItem
;
typedef
enum
{
tUBTGTreeWidgetItemRole_HasAnAction
=
Qt
::
UserRole
,
tUBTGTreeWidgetItemRole_HasAnUrl
}
tUBTGTreeWidgetItemRole
;
UBTeacherGuidePresentationWidget
::
UBTeacherGuidePresentationWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
QWidget
(
parent
)
,
mpPageTitle
(
NULL
)
,
mpComment
(
NULL
)
,
mpLayout
(
NULL
)
,
mpButtonTitleLayout
(
NULL
)
,
mpDocumentTitle
(
NULL
)
,
mpPageNumberLabel
(
NULL
)
,
mpSeparator
(
NULL
)
,
mpModePushButton
(
NULL
)
,
mpTreeWidget
(
NULL
)
,
mpRootWidgetItem
(
NULL
)
,
mpMediaSwitchItem
(
NULL
)
{
setObjectName
(
name
);
mpLayout
=
new
QVBoxLayout
(
this
);
mpPageNumberLabel
=
new
QLabel
(
this
);
mpPageNumberLabel
->
setAlignment
(
Qt
::
AlignRight
);
mpPageNumberLabel
->
setObjectName
(
"UBTGPresentationPageNumberLabel"
);
mpLayout
->
addWidget
(
mpPageNumberLabel
);
mpButtonTitleLayout
=
new
QHBoxLayout
(
0
);
mpModePushButton
=
new
QPushButton
(
this
);
mpModePushButton
->
setIcon
(
QIcon
(
":images/pencil.svg"
));
mpModePushButton
->
setMaximumWidth
(
32
);
connect
(
mpModePushButton
,
SIGNAL
(
clicked
()),
parentWidget
(),
SLOT
(
changeMode
()));
mpDocumentTitle
=
new
QLabel
(
this
);
mpDocumentTitle
->
setObjectName
(
"UBTGPresentationDocumentTitle"
);
mpDocumentTitle
->
setText
(
tr
(
"Document title"
));
mpButtonTitleLayout
->
addWidget
(
mpModePushButton
);
mpButtonTitleLayout
->
addWidget
(
mpDocumentTitle
);
mpLayout
->
addLayout
(
mpButtonTitleLayout
);
mpPageTitle
=
new
UBTGAdaptableText
(
0
,
this
);
mpPageTitle
->
setObjectName
(
"UBTGPresentationPageTitle"
);
mpPageTitle
->
setReadOnly
(
true
);
mpPageTitle
->
setStyleSheet
(
"background-color:transparent"
);
mpLayout
->
addWidget
(
mpPageTitle
);
mpComment
=
new
UBTGAdaptableText
(
0
,
this
);
mpComment
->
setObjectName
(
"UBTGPresentationComment"
);
mpComment
->
setReadOnly
(
true
);
mpComment
->
setStyleSheet
(
"background-color:transparent"
);
mpLayout
->
addWidget
(
mpComment
);
mpSeparator
=
new
QFrame
(
this
);
mpSeparator
->
setFixedHeight
(
UBTG_SEPARATOR_FIXED_HEIGHT
);
mpSeparator
->
setObjectName
(
"UBTGPresentationSepartor"
);
mpLayout
->
addWidget
(
mpSeparator
);
mpTreeWidget
=
new
QTreeWidget
(
this
);
mpLayout
->
addWidget
(
mpTreeWidget
);
mpRootWidgetItem
=
mpTreeWidget
->
invisibleRootItem
();
mpTreeWidget
->
setRootIsDecorated
(
false
);
mpTreeWidget
->
setIndentation
(
0
);
mpTreeWidget
->
setDropIndicatorShown
(
false
);
mpTreeWidget
->
header
()
->
close
();
mpTreeWidget
->
setHorizontalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
connect
(
mpTreeWidget
,
SIGNAL
(
itemClicked
(
QTreeWidgetItem
*
,
int
)),
this
,
SLOT
(
onAddItemClicked
(
QTreeWidgetItem
*
,
int
)));
connect
(
UBApplication
::
boardController
,
SIGNAL
(
activeSceneChanged
()),
this
,
SLOT
(
onActiveSceneChanged
()));
}
UBTeacherGuidePresentationWidget
::~
UBTeacherGuidePresentationWidget
()
{
DELETEPTR
(
mpComment
);
DELETEPTR
(
mpPageTitle
);
DELETEPTR
(
mpPageNumberLabel
);
DELETEPTR
(
mpSeparator
);
DELETEPTR
(
mpMediaSwitchItem
);
DELETEPTR
(
mpModePushButton
);
DELETEPTR
(
mpDocumentTitle
);
DELETEPTR
(
mpButtonTitleLayout
);
DELETEPTR
(
mpTreeWidget
);
DELETEPTR
(
mpLayout
);
}
void
UBTeacherGuidePresentationWidget
::
cleanData
()
{
mpPageTitle
->
showText
(
""
);
mpComment
->
showText
(
""
);
//tree clean
QList
<
QTreeWidgetItem
*>
itemToRemove
=
mpRootWidgetItem
->
takeChildren
();
foreach
(
QTreeWidgetItem
*
eachItem
,
itemToRemove
){
DELETEPTR
(
eachItem
);
}
// the mpMediaSwitchItem is deleted by the previous loop but the pointer is not set to zero
mpMediaSwitchItem
=
NULL
;
}
void
UBTeacherGuidePresentationWidget
::
onActiveSceneChanged
()
{
cleanData
();
mpPageNumberLabel
->
setText
(
tr
(
"Page: %0"
).
arg
(
UBApplication
::
boardController
->
activeSceneIndex
()
+
1
));
}
void
UBTeacherGuidePresentationWidget
::
createMediaButtonItem
()
{
if
(
!
mpMediaSwitchItem
){
//create the media button
mpMediaSwitchItem
=
new
QTreeWidgetItem
(
mpRootWidgetItem
);
//mpMediaSwitchItem->setIcon(0,QIcon(":images/plus.svg"));
mpMediaSwitchItem
->
setText
(
0
,
"+"
);
mpMediaSwitchItem
->
setExpanded
(
false
);
mpMediaSwitchItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnAction
,
tUBTGActionAssociateOnClickItem_EXPAND
);
mpMediaSwitchItem
->
setData
(
0
,
Qt
::
BackgroundRole
,
QVariant
(
QColor
(
200
,
200
,
200
)));
mpMediaSwitchItem
->
setData
(
0
,
Qt
::
FontRole
,
QVariant
(
QFont
(
QApplication
::
font
().
family
(),
16
)));
mpMediaSwitchItem
->
setData
(
0
,
Qt
::
TextAlignmentRole
,
QVariant
(
Qt
::
AlignCenter
));
mpRootWidgetItem
->
addChild
(
mpMediaSwitchItem
);
}
}
void
UBTeacherGuidePresentationWidget
::
showData
(
QVector
<
tUBGEElementNode
*>
data
)
{
cleanData
();
foreach
(
tUBGEElementNode
*
element
,
data
){
if
(
element
->
type
==
"pageTitle"
)
mpPageTitle
->
showText
(
element
->
attributes
.
value
(
"value"
));
else
if
(
element
->
type
==
"comment"
)
mpComment
->
showText
(
element
->
attributes
.
value
(
"value"
));
else
if
(
element
->
type
==
"action"
){
QTreeWidgetItem
*
newWidgetItem
=
new
QTreeWidgetItem
(
mpRootWidgetItem
);
newWidgetItem
->
setText
(
0
,
element
->
attributes
.
value
(
"task"
));
QColor
color
=
element
->
attributes
.
value
(
"owner"
).
toInt
()
==
0
?
QColor
(
Qt
::
red
)
:
QColor
(
Qt
::
green
);
newWidgetItem
->
setData
(
0
,
Qt
::
ForegroundRole
,
QBrush
(
color
));
newWidgetItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnAction
,
tUBTGActionAssociateOnClickItem_NONE
);
newWidgetItem
->
setData
(
0
,
Qt
::
FontRole
,
QVariant
(
QFont
(
QApplication
::
font
().
family
(),
11
)));
mpRootWidgetItem
->
addChild
(
newWidgetItem
);
}
else
if
(
element
->
type
==
"media"
){
createMediaButtonItem
();
QTreeWidgetItem
*
newWidgetItem
=
new
QTreeWidgetItem
(
mpMediaSwitchItem
);
newWidgetItem
->
setIcon
(
0
,
QIcon
(
":images/teacherGuide/"
+
element
->
attributes
.
value
(
"mediaType"
)
+
".png"
));
newWidgetItem
->
setText
(
0
,
element
->
attributes
.
value
(
"title"
));
newWidgetItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnAction
,
tUBTGActionAssociateOnClickItem_MEDIA
);
newWidgetItem
->
setData
(
0
,
Qt
::
FontRole
,
QVariant
(
QFont
(
QApplication
::
font
().
family
(),
11
)));
mpRootWidgetItem
->
addChild
(
newWidgetItem
);
QTreeWidgetItem
*
mediaItem
=
new
QTreeWidgetItem
(
newWidgetItem
);
//mediaItem->setBackground(0,QBrush(QColor("#EEEEEF")));
mediaItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnAction
,
tUBTGActionAssociateOnClickItem_NONE
);
UBTGMediaWidget
*
mediaWidget
=
new
UBTGMediaWidget
(
element
->
attributes
.
value
(
"relativePath"
),
newWidgetItem
);
newWidgetItem
->
setExpanded
(
false
);
mpTreeWidget
->
setItemWidget
(
mediaItem
,
0
,
mediaWidget
);
}
else
if
(
element
->
type
==
"link"
){
createMediaButtonItem
();
QTreeWidgetItem
*
newWidgetItem
=
new
QTreeWidgetItem
(
mpMediaSwitchItem
);
newWidgetItem
->
setIcon
(
0
,
QIcon
(
":images/teacherGuide/link.png"
));
newWidgetItem
->
setText
(
0
,
element
->
attributes
.
value
(
"title"
));
newWidgetItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnAction
,
tUBTGActionAssociateOnClickItem_URL
);
newWidgetItem
->
setData
(
0
,
tUBTGTreeWidgetItemRole_HasAnUrl
,
QVariant
(
element
->
attributes
.
value
(
"url"
)));
newWidgetItem
->
setData
(
0
,
Qt
::
FontRole
,
QVariant
(
QFont
(
QApplication
::
font
().
family
(),
11
)));
mpRootWidgetItem
->
addChild
(
newWidgetItem
);
}
}
}
void
UBTeacherGuidePresentationWidget
::
onAddItemClicked
(
QTreeWidgetItem
*
widget
,
int
column
)
{
int
associateAction
=
widget
->
data
(
column
,
tUBTGTreeWidgetItemRole_HasAnAction
).
toInt
();
if
(
column
==
0
&&
associateAction
!=
tUBTGActionAssociateOnClickItem_NONE
){
switch
(
associateAction
)
{
case
tUBTGActionAssociateOnClickItem_EXPAND
:
widget
->
setExpanded
(
!
widget
->
isExpanded
());
if
(
widget
->
isExpanded
())
mpMediaSwitchItem
->
setText
(
0
,
"-"
);
else
mpMediaSwitchItem
->
setText
(
0
,
"+"
);
break
;
case
tUBTGActionAssociateOnClickItem_URL
:
widget
->
data
(
column
,
tUBTGTreeWidgetItemRole_HasAnUrl
).
toString
();
UBApplication
::
webController
->
loadUrl
(
QUrl
(
widget
->
data
(
column
,
tUBTGTreeWidgetItemRole_HasAnUrl
).
toString
()));
break
;
case
tUBTGActionAssociateOnClickItem_MEDIA
:
widget
->
setExpanded
(
!
widget
->
isExpanded
());
break
;
default
:
qDebug
()
<<
"associateAction no action set "
<<
associateAction
;
}
}
}
/***************************************************************************
* class UBTeacherGuideWidget *
***************************************************************************/
UBTeacherGuideWidget
::
UBTeacherGuideWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
QStackedWidget
(
parent
)
,
mpEditionWidget
(
NULL
)
,
mpPresentationWidget
(
NULL
)
{
setObjectName
(
name
);
mpEditionWidget
=
new
UBTeacherGuideEditionWidget
(
this
);
addWidget
(
mpEditionWidget
);
mpPresentationWidget
=
new
UBTeacherGuidePresentationWidget
(
this
);
addWidget
(
mpPresentationWidget
);
setCurrentWidget
(
mpPresentationWidget
);
connect
(
UBApplication
::
boardController
->
controlView
(),
SIGNAL
(
clickOnBoard
()),
this
,
SLOT
(
showPresentationMode
()));
connectToStylusPalette
();
}
UBTeacherGuideWidget
::~
UBTeacherGuideWidget
()
{
DELETEPTR
(
mpEditionWidget
);
DELETEPTR
(
mpPresentationWidget
);
}
void
UBTeacherGuideWidget
::
connectToStylusPalette
()
{
if
(
UBApplication
::
boardController
->
paletteManager
())
connect
(
UBApplication
::
boardController
->
paletteManager
()
->
stylusPalette
(),
SIGNAL
(
itemOnActionPaletteChanged
()),
this
,
SLOT
(
showPresentationMode
()));
else
QTimer
::
singleShot
(
500
,
this
,
SLOT
(
connectToStylusPalette
()));
}
void
UBTeacherGuideWidget
::
showPresentationMode
()
{
if
(
currentWidget
()
!=
mpPresentationWidget
){
mCurrentData
=
mpEditionWidget
->
getData
();
mpPresentationWidget
->
showData
(
mCurrentData
);
setCurrentWidget
(
mpPresentationWidget
);
}
}
void
UBTeacherGuideWidget
::
changeMode
()
{
if
(
currentWidget
()
==
mpEditionWidget
)
setCurrentWidget
(
mpPresentationWidget
);
else
setCurrentWidget
(
mpEditionWidget
);
}
src/gui/UBTeacherGuideWidget.h
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBTEACHERGUIDEWIDGET_H
#define UBTEACHERGUIDEWIDGET_H
class
QTreeWidget
;
class
QHeaderView
;
class
QLabel
;
class
QVBoxLayout
;
class
QPushButton
;
#include "UBTeacherGuideWidgetsTools.h"
#include "UBTGWidgetTreeDelegate.h"
/***************************************************************************
* class UBTeacherGuideEditionWidget *
***************************************************************************/
class
UBTeacherGuideEditionWidget
:
public
QWidget
{
Q_OBJECT
public
:
explicit
UBTeacherGuideEditionWidget
(
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTeacherGuideEditionWidget"
);
~
UBTeacherGuideEditionWidget
();
void
cleanData
();
QVector
<
tUBGEElementNode
*>
getData
();
public
slots
:
void
onAddItemClicked
(
QTreeWidgetItem
*
widget
,
int
column
);
void
onActiveSceneChanged
();
void
showEvent
(
QShowEvent
*
event
);
private
:
QList
<
QTreeWidgetItem
*>
getChildrenList
(
QTreeWidgetItem
*
widgetItem
);
QVector
<
tUBGEElementNode
*>
getPageAndCommentData
();
QVBoxLayout
*
mpLayout
;
QLabel
*
mpDocumentTitle
;
QLabel
*
mpPageNumberLabel
;
UBTGAdaptableText
*
mpPageTitle
;
UBTGAdaptableText
*
mpComment
;
QFrame
*
mpSeparator
;
QTreeWidget
*
mpTreeWidget
;
QTreeWidgetItem
*
mpRootWidgetItem
;
UBAddItem
*
mpAddAnActionItem
;
UBAddItem
*
mpAddAMediaItem
;
UBAddItem
*
mpAddALinkItem
;
UBTGWidgetTreeDelegate
*
mpTreeDelegate
;
};
/***************************************************************************
* class UBTeacherGuidePresentationWidget *
***************************************************************************/
class
UBTeacherGuidePresentationWidget
:
public
QWidget
{
Q_OBJECT
public
:
explicit
UBTeacherGuidePresentationWidget
(
QWidget
*
parent
,
const
char
*
name
=
"UBTeacherGuidePresentationName"
);
~
UBTeacherGuidePresentationWidget
();
void
showData
(
QVector
<
tUBGEElementNode
*>
data
);
void
cleanData
();
public
slots
:
void
onAddItemClicked
(
QTreeWidgetItem
*
widget
,
int
column
);
void
onActiveSceneChanged
();
private
:
void
createMediaButtonItem
();
UBTGAdaptableText
*
mpPageTitle
;
UBTGAdaptableText
*
mpComment
;
QVBoxLayout
*
mpLayout
;
QHBoxLayout
*
mpButtonTitleLayout
;
QLabel
*
mpDocumentTitle
;
QLabel
*
mpPageNumberLabel
;
QFrame
*
mpSeparator
;
QPushButton
*
mpModePushButton
;
QTreeWidget
*
mpTreeWidget
;
QTreeWidgetItem
*
mpRootWidgetItem
;
QTreeWidgetItem
*
mpMediaSwitchItem
;
};
/***************************************************************************
* class UBTeacherGuideWidget *
***************************************************************************/
class
UBTeacherGuideWidget
:
public
QStackedWidget
{
Q_OBJECT
public
:
explicit
UBTeacherGuideWidget
(
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTeacherGuideWidget"
);
~
UBTeacherGuideWidget
();
public
slots
:
void
changeMode
();
void
showPresentationMode
();
void
connectToStylusPalette
();
private
:
UBTeacherGuideEditionWidget
*
mpEditionWidget
;
UBTeacherGuidePresentationWidget
*
mpPresentationWidget
;
QVector
<
tUBGEElementNode
*>
mCurrentData
;
};
#endif // UBTEACHERGUIDEWIDGET_H
src/gui/UBTeacherGuideWidgetsTools.cpp
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QTreeWidget>
#include <QVBoxLayout>
#include <QComboBox>
#include <QColor>
#include <QLabel>
#include <QDebug>
#include <QUrl>
#include <QWebSettings>
#include <QDomElement>
#include <QDomDocument>
#include <QApplication>
#include "UBTeacherGuideWidgetsTools.h"
#include "UBTGWidgetTreeDelegate.h"
#include "globals/UBGlobals.h"
#include "frameworks/UBFileSystemUtils.h"
/***************************************************************************
* class UBAddItem *
***************************************************************************/
UBAddItem
::
UBAddItem
(
const
QString
&
string
,
int
addSubItemWidgetType
,
QTreeWidget
*
parent
)
:
QTreeWidgetItem
(
parent
)
{
setIcon
(
0
,
QIcon
(
":images/increase.svg"
));
setText
(
0
,
string
);
setData
(
0
,
Qt
::
UserRole
,
QVariant
(
addSubItemWidgetType
));
setData
(
1
,
Qt
::
UserRole
,
QVariant
(
addSubItemWidgetType
));
setData
(
0
,
Qt
::
BackgroundRole
,
QVariant
(
QColor
(
200
,
200
,
200
)));
setData
(
1
,
Qt
::
BackgroundRole
,
QVariant
(
QColor
(
200
,
200
,
200
)));
setData
(
0
,
Qt
::
FontRole
,
QVariant
(
QFont
(
QApplication
::
font
().
family
(),
12
)));
}
UBAddItem
::~
UBAddItem
()
{
//NOOP
}
/***************************************************************************
* class UBTGActionWidget *
***************************************************************************/
UBTGActionWidget
::
UBTGActionWidget
(
QTreeWidgetItem
*
widget
,
QWidget
*
parent
,
const
char
*
name
)
:
QWidget
(
parent
)
,
mpLayout
(
NULL
)
,
mpOwner
(
NULL
)
,
mpTask
(
NULL
)
{
setObjectName
(
name
);
SET_STYLE_SHEET
();
mpLayout
=
new
QVBoxLayout
(
this
);
mpOwner
=
new
QComboBox
(
this
);
mpOwner
->
setObjectName
(
"DockPaletteWidgetComboBox"
);
mpOwner
->
setMinimumHeight
(
22
);
QStringList
qslOwner
;
qslOwner
<<
tr
(
"Teacher"
)
<<
tr
(
"Student"
);
mpOwner
->
insertItems
(
0
,
qslOwner
);
mpOwner
->
setCurrentIndex
(
0
);
mpTask
=
new
UBTGAdaptableText
(
widget
,
this
);
mpTask
->
setAcceptRichText
(
true
);
mpTask
->
setTextColor
(
QColor
().
green
());
mpTask
->
setObjectName
(
"ActionWidgetTaskTextEdit"
);
mpLayout
->
addWidget
(
mpOwner
,
0
);
mpLayout
->
addWidget
(
mpTask
,
1
);
}
UBTGActionWidget
::~
UBTGActionWidget
()
{
DELETEPTR
(
mpOwner
);
DELETEPTR
(
mpTask
);
DELETEPTR
(
mpLayout
);
}
tUBGEElementNode
*
UBTGActionWidget
::
saveData
()
{
tUBGEElementNode
*
result
=
new
tUBGEElementNode
();
result
->
type
=
"action"
;
result
->
attributes
.
insert
(
"owner"
,
QString
(
"%0"
).
arg
(
mpOwner
->
currentIndex
()));
result
->
attributes
.
insert
(
"task"
,
mpTask
->
text
());
return
result
;
}
/***************************************************************************
* class UBTGAdaptableText *
***************************************************************************/
UBTGAdaptableText
::
UBTGAdaptableText
(
QTreeWidgetItem
*
widget
,
QWidget
*
parent
,
const
char
*
name
)
:
QTextEdit
(
parent
)
,
mBottomMargin
(
5
)
,
mpTreeWidgetItem
(
widget
)
,
mMinimumHeight
(
20
)
,
mHasPlaceHolder
(
false
)
{
setObjectName
(
name
);
setStyleSheet
(
"QWidget {background: white; border:1 solid #999999; border-radius : 10px; padding: 2px;}"
);
connect
(
this
,
SIGNAL
(
textChanged
()),
this
,
SLOT
(
onTextChanged
()));
setHorizontalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
setVerticalScrollBarPolicy
(
Qt
::
ScrollBarAlwaysOff
);
setMinimumHeight
(
mMinimumHeight
);
}
void
UBTGAdaptableText
::
setPlaceHolderText
(
QString
text
)
{
// the space addition is to make this string unique and check against it to know
// if we are talking about a typed string or the placeholder string
mPlaceHolderText
=
text
+
" "
;
setTextColor
(
QColor
(
Qt
::
lightGray
));
setText
(
mPlaceHolderText
);
onTextChanged
();
if
(
isHidden
())
show
();
mHasPlaceHolder
=
true
;
}
void
UBTGAdaptableText
::
focusInEvent
(
QFocusEvent
*
e
)
{
if
(
mHasPlaceHolder
&&
toPlainText
()
==
mPlaceHolderText
){
setText
(
""
);
setTextColor
(
QColor
(
Qt
::
black
));
}
e
->
accept
();
}
void
UBTGAdaptableText
::
focusOutEvent
(
QFocusEvent
*
e
)
{
if
(
mHasPlaceHolder
&&
toPlainText
().
length
()
==
0
){
setTextColor
(
QColor
(
Qt
::
lightGray
));
setText
(
mPlaceHolderText
);
}
e
->
accept
();
}
QString
UBTGAdaptableText
::
text
()
{
QString
result
=
toPlainText
();
if
(
mHasPlaceHolder
&&
result
==
mPlaceHolderText
)
return
""
;
return
result
;
}
void
UBTGAdaptableText
::
onTextChanged
()
{
if
(
document
()
->
size
().
height
()
<
mMinimumHeight
)
setFixedHeight
(
mMinimumHeight
);
else
setFixedHeight
(
document
()
->
size
().
height
()
+
mBottomMargin
);
updateGeometry
();
//to trig the widget item to resize it
if
(
mpTreeWidgetItem
){
mpTreeWidgetItem
->
setExpanded
(
false
);
mpTreeWidgetItem
->
setExpanded
(
true
);
setFocus
();
}
}
void
UBTGAdaptableText
::
showText
(
const
QString
&
text
)
{
setText
(
text
);
//A first rendering has to be done to calculate the text's size.
show
();
hide
();
setReadOnly
(
true
);
onTextChanged
();
if
(
isHidden
())
show
();
}
void
UBTGAdaptableText
::
bottomMargin
(
int
newValue
)
{
mBottomMargin
=
newValue
;
onTextChanged
();
}
/***************************************************************************
* class UBTGMediaWidget *
***************************************************************************/
UBTGMediaWidget
::
UBTGMediaWidget
(
QTreeWidgetItem
*
widget
,
QWidget
*
parent
,
const
char
*
name
)
:
QStackedWidget
(
parent
)
,
mpTreeWidgetItem
(
widget
)
,
mpDropMeWidget
(
NULL
)
,
mpWorkWidget
(
NULL
)
,
mpLayout
(
NULL
)
,
mpTitle
(
NULL
)
,
mpMediaLabelWidget
(
NULL
)
,
mpMediaWidget
(
NULL
)
,
mpWebView
(
NULL
)
,
mRelativePath
(
QString
(
""
))
,
mIsPresentationMode
(
false
)
{
setObjectName
(
name
);
mpDropMeWidget
=
new
QLabel
();
mpDropMeWidget
->
setObjectName
(
"UBTGMediaDropMeLabel"
);
mpDropMeWidget
->
setText
(
tr
(
"drop media here ..."
));
mpDropMeWidget
->
setAlignment
(
Qt
::
AlignCenter
);
setAcceptDrops
(
true
);
addWidget
(
mpDropMeWidget
);
setMinimumHeight
(
100
);
}
UBTGMediaWidget
::
UBTGMediaWidget
(
QString
relativePath
,
QTreeWidgetItem
*
widget
,
QWidget
*
parent
,
const
char
*
name
)
:
QStackedWidget
(
parent
)
,
mpTreeWidgetItem
(
widget
)
,
mpDropMeWidget
(
NULL
)
,
mpWorkWidget
(
NULL
)
,
mpLayout
(
NULL
)
,
mpTitle
(
NULL
)
,
mpMediaLabelWidget
(
NULL
)
,
mpMediaWidget
(
NULL
)
,
mpWebView
(
NULL
)
,
mRelativePath
(
relativePath
)
,
mIsPresentationMode
(
true
)
,
mMediaType
(
""
)
{
setObjectName
(
name
);
setAcceptDrops
(
false
);
createWorkWidget
(
mRelativePath
);
setMinimumHeight
(
200
);
}
UBTGMediaWidget
::~
UBTGMediaWidget
()
{
DELETEPTR
(
mpTitle
);
DELETEPTR
(
mpMediaLabelWidget
);
DELETEPTR
(
mpMediaWidget
);
DELETEPTR
(
mpWebView
);
DELETEPTR
(
mpLayout
);
removeWidget
(
mpDropMeWidget
);
DELETEPTR
(
mpDropMeWidget
);
removeWidget
(
mpWorkWidget
);
DELETEPTR
(
mpWorkWidget
);
}
tUBGEElementNode
*
UBTGMediaWidget
::
saveData
()
{
if
(
!
mpTitle
)
return
0
;
tUBGEElementNode
*
result
=
new
tUBGEElementNode
();
result
->
type
=
"media"
;
result
->
attributes
.
insert
(
"title"
,
mpTitle
->
text
());
result
->
attributes
.
insert
(
"relativePath"
,
mRelativePath
);
result
->
attributes
.
insert
(
"mediaType"
,
mMediaType
);
return
result
;
}
void
UBTGMediaWidget
::
dragEnterEvent
(
QDragEnterEvent
*
event
)
{
event
->
accept
();
}
void
UBTGMediaWidget
::
createWorkWidget
(
QString
&
path
)
{
QString
mimeType
=
UBFileSystemUtils
::
mimeTypeFromFileName
(
path
);
qDebug
()
<<
mimeType
;
bool
setMedia
=
true
;
if
(
mimeType
.
contains
(
"audio"
)
||
mimeType
.
contains
(
"video"
)){
mMediaType
=
mimeType
.
contains
(
"audio"
)
?
"audio"
:
"movie"
;
mpMediaWidget
=
new
UBMediaWidget
(
mimeType
.
contains
(
"audio"
)
?
eMediaType_Audio
:
eMediaType_Video
);
mpMediaWidget
->
setFile
(
path
);
}
else
if
(
mimeType
.
contains
(
"image"
)){
mMediaType
=
"image"
;
mpMediaLabelWidget
=
new
QLabel
();
QPixmap
pixmap
=
QPixmap
(
QUrl
(
path
).
toLocalFile
());
pixmap
=
pixmap
.
scaledToWidth
(
mpTreeWidgetItem
->
treeWidget
()
->
size
().
width
());
mpMediaLabelWidget
->
setPixmap
(
pixmap
);
mpMediaLabelWidget
->
setScaledContents
(
true
);
}
else
if
(
mimeType
.
contains
(
"application"
)){
mMediaType
=
"w3c"
;
mpWebView
=
new
QWebView
(
0
);
mpWebView
->
setAcceptDrops
(
false
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
JavaEnabled
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
PluginsEnabled
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
LocalStorageDatabaseEnabled
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
OfflineWebApplicationCacheEnabled
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
OfflineStorageDatabaseEnabled
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
JavascriptCanAccessClipboard
,
true
);
mpWebView
->
settings
()
->
setAttribute
(
QWebSettings
::
DnsPrefetchEnabled
,
true
);
mpWebView
->
load
(
QUrl
(
path
));
mpWebView
->
show
();
}
else
{
qDebug
()
<<
"createWorkWidget mime type not handled"
<<
mimeType
;
setMedia
=
false
;
}
if
(
setMedia
){
mRelativePath
=
path
;
setAcceptDrops
(
false
);
mpWorkWidget
=
new
QWidget
(
this
);
mpLayout
=
new
QVBoxLayout
(
mpWorkWidget
);
if
(
!
mIsPresentationMode
){
mpTitle
=
new
UBTGAdaptableText
(
mpTreeWidgetItem
,
mpWorkWidget
);
mpLayout
->
addWidget
(
mpTitle
,
1
);
}
if
(
mpMediaLabelWidget
){
mpMediaLabelWidget
->
setParent
(
mpWorkWidget
);
mpLayout
->
addWidget
(
mpMediaLabelWidget
);
}
else
if
(
mpMediaWidget
){
mpMediaWidget
->
setMaximumHeight
(
mpTreeWidgetItem
->
treeWidget
()
->
size
().
width
());
mpMediaWidget
->
setParent
(
mpWorkWidget
);
mpLayout
->
addWidget
(
mpMediaWidget
);
}
else
if
(
mpWebView
){
mpWebView
->
setParent
(
mpWorkWidget
);
mpLayout
->
addWidget
(
mpWebView
);
}
mpWorkWidget
->
setLayout
(
mpLayout
);
addWidget
(
mpWorkWidget
);
setCurrentWidget
(
mpWorkWidget
);
updateSize
();
}
}
void
UBTGMediaWidget
::
parseMimeData
(
const
QMimeData
*
pMimeData
)
{
QString
path
;
if
(
pMimeData
){
if
(
pMimeData
->
hasText
()){
path
=
QUrl
::
fromLocalFile
(
pMimeData
->
text
()).
toString
();
}
else
if
(
pMimeData
->
hasUrls
()){
path
=
pMimeData
->
urls
().
at
(
0
).
toString
();
}
else
if
(
pMimeData
->
hasImage
()){
qDebug
()
<<
"Not yet implemented"
;
}
}
else
qDebug
()
<<
"No mime data present"
;
createWorkWidget
(
path
);
QString
mimeType
=
UBFileSystemUtils
::
mimeTypeFromFileName
(
path
);
qDebug
()
<<
mimeType
;
}
void
UBTGMediaWidget
::
dropEvent
(
QDropEvent
*
event
)
{
parseMimeData
(
event
->
mimeData
());
event
->
accept
();
}
void
UBTGMediaWidget
::
mousePressEvent
(
QMouseEvent
*
event
)
{
if
(
!
mIsPresentationMode
)
event
->
ignore
();
else
{
QDrag
*
drag
=
new
QDrag
(
this
);
QMimeData
*
mimeData
=
new
QMimeData
;
QList
<
QUrl
>
urlList
;
urlList
<<
QUrl
(
mRelativePath
);
mimeData
->
setUrls
(
urlList
);
drag
->
setMimeData
(
mimeData
);
drag
->
exec
();
event
->
accept
();
}
}
void
UBTGMediaWidget
::
updateSize
()
{
if
(
mpTreeWidgetItem
){
mpTreeWidgetItem
->
setExpanded
(
false
);
mpTreeWidgetItem
->
setExpanded
(
true
);
if
(
!
mIsPresentationMode
)
mpTitle
->
setFocus
();
}
}
/***************************************************************************
* class UBTGUrlWdiget *
***************************************************************************/
UBTGUrlWidget
::
UBTGUrlWidget
(
QWidget
*
parent
,
const
char
*
name
)
:
QWidget
(
parent
)
,
mpLayout
(
NULL
)
,
mpTitle
(
NULL
)
,
mpUrl
(
NULL
)
{
setObjectName
(
name
);
SET_STYLE_SHEET
();
mpLayout
=
new
QVBoxLayout
(
this
);
mpTitle
=
new
QLineEdit
(
this
);
mpTitle
->
setObjectName
(
"UBTGLineEdit"
);
mpTitle
->
setPlaceholderText
(
tr
(
"Insert link title here..."
));
mpUrl
=
new
QLineEdit
(
this
);
mpUrl
->
setObjectName
(
"UBTGLineEdit"
);
mpUrl
->
setPlaceholderText
(
"http://"
);
mpLayout
->
addWidget
(
mpTitle
);
mpLayout
->
addWidget
(
mpUrl
);
}
UBTGUrlWidget
::~
UBTGUrlWidget
()
{
DELETEPTR
(
mpTitle
);
DELETEPTR
(
mpUrl
);
DELETEPTR
(
mpLayout
);
}
tUBGEElementNode
*
UBTGUrlWidget
::
saveData
()
{
tUBGEElementNode
*
result
=
new
tUBGEElementNode
();
result
->
type
=
"link"
;
result
->
attributes
.
insert
(
"title"
,
mpTitle
->
text
());
result
->
attributes
.
insert
(
"url"
,
mpUrl
->
text
());
return
result
;
}
src/gui/UBTeacherGuideWidgetsTools.h
0 → 100644
View file @
33d2bfab
/*
* This program 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, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBTEACHERGUIDEWIDGETSTOOLS_H
#define UBTEACHERGUIDEWIDGETSTOOLS_H
#include <QObject>
#include <QTreeWidgetItem>
#include <QTextEdit>
#include <QLabel>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QLineEdit>
#include <QMimeData>
#include <QStackedWidget>
#include <QWebView>
#include "customWidgets/UBMediaWidget.h"
class
QTreeWidget
;
class
QVBoxLayout
;
class
QComboBox
;
class
QTextEdit
;
class
QWidget
;
class
UBTGAdaptableText
;
class
QDomElement
;
typedef
struct
{
QString
type
;
QMap
<
QString
,
QString
>
attributes
;
}
tUBGEElementNode
;
class
iUBTGSavableData
{
public
:
virtual
tUBGEElementNode
*
saveData
()
=
0
;
};
class
UBAddItem
:
public
QTreeWidgetItem
{
public
:
explicit
UBAddItem
(
const
QString
&
strings
,
int
addSubItemWidgetType
,
QTreeWidget
*
parent
=
0
);
~
UBAddItem
();
signals
:
public
slots
:
};
class
UBTGActionWidget
:
public
QWidget
,
public
iUBTGSavableData
{
Q_OBJECT
public
:
explicit
UBTGActionWidget
(
QTreeWidgetItem
*
widget
,
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTGActionWidget"
);
~
UBTGActionWidget
();
void
update
();
tUBGEElementNode
*
saveData
();
private
:
QVBoxLayout
*
mpLayout
;
QComboBox
*
mpOwner
;
UBTGAdaptableText
*
mpTask
;
protected
:
QTreeWidgetItem
*
mpTreeWidgetItem
;
};
class
UBTGAdaptableText
:
public
QTextEdit
{
Q_OBJECT
public
:
explicit
UBTGAdaptableText
(
QTreeWidgetItem
*
widget
=
0
,
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTGAdaptableText"
);
void
showText
(
const
QString
&
text
);
void
bottomMargin
(
int
newValue
);
void
setPlaceHolderText
(
QString
text
);
QString
text
();
public
slots
:
void
onTextChanged
();
protected
:
void
focusInEvent
(
QFocusEvent
*
e
);
void
focusOutEvent
(
QFocusEvent
*
e
);
private
:
int
mBottomMargin
;
QTreeWidgetItem
*
mpTreeWidgetItem
;
int
mMinimumHeight
;
bool
mHasPlaceHolder
;
QString
mPlaceHolderText
;
};
class
UBTGMediaWidget
:
public
QStackedWidget
,
public
iUBTGSavableData
{
Q_OBJECT
public
:
UBTGMediaWidget
(
QTreeWidgetItem
*
widget
=
0
,
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTGMediaWidget"
);
UBTGMediaWidget
(
QString
relativePath
,
QTreeWidgetItem
*
widget
=
0
,
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTGMediaWidget"
);
~
UBTGMediaWidget
();
tUBGEElementNode
*
saveData
();
protected
:
void
dragEnterEvent
(
QDragEnterEvent
*
event
);
void
dropEvent
(
QDropEvent
*
event
);
void
mousePressEvent
(
QMouseEvent
*
event
);
private
:
void
parseMimeData
(
const
QMimeData
*
pMimeData
);
void
createWorkWidget
(
QString
&
path
);
void
updateSize
();
QTreeWidgetItem
*
mpTreeWidgetItem
;
QLabel
*
mpDropMeWidget
;
QWidget
*
mpWorkWidget
;
QVBoxLayout
*
mpLayout
;
UBTGAdaptableText
*
mpTitle
;
QLabel
*
mpMediaLabelWidget
;
UBMediaWidget
*
mpMediaWidget
;
QWebView
*
mpWebView
;
QString
mRelativePath
;
bool
mIsPresentationMode
;
QString
mMediaType
;
};
class
UBTGUrlWidget
:
public
QWidget
,
public
iUBTGSavableData
{
Q_OBJECT
public
:
UBTGUrlWidget
(
QWidget
*
parent
=
0
,
const
char
*
name
=
"UBTGUrlWidget"
);
~
UBTGUrlWidget
();
tUBGEElementNode
*
saveData
();
private
:
QVBoxLayout
*
mpLayout
;
QLineEdit
*
mpTitle
;
QLineEdit
*
mpUrl
;
};
#endif // UBTEACHERGUIDEWIDGETSTOOLS_H
src/gui/UBThumbnailWidget.cpp
View file @
33d2bfab
...
...
@@ -243,7 +243,7 @@ void UBThumbnailWidget::mousePressEvent(QMouseEvent *event)
if
(
Qt
::
ControlModifier
&
event
->
modifiers
()
||
Qt
::
ShiftModifier
&
event
->
modifiers
())
{
mSelectedThumbnailItems
=
selectedItems
();
// mSelectedThumbnailItems = selectedItems().toSet();
return
;
}
...
...
@@ -261,7 +261,7 @@ void UBThumbnailWidget::mousePressEvent(QMouseEvent *event)
int
index2
=
mGraphicItems
.
indexOf
(
underlyingItem
);
if
(
-
1
==
index2
)
{
mSelectedThumbnailItems
=
selectedItems
()
;
mSelectedThumbnailItems
=
selectedItems
()
.
toSet
();
return
;
}
mSelectionSpan
=
index2
-
index1
;
...
...
@@ -300,40 +300,64 @@ void UBThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
if
(
mLassoRectItem
)
{
bSelectionInProgress
=
true
;
int
incrementLassoMinWidth
=
2
;
QPointF
currentScenePos
=
mapToScene
(
event
->
pos
());
QRectF
lassoRect
(
qMin
(
mMousePressScenePos
.
x
(),
currentScenePos
.
x
()),
qMin
(
mMousePressScenePos
.
y
(),
currentScenePos
.
y
()),
qAbs
(
mMousePressScenePos
.
x
()
-
currentScenePos
.
x
()),
qAbs
(
mMousePressScenePos
.
y
()
-
currentScenePos
.
y
()));
QRectF
incrementXSelection
(
qMin
(
prevMoveMousePos
.
x
(),
currentScenePos
.
x
()),
qMin
(
mMousePressScenePos
.
y
(),
currentScenePos
.
y
()),
qAbs
(
prevMoveMousePos
.
x
()
-
currentScenePos
.
x
())
+
incrementLassoMinWidth
,
qAbs
(
mMousePressScenePos
.
y
()
-
currentScenePos
.
y
()));
QRectF
incrementYSelection
(
qMin
(
mMousePressScenePos
.
x
(),
currentScenePos
.
x
()),
qMin
(
prevMoveMousePos
.
y
(),
currentScenePos
.
y
()),
qAbs
(
mMousePressScenePos
.
x
()
-
currentScenePos
.
x
()),
qAbs
(
prevMoveMousePos
.
y
()
-
currentScenePos
.
y
())
+
incrementLassoMinWidth
);
prevMoveMousePos
=
currentScenePos
;
mLassoRectItem
->
setRect
(
lassoRect
);
QList
<
QGraphicsItem
*>
lassoSelectedItems
=
scene
()
->
items
(
lassoRect
,
Qt
::
IntersectsItemBoundingRect
);
QList
<
QGraphicsItem
*>
lassoSelectedThumbnailItems
;
foreach
(
QGraphicsItem
*
lassoSelectedItem
,
lassoSelectedItems
)
QSet
<
QGraphicsItem
*>
incSelectedItems
=
scene
()
->
items
(
incrementXSelection
,
Qt
::
IntersectsItemBoundingRect
).
toSet
()
+
scene
()
->
items
(
incrementYSelection
,
Qt
::
IntersectsItemBoundingRect
).
toSet
();
mPreviouslyIncrementalSelectedItems
=
incSelectedItems
;
QSet
<
QGraphicsItem
*>
lassoSelectedItems
;
QSet
<
QGraphicsItem
*>
lassoSelectedThumbnailItems
;
foreach
(
QGraphicsItem
*
lassoSelectedItem
,
incSelectedItems
)
{
if
(
lassoSelectedItem
)
{
UBThumbnail
*
thumbnailItem
=
dynamic_cast
<
UBThumbnail
*>
(
lassoSelectedItem
);
UBSceneThumbnailPixmap
*
thumbnailItem
=
dynamic_cast
<
UBSceneThumbnailPixmap
*>
(
lassoSelectedItem
);
if
(
thumbnailItem
)
lassoSelectedThumbnailItems
.
append
(
lassoSelectedItems
);
{
lassoSelectedItem
->
setSelected
(
true
);
lassoSelectedThumbnailItems
+=
lassoSelectedItem
;
}
}
}
unselectAll
();
foreach
(
QGraphicsItem
*
lassoSelectedItem
,
lassoSelectedThumbnailItems
)
{
if
(
Qt
::
ControlModifier
&
event
->
modifiers
())
QSet
<
QGraphicsItem
*>
toUnset
;
toUnset
=
mSelectedThumbnailItems
-
lassoSelectedThumbnailItems
;
foreach
(
QGraphicsItem
*
item
,
toUnset
)
{
if
(
!
mSelectedThumbnailItems
.
contains
(
lassoSelectedItem
))
selectItemAt
(
mGraphicItems
.
indexOf
(
lassoSelectedItem
),
true
);
item
->
setSelected
(
false
);
}
else
mSelectedThumbnailItems
+=
lassoSelectedItems
;
// foreach (QGraphicsItem *lassoSelectedItem, lassoSelectedThumbnailItems)
{
selectItemAt
(
mGraphicItems
.
indexOf
(
lassoSelectedItem
),
true
);
}
}
if
(
Qt
::
ControlModifier
&
event
->
modifiers
())
{
for
each
(
QGraphicsItem
*
selectedItem
,
mSelectedThumbnailItems
)
for
(
int
i
=
0
;
i
<
mSelectedThumbnailItems
.
count
()
-
1
;
i
++
)
{
if
(
!
lassoSelectedThumbnailItems
.
contains
(
selectedItem
))
selectItemAt
(
mGraphicItems
.
indexOf
(
selectedItem
),
true
);
mSelectedThumbnailItems
.
values
().
at
(
i
)
->
setSelected
(
true
);
}
// foreach (QGraphicsItem *selectedItem, mSelectedThumbnailItems)
{
// selectedItem->setSelected(true);
}
}
}
...
...
@@ -609,14 +633,6 @@ void UBThumbnailWidget::selectAll()
}
}
void
UBThumbnailWidget
::
unselectAll
()
{
foreach
(
QGraphicsItem
*
item
,
mGraphicItems
)
{
item
->
setSelected
(
false
);
}
}
int
UBThumbnailWidget
::
rowCount
()
const
{
UBThumbnail
*
lastThumbnail
=
dynamic_cast
<
UBThumbnail
*>
(
mGraphicItems
.
last
());
...
...
src/gui/UBThumbnailWidget.h
View file @
33d2bfab
...
...
@@ -93,7 +93,6 @@ class UBThumbnailWidget : public QGraphicsView
private
:
void
selectAll
();
void
unselectAll
();
void
selectItems
(
int
startIndex
,
int
count
);
int
rowCount
()
const
;
int
columnCount
()
const
;
...
...
@@ -106,6 +105,8 @@ class UBThumbnailWidget : public QGraphicsView
QString
mMimeType
;
QPointF
prevMoveMousePos
;
qreal
mThumbnailWidth
;
qreal
mThumbnailHeight
;
qreal
mSpacing
;
...
...
@@ -113,7 +114,8 @@ class UBThumbnailWidget : public QGraphicsView
UBThumbnail
*
mLastSelectedThumbnail
;
int
mSelectionSpan
;
QGraphicsRectItem
*
mLassoRectItem
;
QList
<
QGraphicsItem
*>
mSelectedThumbnailItems
;
QSet
<
QGraphicsItem
*>
mSelectedThumbnailItems
;
QSet
<
QGraphicsItem
*>
mPreviouslyIncrementalSelectedItems
;
QTime
mClickTime
;
};
...
...
src/gui/gui.pri
View file @
33d2bfab
...
...
@@ -46,7 +46,11 @@ HEADERS += src/gui/UBThumbnailView.h \
src/gui/UBLibWebView.h \
src/gui/UBDownloadWidget.h \
src/gui/UBDockDownloadWidget.h \
src/gui/UBMediaPlayer.h
src/gui/UBDockTeacherGuideWidget.h \
src/gui/UBTeacherGuideWidget.h \
src/gui/UBTeacherGuideWidgetsTools.h \
src/gui/UBTeacherGuideDelegate.h \
src/gui/UBTGWidgetTreeDelegate.h
SOURCES += src/gui/UBThumbnailView.cpp \
src/gui/UBFloatingPalette.cpp \
...
...
@@ -95,7 +99,11 @@ SOURCES += src/gui/UBThumbnailView.cpp \
src/gui/UBLibWebView.cpp \
src/gui/UBDownloadWidget.cpp \
src/gui/UBDockDownloadWidget.cpp \
src/gui/UBMediaPlayer.cpp
src/gui/UBDockTeacherGuideWidget.cpp \
src/gui/UBTeacherGuideWidget.cpp \
src/gui/UBTeacherGuideWidgetsTools.cpp \
src/gui/UBTeacherGuideDelegate.cpp \
src/gui/UBTGWidgetTreeDelegate.cpp
win32 {
...
...
@@ -123,15 +131,3 @@ linux-g++-64 {
SOURCES += src/gui/UBKeyboardPalette_linux.cpp
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment