Margini alto/basso (Settings.readerMarginV) + applicazione a caldo senza reload: i margini si sovrascrivono via runJavaScript (setProperty !important) sul documento aperto, anteprima live nel dialogo e al ritorno dalle impostazioni
This commit is contained in:
+40
-10
@@ -1,13 +1,22 @@
|
||||
import QtQuick 2.0
|
||||
import Sailfish.Silica 1.0
|
||||
|
||||
// Regola i margini laterali del testo nel lettore senza uscire dal libro.
|
||||
// Il valore viene applicato all'accettazione; il capitolo aperto si ricarica
|
||||
// con il nuovo margine (il chiamante si occupa del reload).
|
||||
// Regola i margini del testo nel lettore senza uscire dal libro.
|
||||
// Anteprima LIVE: ogni variazione degli slider viene inoltrata al lettore via
|
||||
// previewHandler (runJavaScript sul documento aperto), quindi il testo si
|
||||
// adatta subito. I valori vengono persistiti solo all'accettazione.
|
||||
Dialog {
|
||||
id: dialog
|
||||
|
||||
property int marginValue: 24
|
||||
property int marginLr: 24
|
||||
property int marginTb: 0
|
||||
// funzione chiamata a ogni variazione: previewHandler(marginLr, marginTb)
|
||||
property var previewHandler: null
|
||||
|
||||
function preview() {
|
||||
if (dialog.previewHandler)
|
||||
dialog.previewHandler(dialog.marginLr, dialog.marginTb)
|
||||
}
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
@@ -18,26 +27,47 @@ Dialog {
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: marginSlider
|
||||
id: lrSlider
|
||||
width: parent.width
|
||||
label: "Margine laterale"
|
||||
label: "Margini laterali"
|
||||
minimumValue: 0
|
||||
maximumValue: 80
|
||||
stepSize: 4
|
||||
value: dialog.marginValue
|
||||
value: dialog.marginLr
|
||||
valueText: value + " px"
|
||||
onValueChanged: dialog.marginValue = value
|
||||
onValueChanged: {
|
||||
dialog.marginLr = value
|
||||
dialog.preview()
|
||||
}
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: tbSlider
|
||||
width: parent.width
|
||||
label: "Alto e basso"
|
||||
minimumValue: 0
|
||||
maximumValue: 80
|
||||
stepSize: 4
|
||||
value: dialog.marginTb
|
||||
valueText: value + " px"
|
||||
onValueChanged: {
|
||||
dialog.marginTb = value
|
||||
dialog.preview()
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - 2 * Theme.horizontalPageMargin
|
||||
text: "Il margine viene applicato al capitolo corrente e salvato per tutti i libri."
|
||||
text: "Le modifiche si applicano subito al testo. Conferma per salvarle per tutti i libri."
|
||||
color: Theme.secondaryColor
|
||||
wrapMode: Text.Wrap
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: appSettings.readerMargin = dialog.marginValue
|
||||
onAccepted: {
|
||||
appSettings.readerMargin = dialog.marginLr
|
||||
appSettings.readerMarginV = dialog.marginTb
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,11 +43,14 @@ Page {
|
||||
MenuItem {
|
||||
text: "Margini del testo"
|
||||
onClicked: {
|
||||
var dlg = pageStack.push(Qt.resolvedUrl("MarginDialog.qml"),
|
||||
{ marginValue: appSettings.readerMargin })
|
||||
var dlg = pageStack.push(Qt.resolvedUrl("MarginDialog.qml"), {
|
||||
marginLr: appSettings.readerMargin,
|
||||
marginTb: appSettings.readerMarginV,
|
||||
previewHandler: page.previewMargins
|
||||
})
|
||||
dlg.accepted.connect(function() {
|
||||
if (page.ready && book.chapterCount() > 0)
|
||||
loadChapter()
|
||||
// i valori sono già persistiti da onAccepted; rinfresca subito
|
||||
applyMarginsJS()
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -239,7 +242,7 @@ Page {
|
||||
// e margini) è iniettato nell'HTML dal parser, quindi niente JS post-load
|
||||
function loadChapter() {
|
||||
var html = book.chapterHtml(page.currentChapter, page.fontPx(),
|
||||
appSettings.readerMargin)
|
||||
appSettings.readerMargin, appSettings.readerMarginV)
|
||||
if (html.length === 0) {
|
||||
page.errorMessage = "Capitolo non leggibile"
|
||||
page.ready = true
|
||||
@@ -259,6 +262,34 @@ Page {
|
||||
})
|
||||
}
|
||||
|
||||
// JS che sovrascrive i margini sul documento aperto: stile inline con
|
||||
// 'important' batte lo stylesheet iniettato. Effetto immediato, niente reload.
|
||||
function marginJs(lr, tb) {
|
||||
return "var h=document.documentElement,b=document.body;"
|
||||
+ "h.style.setProperty('margin-left','" + lr + "px','important');"
|
||||
+ "h.style.setProperty('margin-right','" + lr + "px','important');"
|
||||
+ "b.style.setProperty('margin-left','" + lr + "px','important');"
|
||||
+ "b.style.setProperty('margin-right','" + lr + "px','important');"
|
||||
+ "b.style.setProperty('margin-top','" + tb + "px','important');"
|
||||
+ "b.style.setProperty('margin-bottom','" + tb + "px','important');"
|
||||
+ "true"
|
||||
}
|
||||
|
||||
// riapplica i margini salvati nelle impostazioni (senza ricaricare il libro)
|
||||
function applyMarginsJS() {
|
||||
if (!web.loaded || !page.ready)
|
||||
return
|
||||
web.runJavaScript(marginJs(appSettings.readerMargin, appSettings.readerMarginV),
|
||||
function() { })
|
||||
}
|
||||
|
||||
// anteprima live dal dialogo margini: valori non ancora persistiti
|
||||
function previewMargins(lr, tb) {
|
||||
if (!web.loaded || !page.ready)
|
||||
return
|
||||
web.runJavaScript(marginJs(lr, tb), function() { })
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
page.ready = false
|
||||
if (!book.open(page.epubPath)) {
|
||||
@@ -290,10 +321,10 @@ Page {
|
||||
if (status === PageStatus.Inactive) {
|
||||
maybeSave(true)
|
||||
} else if (status === PageStatus.Active) {
|
||||
// riapplica font/margini se cambiati nelle impostazioni:
|
||||
// ricarica il capitolo e ripristina la posizione
|
||||
// riapplica i margini se cambiati nelle impostazioni:
|
||||
// via JS sul documento aperto, senza ricaricare il capitolo
|
||||
if (page.ready && book.chapterCount() > 0)
|
||||
loadChapter()
|
||||
applyMarginsJS()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ Page {
|
||||
Slider {
|
||||
id: marginSlider
|
||||
width: parent.width
|
||||
label: "Margini del testo"
|
||||
label: "Margini laterali"
|
||||
minimumValue: 0
|
||||
maximumValue: 80
|
||||
stepSize: 4
|
||||
@@ -71,6 +71,18 @@ Page {
|
||||
onValueChanged: appSettings.readerMargin = value
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: marginVSlider
|
||||
width: parent.width
|
||||
label: "Margine alto e basso"
|
||||
minimumValue: 0
|
||||
maximumValue: 80
|
||||
stepSize: 4
|
||||
value: appSettings.readerMarginV
|
||||
valueText: value + " px"
|
||||
onValueChanged: appSettings.readerMarginV = value
|
||||
}
|
||||
|
||||
SectionHeader { text: "Connessione" }
|
||||
|
||||
Button {
|
||||
|
||||
Reference in New Issue
Block a user