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
b228a5c9
Commit
b228a5c9
authored
May 30, 2017
by
Craig Watson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' (1.3.6 release)
parents
00ab81e3
87eaa529
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
418 additions
and
225 deletions
+418
-225
OpenBoard.pro
OpenBoard.pro
+1
-1
OpenBoard.config
resources/etc/OpenBoard.config
+0
-1
OpenBoard_it.ts
resources/i18n/OpenBoard_it.ts
+56
-56
UBExportPDF.cpp
src/adaptors/UBExportPDF.cpp
+31
-18
UBBoardController.cpp
src/board/UBBoardController.cpp
+24
-5
UBBoardPaletteManager.cpp
src/board/UBBoardPaletteManager.cpp
+6
-1
UBApplication.cpp
src/core/UBApplication.cpp
+1
-7
UBApplicationController.cpp
src/core/UBApplicationController.cpp
+62
-78
UBApplicationController.h
src/core/UBApplicationController.h
+4
-11
UBPreferencesController.cpp
src/core/UBPreferencesController.cpp
+0
-2
UBSettings.cpp
src/core/UBSettings.cpp
+2
-2
UBSettings.h
src/core/UBSettings.h
+1
-1
UBDocumentController.cpp
src/document/UBDocumentController.cpp
+54
-18
UBDocumentController.h
src/document/UBDocumentController.h
+2
-1
UBGraphicsItemUndoCommand.cpp
src/domain/UBGraphicsItemUndoCommand.cpp
+43
-0
UBGraphicsMediaItem.cpp
src/domain/UBGraphicsMediaItem.cpp
+37
-2
UBGraphicsMediaItem.h
src/domain/UBGraphicsMediaItem.h
+3
-0
UBGraphicsPolygonItem.h
src/domain/UBGraphicsPolygonItem.h
+2
-0
UBGraphicsScene.cpp
src/domain/UBGraphicsScene.cpp
+32
-9
UBGraphicsScene.h
src/domain/UBGraphicsScene.h
+2
-0
UBGraphicsStroke.cpp
src/domain/UBGraphicsStroke.cpp
+2
-1
UBGraphicsStrokesGroup.cpp
src/domain/UBGraphicsStrokesGroup.cpp
+5
-0
UBGraphicsTextItemDelegate.cpp
src/domain/UBGraphicsTextItemDelegate.cpp
+4
-1
UBSelectionFrame.cpp
src/domain/UBSelectionFrame.cpp
+17
-0
UBSelectionFrame.h
src/domain/UBSelectionFrame.h
+2
-0
UBVersion.cpp
src/frameworks/UBVersion.cpp
+18
-7
UBDocumentTreeWidget.cpp
src/gui/UBDocumentTreeWidget.cpp
+5
-2
UBGraphicsCompass.cpp
src/tools/UBGraphicsCompass.cpp
+1
-0
UBGraphicsCurtainItemDelegate.cpp
src/tools/UBGraphicsCurtainItemDelegate.cpp
+1
-1
No files found.
OpenBoard.pro
View file @
b228a5c9
...
...
@@ -10,7 +10,7 @@ CONFIG += debug_and_release \
VERSION_MAJ
=
1
VERSION_MIN
=
3
VERSION_PATCH
=
5
VERSION_PATCH
=
6
VERSION_TYPE
=
r
#
a
=
alpha
,
b
=
beta
,
rc
=
release
candidate
,
r
=
release
,
other
=>
error
VERSION_BUILD
=
0
...
...
resources/etc/OpenBoard.config
View file @
b228a5c9
[
App
]
AngleTolerance
=
4
EnableAutomaticSoftwareUpdates
=
false
EnableSoftwareUpdates
=
true
EnableStartupHints
=
true
FavoriteToolURIs
=
openboardtool
://
openboard
/
mask
,
openboardtool
://
ruler
,
openboardtool
://
compass
,
openboardtool
://
protractor
,
openboardtool
://
triangle
,
openboardtool
://
magnifier
,
openboardtool
://
cache
IsInSoftwareUpdateProcess
=
false
...
...
resources/i18n/OpenBoard_it.ts
View file @
b228a5c9
<
?
xml
version
=
"1.0"
encoding
=
"utf-8"
?
>
<!
DOCTYPE
TS
>
<
TS
version
=
"2.
1
"
>
<
TS
version
=
"2.
0"
language
=
"it_IT"
sourcelanguage
=
"it_IT
"
>
<
context
>
<
name
>
BlackoutWidget
<
/name
>
<
message
>
...
...
@@ -793,11 +793,11 @@
<
/message
>
<
message
>
<
source
>
Open
Tutorial
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Apri
tutorial
<
/translation
>
<
/message
>
<
message
>
<
source
>
Open
the
tutorial
web
page
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Apri
la
pagina
web
del
tutorial
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -842,11 +842,11 @@
<
name
>
QObject
<
/name
>
<
message
>
<
source
>
Element
ID
=
<
/source
>
<
translation
type
=
"vanished"
>
Elemento
ID
=<
/translation
>
<
translation
>
Elemento
ID
=<
/translation
>
<
/message
>
<
message
>
<
source
>
Content
is
not
supported
in
destination
format
.
<
/source
>
<
translation
type
=
"vanished"
>
Il
contenuto
non
è
supportato
nel
formato
di
destinazione
.
<
/translation
>
<
translation
>
Il
contenuto
non
è
supportato
nel
formato
di
destinazione
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Remove
Page
<
/source
>
...
...
@@ -939,11 +939,11 @@
<
/message
>
<
message
>
<
source
>
Saving
document
...
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Salvataggio
documento
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Document
has
just
been
saved
...
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Il
documento
è
stato
appena
salvato
...
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1004,7 +1004,7 @@
<
/message
>
<
message
>
<
source
>
Show
OpenBoard
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Mostra
OpenBoard
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1123,9 +1123,9 @@
<
/message
>
<
message
numerus
=
"yes"
>
<
source
>
Are
you
sure
you
want
to
remove
%
n
page
(
s
)
from
the
selected
document
&
apos
;
%
1
&
apos
;?
<
/source
>
<
translation
type
=
"unfinished"
>
<
numerusform
>
Sei
sicuro
di
voler
rimuovere
%
n
pagin
e
dal
documento
&
apos
;
%
1
&
apos
;
selezionato
?
<
/numerusform
>
<
translation
>
<
numerusform
>
Sei
sicuro
di
voler
rimuovere
%
n
pagin
a
dal
documento
&
apos
;
%
1
&
apos
;
selezionato
?
<
/numerusform
>
<
numerusform
>
Sei
sicuro
di
voler
rimuovere
%
n
pagine
dal
documento
&
apos
;
%
1
&
apos
;
selezionato
?
<
/numerusform
>
<
/translation
>
<
/message
>
<
message
>
...
...
@@ -1138,15 +1138,15 @@
<
/message
>
<
message
>
<
source
>
The
document
&
apos
;
%
1
&
apos
;
has
been
generated
with
a
newer
version
of
OpenBoard
(
%
2
).
By
opening
it
,
you
may
lose
some
information
.
Do
you
want
to
proceed
?
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Il
documento
&
quot
;
%
1
&
quot
;
è
stato
generato
con
una
pi
ù
recente
versione
di
OpenBoard
(
%
2
).
Aprendolo
,
si
possono
perdere
alcune
informazioni
.
Procedere
ugualmente
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
Are
you
sure
you
want
to
remove
all
selected
documents
?
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Sicuri
di
voler
rimuovere
tutti
i
documenti
selezionati
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
Remove
multiple
documents
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Rimuovi
documenti
multipli
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1212,8 +1212,8 @@
<
message
numerus
=
"yes"
>
<
source
>%
1
pages
copied
<
/source
>
<
translation
type
=
"unfinished"
>
<
numerusform
>%
1
pagin
e
copiate
<
/numerusform
>
<
numerusform
>%
1
pagin
a
copiata
<
/numerusform
>
<
numerusform
>%
1
pagine
copiate
<
/numerusform
>
<
/translation
>
<
/message
>
<
/context
>
...
...
@@ -1239,23 +1239,23 @@
<
name
>
UBExportCFF
<
/name
>
<
message
>
<
source
>
Export
to
IWB
<
/source
>
<
translation
type
=
"vanished"
>
Esporta
in
IWB
<
/translation
>
<
translation
>
Esporta
in
IWB
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
as
IWB
File
<
/source
>
<
translation
type
=
"vanished"
>
Esporta
come
file
IWB
<
/translation
>
<
translation
>
Esporta
come
file
IWB
<
/translation
>
<
/message
>
<
message
>
<
source
>
Exporting
document
...
<
/source
>
<
translation
type
=
"vanished"
>
Esportazione
documento
in
corso
...
<
/translation
>
<
translation
>
Esportazione
documento
in
corso
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
successful
.
<
/source
>
<
translation
type
=
"vanished"
>
Esportazione
conclusa
con
successo
.
<
/translation
>
<
translation
>
Esportazione
conclusa
con
successo
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
.
<
/source
>
<
translation
type
=
"vanished"
>
Esportazione
fallita
.
<
/translation
>
<
translation
>
Esportazione
fallita
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1282,19 +1282,19 @@
<
/message
>
<
message
>
<
source
>
Export
to
OpenBoard
Format
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Esporta
nel
formato
OpenBoard
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
:
location
not
writable
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Exportazione
fallita
:
posizione
non
scrivibile
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Esportazione
fallita
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unable
to
export
to
the
selected
location
.
You
do
not
have
the
permissions
necessary
to
save
the
file
.
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Impossibile
esportare
nella
posizione
selezionata
.
Non
possiedi
i
permessi
necessari
a
salvare
il
file
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1317,15 +1317,15 @@
<
/message
>
<
message
>
<
source
>
Export
failed
:
location
not
writable
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Esportazione
fallita
:
posizione
non
scrivibile
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Esportazione
fallita
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unable
to
export
to
the
selected
location
.
You
do
not
have
the
permissions
necessary
to
save
the
file
.
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Impossibile
esportare
alla
posizione
selezionata
.
Non
possiedi
i
permessi
necessari
a
salvare
il
file
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1531,19 +1531,19 @@
<
name
>
UBGraphicsMediaItem
<
/name
>
<
message
>
<
source
>
Media
resource
couldn
&
apos
;
t
be
resolved
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
La
risorsa
multimediale
non
pu
ò
essere
gestita
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unsupported
media
format
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Formato
multimediale
non
supportato
<
/translation
>
<
/message
>
<
message
>
<
source
>
Media
playback
service
not
found
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Servizio
di
esecuzione
multimediale
non
trovato
<
/translation
>
<
/message
>
<
message
>
<
source
>
Media
error
:
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Errore
multimediale
:
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1593,23 +1593,23 @@
<
name
>
UBImportCFF
<
/name
>
<
message
>
<
source
>
Common
File
Format
(
<
/source
>
<
translation
type
=
"vanished"
>
Common
File
Format
(
<
/translation
>
<
translation
>
Common
File
Format
(
<
/translation
>
<
/message
>
<
message
>
<
source
>
Importing
file
%
1
...
<
/source
>
<
translation
type
=
"vanished"
>
Importazione
del
file
%
1
in
corso
...
<
/translation
>
<
translation
>
Importazione
del
file
%
1
in
corso
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Import
of
file
%
1
failed
.
<
/source
>
<
translation
type
=
"vanished"
>
L
&
apos
;
importazione
del
file
%
1
è
fallita
.
<
/translation
>
<
translation
>
L
&
apos
;
importazione
del
file
%
1
è
fallita
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Import
successful
.
<
/source
>
<
translation
type
=
"vanished"
>
Importazione
completata
con
successo
.
<
/translation
>
<
translation
>
Importazione
completata
con
successo
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Import
failed
.
<
/source
>
<
translation
type
=
"vanished"
>
Importazione
fallita
.
<
/translation
>
<
translation
>
Importazione
fallita
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1628,7 +1628,7 @@
<
/message
>
<
message
>
<
source
>
OpenBoard
(
*
.
ubz
)
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
OpenBoard
(
*
.
ubz
)
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1739,27 +1739,27 @@ Vuoi ignorare gli errori per questo host?</translation>
<
name
>
UBOpenSankoreImporterWidget
<
/name
>
<
message
>
<
source
>
Open
-
Sankore
Documents
Detected
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Rilevati
documenti
Open
-
Sankore
<
/translation
>
<
/message
>
<
message
>
<
source
>
Show
this
panel
next
time
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Mostra
questo
pannello
la
prossima
volta
<
/translation
>
<
/message
>
<
message
>
<
source
>
You
can
always
access
the
OpenBoard
Document
Importer
through
the
Preferences
panel
in
the
About
tab
.
Warning
,
if
you
have
already
imported
your
Open
-
Sankore
datas
,
you
might
loose
your
current
OpenBoard
documents
.
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
È
sempre
possibile
accedere
all
&
apos
;
importatore
di
documenti
OpenBoard
tramite
il
pannello
delle
preferenze
nella
scheda
delle
informazioni
su
OpenBoard
.
Attenzione
,
se
si
è
gi
à
importato
dati
Open
-
Sankore
,
è
possibile
perdere
i
documenti
OpenBoard
correnti
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Cancel
<
/source
>
<
translation
type
=
"unfinished"
>
Annulla
<
/translation
>
<
translation
>
Annulla
<
/translation
>
<
/message
>
<
message
>
<
source
>
Proceed
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Procedi
<
/translation
>
<
/message
>
<
message
>
<
source
>
Open
-
Sankor
é
documents
are
present
on
your
computer
.
It
is
possible
to
import
them
to
OpenBoard
by
pressing
the
“
Proceed
”
button
to
launch
the
importer
application
.
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Documenti
Open
-
Sankor
é
sono
presenti
nel
computer
.
È
possibile
importarli
in
OpenBoard
premendo
il
pulsante
“
Procedi
”
per
avviare
l
&
apos
;
applicazione
di
importazione
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1774,7 +1774,7 @@ Vuoi ignorare gli errori per questo host?</translation>
<
/message
>
<
message
>
<
source
>
has
lost
access
to
the
document
repository
&
apos
;
%
1
&
apos
;.
Unfortunately
the
application
must
shut
down
to
avoid
data
corruption
.
Latest
changes
may
be
lost
as
well
.
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
ha
perso
l
&
apos
;
accesso
al
repository
documenti
&
quot
;
%
1
&
quot
;.
Sfortunatamente
l
&
apos
;
applicazione
deve
essere
chiusa
per
evitare
di
rivinare
i
dati
.
Gli
ultimi
cambiamenti
potrebbero
andare
persi
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1860,7 +1860,7 @@ Vuoi ignorare gli errori per questo host?</translation>
<
/message
>
<
message
>
<
source
>
OpenBoard
Cast
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
OpenBoard
Cast
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1919,7 +1919,7 @@ Vuoi ignorare gli errori per questo host?</translation>
<
name
>
UBStartupHintsPalette
<
/name
>
<
message
>
<
source
>
Visible
next
time
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Visibile
la
prossima
volta
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2319,7 +2319,7 @@ Si prega di riavviare l'applicazione per accedere ai documenti aggiornati.<
<
/message
>
<
message
>
<
source
>
Download
PDF
Document
:
would
you
prefer
to
download
the
PDF
file
or
add
it
to
the
current
OpenBoard
document
?
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Scarica
il
documento
PDF
:
preferisci
scaricare
il
file
PDF
o
aggiungerlo
al
documento
OpenBoard
corrente
?
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2373,11 +2373,11 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Restore
credentials
on
reboot
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Ripristina
le
credenziali
al
riavvio
<
/translation
>
<
/message
>
<
message
>
<
source
>
OpenBoard
<
/source
>
<
translation
type
=
"unfinished"
>
OpenBoard
<
/translation
>
<
translation
>
OpenBoard
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2442,7 +2442,7 @@ p, li { white-space: pre-wrap; }
<
name
>
documents
<
/name
>
<
message
>
<
source
>
OpenBoard
Documents
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Documenti
OpenBoard
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2485,7 +2485,7 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Keyboard
button
size
:
<
/source
>
<
translation
type
=
"vanished"
>
Dimensione
pulsanti
tastiera
:
<
/translation
>
<
translation
>
Dimensione
pulsanti
tastiera
:
<
/translation
>
<
/message
>
<
message
>
<
source
>
Toolbar
<
/source
>
...
...
@@ -2585,19 +2585,19 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Open
-
Sankor
é
Importer
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Apri
l
&
apos
;
importatore
Open
-
Sankor
é
<
/translation
>
<
/message
>
<
message
>
<
source
>
Check
if
Open
-
Sankor
é
data
could
be
imported
at
launch
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Controlla
se
i
dati
Open
-
Sankor
é
possono
venir
importati
all
&
apos
;
avvio
<
/translation
>
<
/message
>
<
message
>
<
source
>
Use
system
keyboard
(
recommended
)
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Usa
la
tastiera
di
sistema
(
raccomandato
)
<
/translation
>
<
/message
>
<
message
>
<
source
>
Built
-
in
virtual
keyboard
button
size
:
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Dimensione
pulsanti
tastiera
virtuale
incorporata
:
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
src/adaptors/UBExportPDF.cpp
View file @
b228a5c9
...
...
@@ -32,6 +32,7 @@
#include <QtCore>
#include <QtSvg>
#include <QPrinter>
#include <QPdfWriter>
#include "core/UBApplication.h"
#include "core/UBSettings.h"
...
...
@@ -40,6 +41,7 @@
#include "domain/UBGraphicsScene.h"
#include "domain/UBGraphicsSvgItem.h"
#include "domain/UBGraphicsPDFItem.h"
#include "document/UBDocumentProxy.h"
...
...
@@ -66,56 +68,67 @@ void UBExportPDF::persist(UBDocumentProxy* pDocumentProxy)
bool
UBExportPDF
::
persistsDocument
(
UBDocumentProxy
*
pDocumentProxy
,
const
QString
&
filename
)
{
QP
rinter
pdfPrinter
;
QP
dfWriter
pdfWriter
(
filename
)
;
qDebug
()
<<
"exporting document to PDF"
<<
filename
;
pdf
Printer
.
setOutputFormat
(
QPrinter
::
PdfFormat
);
pdf
Printer
.
setResolution
(
UBSettings
::
settings
()
->
pdfResolution
->
get
().
toInt
());
pdf
Printer
.
setOutputFileName
(
filename
);
pdf
Printer
.
setFullPage
(
true
);
pdf
Writer
.
setResolution
(
UBSettings
::
settings
()
->
pdfResolution
->
get
().
toInt
()
);
pdf
Writer
.
setPageMargins
(
QMarginsF
());
pdf
Writer
.
setTitle
(
pDocumentProxy
->
name
()
);
pdf
Writer
.
setCreator
(
"OpenBoard PDF export"
);
//need to calculate screen resolution
QDesktopWidget
*
desktop
=
UBApplication
::
desktop
();
int
dpiCommon
=
(
desktop
->
physicalDpiX
()
+
desktop
->
physicalDpiY
())
/
2
;
float
scaleFactor
=
72.0
f
/
dpiCommon
;
QPainter
pdfPainter
;
bool
painterNeedsBegin
=
true
;
int
existingPageCount
=
pDocumentProxy
->
pageCount
();
for
(
int
pageIndex
=
0
;
pageIndex
<
existingPageCount
;
pageIndex
++
)
{
for
(
int
pageIndex
=
0
;
pageIndex
<
existingPageCount
;
pageIndex
++
)
{
UBGraphicsScene
*
scene
=
UBPersistenceManager
::
persistenceManager
()
->
loadDocumentScene
(
pDocumentProxy
,
pageIndex
);
UBApplication
::
showMessage
(
tr
(
"Exporting page %1 of %2"
).
arg
(
pageIndex
+
1
).
arg
(
existingPageCount
));
// set background to white, no crossing for PDF output
bool
isDark
=
scene
->
isDarkBackground
();
bool
isCrossed
=
scene
->
isCrossedBackground
();
scene
->
setBackground
(
false
,
false
);
QSize
pageSize
=
scene
->
nominalSize
();
// pageSize is the output PDF page size; it is set to equal the scene's boundary size; if the contents
// of the scene overflow from the boundaries, they will be scaled down.
QSize
pageSize
=
scene
->
sceneSize
();
// set high res rendering
scene
->
setRenderingQuality
(
UBItem
::
RenderingQualityHigh
);
scene
->
setRenderingContext
(
UBGraphicsScene
::
NonScreen
);
//setting page size to appropriate value
pdfPrinter
.
setPaperSize
(
QSizeF
(
pageSize
.
width
()
*
scaleFactor
,
pageSize
.
height
()
*
scaleFactor
),
QPrinter
::
Point
);
if
(
painterNeedsBegin
)
painterNeedsBegin
=
!
pdfPainter
.
begin
(
&
pdfPrinter
);
//render to PDF
scene
->
render
(
&
pdfPainter
,
QRectF
(),
scene
->
normalizedSceneRect
());
// Setting output page size
QPageSize
outputPageSize
=
QPageSize
(
QSizeF
(
pageSize
.
width
()
*
scaleFactor
,
pageSize
.
height
()
*
scaleFactor
),
QPageSize
::
Point
);
pdfWriter
.
setPageSize
(
outputPageSize
);
if
(
pageIndex
<
existingPageCount
-
1
)
pdfPrinter
.
newPage
();
// Call begin only once
if
(
painterNeedsBegin
)
painterNeedsBegin
=
!
pdfPainter
.
begin
(
&
pdfWriter
);
//restore screen rendering quality
else
if
(
pageIndex
<
existingPageCount
)
pdfWriter
.
newPage
();
// Render the scene
scene
->
render
(
&
pdfPainter
,
QRectF
(),
scene
->
normalizedSceneRect
());
// Restore screen rendering quality
scene
->
setRenderingContext
(
UBGraphicsScene
::
Screen
);
scene
->
setRenderingQuality
(
UBItem
::
RenderingQualityNormal
);
//
r
estore background state
//
R
estore background state
scene
->
setBackground
(
isDark
,
isCrossed
);
}
if
(
!
painterNeedsBegin
)
pdfPainter
.
end
();
if
(
!
painterNeedsBegin
)
pdfPainter
.
end
();
return
true
;
}
...
...
src/board/UBBoardController.cpp
View file @
b228a5c9
...
...
@@ -593,9 +593,6 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
itemSize
=
commonItem
->
boundingRect
().
size
();
commonItem
->
setSelected
(
false
);
UBGraphicsStrokesGroup
*
stroke
=
dynamic_cast
<
UBGraphicsStrokesGroup
*>
(
commonItem
);
if
(
stroke
)
itemPos
=
QPointF
(
shifting
,
shifting
);
}
UBMimeType
::
Enum
itemMimeType
;
...
...
@@ -654,7 +651,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
{
QBuffer
buffer
(
&
pData
);
buffer
.
open
(
QIODevice
::
WriteOnly
);
QString
format
=
UBFileSystemUtils
::
extension
(
item
->
sourceUrl
().
to
LocalFile
(
));
QString
format
=
UBFileSystemUtils
::
extension
(
item
->
sourceUrl
().
to
String
(
QUrl
::
DecodeReserved
));
pixitem
->
pixmap
().
save
(
&
buffer
,
format
.
toLatin1
());
}
}
break
;
...
...
@@ -1612,6 +1609,23 @@ void UBBoardController::ClearUndoStack()
findUniquesItems
(
UBApplication
::
undoStack
->
command
(
i
),
uniqueItems
);
}
// Get items from clipboard in order not to delete an item that was cut
// (using source URL of graphics items as a surrogate for equality testing)
// This ensures that we can cut and paste a media item, widget, etc. from one page to the next.
QClipboard
*
clipboard
=
QApplication
::
clipboard
();
const
QMimeData
*
data
=
clipboard
->
mimeData
();
QList
<
QUrl
>
sourceURLs
;
if
(
data
&&
data
->
hasFormat
(
UBApplication
::
mimeTypeUniboardPageItem
))
{
const
UBMimeDataGraphicsItem
*
mimeDataGI
=
qobject_cast
<
const
UBMimeDataGraphicsItem
*>
(
data
);
if
(
mimeDataGI
)
{
foreach
(
UBItem
*
sourceItem
,
mimeDataGI
->
items
())
{
sourceURLs
<<
sourceItem
->
sourceUrl
();
}
}
}
// go through all unique items, and check, if they are on scene, or not.
// if not on scene, than item can be deleted
QSetIterator
<
QGraphicsItem
*>
itUniq
(
uniqueItems
);
...
...
@@ -1623,7 +1637,12 @@ void UBBoardController::ClearUndoStack()
scene
=
dynamic_cast
<
UBGraphicsScene
*>
(
item
->
scene
());
}
if
(
!
scene
)
bool
inClipboard
=
false
;
UBItem
*
ubi
=
dynamic_cast
<
UBItem
*>
(
item
);
if
(
ubi
&&
sourceURLs
.
contains
(
ubi
->
sourceUrl
()))
inClipboard
=
true
;
if
(
!
scene
&&
!
inClipboard
)
{
if
(
!
mActiveScene
->
deleteItem
(
item
)){
delete
item
;
...
...
src/board/UBBoardPaletteManager.cpp
View file @
b228a5c9
...
...
@@ -73,6 +73,7 @@
#include "document/UBDocumentController.h"
#include "core/UBPersistenceManager.h"
#include "core/memcheck.h"
UBBoardPaletteManager
::
UBBoardPaletteManager
(
QWidget
*
container
,
UBBoardController
*
pBoardController
)
...
...
@@ -846,7 +847,11 @@ void UBBoardPaletteManager::addItemToCurrentPage()
{
UBGraphicsPixmapItem
*
item
=
UBApplication
::
boardController
->
activeScene
()
->
addPixmap
(
mPixmap
,
NULL
,
mPos
,
mScaleFactor
);
item
->
setSourceUrl
(
mItemUrl
);
QString
documentPath
=
UBApplication
::
boardController
->
selectedDocument
()
->
persistencePath
();
QString
fileName
=
UBPersistenceManager
::
imageDirectory
+
"/"
+
item
->
uuid
().
toString
()
+
".png"
;
QString
path
=
documentPath
+
"/"
+
fileName
;
item
->
setSourceUrl
(
QUrl
(
path
));
item
->
setSelected
(
true
);
UBDrawingController
::
drawingController
()
->
setStylusTool
(
UBStylusTool
::
Selector
);
...
...
src/core/UBApplication.cpp
View file @
b228a5c9
...
...
@@ -511,13 +511,7 @@ void UBApplication::decorateActionMenu(QAction* action)
menu
->
addSeparator
();
menu
->
addAction
(
mainWindow
->
actionPreferences
);
menu
->
addAction
(
mainWindow
->
actionMultiScreen
);
// SANKORE-48: Hide the check update action if the setting
// EnableAutomaticSoftwareUpdates is false in Uniboard.config
if
(
UBSettings
::
settings
()
->
appEnableAutomaticSoftwareUpdates
->
get
().
toBool
())
menu
->
addAction
(
mainWindow
->
actionCheckUpdate
);
else
mainWindow
->
actionCheckUpdate
->
setEnabled
(
false
);
menu
->
addAction
(
mainWindow
->
actionCheckUpdate
);
menu
->
addSeparator
();
#ifndef Q_OS_LINUX // No Podcast on Linux yet
...
...
src/core/UBApplicationController.cpp
View file @
b228a5c9
...
...
@@ -90,7 +90,6 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView,
,
mAutomaticCheckForUpdates
(
false
)
,
mCheckingForUpdates
(
false
)
,
mIsShowingDesktop
(
false
)
,
mHttp
(
0
)
{
mDisplayManager
=
new
UBDisplayManager
(
this
);
...
...
@@ -121,7 +120,7 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView,
connect
(
UBApplication
::
webController
,
SIGNAL
(
imageCaptured
(
const
QPixmap
&
,
bool
,
const
QUrl
&
))
,
this
,
SLOT
(
addCapturedPixmap
(
const
QPixmap
&
,
bool
,
const
QUrl
&
)));
n
etworkAccessManager
=
new
QNetworkAccessManager
(
this
);
mN
etworkAccessManager
=
new
QNetworkAccessManager
(
this
);
QTimer
::
singleShot
(
1000
,
this
,
SLOT
(
checkAtLaunch
()));
}
...
...
@@ -136,8 +135,6 @@ UBApplicationController::~UBApplicationController()
delete
mBlackScene
;
delete
mMirror
;
if
(
mHttp
)
delete
mHttp
;
delete
(
mOpenSankoreImporter
);
mOpenSankoreImporter
=
NULL
;
}
...
...
@@ -478,85 +475,71 @@ void UBApplicationController::showDesktop(bool dontSwitchFrontProcess)
}
void
UBApplicationController
::
checkUpdate
(
QString
urlString
)
void
UBApplicationController
::
checkUpdate
(
const
QUrl
&
url
)
{
QUrl
jsonUrl
=
url
;
if
(
url
.
isEmpty
())
jsonUrl
=
UBSettings
::
settings
()
->
appSoftwareUpdateURL
->
get
().
toUrl
();
qDebug
()
<<
"Checking for update at url: "
<<
jsonUrl
.
toString
();
#if defined(QT_NO_DEBUG)
/*
if(mHttp)
mHttp->deleteLater();
QUrl url(urlString);
mHttp = new QHttpPart(url.host());
connect(mHttp, SIGNAL(requestFinished(int,bool)), this, SLOT(updateRequestFinished(int,bool)));
connect(mHttp, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(updateHeaderReceived(QHttpResponseHeader)));
mHttp->get(url.path());
*/
#else
if
(
mHttpreply
)
mHttpreply
->
deleteLater
();
QUrl
url
(
urlString
);
mHttpreply
=
qnam
.
get
(
QNetworkRequest
(
url
));
connect
(
mHttpreply
,
SIGNAL
(
requestFinished
(
int
,
bool
)),
this
,
SLOT
(
updateRequestFinished
(
int
,
bool
)));
connect
(
mHttpreply
,
SIGNAL
(
responseHeaderReceived
(
QHttpResponseHeader
)),
this
,
SLOT
(
updateHeaderReceived
(
QHttpResponseHeader
)));
// mHttpreply->setUrl(url.path());
//mHttp->get(url.path());
connect
(
mNetworkAccessManager
,
SIGNAL
(
finished
(
QNetworkReply
*
)),
this
,
SLOT
(
updateRequestFinished
(
QNetworkReply
*
)));
mNetworkAccessManager
->
get
(
QNetworkRequest
(
jsonUrl
));
#endif
}
/*
void UBApplicationController::updateHeaderReceived(QHttpResponseHeader header)
void
UBApplicationController
::
updateRequestFinished
(
QNetworkReply
*
reply
)
{
if
(header.statusCode() == 302 && header.hasKey("Location"))
{
mHttp->close
();
checkUpdate(header.value("Location"))
;
if
(
reply
->
error
())
{
qWarning
()
<<
"Error downloading update file: "
<<
reply
->
errorString
();
return
;
}
}
*/
void
UBApplicationController
::
updateHeaderReceived
(
QNetworkRequest
header
)
{
//if(header.attribute(QNetworkRequest::HttpStatusCodeAttribute) == 302 && header.header(QNetworkRequest::LocationHeader)){
// mHttp->close();
mHttpreply
->
close
();
//checkUpdate(header.value("Location"));
// }
}
// Check if we are being redirected. If so, call checkUpdate again
void
UBApplicationController
::
updateRequestFinished
(
int
id
,
bool
error
)
{
if
(
error
){
qWarning
()
<<
"http command id"
<<
id
<<
"return an error"
;
}
else
{
/* QString responseString = QString(mHttp->readAll());
qDebug() << responseString;
if (!responseString.isEmpty() && responseString.contains("version") && responseString.contains("url")){
mHttp->close();
mHttp->deleteLater();
mHttp = 0;
downloadJsonFinished(responseString);
}
*/
QString
responseString
=
QString
(
mHttpreply
->
readAll
());
qDebug
()
<<
responseString
;
if
(
!
responseString
.
isEmpty
()
&&
responseString
.
contains
(
"version"
)
&&
responseString
.
contains
(
"url"
)){
mHttpreply
->
close
();
mHttpreply
->
deleteLater
();
mHttpreply
=
0
;
downloadJsonFinished
(
responseString
);
}
}
}
QVariant
redirect_target
=
reply
->
attribute
(
QNetworkRequest
::
RedirectionTargetAttribute
);
if
(
!
redirect_target
.
isNull
())
{
// The returned URL might be relative. resolved() creates an absolute url from it
QUrl
redirect_url
(
reply
->
url
().
resolved
(
redirect_target
.
toUrl
()));
checkUpdate
(
redirect_url
);
return
;
}
// No error and no redirect => we read the whole response
QString
responseString
=
QString
(
reply
->
readAll
());
if
(
!
responseString
.
isEmpty
()
&&
responseString
.
contains
(
"version"
)
&&
responseString
.
contains
(
"url"
))
{
reply
->
close
();
reply
->
deleteLater
();
downloadJsonFinished
(
responseString
);
}
}
void
UBApplicationController
::
downloadJsonFinished
(
QString
currentJson
)
{
/*
The .json files simply specify the latest version number available, and
the URL to send the user to, so they can download it.
They look like:
{
"version": "1.3.5",
"url": "http://openboard.ch"
}
*/
QScriptValue
scriptValue
;
QScriptEngine
scriptEngine
;
scriptValue
=
scriptEngine
.
evaluate
(
"("
+
currentJson
+
")"
);
...
...
@@ -564,17 +547,18 @@ void UBApplicationController::downloadJsonFinished(QString currentJson)
UBVersion
installedVersion
(
qApp
->
applicationVersion
());
UBVersion
jsonVersion
(
scriptValue
.
property
(
"version"
).
toString
());
qDebug
()
<<
"json version: "
<<
jsonVersion
.
toUInt
();
qDebug
()
<<
"installed version: "
<<
installedVersion
.
toUInt
();
if
(
jsonVersion
>
installedVersion
)
{
if
(
UBApplication
::
mainWindow
->
yesNoQuestion
(
tr
(
"Update available"
),
tr
(
"New update available, would you go to the web page ?"
))){
QUrl
url
(
scriptValue
.
property
(
"url"
).
toString
());
QDesktopServices
::
openUrl
(
url
);
}
}
else
{
if
(
isNoUpdateDisplayed
)
{
mMainWindow
->
information
(
tr
(
"Update"
),
tr
(
"No update available"
));
if
(
UBApplication
::
mainWindow
->
yesNoQuestion
(
tr
(
"Update available"
),
tr
(
"New update available, would you go to the web page ?"
))){
QUrl
url
(
scriptValue
.
property
(
"url"
).
toString
());
QDesktopServices
::
openUrl
(
url
);
}
}
else
if
(
isNoUpdateDisplayed
)
{
mMainWindow
->
information
(
tr
(
"Update"
),
tr
(
"No update available"
));
}
}
void
UBApplicationController
::
checkAtLaunch
()
...
...
@@ -583,14 +567,14 @@ void UBApplicationController::checkAtLaunch()
if
(
UBSettings
::
settings
()
->
appEnableAutomaticSoftwareUpdates
->
get
().
toBool
()){
isNoUpdateDisplayed
=
false
;
//checkUpdate
();
checkUpdate
();
}
}
void
UBApplicationController
::
checkUpdateRequest
()
{
isNoUpdateDisplayed
=
true
;
//checkUpdate
();
checkUpdate
();
}
void
UBApplicationController
::
hideDesktop
()
...
...
src/core/UBApplicationController.h
View file @
b228a5c9
...
...
@@ -53,12 +53,8 @@ class UBVersion;
class
UBSoftwareUpdate
;
class
QNetworkAccessManager
;
class
QNetworkReply
;
class
QHttpPart
;
class
UBRightPalette
;
class
UBOpenSankoreImporter
;
class
QScriptValue
;
class
QScriptEngine
;
class
QNetworkReply
;
class
UBApplicationController
:
public
QObject
{
...
...
@@ -158,8 +154,8 @@ class UBApplicationController : public QObject
void
checkAtLaunch
();
private
slots
:
void
updateRequestFinished
(
int
id
,
bool
error
);
void
updateHeaderReceived
(
QNetworkRequest
header
);
void
updateRequestFinished
(
QNetworkReply
*
reply
);
protected
:
...
...
@@ -193,13 +189,10 @@ class UBApplicationController : public QObject
bool
mIsShowingDesktop
;
bool
isNoUpdateDisplayed
;
void
checkUpdate
(
QString
urlString
=
"http://get.openboard.org/update.json"
);
QNetworkAccessManager
*
n
etworkAccessManager
;
void
checkUpdate
(
const
QUrl
&
url
=
QUrl
()
);
QNetworkAccessManager
*
mN
etworkAccessManager
;
void
downloadJsonFinished
(
QString
updateString
);
QHttpPart
*
mHttp
;
QNetworkAccessManager
qnam
;
QNetworkReply
*
mHttpreply
;
};
#endif
/* UBAPPLICATIONCONTROLLER_H_ */
src/core/UBPreferencesController.cpp
View file @
b228a5c9
...
...
@@ -186,8 +186,6 @@ void UBPreferencesController::wire()
// about tab
connect
(
mPreferencesUI
->
checkSoftwareUpdateAtLaunchCheckBox
,
SIGNAL
(
clicked
(
bool
)),
settings
->
appEnableAutomaticSoftwareUpdates
,
SLOT
(
setBool
(
bool
)));
// As we (hopefully temporarily) don't have a website to check updates at, this setting is hidden for now
mPreferencesUI
->
softwareUpdateGroupBox
->
setVisible
(
false
);
connect
(
mPreferencesUI
->
checkOpenSankoreAtStartup
,
SIGNAL
(
clicked
(
bool
)),
settings
->
appLookForOpenSankoreInstall
,
SLOT
(
setBool
(
bool
)));
}
...
...
src/core/UBSettings.cpp
View file @
b228a5c9
...
...
@@ -225,7 +225,7 @@ void UBSettings::init()
appToolBarPositionedAtTop
=
new
UBSetting
(
this
,
"App"
,
"ToolBarPositionedAtTop"
,
true
);
appToolBarDisplayText
=
new
UBSetting
(
this
,
"App"
,
"ToolBarDisplayText"
,
true
);
appEnableAutomaticSoftwareUpdates
=
new
UBSetting
(
this
,
"App"
,
"EnableAutomaticSoftwareUpdates"
,
false
);
app
EnableSoftwareUpdates
=
new
UBSetting
(
this
,
"App"
,
"EnableSoftwareUpdates"
,
true
);
app
SoftwareUpdateURL
=
new
UBSetting
(
this
,
"App"
,
"SoftwareUpdateURL"
,
"http://www.openboard.ch/update.json"
);
appToolBarOrientationVertical
=
new
UBSetting
(
this
,
"App"
,
"ToolBarOrientationVertical"
,
false
);
appPreferredLanguage
=
new
UBSetting
(
this
,
"App"
,
"PreferredLanguage"
,
""
);
...
...
@@ -270,7 +270,7 @@ void UBSettings::init()
pageSize
=
new
UBSetting
(
this
,
"Board"
,
"DefaultPageSize"
,
documentSizes
.
value
(
DocumentSizeRatio
::
Ratio4_3
));
boardCrossColorDarkBackground
=
new
UBSetting
(
this
,
"Board"
,
"CrossColorDarkBackground"
,
"#C8
2C2C2C
"
);
boardCrossColorDarkBackground
=
new
UBSetting
(
this
,
"Board"
,
"CrossColorDarkBackground"
,
"#C8
C0C0C0
"
);
boardCrossColorLightBackground
=
new
UBSetting
(
this
,
"Board"
,
"CrossColorLightBackground"
,
"#A5E1FF"
);
QStringList
penLightBackgroundColors
;
...
...
src/core/UBSettings.h
View file @
b228a5c9
...
...
@@ -239,7 +239,7 @@ class UBSettings : public QObject
UBSetting
*
appToolBarPositionedAtTop
;
UBSetting
*
appToolBarDisplayText
;
UBSetting
*
appEnableAutomaticSoftwareUpdates
;
UBSetting
*
app
EnableSoftwareUpdates
;
UBSetting
*
app
SoftwareUpdateURL
;
UBSetting
*
appToolBarOrientationVertical
;
UBSetting
*
appPreferredLanguage
;
...
...
src/document/UBDocumentController.cpp
View file @
b228a5c9
...
...
@@ -546,37 +546,66 @@ void UBDocumentController::duplicateSelectedItem()
}
/**
* @brief
When deleting multiple documents, find a new document and select i
t
* @brief
Set the first document in the list as current documen
t
*
*
This method simply selects the first un-selected document
*
If there are no documents, a new one is created.
*/
void
UBDocumentController
::
select
ADocumentOnMultipleTrashing
()
void
UBDocumentController
::
select
FirstDocumentInList
()
{
// Loop through all folders
, and each document in those folders, until we find
// a
document that is not in the current selection (which is being deleted)
// Loop through all folders
until we find one that is not the trash and not empty,
// a
nd select the first document in that folder
for
(
int
i
(
0
);
i
<
mDocumentUI
->
documentTreeWidget
->
topLevelItemCount
();
++
i
)
{
QTreeWidgetItem
*
item
=
mDocumentUI
->
documentTreeWidget
->
topLevelItem
(
i
);
UBDocumentGroupTreeItem
*
groupItem
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
item
);
if
(
!
groupItem
->
isTrashFolder
())
{
for
(
int
j
(
0
);
j
<
groupItem
->
childCount
();
++
j
)
{
if
(
!
mCurrentSelection
.
contains
(
groupItem
->
child
(
j
)
))
{
selectDocument
(((
UBDocumentProxyTreeItem
*
)
groupItem
->
child
(
j
))
->
proxy
(),
true
);
return
;
}
}
if
(
!
groupItem
->
isTrashFolder
()
&&
groupItem
->
childCount
()
>
0
)
{
selectDocument
(((
UBDocumentProxyTreeItem
*
)
groupItem
->
child
(
0
))
->
proxy
(),
true
);
groupItem
->
child
(
0
)
->
setSelected
(
true
);
return
;
}
}
// No document found => create a new one
UBDocumentGroupTreeItem
*
topFolder
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
mDocumentUI
->
documentTreeWidget
->
topLevelItem
(
0
));
UBDocumentProxy
*
document
=
UBPersistenceManager
::
persistenceManager
()
->
createDocument
(
topFolder
->
groupName
());
selectDocument
(
document
,
true
);
}
/**
* @brief Find the current document, and select it in the list
*
* If selectNewCurrentDocument is true, the first document in the list is selected and set as
* current document.
*/
void
UBDocumentController
::
selectATreeItemOnMultipleTrashing
(
bool
selectNewCurrentDocument
)
{
mCurrentSelection
.
clear
();
if
(
selectNewCurrentDocument
)
{
selectFirstDocumentInList
();
return
;
}
// Find the currently selected document, and select its corresponding tree item
// If it isn't found, then the first document in the list is selected and set as current document
for
(
int
i
(
0
);
i
<
mDocumentUI
->
documentTreeWidget
->
topLevelItemCount
();
i
++
)
{
QTreeWidgetItem
*
item
=
mDocumentUI
->
documentTreeWidget
->
topLevelItem
(
i
);
UBDocumentGroupTreeItem
*
groupItem
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
item
);
if
(
!
groupItem
->
isTrashFolder
())
{
for
(
int
j
(
0
);
j
<
groupItem
->
childCount
();
j
++
)
{
if
(((
UBDocumentProxyTreeItem
*
)
groupItem
->
child
(
j
))
->
proxy
()
==
mBoardController
->
selectedDocument
())
{
((
UBDocumentProxyTreeItem
*
)
groupItem
->
child
(
j
))
->
setSelected
(
true
);
return
;
}
}
}
}
selectFirstDocumentInList
();
}
void
UBDocumentController
::
selectADocumentOnTrashingSelectedOne
(
UBDocumentGroupTreeItem
*
groupTi
,
UBDocumentProxyTreeItem
*
proxyTi
)
...
...
@@ -807,9 +836,9 @@ void UBDocumentController::deleteTreeItem(QTreeWidgetItem * item, bool showConfi
if
(
selectNewDocument
)
{
if
(
mTrashTi
->
childCount
()
==
0
)
select
Document
(
NULL
);
select
ATreeItemOnMultipleTrashing
(
false
);
else
selectDocument
(((
UBDocumentProxyTreeItem
*
)
mTrashTi
->
child
(
0
))
->
proxy
());
selectDocument
(((
UBDocumentProxyTreeItem
*
)
mTrashTi
->
child
(
0
))
->
proxy
()
,
false
);
}
reloadThumbnails
();
...
...
@@ -849,11 +878,18 @@ void UBDocumentController::deleteSelectedItem()
QList
<
QTreeWidgetItem
*>
foldersToDelete
;
bool
currentDocumentDeleted
=
false
;
foreach
(
QTreeWidgetItem
*
item
,
mCurrentSelection
)
{
LastSelectedElementType
type
=
itemType
(
item
);
if
(
type
==
Document
)
if
(
type
==
Document
)
{
deleteTreeItem
(
item
,
false
,
false
);
UBDocumentProxyTreeItem
*
proxyItem
=
dynamic_cast
<
UBDocumentProxyTreeItem
*>
(
item
);
if
(
proxyItem
&&
proxyItem
->
proxy
()
&&
(
proxyItem
->
proxy
()
==
mBoardController
->
selectedDocument
()))
currentDocumentDeleted
=
true
;
}
else
if
(
type
==
Folder
)
// Delete folders later, to avoid deleting a document twice
foldersToDelete
<<
item
;
...
...
@@ -863,7 +899,7 @@ void UBDocumentController::deleteSelectedItem()
deleteTreeItem
(
item
,
false
,
false
);
}
selectA
DocumentOnMultipleTrashing
(
);
selectA
TreeItemOnMultipleTrashing
(
currentDocumentDeleted
);
}
else
if
(
mSelectionType
==
Document
||
mSelectionType
==
Folder
)
{
...
...
src/document/UBDocumentController.h
View file @
b228a5c9
...
...
@@ -130,7 +130,8 @@ class UBDocumentController : public UBDocumentContainer
QString
mDefaultDocumentGroupName
;
void
selectADocumentOnTrashingSelectedOne
(
UBDocumentGroupTreeItem
*
groupTi
,
UBDocumentProxyTreeItem
*
proxyTi
);
void
selectADocumentOnMultipleTrashing
();
void
selectFirstDocumentInList
();
void
selectATreeItemOnMultipleTrashing
(
bool
selectNewCurrentDocument
=
false
);
void
moveDocumentToTrash
(
UBDocumentGroupTreeItem
*
groupTi
,
UBDocumentProxyTreeItem
*
proxyTi
,
bool
selectNewDocument
);
void
moveFolderToTrash
(
UBDocumentGroupTreeItem
*
groupTi
);
void
emptyTrash
(
bool
showConfirmationDialog
);
...
...
src/domain/UBGraphicsItemUndoCommand.cpp
View file @
b228a5c9
...
...
@@ -98,7 +98,28 @@ void UBGraphicsItemUndoCommand::undo()
UBApplication
::
boardController
->
freezeW3CWidget
(
item
,
true
);
item
->
setSelected
(
false
);
QTransform
t
;
bool
bApplyTransform
=
false
;
UBGraphicsPolygonItem
*
polygonItem
=
qgraphicsitem_cast
<
UBGraphicsPolygonItem
*>
(
item
);
if
(
polygonItem
){
if
(
polygonItem
->
strokesGroup
()
&&
polygonItem
->
strokesGroup
()
->
parentItem
()
&&
UBGraphicsGroupContainerItem
::
Type
==
polygonItem
->
strokesGroup
()
->
parentItem
()
->
type
())
{
bApplyTransform
=
true
;
t
=
polygonItem
->
sceneTransform
();
}
else
if
(
polygonItem
->
strokesGroup
())
polygonItem
->
resetTransform
();
polygonItem
->
strokesGroup
()
->
removeFromGroup
(
polygonItem
);
}
mScene
->
removeItem
(
item
);
if
(
bApplyTransform
)
polygonItem
->
setTransform
(
t
);
}
QSetIterator
<
QGraphicsItem
*>
itRemoved
(
mRemovedItems
);
...
...
@@ -207,7 +228,29 @@ void UBGraphicsItemUndoCommand::redo()
{
QGraphicsItem
*
item
=
itRemoved
.
next
();
item
->
setSelected
(
false
);
QTransform
t
;
bool
bApplyTransform
=
false
;
UBGraphicsPolygonItem
*
polygonItem
=
qgraphicsitem_cast
<
UBGraphicsPolygonItem
*>
(
item
);
if
(
polygonItem
){
if
(
polygonItem
->
strokesGroup
()
&&
polygonItem
->
strokesGroup
()
->
parentItem
()
&&
UBGraphicsGroupContainerItem
::
Type
==
polygonItem
->
strokesGroup
()
->
parentItem
()
->
type
())
{
bApplyTransform
=
true
;
t
=
polygonItem
->
sceneTransform
();
}
else
if
(
polygonItem
->
strokesGroup
())
polygonItem
->
resetTransform
();
polygonItem
->
strokesGroup
()
->
removeFromGroup
(
polygonItem
);
}
mScene
->
removeItem
(
item
);
if
(
bApplyTransform
)
item
->
setTransform
(
t
);
UBApplication
::
boardController
->
freezeW3CWidget
(
item
,
true
);
}
...
...
src/domain/UBGraphicsMediaItem.cpp
View file @
b228a5c9
...
...
@@ -130,7 +130,14 @@ UBGraphicsVideoItem::UBGraphicsVideoItem(const QUrl &pMediaFileUrl, QGraphicsIte
mVideoItem
->
setData
(
UBGraphicsItemData
::
ItemLayerType
,
UBItemLayerType
::
Object
);
mVideoItem
->
setFlag
(
ItemStacksBehindParent
,
true
);
mMediaObject
->
setVideoOutput
(
mVideoItem
);
/* setVideoOutput has to be called only when the video item is visible on the screen,
* due to a Qt bug (QTBUG-32522). So instead of calling it here, it is called when the
* active scene has changed, or when the item is first created.
* If and when Qt fix this issue, this should be changed back.
* */
//mMediaObject->setVideoOutput(mVideoItem);
mHasVideoOutput
=
false
;
mMediaObject
->
setNotifyInterval
(
50
);
setMinimumSize
(
QSize
(
320
,
240
));
...
...
@@ -155,8 +162,10 @@ UBGraphicsVideoItem::UBGraphicsVideoItem(const QUrl &pMediaFileUrl, QGraphicsIte
UBGraphicsMediaItem
::~
UBGraphicsMediaItem
()
{
if
(
mMediaObject
)
if
(
mMediaObject
)
{
mMediaObject
->
stop
();
delete
mMediaObject
;
}
}
QVariant
UBGraphicsMediaItem
::
itemChange
(
GraphicsItemChange
change
,
const
QVariant
&
value
)
...
...
@@ -569,6 +578,22 @@ void UBGraphicsVideoItem::paint(QPainter *painter, const QStyleOptionGraphicsIte
}
QVariant
UBGraphicsVideoItem
::
itemChange
(
GraphicsItemChange
change
,
const
QVariant
&
value
)
{
if
(
change
==
QGraphicsItem
::
ItemVisibleChange
&&
value
.
toBool
()
&&
!
mHasVideoOutput
&&
UBApplication
::
app
()
->
boardController
&&
UBApplication
::
app
()
->
boardController
->
activeScene
()
==
scene
())
{
//qDebug() << "Item change, setting video output";
mMediaObject
->
setVideoOutput
(
mVideoItem
);
mHasVideoOutput
=
true
;
}
return
UBGraphicsMediaItem
::
itemChange
(
change
,
value
);
}
void
UBGraphicsVideoItem
::
hoverEnterEvent
(
QGraphicsSceneHoverEvent
*
event
)
{
// Display the seek bar
...
...
@@ -610,9 +635,19 @@ void UBGraphicsVideoItem::mediaStateChanged(QMediaPlayer::State state)
void
UBGraphicsVideoItem
::
activeSceneChanged
()
{
//qDebug() << "Active scene changed";
// Update the visibility of the placeholder, to prevent it being hidden when switching pages
setPlaceholderVisible
(
!
mErrorString
.
isEmpty
());
// Call setVideoOutput, if the video is visible and if it hasn't been called already
if
(
!
mHasVideoOutput
&&
UBApplication
::
boardController
->
activeScene
()
==
scene
())
{
//qDebug() << "setting video output";
mMediaObject
->
setMedia
(
mMediaFileUrl
);
mMediaObject
->
setVideoOutput
(
mVideoItem
);
mHasVideoOutput
=
true
;
}
UBGraphicsMediaItem
::
activeSceneChanged
();
}
...
...
src/domain/UBGraphicsMediaItem.h
View file @
b228a5c9
...
...
@@ -207,11 +207,14 @@ protected:
QGraphicsVideoItem
*
mVideoItem
;
virtual
QVariant
itemChange
(
GraphicsItemChange
change
,
const
QVariant
&
value
);
virtual
void
hoverEnterEvent
(
QGraphicsSceneHoverEvent
*
event
);
virtual
void
hoverMoveEvent
(
QGraphicsSceneHoverEvent
*
event
);
virtual
void
hoverLeaveEvent
(
QGraphicsSceneHoverEvent
*
event
);
void
setPlaceholderVisible
(
bool
visible
);
bool
mHasVideoOutput
;
};
...
...
src/domain/UBGraphicsPolygonItem.h
View file @
b228a5c9
...
...
@@ -109,6 +109,8 @@ class UBGraphicsPolygonItem : public QGraphicsPolygonItem, public UBItem
qreal
originalWidth
()
{
return
mOriginalWidth
;}
bool
isNominalLine
()
{
return
mIsNominalLine
;}
void
setNominalLine
(
bool
isNominalLine
)
{
mIsNominalLine
=
isNominalLine
;
}
QColor
colorOnDarkBackground
()
const
{
return
mColorOnDarkBackground
;
...
...
src/domain/UBGraphicsScene.cpp
View file @
b228a5c9
...
...
@@ -893,6 +893,7 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
UBGraphicsPolygonItem
*
polygonItem
=
new
UBGraphicsPolygonItem
(
intersectedPolygons
[
i
][
j
],
intersectedPolygonItem
->
parentItem
());
intersectedPolygonItem
->
copyItemParameters
(
polygonItem
);
polygonItem
->
setNominalLine
(
false
);
polygonItem
->
setStroke
(
intersectedPolygonItem
->
stroke
());
polygonItem
->
setStrokesGroup
(
intersectedPolygonItem
->
strokesGroup
());
intersectedPolygonItem
->
strokesGroup
()
->
addToGroup
(
polygonItem
);
...
...
@@ -2209,15 +2210,19 @@ QList<QUrl> UBGraphicsScene::relativeDependencies() const
while
(
itItems
.
hasNext
())
{
QGraphicsItem
*
item
=
itItems
.
next
();
UBGraphicsMediaItem
*
mediaItem
=
qgraphicsitem_cast
<
UBGraphicsMediaItem
*>
(
item
);
if
(
mediaItem
){
QString
completeFileName
=
QFileInfo
(
mediaItem
->
mediaFileUrl
().
toLocalFile
()).
fileName
();
QString
path
;
if
(
mediaItem
->
getMediaType
()
==
UBGraphicsMediaItem
::
mediaType_Video
)
path
=
UBPersistenceManager
::
videoDirectory
+
"/"
;
else
path
=
UBPersistenceManager
::
audioDirectory
+
"/"
;
UBGraphicsVideoItem
*
videoItem
=
qgraphicsitem_cast
<
UBGraphicsVideoItem
*>
(
item
);
if
(
videoItem
){
QString
completeFileName
=
QFileInfo
(
videoItem
->
mediaFileUrl
().
toLocalFile
()).
fileName
();
QString
path
=
UBPersistenceManager
::
videoDirectory
+
"/"
;
relativePathes
<<
QUrl
(
path
+
completeFileName
);
continue
;
}
UBGraphicsAudioItem
*
audioItem
=
qgraphicsitem_cast
<
UBGraphicsAudioItem
*>
(
item
);
if
(
audioItem
){
QString
completeFileName
=
QFileInfo
(
audioItem
->
mediaFileUrl
().
toLocalFile
()).
fileName
();
QString
path
=
UBPersistenceManager
::
audioDirectory
+
"/"
;
relativePathes
<<
QUrl
(
path
+
completeFileName
);
continue
;
}
...
...
@@ -2257,6 +2262,24 @@ QSize UBGraphicsScene::nominalSize()
return
mNominalSize
;
}
/**
* @brief Return the scene's boundary size, including any background item
*
* If no background item is present, this returns nominalSize()
*/
QSize
UBGraphicsScene
::
sceneSize
()
{
UBGraphicsPDFItem
*
pdfItem
=
qgraphicsitem_cast
<
UBGraphicsPDFItem
*>
(
backgroundObject
());
if
(
pdfItem
)
{
QRectF
targetRect
=
pdfItem
->
sceneBoundingRect
();
return
targetRect
.
size
().
toSize
();
}
else
return
nominalSize
();
}
void
UBGraphicsScene
::
setNominalSize
(
const
QSize
&
pSize
)
{
if
(
nominalSize
()
!=
pSize
)
...
...
src/domain/UBGraphicsScene.h
View file @
b228a5c9
...
...
@@ -277,6 +277,8 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
QSize
nominalSize
();
QSize
sceneSize
();
void
setNominalSize
(
const
QSize
&
pSize
);
void
setNominalSize
(
int
pWidth
,
int
pHeight
);
...
...
src/domain/UBGraphicsStroke.cpp
View file @
b228a5c9
...
...
@@ -75,9 +75,10 @@ bool UBGraphicsStroke::hasPressure()
if
(
!
pol
->
isNominalLine
()
||
pol
->
originalWidth
()
!=
nominalWidth
)
return
true
;
}
return
false
;
}
return
fals
e
;
return
tru
e
;
}
...
...
src/domain/UBGraphicsStrokesGroup.cpp
View file @
b228a5c9
...
...
@@ -148,12 +148,15 @@ void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
UBItem
*
UBGraphicsStrokesGroup
::
deepCopy
()
const
{
QTransform
groupTransform
=
transform
();
QPointF
groupPos
=
pos
();
UBGraphicsStrokesGroup
*
copy
=
new
UBGraphicsStrokesGroup
();
copyItemParameters
(
copy
);
copy
->
resetTransform
();
copy
->
setPos
(
0
,
0
);
const_cast
<
UBGraphicsStrokesGroup
*>
(
this
)
->
resetTransform
();
const_cast
<
UBGraphicsStrokesGroup
*>
(
this
)
->
setPos
(
0
,
0
);
QList
<
QGraphicsItem
*>
chl
=
childItems
();
...
...
@@ -175,7 +178,9 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const
}
}
const_cast
<
UBGraphicsStrokesGroup
*>
(
this
)
->
setTransform
(
groupTransform
);
const_cast
<
UBGraphicsStrokesGroup
*>
(
this
)
->
setPos
(
groupPos
);
copy
->
setTransform
(
groupTransform
);
copy
->
setPos
(
groupPos
);
return
copy
;
}
...
...
src/domain/UBGraphicsTextItemDelegate.cpp
View file @
b228a5c9
...
...
@@ -339,7 +339,10 @@ void UBGraphicsTextItemDelegate::pickFont()
curCursor
.
mergeCharFormat
(
format
);
delegated
()
->
setTextCursor
(
curCursor
);
delegated
()
->
setFont
(
selectedFont
);
if
(
curCursor
.
selectedText
().
length
()
==
0
)
delegated
()
->
setFont
(
selectedFont
);
delegated
()
->
setSelected
(
true
);
delegated
()
->
document
()
->
adjustSize
();
delegated
()
->
contentsChanged
();
...
...
src/domain/UBSelectionFrame.cpp
View file @
b228a5c9
...
...
@@ -111,9 +111,15 @@ void UBSelectionFrame::setEnclosedItems(const QList<QGraphicsItem*> pGraphicsIte
QRegion
resultRegion
;
UBGraphicsFlags
resultFlags
;
mEnclosedtems
.
clear
();
// If at least one of the enclosed items is locked, the entire selection is
// considered to be locked.
mIsLocked
=
false
;
foreach
(
QGraphicsItem
*
nextItem
,
pGraphicsItems
)
{
UBGraphicsItemDelegate
*
nextDelegate
=
UBGraphicsItem
::
Delegate
(
nextItem
);
if
(
nextDelegate
)
{
mIsLocked
=
(
mIsLocked
||
nextDelegate
->
isLocked
());
mEnclosedtems
.
append
(
nextDelegate
);
resultRegion
|=
nextItem
->
boundingRegion
(
nextItem
->
sceneTransform
());
resultFlags
|=
nextDelegate
->
ubflags
();
...
...
@@ -129,6 +135,14 @@ void UBSelectionFrame::setEnclosedItems(const QList<QGraphicsItem*> pGraphicsIte
if
(
resultRect
.
isEmpty
())
{
hide
();
}
if
(
mIsLocked
)
{
QColor
baseColor
=
UBSettings
::
paletteColor
;
baseColor
.
setAlphaF
(
baseColor
.
alphaF
()
/
3
);
setLocalBrush
(
QBrush
(
baseColor
));
}
else
setLocalBrush
(
QBrush
(
UBSettings
::
paletteColor
));
}
void
UBSelectionFrame
::
updateRect
()
...
...
@@ -168,6 +182,9 @@ void UBSelectionFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
void
UBSelectionFrame
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
if
(
mIsLocked
)
return
;
QPointF
dp
=
event
->
pos
()
-
mPressedPos
;
QPointF
rotCenter
=
mapToScene
(
rect
().
center
());
...
...
src/domain/UBSelectionFrame.h
View file @
b228a5c9
...
...
@@ -103,6 +103,8 @@ private:
QPointF
mLastTranslateOffset
;
qreal
mRotationAngle
;
bool
mIsLocked
;
QList
<
DelegateButton
*>
mButtons
;
DelegateButton
*
mDeleteButton
;
...
...
src/frameworks/UBVersion.cpp
View file @
b228a5c9
...
...
@@ -42,21 +42,32 @@ UBVersion::UBVersion(const QString &string)
uint
UBVersion
::
toUInt
()
const
{
/* Based on semantic versioning, version numbers look like:
* Major.Minor.Patch-Type.Build
*
* To compare version numbers, the string is split into each part, and they are multiplied
* to give a number where the first two digits are the Major version, the next two are the
* Minor version, and so on.
*
* i.e if Major, Minor etc. are named A, B, C, D, E, the number will look like:
* AABBCCDDEE
*/
uint
result
=
0
;
QStringList
list
=
mString
.
split
(
"."
);
QStringList
list
=
mString
.
split
(
QRegExp
(
"[-
\\
.]"
)
);
switch
(
list
.
count
())
{
case
2
:
//short version 1.0
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
)
+
(
list
.
at
(
1
).
toUInt
()
*
1
0000
)
+
(
Release
*
100
);
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
00
)
+
(
list
.
at
(
1
).
toUInt
()
*
100
0000
)
+
(
Release
*
100
);
break
;
case
3
:
//release version 1.0.0
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
)
+
(
list
.
at
(
1
).
toUInt
()
*
10000
)
+
(
Release
*
100
)
+
list
.
at
(
2
).
toUInt
(
);
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
00
)
+
(
list
.
at
(
1
).
toUInt
()
*
1000000
)
+
list
.
at
(
2
).
toUInt
()
*
10000
+
(
Release
*
100
);
break
;
case
4
:{
//standard version 1.0.
a/b/r
.0
uint
releaseStage
=
list
.
at
(
2
).
startsWith
(
"a"
)
?
Alpha
:
(
list
.
at
(
2
).
startsWith
(
"b"
)
?
Beta
:
ReleaseCandidate
);
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
)
+
(
list
.
at
(
1
).
toUInt
()
*
10000
)
+
(
releaseStage
*
100
)
+
list
.
at
(
3
).
toUInt
();
case
5
:{
//standard version 1.0.
0.a/b/rc
.0
uint
releaseStage
=
list
.
at
(
3
).
startsWith
(
"a"
)
?
Alpha
:
(
list
.
at
(
3
).
startsWith
(
"b"
)
?
Beta
:
ReleaseCandidate
);
result
=
(
list
.
at
(
0
).
toUInt
()
*
1000000
00
)
+
(
list
.
at
(
1
).
toUInt
()
*
1000000
)
+
(
list
.
at
(
2
).
toUInt
()
*
10000
)
+
(
releaseStage
*
100
)
+
list
.
at
(
4
).
toUInt
();
break
;
}
default
:
...
...
src/gui/UBDocumentTreeWidget.cpp
View file @
b228a5c9
...
...
@@ -285,13 +285,16 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
QString
source
=
scene
->
document
()
->
persistencePath
()
+
"/"
+
relativeFile
.
toString
();
QString
target
=
targetDocProxy
->
persistencePath
()
+
"/"
+
relativeFile
.
toString
();
QString
sourceDecoded
=
scene
->
document
()
->
persistencePath
()
+
"/"
+
relativeFile
.
toString
(
QUrl
::
DecodeReserved
);
QString
targetDecoded
=
targetDocProxy
->
persistencePath
()
+
"/"
+
relativeFile
.
toString
(
QUrl
::
DecodeReserved
);
if
(
QFileInfo
(
source
).
isDir
())
UBFileSystemUtils
::
copyDir
(
source
,
target
);
else
{
QFileInfo
fi
(
target
);
QFileInfo
fi
(
target
Decoded
);
QDir
d
=
fi
.
dir
();
d
.
mkpath
(
d
.
absolutePath
());
QFile
::
copy
(
source
,
target
);
QFile
::
copy
(
source
Decoded
,
targetDecoded
);
}
}
...
...
src/tools/UBGraphicsCompass.cpp
View file @
b228a5c9
...
...
@@ -308,6 +308,7 @@ void UBGraphicsCompass::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
updateResizeCursor
();
updateDrawCursor
();
mDrewCenterCross
=
false
;
event
->
accept
();
}
else
if
(
closeButtonRect
().
contains
(
event
->
pos
()))
...
...
src/tools/UBGraphicsCurtainItemDelegate.cpp
View file @
b228a5c9
...
...
@@ -38,7 +38,7 @@
#include "core/memcheck.h"
UBGraphicsCurtainItemDelegate
::
UBGraphicsCurtainItemDelegate
(
UBGraphicsCurtainItem
*
pDelegated
,
QObject
*
parent
)
:
UBGraphicsItemDelegate
(
pDelegated
,
parent
,
GF_
SCALABLE_ALL_AXIS
|
GF_
MENU_SPECIFIED
)
:
UBGraphicsItemDelegate
(
pDelegated
,
parent
,
GF_MENU_SPECIFIED
)
{
//NOOP
}
...
...
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