From 9765250531adbdd831045d75f9fa397a9d539ab7 Mon Sep 17 00:00:00 2001 From: Carlo Baratto Date: Wed, 2 Sep 2026 12:41:50 +0200 Subject: [PATCH] cover: preferito custom (comune) con coordinate salvate (preferredLat/Lon); riga eventi: colonna Alta/Bassa con fade (mai sovrapposta) --- qml/cover/CoverPage.qml | 8 ++++++++ qml/pages/DetailPage.qml | 11 ++++++++++- qml/pages/MainPage.qml | 13 +++++++++++++ src/settings.cpp | 26 ++++++++++++++++++++++++++ src/settings.h | 13 ++++++++++++- 5 files changed, 69 insertions(+), 2 deletions(-) diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml index 1ef37b4..fbf6852 100644 --- a/qml/cover/CoverPage.qml +++ b/qml/cover/CoverPage.qml @@ -41,6 +41,7 @@ CoverBackground { function refresh() { var pref = appSettings.preferredPort + console.log("[tide] cover refresh, pref:", pref) if (pref === "") { portLabel.text = qsTr("No port selected") nextLabel.text = "" @@ -50,6 +51,13 @@ CoverBackground { for (var i = 0; i < Tides.PORTS.length; i++) { if (Tides.PORTS[i][0] === pref) { p = Tides.PORTS[i]; break } } + // preferito custom (comune): ricostruisci le costanti da lat/lon + if (!p && appSettings.preferredLat >= 0) { + var np = Tides.nearestPort(appSettings.preferredLat, appSettings.preferredLon) + var cost = np.km < 222 ? np.port[4].slice() + : Tides.synthConst(appSettings.preferredLat, appSettings.preferredLon) + p = [pref, "", appSettings.preferredLat, appSettings.preferredLon, cost, "pref"] + } if (!p) { portLabel.text = qsTr("No port selected"); nextLabel.text = ""; return } portLabel.text = p[0] var ex = Tides.extrema(p, new Date(), 1) diff --git a/qml/pages/DetailPage.qml b/qml/pages/DetailPage.qml index b41175e..0cf9511 100644 --- a/qml/pages/DetailPage.qml +++ b/qml/pages/DetailPage.qml @@ -244,7 +244,8 @@ Page { anchors.left: parent.left anchors.leftMargin: Theme.horizontalPageMargin anchors.verticalCenter: parent.verticalCenter - width: 110 + width: 130 + truncationMode: TruncationMode.Fade } Label { text: model.date + " " + model.time @@ -366,6 +367,14 @@ Page { visible: page.port && page.port[0] !== appSettings.preferredPort onClicked: { appSettings.preferredPort = page.port[0] + // se è un comune (custom) salva le coordinate per la cover + if (page.custom) { + appSettings.preferredLat = page.port[2] + appSettings.preferredLon = page.port[3] + } else { + appSettings.preferredLat = -1 + appSettings.preferredLon = -1 + } pageStack.replace(Qt.resolvedUrl("MainPage.qml")) } } diff --git a/qml/pages/MainPage.qml b/qml/pages/MainPage.qml index d884c87..6a45a38 100644 --- a/qml/pages/MainPage.qml +++ b/qml/pages/MainPage.qml @@ -265,12 +265,25 @@ Page { updateList() var pref = appSettings.preferredPort if (pref !== "") { + var found = false for (var i = 0; i < Tides.PORTS.length; i++) { if (Tides.PORTS[i][0] === pref) { page.openDetail(Tides.PORTS[i], i, false) + found = true break } } + // preferito custom (comune): ricostruisci e apri il dettaglio + if (!found && appSettings.preferredLat >= 0) { + var lat = appSettings.preferredLat + var lon = appSettings.preferredLon + var np = Tides.nearestPort(lat, lon) + var cost = np.km < 222 ? np.port[4].slice() + : Tides.synthConst(lat, lon) + page.openDetail([pref, qsTr("Italy"), lat, lon, cost, + np.km < 222 ? "near:" + np.port[0] : "synth"], + -1, true) + } } } } diff --git a/src/settings.cpp b/src/settings.cpp index 4918006..89c097a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -32,6 +32,32 @@ void Settings::setPreferredPort(const QString &value) emit preferredPortChanged(); } +double Settings::preferredLat() const +{ + return m_settings.value(QStringLiteral("preferredLat"), -1.0).toDouble(); +} + +void Settings::setPreferredLat(double value) +{ + if (qFuzzyCompare(value, preferredLat())) + return; + m_settings.setValue(QStringLiteral("preferredLat"), value); + emit preferredLatChanged(); +} + +double Settings::preferredLon() const +{ + return m_settings.value(QStringLiteral("preferredLon"), -1.0).toDouble(); +} + +void Settings::setPreferredLon(double value) +{ + if (qFuzzyCompare(value, preferredLon())) + return; + m_settings.setValue(QStringLiteral("preferredLon"), value); + emit preferredLonChanged(); +} + QString Settings::unit() const { return m_settings.value(QStringLiteral("unit"), QStringLiteral("m")).toString(); diff --git a/src/settings.h b/src/settings.h index 77a7fb5..81d0d43 100644 --- a/src/settings.h +++ b/src/settings.h @@ -4,9 +4,10 @@ #include #include -// Preferenze dell'app, persistite in QSettings ("harbour", "maree"): +// Preferenze dell'app, persistite in QSettings ("harbour", "tide"): // language "system" (segue la lingua UI Sailfish) | "en" | "it" // preferredPort nome del porto preferito (vuoto = nessuno) +// preferredLat/Lon coordinate del preferito se è un comune (custom) // unit "m" | "ft" // days 1 | 2 | 3 (intervallo del grafico) class Settings : public QObject @@ -15,6 +16,8 @@ class Settings : public QObject Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged) Q_PROPERTY(QString preferredPort READ preferredPort WRITE setPreferredPort NOTIFY preferredPortChanged) + Q_PROPERTY(double preferredLat READ preferredLat WRITE setPreferredLat NOTIFY preferredLatChanged) + Q_PROPERTY(double preferredLon READ preferredLon WRITE setPreferredLon NOTIFY preferredLonChanged) Q_PROPERTY(QString unit READ unit WRITE setUnit NOTIFY unitChanged) Q_PROPERTY(int days READ days WRITE setDays NOTIFY daysChanged) @@ -27,6 +30,12 @@ public: QString preferredPort() const; void setPreferredPort(const QString &value); + double preferredLat() const; + void setPreferredLat(double value); + + double preferredLon() const; + void setPreferredLon(double value); + QString unit() const; void setUnit(const QString &value); @@ -36,6 +45,8 @@ public: signals: void languageChanged(); void preferredPortChanged(); + void preferredLatChanged(); + void preferredLonChanged(); void unitChanged(); void daysChanged();