diff --git a/OpenBoard.pro b/OpenBoard.pro index 2505bb5b..64955fb9 100644 --- a/OpenBoard.pro +++ b/OpenBoard.pro @@ -10,7 +10,7 @@ CONFIG += debug_and_release \ VERSION_MAJ = 1 VERSION_MIN = 3 -VERSION_PATCH = 4 +VERSION_PATCH = 5 VERSION_TYPE = r # a = alpha, b = beta, rc = release candidate, r = release, other => error VERSION_BUILD = 0 diff --git a/release_scripts/windows/OpenBoard.iss b/release_scripts/windows/OpenBoard.iss index 35003f86..51656008 100644 --- a/release_scripts/windows/OpenBoard.iss +++ b/release_scripts/windows/OpenBoard.iss @@ -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}" diff --git a/resources/i18n/OpenBoard_de.ts b/resources/i18n/OpenBoard_de.ts index 6ce93662..d7ca233e 100644 --- a/resources/i18n/OpenBoard_de.ts +++ b/resources/i18n/OpenBoard_de.ts @@ -169,7 +169,7 @@ Quit - Verlassen + Beenden Eraser @@ -409,7 +409,7 @@ Multi Screen - Geteilter Bildschirm + Mehrere Bildschirme Wide Size (16/9) @@ -477,7 +477,7 @@ Light - Licht + Hell Grid Light Background @@ -561,7 +561,7 @@ Highlight - Highlight + Hervorheben Ctrl+M @@ -569,7 +569,7 @@ Selector - Selector + Auswahl Select And Modify Objects @@ -697,7 +697,7 @@ Flash Trap - Falle einblenden + Einblendung einfangen Trap Flash Content @@ -705,7 +705,7 @@ Web Trap - Webfalle + Internet einfangen Trap Web Content @@ -793,11 +793,11 @@ Open Tutorial - + Anleitung öffnen Open the tutorial web page - + Öffnen der Anleitung im Internet @@ -854,7 +854,7 @@ Are you sure you want to remove 1 page from the selected document '%0'? - Wollen Sie wirklich 1 Seite des gewählten Dokuments '%0' entfernen? + Wollen Sie wirklich die ausgewählte Seite des Dokuments '%0' entfernen? @@ -876,30 +876,30 @@ New update available, would you go to the web page ? - Neues Update verfügbar, möchten Sie auf die Webseite gehen? + Neue Aktualisierung verfügbar, möchten Sie auf die Internetseite gehen? No update available - Kein Update verfügbar + Keine Aktualisierung verfügbar Update available - Update verfügbar + Aktualisierung verfügbar Update - Update + Aktualisierung UBBoardController Downloading content %1 failed - Fehler beim Download von %1 + Fehler beim Herunterladen von %1 Download finished - Download beendet + Herunterladen beendet Unknown tool type %1 @@ -919,11 +919,11 @@ Delete page %1 from document - Seite %1 des Dokuments löschen + Seite %1 des Dokuments löschen Page %1 deleted - Seite %1 gelöscht + Seite %1 gelöscht Add file operation failed: file copying error @@ -939,11 +939,11 @@ Saving document... - + Dokument wird gespeichert... Document has just been saved... - + Dokument wurde gespeichert... @@ -1004,7 +1004,7 @@ Show OpenBoard - + Zeige OpenBoard @@ -1031,7 +1031,7 @@ Duplicating Document %1 - Dokument %1 wird kopiert + Dokument %1 wird dupliziert Document %1 copied @@ -1051,7 +1051,7 @@ Empty Trash - Leerer Papierkorb + Papierkorb leeren Are you sure you want to empty trash? @@ -1063,7 +1063,7 @@ Emptied trash - Papierkorb geleert + Papierkorb wurde geleert Remove Folder @@ -1071,7 +1071,7 @@ Are you sure you want to remove the folder '%1' and all its content? - Möchten Sie den Ordner '%1 mit dem gesamten Inhalt wirklich entfernen? + Möchten Sie den Ordner '%1 und seinen gesamten Inhalt wirklich entfernen? No document selected! @@ -1099,7 +1099,7 @@ Empty - Leer + Leeren Trash @@ -1138,15 +1138,15 @@ The document '%1' has been generated with a newer version of OpenBoard (%2). By opening it, you may lose some information. Do you want to proceed? - + Das Dokument '%1' wurde mit einer neueren Version von OpenBoard erstellt (%2). Beim Öffnen können einige Informationen verloren gehen. Möchten Sie fortfahren? Are you sure you want to remove all selected documents? - + Möchten sie wirklich alle ausgewählten Dokumente entfernen? Remove multiple documents - + Mehrere Dokumente entfernen @@ -1185,11 +1185,11 @@ Import of file %1 successful. - Import des Dokuments %1 erfolgreich. + Import der Datei %1 erfolgreich. Importing file %1 - Importieren von %1 + Datei %1 wird importiert @@ -1212,8 +1212,8 @@ %1 pages copied - %1 Seite kopiert - %1 Seiten kopiert + %1 Seite wurde kopiert + %1 Seiten wurden kopiert @@ -1282,19 +1282,19 @@ Export to OpenBoard Format - + In das OpenBoard Format exportieren Export failed: location not writable - + Export fehlgeschlagen: Zielpfad nicht beschreibbar Export failed - + Export fehlgeschlagen Unable to export to the selected location. You do not have the permissions necessary to save the file. - + Export im ausgewählten Zielpfad nicht möglich. Sie haben nicht die erforderliche Berechtigung um die Datei zu speichern. @@ -1317,15 +1317,15 @@ Export failed: location not writable - + Export fehlgeschlagen: Zielpfad nicht beschreibbar. Export failed - + Export fehlgeschlagen Unable to export to the selected location. You do not have the permissions necessary to save the file. - + Export im ausgewählten Zielpfad nicht möglich. Sie haben nicht die erforderliche Berechtigung um die Datei zu speichern. @@ -1531,19 +1531,19 @@ UBGraphicsMediaItem Media resource couldn't be resolved - + Medienquelle konnte nicht aufgelöst werden Unsupported media format - + Medienformat wird nicht unterstützt Media playback service not found - + Dienst zum Abspielen von Mediainhalten nicht gefunden Media error: - + Medienfehler: @@ -1582,11 +1582,11 @@ UBGraphicsWidgetItemDelegate Frozen - Erstarrt + Fixiert Transform as Tool - In Extra umwandeln + In Werkzeug umwandeln @@ -1601,7 +1601,7 @@ Import of file %1 failed. - Import der Datei %1 fehlgeschlagen. + Import der Datei %1 fehlgeschlagen. Import successful. @@ -1628,7 +1628,7 @@ OpenBoard (*.ubz) - + OpenBoard (*.ubz) @@ -1724,7 +1724,7 @@ Do you want to ignore these errors for this host? %2 -Möchten Sie diese Fehler auf diesem Computer ignorieren? +Möchten Sie diese Fehler für diesen Computer ignorieren? Yes @@ -1739,15 +1739,15 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren? UBOpenSankoreImporterWidget Open-Sankore Documents Detected - + Geöffnete Open-Sankore Dokumente festgestellt Show this panel next time - + Diesen Dialog erneut anzeigen 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. - + 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. Cancel @@ -1755,11 +1755,11 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren? Proceed - + Fortfahren 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. - + 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. @@ -1774,7 +1774,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren? has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well. - + Verbindung zum Dokumentenarchiv verloren. Um fehlerhafte Daten zu vermeiden muss die Anwendung leider geschlossen werden. Letzte Änderungen können auch verloren gehen. @@ -1828,7 +1828,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren? Podcast recording error (%1) - Podcast registriert einen Fehler (%1) + Fehler bei der Podcast Aufnahme (%1) Default Audio Input @@ -2002,7 +2002,7 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren? Update - Update + Aktualisierung Select a backup folder @@ -2020,7 +2020,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr Files update results - Ergebnis des Daten-Updates + Ergebnis der Dateien-Aktualisierung Updating file @@ -2046,7 +2046,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr UBWidgetUniboardAPI %0 called (method=%1, status=%2) - %0 abgerufen (Methode=%1, Status=%2) + %0 aufgerufen (Methode=%1, Status=%2) @@ -2149,7 +2149,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr Download canceled: %1 - Download abgebrochen %1 + Herunterladen abgebrochen %1 Error opening saved file: %1 @@ -2246,19 +2246,19 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr WBTabBar New &Tab - Tab Neu & + &Tab Neu Clone Tab - Tab Klon + Tab duplizieren &Close Tab - Tab & Schließen + Tab &Schließen Close &Other Tabs - Tabs Schließen & Andere + &Andere Tabs schließen Reload Tab @@ -2319,7 +2319,7 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr Download PDF Document: would you prefer to download the PDF file or add it to the current OpenBoard document? - + PDF Dokument herunterladen: Möchten Sie die PDF-Datei herunterladen oder sie zum aktuellen OpenBoard Dokument hinzufügen? @@ -2373,7 +2373,7 @@ p, li { white-space: pre-wrap; } Restore credentials on reboot - + Zugangsdaten beim Neustarten wiederherstellen OpenBoard @@ -2392,7 +2392,7 @@ p, li { white-space: pre-wrap; } Opacity - Lichtundurchlässigkeit + Deckkraft Line Width @@ -2404,7 +2404,7 @@ p, li { white-space: pre-wrap; } Strong - Stark + Dick Fine @@ -2442,7 +2442,7 @@ p, li { white-space: pre-wrap; } documents OpenBoard Documents - + OpenBoard Dokumente @@ -2529,11 +2529,11 @@ p, li { white-space: pre-wrap; } Software Update - Software-Update + Software-Aktualisierung Check software update at launch - Software-Update beim Start prüfen + Software-Aktualisierung beim Start prüfen Licences @@ -2586,19 +2586,19 @@ p, li { white-space: pre-wrap; } Open-Sankoré Importer - + Open-Sankoré Importer Check if Open-Sankoré data could be imported at launch - + Prüfen, ob Open-Sankoré Daten beim Start importiert werden können Use system keyboard (recommended) - + Benutze System-Tastatur (empfohlen) Built-in virtual keyboard button size: - + Tastengröße der integrierten virtuellen Tastatur diff --git a/resources/i18n/OpenBoard_eu.ts b/resources/i18n/OpenBoard_eu.ts new file mode 100644 index 00000000..2d3247cb --- /dev/null +++ b/resources/i18n/OpenBoard_eu.ts @@ -0,0 +1,3187 @@ + + + + + BlackoutWidget + + + Click to Return to Application + Egin klik aplikaziora bueltatzeko + + + + DownloadDialog + + + Downloads + Deskargak + + + + Clean Up + Garbitu + + + + 0 Items + 0 item + + + + DownloadItem + + + Form + Formularioa + + + + Filename + Fitxategi izena + + + + Try Again + Saiatu berriro + + + + Stop + Gelditu + + + + Open + Ireki + + + + IntranetPodcastPublishingDialog + + + Publish Podcast to YouTube + Publikatu podcasta YouTuben + + + + Title + Izenburua + + + + Description + Deskribapena + + + + Author + Egilea + + + + MainWindow + + + + + OpenBoard + OpenBoard + + + + + Board + Arbela + + + + + Web + Web + + + + + Documents + Dokumentuak + + + + + Stylus + Arkatza + + + + Ctrl+T + Ktrl+T + + + + Backgrounds + Atzeko planoak + + + + Change Background + Aldatu atzeko planoa + + + + Undo + Desegin + + + + Ctrl+Z + Ktrl+Z + + + + Redo + Berregin + + + + Ctrl+Y + Ktrl+Y + + + + Previous + Aurrekoa + + + + + Previous Page + Aurreko orria + + + + PgUp + OrriaGora + + + + Next + Hurrengoa + + + + + Next Page + Hurrengo orria + + + + PgDown + OrriaBehera + + + + Manage Documents + Dokumentuak kudeatu + + + + Ctrl+D + Ktrl+D + + + + Web Browsing + Sare arakatzea + + + + Ctrl+W + Ktrl+W + + + + + + + Line + Lerroa + + + + Small Line + Lerro txikia + + + + Medium Line + Lerro ertaina + + + + Large Line + Lerro handia + + + + Quit + Itxi + + + + Quit OpenBoard + Itxi OpenBoard + + + + + + + Eraser + Borragoma + + + + Smalle Eraser + Borragoma txikia + + + + Medium Eraser + Borragoma ertaina + + + + Large Eraser + Borragoma handia + + + + + + + + + Color + Kolorea + + + + Back + Atzera + + + + Left + Ezkerrera + + + + Forward + Aurrera + + + + Right + Eskuinera + + + + Reload + Birkargatu + + + + Reload Current Page + Birkargatu uneko orria + + + + Home + Hasiera-orria + + + + Load Home Page + Kargatu hasierako orria + + + + Bookmarks + Laster-markak + + + + Show Bookmarks + Erakutsi lastermarkak + + + + Bookmark + Laster-marka + + + + Add Bookmark + Gehitu laster-marka + + + + Display Board + Erakutsi arbela + + + + Ctrl+B + Ktrl+B + + + + Erase + Ezabatu + + + + Erase Content + Ezabatu edukia + + + + Preferences + Ezarpenak + + + + Display Preferences + Erakutsi ezarpenak + + + + Library + Liburutegia + + + + Show Library + Erakutsi liburutegia + + + + Ctrl+L + Ktrl+L + + + + Show Desktop + Erakutsi mahaigaina + + + + Show Computer Desktop + Erakutsi ordenagailuaren mahaigaina + + + + Ctrl+Shift+H + Ktrl+Shift+H + + + + Bigger + Handiagoa + + + + + Zoom In + Zoom egin + + + + Ctrl++ + Ktrl++ + + + + Smaller + Txikiagoa + + + + + Zoom Out + Zooma kendu + + + + Ctrl+- + Ktrl+- + + + + New Folder + Karpeta berria + + + + Create a New Folder + Sortu karpeta berria + + + + New Document + Dokumentu berria + + + + Create a New Document + Sortu dokumentu berria + + + + Import + Inportatu + + + + Import a Document + Inportatu dokumentua + + + + Export + Esportatu + + + + Export a Document + Esportatu dokumentua + + + + Open in Board + Ireki arbelean + + + + Open Page in Board + Ireki orria arbelean + + + + Ctrl+O + Ktrl+O + + + + Duplicate + Bikoiztu + + + + Duplicate Selected Content + Bikoiztu hautatutako edukia + + + + Delete + Ezabatu + + + + Delete Selected Content + Ezabatu hautatutako edukia + + + + Del + Ezab + + + + Add to Working Document + Gehitu laneko dokumentura + + + + Add Selected Content to Open Document + Gehitu hautatuko edukia irekitako dokumentura + + + + + Add + Gehitu + + + + Add Content to Document + Gehitu edukia dokumentura + + + + Rename + Berrizendatu + + + + Rename Content + Berrizendatu edukia + + + + + Tools + Tresnak + + + + + Display Tools + Erakutsi tresnak + + + + Multi Screen + Pantaila anitzak + + + + + Wide Size (16/9) + Tamaina panoramikoa (16/9) + + + + Use Document Wide Size (16/9) + Erabili tamaina zabaleko dokumentua (16/9) + + + + + Regular Size (4/3) + Ohiko tamaina (4/3) + + + + Use Document Regular Size (4/3) + Erabili dokumentu tamaina arrunta (4/3) + + + + + Custom Size + Tamaina pertsonalizatua + + + + Use Custom Document Size + Erabili dokumentu tamaina pertsonalizatua + + + + Stop Loading + Utzi kargatzeari + + + + Stop Loading Web Page + Utzi web orria kargatzeari + + + + Cut + Moztu + + + + Copy + Kopiatu + + + + Paste + Itsatsi + + + + Sleep + Lo + + + + Put Presentation to Sleep + Eraman aurkezpena lotara + + + + Virtual Keyboard + Teklatu birtuala + + + + Display Virtual Keyboard + Erakutsi teklatu birtuala + + + + + Plain Light Background + Atzeko plano argia + + + + + + Light + Argia + + + + + Grid Light Background + Atzeko plano sareta argia + + + + + Ruled Light Background + Atzeko plano marradun argia + + + + + Plain Dark Background + Atzeko plano iluna + + + + + + Dark + Iluna + + + + + Grid Dark Background + Atzeko plano sareta iluna + + + + + Ruled Dark Background + Atzeko plano marradun iluna + + + + Podcast + Podcast-a + + + + Record Presentation to Video + Grabatu aurkezpena bideora + + + + Record + Grabatu + + + + Start Screen Recording + Hasi pantaila grabatzen + + + + Erase Items + Ezabatu itemak + + + + Erase All Items + Ezabatu item guztiak + + + + + Erase Annotations + Ezabatu oharrak + + + + Erase All Annotations + Ezabatu ohar guztiak + + + + Clear Page + Garbitu orria + + + + Clear All Elements + Garbitu elementu guztiak + + + + Pen + Bolaluma + + + + Annotate Document + Gehit oharrak dokumentuan + + + + Ctrl+I + Ktrl+I + + + + Erase Annotation + Ezabatu oharra + + + + Ctrl+E + Ktrl+E + + + + Marker + Errotulagailua + + + + Highlight + Azpimarratu + + + + Ctrl+M + Ktrl+M + + + + Selector + Aukeratzailea + + + + Select And Modify Objects + Aukeratu eta eraldatu objektuak + + + + Ctrl+F + Ktrl+F + + + + Hand + Eskua + + + + Scroll Page + Jeitsi orria + + + + Laser Pointer + Laser puntua + + + + Virtual Laser Pointer + Laser puntu birtuala + + + + Ctrl+G + Ktrl+G + + + + Draw Lines + Marraztu lerroak + + + + Ctrl+J + Ktrl+J + + + + Text + Testua + + + + Write Text + Idatzi testua + + + + Ctrl+K + Ktrl+K + + + + Capture + Kapturatu + + + + + Capture Part of the Screen + Kapturatu pantailaren zati bat + + + + + Add To Current Page + Gehitu uneko orrira + + + + Add Item To Current Page + Gehitu itema uneko orrira + + + + Add To New Page + Gehitu orri berrira + + + + Add Item To New Page + Gehitu itema orri berrira + + + + Add To Library + Gehitu liburutegira + + + + Add Item To Library + Gehitu itema liburutegira + + + + Pages + Orriak + + + + + Create a New Page + Sortu orri berria + + + + New Page + Orri berria + + + + Duplicate Page + Bikoiztu orria + + + + Duplicate the Current Page + Bikoiztu uneko orria + + + + Import Page + Inportatu orria + + + + Import an External Page + Inportatu kanpoko orria + + + + Pause + Gelditu + + + + Pause Podcast Recording + Gelditu Podcast-aren grabaketa + + + + Podcast Config + Podcast konfiguratu + + + + Configure Podcast Recording + Konfiguratu podcast-aren grabaketa + + + + Flash Trap + + + + + Trap Flash Content + + + + + Web Trap + + + + + Trap Web Content + + + + + Custom Capture + Pertsonalizatutako kaptura + + + + Window Capture + Leiho kaptura + + + + Capture a Window + Leiho bat kapturatu + + + + Embed Web Content + Kabiatutako web edukia + + + + Capture Embeddable Web Content + Kapturatu kabiatutako web edukia + + + + Show on Display + Erakutsi pantailan + + + + Show Main Screen on Display Screen + Erakutsi pantaila nagusia erakusteko pantailan + + + + Erase all Annotations + Ezabatu ohar guztiak + + + + eduMedia + eduMedia + + + + Import eduMedia simulation + Inportatu eduMedia simulazioa + + + + Check Update + Egiaztatu eguneraketa + + + + Hide OpenBoard + Ezkutatu OpenBoard + + + + Hide OpenBoard Application + Ezkutatu OpenBoard aplikazioa + + + + Ctrl+H + Ktrl+H + + + + Play + Erreproduzitu + + + + Interact with items + Itemekin elkar ekin + + + + Erase Background + Ezabatu atzeko planoa + + + + Remove the backgound + Kendu atzeko planoa + + + + Open Tutorial + Ireki tutoriala + + + + Open the tutorial web page + Ireki tutorialaren web orria + + + + PasswordDialog + + + Authentication Required + Autentikazioa beharrezkoa + + + + Username: + Erabiltzailea: + + + + Password: + Pasahitza: + + + + ProxyDialog + + + Proxy Authentication + Proxy autentikazioa + + + + Connect to Proxy + Konektatu proxyra + + + + Username: + Erabiltzailea: + + + + Password: + Pasahitza: + + + + Save username and password for future use + Gorde erabltzailea eta pasahitza etorkizuneko erabiletarako + + + + QObject + + + Remove Page + Ezabatu orrialdea + + + + Are you sure you want to remove 1 page from the selected document '%0'? + Ziur zaude orri bat ezabatu nahi duzulua '%0' dokumentutik? + + + + UBApplication + + + Page Size + Orri tamaina + + + + Podcast + Podcast-a + + + + UBApplicationController + + + Web + Web-a + + + + Update available + Eguneratzea eskuragarri + + + + New update available, would you go to the web page ? + Eguneraketa berria eskuragarri, nahi duzu web orrira joan? + + + + Update + Eguneraketa + + + + No update available + Ez dago eguneraketarik eskuragarri + + + + UBBackgroundPalette + + + Grid size + Sareta tamaina + + + + UBBoardController + + + Group + Taldekatu + + + + Ungroup + Taldekatzea kendu + + + + Saving document... + Dokumentua gordetzen... + + + + Document has just been saved... + Dokumentua oraintxe izan da gordea... + + + + Delete page %1 from document + Ezabatu %1 orria dokumentutik + + + + Page %1 deleted + %1 orria ezabatua + + + + Downloading content %1 failed + %1 edukiaren deskargak huts egin du + + + + Download finished + Deskarga amaitua + + + + + + + Add file operation failed: file copying error + Fitxategia gehitzearen prozesuak huts egin du: fitxategi kopiaren errorea + + + + Unknown tool type %1 + %1 tresna mota ezezaguna + + + + Unknown content type %1 + %1 eduki mota ezezaguna + + + + Add Item + Gehitu itema + + + + All Supported (%1) + Denak onartuak (%1) + + + + UBBoardPaletteManager + + + CapturedImage + KapturatutakoIrudia + + + + Error Adding Image to Library + Errorea Irudai liburutegira gehitzean + + + + UBCachePropertiesWidget + + + Cache Properties + Katxearen propietateak + + + + Color: + Kolorea: + + + + Shape: + Forma: + + + + Size: + Tamaina: + + + + Close + Itxi + + + + UBDesktopPalette + + + Show OpenBoard + Erakutsi OpenBoard + + + + Capture Part of the Screen + Kapturatu pantailaren zati bat + + + + Capture the Screen + Kapturatu pantaila + + + + Show the stylus palette + Erakutsi stylus paleta + + + + Show Board on Secondary Screen + Erakutsi arbela bigarren pantailan + + + + Show Desktop on Secondary Screen + Erakutsi mahaigaina bigarren pantailan + + + + UBDocumentController + + + + Trash + Zakarrontzia + + + + Untitled Documents + Izengabeko dokumentuak + + + + + New Folder + Karpeta berria + + + + Add Folder of Images + Gehitu irudien karpeta + + + + Add Images + Gehitu irudiak + + + + Add Pages from File + Gehitu orriak fitxategitik + + + + Duplicating Document %1 + Bikoiztu %1 dokumentua + + + + Document %1 copied + %1 dokumentua kopiatua + + + + Empty Trash + Hustu zakarrontzia + + + + Are you sure you want to empty trash? + Ziur zaude zakarrontzia hustu nahi duzula? + + + + Emptying trash + Zakarrontzia husten + + + + Emptied trash + Zakarrontzia hutsa + + + + Remove Document + Ezabatu dokumentua + + + + Are you sure you want to remove the document '%1'? + Ziur zaude '%1' dokumentua ezabatu nahi duzula? + + + + Remove Folder + Ezabatu karpeta + + + + Are you sure you want to remove the folder '%1' and all its content? + Ziur zaude '%1' karpeta eta bere eduki guztia borratu nahi dituzula? + + + + Remove multiple documents + Ezabatu dokumentu anitzak + + + + Are you sure you want to remove all selected documents? + Ziur zaude aukeratutako dokumentuak ezabatu nahi dituzula? + + + + No document selected! + Ez da dokumenturik aukeratu! + + + + + Open Supported File + Ireki onartutako fitxategia + + + + + Importing file %1... + %1 fitxategia inportatzen... + + + + + Failed to import file ... + Fitxategiaren inportazioak huts egin du... + + + + Import all Images from Folder + Inportatu karpetako fitxategi guztiak + + + + Folder does not contain any image files + Karpetak ez dauka irudi fitxategirik + + + + Delete + Ezabatu + + + + Empty + Hustu + + + + Open Document + Ireki dokumentua + + + + The document '%1' has been generated with a newer version of OpenBoard (%2). By opening it, you may lose some information. Do you want to proceed? + '%1' dokumentua OpenBoarden bertsio berriago batekin (%2) sortua da. Irekitzean baliteke informazioa galtzea. Jarraitu nahi duzu? + + + + Add all Images to Document + Gehitu irudi guztiak dokumentura + + + + All Images (%1) + Irudi guztiak (%1) + + + + Selection does not contain any image files! + Aukeraketak ez du inongo irudi fitxategirik! + + + + Remove Page + Ezabatu orria + + + + Are you sure you want to remove %n page(s) from the selected document '%1'? + + Ziur zaude orri %n ezabatu nahi duzula '%1' dokumentutik? + Ziur zaude %n orri ezabatu nahi dituzula '%1' dokumentutik? + + + + + Page %1 + %1 orria + + + + UBDocumentManager + + + images + irudiak + + + + videos + bideoak + + + + objects + objektuak + + + + widgets + widgetak + + + + All supported files (*.%1) + Onartutako fitxategi guztiak (*.%1) + + + + + Inserting page %1 of %2 + %1 orria txertatzen %2tik + + + + Import successful. + Inportazio arrakastatsua. + + + + Importing file %1 + %1 inportatzen + + + + Import of file %1 successful. + %1 fitxategiaren inportazio arrakastatsua. + + + + File %1 saved + %1 fitxategia gordea + + + + UBDocumentNavigator + + + Page %0 + %0 orria + + + + UBDocumentTreeWidget + + + %1 (copy) + %1 (kopia) + + + + Copying page %1/%2 + %1/%2 orria kopiatzen + + + + %1 pages copied + + orri %1 kopiatua + %1 orri kopiatua + + + + + UBDownloadWidget + + + Downloading files + Fitxategiak jeisten + + + + Cancel + Ezeztatu + + + + UBExportAdaptor + + + Exporting document... + Dokumentua esportatzen... + + + + Export failed + Esportazioak huts egin du + + + + Unable to export to the selected location. You do not have the permissions necessary to save the file. + Ezin da aukeratutako tokira esportatu. Ez daukazu nahikoa baimenik fitxategia gordetzeko. + + + + Export failed: location not writable + Esportazioak huts egin du: helburuan ezin da idatzi + + + + Export successful. + Esportazio arrakastatsua. + + + + Warnings during export was appeared + Esportazioan zehar arazoak egon dira + + + + UBExportDocument + + + Page + Orria + + + + Export as UBZ File + UBZ fitxategi moduan esportatu + + + + Exporting %1 %2 of %3 + Esportatu %1 %2 %3tik + + + + Export to OpenBoard Format + Esportatu OpenBoard formatura + + + + UBExportFullPDF + + + Export as PDF File + Esportatu PDF fitxategira + + + + Export to PDF + Esportatu PDFra + + + + UBExportPDF + + + Export as PDF File + Esportatu PDF fitxategira + + + + Exporting page %1 of %2 + %1 orria %2tik esportatzen + + + + Export to PDF + Esportatu PDFra + + + + UBExportWeb + + + Page + Orria + + + + Export as Web data + Esportatu Web datu mduan + + + + Exporting document... + Dokumentua esportatzen... + + + + Export successful. + Esportazio arraskatatsua. + + + + Export failed. + Esportazioak huts egin du. + + + + Export to Web Browser + Esportatu web arakatzailera + + + + UBFeatureProperties + + + Add to page + Gehitu orrira + + + + Set as background + Ezarri atzeko plano moduan + + + + Add to library + Gehitu liburutegira + + + + Object informations + Objektuaren informazioa + + + + UBFeaturesActionBar + + + Add to favorites + Gehitu gogokoenetara + + + + Share + Elkarbanatu + + + + Search + Bilatu + + + + Rescan file system + Berreskaneatu fitxategi sistema + + + + Delete + Ezabatu + + + + Back to folder + Atzera karpetara + + + + Remove from favorites + Ezabatu gogokoenetatik + + + + Create new folder + Sortu karpeta berria + + + + UBFeaturesController + + + Audios + Audioak + + + + Movies + Filmak + + + + Pictures + Irudiak + + + + Animations + Animazioak + + + + Interactivities + Interjarduerak + + + + Applications + Aplikazioak + + + + Shapes + Formak + + + + Favorites + Gogokoenak + + + + Web search + Web bilaketak + + + + Trash + Zakarrontzia + + + + + ImportedImage + InportatutakoIrudia + + + + UBFeaturesNewFolderDialog + + + Accept + Onartu + + + + Cancel + Ezeztatu + + + + Enter a new folder name + Sartu karpeta izen berria + + + + UBFeaturesProgressInfo + + + Loading + Kargatzen + + + + UBGraphicsGroupContainerItemDelegate + + + Locked + Blokeatua + + + + Visible on Extended Screen + Hedatutako pantailan ikusgarri + + + + UBGraphicsItemDelegate + + + Locked + Blokeatua + + + + Visible on Extended Screen + Hedatutako pantailan ikusgarri + + + + Go to Content Source + Joan edukiaren jatorrira + + + + UBGraphicsMediaItem + + + Media resource couldn't be resolved + Multimedia baliabidea ezin izan da ebatzi + + + + Unsupported media format + Multimedia formatua ez da onargarria + + + + Media playback service not found + Multimedia erreproduzitze zerbitzua ez da aurkitu + + + + Media error: + Multimedia errorea: + + + + UBGraphicsTextItem + + + <Type Text Here> + <Idatzi Testua hemen> + + + + UBGraphicsTextItemDelegate + + + Text Color + TestuKolorea + + + + Editable + Editagarria + + + + UBGraphicsW3CWidgetItem + + + Web + Weba + + + + UBGraphicsWidgetItem + + + Loading ... + Kargatzen... + + + + UBGraphicsWidgetItemDelegate + + + Frozen + Izoztua + + + + Transform as Tool + Eraldatu tresna moduan + + + + UBImportDocument + + + OpenBoard (*.ubz) + OPenBoard (*.ubz) + + + + + Importing file %1... + %1 fitxategia inportatzen... + + + + + + Import of file %1 failed. + %1 fitxategiaren inportazioak huts egin du. + + + + + Import successful. + Inportazio arrakastatsua. + + + + UBImportImage + + + Image Format ( + Irudi formatua ( + + + + UBImportPDF + + + Portable Document Format (*.pdf) + Dokumentu formatu eramangarria (*.pdf) + + + + PDF import failed. + PDF inportazioak huts egin du. + + + + Importing page %1 of %2 + %1 orria %2tik inportatzen + + + + UBIntranetPodcastPublisher + + + Error while publishing video to intranet (%1) + Errorea bideoa intranetera esportatzen zen bitartean (%1) + + + + Publishing to Intranet in progress %1 % + Intranetera publikatzea abian %1 % + + + + UBIntranetPodcastPublishingDialog + + + Publish + Publikatu + + + + UBKeyboardPalette + + + + Enter + Sartu + + + + UBMainWindow + + + Yes + Bai + + + + No + Ez + + + + Ok + Ok + + + + UBMessagesDialog + + + Close + Itxi + + + + UBNetworkAccessManager + + + <qt>Enter username and password for "%1" at %2</qt> + <qt>Sartu erabiltzailea eta pasahitza "%1" %2n</qt> + + + + Failed to log to Proxy + Proxyra sartzean errorea + + + + SSL Errors: + +%1 + +%2 + +Do you want to ignore these errors for this host? + SSL Erroreak: + +%1 + +%2 + +Ostalari onentzako errore hauek ez-ikusi nahi dituzu? + + + + Yes + Bai + + + + No + Ez + + + + UBOpenSankoreImporterWidget + + + Open-Sankore Documents Detected + Open-Sankore dokumentuak antzemanda + + + + 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. + Open-Sankoré dokumentuak daude zure ordenagailuan. OpenBoardera inportatu daitezke inportazio-aplikazioa irekitzeko "Jarraitu" botoia sakatuz. + + + + Show this panel next time + Erakutsi panel hau hurrengoan + + + + 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. + Beti ere OPenBoard dokumentuak inportatzailea atzi dezakezu Ezarpenen paneleko Honi buruz fitxan. Kontuz, jada Open-Sankore datuak inportatu badituzu oraingo OpenBoard dokumentuak gal ditzakezu. + + + + Cancel + Ezeztu + + + + Proceed + Jarraitu + + + + UBPersistenceManager + + + (copy) + (kopiatu) + + + + Document Repository Loss + Dokumentuen repositorioaren galera + + + + has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well. + %1 dokumentu errepositorira sarbidea galdu da. Tamalez aplikazioa itxi egingo da datuen galera sahiesteko. Azken aldaketak galdu daitezke ere. + + + + UBPlatformUtils + + + + English + Ingelesa + + + + + Russian + Errusiera + + + + + German + Alemaniera + + + + + French + Frantsesa + + + + + Swiss French + Suitzar frantsesa + + + + UBPodcastController + + + OpenBoard Cast + + + + + Failed to start encoder ... + Kodegailuaren hasierak huts egin du... + + + + No Podcast encoder available ... + Ez dago Podcast kodegailurik erabilgarri... + + + + Part %1 + %1 Zatia + + + + on your desktop ... + zure mahaigainean... + + + + in folder %1 + %1 karpetan + + + + Podcast created %1 + %1 Podcasta sortua + + + + Podcast recording error (%1) + Errorea Podcasta grabatzean (%1) + + + + Default Audio Input + Lehenetsitako audio sarrera + + + + No Audio Recording + Audio grabaziorik ez + + + + Small + Txikia + + + + Medium + Ertaina + + + + Full + Osoa + + + + Publish to Intranet + Publikatu intraneten + + + + Publish to Youtube + Publikatu Youtuben + + + + UBPreferencesController + + + version: + bertsioa: + + + + Marker is pressure sensitive + Markadorea presioarekiko sentibera da + + + + UBProxyLoginDlg + + + Proxy Login + Proxy sarrera + + + + Username: + Erabiltzailea: + + + + Password: + Pasahitza: + + + + UBPublicationDlg + + + Publish document on the web + Publikatu dokumentua webean + + + + Title: + Izenburua: + + + + Description: + Deskribapena: + + + + Publish + Publikatu + + + + UBSettings + + + My Movies + Nire filmak + + + + UBStartupHintsPalette + + + Visible next time + Ikusgarri hurrengoan + + + + UBThumbnailAdaptor + + + Generating preview thumbnails ... + Aurreikuste irudiak sortzen... + + + + %1 thumbnails generated ... + %1 aurreikuspen sortuak... + + + + UBToolsManager + + + Mask + Maskara + + + + Ruler + Erregela + + + + Compass + Konpasa + + + + Protractor + Angelu-garraiagailu + + + + Triangle + Triangelua + + + + Magnifier + Handitzailea + + + + Cache + Katxea + + + + UBTrapFlashController + + + Whole page + Orri osoa + + + + Web + Weba + + + + UBUpdateDlg + + + Document updater + Dokumentu eguneratzailea + + + + files require an update. + fitxategiek eguneraketa behar dute. + + + + Backup path: + Babeskopia helbidea: + + + + Browse + Arakatu + + + + Update + Eguneratu + + + + Remind me later + Gogoratu beranduago + + + + Select a backup folder + Aukeratu babeskopia karpeta + + + + Please wait the import process will start soon... + Mesedez itxaron, inportatze prozesua laster hasiko da... + + + + Files update successful! +Please reboot the application to access the updated documents. + Fitxategien eguneraketa ondo egin da! +Mesedez berrabiarazi aplikazioa eguneratutako dokumentuak irekitzeko. + + + + An error occured during the update. The files have not been affected. + Errorea gertatu da eguneraketan zehar. Fitxategiak ez dira kaltetuak izan. + + + + Files update results + Fitxategien eguneraketa emaitzak + + + + Updating file + FItxategia eguneratzen + + + + UBWebPluginWidget + + + Loading... + Kargatzen... + + + + UBWidgetUniboardAPI + + + %0 called (method=%1, status=%2) + %0 deitua (metodoa=%1, egoera=%2) + + + + UBYouTubePublisher + + + YouTube authentication failed. + Youtuberen autentikazioak huts egin du. + + + + Error while uploading video to YouTube (%1) + Errorea Youtubeko bideoa igotzean (%1) + + + + Upload to YouTube in progress %1 % + Youtubera igotzen % %1 + + + + UBYouTubePublishingDialog + + + Upload + Igo + + + + Autos & Vehicles + Autoak eta ibilgailuak + + + + Music + Musika + + + + Pets & Animals + Maskotak eta animaliak + + + + Sports + Kirolak + + + + Travel & Events + Bidaiak eta gertaerak + + + + Gaming + Jokoak + + + + Comedy + Komedia + + + + People & Blogs + Jendea eta Blogak + + + + News & Politics + Berriak eta Politikak + + + + Entertainment + Denbora-pasa + + + + Education + Hezkuntza + + + + Howto & Style + Estiloa + + + + Nonprofits & Activism + Aktibismoa + + + + Science & Technology + Zientzia eta teknologia + + + + UBZoomPalette + + + %1 x + %1 x + + + + WBClearButton + + + Clear + Garbitu + + + + WBDownloadItem + + + Save File + Gorde fitxategia + + + + Download canceled: %1 + Deskarga bertan behera; %1 + + + + Error opening saved file: %1 + Errorea gordetako fitxategia irekitzea: %1 + + + + Error saving: %1 + Errorea gordetzean: %1 + + + + Network Error: %1 + Sare errorea: %1 + + + + seconds + Segundo + + + + minutes + minutu + + + + - %4 %5 remaining + - %4 %5 falta dira + + + + %1 of %2 (%3/sec) %4 + %1 %2tik (%3/seg) %4 + + + + ? + unknown file size + ? + + + + %1 of %2 - Stopped + %1 %2tik - Geldituta + + + + bytes + byte + + + + KB + KB + + + + MB + MB + + + + WBDownloadManager + + + 1 Download + Deskarga bat + + + + %1 Downloads + always >= 2 + %1 Deskarga + + + + WBHistoryModel + + + Title + Izenburua + + + + Address + Helbidea + + + + WBHistoryTreeModel + + + Earlier Today + Lehenago gaur + + + + %1 items + %1 item + + + + WBSearchLineEdit + + + Search + Bilatu + + + + WBTabBar + + + New &Tab + &Fitxa berria + + + + Clone Tab + Klonatu fitxa + + + + &Close Tab + &Fitxa itxi + + + + Close &Other Tabs + Itxi &beste fitxak + + + + Reload Tab + Birkargatu fitxa + + + + Reload All Tabs + Birkargatu fitxa guztiak + + + + WBTabWidget + + + Recently Closed Tabs + DUela gutxi itxitako fitxak + + + + + (Untitled) + (Izengabea) + + + + WBToolbarSearch + + + Search + Bilatu + + + + No Recent Searches + Ez dago duela gutxiko bilaketarik + + + + Recent Searches + Duela gutxiko bilaketak + + + + Clear Recent Searches + Garbitu duela gutxiko bilaketak + + + + WBWebPage + + + Download PDF Document: would you prefer to download the PDF file or add it to the current OpenBoard document? + Jeitsi PDF dokumentua: nahiago duzu PDfdokumentua jeistea edo uneko OpenBoard dokumentuan txertatzea? + + + + Download + Jeitsi + + + + Add to Current Document + Gehitu uneko dokumentura + + + + PDF + PDF + + + + Error loading page: %1 + Errorea orria kargatzean: %1 + + + + WBWebView + + + Open in New Tab + Ireki fitxa berrian + + + + YouTubePublishingDialog + + + Publish Podcast to YouTube + Publikatu Podcasta Youtuben + + + + Title + Izenburua + + + + Description + Deskribapena + + + + Keywords + HItz klabeak + + + + OpenBoard + Open Board + + + + Category + Kategoria + + + + YouTube Username + Youtubeko erabiltzailea + + + + YouTube Password + Youtubeko pasahitza + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">'Igo' klikatuz zertifikatzen duzu edukiaren eskubideak dituzula edo jabearen baimena duzula modu publikoan Youtuben publikatzeko eta bestela Youtuberen erabilera terminoak puskatzen direla: </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html> + + + + Restore credentials on reboot + Berrezarri kredentzialak berrabiaraztean + + + + brushProperties + + + On Light Background + Atzeko-plano argian + + + + On Dark Background + Atzeko plano ilunean + + + + Opacity + Opakotasuna + + + + Line Width + Lerroaren lodiera + + + + Medium + Ertaina + + + + Strong + Indartsua + + + + Fine + FIna + + + + Pen is Pressure Sensitive + Bolaluma presioarekiko sentibera da + + + + Smooth strokes (experimental) + Lerroak lausotu (esperimentala) + + + + Simplify strokes after drawing (experimental) + Sinplifikatu trazuak marraztu eta gero (esperimentala) + + + + capturePublishingDialog + + + Dialog + Elkarrizketa + + + + Title + Izenburua + + + + E-mail + E-posta + + + + Author + Egilea + + + + Description + Deskribapena + + + + documents + + + OpenBoard Documents + OpenBoard dokumentuak + + + + preferencesDialog + + + Preferences + Ezarpenak + + + + version : … + bertsioa: ... + + + + Display + Pantailaratu + + + + Multi display + Pantailaratze anitza + + + + Show internal web page content on secondary screen or projector + Erakutsi barruko web orriaren edukia bigarren pantailan edo proiektorean + + + + Swap control display and view display + Aldatu kontrol pantaila eta ikuste pantaila + + + + Toolbar + Tresna barra + + + + Positioned at the Top (recommended for tablets) + Goikaldean kokatu (tabletentzako gomendatua) + + + + Positioned at the Bottom (recommended for white boards) + Behekaldean kokatu (Arbel zurientzako gomendatua) + + + + Display Text Under Button + Erakutsi testua botoiaren azpian + + + + Stylus Palette + Luma paleta + + + + Horizontal + Horizontala + + + + Vertical + Bertikala + + + + Mode + Modua + + + + Mode to start in: + Hasteko modua: + + + + Board + Arbela + + + + Desktop + Mahaigaina + + + + Virtual Keyboard + Teklatu birtuala + + + + Built-in virtual keyboard button size: + Teklatu birutalaren botoi tamaina: + + + + Use system keyboard (recommended) + Erabili sistemaren teklatua (gomendatua) + + + + Pen + Bolaluma + + + + Marker + Markadorea + + + + Network + Sarea + + + + Internet + Internet + + + + Show Page with External Browser + Erakutsi orria kanpoko arakatzailearekin + + + + Home Page: + Hasiera orria: + + + + Proxy User: + Proxy erabiltzailea: + + + + Pass: + Pasahitza: + + + + Licences + Lizentziak + + + + Credits + Kredituak + + + + About + Honi buruz + + + + Software Update + SOftware eguneraketa + + + + Check software update at launch + Egiaztatu software eguneraketa hasieran + + + + Open-Sankoré Importer + Open-Sankoré inportatzailea + + + + Check if Open-Sankoré data could be imported at launch + Egiaztatu hasieran Open-Sankoré datuak inportatu daitezkeen + + + + Default Settings + Ezarpen lehenetsiak + + + + Close + Itxi + + + + trapFlashDialog + + + Trap flash + Flasha harrapatu + + + + Select a flash to trap + Aukeratu harrapatzeko Flasha + + + + about:blank + about:blank + + + + Application name + Aplikazio izena + + + + Create Application + Sortu aplikazioa + + + diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 93dc16b6..66cd9978 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -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 @@ -914,10 +916,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; @@ -1142,11 +1145,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(currentStroke); if (stroke) @@ -1167,6 +1165,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; @@ -1528,7 +1534,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPo QString points = pointsToSvgPointsAttribute(polygon); mXmlWriter.writeAttribute("points", points); - mXmlWriter.writeAttribute("transform",toSvgTransform(polygonItem->sceneMatrix())); + mXmlWriter.writeAttribute("transform",toSvgTransform(polygonItem->matrix())); mXmlWriter.writeAttribute("fill", polygonItem->brush().color().name()); qreal alpha = polygonItem->brush().color().alphaF(); @@ -1562,9 +1568,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(); } @@ -2496,6 +2502,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(); @@ -2522,6 +2529,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); @@ -2564,6 +2573,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(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; diff --git a/src/adaptors/UBSvgSubsetAdaptor.h b/src/adaptors/UBSvgSubsetAdaptor.h index 48e3b1d7..5124e013 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.h +++ b/src/adaptors/UBSvgSubsetAdaptor.h @@ -168,6 +168,8 @@ class UBSvgSubsetAdaptor qreal mGroupZIndex; bool mGroupHasInfo; + bool saveSceneAfterLoading; + QString mNamespaceUri; UBGraphicsScene *mScene; diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 92fe17d6..4ca060dd 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -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) { diff --git a/src/core/UBApplicationController.cpp b/src/core/UBApplicationController.cpp index 37582e53..36ae40ca 100644 --- a/src/core/UBApplicationController.cpp +++ b/src/core/UBApplicationController.cpp @@ -658,7 +658,6 @@ void UBApplicationController::closing() if (mUninoteController) { - mUninoteController->hideWindow(); mUninoteController->close(); } @@ -721,6 +720,13 @@ void UBApplicationController::importFile(const QString& pFilePath) void UBApplicationController::useMultiScreen(bool use) { + if (use && !mMirror) + mMirror = new UBScreenMirror(); + if (!use && mMirror) { + delete mMirror; + mMirror = NULL; + } + mDisplayManager->setUseMultiScreen(use); mDisplayManager->adjustScreens(0); UBSettings::settings()->appUseMultiscreen->set(use); diff --git a/src/core/UBDisplayManager.cpp b/src/core/UBDisplayManager.cpp index 77538458..2d0e418b 100644 --- a/src/core/UBDisplayManager.cpp +++ b/src/core/UBDisplayManager.cpp @@ -55,7 +55,7 @@ UBDisplayManager::UBDisplayManager(QObject *parent) { mDesktop = qApp->desktop(); - mUseMultiScreen = true; + mUseMultiScreen = UBSettings::settings()->appUseMultiscreen->get().toBool(); initScreenIndexes(); diff --git a/src/core/UBOpenSankoreImporter.cpp b/src/core/UBOpenSankoreImporter.cpp index 955f3f71..2d22b37a 100644 --- a/src/core/UBOpenSankoreImporter.cpp +++ b/src/core/UBOpenSankoreImporter.cpp @@ -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); diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index bcef40aa..d5de377b 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -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; } diff --git a/src/core/UBPersistenceManager.h b/src/core/UBPersistenceManager.h index bd981106..19d10f66 100644 --- a/src/core/UBPersistenceManager.h +++ b/src/core/UBPersistenceManager.h @@ -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 > 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); diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp index c344908a..cccf87b7 100644 --- a/src/core/UBSettings.cpp +++ b/src/core/UBSettings.cpp @@ -71,17 +71,14 @@ 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)); QPen UBSettings::eraserPenDarkBackground = QPen(QColor(255, 255, 255, 127)); QPen UBSettings::eraserPenLightBackground = QPen(QColor(0, 0, 0, 127)); -QColor UBSettings::markerCircleBrushColorDarkBackground = QColor(127, 127, 127, 0); -QColor UBSettings::markerCircleBrushColorLightBackground = QColor(255, 255, 255, 0); +QColor UBSettings::markerCircleBrushColorDarkBackground = QColor(127, 127, 127, 80); +QColor UBSettings::markerCircleBrushColorLightBackground = QColor(255, 255, 255, 30); QColor UBSettings::markerCirclePenColorDarkBackground = QColor(255, 255, 255, 127); QColor UBSettings::markerCirclePenColorLightBackground = QColor(0, 0, 0, 127); @@ -272,6 +269,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); diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h index 9d04f0dc..9f024d57 100644 --- a/src/core/UBSettings.h +++ b/src/core/UBSettings.h @@ -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; @@ -275,6 +273,9 @@ class UBSettings : public QObject UBSetting* featureSliderPosition; + UBSetting* boardCrossColorDarkBackground; + UBSetting* boardCrossColorLightBackground; + UBColorListSetting* boardPenLightBackgroundColors; UBColorListSetting* boardPenLightBackgroundSelectedColors; diff --git a/src/desktop/UBDesktopAnnotationController.cpp b/src/desktop/UBDesktopAnnotationController.cpp index 3544d464..f17911be 100644 --- a/src/desktop/UBDesktopAnnotationController.cpp +++ b/src/desktop/UBDesktopAnnotationController.cpp @@ -354,7 +354,10 @@ void UBDesktopAnnotationController::showWindow() void UBDesktopAnnotationController::close() { - // NOOP + if (mTransparentDrawingView) + mTransparentDrawingView->hide(); + + mDesktopPalette->hide(); } diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp index 25dd3c95..ebce0117 100644 --- a/src/document/UBDocumentController.cpp +++ b/src/document/UBDocumentController.cpp @@ -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(); } diff --git a/src/document/UBDocumentController.h b/src/document/UBDocumentController.h index f4614174..39e5f635 100644 --- a/src/document/UBDocumentController.h +++ b/src/document/UBDocumentController.h @@ -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_ */ diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index a4f45a62..646f8b6d 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -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(mCurrentItem)->Delegate()->getToolBarItem()->hide(); mCurrentItem->setSelected(false); diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index a9ed21f3..4185fe40 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -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; diff --git a/src/domain/UBGraphicsMediaItem.h b/src/domain/UBGraphicsMediaItem.h index f08a5ae5..dd5ed396 100644 --- a/src/domain/UBGraphicsMediaItem.h +++ b/src/domain/UBGraphicsMediaItem.h @@ -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; diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 5181af4a..fe0cdcc7 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1178,15 +1178,22 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const UBGraphicsGroupContainerItem* groupCloned = group->deepCopyNoChildDuplication(); groupCloned->resetMatrix(); groupCloned->resetTransform(); - groupCloned->setMatrix(group->matrix()); - groupCloned->setTransform(group->transform()); + groupCloned->setPos(0, 0); + bool locked = groupCloned->Delegate()->isLocked(); foreach(QGraphicsItem* eachItem ,group->childItems()){ QGraphicsItem* copiedChild = dynamic_cast(dynamic_cast(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()) @@ -2391,9 +2398,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; @@ -2608,20 +2615,19 @@ void UBGraphicsScene::updateMarkerCircleColor() if (!mMarkerCircle) return; - QBrush mcBrush = mMarkerCircle->brush(); QPen mcPen = mMarkerCircle->pen(); if (mDarkBackground) { - mcBrush.setColor(UBSettings::markerCircleBrushColorDarkBackground); mcPen.setColor(UBSettings::markerCirclePenColorDarkBackground); + mMarkerCircle->setBrush(UBSettings::markerCircleBrushColorDarkBackground); } else { - mcBrush.setColor(UBSettings::markerCircleBrushColorLightBackground); mcPen.setColor(UBSettings::markerCirclePenColorLightBackground); + mMarkerCircle->setBrush(UBSettings::markerCircleBrushColorLightBackground); } - mMarkerCircle->setBrush(mcBrush); + mcPen.setStyle(Qt::DotLine); mMarkerCircle->setPen(mcPen); } diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index a2606700..5d418d01 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -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(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); diff --git a/src/domain/UBGraphicsTextItem.cpp b/src/domain/UBGraphicsTextItem.cpp index e48cbb5b..f2326bb9 100644 --- a/src/domain/UBGraphicsTextItem.cpp +++ b/src/domain/UBGraphicsTextItem.cpp @@ -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(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() { diff --git a/src/domain/UBGraphicsTextItem.h b/src/domain/UBGraphicsTextItem.h index bb001a26..bb031f71 100644 --- a/src/domain/UBGraphicsTextItem.h +++ b/src/domain/UBGraphicsTextItem.h @@ -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); diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index 1d9267b6..34b866e6 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -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) diff --git a/src/domain/UBGraphicsTextItemDelegate.h b/src/domain/UBGraphicsTextItemDelegate.h index bfd99229..bc10f367 100644 --- a/src/domain/UBGraphicsTextItemDelegate.h +++ b/src/domain/UBGraphicsTextItemDelegate.h @@ -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(); diff --git a/src/frameworks/UBGeometryUtils.cpp b/src/frameworks/UBGeometryUtils.cpp index a453e9b8..481ba1a9 100644 --- a/src/frameworks/UBGeometryUtils.cpp +++ b/src/frameworks/UBGeometryUtils.cpp @@ -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 = abs(spanAngleInDegrees) > 360 - angle; + bool overlap = qAbs(spanAngleInDegrees) > 360 - angle; if (overlap) spanAngleInDegrees = spanAngleInDegrees < 0 ? -360 : 360; diff --git a/src/gui/UBDocumentTreeWidget.cpp b/src/gui/UBDocumentTreeWidget.cpp index d0248d59..b6728e4c 100644 --- a/src/gui/UBDocumentTreeWidget.cpp +++ b/src/gui/UBDocumentTreeWidget.cpp @@ -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(underlyingItem); - - if (groupItem && mSelectedProxyTi && mSelectedProxyTi->proxy()) - { - UBDocumentGroupTreeItem *sourceGroupItem = dynamic_cast(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(underlyingItem); - int i = 0; - for (i = 0; i < groupItem->childCount(); i++) - { - QTreeWidgetItem *ti = groupItem->child(i); - UBDocumentProxyTreeItem* pi = dynamic_cast(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(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(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(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(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() diff --git a/src/gui/UBDocumentTreeWidget.h b/src/gui/UBDocumentTreeWidget.h index 02d12ff9..420a8bf1 100644 --- a/src/gui/UBDocumentTreeWidget.h +++ b/src/gui/UBDocumentTreeWidget.h @@ -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; diff --git a/src/tools/UBGraphicsCompass.h b/src/tools/UBGraphicsCompass.h index 485237db..7f56cb12 100644 --- a/src/tools/UBGraphicsCompass.h +++ b/src/tools/UBGraphicsCompass.h @@ -126,25 +126,25 @@ class UBGraphicsCompass: public QObject, public QGraphicsRectItem, public UBItem int mPixelsPerMillimeter; // Constants - static const int sNeedleLength = 18; + static const int sNeedleLength = 12; 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 = 18; - static const int sNeedleArmRigthWidth = 24; + static const int sNeedleArmLeftWidth = 12; + 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 = 18; + static const int sPencilArmLeftWidth = 16; + static const int sPencilArmRightWidth = 12; - static const int sCornerRadius = 3; + static const int sCornerRadius = 2; static const QRect sDefaultRect; static const int sMinRadius; diff --git a/src/tools/UBGraphicsProtractor.cpp b/src/tools/UBGraphicsProtractor.cpp index 85ef4b93..39f28d48 100644 --- a/src/tools/UBGraphicsProtractor.cpp +++ b/src/tools/UBGraphicsProtractor.cpp @@ -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 : diff --git a/src/tools/UBGraphicsProtractor.h b/src/tools/UBGraphicsProtractor.h index 74f68155..42dd591f 100644 --- a/src/tools/UBGraphicsProtractor.h +++ b/src/tools/UBGraphicsProtractor.h @@ -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; diff --git a/src/tools/UBGraphicsTriangle.cpp b/src/tools/UBGraphicsTriangle.cpp index 5ba3ab91..0e2b2136 100644 --- a/src/tools/UBGraphicsTriangle.cpp +++ b/src/tools/UBGraphicsTriangle.cpp @@ -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 ="<