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
be45f656
Commit
be45f656
authored
Mar 04, 2017
by
Craig Watson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' into 1.4-dev
parents
a4b83e2c
3d46bd0b
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
3816 additions
and
370 deletions
+3816
-370
OpenBoard.iss
release_scripts/windows/OpenBoard.iss
+1
-1
OpenBoard_de.ts
resources/i18n/OpenBoard_de.ts
+99
-95
OpenBoard_eu.ts
resources/i18n/OpenBoard_eu.ts
+3187
-0
UBSvgSubsetAdaptor.cpp
src/adaptors/UBSvgSubsetAdaptor.cpp
+46
-12
UBSvgSubsetAdaptor.h
src/adaptors/UBSvgSubsetAdaptor.h
+2
-0
UBBoardView.cpp
src/board/UBBoardView.cpp
+11
-3
UBApplicationController.cpp
src/core/UBApplicationController.cpp
+62
-79
UBApplicationController.h
src/core/UBApplicationController.h
+4
-11
UBOpenSankoreImporter.cpp
src/core/UBOpenSankoreImporter.cpp
+3
-5
UBPersistenceManager.cpp
src/core/UBPersistenceManager.cpp
+15
-10
UBPersistenceManager.h
src/core/UBPersistenceManager.h
+3
-1
UBSettings.cpp
src/core/UBSettings.cpp
+5
-3
UBSettings.h
src/core/UBSettings.h
+4
-2
UBDesktopAnnotationController.cpp
src/desktop/UBDesktopAnnotationController.cpp
+4
-1
UBDocumentController.cpp
src/document/UBDocumentController.cpp
+6
-4
UBDocumentController.h
src/document/UBDocumentController.h
+2
-1
UBGraphicsGroupContainerItem.cpp
src/domain/UBGraphicsGroupContainerItem.cpp
+4
-1
UBGraphicsMediaItem.cpp
src/domain/UBGraphicsMediaItem.cpp
+6
-0
UBGraphicsMediaItem.h
src/domain/UBGraphicsMediaItem.h
+1
-0
UBGraphicsScene.cpp
src/domain/UBGraphicsScene.cpp
+11
-4
UBGraphicsStrokesGroup.cpp
src/domain/UBGraphicsStrokesGroup.cpp
+7
-4
UBGraphicsTextItem.cpp
src/domain/UBGraphicsTextItem.cpp
+39
-2
UBGraphicsTextItem.h
src/domain/UBGraphicsTextItem.h
+2
-0
UBGraphicsTextItemDelegate.cpp
src/domain/UBGraphicsTextItemDelegate.cpp
+28
-0
UBGraphicsTextItemDelegate.h
src/domain/UBGraphicsTextItemDelegate.h
+1
-0
UBSelectionFrame.cpp
src/domain/UBSelectionFrame.cpp
+17
-0
UBSelectionFrame.h
src/domain/UBSelectionFrame.h
+2
-0
UBGeometryUtils.cpp
src/frameworks/UBGeometryUtils.cpp
+1
-1
UBVersion.cpp
src/frameworks/UBVersion.cpp
+18
-7
UBDocumentTreeWidget.cpp
src/gui/UBDocumentTreeWidget.cpp
+80
-59
UBDocumentTreeWidget.h
src/gui/UBDocumentTreeWidget.h
+2
-0
UBGraphicsCompass.h
src/tools/UBGraphicsCompass.h
+11
-11
UBGraphicsProtractor.cpp
src/tools/UBGraphicsProtractor.cpp
+8
-5
UBGraphicsProtractor.h
src/tools/UBGraphicsProtractor.h
+1
-0
UBGraphicsTriangle.cpp
src/tools/UBGraphicsTriangle.cpp
+116
-45
UBGraphicsTriangle.h
src/tools/UBGraphicsTriangle.h
+7
-3
No files found.
release_scripts/windows/OpenBoard.iss
View file @
be45f656
...
...
@@ -119,7 +119,7 @@ Source: "{#QtDir}\plugins\mediaservice\wmfengine.dll"; DestDir: "{app}\mediaserv
Source: "{#QtDir}\plugins\mediaservice\wmfengined.dll"; DestDir: "{app}\mediaservice"; Flags: ignoreversion
;OpenBoardImporter
Source: "{#ProjectRoot}\..\OpenBoard-Importer\release\OpenBoardImporter.exe"; DestDir: "{app}
\Importer
"; Flags: ignoreversion
Source: "{#ProjectRoot}\..\OpenBoard-Importer\release\OpenBoardImporter.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#QtLibs}\Qt5Core.dll"; DestDir: "{app}"
Source: "{#QtLibs}\Qt5Gui.dll"; DestDir: "{app}"
...
...
resources/i18n/OpenBoard_de.ts
View file @
be45f656
...
...
@@ -169,7 +169,7 @@
<
/message
>
<
message
>
<
source
>
Quit
<
/source
>
<
translation
>
Verlass
en
<
/translation
>
<
translation
>
Beend
en
<
/translation
>
<
/message
>
<
message
>
<
source
>
Eraser
<
/source
>
...
...
@@ -409,7 +409,7 @@
<
/message
>
<
message
>
<
source
>
Multi
Screen
<
/source
>
<
translation
>
Geteilter
Bildschirm
<
/translation
>
<
translation
>
Mehrere
Bildschirme
<
/translation
>
<
/message
>
<
message
>
<
source
>
Wide
Size
(
16
/
9
)
<
/source
>
...
...
@@ -477,7 +477,7 @@
<
/message
>
<
message
>
<
source
>
Light
<
/source
>
<
translation
>
Licht
<
/translation
>
<
translation
>
Hell
<
/translation
>
<
/message
>
<
message
>
<
source
>
Grid
Light
Background
<
/source
>
...
...
@@ -561,7 +561,7 @@
<
/message
>
<
message
>
<
source
>
Highlight
<
/source
>
<
translation
>
H
ighlight
<
/translation
>
<
translation
>
H
ervorheben
<
/translation
>
<
/message
>
<
message
>
<
source
>
Ctrl
+
M
<
/source
>
...
...
@@ -569,7 +569,7 @@
<
/message
>
<
message
>
<
source
>
Selector
<
/source
>
<
translation
>
Selector
<
/translation
>
<
translation
>
Auswahl
<
/translation
>
<
/message
>
<
message
>
<
source
>
Select
And
Modify
Objects
<
/source
>
...
...
@@ -697,7 +697,7 @@
<
/message
>
<
message
>
<
source
>
Flash
Trap
<
/source
>
<
translation
>
Falle
einblend
en
<
/translation
>
<
translation
>
Einblendung
einfang
en
<
/translation
>
<
/message
>
<
message
>
<
source
>
Trap
Flash
Content
<
/source
>
...
...
@@ -705,7 +705,7 @@
<
/message
>
<
message
>
<
source
>
Web
Trap
<
/source
>
<
translation
>
Webfalle
<
/translation
>
<
translation
>
Internet
einfangen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Trap
Web
Content
<
/source
>
...
...
@@ -793,11 +793,11 @@
<
/message
>
<
message
>
<
source
>
Open
Tutorial
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Anleitung
ö
ffnen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Open
the
tutorial
web
page
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Ö
ffnen
der
Anleitung
im
Internet
<
/translation
>
<
/message
>
<
message
>
<
source
>
Ruled
Light
Background
<
/source
>
...
...
@@ -862,7 +862,7 @@
<
/message
>
<
message
>
<
source
>
Are
you
sure
you
want
to
remove
1
page
from
the
selected
document
&
apos
;
%
0
&
apos
;?
<
/source
>
<
translation
type
=
"unfinished"
>
Wollen
Sie
wirklich
1
Seite
des
gew
ä
hlten
Dokuments
&
apos
;
%
0
&
apos
;
entfernen
?
<
/translation
>
<
translation
>
Wollen
Sie
wirklich
die
ausgew
ä
hlte
Seite
des
Dokuments
&
apos
;
%
0
&
apos
;
entfernen
?
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -884,19 +884,19 @@
<
/message
>
<
message
>
<
source
>
New
update
available
,
would
you
go
to
the
web
page
?
<
/source
>
<
translation
>
Neue
s
Update
verf
ü
gbar
,
m
ö
chten
Sie
auf
die
Web
seite
gehen
?
<
/translation
>
<
translation
>
Neue
Aktualisierung
verf
ü
gbar
,
m
ö
chten
Sie
auf
die
Internet
seite
gehen
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
No
update
available
<
/source
>
<
translation
>
Kein
Update
verf
ü
gbar
<
/translation
>
<
translation
>
Kein
e
Aktualisierung
verf
ü
gbar
<
/translation
>
<
/message
>
<
message
>
<
source
>
Update
available
<
/source
>
<
translation
>
Update
verf
ü
gbar
<
/translation
>
<
translation
>
Aktualisierung
verf
ü
gbar
<
/translation
>
<
/message
>
<
message
>
<
source
>
Update
<
/source
>
<
translation
>
Update
<
/translation
>
<
translation
>
Aktualisierung
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -910,11 +910,11 @@
<
name
>
UBBoardController
<
/name
>
<
message
>
<
source
>
Downloading
content
%
1
failed
<
/source
>
<
translation
>
Fehler
beim
Download
von
%
1
<
/translation
>
<
translation
>
Fehler
beim
Herunterladen
von
%
1
<
/translation
>
<
/message
>
<
message
>
<
source
>
Download
finished
<
/source
>
<
translation
>
Download
beendet
<
/translation
>
<
translation
>
Herunterladen
beendet
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unknown
tool
type
%
1
<
/source
>
...
...
@@ -934,11 +934,11 @@
<
/message
>
<
message
>
<
source
>
Delete
page
%
1
from
document
<
/source
>
<
translation
type
=
"unfinished"
>
Seite
%
1
des
Dokuments
l
ö
schen
<
/translation
>
<
translation
>
Seite
%
1
des
Dokuments
l
ö
schen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Page
%
1
deleted
<
/source
>
<
translation
type
=
"unfinished"
>
Seite
%
1
gel
ö
scht
<
/translation
>
<
translation
>
Seite
%
1
gel
ö
scht
<
/translation
>
<
/message
>
<
message
>
<
source
>
Add
file
operation
failed
:
file
copying
error
<
/source
>
...
...
@@ -954,11 +954,11 @@
<
/message
>
<
message
>
<
source
>
Saving
document
...
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Dokument
wird
gespeichert
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Document
has
just
been
saved
...
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Dokument
wurde
gespeichert
...
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1019,7 +1019,7 @@
<
/message
>
<
message
>
<
source
>
Show
OpenBoard
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Zeige
OpenBoard
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1046,7 +1046,7 @@
<
/message
>
<
message
>
<
source
>
Duplicating
Document
%
1
<
/source
>
<
translation
>
Dokument
%
1
wird
kop
iert
<
/translation
>
<
translation
>
Dokument
%
1
wird
dupliz
iert
<
/translation
>
<
/message
>
<
message
>
<
source
>
Document
%
1
copied
<
/source
>
...
...
@@ -1066,7 +1066,7 @@
<
/message
>
<
message
>
<
source
>
Empty
Trash
<
/source
>
<
translation
>
Leerer
Papierkorb
<
/translation
>
<
translation
>
Papierkorb
leeren
<
/translation
>
<
/message
>
<
message
>
<
source
>
Are
you
sure
you
want
to
empty
trash
?
<
/source
>
...
...
@@ -1078,7 +1078,7 @@
<
/message
>
<
message
>
<
source
>
Emptied
trash
<
/source
>
<
translation
>
Papierkorb
geleert
<
/translation
>
<
translation
>
Papierkorb
wurde
geleert
<
/translation
>
<
/message
>
<
message
>
<
source
>
Remove
Folder
<
/source
>
...
...
@@ -1086,7 +1086,7 @@
<
/message
>
<
message
>
<
source
>
Are
you
sure
you
want
to
remove
the
folder
&
apos
;
%
1
&
apos
;
and
all
its
content
?
<
/source
>
<
translation
>
M
ö
chten
Sie
den
Ordner
&
apos
;
%
1
mit
dem
gesamten
Inhalt
wirklich
entfernen
?
<
/translation
>
<
translation
>
M
ö
chten
Sie
den
Ordner
&
apos
;
%
1
und
seinen
gesamten
Inhalt
wirklich
entfernen
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
No
document
selected
!<
/source
>
...
...
@@ -1114,7 +1114,7 @@
<
/message
>
<
message
>
<
source
>
Empty
<
/source
>
<
translation
>
Leer
<
/translation
>
<
translation
>
Leer
en
<
/translation
>
<
/message
>
<
message
>
<
source
>
Trash
<
/source
>
...
...
@@ -1153,15 +1153,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
>
Das
Dokument
&
apos
;
%
1
&
apos
;
wurde
mit
einer
neueren
Version
von
OpenBoard
erstellt
(
%
2
).
Beim
Ö
ffnen
k
ö
nnen
einige
Informationen
verloren
gehen
.
M
ö
chten
Sie
fortfahren
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
Are
you
sure
you
want
to
remove
all
selected
documents
?
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
M
ö
chten
sie
wirklich
alle
ausgew
ä
hlten
Dokumente
entfernen
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
Remove
multiple
documents
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Mehrere
Dokumente
entfernen
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1200,11 +1200,11 @@
<
/message
>
<
message
>
<
source
>
Import
of
file
%
1
successful
.
<
/source
>
<
translation
type
=
"unfinished"
>
Import
des
Dokuments
%
1
erfolgreich
.
<
/translation
>
<
translation
>
Import
der
Datei
%
1
erfolgreich
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Importing
file
%
1
<
/source
>
<
translation
type
=
"unfinished"
>
Importieren
von
%
1
<
/translation
>
<
translation
>
Datei
%
1
wird
importiert
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1227,8 +1227,8 @@
<
message
numerus
=
"yes"
>
<
source
>%
1
pages
copied
<
/source
>
<
translation
>
<
numerusform
>%
1
Seite
kopiert
<
/numerusform
>
<
numerusform
>%
1
Seiten
kopiert
<
/numerusform
>
<
numerusform
>%
1
Seite
wurde
kopiert
<
/numerusform
>
<
numerusform
>%
1
Seiten
wurden
kopiert
<
/numerusform
>
<
/translation
>
<
/message
>
<
/context
>
...
...
@@ -1249,26 +1249,6 @@
<
source
>
Warnings
during
export
was
appeared
<
/source
>
<
translation
type
=
"unfinished"
>
Warnungen
beim
Exportieren
aufgetreten
<
/translation
>
<
/message
>
<
message
>
<
source
>
Exporting
document
...
<
/source
>
<
translation
type
=
"unfinished"
>
Dokument
wird
exportiert
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
<
/source
>
<
translation
type
=
"unfinished"
><
/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
>
<
/message
>
<
message
>
<
source
>
Export
failed
:
location
not
writable
<
/source
>
<
translation
type
=
"unfinished"
><
/translation
>
<
/message
>
<
message
>
<
source
>
Export
successful
.
<
/source
>
<
translation
type
=
"unfinished"
>
Export
erfolgreich
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
<
name
>
UBExportCFF
<
/name
>
...
...
@@ -1305,11 +1285,11 @@
<
/message
>
<
message
>
<
source
>
Exporting
document
...
<
/source
>
<
translation
type
=
"vanished"
>
Dokument
wird
exportiert
...
<
/translation
>
<
translation
>
Dokument
wird
exportiert
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
successful
.
<
/source
>
<
translation
type
=
"vanished"
>
Export
erfolgreich
.
<
/translation
>
<
translation
>
Export
erfolgreich
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Exporting
%
1
%
2
of
%
3
<
/source
>
...
...
@@ -1317,7 +1297,19 @@
<
/message
>
<
message
>
<
source
>
Export
to
OpenBoard
Format
<
/source
>
<
translation
type
=
"unfinished"
><
/translation
>
<
translation
>
In
das
OpenBoard
Format
exportieren
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
:
location
not
writable
<
/source
>
<
translation
>
Export
fehlgeschlagen
:
Zielpfad
nicht
beschreibbar
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
<
/source
>
<
translation
>
Export
fehlgeschlagen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unable
to
export
to
the
selected
location
.
You
do
not
have
the
permissions
necessary
to
save
the
file
.
<
/source
>
<
translation
>
Export
im
ausgew
ä
hlten
Zielpfad
nicht
m
ö
glich
.
Sie
haben
nicht
die
erforderliche
Berechtigung
um
die
Datei
zu
speichern
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1328,16 +1320,28 @@
<
/message
>
<
message
>
<
source
>
Exporting
document
...
<
/source
>
<
translation
type
=
"vanished"
>
Dokument
wird
exportiert
...
<
/translation
>
<
translation
>
Dokument
wird
exportiert
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
successful
.
<
/source
>
<
translation
type
=
"vanished"
>
Export
erfolgreich
.
<
/translation
>
<
translation
>
Export
erfolgreich
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
to
PDF
<
/source
>
<
translation
>
In
PDF
-
Datei
exportieren
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
:
location
not
writable
<
/source
>
<
translation
>
Export
fehlgeschlagen
:
Zielpfad
nicht
beschreibbar
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
failed
<
/source
>
<
translation
>
Export
fehlgeschlagen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unable
to
export
to
the
selected
location
.
You
do
not
have
the
permissions
necessary
to
save
the
file
.
<
/source
>
<
translation
>
Export
im
ausgew
ä
hlten
Zielpfad
nicht
m
ö
glich
.
Sie
haben
nicht
die
erforderliche
Berechtigung
um
die
Datei
zu
speichern
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
<
name
>
UBExportPDF
<
/name
>
...
...
@@ -1347,11 +1351,11 @@
<
/message
>
<
message
>
<
source
>
Exporting
document
...
<
/source
>
<
translation
type
=
"vanished"
>
Dokument
wird
exportiert
...
<
/translation
>
<
translation
>
Dokument
wird
exportiert
...
<
/translation
>
<
/message
>
<
message
>
<
source
>
Export
successful
.
<
/source
>
<
translation
type
=
"vanished"
>
Export
erfolgreich
.
<
/translation
>
<
translation
>
Export
erfolgreich
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Exporting
page
%
1
of
%
2
<
/source
>
...
...
@@ -1542,19 +1546,19 @@
<
name
>
UBGraphicsMediaItem
<
/name
>
<
message
>
<
source
>
Media
resource
couldn
&
apos
;
t
be
resolved
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Medienquelle
konnte
nicht
aufgel
ö
st
werden
<
/translation
>
<
/message
>
<
message
>
<
source
>
Unsupported
media
format
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Medienformat
wird
nicht
unterst
ü
tzt
<
/translation
>
<
/message
>
<
message
>
<
source
>
Media
playback
service
not
found
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Dienst
zum
Abspielen
von
Mediainhalten
nicht
gefunden
<
/translation
>
<
/message
>
<
message
>
<
source
>
Media
error
:
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Medienfehler
:
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1593,11 +1597,11 @@
<
name
>
UBGraphicsWidgetItemDelegate
<
/name
>
<
message
>
<
source
>
Frozen
<
/source
>
<
translation
>
Erstar
rt
<
/translation
>
<
translation
>
Fixie
rt
<
/translation
>
<
/message
>
<
message
>
<
source
>
Transform
as
Tool
<
/source
>
<
translation
>
In
Extra
umwandeln
<
/translation
>
<
translation
>
In
Werkzeug
umwandeln
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1612,7 +1616,7 @@
<
/message
>
<
message
>
<
source
>
Import
of
file
%
1
failed
.
<
/source
>
<
translation
type
=
"vanished"
>
Import
der
Datei
%
1
fehlgeschlagen
.
<
/translation
>
<
translation
type
=
"vanished"
>
Import
der
Datei
%
1
fehlgeschlagen
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Import
successful
.
<
/source
>
...
...
@@ -1639,7 +1643,7 @@
<
/message
>
<
message
>
<
source
>
OpenBoard
(
*
.
ubz
)
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
OpenBoard
(
*
.
ubz
)
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1735,7 +1739,7 @@ Do you want to ignore these errors for this host?</source>
%
2
M
ö
chten
Sie
diese
Fehler
auf
diesem
Computer
ignorieren
?
<
/translation
>
M
ö
chten
Sie
diese
Fehler
f
ü
r
diesen
Computer
ignorieren
?
<
/translation
>
<
/message
>
<
message
>
<
source
>
Yes
<
/source
>
...
...
@@ -1750,15 +1754,15 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<
name
>
UBOpenSankoreImporterWidget
<
/name
>
<
message
>
<
source
>
Open
-
Sankore
Documents
Detected
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Ge
ö
ffnete
Open
-
Sankore
Dokumente
festgestellt
<
/translation
>
<
/message
>
<
message
>
<
source
>
Show
this
panel
next
time
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Diesen
Dialog
erneut
anzeigen
<
/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
>
Sie
k
ö
nnen
jederzeit
im
Einstellungsdialog
im
Men
ü
"Über"
auf
den
OpenBoard
Document
Importer
zugreifen
.
Warnung
,
falls
sie
bereits
Ihre
Open
-
Sankore
Daten
importiert
haben
,
k
ö
nnen
Sie
Ihre
aktuellen
OpenBoard
Dokumente
verlieren
.
<
/translation
>
<
/message
>
<
message
>
<
source
>
Cancel
<
/source
>
...
...
@@ -1766,11 +1770,11 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<
/message
>
<
message
>
<
source
>
Proceed
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Fortfahren
<
/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
>
Auf
Ihrem
Computer
befinden
sich
Open
-
Sankor
é
Dokumente
.
Um
diese
in
OpenBoard
zu
importieren
dr
ü
cken
Sie
den
"Fortfahren"
Knopf
um
die
Importanwendung
zu
starten
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1785,7 +1789,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</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
>
Verbindung
zum
Dokumentenarchiv
verloren
.
Um
fehlerhafte
Daten
zu
vermeiden
muss
die
Anwendung
leider
geschlossen
werden
.
Letzte
Ä
nderungen
k
ö
nnen
auch
verloren
gehen
.
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -1839,7 +1843,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<
/message
>
<
message
>
<
source
>
Podcast
recording
error
(
%
1
)
<
/source
>
<
translation
>
Podcast
registriert
einen
Fehler
(
%
1
)
<
/translation
>
<
translation
>
Fehler
bei
der
Podcast
Aufnahme
(
%
1
)
<
/translation
>
<
/message
>
<
message
>
<
source
>
Default
Audio
Input
<
/source
>
...
...
@@ -2013,7 +2017,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<
/message
>
<
message
>
<
source
>
Update
<
/source
>
<
translation
>
Update
<
/translation
>
<
translation
>
Aktualisierung
<
/translation
>
<
/message
>
<
message
>
<
source
>
Select
a
backup
folder
<
/source
>
...
...
@@ -2031,7 +2035,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
<
/message
>
<
message
>
<
source
>
Files
update
results
<
/source
>
<
translation
>
Ergebnis
de
s
Daten
-
Updates
<
/translation
>
<
translation
>
Ergebnis
de
r
Dateien
-
Aktualisierung
<
/translation
>
<
/message
>
<
message
>
<
source
>
Updating
file
<
/source
>
...
...
@@ -2057,7 +2061,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
<
name
>
UBWidgetUniboardAPI
<
/name
>
<
message
>
<
source
>%
0
called
(
method
=%
1
,
status
=%
2
)
<
/source
>
<
translation
>%
0
a
b
gerufen
(
Methode
=%
1
,
Status
=%
2
)
<
/translation
>
<
translation
>%
0
a
uf
gerufen
(
Methode
=%
1
,
Status
=%
2
)
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2160,7 +2164,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
<
/message
>
<
message
>
<
source
>
Download
canceled
:
%
1
<
/source
>
<
translation
>
Download
abgebrochen
%
1
<
/translation
>
<
translation
>
Herunterladen
abgebrochen
%
1
<
/translation
>
<
/message
>
<
message
>
<
source
>
Error
opening
saved
file
:
%
1
<
/source
>
...
...
@@ -2257,19 +2261,19 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
<
name
>
WBTabBar
<
/name
>
<
message
>
<
source
>
New
&
amp
;
Tab
<
/source
>
<
translation
>
Tab
Neu
&
amp
;
<
/translation
>
<
translation
>
&
amp
;
Tab
Neu
<
/translation
>
<
/message
>
<
message
>
<
source
>
Clone
Tab
<
/source
>
<
translation
>
Tab
Klo
n
<
/translation
>
<
translation
>
Tab
dupliziere
n
<
/translation
>
<
/message
>
<
message
>
<
source
>&
amp
;
Close
Tab
<
/source
>
<
translation
>
Tab
&
amp
;
Schlie
ß
en
<
/translation
>
<
translation
>
Tab
&
amp
;
Schlie
ß
en
<
/translation
>
<
/message
>
<
message
>
<
source
>
Close
&
amp
;
Other
Tabs
<
/source
>
<
translation
>
Tabs
Schlie
ß
en
&
amp
;
Andere
<
/translation
>
<
translation
>
&
amp
;
Andere
Tabs
schlie
ß
en
<
/translation
>
<
/message
>
<
message
>
<
source
>
Reload
Tab
<
/source
>
...
...
@@ -2330,7 +2334,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
<
/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
>
PDF
Dokument
herunterladen
:
M
ö
chten
Sie
die
PDF
-
Datei
herunterladen
oder
sie
zum
aktuellen
OpenBoard
Dokument
hinzuf
ü
gen
?
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2384,7 +2388,7 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Restore
credentials
on
reboot
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Zugangsdaten
beim
Neustarten
wiederherstellen
<
/translation
>
<
/message
>
<
message
>
<
source
>
OpenBoard
<
/source
>
...
...
@@ -2403,7 +2407,7 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Opacity
<
/source
>
<
translation
>
Lichtundurchl
ä
ssigkei
t
<
/translation
>
<
translation
>
Deckkraf
t
<
/translation
>
<
/message
>
<
message
>
<
source
>
Line
Width
<
/source
>
...
...
@@ -2415,7 +2419,7 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Strong
<
/source
>
<
translation
>
Star
k
<
/translation
>
<
translation
>
Dic
k
<
/translation
>
<
/message
>
<
message
>
<
source
>
Fine
<
/source
>
...
...
@@ -2461,7 +2465,7 @@ p, li { white-space: pre-wrap; }
<
name
>
documents
<
/name
>
<
message
>
<
source
>
OpenBoard
Documents
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
OpenBoard
Dokumente
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
@@ -2548,11 +2552,11 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Software
Update
<
/source
>
<
translation
>
Software
-
Update
<
/translation
>
<
translation
>
Software
-
Aktualisierung
<
/translation
>
<
/message
>
<
message
>
<
source
>
Check
software
update
at
launch
<
/source
>
<
translation
>
Software
-
Update
beim
Start
pr
ü
fen
<
/translation
>
<
translation
>
Software
-
Aktualisierung
beim
Start
pr
ü
fen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Licences
<
/source
>
...
...
@@ -2605,19 +2609,19 @@ p, li { white-space: pre-wrap; }
<
/message
>
<
message
>
<
source
>
Open
-
Sankor
é
Importer
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Open
-
Sankor
é
Importer
<
/translation
>
<
/message
>
<
message
>
<
source
>
Check
if
Open
-
Sankor
é
data
could
be
imported
at
launch
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Pr
ü
fen
,
ob
Open
-
Sankor
é
Daten
beim
Start
importiert
werden
k
ö
nnen
<
/translation
>
<
/message
>
<
message
>
<
source
>
Use
system
keyboard
(
recommended
)
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Benutze
System
-
Tastatur
(
empfohlen
)
<
/translation
>
<
/message
>
<
message
>
<
source
>
Built
-
in
virtual
keyboard
button
size
:
<
/source
>
<
translation
type
=
"unfinished"
>
<
/translation
>
<
translation
>
Tastengr
öß
e
der
integrierten
virtuellen
Tastatur
<
/translation
>
<
/message
>
<
/context
>
<
context
>
...
...
resources/i18n/OpenBoard_eu.ts
0 → 100644
View file @
be45f656
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/adaptors/UBSvgSubsetAdaptor.cpp
View file @
be45f656
...
...
@@ -355,6 +355,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene(UBDocumentProx
mScene
=
0
;
UBGraphicsWidgetItem
*
currentWidget
=
0
;
bool
pageDpiSpecified
=
true
;
saveSceneAfterLoading
=
false
;
mFileVersion
=
40100
;
// default to 4.1.0
...
...
@@ -371,6 +372,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene(UBDocumentProx
if
(
!
mScene
)
{
mScene
=
new
UBGraphicsScene
(
mProxy
,
false
);
mScene
->
setModified
(
false
);
}
// introduced in UB 4.2
...
...
@@ -951,10 +953,11 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene(UBDocumentProx
mScene
->
addItem
(
iterator
.
value
());
}
if
(
mScene
)
mScene
->
setModified
(
false
);
if
(
mScene
)
{
mScene
->
setModified
(
saveSceneAfterLoading
);
mScene
->
enableUndoRedoStack
();
}
mScene
->
enableUndoRedoStack
();
qDebug
()
<<
"loadScene() : created scene and read file"
;
qDebug
()
<<
"spent milliseconds: "
<<
time
.
elapsed
();
return
mScene
;
...
...
@@ -1190,11 +1193,6 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(UBDocumentProxy* proxy,
mXmlWriter
.
writeStartElement
(
"g"
);
openStroke
=
currentStroke
;
QMatrix
matrix
=
item
->
sceneMatrix
();
if
(
!
matrix
.
isIdentity
())
mXmlWriter
.
writeAttribute
(
"transform"
,
toSvgTransform
(
matrix
));
UBGraphicsStroke
*
stroke
=
dynamic_cast
<
UBGraphicsStroke
*
>
(
currentStroke
);
if
(
stroke
)
...
...
@@ -1215,6 +1213,14 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(UBDocumentProxy* proxy,
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"uuid"
,
UBStringUtils
::
toCanonicalUuid
(
sg
->
uuid
()));
QVariant
locked
=
sg
->
data
(
UBGraphicsItemData
::
ItemLocked
);
if
(
!
locked
.
isNull
()
&&
locked
.
toBool
())
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"locked"
,
xmlTrue
);
QMatrix
matrix
=
sg
->
sceneMatrix
();
if
(
!
matrix
.
isIdentity
())
mXmlWriter
.
writeAttribute
(
"transform"
,
toSvgTransform
(
matrix
));
qDebug
()
<<
"Attributes written"
;
groupHoldsInfo
=
true
;
...
...
@@ -1576,7 +1582,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPo
QString
points
=
pointsToSvgPointsAttribute
(
polygon
);
mXmlWriter
.
writeAttribute
(
"points"
,
points
);
mXmlWriter
.
writeAttribute
(
"transform"
,
toSvgTransform
(
polygonItem
->
sceneM
atrix
()));
mXmlWriter
.
writeAttribute
(
"transform"
,
toSvgTransform
(
polygonItem
->
m
atrix
()));
mXmlWriter
.
writeAttribute
(
"fill"
,
polygonItem
->
brush
().
color
().
name
());
qreal
alpha
=
polygonItem
->
brush
().
color
().
alphaF
();
...
...
@@ -1612,9 +1618,9 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPo
}
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"uuid"
,
UBStringUtils
::
toCanonicalUuid
(
polygonItem
->
uuid
()));
if
(
polygonItem
->
parentItem
())
{
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"parent"
,
UBStringUtils
::
toCanonicalUuid
(
UBGraphicsItem
::
getOwnUuid
(
polygonItem
->
parentItem
())));
}
UBGraphicsStrokesGroup
*
sg
=
polygonItem
->
strokesGroup
();
if
(
sg
)
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"parent"
,
UBStringUtils
::
toCanonicalUuid
(
sg
->
uuid
()));
mXmlWriter
.
writeEndElement
();
}
...
...
@@ -2567,6 +2573,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::textItemToSvg(UBGraphicsTextItem* it
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"width"
,
QString
(
"%1"
).
arg
(
item
->
textWidth
()));
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"height"
,
QString
(
"%1"
).
arg
(
item
->
textHeight
()));
mXmlWriter
.
writeAttribute
(
UBSettings
::
uniboardDocumentNamespaceUri
,
"pixels-per-point"
,
QString
(
"%1"
).
arg
(
item
->
pixelsPerPoint
()));
QColor
colorDarkBg
=
item
->
colorOnDarkBackground
();
QColor
colorLightBg
=
item
->
colorOnLightBackground
();
...
...
@@ -2593,6 +2600,8 @@ UBGraphicsTextItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::textItemFromSvg()
qreal
width
=
mXmlReader
.
attributes
().
value
(
"width"
).
toString
().
toFloat
();
qreal
height
=
mXmlReader
.
attributes
().
value
(
"height"
).
toString
().
toFloat
();
qreal
originalPixelsPerPoint
=
mXmlReader
.
attributes
().
value
(
mNamespaceUri
,
"pixels-per-point"
).
toString
().
toDouble
();
UBGraphicsTextItem
*
textItem
=
new
UBGraphicsTextItem
();
graphicsItemFromSvg
(
textItem
);
...
...
@@ -2635,6 +2644,31 @@ UBGraphicsTextItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::textItemFromSvg()
if
(
mXmlReader
.
name
()
==
"itemTextContent"
)
{
text
=
mXmlReader
.
readElementText
();
textItem
->
setHtml
(
text
);
// Fonts sizes are not displayed the same across platforms: e.g a text item with the same
// font size (in Pts) is displayed smaller on Linux than Windows. This messes up layouts
// when importing documents created on another computer, so if a font is being displayed
// at a different size (relative to the rest of the document) than it was when created,
// we adjust its size.
if
(
originalPixelsPerPoint
!=
0
)
{
qreal
pixelsPerPoint
=
textItem
->
pixelsPerPoint
();
qDebug
()
<<
"Pixels per point: original/current"
<<
originalPixelsPerPoint
<<
"/"
<<
pixelsPerPoint
;
qreal
ratio
=
originalPixelsPerPoint
/
pixelsPerPoint
;
if
(
ratio
!=
1
)
{
qDebug
()
<<
"Scaling text by "
<<
ratio
;
UBGraphicsTextItemDelegate
*
textDelegate
=
dynamic_cast
<
UBGraphicsTextItemDelegate
*>
(
textItem
->
Delegate
());
if
(
textDelegate
)
textDelegate
->
scaleTextSize
(
ratio
);
}
}
else
// mark scene as modified so the text item will be saved with a pixelsPerPoint value
saveSceneAfterLoading
=
true
;
textItem
->
resize
(
width
,
height
);
if
(
textItem
->
toPlainText
().
isEmpty
())
{
delete
textItem
;
...
...
src/adaptors/UBSvgSubsetAdaptor.h
View file @
be45f656
...
...
@@ -168,6 +168,8 @@ class UBSvgSubsetAdaptor
qreal
mGroupZIndex
;
bool
mGroupHasInfo
;
bool
saveSceneAfterLoading
;
QString
mNamespaceUri
;
UBGraphicsScene
*
mScene
;
...
...
src/board/UBBoardView.cpp
View file @
be45f656
...
...
@@ -555,6 +555,8 @@ Here we determines cases when items should to get mouse press event at pressing
return
true
;
case
UBGraphicsMediaItem
:
:
Type
:
case
UBGraphicsVideoItem
:
:
Type
:
case
UBGraphicsAudioItem
:
:
Type
:
return
false
;
case
UBGraphicsTextItem
:
:
Type
:
...
...
@@ -626,6 +628,8 @@ bool UBBoardView::itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item)
case
DelegateButton
:
:
Type
:
case
UBGraphicsMediaItem
:
:
Type
:
case
UBGraphicsVideoItem
:
:
Type
:
case
UBGraphicsAudioItem
:
:
Type
:
return
true
;
}
...
...
@@ -858,6 +862,8 @@ void UBBoardView::moveRubberedItems(QPointF movingVector)
if
(
item
->
type
()
==
UBGraphicsW3CWidgetItem
::
Type
||
item
->
type
()
==
UBGraphicsPixmapItem
::
Type
||
item
->
type
()
==
UBGraphicsMediaItem
::
Type
||
item
->
type
()
==
UBGraphicsVideoItem
::
Type
||
item
->
type
()
==
UBGraphicsAudioItem
::
Type
||
item
->
type
()
==
UBGraphicsSvgItem
::
Type
||
item
->
type
()
==
UBGraphicsTextItem
::
Type
||
item
->
type
()
==
UBGraphicsStrokesGroup
::
Type
...
...
@@ -1170,7 +1176,8 @@ void UBBoardView::mouseMoveEvent (QMouseEvent *event)
if
(
item
->
type
()
==
UBGraphicsW3CWidgetItem
::
Type
||
item
->
type
()
==
UBGraphicsPixmapItem
::
Type
||
item
->
type
()
==
UBGraphicsMediaItem
::
Type
||
item
->
type
()
==
UBGraphicsVideoItem
::
Type
||
item
->
type
()
==
UBGraphicsAudioItem
::
Type
||
item
->
type
()
==
UBGraphicsSvgItem
::
Type
||
item
->
type
()
==
UBGraphicsTextItem
::
Type
||
item
->
type
()
==
UBGraphicsStrokesGroup
::
Type
...
...
@@ -1328,6 +1335,7 @@ void UBBoardView::mouseReleaseEvent (QMouseEvent *event)
textItem
->
setTextInteractionFlags
(
Qt
::
TextEditorInteraction
);
textItem
->
setSelected
(
true
);
textItem
->
setTextWidth
(
0
);
textItem
->
setFocus
();
}
}
...
...
@@ -1597,9 +1605,9 @@ void UBBoardView::drawBackground (QPainter *painter, const QRectF &rect)
QColor
bgCrossColor
;
if
(
darkBackground
)
bgCrossColor
=
UBSettings
::
crossDarkBackground
;
bgCrossColor
=
QColor
(
UBSettings
::
settings
()
->
boardCrossColorDarkBackground
->
get
().
toString
())
;
else
bgCrossColor
=
UBSettings
::
crossLightBackground
;
bgCrossColor
=
QColor
(
UBSettings
::
settings
()
->
boardCrossColorLightBackground
->
get
().
toString
())
;
if
(
transform
().
m11
()
<
1.0
)
{
...
...
src/core/UBApplicationController.cpp
View file @
be45f656
...
...
@@ -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
()
->
appSoftwareUpdateURI
->
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
()
...
...
@@ -658,7 +642,6 @@ void UBApplicationController::closing()
if
(
mUninoteController
)
{
mUninoteController
->
hideWindow
();
mUninoteController
->
close
();
}
...
...
src/core/UBApplicationController.h
View file @
be45f656
...
...
@@ -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/UBOpenSankoreImporter.cpp
View file @
be45f656
...
...
@@ -56,11 +56,9 @@ void UBOpenSankoreImporter::onProceedClicked()
newProcess
.
startDetached
(
qApp
->
applicationDirPath
()
+
"/importer/OpenBoardImporter"
);
#elif defined Q_OS_OSX
newProcess
.
startDetached
(
qApp
->
applicationDirPath
()
+
"/../Resources/OpenBoardImporter.app/Contents/MacOS/OpenBoardImporter"
);
#else
// Windows does not allows to run easily an exe located in a subdirectory when the main
// directory is placed into programs files.
//newProcess.startDetached(qApp->applicationDirPath()+"\\Importer\\OpenBoardImporter.exe");
newProcess
.
startDetached
(
"C:/OpenBoard/Importer/OpenBoardImporter.exe"
);
#elif defined Q_OS_WIN
QString
importerPath
=
QDir
::
toNativeSeparators
(
qApp
->
applicationDirPath
())
+
"
\\
OpenBoardImporter.exe"
;
newProcess
.
startDetached
(
"explorer.exe"
,
QStringList
()
<<
importerPath
);
#endif
qApp
->
exit
(
0
);
...
...
src/core/UBPersistenceManager.cpp
View file @
be45f656
...
...
@@ -67,6 +67,7 @@ UBPersistenceManager * UBPersistenceManager::sSingleton = 0;
UBPersistenceManager
::
UBPersistenceManager
(
QObject
*
pParent
)
:
QObject
(
pParent
)
,
mHasPurgedDocuments
(
false
)
,
mIsApplicationClosing
(
false
)
,
mIsWorkerFinished
(
false
)
{
...
...
@@ -131,8 +132,10 @@ void UBPersistenceManager::destroy()
void
UBPersistenceManager
::
onScenePersisted
(
UBGraphicsScene
*
scene
)
{
delete
scene
;
scene
=
NULL
;
if
(
!
mIsApplicationClosing
)
{
delete
scene
;
scene
=
NULL
;
}
}
void
UBPersistenceManager
::
onMetadataPersisted
(
UBDocumentProxy
*
proxy
)
...
...
@@ -147,6 +150,8 @@ void UBPersistenceManager::onWorkerFinished()
UBPersistenceManager
::~
UBPersistenceManager
()
{
mIsApplicationClosing
=
true
;
if
(
mWorker
)
mWorker
->
applicationWillClose
();
...
...
@@ -483,7 +488,7 @@ void UBPersistenceManager::deleteDocumentScenes(UBDocumentProxy* proxy, const QL
foreach
(
int
index
,
compactedIndexes
)
{
UBGraphicsScene
*
scene
=
loadDocumentScene
(
proxy
,
index
);
UBGraphicsScene
*
scene
=
loadDocumentScene
(
proxy
,
index
,
false
);
if
(
scene
)
{
//scene is about to move into new document
...
...
@@ -727,7 +732,7 @@ void UBPersistenceManager::moveSceneToIndex(UBDocumentProxy* proxy, int source,
}
UBGraphicsScene
*
UBPersistenceManager
::
loadDocumentScene
(
UBDocumentProxy
*
proxy
,
int
sceneIndex
)
UBGraphicsScene
*
UBPersistenceManager
::
loadDocumentScene
(
UBDocumentProxy
*
proxy
,
int
sceneIndex
,
bool
cacheNeighboringScenes
)
{
UBGraphicsScene
*
scene
=
NULL
;
...
...
@@ -740,11 +745,13 @@ UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy,
mSceneCache
.
insert
(
proxy
,
sceneIndex
,
scene
);
}
if
(
sceneIndex
+
1
<
proxy
->
pageCount
()
&&
!
mSceneCache
.
contains
(
proxy
,
sceneIndex
+
1
))
mWorker
->
readScene
(
proxy
,
sceneIndex
+
1
);
if
(
cacheNeighboringScenes
)
{
if
(
sceneIndex
+
1
<
proxy
->
pageCount
()
&&
!
mSceneCache
.
contains
(
proxy
,
sceneIndex
+
1
))
mWorker
->
readScene
(
proxy
,
sceneIndex
+
1
);
if
(
sceneIndex
-
1
>=
0
&&
!
mSceneCache
.
contains
(
proxy
,
sceneIndex
-
1
))
mWorker
->
readScene
(
proxy
,
sceneIndex
-
1
);
if
(
sceneIndex
-
1
>=
0
&&
!
mSceneCache
.
contains
(
proxy
,
sceneIndex
-
1
))
mWorker
->
readScene
(
proxy
,
sceneIndex
-
1
);
}
return
scene
;
}
...
...
@@ -941,7 +948,6 @@ bool UBPersistenceManager::isEmpty(UBDocumentProxy* pDocumentProxy)
empty
=
theSoleScene
->
isEmpty
();
if
(
empty
){
mSceneCache
.
removeScene
(
pDocumentProxy
,
0
);
delete
theSoleScene
;
theSoleScene
=
NULL
;
}
else
{
...
...
@@ -958,7 +964,6 @@ bool UBPersistenceManager::isEmpty(UBDocumentProxy* pDocumentProxy)
}
if
(
!
usefulItemFound
){
mSceneCache
.
removeScene
(
pDocumentProxy
,
0
);
delete
theSoleScene
;
theSoleScene
=
NULL
;
empty
=
true
;
}
...
...
src/core/UBPersistenceManager.h
View file @
be45f656
...
...
@@ -85,7 +85,7 @@ class UBPersistenceManager : public QObject
virtual
void
moveSceneToIndex
(
UBDocumentProxy
*
pDocumentProxy
,
int
source
,
int
target
);
virtual
UBGraphicsScene
*
loadDocumentScene
(
UBDocumentProxy
*
pDocumentProxy
,
int
sceneIndex
);
virtual
UBGraphicsScene
*
loadDocumentScene
(
UBDocumentProxy
*
pDocumentProxy
,
int
sceneIndex
,
bool
cacheNeighboringScenes
=
true
);
UBGraphicsScene
*
getDocumentScene
(
UBDocumentProxy
*
pDocumentProxy
,
int
sceneIndex
)
{
return
mSceneCache
.
value
(
pDocumentProxy
,
sceneIndex
);}
QList
<
QPointer
<
UBDocumentProxy
>
>
documentProxies
;
...
...
@@ -157,6 +157,8 @@ class UBPersistenceManager : public QObject
QThread
*
mThread
;
bool
mIsWorkerFinished
;
bool
mIsApplicationClosing
;
private
slots
:
void
documentRepositoryChanged
(
const
QString
&
path
);
void
errorString
(
QString
error
);
...
...
src/core/UBSettings.cpp
View file @
be45f656
...
...
@@ -73,9 +73,6 @@ const char *UBSettings::sDefaultFontFamily = "Arial";
QString
UBSettings
::
currentFileVersion
=
"4.8.0"
;
QColor
UBSettings
::
crossDarkBackground
=
QColor
(
44
,
44
,
44
,
200
);
QColor
UBSettings
::
crossLightBackground
=
QColor
(
165
,
225
,
255
);
QBrush
UBSettings
::
eraserBrushDarkBackground
=
QBrush
(
QColor
(
127
,
127
,
127
,
80
));
QBrush
UBSettings
::
eraserBrushLightBackground
=
QBrush
(
QColor
(
255
,
255
,
255
,
30
));
...
...
@@ -231,6 +228,7 @@ void UBSettings::init()
appToolBarDisplayText
=
new
UBSetting
(
this
,
"App"
,
"ToolBarDisplayText"
,
true
);
appEnableAutomaticSoftwareUpdates
=
new
UBSetting
(
this
,
"App"
,
"EnableAutomaticSoftwareUpdates"
,
false
);
appEnableSoftwareUpdates
=
new
UBSetting
(
this
,
"App"
,
"EnableSoftwareUpdates"
,
true
);
appSoftwareUpdateURI
=
new
UBSetting
(
this
,
"App"
,
"SoftwareUpdateURI"
,
"http://www.openboard.ch/update.json"
);
appToolBarOrientationVertical
=
new
UBSetting
(
this
,
"App"
,
"ToolBarOrientationVertical"
,
false
);
appPreferredLanguage
=
new
UBSetting
(
this
,
"App"
,
"PreferredLanguage"
,
""
);
...
...
@@ -282,6 +280,10 @@ void UBSettings::init()
pageSize
=
new
UBSetting
(
this
,
"Board"
,
"DefaultPageSize"
,
documentSizes
.
value
(
DocumentSizeRatio
::
Ratio4_3
));
boardCrossColorDarkBackground
=
new
UBSetting
(
this
,
"Board"
,
"CrossColorDarkBackground"
,
"#C82C2C2C"
);
boardCrossColorLightBackground
=
new
UBSetting
(
this
,
"Board"
,
"CrossColorLightBackground"
,
"#A5E1FF"
);
QStringList
penLightBackgroundColors
;
penLightBackgroundColors
<<
"#000000"
<<
"#FF0000"
<<
"#004080"
<<
"#008000"
<<
"#FFDD00"
<<
"#C87400"
<<
"#800040"
<<
"#008080"
<<
"#5F2D0A"
<<
"#FFFFFF"
;
boardPenLightBackgroundColors
=
new
UBColorListSetting
(
this
,
"Board"
,
"PenLightBackgroundColors"
,
penLightBackgroundColors
,
1.0
);
...
...
src/core/UBSettings.h
View file @
be45f656
...
...
@@ -160,8 +160,6 @@ class UBSettings : public QObject
static
int
pointerDiameter
;
static
int
boardMargin
;
static
QColor
crossDarkBackground
;
static
QColor
crossLightBackground
;
static
QColor
paletteColor
;
static
QColor
opaquePaletteColor
;
...
...
@@ -246,6 +244,7 @@ class UBSettings : public QObject
UBSetting
*
appToolBarDisplayText
;
UBSetting
*
appEnableAutomaticSoftwareUpdates
;
UBSetting
*
appEnableSoftwareUpdates
;
UBSetting
*
appSoftwareUpdateURI
;
UBSetting
*
appToolBarOrientationVertical
;
UBSetting
*
appPreferredLanguage
;
...
...
@@ -286,6 +285,9 @@ class UBSettings : public QObject
UBSetting
*
featureSliderPosition
;
UBSetting
*
boardCrossColorDarkBackground
;
UBSetting
*
boardCrossColorLightBackground
;
UBColorListSetting
*
boardPenLightBackgroundColors
;
UBColorListSetting
*
boardPenLightBackgroundSelectedColors
;
...
...
src/desktop/UBDesktopAnnotationController.cpp
View file @
be45f656
...
...
@@ -354,7 +354,10 @@ void UBDesktopAnnotationController::showWindow()
void
UBDesktopAnnotationController
::
close
()
{
// NOOP
if
(
mTransparentDrawingView
)
mTransparentDrawingView
->
hide
();
mDesktopPalette
->
hide
();
}
...
...
src/document/UBDocumentController.cpp
View file @
be45f656
...
...
@@ -805,10 +805,12 @@ void UBDocumentController::deleteTreeItem(QTreeWidgetItem * item, bool showConfi
document
->
parent
()
->
removeChild
(
document
);
UBPersistenceManager
::
persistenceManager
()
->
deleteDocument
(
document
->
proxy
());
if
(
mTrashTi
->
childCount
()
==
0
)
selectDocument
(
NULL
);
else
selectDocument
(((
UBDocumentProxyTreeItem
*
)
mTrashTi
->
child
(
0
))
->
proxy
());
if
(
selectNewDocument
)
{
if
(
mTrashTi
->
childCount
()
==
0
)
selectDocument
(
NULL
);
else
selectDocument
(((
UBDocumentProxyTreeItem
*
)
mTrashTi
->
child
(
0
))
->
proxy
());
}
reloadThumbnails
();
}
...
...
src/document/UBDocumentController.h
View file @
be45f656
...
...
@@ -55,6 +55,8 @@ class UBDocumentController : public UBDocumentContainer
{
Q_OBJECT
friend
class
UBDocumentTreeWidget
;
public
:
UBDocumentController
(
UBMainWindow
*
mainWindow
);
virtual
~
UBDocumentController
();
...
...
@@ -163,5 +165,4 @@ class UBDocumentController : public UBDocumentContainer
};
#endif
/* UBDOCUMENTCONTROLLER_H_ */
src/domain/UBGraphicsGroupContainerItem.cpp
View file @
be45f656
...
...
@@ -162,7 +162,10 @@ void UBGraphicsGroupContainerItem::removeFromGroup(QGraphicsItem *item)
void
UBGraphicsGroupContainerItem
::
deselectCurrentItem
()
{
if
(
mCurrentItem
&&
mCurrentItem
->
type
()
==
UBGraphicsMediaItem
::
Type
){
if
(
mCurrentItem
&&
(
mCurrentItem
->
type
()
==
UBGraphicsMediaItem
::
Type
||
mCurrentItem
->
type
()
==
UBGraphicsVideoItem
::
Type
||
mCurrentItem
->
type
()
==
UBGraphicsAudioItem
::
Type
))
{
dynamic_cast
<
UBGraphicsMediaItem
*>
(
mCurrentItem
)
->
Delegate
()
->
getToolBarItem
()
->
hide
();
mCurrentItem
->
setSelected
(
false
);
...
...
src/domain/UBGraphicsMediaItem.cpp
View file @
be45f656
...
...
@@ -252,6 +252,12 @@ void UBGraphicsMediaItem::setMinimumSize(const QSize& size)
this
->
setSize
(
width
,
height
);
}
void
UBGraphicsMediaItem
::
setUuid
(
const
QUuid
&
pUuid
)
{
UBItem
::
setUuid
(
pUuid
);
setData
(
UBGraphicsItemData
::
ItemUuid
,
QVariant
(
pUuid
));
}
void
UBGraphicsMediaItem
::
setMediaFileUrl
(
QUrl
url
)
{
mMediaFileUrl
=
url
;
...
...
src/domain/UBGraphicsMediaItem.h
View file @
be45f656
...
...
@@ -100,6 +100,7 @@ public:
virtual
void
setSourceUrl
(
const
QUrl
&
pSourceUrl
);
void
setSelected
(
bool
selected
);
void
setMinimumSize
(
const
QSize
&
size
);
void
setUuid
(
const
QUuid
&
pUuid
);
virtual
void
copyItemParameters
(
UBItem
*
copy
)
const
;
...
...
src/domain/UBGraphicsScene.cpp
View file @
be45f656
...
...
@@ -1290,15 +1290,22 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const
UBGraphicsGroupContainerItem
*
groupCloned
=
group
->
deepCopyNoChildDuplication
();
groupCloned
->
resetMatrix
();
groupCloned
->
resetTransform
();
groupCloned
->
set
Matrix
(
group
->
matrix
()
);
groupCloned
->
setTransform
(
group
->
transform
()
);
groupCloned
->
set
Pos
(
0
,
0
);
bool
locked
=
groupCloned
->
Delegate
()
->
isLocked
(
);
foreach
(
QGraphicsItem
*
eachItem
,
group
->
childItems
()){
QGraphicsItem
*
copiedChild
=
dynamic_cast
<
QGraphicsItem
*>
(
dynamic_cast
<
UBItem
*>
(
eachItem
)
->
deepCopy
());
copy
->
addItem
(
copiedChild
);
groupCloned
->
addToGroup
(
copiedChild
);
}
if
(
locked
)
groupCloned
->
setData
(
UBGraphicsItemData
::
ItemLocked
,
QVariant
(
true
));
copy
->
addItem
(
groupCloned
);
groupCloned
->
setMatrix
(
group
->
matrix
());
groupCloned
->
setTransform
(
QTransform
::
fromTranslate
(
group
->
pos
().
x
(),
group
->
pos
().
y
()));
groupCloned
->
setTransform
(
group
->
transform
(),
true
);
}
if
(
ubItem
&&
!
stroke
&&
!
group
&&
item
->
isVisible
())
...
...
@@ -2503,9 +2510,9 @@ void UBGraphicsScene::drawBackground(QPainter *painter, const QRectF &rect)
QColor
bgCrossColor
;
if
(
darkBackground
)
bgCrossColor
=
UBSettings
::
crossDarkBackground
;
bgCrossColor
=
QColor
(
UBSettings
::
settings
()
->
boardCrossColorDarkBackground
->
get
().
toString
())
;
else
bgCrossColor
=
UBSettings
::
crossLightBackground
;
bgCrossColor
=
QColor
(
UBSettings
::
settings
()
->
boardCrossColorLightBackground
->
get
().
toString
())
;
if
(
mZoomFactor
<
1.0
)
{
int
alpha
=
255
*
mZoomFactor
/
2
;
...
...
src/domain/UBGraphicsStrokesGroup.cpp
View file @
be45f656
...
...
@@ -128,10 +128,12 @@ void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event)
void
UBGraphicsStrokesGroup
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
QGraphicsItemGroup
::
mouseMoveEvent
(
event
);
if
(
!
isLocked
(
this
))
{
QGraphicsItemGroup
::
mouseMoveEvent
(
event
);
event
->
accept
();
setSelected
(
false
);
event
->
accept
();
setSelected
(
false
);
}
}
void
UBGraphicsStrokesGroup
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
)
...
...
@@ -173,7 +175,7 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const
}
}
const_cast
<
UBGraphicsStrokesGroup
*>
(
this
)
->
setTransform
(
groupTransform
);
copy
->
setTransform
(
sceneTransform
()
);
copy
->
setTransform
(
groupTransform
);
return
copy
;
}
...
...
@@ -184,6 +186,7 @@ void UBGraphicsStrokesGroup::copyItemParameters(UBItem *copy) const
if
(
NULL
!=
cp
)
{
cp
->
setTransform
(
transform
());
cp
->
setPos
(
pos
());
cp
->
setFlag
(
QGraphicsItem
::
ItemIsMovable
,
true
);
cp
->
setFlag
(
QGraphicsItem
::
ItemIsSelectable
,
true
);
...
...
src/domain/UBGraphicsTextItem.cpp
View file @
be45f656
...
...
@@ -306,8 +306,12 @@ QPainterPath UBGraphicsTextItem::shape() const
void
UBGraphicsTextItem
::
setTextWidth
(
qreal
width
)
{
qreal
strictMin
=
155
;
// the size of the font customization panel
qreal
newWidth
=
qMax
(
strictMin
,
width
);
qreal
titleBarWidth
=
0
;
UBGraphicsTextItemDelegate
*
del
=
dynamic_cast
<
UBGraphicsTextItemDelegate
*>
(
Delegate
());
if
(
del
)
titleBarWidth
=
del
->
titleBarWidth
();
qreal
newWidth
=
qMax
(
titleBarWidth
,
width
);
QGraphicsTextItem
::
setTextWidth
(
newWidth
);
}
...
...
@@ -328,6 +332,39 @@ qreal UBGraphicsTextItem::textHeight() const
return
mTextHeight
;
}
/**
* @brief Get the ratio between font size in pixels and points.
* @return The ratio of pixel size to point size of the first character, or 0 if the text item is empty.
*
* Qt may display fonts differently on different platforms -- on the same display,
* the same point size may be displayed at different pixel sizes. This function returns the
* ratio of pixel size to point size, based on the first character in the text item.
*/
qreal
UBGraphicsTextItem
::
pixelsPerPoint
()
const
{
QTextCursor
cursor
=
textCursor
();
if
(
cursor
.
isNull
())
return
0
;
cursor
.
movePosition
(
QTextCursor
::
Start
,
QTextCursor
::
MoveAnchor
);
cursor
.
movePosition
(
QTextCursor
::
NextCharacter
,
QTextCursor
::
KeepAnchor
);
QFont
f
=
cursor
.
charFormat
().
font
();
qDebug
()
<<
"ppp. Font: "
<<
f
;
QFontInfo
fi
(
cursor
.
charFormat
().
font
());
qreal
pixelSize
=
fi
.
pixelSize
();
qreal
pointSize
=
fi
.
pointSizeF
();
//qDebug() << "Pixel size: " << pixelSize;
//qDebug() << "Point size: " << pointSize;
if
(
pointSize
==
0
)
return
0
;
return
pixelSize
/
pointSize
;
}
void
UBGraphicsTextItem
::
contentsChanged
()
{
...
...
src/domain/UBGraphicsTextItem.h
View file @
be45f656
...
...
@@ -65,6 +65,7 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
void
setTextWidth
(
qreal
width
);
void
setTextHeight
(
qreal
height
);
qreal
textHeight
()
const
;
qreal
pixelsPerPoint
()
const
;
void
contentsChanged
();
...
...
@@ -101,6 +102,7 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
QString
mTypeTextHereLabel
;
signals
:
void
textUndoCommandAdded
(
UBGraphicsTextItem
*
textItem
);
...
...
src/domain/UBGraphicsTextItemDelegate.cpp
View file @
be45f656
...
...
@@ -204,6 +204,31 @@ void UBGraphicsTextItemDelegate::createControls()
}
/**
* @brief Calculate the width of the toolbar containing the text item-related buttons
* @return The space between the left-most and right-most buttons in pixels
*/
qreal
UBGraphicsTextItemDelegate
::
titleBarWidth
()
{
if
(
!
mFontButton
)
return
0
;
// refresh the frame and buttons' positions
positionHandles
();
qreal
titleBarWidth
(
0
);
qreal
frameLeftCoordinate
=
mFontButton
->
pos
().
x
();
qreal
frameRightCoordinate
=
frameLeftCoordinate
;
foreach
(
DelegateButton
*
button
,
mButtons
)
{
if
(
button
->
getSection
()
==
Qt
::
TitleBarArea
)
{
frameLeftCoordinate
=
qMin
(
button
->
pos
().
x
(),
frameLeftCoordinate
);
frameRightCoordinate
=
qMax
(
button
->
pos
().
x
()
+
button
->
boundingRect
().
width
(),
frameRightCoordinate
);
}
}
return
frameRightCoordinate
-
frameLeftCoordinate
;
}
void
UBGraphicsTextItemDelegate
::
freeButtons
()
{
...
...
@@ -532,6 +557,9 @@ bool UBGraphicsTextItemDelegate::keyReleaseEvent(QKeyEvent *event)
void
UBGraphicsTextItemDelegate
::
ChangeTextSize
(
qreal
factor
,
textChangeMode
changeMode
)
{
// round it to the nearest hundredth
factor
=
floor
(
factor
*
100
+
0.5
)
/
100.
;
if
(
scaleSize
==
changeMode
)
{
if
(
1
==
factor
)
...
...
src/domain/UBGraphicsTextItemDelegate.h
View file @
be45f656
...
...
@@ -114,6 +114,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
void
scaleTextSize
(
qreal
multiplyer
);
virtual
QVariant
itemChange
(
QGraphicsItem
::
GraphicsItemChange
change
,
const
QVariant
&
value
);
virtual
void
createControls
();
qreal
titleBarWidth
();
public
slots
:
void
contentsChanged
();
...
...
src/domain/UBSelectionFrame.cpp
View file @
be45f656
...
...
@@ -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 @
be45f656
...
...
@@ -103,6 +103,8 @@ private:
QPointF
mLastTranslateOffset
;
qreal
mRotationAngle
;
bool
mIsLocked
;
QList
<
DelegateButton
*>
mButtons
;
DelegateButton
*
mDeleteButton
;
...
...
src/frameworks/UBGeometryUtils.cpp
View file @
be45f656
...
...
@@ -188,7 +188,7 @@ QPolygonF UBGeometryUtils::arcToPolygon(const QLineF& startRadius, qreal spanAng
qreal
radiusLength
=
startRadius
.
length
();
qreal
angle
=
2
*
asin
(
width
/
(
2
*
radiusLength
))
*
180
/
PI
;
bool
overlap
=
a
bs
(
spanAngleInDegrees
)
>
360
-
angle
;
bool
overlap
=
qA
bs
(
spanAngleInDegrees
)
>
360
-
angle
;
if
(
overlap
)
spanAngleInDegrees
=
spanAngleInDegrees
<
0
?
-
360
:
360
;
...
...
src/frameworks/UBVersion.cpp
View file @
be45f656
...
...
@@ -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 @
be45f656
...
...
@@ -214,79 +214,39 @@ void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event)
QTreeWidget
::
focusInEvent
(
event
);
}
void
UBDocumentTreeWidget
::
dropEvent
(
QDropEvent
*
event
)
{
if
(
mDropTargetProxyTi
)
{
if
(
mDropTargetProxyTi
)
{
mDropTargetProxyTi
->
setBackground
(
0
,
mBackground
);
mDropTargetProxyTi
=
0
;
}
QTreeWidgetItem
*
underlyingItem
=
this
->
itemAt
(
event
->
pos
());
UBDocumentGroupTreeItem
*
groupItem
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
underlyingItem
);
if
(
groupItem
&&
mSelectedProxyTi
&&
mSelectedProxyTi
->
proxy
())
{
UBDocumentGroupTreeItem
*
sourceGroupItem
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
mSelectedProxyTi
->
parent
());
bool
isTrashItem
=
sourceGroupItem
&&
sourceGroupItem
->
isTrashFolder
();
if
((
isTrashItem
&&
!
groupItem
->
isTrashFolder
())
||
(
!
isTrashItem
&&
mSelectedProxyTi
->
proxy
()
->
groupName
()
!=
groupItem
->
groupName
()))
{
QString
groupName
;
if
(
groupItem
->
isTrashFolder
())
{
QString
oldGroupName
=
mSelectedProxyTi
->
proxy
()
->
metaData
(
UBSettings
::
documentGroupName
).
toString
();
groupName
=
UBSettings
::
trashedDocumentGroupNamePrefix
+
oldGroupName
;
}
else
{
if
(
groupItem
->
groupName
()
==
UBApplication
::
app
()
->
documentController
->
defaultDocumentGroupName
())
groupName
=
""
;
else
groupName
=
groupItem
->
groupName
();
}
mSelectedProxyTi
->
proxy
()
->
setMetaData
(
UBSettings
::
documentGroupName
,
groupName
);
UBPersistenceManager
::
persistenceManager
()
->
persistDocumentMetadata
(
mSelectedProxyTi
->
proxy
());
QTreeWidgetItem
*
underlyingItem
=
this
->
itemAt
(
event
->
pos
());
mSelectedProxyTi
->
parent
()
->
removeChild
(
mSelectedProxyTi
);
// If the destination is a folder, move the selected document(s) there
UBDocumentGroupTreeItem
*
destinationFolder
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
underlyingItem
);
int
i
=
0
;
for
(
i
=
0
;
i
<
groupItem
->
childCount
();
i
++
)
{
QTreeWidgetItem
*
ti
=
groupItem
->
child
(
i
);
UBDocumentProxyTreeItem
*
pi
=
dynamic_cast
<
UBDocumentProxyTreeItem
*>
(
ti
);
if
(
pi
)
{
if
(
mSelectedProxyTi
->
proxy
()
->
metaData
(
UBSettings
::
documentDate
).
toString
()
>=
pi
->
proxy
()
->
metaData
(
UBSettings
::
documentDate
).
toString
())
{
break
;
}
}
}
groupItem
->
insertChild
(
i
,
mSelectedProxyTi
);
if
(
isTrashItem
)
mSelectedProxyTi
->
setFlags
(
mSelectedProxyTi
->
flags
()
|
Qt
::
ItemIsEditable
);
if
(
groupItem
->
isTrashFolder
())
mSelectedProxyTi
->
setFlags
(
mSelectedProxyTi
->
flags
()
^
Qt
::
ItemIsEditable
);
expandItem
(
groupItem
);
scrollToItem
(
mSelectedProxyTi
);
if
(
destinationFolder
)
{
UBDocumentProxyTreeItem
*
lastMovedDocument
;
foreach
(
QTreeWidgetItem
*
item
,
this
->
selectedItems
())
{
UBDocumentProxyTreeItem
*
document
=
dynamic_cast
<
UBDocumentProxyTreeItem
*>
(
item
);
if
(
document
&&
moveDocument
(
document
,
destinationFolder
))
lastMovedDocument
=
document
;
}
// disabled, as those 2 calls are buggy on windows, the item disappears if we selected them
//
setCurrentItem
(
mSelectedProxyTi
);
mSelectedProxyTi
->
setSelected
(
true
);
if
(
lastMovedDocument
)
{
expandItem
(
destinationFolder
);
scrollToItem
(
lastMovedDocument
);
setCurrentItem
(
lastMovedDocument
);
lastMovedDocument
->
setSelected
(
true
);
event
->
setDropAction
(
Qt
::
IgnoreAction
);
event
->
accept
();
}
}
else
{
// If the destination is a document and the dropped item is a page, copy the page to that document
else
{
QTreeWidgetItem
*
underlyingTreeItem
=
this
->
itemAt
(
event
->
pos
());
UBDocumentProxyTreeItem
*
targetProxyTreeItem
=
dynamic_cast
<
UBDocumentProxyTreeItem
*>
(
underlyingTreeItem
);
...
...
@@ -393,6 +353,67 @@ void UBDocumentTreeWidget::documentUpdated(UBDocumentProxy *pDocument)
}
}
/**
* @brief Move a document to the specified destination folder
* @param document Pointer to the document to move
* @param destinationFolder Pointer to the folder to move the document to
* @return true if document was moved successfully, false otherwise
*/
bool
UBDocumentTreeWidget
::
moveDocument
(
UBDocumentProxyTreeItem
*
document
,
UBDocumentGroupTreeItem
*
destinationFolder
)
{
if
(
!
document
||
!
(
document
->
proxy
())
||
!
destinationFolder
)
return
false
;
UBDocumentGroupTreeItem
*
sourceFolder
=
dynamic_cast
<
UBDocumentGroupTreeItem
*>
(
document
->
parent
());
bool
documentIsInTrash
=
(
sourceFolder
&&
sourceFolder
->
isTrashFolder
());
if
(
documentIsInTrash
&&
destinationFolder
->
isTrashFolder
())
return
false
;
if
(
!
documentIsInTrash
&&
document
->
proxy
()
->
groupName
()
==
destinationFolder
->
groupName
())
return
false
;
QString
destinationFolderName
;
if
(
destinationFolder
->
isTrashFolder
())
{
UBApplication
::
app
()
->
documentController
->
moveDocumentToTrash
(
sourceFolder
,
document
,
true
);
destinationFolderName
=
document
->
proxy
()
->
metaData
(
UBSettings
::
documentGroupName
).
toString
();
}
else
{
if
(
destinationFolder
->
groupName
()
==
UBApplication
::
app
()
->
documentController
->
defaultDocumentGroupName
())
destinationFolderName
=
""
;
else
destinationFolderName
=
destinationFolder
->
groupName
();
}
// Update the folder name in the document
document
->
proxy
()
->
setMetaData
(
UBSettings
::
documentGroupName
,
destinationFolderName
);
UBPersistenceManager
::
persistenceManager
()
->
persistDocumentMetadata
(
document
->
proxy
());
// Remove document from its old folder
document
->
parent
()
->
removeChild
(
document
);
// Insert document at the right spot in the destination folder (ordered by document date)
int
i
=
0
;
for
(
i
=
0
;
i
<
destinationFolder
->
childCount
();
i
++
)
{
QTreeWidgetItem
*
ti
=
destinationFolder
->
child
(
i
);
UBDocumentProxyTreeItem
*
pi
=
dynamic_cast
<
UBDocumentProxyTreeItem
*>
(
ti
);
if
(
pi
&&
document
->
proxy
()
->
metaData
(
UBSettings
::
documentDate
).
toString
()
>=
pi
->
proxy
()
->
metaData
(
UBSettings
::
documentDate
).
toString
())
break
;
}
destinationFolder
->
insertChild
(
i
,
document
);
// Update editable status of the document if it was moved to or from the trash
if
(
documentIsInTrash
)
document
->
setFlags
(
document
->
flags
()
|
Qt
::
ItemIsEditable
);
if
(
destinationFolder
->
isTrashFolder
())
document
->
setFlags
(
document
->
flags
()
^
Qt
::
ItemIsEditable
);
return
true
;
}
UBDocumentProxyTreeItem
::
UBDocumentProxyTreeItem
(
QTreeWidgetItem
*
parent
,
UBDocumentProxy
*
proxy
,
bool
isEditable
)
:
QTreeWidgetItem
()
...
...
src/gui/UBDocumentTreeWidget.h
View file @
be45f656
...
...
@@ -35,6 +35,7 @@
class
UBDocumentProxy
;
class
UBDocumentProxyTreeItem
;
class
UBDocumentGroupTreeItem
;
class
UBDocumentTreeWidget
:
public
QTreeWidget
{
...
...
@@ -60,6 +61,7 @@ class UBDocumentTreeWidget : public QTreeWidget
void
autoScroll
();
private
:
bool
moveDocument
(
UBDocumentProxyTreeItem
*
document
,
UBDocumentGroupTreeItem
*
destinationFolder
);
UBDocumentProxyTreeItem
*
mSelectedProxyTi
;
QTreeWidgetItem
*
mDropTargetProxyTi
;
QBrush
mBackground
;
...
...
src/tools/UBGraphicsCompass.h
View file @
be45f656
...
...
@@ -125,25 +125,25 @@ class UBGraphicsCompass: public QObject, public QGraphicsRectItem, public UBItem
bool
mDrewCenterCross
;
// Constants
static
const
int
sNeedleLength
=
1
8
;
static
const
int
sNeedleLength
=
1
2
;
static
const
int
sNeedleWidth
=
3
;
static
const
int
sNeedleBaseLength
=
12
;
static
const
int
sNeedleBaseWidth
=
12
;
static
const
int
sNeedleBaseLength
=
9
;
static
const
int
sNeedleBaseWidth
=
9
;
static
const
int
sNeedleArmLeftWidth
=
1
8
;
static
const
int
sNeedleArmRigthWidth
=
24
;
static
const
int
sNeedleArmLeftWidth
=
1
2
;
static
const
int
sNeedleArmRigthWidth
=
16
;
static
const
int
sPencilLength
=
12
;
static
const
int
sPencilWidth
=
3
;
static
const
int
sPencilWidth
=
2
;
static
const
int
sPencilBaseLength
=
18
;
static
const
int
sPencilBaseWidth
=
12
;
static
const
int
sPencilBaseLength
=
9
;
static
const
int
sPencilBaseWidth
=
9
;
static
const
int
sPencilArmLeftWidth
=
24
;
static
const
int
sPencilArmRightWidth
=
1
8
;
static
const
int
sPencilArmLeftWidth
=
16
;
static
const
int
sPencilArmRightWidth
=
1
2
;
static
const
int
sCornerRadius
=
3
;
static
const
int
sCornerRadius
=
2
;
static
const
QRect
sDefaultRect
;
static
const
int
sMinRadius
;
...
...
src/tools/UBGraphicsProtractor.cpp
View file @
be45f656
...
...
@@ -41,6 +41,7 @@
const
QRectF
UBGraphicsProtractor
::
sDefaultRect
=
QRectF
(
-
250
,
-
250
,
500
,
500
);
const
qreal
UBGraphicsProtractor
::
minRadius
=
70
;
UBGraphicsProtractor
::
UBGraphicsProtractor
()
:
QGraphicsEllipseItem
(
sDefaultRect
)
...
...
@@ -213,11 +214,13 @@ void UBGraphicsProtractor::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
case
Resize
:
prepareGeometryChange
();
setTransform
(
QTransform
::
fromTranslate
(
rect
().
center
().
x
(),
rect
().
center
().
y
()),
true
);
setTransform
(
QTransform
::
fromScale
(
scaleFactor
,
scaleFactor
),
true
);
setTransform
(
QTransform
::
fromTranslate
(
-
rect
().
center
().
x
(),
-
rect
().
center
().
y
()),
true
);
mScaleFactor
*=
scaleFactor
;
if
(
radius
()
*
mScaleFactor
*
scaleFactor
>
minRadius
)
{
prepareGeometryChange
();
setTransform
(
QTransform
::
fromTranslate
(
rect
().
center
().
x
(),
rect
().
center
().
y
()),
true
);
setTransform
(
QTransform
::
fromScale
(
scaleFactor
,
scaleFactor
),
true
);
setTransform
(
QTransform
::
fromTranslate
(
-
rect
().
center
().
x
(),
-
rect
().
center
().
y
()),
true
);
mScaleFactor
*=
scaleFactor
;
}
break
;
case
MoveMarker
:
...
...
src/tools/UBGraphicsProtractor.h
View file @
be45f656
...
...
@@ -119,6 +119,7 @@ class UBGraphicsProtractor : public UBAbstractDrawRuler, public QGraphicsEllipse
QGraphicsSvgItem
*
mRotateSvgItem
;
static
const
QRectF
sDefaultRect
;
static
const
qreal
minRadius
;
virtual
void
rotateAroundCenter
(
qreal
angle
);
virtual
QPointF
rotationCenter
()
const
;
...
...
src/tools/UBGraphicsTriangle.cpp
View file @
be45f656
...
...
@@ -49,6 +49,7 @@ UBGraphicsTriangle::UBGraphicsTriangle()
,
mResizing1
(
false
)
,
mResizing2
(
false
)
,
mRotating
(
false
)
,
mShouldPaintInnerTriangle
(
true
)
{
setRect
(
sDefaultRect
,
sDefaultOrientation
);
...
...
@@ -224,6 +225,29 @@ void UBGraphicsTriangle::calculatePoints(const QRectF& r)
C2
.
setX
(
r
.
left
()
+
L
);
C2
.
setY
(
r
.
bottom
()
-
d
);
break
;
}
bool
paintInnerTriangle
=
true
;
switch
(
mOrientation
)
{
case
BottomLeft
:
if
(
B2
.
x
()
>
C2
.
x
()
||
B2
.
y
()
<
A2
.
y
())
paintInnerTriangle
=
false
;
break
;
case
TopLeft
:
if
(
B2
.
x
()
>
C2
.
x
()
||
B2
.
y
()
>
A2
.
y
())
paintInnerTriangle
=
false
;
break
;
case
TopRight
:
if
(
B2
.
x
()
<
C2
.
x
()
||
B2
.
y
()
>
A2
.
y
())
paintInnerTriangle
=
false
;
break
;
case
BottomRight
:
if
(
B2
.
x
()
<
C2
.
x
()
||
B2
.
y
()
<
A2
.
y
())
paintInnerTriangle
=
false
;
break
;
}
mShouldPaintInnerTriangle
=
paintInnerTriangle
;
W1
=
rect
().
height
()
*
d
/
C
;
H1
=
rect
().
width
()
*
d
/
C
;
...
...
@@ -251,40 +275,54 @@ void UBGraphicsTriangle::paint(QPainter *painter, const QStyleOptionGraphicsItem
QPolygonF
polygon
;
QLinearGradient
gradient1
(
QPointF
(
A1
.
x
(),
0
),
QPointF
(
A2
.
x
(),
0
));
gradient1
.
setColorAt
(
0
,
edgeFillColor
());
gradient1
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient1
);
polygon
<<
A1
<<
A2
<<
B2
<<
B1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
QLinearGradient
gradient2
(
QPointF
(
0
,
B1
.
y
()),
QPointF
(
0
,
B2
.
y
()));
gradient2
.
setColorAt
(
0
,
edgeFillColor
());
gradient2
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient2
);
polygon
<<
B1
<<
B2
<<
C2
<<
C1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
QLinearGradient
gradient3
(
CC
,
C2
);
gradient3
.
setColorAt
(
0
,
edgeFillColor
());
gradient3
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient3
);
polygon
<<
C1
<<
C2
<<
A2
<<
A1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
painter
->
setBrush
(
Qt
::
NoBrush
);
painter
->
setPen
(
drawColor
());
if
(
mShouldPaintInnerTriangle
)
{
QLinearGradient
gradient1
(
QPointF
(
A1
.
x
(),
0
),
QPointF
(
A2
.
x
(),
0
));
gradient1
.
setColorAt
(
0
,
edgeFillColor
());
gradient1
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient1
);
polygon
<<
A1
<<
A2
<<
B2
<<
B1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
QLinearGradient
gradient2
(
QPointF
(
0
,
B1
.
y
()),
QPointF
(
0
,
B2
.
y
()));
gradient2
.
setColorAt
(
0
,
edgeFillColor
());
gradient2
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient2
);
polygon
<<
B1
<<
B2
<<
C2
<<
C1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
QLinearGradient
gradient3
(
CC
,
C2
);
gradient3
.
setColorAt
(
0
,
edgeFillColor
());
gradient3
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient3
);
polygon
<<
C1
<<
C2
<<
A2
<<
A1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
painter
->
setBrush
(
Qt
::
NoBrush
);
painter
->
setPen
(
drawColor
());
polygon
<<
A1
<<
B1
<<
C1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
polygon
<<
A2
<<
B2
<<
C2
;
painter
->
drawPolygon
(
polygon
);
}
polygon
<<
A1
<<
B1
<<
C1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
else
{
QLinearGradient
gradient
(
QPointF
(
A1
.
x
(),
0
),
QPointF
(
C1
.
x
(),
0
));
gradient
.
setColorAt
(
0
,
edgeFillColor
());
gradient
.
setColorAt
(
1
,
middleFillColor
());
painter
->
setBrush
(
gradient
);
painter
->
setPen
(
drawColor
());
polygon
<<
A1
<<
B1
<<
C1
;
painter
->
drawPolygon
(
polygon
);
polygon
.
clear
();
}
polygon
<<
A2
<<
B2
<<
C2
;
painter
->
drawPolygon
(
polygon
);
paintGraduations
(
painter
);
...
...
@@ -329,9 +367,11 @@ QPainterPath UBGraphicsTriangle::shape() const
tShape
.
addPolygon
(
tPolygon
);
tPolygon
.
clear
();
tPolygon
<<
A2
<<
B2
<<
C2
;
tShape
.
addPolygon
(
tPolygon
);
tPolygon
.
clear
();
if
(
mShouldPaintInnerTriangle
)
{
tPolygon
<<
A2
<<
B2
<<
C2
;
tShape
.
addPolygon
(
tPolygon
);
tPolygon
.
clear
();
}
//qDebug() << "UBGraphicsTriangle shape()"<<"A1 ="<<A1<<"B1 ="<<B1<<"C1 ="<<C1;
//qDebug() << "UBGraphicsTriangle shape()"<<"A2 ="<<A2<<"B2 ="<<B2<<"C2 ="<<C2;
...
...
@@ -607,19 +647,21 @@ QRectF UBGraphicsTriangle::vFlipRect() const
QRectF
UBGraphicsTriangle
::
rotateRect
()
const
{
QPointF
p
(
C2
);
qreal
buttonsX
=
vFlipRect
().
left
();
switch
(
mOrientation
)
{
case
BottomLeft
:
p
+=
QPointF
(
20
,
5
);
p
=
QPointF
(
qMax
(
p
.
x
()
+
20
,
buttonsX
),
p
.
y
()
+
5
);
break
;
case
TopLeft
:
p
+=
QPointF
(
20
,
-
5
-
mRotateSvgItem
->
boundingRect
().
height
());
p
=
QPointF
(
qMax
(
p
.
x
()
+
20
,
buttonsX
),
p
.
y
()
-
5
-
mRotateSvgItem
->
boundingRect
().
height
());
break
;
case
TopRight
:
p
+=
QPointF
(
-
20
-
mRotateSvgItem
->
boundingRect
().
width
(),
-
5
-
mRotateSvgItem
->
boundingRect
().
height
());
p
=
QPointF
(
qMin
(
p
.
x
()
-
20
-
mRotateSvgItem
->
boundingRect
().
width
(),
buttonsX
),
p
.
y
()
-
5
-
mRotateSvgItem
->
boundingRect
().
height
());
break
;
case
BottomRight
:
p
+=
QPointF
(
-
20
-
mRotateSvgItem
->
boundingRect
().
width
(),
5
);
p
=
QPointF
(
qMin
(
p
.
x
()
-
20
-
mRotateSvgItem
->
boundingRect
().
width
(),
buttonsX
),
p
.
y
()
+
5
);
break
;
}
return
QRectF
(
p
,
QSizeF
(
mRotateSvgItem
->
boundingRect
().
size
()));
...
...
@@ -821,9 +863,9 @@ void UBGraphicsTriangle::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
mShowButtons
=
true
;
mCloseSvgItem
->
setVisible
(
true
);
mHFlipSvgItem
->
setVisible
(
true
);
mVFlipSvgItem
->
setVisible
(
true
);
mRotateSvgItem
->
setVisible
(
true
);
mHFlipSvgItem
->
setVisible
(
contains
(
hFlipRect
())
);
mVFlipSvgItem
->
setVisible
(
contains
(
vFlipRect
())
);
mRotateSvgItem
->
setVisible
(
contains
(
rotateRect
())
);
if
(
resize1Polygon
().
containsPoint
(
event
->
pos
().
toPoint
(),
Qt
::
OddEvenFill
))
setCursor
(
resizeCursor1
());
...
...
@@ -875,9 +917,9 @@ void UBGraphicsTriangle::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
currentTool
==
UBStylusTool
::
Play
)
{
mCloseSvgItem
->
setVisible
(
mShowButtons
);
mVFlipSvgItem
->
setVisible
(
mShowButtons
);
mHFlipSvgItem
->
setVisible
(
mShowButtons
);
mRotateSvgItem
->
setVisible
(
mShowButtons
);
mVFlipSvgItem
->
setVisible
(
mShowButtons
&&
contains
(
vFlipRect
())
);
mHFlipSvgItem
->
setVisible
(
mShowButtons
&&
contains
(
hFlipRect
())
);
mRotateSvgItem
->
setVisible
(
mShowButtons
&&
contains
(
rotateRect
())
);
if
(
resize1Polygon
().
containsPoint
(
event
->
pos
().
toPoint
(),
Qt
::
OddEvenFill
))
setCursor
(
resizeCursor1
());
...
...
@@ -950,6 +992,35 @@ void UBGraphicsTriangle::DrawLine(const QPointF &scenePos, qreal width)
UBDrawingController
::
drawingController
()
->
stylusTool
()
!=
UBStylusTool
::
Marker
);
}
/**
* @brief Check whether a given QRectF is inside the triangle (A1, B1, C1).
*
* Returns true if any corner of the rectangle is within the triangle or, if strict is set to true,
* if all corners of the rectangle are within the triangle.
*/
bool
UBGraphicsTriangle
::
contains
(
const
QRectF
&
rect
,
bool
strict
)
{
QPolygonF
poly
;
poly
<<
A1
<<
B1
<<
C1
<<
A1
;
QPainterPath
path
;
path
.
addPolygon
(
poly
);
QList
<
QPointF
>
points
;
points
<<
rect
.
bottomRight
()
<<
rect
.
topLeft
()
<<
rect
.
topRight
();
bool
inside
=
path
.
contains
(
rect
.
bottomLeft
());
foreach
(
QPointF
p
,
points
)
{
if
(
strict
)
inside
=
inside
&&
path
.
contains
(
p
);
else
inside
=
inside
||
path
.
contains
(
p
);
}
return
inside
;
}
void
UBGraphicsTriangle
::
EndLine
()
{
}
...
...
src/tools/UBGraphicsTriangle.h
View file @
be45f656
...
...
@@ -98,7 +98,7 @@ class UBGraphicsTriangle : public UBAbstractDrawRuler, public QGraphicsPolygonIt
void
setRect
(
const
QRectF
&
rect
,
UBGraphicsTriangleOrientation
orientation
)
{
qDebug
()
<<
"setRect"
<<
"rect = "
<<
rect
<<
"orientation :"
<<
orientation
;
//
qDebug() << "setRect"<<"rect = "<<rect<<"orientation :"<<orientation;
setRect
(
rect
.
x
(),
rect
.
y
(),
rect
.
width
(),
rect
.
height
(),
orientation
);
}
...
...
@@ -178,11 +178,15 @@ class UBGraphicsTriangle : public UBAbstractDrawRuler, public QGraphicsPolygonIt
QPointF
CC
;
// Hyp. fillining gradient - top point
void
calculatePoints
(
const
QRectF
&
rect
);
bool
mShouldPaintInnerTriangle
;
static
const
int
d
=
70
;
// width of triangle border
static
const
int
sArrowLength
=
30
;
static
const
int
sMinWidth
=
38
0
;
static
const
int
sMinHeight
=
20
0
;
static
const
int
sMinWidth
=
24
0
;
static
const
int
sMinHeight
=
12
0
;
qreal
mStrokeWidth
;
bool
contains
(
const
QRectF
&
rect
,
bool
strict
=
true
);
};
#endif
/* UBGRAPHICSTRIANGLE_H_ */
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