feat(qt): Settings sub-nav regrouped under an Advanced fold, with new glyphs
Audio, Playback, Appearance, Navigation, Local Library, Offline, Integrations and Updates stay in the column; Blacklist, Storage, Import / Export, Developer (and Orbit while enabled) move under an ADVANCED disclosure row with a chevron. The fold is not persisted: it opens itself whenever the current section lives inside it, and reads as active while closed over the selected page. Appearance takes lucide's paintbrush-vertical, Integrations unplug and Storage database — baked into every tint and registered as masters. The kiosk selector follows the same order, flattened. "Share logs" stays pinned at the bottom. cc
No files matched your search
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#4285f4"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#4285f4"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#4285f4"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#888888"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#888888"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#888888"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#ffffff"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#cccccc"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#cccccc"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#cccccc"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#fbbf24"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<ellipse cx="12" cy="5" rx="9" ry="3" />
|
||||
<path d="M3 5V19A9 3 0 0 0 21 19V5" />
|
||||
<path d="M3 12A9 3 0 0 0 21 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 324 B |
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#fbbf24"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v4" />
|
||||
<path d="M17 2a1 1 0 0 1 1 1v9H6V3a1 1 0 0 1 1-1z" />
|
||||
<path d="M6 12a1 1 0 0 0-1 1v1a2 2 0 0 0 2 2h2a1 1 0 0 1 1 1v2.9a2 2 0 1 0 4 0V17a1 1 0 0 1 1-1h2a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 440 B |
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#fbbf24"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m19 5 3-3" />
|
||||
<path d="m2 22 3-3" />
|
||||
<path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z" />
|
||||
<path d="M7.5 13.5 10 11" />
|
||||
<path d="M10.5 16.5 13 14" />
|
||||
<path d="m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 484 B |
@@ -9,17 +9,22 @@
|
||||
// 1 Playback -> PlaybackSettings.qml
|
||||
// 2 Appearance -> AppearanceSettings.qml
|
||||
// 3 Offline -> OfflineSettings.qml
|
||||
// 13 Storage -> StorageSettings.qml (artwork, lyrics and Plex
|
||||
// caches; shown right after Offline)
|
||||
// 13 Storage -> StorageSettings.qml (artwork, lyrics and Plex caches)
|
||||
// 4 Local Library -> LocalLibrarySettings.qml (+ PlexSettings.qml)
|
||||
// 5 Blacklist -> BlacklistSettings.qml
|
||||
// 6 Integrations -> IntegrationsSettings.qml
|
||||
// 7 Developer -> DeveloperSettings.qml
|
||||
// 8 Flatpak/Snap -> SandboxSettings.qml (only on a sandboxed install)
|
||||
// 9 Import/Export -> ImportExportSettings.qml (shown between
|
||||
// Integrations and Developer; index 9 keeps the
|
||||
// 9 Import/Export -> ImportExportSettings.qml (index 9 keeps the
|
||||
// persisted section numbers of 0-8 stable)
|
||||
//
|
||||
// The sub-nav ORDER (2026-09-13) is not the index order: Audio, Playback,
|
||||
// Appearance, Navigation, Local Library, Offline, Integrations, Updates,
|
||||
// [Flatpak/Snap], then an ADVANCED fold (`advancedOpen`) holding Blacklist,
|
||||
// Storage, Import / Export, Developer and Orbit. The fold opens itself when
|
||||
// the current section lives inside it; "Share logs" stays pinned at the
|
||||
// bottom of the column.
|
||||
//
|
||||
// All state is ONE JSON document (QbzBridge.settingsJson, settings_qt.rs
|
||||
// SettingsDoc). Controls never keep local truth: they call the
|
||||
// settingsBool/Select/Slider/String invokables, Rust persists + applies +
|
||||
@@ -68,22 +73,36 @@ Item {
|
||||
// assignment destroys the binding it lands on, so a single surviving
|
||||
// `root.section = n` would work once and then re-introduce the bug one
|
||||
// navigation later, in a way that looks fixed under casual testing.
|
||||
// Same order as the desktop column; the fold is flattened here because
|
||||
// the kiosk selector is one list.
|
||||
readonly property var kioskSections: [
|
||||
{ label: QbzSession.tr("Audio", QbzSession.trRev), section: 0 },
|
||||
{ label: QbzSession.tr("Playback", QbzSession.trRev), section: 1 },
|
||||
{ label: QbzSession.tr("Appearance", QbzSession.trRev), section: 2 },
|
||||
{ label: QbzSession.tr("Navigation", QbzSession.trRev), section: 10 },
|
||||
{ label: QbzSession.tr("Offline", QbzSession.trRev), section: 3 },
|
||||
{ label: QbzSession.tr("Storage", QbzSession.trRev), section: 13 },
|
||||
{ label: QbzSession.tr("Local Library", QbzSession.trRev), section: 4 },
|
||||
{ label: QbzSession.tr("Blacklist", QbzSession.trRev), section: 5 },
|
||||
{ label: QbzSession.tr("Offline", QbzSession.trRev), section: 3 },
|
||||
{ label: QbzSession.tr("Integrations", QbzSession.trRev), section: 6 },
|
||||
{ label: QbzSession.tr("Import / Export", QbzSession.trRev), section: 9 },
|
||||
{ label: QbzSession.tr("Updates", QbzSession.trRev), section: 12 },
|
||||
{ label: QbzSession.tr("Blacklist", QbzSession.trRev), section: 5 },
|
||||
{ label: QbzSession.tr("Storage", QbzSession.trRev), section: 13 },
|
||||
{ label: QbzSession.tr("Import / Export", QbzSession.trRev), section: 9 },
|
||||
{ label: QbzSession.tr("Developer", QbzSession.trRev), section: 7 }
|
||||
].concat(QbzOrbit.enabled ? [{ label: "Orbit", section: 11 }] : []).concat(root.sandboxed ? [{ label: (doc.dev || ({})).installMethod === "snap"
|
||||
? QbzSession.tr("Snap", QbzSession.trRev) : QbzSession.tr("Flatpak", QbzSession.trRev), section: 8 }] : [])
|
||||
readonly property int section: QbzBridge.settingsSection === 11 && !QbzOrbit.enabled ? 0 : QbzBridge.settingsSection
|
||||
/// The ADVANCED fold of the desktop sub-nav (Blacklist, Storage,
|
||||
/// Import / Export, Developer, Orbit). Not persisted on purpose: it opens
|
||||
/// itself whenever the current section lives inside it, so a restored or
|
||||
/// programmatic selection is never hidden behind a closed fold, and it
|
||||
/// stays open once opened until the next launch.
|
||||
readonly property var advancedSections: [5, 13, 9, 7, 11]
|
||||
property bool advancedOpen: false
|
||||
function revealAdvanced() {
|
||||
if (root.advancedSections.indexOf(root.section) >= 0)
|
||||
root.advancedOpen = true
|
||||
}
|
||||
onSectionChanged: revealAdvanced()
|
||||
readonly property bool migrationRunning:
|
||||
(doc.importExport || ({})).migrationRunning === true
|
||||
|
||||
@@ -99,7 +118,10 @@ Item {
|
||||
root.doc = ({})
|
||||
}
|
||||
}
|
||||
Component.onCompleted: reload()
|
||||
Component.onCompleted: {
|
||||
reload()
|
||||
revealAdvanced()
|
||||
}
|
||||
Connections {
|
||||
target: QbzBridge
|
||||
function onSettingsJsonChanged() { root.reload() }
|
||||
@@ -164,6 +186,10 @@ Item {
|
||||
property string name: ""
|
||||
property string label: ""
|
||||
property bool active: false
|
||||
/// Extra left inset for the rows inside the ADVANCED fold.
|
||||
property int indent: 0
|
||||
/// Optional right-aligned glyph — the fold's chevron.
|
||||
property string trailing: ""
|
||||
signal clicked()
|
||||
|
||||
width: parent ? parent.width : 0
|
||||
@@ -189,8 +215,8 @@ Item {
|
||||
}
|
||||
Row {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: 12
|
||||
anchors.rightMargin: 12
|
||||
anchors.leftMargin: 12 + parent.indent
|
||||
anchors.rightMargin: parent.trailing !== "" ? 36 : 12
|
||||
spacing: 10
|
||||
QbzIcon {
|
||||
name: parent.parent.name
|
||||
@@ -212,6 +238,21 @@ Item {
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
active: parent.trailing !== ""
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 12
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: 16
|
||||
height: 16
|
||||
sourceComponent: QbzIcon {
|
||||
name: snTrailingHost.trailing
|
||||
width: 16
|
||||
height: 16
|
||||
tintName: "secondary"
|
||||
}
|
||||
readonly property Item snTrailingHost: parent
|
||||
}
|
||||
MouseArea {
|
||||
id: snArea
|
||||
anchors.fill: parent
|
||||
@@ -244,7 +285,7 @@ Item {
|
||||
onClicked: QbzBridge.settingsSetSection(1)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "layers"
|
||||
name: "paintbrush-vertical"
|
||||
label: QbzSession.tr("Appearance", QbzSession.trRev)
|
||||
active: root.section === 2
|
||||
onClicked: QbzBridge.settingsSetSection(2)
|
||||
@@ -255,18 +296,6 @@ Item {
|
||||
active: root.section === 10
|
||||
onClicked: QbzBridge.settingsSetSection(10)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "cloud-download"
|
||||
label: QbzSession.tr("Offline", QbzSession.trRev)
|
||||
active: root.section === 3
|
||||
onClicked: QbzBridge.settingsSetSection(3)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "folder"
|
||||
label: QbzSession.tr("Storage", QbzSession.trRev)
|
||||
active: root.section === 13
|
||||
onClicked: QbzBridge.settingsSetSection(13)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "hard-drive"
|
||||
label: QbzSession.tr("Local Library", QbzSession.trRev)
|
||||
@@ -274,42 +303,23 @@ Item {
|
||||
onClicked: QbzBridge.settingsSetSection(4)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "blind-eye"
|
||||
label: QbzSession.tr("Blacklist", QbzSession.trRev)
|
||||
active: root.section === 5
|
||||
onClicked: QbzBridge.settingsSetSection(5)
|
||||
name: "cloud-download"
|
||||
label: QbzSession.tr("Offline", QbzSession.trRev)
|
||||
active: root.section === 3
|
||||
onClicked: QbzBridge.settingsSetSection(3)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "refresh-cw"
|
||||
name: "unplug"
|
||||
label: QbzSession.tr("Integrations", QbzSession.trRev)
|
||||
active: root.section === 6
|
||||
onClicked: QbzBridge.settingsSetSection(6)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "import"
|
||||
label: QbzSession.tr("Import / Export", QbzSession.trRev)
|
||||
active: root.section === 9
|
||||
onClicked: QbzBridge.settingsSetSection(9)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "refresh-cw"
|
||||
label: QbzSession.tr("Updates", QbzSession.trRev)
|
||||
active: root.section === 12
|
||||
onClicked: QbzBridge.settingsSetSection(12)
|
||||
}
|
||||
SubNavItem {
|
||||
name: "bug"
|
||||
label: QbzSession.tr("Developer", QbzSession.trRev)
|
||||
active: root.section === 7
|
||||
onClicked: QbzBridge.settingsSetSection(7)
|
||||
}
|
||||
SubNavItem {
|
||||
visible: QbzOrbit.enabled
|
||||
name: "compass"
|
||||
label: "Orbit"
|
||||
active: root.section === 11
|
||||
onClicked: QbzBridge.settingsSetSection(11)
|
||||
}
|
||||
// Sandboxed installs only (Flatpak / Snap permissions).
|
||||
SubNavItem {
|
||||
visible: root.sandboxed
|
||||
@@ -320,6 +330,57 @@ Item {
|
||||
active: root.section === 8
|
||||
onClicked: QbzBridge.settingsSetSection(8)
|
||||
}
|
||||
|
||||
// The ADVANCED fold: a disclosure row, not a section. It
|
||||
// reads as active while it is closed over the selected
|
||||
// page, so the column never shows nothing selected.
|
||||
SubNavItem {
|
||||
name: "sliders-horizontal"
|
||||
trailing: root.advancedOpen ? "chevron-down" : "chevron-right"
|
||||
label: QbzSession.tr("Advanced", QbzSession.trRev)
|
||||
active: !root.advancedOpen && root.advancedSections.indexOf(root.section) >= 0
|
||||
onClicked: root.advancedOpen = !root.advancedOpen
|
||||
}
|
||||
SubNavItem {
|
||||
visible: root.advancedOpen
|
||||
indent: 16
|
||||
name: "blind-eye"
|
||||
label: QbzSession.tr("Blacklist", QbzSession.trRev)
|
||||
active: root.section === 5
|
||||
onClicked: QbzBridge.settingsSetSection(5)
|
||||
}
|
||||
SubNavItem {
|
||||
visible: root.advancedOpen
|
||||
indent: 16
|
||||
name: "database"
|
||||
label: QbzSession.tr("Storage", QbzSession.trRev)
|
||||
active: root.section === 13
|
||||
onClicked: QbzBridge.settingsSetSection(13)
|
||||
}
|
||||
SubNavItem {
|
||||
visible: root.advancedOpen
|
||||
indent: 16
|
||||
name: "import"
|
||||
label: QbzSession.tr("Import / Export", QbzSession.trRev)
|
||||
active: root.section === 9
|
||||
onClicked: QbzBridge.settingsSetSection(9)
|
||||
}
|
||||
SubNavItem {
|
||||
visible: root.advancedOpen
|
||||
indent: 16
|
||||
name: "bug"
|
||||
label: QbzSession.tr("Developer", QbzSession.trRev)
|
||||
active: root.section === 7
|
||||
onClicked: QbzBridge.settingsSetSection(7)
|
||||
}
|
||||
SubNavItem {
|
||||
visible: root.advancedOpen && QbzOrbit.enabled
|
||||
indent: 16
|
||||
name: "compass"
|
||||
label: "Orbit"
|
||||
active: root.section === 11
|
||||
onClicked: QbzBridge.settingsSetSection(11)
|
||||
}
|
||||
}
|
||||
|
||||
// Always-visible log affordance, pinned to the bottom of the
|
||||
|
||||
@@ -183,6 +183,7 @@ const MASTERS: &[(&str, &str)] = &[
|
||||
("cloud-upload", include_str!("../qml/assets/icons/primary/cloud-upload.svg")),
|
||||
("compass", include_str!("../qml/assets/icons/primary/compass.svg")),
|
||||
("copy", include_str!("../qml/assets/icons/primary/copy.svg")),
|
||||
("database", include_str!("../qml/assets/icons/primary/database.svg")),
|
||||
("disc-3", include_str!("../qml/assets/icons/primary/disc-3.svg")),
|
||||
("disc", include_str!("../qml/assets/icons/primary/disc.svg")),
|
||||
("disc-folder", include_str!("../qml/assets/icons/primary/disc-folder.svg")),
|
||||
@@ -252,6 +253,7 @@ const MASTERS: &[(&str, &str)] = &[
|
||||
("music-note-slider", include_str!("../qml/assets/icons/primary/music-note-slider.svg")),
|
||||
("music", include_str!("../qml/assets/icons/primary/music.svg")),
|
||||
("network", include_str!("../qml/assets/icons/primary/network.svg")),
|
||||
("paintbrush-vertical", include_str!("../qml/assets/icons/primary/paintbrush-vertical.svg")),
|
||||
("panel-left", include_str!("../qml/assets/icons/primary/panel-left.svg")),
|
||||
("panel-right-close", include_str!("../qml/assets/icons/primary/panel-right-close.svg")),
|
||||
("panel-right-open", include_str!("../qml/assets/icons/primary/panel-right-open.svg")),
|
||||
@@ -308,6 +310,7 @@ const MASTERS: &[(&str, &str)] = &[
|
||||
("trash-list", include_str!("../qml/assets/icons/primary/trash-list.svg")),
|
||||
("triangle-alert", include_str!("../qml/assets/icons/primary/triangle-alert.svg")),
|
||||
("turntable", include_str!("../qml/assets/icons/primary/turntable.svg")),
|
||||
("unplug", include_str!("../qml/assets/icons/primary/unplug.svg")),
|
||||
("user-plus", include_str!("../qml/assets/icons/primary/user-plus.svg")),
|
||||
("user", include_str!("../qml/assets/icons/primary/user.svg")),
|
||||
("volume-2", include_str!("../qml/assets/icons/primary/volume-2.svg")),
|
||||
|
||||