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
8 years ago
by
Craig Watson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' (1.3.6 release)
parents
00ab81e3
87eaa529
Changes
29
Show 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
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
>
...
...
This diff is collapsed.
Click to expand it.
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,14 +68,14 @@ 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
();
...
...
@@ -85,37 +87,48 @@ bool UBExportPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QStrin
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
);
// Call begin only once
if
(
painterNeedsBegin
)
painterNeedsBegin
=
!
pdfPainter
.
begin
(
&
pdfWriter
);
if
(
pageIndex
<
existingPageCount
-
1
)
pdfPrinter
.
newPage
();
else
if
(
pageIndex
<
existingPageCount
)
pdfWriter
.
newPage
();
//restore screen rendering quality
// 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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
->
addSeparator
();
#ifndef Q_OS_LINUX // No Podcast on Linux yet
...
...
This diff is collapsed.
Click to expand it.
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)));
connect
(
mNetworkAccessManager
,
SIGNAL
(
finished
(
QNetworkReply
*
)),
this
,
SLOT
(
updateRequestFinished
(
QNetworkReply
*
)));
m
Http->get(url.path(
));
m
NetworkAccessManager
->
get
(
QNetworkRequest
(
jsonUrl
));
*/
}
#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());
#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);
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
;
}
*/
QString
responseString
=
QString
(
mHttpreply
->
readAll
());
qDebug
()
<<
responseString
;
if
(
!
responseString
.
isEmpty
()
&&
responseString
.
contains
(
"version"
)
&&
responseString
.
contains
(
"url"
)){
mHttpreply
->
close
();
mHttpreply
->
deleteLater
();
mHttpreply
=
0
;
// 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
);
QUrl
url
(
scriptValue
.
property
(
"url"
).
toString
());
QDesktopServices
::
openUrl
(
url
);
}
}
else
{
if
(
isNoUpdateDisplayed
)
{
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
()
...
...
This diff is collapsed.
Click to expand it.
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_ */
This diff is collapsed.
Click to expand it.
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
)));
}
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
);
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
)
{
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
);
}
...
...
This diff is collapsed.
Click to expand it.
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
();
}
...
...
This diff is collapsed.
Click to expand it.
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
;
};
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
)
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
src/domain/UBGraphicsTextItemDelegate.cpp
View file @
b228a5c9
...
...
@@ -339,7 +339,10 @@ void UBGraphicsTextItemDelegate::pickFont()
curCursor
.
mergeCharFormat
(
format
);
delegated
()
->
setTextCursor
(
curCursor
);
if
(
curCursor
.
selectedText
().
length
()
==
0
)
delegated
()
->
setFont
(
selectedFont
);
delegated
()
->
setSelected
(
true
);
delegated
()
->
document
()
->
adjustSize
();
delegated
()
->
contentsChanged
();
...
...
This diff is collapsed.
Click to expand it.
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
());
...
...
This diff is collapsed.
Click to expand it.
src/domain/UBSelectionFrame.h
View file @
b228a5c9
...
...
@@ -103,6 +103,8 @@ private:
QPointF
mLastTranslateOffset
;
qreal
mRotationAngle
;
bool
mIsLocked
;
QList
<
DelegateButton
*>
mButtons
;
DelegateButton
*
mDeleteButton
;
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
);
}
}
...
...
This diff is collapsed.
Click to expand it.
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
()))
...
...
This diff is collapsed.
Click to expand it.
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
}
...
...
This diff is collapsed.
Click to expand it.
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