From 111085b857249a9442e118a5e37a1732716da6a2 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 19 Sep 2024 14:53:33 +1000 Subject: [PATCH] Add quick USB MSC access to the main menu --- lua/images.lua | 1 + lua/img/usb.png | Bin 0 -> 9133 bytes lua/main_menu.lua | 20 ++++++++++++++++- lua/settings.lua | 54 +++++++++++++++++++++++++--------------------- 4 files changed, 49 insertions(+), 26 deletions(-) create mode 100644 lua/img/usb.png diff --git a/lua/images.lua b/lua/images.lua index 1d08ec17..84853a52 100644 --- a/lua/images.lua +++ b/lua/images.lua @@ -16,6 +16,7 @@ local img = { files = lvgl.ImgData("//lua/img/files.png"), settings = lvgl.ImgData("//lua/img/settings.png"), chevron = lvgl.ImgData("//lua/img/chevron.png"), + usb = lvgl.ImgData("//lua/img/usb.png"), } return img diff --git a/lua/img/usb.png b/lua/img/usb.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9481c4b2b6e0e70817567446846a05902d5597 GIT binary patch literal 9133 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 P<(rw2rD3swbNGJ&f|itD literal 0 HcmV?d00001 diff --git a/lua/main_menu.lua b/lua/main_menu.lua index 164ba650..2ae3ead4 100644 --- a/lua/main_menu.lua +++ b/lua/main_menu.lua @@ -147,6 +147,24 @@ return widgets.MenuScreen:new { -- queue_btn:Image { src = img.queue } -- theme.set_subject(queue_btn, "icon_enabled") + local usb_btn = bottom_bar:Button {} + usb_btn:onClicked(function() + backstack.push(require("settings").MassStorageSettings:new()) + end) + usb_btn:Image { src = img.usb } + widgets.Description(usb_btn, "USB Settings") + theme.set_subject(usb_btn, "menu_icon") + + self.bindings = self.bindings + { + require("power").plugged_in:bind(function(attached) + if (attached) then + usb_btn:clear_flag(lvgl.FLAG.HIDDEN) + else + usb_btn:add_flag(lvgl.FLAG.HIDDEN) + end + end) + } + local files_btn = bottom_bar:Button {} files_btn:onClicked(function() backstack.push(require("file_browser"):new { @@ -160,7 +178,7 @@ return widgets.MenuScreen:new { local settings_btn = bottom_bar:Button {} settings_btn:onClicked(function() - backstack.push(require("settings"):new()) + backstack.push(require("settings").Root:new()) end) settings_btn:Image { src = img.settings } widgets.Description(settings_btn, "Settings") diff --git a/lua/settings.lua b/lua/settings.lua index b23f9756..8e08fd8e 100644 --- a/lua/settings.lua +++ b/lua/settings.lua @@ -14,6 +14,8 @@ local font = require("font") local main_menu = require("main_menu") local img = require("images") +local settings = {} + local SettingsScreen = widgets.MenuScreen:new { show_back = true, create_ui = function(self) @@ -60,7 +62,7 @@ local BluetoothPairing = SettingsScreen:new { on_hide = function() bluetooth.discovering:set(false) end, } -local BluetoothSettings = SettingsScreen:new { +settings.BluetoothSettings = SettingsScreen:new { title = "Bluetooth", create_ui = function(self) SettingsScreen.create_ui(self) @@ -202,7 +204,7 @@ local BluetoothSettings = SettingsScreen:new { end } -local HeadphonesSettings = SettingsScreen:new { +settings.HeadphonesSettings = SettingsScreen:new { title = "Headphones", create_ui = function(self) SettingsScreen.create_ui(self) @@ -266,7 +268,7 @@ local HeadphonesSettings = SettingsScreen:new { end } -local DisplaySettings = SettingsScreen:new { +settings.DisplaySettings = SettingsScreen:new { title = "Display", create_ui = function(self) SettingsScreen.create_ui(self) @@ -303,7 +305,7 @@ local DisplaySettings = SettingsScreen:new { end } -local ThemeSettings = SettingsScreen:new { +settings.ThemeSettings = SettingsScreen:new { title = "Theme", create_ui = function(self) SettingsScreen.create_ui(self) @@ -339,7 +341,7 @@ local ThemeSettings = SettingsScreen:new { if idx > 0 then options = options .. "\n" end - options = options .. i + options = options .. i idx = idx + 1 end @@ -358,14 +360,14 @@ local ThemeSettings = SettingsScreen:new { local option = theme_chooser:get('selected_str') local selectedTheme = themeOptions[option] if (selectedTheme) then - theme.load_theme(tostring(selectedTheme)) + theme.load_theme(tostring(selectedTheme)) backstack.reset(main_menu:new()) end end) end } -local InputSettings = SettingsScreen:new { +settings.InputSettings = SettingsScreen:new { title = "Input Method", create_ui = function(self) SettingsScreen.create_ui(self) @@ -425,7 +427,7 @@ local InputSettings = SettingsScreen:new { end } -local MassStorageSettings = SettingsScreen:new { +settings.MassStorageSettings = SettingsScreen:new { title = "USB Storage", create_ui = function(self) SettingsScreen.create_ui(self) @@ -490,7 +492,7 @@ local MassStorageSettings = SettingsScreen:new { end } -local DatabaseSettings = SettingsScreen:new { +settings.DatabaseSettings = SettingsScreen:new { title = "Database", create_ui = function(self) SettingsScreen.create_ui(self) @@ -550,7 +552,7 @@ local DatabaseSettings = SettingsScreen:new { end } -local PowerSettings = SettingsScreen:new { +settings.PowerSettings = SettingsScreen:new { title = "Power", create_ui = function(self) SettingsScreen.create_ui(self) @@ -635,7 +637,7 @@ local SamdConfirmation = SettingsScreen:new { end } -local FirmwareSettings = SettingsScreen:new { +settings.FirmwareSettings = SettingsScreen:new { title = "Firmware", create_ui = function(self) SettingsScreen.create_ui(self) @@ -666,7 +668,7 @@ local FirmwareSettings = SettingsScreen:new { end } -local LicensesScreen = SettingsScreen:new { +settings.LicensesScreen = SettingsScreen:new { title = "Licenses", create_ui = function(self) SettingsScreen.create_ui(self) @@ -703,7 +705,7 @@ local FccStatementScreen = SettingsScreen:new { end } -local RegulatoryScreen = SettingsScreen:new { +settings.RegulatoryScreen = SettingsScreen:new { title = "Regulatory", create_ui = function(self) SettingsScreen.create_ui(self) @@ -775,7 +777,7 @@ local RegulatoryScreen = SettingsScreen:new { end } -return widgets.MenuScreen:new { +settings.Root = widgets.MenuScreen:new { show_back = true, title = "Settings", create_ui = function(self) @@ -803,24 +805,26 @@ return widgets.MenuScreen:new { end section("Audio") - submenu("Bluetooth", BluetoothSettings) - submenu("Headphones", HeadphonesSettings) + submenu("Bluetooth", settings.BluetoothSettings) + submenu("Headphones", settings.HeadphonesSettings) section("Interface") - submenu("Display", DisplaySettings) - submenu("Theme", ThemeSettings) - submenu("Input Method", InputSettings) + submenu("Display", settings.DisplaySettings) + submenu("Theme", settings.ThemeSettings) + submenu("Input Method", settings.InputSettings) section("USB") - submenu("Storage", MassStorageSettings) + submenu("Storage", settings.MassStorageSettings) section("System") - submenu("Database", DatabaseSettings) - submenu("Power", PowerSettings) + submenu("Database", settings.DatabaseSettings) + submenu("Power", settings.PowerSettings) section("About") - submenu("Firmware", FirmwareSettings) - submenu("Licenses", LicensesScreen) - submenu("Regulatory", RegulatoryScreen) + submenu("Firmware", settings.FirmwareSettings) + submenu("Licenses", settings.LicensesScreen) + submenu("Regulatory", settings.RegulatoryScreen) end } + +return settings