linlar

Forum Replies Created

Viewing 5 posts - 1 through 5 (of 5 total)
  • 12. Januar 2019 at 22:10 #43560

    Ops, the webb realy destroyed the command.
    sudo apt --fix-broken install

    10. Januar 2019 at 22:53 #43433

    Start consol and type:
    sudo apt –fix-broken install

    2. März 2018 at 21:54 #34187

    Hi antonio81le,

    I use a 7″ touch screen from aliexpress.
    To shutdown the pi I created a script on the desktop that poweroff the pi.
    You first have to allow root to poweroff without password.

    To poweroff just end Jivelite and click on the script icon and poweroff is executed.

    Link at Thingiverse where I uploaded the box I printed.
    https://www.thingiverse.com/thing:2811405

    27. Februar 2018 at 18:37 #34121

    Hi Heiner,

    I’m not sure.

    I used the changes from Ajax (1024×600) and modified the iconbar section becuse there was an error in volume buttons.

    ,comment out this two lines to remove the width adjust of volDown and volUp icon.
    volDown = _uses(_transportControlButton, {
    — // w = 34,
    img = _loadImage(self, “Icons/icon_toolbar_vol_down.png”),
    }),
    volUp = _uses(_transportControlButton, {
    — // w = 34,

    Adjusted the length of volumeBarWidth from 450 to:
    local volumeBarWidth = 410 — screenWidth – (transport controls + volume controls + dividers + border around volume bar)

    23. Februar 2018 at 13:41 #34066

    Working JogglerSkinApplets.lua for 1024×600 screen.
    Uses Ajax changes and some small adjustments on the iconbar.

    ———————————————————
    –[[
    =head1 NAME

    applets.JogglerSkin.JogglerSkinApplet

    =head1 DESCRIPTION

    This applet implements an 1024×600 resolution skin.

    Redesigned from WQVGAsmallSkin by Andy Davison.
    Redesigned from StandardJoggler by Martin Schneider.

    Built upon the work of 3guk, Tarkan Akdam and Justblair.

    Version 1. (19th januari 2018)
    birdslikewires.co.uk

    =head1 FUNCTIONS

    Applet related methods are described in L<jive.Applet>.
    SqueezeboxSkin overrides the following methods:

    =cut
    –]]

    — stuff we use
    local ipairs, pairs, setmetatable, type, tostring = ipairs, pairs, setmetatable, type, tostring

    local oo = require(„loop.simple“)

    local Applet = require(„jive.Applet“)
    local Audio = require(„jive.ui.Audio“)
    local Font = require(„jive.ui.Font“)
    local Framework = require(„jive.ui.Framework“)
    local Icon = require(„jive.ui.Icon“)
    local Label = require(„jive.ui.Label“)
    local RadioButton = require(„jive.ui.RadioButton“)
    local RadioGroup = require(„jive.ui.RadioGroup“)
    local SimpleMenu = require(„jive.ui.SimpleMenu“)
    local Surface = require(„jive.ui.Surface“)
    local Textarea = require(„jive.ui.Textarea“)
    local Tile = require(„jive.ui.Tile“)
    local Window = require(„jive.ui.Window“)

    local table = require(„jive.utils.table“)
    local debug = require(„jive.utils.debug“)
    local autotable = require(„jive.utils.autotable“)

    local log = require(„jive.utils.log“).logger(„applet.JogglerSkin“)

    local EVENT_ACTION = jive.ui.EVENT_ACTION
    local EVENT_CONSUME = jive.ui.EVENT_CONSUME
    local EVENT_WINDOW_POP = jive.ui.EVENT_WINDOW_POP
    local LAYER_FRAME = jive.ui.LAYER_FRAME
    local LAYER_CONTENT_ON_STAGE = jive.ui.LAYER_CONTENT_ON_STAGE
    local LAYER_TITLE = jive.ui.LAYER_TITLE

    local LAYOUT_NORTH = jive.ui.LAYOUT_NORTH
    local LAYOUT_EAST = jive.ui.LAYOUT_EAST
    local LAYOUT_SOUTH = jive.ui.LAYOUT_SOUTH
    local LAYOUT_WEST = jive.ui.LAYOUT_WEST
    local LAYOUT_CENTER = jive.ui.LAYOUT_CENTER
    local LAYOUT_NONE = jive.ui.LAYOUT_NONE

    local WH_FILL = jive.ui.WH_FILL

    local jiveMain = jiveMain
    local appletManager = appletManager

    module(…, Framework.constants)
    oo.class(_M, Applet)

    — Define useful variables for this skin
    local imgpath = „applets/JogglerSkin/images/“
    local fontpath = „fonts/“
    local FONT_NAME = „FreeSans“
    local BOLD_PREFIX = „Bold“

    function init(self)
    self.images = {}

    self.imageTiles = {}
    self.hTiles = {}
    self.vTiles = {}
    self.tiles = {}
    end

    function param(self)
    return {
    THUMB_SIZE = 50,
    THUMB_SIZE_MENU = 50,
    NOWPLAYING_MENU = true,
    — NOWPLAYING_TRACKINFO_LINES used in assisting scroll behavior animation on NP
    — 3 is for a three line track, artist, and album (e.g., SBtouch)
    — 2 is for a two line track, artist+album (e.g., SBradio, SBcontroller)
    NOWPLAYING_TRACKINFO_LINES = 3,
    POPUP_THUMB_SIZE = 150,
    nowPlayingScreenStyles = {
    — every skin needs to start off with a nowplaying style
    {
    style = ’nowplaying‘,
    artworkSize = ‚440×440′,
    text = self:string(„ART_AND_TEXT“),
    },
    {
    style = ’nowplaying_art_only‘,
    artworkSize = ‚570×570′,
    suppressTitlebar = 1,
    text = self:string(„ART_ONLY“),
    },
    {
    style = ’nowplaying_text_only‘,
    artworkSize = ‚340×340′,
    text = self:string(„TEXT_ONLY“),
    },
    {
    style = ’nowplaying_spectrum_text‘,
    artworkSize = ‚340×340′,
    localPlayerOnly = 1,
    text = self:string(„SPECTRUM_ANALYZER“),
    },
    {
    style = ’nowplaying_vuanalog_text‘,
    artworkSize = ‚340×340‘,
    localPlayerOnly = 1,
    text = self:string(„ANALOG_VU_METER“),
    },
    },
    }
    end

    local function _loadImage(self, file)
    return Surface:loadImage(imgpath .. file)
    end

    local function _buildTileKey(tileTable)
    local key = „“
    for i = 1, #tileTable do
    local element = tileTable[i] or „NIL“
    key = key .. element .. „&“
    end

    return key
    end

    local function _loadTile(self, tileTable)
    if not tileTable then
    return nil
    end

    local key = _buildTileKey(tileTable)

    if not self.tiles[key] then
    self.tiles[key] = Tile:loadTiles(tileTable)
    end

    return self.tiles[key]
    end

    local function _loadHTile(self, tileTable)
    if not tileTable then
    return nil
    end

    local key = _buildTileKey(tileTable)

    if not self.hTiles[key] then
    self.hTiles[key] = Tile:loadHTiles(tileTable)
    end

    return self.hTiles[key]
    end

    local function _loadVTile(self, tileTable)
    if not tileTable then
    return nil
    end

    local key = _buildTileKey(tileTable)

    if not self.vTiles[key] then
    self.vTiles[key] = Tile:loadVTiles(tileTable)
    end

    return self.vTiles[key]
    end

    local function _loadImageTile(self, file)
    if not file then
    return nil
    end

    return Tile:loadImage(file)
    end

    — define a local function to make it easier to create icons.
    local function _icon(x, y, img)
    local var = {}
    var.x = x
    var.y = y
    var.img = _loadImage(self, img)
    var.layer = LAYER_FRAME
    var.position = LAYOUT_SOUTH

    return var
    end

    — define a local function that makes it easier to set fonts
    local function _font(fontSize)
    return Font:load(fontpath .. FONT_NAME .. „.ttf“, fontSize)
    end

    — define a local function that makes it easier to set bold fonts
    local function _boldfont(fontSize)
    return Font:load(fontpath .. FONT_NAME .. BOLD_PREFIX .. „.ttf“, fontSize)
    end

    — defines a new style that inherrits from an existing style
    local function _uses(parent, value)
    if parent == nil then
    log:warn(„nil parent in _uses at:\n“, debug.traceback())
    end
    local style = {}
    setmetatable(style, { __index = parent })
    for k,v in pairs(value or {}) do
    if type(v) == „table“ and type(parent[k]) == „table“ then
    — recursively inherrit from parent style
    style[k] = _uses(parent[k], v)
    else
    style[k] = v
    end
    end

    return style
    end

    — skin
    — The meta arranges for this to be called to skin the interface.
    function skin(self, s)
    Framework:setVideoMode(1024, 600, 0, false)

    local screenWidth, screenHeight = Framework:getScreenSize()

    –init lastInputType so selected item style is not shown on skin load
    Framework.mostRecentInputType = „mouse“

    — skin
    local thisSkin = ‚touch‘
    local skinSuffix = „_“ .. thisSkin .. „.png“

    — Images and Tiles
    local inputTitleBox = _loadImageTile(self, imgpath .. „Titlebar/titlebar.png“ )
    local backButton = _loadImageTile(self, imgpath .. „Icons/icon_back_button_tb.png“)
    local cancelButton = _loadImageTile(self, imgpath .. „Icons/icon_close_button_tb.png“)
    local homeButton = _loadImageTile(self, imgpath .. „Icons/icon_home_button_tb.png“)
    local helpButton = _loadImageTile(self, imgpath .. „Icons/icon_help_button_tb.png“)
    local powerButton = _loadImageTile(self, imgpath .. „Icons/icon_power_button_tb.png“)
    local nowPlayingButton = _loadImageTile(self, imgpath .. „Icons/icon_nplay_button_tb.png“)
    local playlistButton = _loadImageTile(self, imgpath .. „Icons/icon_nplay_list_tb.png“)
    local moreButton = _loadImageTile(self, imgpath .. „Icons/icon_more_tb.png“)
    local touchToolbarBackground = _loadImageTile(self, imgpath .. „Touch_Toolbar/toolbar_tch_bkgrd.png“)
    local sliderBackground = _loadImageTile(self, imgpath .. „Touch_Toolbar/toolbar_lrg.png“)
    local touchToolbarKeyDivider = _loadImageTile(self, imgpath .. „Touch_Toolbar/toolbar_divider.png“)
    local deleteKeyBackground = _loadImageTile(self, imgpath .. „Buttons/button_delete_text_entry.png“)
    local deleteKeyPressedBackground = _loadImageTile(self, imgpath .. „Buttons/button_delete_text_entry_press.png“)
    local helpTextBackground = _loadImageTile(self, imgpath .. „Titlebar/tbar_dropdwn_bkrgd.png“)

    local blackBackground = Tile:fillColor(0x000000ff)
    local nocturneWallpaper = _loadImageTile(self, „applets/SetupWallpaper/wallpaper/pcp_nocturne.png“)

    –FIXME, _r asset here doesn’t work…it’s supposed to have a fadeout effect and it doesn’t appear on screen
    local fiveItemBox = _loadHTile(self, {
    imgpath .. „5_line_lists/tch_5line_divider_l.png“,
    imgpath .. „5_line_lists/tch_5line_divider.png“,
    imgpath .. „5_line_lists/tch_5line_divider_r.png“,
    })
    local fiveItemSelectionBox = _loadHTile(self, {
    nil,
    imgpath .. „5_line_lists/menu_sel_box_5line.png“,
    imgpath .. „5_line_lists/menu_sel_box_5line_r.png“,
    })
    local fiveItemPressedBox = _loadHTile(self, {
    nil,
    imgpath .. „5_line_lists/menu_sel_box_5line_press.png“,
    imgpath .. „5_line_lists/menu_sel_box_5line_press_r.png“,
    })

    local threeItemSelectionBox = _loadHTile(self, {
    imgpath .. „3_line_lists/menu_sel_box_3line_l.png“,
    imgpath .. „3_line_lists/menu_sel_box_3line.png“,
    imgpath .. „3_line_lists/menu_sel_box_3line_r.png“,
    })
    local threeItemPressedBox = _loadImageTile(self, imgpath .. „3_line_lists/menu_sel_box_3item_press.png“)

    local contextMenuPressedBox = _loadTile(self, {
    imgpath .. „Popup_Menu/button_cm_press.png“,
    imgpath .. „Popup_Menu/button_cm_tl_press.png“,
    imgpath .. „Popup_Menu/button_cm_t_press.png“,
    imgpath .. „Popup_Menu/button_cm_tr_press.png“,
    imgpath .. „Popup_Menu/button_cm_r_press.png“,
    imgpath .. „Popup_Menu/button_cm_br_press.png“,
    imgpath .. „Popup_Menu/button_cm_b_press.png“,
    imgpath .. „Popup_Menu/button_cm_bl_press.png“,
    imgpath .. „Popup_Menu/button_cm_l_press.png“,
    })

    local keyTopLeft = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_tl.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_t.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_l.png“,
    })

    local keyTopLeftPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_n_button_press.png“,
    imgpath .. „Buttons/keybrd_nw_button_press_tl.png“,
    imgpath .. „Buttons/keybrd_n_button_press_t.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Buttons/keybrd_nw_button_press_l.png“,
    })

    local keyTop = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_t_wvert.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyTopPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_n_button_press.png“,
    nil,
    imgpath .. „Buttons/keybrd_n_button_press_t.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyTopRight = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_t_wvert.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_tr.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_r.png“,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyTopRightPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_n_button_press.png“,
    nil,
    imgpath .. „Buttons/keybrd_n_button_press_t.png“,
    imgpath .. „Buttons/keybrd_ne_button_press_tr.png“,
    imgpath .. „Buttons/keybrd_ne_button_press_r.png“,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyLeft = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardLeftEdge.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_l.png“,
    })

    local keyLeftPressed = _loadTile(self, {
    imgpath .. „Buttons/keyboard_button_press.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Buttons/keyboard_button_press.png“,
    })

    local keyMiddle = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyMiddlePressed = _loadTile(self, {
    imgpath .. „Buttons/keyboard_button_press.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local sliderButtonPressed = _loadTile(self, {
    imgpath .. „Buttons/keyboard_button_press.png“,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyRight = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardRightEdge.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_r.png“,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyRightPressed = _loadTile(self, {
    imgpath .. „Buttons/keyboard_button_press.png“,
    nil,
    nil,
    nil,
    imgpath .. „Buttons/keyboard_button_press.png“,
    nil,
    nil,
    nil,
    nil,
    })

    local keyBottomLeft = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardLeftEdge.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_b.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_bl.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_l.png“,
    })

    local keyBottomLeftPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_s_button_press.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardLeftEdge.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    imgpath .. „Buttons/keybrd_s_button_press_b.png“,
    imgpath .. „Buttons/keybrd_sw_button_press_bl.png“,
    imgpath .. „Buttons/keybrd_sw_button_press_l.png“,
    })

    local keyBottom = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_b_wvert.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyBottomPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_s_button_press.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    nil,
    nil,
    nil,
    imgpath .. „Buttons/keybrd_s_button_press_b.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyBottomRight = _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardRightEdge.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_r.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_br.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_bkgrd_b_wvert.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local keyBottomRightPressed = _loadTile(self, {
    imgpath .. „Buttons/keybrd_s_button_press.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_hort.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboardRightEdge.png“,
    imgpath .. „Buttons/keybrd_se_button_press_r.png“,
    imgpath .. „Buttons/keybrd_se_button_press_br.png“,
    imgpath .. „Buttons/keybrd_s_button_press_b.png“,
    nil,
    imgpath .. „Text_Entry/Keyboard_Touch/keyboard_divider_vert.png“,
    })

    local titleBox =
    _loadTile(self, {
    imgpath .. „Titlebar/titlebar.png“,
    nil,
    nil,
    nil,
    nil,
    nil,
    imgpath .. „Titlebar/titlebar_shadow.png“,
    nil,
    nil,
    })

    local textinputBackground =
    _loadTile(self, {
    imgpath .. „Text_Entry/Keyboard_Touch/titlebar_box.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_tl.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_t.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_tr.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_r.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_br.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_b.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_bl.png“,
    imgpath .. „Text_Entry/Keyboard_Touch/text_entry_titlebar_box_l.png“,
    })

    local pressedTitlebarButtonBox =
    _loadTile(self, {
    imgpath .. „Buttons/button_titlebar_press.png“,
    imgpath .. „Buttons/button_titlebar_tl_press.png“,
    imgpath .. „Buttons/button_titlebar_t_press.png“,
    imgpath .. „Buttons/button_titlebar_tr_press.png“,
    imgpath .. „Buttons/button_titlebar_r_press.png“,
    imgpath .. „Buttons/button_titlebar_br_press.png“,
    imgpath .. „Buttons/button_titlebar_b_press.png“,
    imgpath .. „Buttons/button_titlebar_bl_press.png“,
    imgpath .. „Buttons/button_titlebar_l_press.png“,
    })

    local titlebarButtonBox =
    _loadTile(self, {
    imgpath .. „Buttons/button_titlebar.png“,
    imgpath .. „Buttons/button_titlebar_tl.png“,
    imgpath .. „Buttons/button_titlebar_t.png“,
    imgpath .. „Buttons/button_titlebar_tr.png“,
    imgpath .. „Buttons/button_titlebar_r.png“,
    imgpath .. „Buttons/button_titlebar_br.png“,
    imgpath .. „Buttons/button_titlebar_b.png“,
    imgpath .. „Buttons/button_titlebar_bl.png“,
    imgpath .. „Buttons/button_titlebar_l.png“,
    })

    local popupBox =
    _loadTile(self, {
    imgpath .. „Popup_Menu/popup_box.png“,
    imgpath .. „Popup_Menu/popup_box_tl.png“,
    imgpath .. „Popup_Menu/popup_box_t.png“,
    imgpath .. „Popup_Menu/popup_box_tr.png“,
    imgpath .. „Popup_Menu/popup_box_r.png“,
    imgpath .. „Popup_Menu/popup_box_br.png“,
    imgpath .. „Popup_Menu/popup_box_b.png“,
    imgpath .. „Popup_Menu/popup_box_bl.png“,
    imgpath .. „Popup_Menu/popup_box_l.png“,
    })

    local contextMenuBox =
    _loadTile(self, {
    imgpath .. „Popup_Menu/cm_popup_box.png“,
    imgpath .. „Popup_Menu/cm_popup_box_tl.png“,
    imgpath .. „Popup_Menu/cm_popup_box_t.png“,
    imgpath .. „Popup_Menu/cm_popup_box_tr.png“,
    imgpath .. „Popup_Menu/cm_popup_box_r.png“,
    imgpath .. „Popup_Menu/cm_popup_box_br.png“,
    imgpath .. „Popup_Menu/cm_popup_box_b.png“,
    imgpath .. „Popup_Menu/cm_popup_box_bl.png“,
    imgpath .. „Popup_Menu/cm_popup_box_l.png“,
    })

    local scrollBackground =
    _loadVTile(self, {
    imgpath .. „Scroll_Bar/scrollbar_bkgrd_t.png“,
    imgpath .. „Scroll_Bar/scrollbar_bkgrd.png“,
    imgpath .. „Scroll_Bar/scrollbar_bkgrd_b.png“,
    })

    local scrollBar =
    _loadVTile(self, {
    imgpath .. „Scroll_Bar/scrollbar_body_t.png“,
    imgpath .. „Scroll_Bar/scrollbar_body.png“,
    imgpath .. „Scroll_Bar/scrollbar_body_b.png“,
    })

    local popupBackground = blackBackground

    local textinputCursor = _loadImageTile(self, imgpath .. „Text_Entry/Keyboard_Touch/tch_cursor.png“)

    local THUMB_SIZE = self:param().THUMB_SIZE

    local TITLE_PADDING = { 0, 15, 0, 15 }
    local CHECK_PADDING = { 2, 0, 6, 0 }
    local CHECKBOX_RADIO_PADDING = { 2, 0, 0, 0 }

    local MENU_ITEM_ICON_PADDING = { 0, 0, 8, 0 }
    local MENU_PLAYLISTITEM_TEXT_PADDING = { 16, 1, 9, 1 }

    local MENU_CURRENTALBUM_TEXT_PADDING = { 6, 20, 0, 10 }
    local TEXTAREA_PADDING = { 13, 8, 8, 0 }

    local TEXT_COLOR = { 0xE7, 0xE7, 0xE7 }
    local TEXT_COLOR_BLACK = { 0x00, 0x00, 0x00 }
    local TEXT_SH_COLOR = { 0x37, 0x37, 0x37 }
    local TEXT_COLOR_TEAL = { 0, 0xbe, 0xbe }

    local SELECT_COLOR = { 0xE7, 0xE7, 0xE7 }
    local SELECT_SH_COLOR = { }

    local TITLE_HEIGHT = 65
    local TITLE_FONT_SIZE = 20
    local TITLEBAR_FONT_SIZE = 28
    local ALBUMMENU_FONT_SIZE = 20
    local ALBUMMENU_SMALL_FONT_SIZE = 16
    local TEXTMENU_FONT_SIZE = 25
    local POPUP_TEXT_SIZE_1 = 34
    local POPUP_TEXT_SIZE_2 = 26
    local TRACK_FONT_SIZE = 18
    local TEXTAREA_FONT_SIZE = 18
    local CENTERED_TEXTAREA_FONT_SIZE = 28

    local CM_MENU_HEIGHT = 45

    local TEXTINPUT_FONT_SIZE = 60
    local TEXTINPUT_SELECTED_FONT_SIZE = 68

    local HELP_FONT_SIZE = 18
    local UPDATE_SUBTEXT_SIZE = 20

    local ITEM_ICON_ALIGN = ‚center‘
    local ITEM_LEFT_PADDING = 12
    local THREE_ITEM_HEIGHT = 72
    local FIVE_ITEM_HEIGHT = 45
    local TITLE_BUTTON_WIDTH = 76

    local smallSpinny = {
    img = _loadImage(self, „Alerts/wifi_connecting_sm.png“),
    frameRate = 8,
    frameWidth = 26,
    padding = 0,
    h = WH_FILL,
    }
    local largeSpinny = {
    img = _loadImage(self, „Alerts/wifi_connecting.png“),
    position = LAYOUT_CENTER,
    w = WH_FILL,
    align = „center“,
    frameRate = 8,
    frameWidth = 120,
    padding = { 0, 0, 0, 10 }
    }
    — convenience method for removing a button from the window
    local noButton = {
    img = false,
    bgImg = false,
    w = 0
    }

    local playArrow = {
    img = _loadImage(self, „Icons/selection_play_3line_on.png“),
    }
    local addArrow = {
    img = _loadImage(self, „Icons/selection_add_3line_on.png“),
    }
    local favItem = {
    img = _loadImage(self, „Icons/icon_toolbar_fav.png“),
    }

    —- REVIEWED BELOW THIS LINE —-

    ——— CONSTANTS ———

    local _progressBackground = _loadImageTile(self, imgpath .. „Alerts/alert_progress_bar_bkgrd.png“)

    local _progressBar = _loadHTile(self, {
    nil,
    imgpath .. „Alerts/alert_progress_bar_body.png“,
    })

    local _songProgressBackground = _loadHTile(self, {
    imgpath .. „Song_Progress_Bar/SP_Bar_Touch/tch_progressbar_bkgrd_l.png“,
    imgpath .. „Song_Progress_Bar/SP_Bar_Touch/tch_progressbar_bkgrd.png“,
    imgpath .. „Song_Progress_Bar/SP_Bar_Touch/tch_progressbar_bkgrd_r.png“,
    })

    local _songProgressBar = _loadHTile(self, {
    nil,
    nil,
    imgpath .. „Song_Progress_Bar/SP_Bar_Touch/tch_progressbar_slider.png“
    })

    local _songProgressBarDisabled = _loadHTile(self, {
    nil,
    nil,
    imgpath .. „Song_Progress_Bar/SP_Bar_Remote/rem_progressbar_slider.png“
    })

    local _vizProgressBar = _loadHTile(self, {
    imgpath .. „UNOFFICIAL/viz_progress_fill_l.png“,
    imgpath .. „UNOFFICIAL/viz_progress_fill.png“,
    imgpath .. „UNOFFICIAL/viz_progress_fill_r.png“,
    })
    local _vizProgressBarPill = _loadImageTile(self, imgpath .. „UNOFFICIAL/viz_progress_slider.png“)

    local _volumeSliderBackground = _loadHTile(self, {
    imgpath .. „Touch_Toolbar/tch_volumebar_bkgrd_l.png“,
    imgpath .. „Touch_Toolbar/tch_volumebar_bkgrd.png“,
    imgpath .. „Touch_Toolbar/tch_volumebar_bkgrd_r.png“,
    })

    local _volumeSliderBar = _loadHTile(self, {
    imgpath .. „UNOFFICIAL/tch_volumebar_fill_l.png“,
    imgpath .. „UNOFFICIAL/tch_volumebar_fill.png“,
    imgpath .. „UNOFFICIAL/tch_volumebar_fill_r.png“,
    })

    local _volumeSliderPill = _loadImageTile(self, imgpath .. „Touch_Toolbar/tch_volume_slider.png“)

    local _popupSliderBar = _loadHTile(self, {
    imgpath .. „Touch_Toolbar/tch_volumebar_fill_l.png“,
    imgpath .. „Touch_Toolbar/tch_volumebar_fill.png“,
    imgpath .. „Touch_Toolbar/tch_volumebar_fill_r.png“,
    })

    ——— DEFAULT WIDGET STYLES ———

    — These are the default styles for the widgets

    s.window = {
    w = screenWidth,
    h = screenHeight,
    }

    — window with absolute positioning
    s.absolute = _uses(s.window, {
    layout = Window.noLayout,
    })

    s.popup = _uses(s.window, {
    border = { 0, 0, 0, 0 },
    bgImg = popupBackground,
    })

    s.title = {
    h = TITLE_HEIGHT,
    border = 0,
    position = LAYOUT_NORTH,
    bgImg = titleBox,
    padding = { 0, 5, 0, 5 },
    order = { „lbutton“, „text“, „rbutton“ },
    lbutton = {
    border = { 8, 0, 8, 0 },
    h = WH_FILL,
    },
    rbutton = {
    border = { 8, 0, 8, 0 },
    h = WH_FILL,
    },
    text = {
    w = WH_FILL,
    padding = TITLE_PADDING,
    align = „center“,
    font = _boldfont(TITLEBAR_FONT_SIZE),
    fg = TEXT_COLOR,
    }
    }

    s.title.textButton = _uses(s.title.text, {
    bgImg = titlebarButtonBox,
    padding = { 4, 15, 4, 15 },
    })

    s.title.pressed = {}
    s.title.pressed.textButton = _uses(s.title.textButton, {
    bgImg = pressedTitlebarButtonBox,
    })

    s.text_block_black = {
    bgImg = blackBackground,
    position = LAYOUT_NORTH,
    h = 100,
    order = { ‚text‘ },
    text = {
    w = WH_FILL,
    h = 100,
    padding = { 10, 160, 10, 0 },
    align = „center“,
    font = _font(100),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    }

    s.menu = {
    position = LAYOUT_CENTER,
    padding = { 0, 0, 0, 0 },
    itemHeight = FIVE_ITEM_HEIGHT,
    fg = {0xbb, 0xbb, 0xbb },
    font = _boldfont(120),
    }

    s.menu_hidden = _uses(s.menu, {
    hidden = 1,
    })

    s.item = {
    order = { „icon“, „text“, „arrow“ },
    padding = { ITEM_LEFT_PADDING, 0, 8, 0 },
    text = {
    padding = { 0, 0, 2, 0 },
    align = „left“,
    w = WH_FILL,
    h = WH_FILL,
    font = _boldfont(TEXTMENU_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    icon = {
    padding = MENU_ITEM_ICON_PADDING,
    align = ‚center‘,
    },
    arrow = {
    align = ITEM_ICON_ALIGN,
    img = _loadImage(self, „Icons/selection_right_5line.png“),
    padding = { 0, 0, 0, 0 },
    },
    bgImg = fiveItemBox,
    }

    s.item_play = _uses(s.item, {
    arrow = { img = false },
    })
    s.item_add = _uses(s.item, {
    arrow = addArrow
    })

    — Checkbox
    s.checkbox = {}
    s.checkbox.align = ‚center‘
    s.checkbox.padding = CHECKBOX_RADIO_PADDING
    s.checkbox.h = WH_FILL
    s.checkbox.img_on = _loadImage(self, „Icons/checkbox_on.png“)
    s.checkbox.img_off = _loadImage(self, „Icons/checkbox_off.png“)

    — Radio button
    s.radio = {}
    s.radio.align = ‚center‘
    s.radio.padding = CHECKBOX_RADIO_PADDING
    s.radio.h = WH_FILL
    s.radio.img_on = _loadImage(self, „Icons/radiobutton_on.png“)
    s.radio.img_off = _loadImage(self, „Icons/radiobutton_off.png“)

    s.item_choice = _uses(s.item, {
    order = { ‚icon‘, ‚text‘, ‚check‘ },
    choice = {
    h = WH_FILL,
    padding = CHECKBOX_RADIO_PADDING,
    align = ‚right‘,
    font = _boldfont(TEXTMENU_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    })
    s.item_checked = _uses(s.item, {
    order = { „icon“, „text“, „check“, „arrow“ },
    check = {
    align = ITEM_ICON_ALIGN,
    padding = CHECK_PADDING,
    img = _loadImage(self, „Icons/icon_check_5line.png“)
    }
    })

    s.item_info = _uses(s.item, {
    order = { ‚text‘ },
    padding = { ITEM_LEFT_PADDING, 0, 0, 0 },
    text = {
    align = „top-left“,
    w = WH_FILL,
    h = WH_FILL,
    padding = { 0, 6, 0, 6 },
    font = _font(14),
    line = {
    {
    font = _font(14),
    height = 14,
    },
    {
    font = _boldfont(18),
    height = 18,
    },
    },
    },
    })

    s.item_no_arrow = _uses(s.item, {
    order = { ‚icon‘, ‚text‘ },
    })
    s.item_checked_no_arrow = _uses(s.item, {
    order = { ‚icon‘, ‚text‘, ‚check‘ },
    })

    s.selected = {
    item = _uses(s.item, {
    bgImg = fiveItemSelectionBox
    }),
    item_play = _uses(s.item_play, {
    bgImg = fiveItemSelectionBox
    }),
    item_add = _uses(s.item_add, {
    bgImg = fiveItemSelectionBox
    }),
    item_checked = _uses(s.item_checked, {
    bgImg = fiveItemSelectionBox
    }),
    item_no_arrow = _uses(s.item_no_arrow, {
    bgImg = fiveItemSelectionBox
    }),
    item_checked_no_arrow = _uses(s.item_checked_no_arrow, {
    bgImg = fiveItemSelectionBox
    }),
    item_choice = _uses(s.item_choice, {
    bgImg = fiveItemSelectionBox
    }),
    item_info = _uses(s.item_info, {
    bgImg = fiveItemSelectionBox
    }),
    }

    s.pressed = {
    item = _uses(s.item, {
    bgImg = fiveItemPressedBox,
    }),
    item_checked = _uses(s.item_checked, {
    bgImg = fiveItemPressedBox,
    }),
    item_play = _uses(s.item_play, {
    bgImg = fiveItemPressedBox,
    }),
    item_add = _uses(s.item_add, {
    bgImg = fiveItemPressedBox,
    }),
    item_no_arrow = _uses(s.item_no_arrow, {
    bgImg = fiveItemPressedBox,
    }),
    item_checked_no_arrow = _uses(s.item_checked_no_arrow, {
    bgImg = fiveItemPressedBox,
    }),
    item_choice = _uses(s.item_choice, {
    bgImg = fiveItemPressedBox,
    }),
    item_info = _uses(s.item_info, {
    bgImg = fiveItemPressedBox,
    }),
    }

    s.locked = {
    item = _uses(s.pressed.item, {
    arrow = smallSpinny
    }),
    item_checked = _uses(s.pressed.item_checked, {
    arrow = smallSpinny
    }),
    item_play = _uses(s.pressed.item_play, {
    arrow = smallSpinny
    }),
    item_add = _uses(s.pressed.item_add, {
    arrow = smallSpinny
    }),
    item_no_arrow = _uses(s.item_no_arrow, {
    arrow = smallSpinny
    }),
    item_checked_no_arrow = _uses(s.item_checked_no_arrow, {
    arrow = smallSpinny
    }),
    item_info = _uses(s.item_info, {
    arrow = smallSpinny,
    }),
    }

    s.item_blank = {
    padding = { },
    text = {},
    bgImg = helpTextBackground,
    }

    s.pressed.item_blank = _uses(s.item_blank)
    s.selected.item_blank = _uses(s.item_blank)

    s.help_text = {
    w = screenWidth – 30,
    padding = { 12, 8, 12, 0 },
    border = 0,
    font = _font(HELP_FONT_SIZE),
    lineHeight = 23,
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    align = „top-left“,
    }

    s.scrollbar = {
    w = 46,
    border = 0,
    padding = { 0, 0, 0, 0 },
    horizontal = 0,
    bgImg = scrollBackground,
    img = scrollBar,
    layer = LAYER_CONTENT_ON_STAGE,
    }

    s.text = {
    w = screenWidth,
    h = WH_FILL,
    padding = TEXTAREA_PADDING,
    font = _boldfont(TEXTAREA_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    align = „left“,
    }

    s.multiline_text = {
    w = WH_FILL,
    padding = { 10, 0, 2, 10 },
    font = _font(18),
    height = 21,
    fg = { 0xe6, 0xe6, 0xe6 },
    sh = { },
    align = „left“,
    }
    s.multiline_popup_text = _uses(s.multiline_text, {
    padding = { 14, 18, 14, 18 },
    border = { 0, 0, 10, 0 },
    })

    s.slider = {
    border = 10,
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _progressBackground,
    img = _progressBar,
    }

    s.slider_group = {
    w = WH_FILL,
    border = { 0, 5, 0, 10 },
    order = { „min“, „slider“, „max“ },
    }

    ——— SPECIAL WIDGETS ———

    — text input
    s.textinput = {
    h = 72,
    padding = { 24, 0, 24, 0 },
    font = _boldfont(TEXTINPUT_FONT_SIZE),
    cursorFont = _boldfont(TEXTINPUT_SELECTED_FONT_SIZE),
    wheelFont = _boldfont(TEXTINPUT_FONT_SIZE),
    charHeight = TEXTINPUT_SELECTED_FONT_SIZE,
    fg = TEXT_COLOR_BLACK,
    charOffsetY = 32,
    wh = { 0x55, 0x55, 0x55 },
    cursorImg = textinputCursor,
    }

    — keyboard
    s.keyboard = {
    w = WH_FILL,
    h = WH_FILL,
    border = { 8, 6, 8, 0 },
    padding = { 2, 0, 2, 0 },
    }

    s.keyboard_textinput = {
    bgImg = textinputBackground,
    w = WH_FILL,
    order = { „textinput“, „backspace“ },
    border = 0,
    textinput = {
    padding = { 16, 0, 0, 4 },
    },
    }

    s.keyboard.key = {
    font = _boldfont(48),
    fg = { 0xDC, 0xDC, 0xDC },
    align = ‚center‘,
    bgImg = keyMiddle,
    }

    s.keyboard.key_topLeft = _uses(s.keyboard.key, { bgImg = keyTopLeft })
    s.keyboard.key_top = _uses(s.keyboard.key, { bgImg = keyTop })
    s.keyboard.key_topRight = _uses(s.keyboard.key, { bgImg = keyTopRight })
    s.keyboard.key_left = _uses(s.keyboard.key, { bgImg = keyLeft })
    s.keyboard.key_middle = _uses(s.keyboard.key, { bgImg = keyMiddle })
    s.keyboard.key_right = _uses(s.keyboard.key, { bgImg = keyRight })
    s.keyboard.key_bottomLeft = _uses(s.keyboard.key, { bgImg = keyBottomLeft })
    s.keyboard.key_bottom = _uses(s.keyboard.key, { bgImg = keyBottom })
    s.keyboard.key_bottomRight = _uses(s.keyboard.key, { bgImg = keyBottomRight })

    — styles for keys that use smaller font
    s.keyboard.key_bottom_small = _uses(s.keyboard.key_bottom, { font = _boldfont(36) } )
    s.keyboard.key_bottomRight_small = _uses(s.keyboard.key_bottomRight, {
    font = _boldfont(36),
    fg = { 0xe7, 0xe7, 0xe7 },
    } )
    s.keyboard.key_bottomLeft_small = _uses(s.keyboard.key_bottomLeft, { font = _boldfont(36) } )
    s.keyboard.key_left_small = _uses(s.keyboard.key_left, { font = _boldfont(36) } )

    s.keyboard.spacer_topLeft = _uses(s.keyboard.key_topLeft)
    s.keyboard.spacer_top = _uses(s.keyboard.key_top)
    s.keyboard.spacer_topRight = _uses(s.keyboard.key_topRight)
    s.keyboard.spacer_left = _uses(s.keyboard.key_left)
    s.keyboard.spacer_middle = _uses(s.keyboard.key_middle)
    s.keyboard.spacer_right = _uses(s.keyboard.key_right)
    s.keyboard.spacer_bottomLeft = _uses(s.keyboard.key_bottomLeft)
    s.keyboard.spacer_bottom = _uses(s.keyboard.key_bottom)
    s.keyboard.spacer_bottomRight = _uses(s.keyboard.key_bottomRight)

    s.keyboard.shiftOff = _uses(s.keyboard.key_left, {
    img = _loadImage(self, „Icons/icon_shift_off.png“),
    padding = { 1, 0, 0, 0 },
    })
    s.keyboard.shiftOn = _uses(s.keyboard.key_left, {
    img = _loadImage(self, „Icons/icon_shift_on.png“),
    padding = { 1, 0, 0, 0 },
    })

    s.keyboard.arrow_left_middle = _uses(s.keyboard.key_middle, {
    img = _loadImage(self, „Icons/icon_arrow_left.png“)
    })
    s.keyboard.arrow_right_right = _uses(s.keyboard.key_right, {
    img = _loadImage(self, „Icons/icon_arrow_right.png“)
    })
    s.keyboard.arrow_left_bottom = _uses(s.keyboard.key_bottom, {
    img = _loadImage(self, „Icons/icon_arrow_left.png“)
    })
    s.keyboard.arrow_right_bottom = _uses(s.keyboard.key_bottom, {
    img = _loadImage(self, „Icons/icon_arrow_right.png“)
    })

    s.keyboard.done = {
    text = _uses(s.keyboard.key_bottomRight_small, {
    text = self:string(„ENTER_SMALL“),
    fg = { 0x00, 0xbe, 0xbe },
    sh = { },
    h = WH_FILL,
    padding = { 0, 0, 0, 1 },
    }),
    icon = { hidden = 1 },
    }

    s.keyboard.doneDisabled = _uses(s.keyboard.done, {
    text = {
    fg = { 0x66, 0x66, 0x66 },
    }
    })

    s.keyboard.doneSpinny = {
    icon = _uses(s.keyboard.key_bottomRight, {
    bgImg = keyBottomRight,
    hidden = 0,
    img = _loadImage(self, „Alerts/wifi_connecting_sm.png“),
    frameRate = 8,
    frameWidth = 26,
    w = WH_FILL,
    h = WH_FILL,
    align = ‚center‘,
    }),
    text = { hidden = 1, w = 0 },
    }

    s.keyboard.space = _uses(s.keyboard.key_bottom_small, {
    bgImg = keyBottom,
    text = self:string(„SPACEBAR_SMALL“),
    })

    s.keyboard.pressed = {
    shiftOff = _uses(s.keyboard.shiftOff, {
    bgImg = keyLeftPressed
    }),
    shiftOn = _uses(s.keyboard.shiftOn, {
    bgImg = keyLeftPressed
    }),
    done = _uses(s.keyboard.done, {
    bgImg = keyBottomRightPressed,
    }),
    doneDisabled = _uses(s.keyboard.doneDisabled, {
    — disabled, not set
    }),
    doneSpinny = _uses(s.keyboard.doneSpinny, {
    — disabled, not set
    }),
    space = _uses(s.keyboard.space, {
    bgImg = keyBottomPressed
    }),
    arrow_right_bottom = _uses(s.keyboard.arrow_right_bottom, {
    bgImg = keyBottomPressed
    }),
    arrow_right_right = _uses(s.keyboard.arrow_right_right, {
    bgImg = keyRightPressed
    }),
    arrow_left_bottom = _uses(s.keyboard.arrow_left_bottom, {
    bgImg = keyBottomPressed
    }),
    arrow_left_middle = _uses(s.keyboard.arrow_left_middle, {
    bgImg = keyMiddlePressed
    }),
    key = _uses(s.keyboard.key, {
    bgImg = keyMiddlePressed
    }),
    key_topLeft = _uses(s.keyboard.key_topLeft, {
    bgImg = keyTopLeftPressed
    }),
    key_top = _uses(s.keyboard.key_top, {
    bgImg = keyTopPressed
    }),
    key_topRight = _uses(s.keyboard.key_topRight, {
    bgImg = keyTopRightPressed
    }),
    key_left = _uses(s.keyboard.key_left, {
    bgImg = keyLeftPressed
    }),
    key_middle = _uses(s.keyboard.key_middle, {
    bgImg = keyMiddlePressed
    }),
    key_right = _uses(s.keyboard.key_right, {
    bgImg = keyRightPressed
    }),
    key_bottomLeft = _uses(s.keyboard.key_bottomLeft, {
    bgImg = keyBottomLeftPressed
    }),
    key_bottom = _uses(s.keyboard.key_bottom, {
    bgImg = keyBottomPressed
    }),
    key_bottomRight = _uses(s.keyboard.key_bottomRight, {
    bgImg = keyBottomRightPressed
    }),
    key_left_small = _uses(s.keyboard.key_left_small, {
    bgImg = keyLeftPressed
    }),
    key_bottomLeft_small = _uses(s.keyboard.key_bottomLeft_small, {
    bgImg = keyBottomLeftPressed
    }),
    key_bottom_small = _uses(s.keyboard.key_bottom_small, {
    bgImg = keyBottomPressed
    }),
    key_bottomRight_small = _uses(s.keyboard.key_bottomRight_small, {
    bgImg = keyBottomRightPressed
    }),

    spacer_topLeft = _uses(s.keyboard.spacer_topLeft),
    spacer_top = _uses(s.keyboard.spacer_top),
    spacer_topRight = _uses(s.keyboard.spacer_topRight),
    spacer_left = _uses(s.keyboard.spacer_left),
    spacer_middle = _uses(s.keyboard.spacer_middle),
    spacer_right = _uses(s.keyboard.spacer_right),
    spacer_bottomLeft = _uses(s.keyboard.spacer_bottomLeft),
    spacer_bottom = _uses(s.keyboard.spacer_bottom),
    spacer_bottomRight = _uses(s.keyboard.spacer_bottomRight),
    }

    local _timeFirstColumnX12h = 218
    local _timeFirstColumnX24h = 280

    s.time_input_background_12h = {
    w = WH_FILL,
    h = screenHeight – TITLE_HEIGHT,
    position = LAYOUT_NONE,
    img = _loadImage(self, „Multi_Character_Entry/tch_multi_char_bkgrd_3c.png“),
    x = 0,
    y = TITLE_HEIGHT,
    }

    s.time_input_background_24h = {
    w = WH_FILL,
    h = screenHeight – TITLE_HEIGHT,
    position = LAYOUT_NONE,
    img = _loadImage(self, „Multi_Character_Entry/tch_multi_char_bkgrd_2c.png“),
    x = 0,
    y = TITLE_HEIGHT,
    }

    s.time_input_menu_box_12h = {
    position = LAYOUT_NONE,
    img = _loadImage(self, „Multi_Character_Entry/menu_box_fixed.png“),
    w = 370,
    h = 80,
    x = 216,
    y = 228,
    }
    s.time_input_menu_box_24h = _uses(s.time_input_menu_box_12h, {
    — img = _loadImage(self, „UNOFFICIAL/menu_box_fixed_2c.png“),
    w = 242,
    x = 278,

    })

    — time input window
    s.input_time_12h = _uses(s.window)
    s.input_time_12h.hour = _uses(s.menu, {
    w = 100,
    –h = screenHeight – TITLE_HEIGHT,
    h = screenHeight,
    itemHeight = 80,
    position = LAYOUT_WEST,
    padding = 0,
    border = { _timeFirstColumnX12h, TITLE_HEIGHT, 0, 0 },
    item = {
    bgImg = false,
    order = { ‚text‘ },
    text = {
    align = ‚right‘,
    font = _boldfont(45),
    padding = { 2, 4, 8, 0 },
    fg = { 0xb3, 0xb3, 0xb3 },
    sh = { },
    },
    },
    selected = {
    item = {
    order = { ‚text‘ },
    bgImg = false,
    text = {
    font = _boldfont(45),
    fg = { 0xe6, 0xe6, 0xe6 },
    sh = { },
    align = ‚right‘,
    padding = { 2, 4, 8, 0 },
    },
    },
    },
    pressed = {
    item = {
    order = { ‚text‘ },
    bgImg = false,
    text = {
    font = _boldfont(45),
    fg = { 0xe6, 0xe6, 0xe6 },
    sh = { },
    align = ‚right‘,
    padding = { 2, 4, 8, 0 },
    },
    },
    },
    })
    s.input_time_12h.minute = _uses(s.input_time_12h.hour, {
    border = { _timeFirstColumnX12h + 125, TITLE_HEIGHT, 0, 0 },
    })
    s.input_time_12h.ampm = _uses(s.input_time_12h.hour, {
    border = { _timeFirstColumnX12h + 125 + 120, TITLE_HEIGHT, 0, 0 },
    item = {
    text = {
    padding = { 0, 2, 8, 0 },
    font = _boldfont(26),
    },
    },
    selected = {
    item = {
    text = {
    padding = { 0, 4, 8, 0 },
    font = _boldfont(26),
    },
    },
    },
    pressed = {
    item = {
    text = {
    padding = { 0, 4, 8, 0 },
    font = _boldfont(26),
    },
    },
    },
    })
    s.input_time_12h.hourUnselected = s.input_time_12h.hour
    s.input_time_12h.minuteUnselected = s.input_time_12h.minute
    s.input_time_12h.ampmUnselected = s.input_time_12h.ampm

    s.input_time_24h = _uses(s.input_time_12h, {
    hour = {
    border = { _timeFirstColumnX24h, TITLE_HEIGHT, 0, 0 },
    },
    minute = {
    border = { _timeFirstColumnX24h + 124, TITLE_HEIGHT, 0, 0 },
    },
    hourUnselected = {
    border = { _timeFirstColumnX24h, TITLE_HEIGHT, 0, 0 },
    },
    minuteUnselected = {
    border = { _timeFirstColumnX24h + 124, TITLE_HEIGHT, 0, 0 },
    },
    })

    — one set for buttons, one for spacers

    ——— WINDOW STYLES ———

    — These styles override the default styles for a specific window

    — typical text list window
    s.text_list = _uses(s.window)

    — text_only removes icons
    s.text_only = _uses(s.text_list, {
    menu = {
    item = {
    order = { ‚text‘, ‚arrow‘, },
    },
    selected = {
    item = {
    order = { ‚text‘, ‚arrow‘, },
    }
    },
    pressed = {
    item = {
    order = { ‚text‘, ‚arrow‘, },
    }
    },
    locked = {
    item = {
    order = { ‚text‘, ‚arrow‘, },
    }
    },
    },
    })

    s.text_list.title = _uses(s.title, {
    text = {
    line = {
    {
    font = _boldfont(TITLEBAR_FONT_SIZE),
    height = 32,
    },
    {
    font = _font(14),
    fg = { 0xB3, 0xB3, 0xB3 },
    },
    },
    },
    })

    s.text_list.title.textButton = _uses(s.text_list.title.text, {
    bgImg = titlebarButtonBox,
    padding = { 4, 15, 4, 15 },
    })
    s.text_list.title.pressed = {}
    s.text_list.title.pressed.textButton = _uses(s.text_list.title.text, {
    bgImg = pressedTitlebarButtonBox,
    padding = { 4, 15, 4, 15 },
    })

    — choose player window is exactly the same as text_list on all windows except WQVGAlarge
    s.choose_player = s.text_list

    s.multiline_text_list = _uses(s.text_list)

    s.multiline_text_list.menu = _uses(s.menu, {
    itemHeight = THREE_ITEM_HEIGHT,
    item = {
    padding = { 10, 8, 0, 8 },
    bgImg = false,
    icon = {
    align = ‚top‘,
    },
    },
    })

    s.multiline_text_list.menu.item_no_arrow = _uses(s.multiline_text_list.menu.item)

    s.multiline_text_list.menu.selected = {}
    s.multiline_text_list.menu.selected.item = _uses(s.multiline_text_list.menu.item, {
    bgImg = threeItemSelectionBox,
    })
    s.multiline_text_list.menu.selected.item_no_arrow = _uses(s.multiline_text_list.menu.selected.item)

    s.multiline_text_list.menu.pressed = {}
    s.multiline_text_list.menu.pressed.item = _uses(s.multiline_text_list.menu.item, {
    bgImg = threeItemPressedBox,
    })
    s.multiline_text_list.menu.pressed.item_no_arrow = _uses(s.multiline_text_list.menu.pressed.item)

    — popup „spinny“ window
    s.waiting_popup = _uses(s.popup, {
    text = {
    w = WH_FILL,
    h = (POPUP_TEXT_SIZE_1 + 8 ),
    position = LAYOUT_NORTH,
    border = { 0, 50, 0, 0 },
    padding = { 15, 0, 15, 0 },
    align = „center“,
    font = _font(POPUP_TEXT_SIZE_1),
    lineHeight = POPUP_TEXT_SIZE_1 + 8,
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    subtext = {
    w = WH_FILL,
    h = 47,
    position = LAYOUT_SOUTH,
    border = { 0, 0, 0, 20 },
    padding = { 15, 0, 15, 0 },
    align = „top“,
    font = _boldfont(POPUP_TEXT_SIZE_2),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    })

    s.waiting_popup.subtext_connected = _uses(s.waiting_popup.subtext, {
    fg = TEXT_COLOR_TEAL,
    })

    s.black_popup = _uses(s.waiting_popup)
    s.black_popup.title = _uses(s.title, {
    bgImg = false,
    order = { },
    })

    — input window (including keyboard)
    s.input = _uses(s.window)
    s.input.title = _uses(s.title, {
    — remove 3px from the height and 3px from the bottom padding
    h = 44,
    padding = { 0, 5, 0, 2 },
    bgImg = inputTitleBox,
    })

    local clearMask = Tile:fillColor(0x00000000)

    s.power_on_window = _uses(s.window)
    s.power_on_window.maskImg = clearMask
    s.power_on_window.title = _uses(s.title, {
    bgImg = false,
    })

    — update window
    s.update_popup = _uses(s.popup, {
    text = {
    w = WH_FILL,
    h = (POPUP_TEXT_SIZE_1 + 8 ),
    position = LAYOUT_NORTH,
    border = { 0, 34, 0, 2 },
    padding = { 10, 0, 10, 0 },
    align = „center“,
    font = _font(POPUP_TEXT_SIZE_1),
    lineHeight = POPUP_TEXT_SIZE_1 + 8,
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    subtext = {
    w = WH_FILL,
    — note this is a hack as the height and padding push
    — the content out of the widget bounding box.
    h = 30,
    padding = { 0, 0, 0, 28 },
    font = _boldfont(UPDATE_SUBTEXT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    align = „bottom“,
    position = LAYOUT_SOUTH,
    },

    progress = {
    border = { 15, 7, 15, 17 },
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _progressBackground,
    img = _progressBar,
    },
    })

    s.home_menu = _uses(s.text_list, {
    menu = {
    item = _uses(s.item, {
    icon = {
    img = _loadImage(self, „IconsResized/icon_loading“ .. skinSuffix)
    },
    }),
    selected = {
    item = _uses(s.selected.item, {
    icon = {
    img = _loadImage(self, „IconsResized/icon_loading“ .. skinSuffix),
    },
    }),
    },
    locked = {
    item = _uses(s.locked.item, {
    icon = {
    img = _loadImage(self, „IconsResized/icon_loading“ .. skinSuffix),
    },
    }),
    },
    },
    })

    s.home_menu.menu.item.icon_no_artwork = {
    img = _loadImage(self, „IconsResized/icon_loading“ .. skinSuffix ),
    h = THUMB_SIZE,
    padding = MENU_ITEM_ICON_PADDING,
    align = ‚center‘,
    }
    s.home_menu.menu.selected.item.icon_no_artwork = s.home_menu.menu.item.icon_no_artwork
    s.home_menu.menu.locked.item.icon_no_artwork = s.home_menu.menu.item.icon_no_artwork

    — icon_list window
    s.icon_list = _uses(s.window, {
    menu = {
    item = {
    order = { „icon“, „text“, „arrow“ },
    padding = { ITEM_LEFT_PADDING, 0, 0, 0 },
    text = {
    w = WH_FILL,
    h = WH_FILL,
    align = ‚left‘,
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    line = {
    {
    font = _boldfont(ALBUMMENU_FONT_SIZE),
    height = 22,
    },
    {
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    },
    },
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    icon = {
    h = THUMB_SIZE,
    padding = MENU_ITEM_ICON_PADDING,
    align = ‚center‘,
    },
    arrow = _uses(s.item.arrow),
    },
    },
    })

    s.icon_list.menu.item_checked = _uses(s.icon_list.menu.item, {
    order = { ‚icon‘, ‚text‘, ‚check‘, ‚arrow‘ },
    check = {
    align = ITEM_ICON_ALIGN,
    padding = CHECK_PADDING,
    img = _loadImage(self, „Icons/icon_check_5line.png“)
    },
    })
    s.icon_list.menu.item_play = _uses(s.icon_list.menu.item, {
    arrow = { img = false },
    })
    s.icon_list.menu.albumcurrent = _uses(s.icon_list.menu.item_play, {
    arrow = {
    img = _loadImage(self, „Icons/icon_nplay_3line_off.png“),
    },
    text = { padding = 0, },
    — Bug 11482c#13, don’t know why the bgImg has to be redefined again here, but this fixes the issue
    bgImg = fiveItemBox,
    })
    s.icon_list.menu.item_add = _uses(s.icon_list.menu.item, {
    arrow = addArrow,
    })
    s.icon_list.menu.item_no_arrow = _uses(s.icon_list.menu.item, {
    order = { ‚icon‘, ‚text‘ },
    })
    s.icon_list.menu.item_checked_no_arrow = _uses(s.icon_list.menu.item_checked, {
    order = { ‚icon‘, ‚text‘, ‚check‘ },
    })

    s.icon_list.menu.selected = {
    item = _uses(s.icon_list.menu.item, {
    bgImg = fiveItemSelectionBox
    }),
    albumcurrent = _uses(s.icon_list.menu.albumcurrent, {
    arrow = {
    img = _loadImage(self, „Icons/icon_nplay_3line_sel.png“),
    },
    bgImg = fiveItemSelectionBox,
    }),
    item_checked = _uses(s.icon_list.menu.item_checked, {
    bgImg = fiveItemSelectionBox
    }),
    item_play = _uses(s.icon_list.menu.item_play, {
    bgImg = fiveItemSelectionBox
    }),
    item_add = _uses(s.icon_list.menu.item_add, {
    bgImg = fiveItemSelectionBox
    }),
    item_no_arrow = _uses(s.icon_list.menu.item_no_arrow, {
    bgImg = fiveItemSelectionBox
    }),
    item_checked_no_arrow = _uses(s.icon_list.menu.item_checked_no_arrow, {
    bgImg = fiveItemSelectionBox
    }),
    }
    s.icon_list.menu.pressed = {
    item = _uses(s.icon_list.menu.item, {
    bgImg = fiveItemPressedBox
    }),
    albumcurrent = _uses(s.icon_list.menu.albumcurrent, {
    bgImg = fiveItemSelectionBox
    }),
    item_checked = _uses(s.icon_list.menu.item_checked, {
    bgImg = fiveItemPressedBox
    }),
    item_play = _uses(s.icon_list.menu.item_play, {
    bgImg = fiveItemPressedBox
    }),
    item_add = _uses(s.icon_list.menu.item_add, {
    bgImg = fiveItemPressedBox
    }),
    item_no_arrow = _uses(s.icon_list.menu.item_no_arrow, {
    bgImg = fiveItemPressedBox
    }),
    item_checked_no_arrow = _uses(s.icon_list.menu.item_checked_no_arrow, {
    bgImg = fiveItemPressedBox
    }),
    }
    s.icon_list.menu.locked = {
    item = _uses(s.icon_list.menu.pressed.item, {
    arrow = smallSpinny
    }),
    item_checked = _uses(s.icon_list.menu.pressed.item_checked, {
    arrow = smallSpinny
    }),
    item_play = _uses(s.icon_list.menu.pressed.item_play, {
    arrow = smallSpinny
    }),
    item_add = _uses(s.icon_list.menu.pressed.item_add, {
    arrow = smallSpinny
    }),
    albumcurrent = _uses(s.icon_list.menu.pressed.albumcurrent, {
    arrow = smallSpinny
    }),
    }

    — list window with help text
    s.help_list = _uses(s.text_list)

    –[[
    — BUG 11662, help_list used to have the top textarea fill the available space. That’s been removed, but leaving this code in for now as an example of how to do that
    s.help_list = _uses(s.window)

    s.help_list.menu = _uses(s.menu, {
    position = LAYOUT_SOUTH,
    maxHeight = FIVE_ITEM_HEIGHT * 3,
    itemHeight = FIVE_ITEM_HEIGHT,
    })

    s.help_list.help_text = _uses(s.help_text, {
    h = WH_FILL,
    align = „left“
    })
    –]]

    — error window
    — XXX: needs layout
    s.error = _uses(s.help_list)

    — information window
    s.information = _uses(s.window)

    s.information.text = {
    font = _font(TEXTAREA_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    padding = { 18, 18, 10, 0},
    lineHeight = 23,
    }

    — help window (likely the same as information)
    s.help_info = _uses(s.information)

    –track_list window
    — XXXX todo
    — identical to text_list but has icon in upper left of titlebar
    s.track_list = _uses(s.text_list)

    s.track_list.title = _uses(s.title, {
    order = { ‚lbutton‘, ‚icon‘, ‚text‘, ‚rbutton‘ },
    icon = {
    w = THUMB_SIZE,
    h = WH_FILL,
    padding = { 10, 1, 8, 1 },
    },
    })

    — playlist same as icon list
    s.play_list = _uses(s.icon_list)

    — toast_popup popup (is now text only)
    s.toast_popup_textarea = {
    padding = { 20, 20, 20, 20 } ,
    align = ‚left‘,
    w = WH_FILL,
    h = WH_FILL,
    font = _boldfont(21),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    }

    — toast_popup popup with art and text
    s.toast_popup = {
    x = 5,
    y = screenHeight/2/2,
    w = screenWidth – 10,
    h = screenHeight/2,
    bgImg = popupBox,
    group = {
    padding = 10,
    order = { ‚icon‘, ‚text‘ },
    text = {
    padding = { 10, 12, 12, 12 } ,
    align = ‚top-left‘,
    w = WH_FILL,
    h = WH_FILL,
    font = _font(HELP_FONT_SIZE),
    lineHeight = HELP_FONT_SIZE + 5,
    },
    icon = {
    align = ‚top-left‘,
    border = { 12, 12, 0, 0 },
    img = _loadImage(self, „UNOFFICIAL/menu_album_noartwork_64.png“),
    h = WH_FILL,
    w = 64,
    }
    }
    }
    — toast popup with textarea
    s.toast_popup_text = _uses(s.toast_popup, {
    group = {
    order = { ‚text‘ },
    text = {
    w = WH_FILL,
    h = WH_FILL,
    align = ‚top-left‘,
    padding = { 10, 12, 12, 12 },
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    }
    })

    — toast popup with icon only
    s.toast_popup_icon = _uses(s.toast_popup, {
    w = 190,
    h = 178,
    x = 145,
    y = 72,
    position = LAYOUT_NONE,
    group = {
    order = { ‚icon‘ },
    border = { 22, 22, 0, 0 },
    padding = 0,
    icon = {
    w = WH_FILL,
    h = WH_FILL,
    align = ‚center‘,
    },
    }
    })

    — new style that incorporates text, icon, more text, and maybe a badge
    s.toast_popup_mixed = {
    x = 19,
    y = 16,
    position = LAYOUT_NONE,
    w = screenWidth – 38,
    h = 214,
    bgImg = popupBox,
    text = {
    position = LAYOUT_NORTH,
    padding = { 8, 24, 8, 0 },
    align = ‚top‘,
    w = WH_FILL,
    h = WH_FILL,
    font = _boldfont(18),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    subtext = {
    position = LAYOUT_NORTH,
    padding = { 8, 178, 8, 0 },
    align = ‚top‘,
    w = WH_FILL,
    h = WH_FILL,
    font = _boldfont(18),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    }

    s._badge = {
    position = LAYOUT_NONE,
    zOrder = 99,
    — middle of the screen plus half of the icon width minus half of the badge width. gotta love LAYOUT_NONE
    x = screenWidth/2 + 21,
    w = 34,
    y = 34,
    }
    s.badge_none = _uses(s._badge, {
    img = false,
    })
    s.badge_favorite = _uses(s._badge, {
    img = _loadImage(self, „Icons/icon_badge_fav.png“)
    })
    s.badge_add = _uses(s._badge, {
    img = _loadImage(self, „Icons/icon_badge_add.png“)
    })

    s.context_menu = {
    x = 8,
    y = 16,
    w = screenWidth – 16,
    h = screenHeight – 32,
    bgImg = contextMenuBox,
    layer = LAYER_TITLE,

    multiline_text = {
    w = WH_FILL,
    h = 172,
    padding = { 18, 2, 14, 18 },
    border = { 0, 0, 6, 15 },
    lineHeight = 22,
    font = _font(18),
    fg = { 0xe6, 0xe6, 0xe6 },
    sh = { },
    align = „top-left“,
    scrollbar = {
    h = 164,
    border = {0, 2, 2, 10},
    },
    },

    title = {
    layer = LAYER_TITLE,
    h = 52,
    padding = {10,10,10,5},
    bgImg = false,
    button_cancel = {
    layer = LAYER_TITLE,
    w = 43,
    align = ‚right‘,
    },
    pressed = {
    button_cancel = {
    bgImg = pressedTitlebarButtonBox,
    layer = LAYER_TITLE,
    w = 43,
    },
    },
    text = {
    layer = LAYER_TITLE,
    w = WH_FILL,
    padding = {0,0,20,0},
    align = „center“,
    font = _boldfont(TITLE_FONT_SIZE),
    fg = TEXT_COLOR,
    },
    },

    menu = {
    h = CM_MENU_HEIGHT * 8,
    border = { 7, 0, 7, 0 },
    padding = { 0, 0, 0, 100 },
    scrollbar = {
    h = CM_MENU_HEIGHT * 8,
    },
    item = {
    h = CM_MENU_HEIGHT,
    order = { „text“, „arrow“ },
    padding = { ITEM_LEFT_PADDING, 0, 12, 0 },
    text = {
    padding = { 0, 4, 0, 0 },
    w = WH_FILL,
    h = WH_FILL,
    align = ‚left‘,
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    line = {
    {
    font = _boldfont(ALBUMMENU_FONT_SIZE),
    height = 22,
    },
    {
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    },
    },
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    arrow = _uses(s.item.arrow),
    },
    selected = {
    item = {
    order = { „text“, „arrow“ },
    bgImg = fiveItemSelectionBox,
    padding = { ITEM_LEFT_PADDING, 0, 12, 0 },
    text = {
    padding = { 0, 4, 0, 0 },
    w = WH_FILL,
    h = WH_FILL,
    align = ‚left‘,
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    line = {
    {
    font = _boldfont(ALBUMMENU_FONT_SIZE),
    height = 22,
    },
    {
    font = _font(ALBUMMENU_SMALL_FONT_SIZE),
    },
    },
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    arrow = _uses(s.item.arrow),
    },
    },

    },
    }

    s.context_menu.menu.item_play = _uses(s.context_menu.menu.item, {
    arrow = {img = playArrow.img},
    })
    s.context_menu.menu.selected.item_play = _uses(s.context_menu.menu.selected.item, {
    arrow = {img = playArrow.img},
    })

    s.context_menu.menu.item_insert = _uses(s.context_menu.menu.item, {
    arrow = {img = addArrow.img},
    })
    s.context_menu.menu.selected.item_insert = _uses(s.context_menu.menu.selected.item, {
    arrow = {img = addArrow.img},
    })

    s.context_menu.menu.item_add = _uses(s.context_menu.menu.item, {
    arrow = {img = addArrow.img},
    })
    s.context_menu.menu.selected.item_add = _uses(s.context_menu.menu.selected.item, {
    arrow = {img = addArrow.img},
    })

    s.context_menu.menu.item_playall = _uses(s.context_menu.menu.item, {
    arrow = {img = playArrow.img},
    })
    s.context_menu.menu.selected.item_playall = _uses(s.context_menu.menu.selected.item, {
    arrow = {img = playArrow.img},
    })

    s.context_menu.menu.item_fav = _uses(s.context_menu.menu.item, {
    arrow = {img = favItem.img},
    })
    s.context_menu.menu.selected.item_fav = _uses(s.context_menu.menu.selected.item, {
    arrow = {img = favItem.img},
    })

    s.context_menu.menu.item_no_arrow = _uses(s.context_menu.menu.item, {
    order = { ‚text‘ },
    })
    s.context_menu.menu.selected.item_no_arrow = _uses(s.context_menu.menu.selected.item, {
    order = { ‚text‘ },
    })

    s.context_menu.menu.pressed = _uses(s.context_menu.menu.selected, {
    item = {
    bgImg = contextMenuPressedBox,
    },
    })

    s.context_menu.menu.locked = _uses(s.context_menu.menu.pressed, {
    item = {
    arrow = smallSpinny,
    },
    })

    — alarm popup
    s.alarm_header = {
    w = screenWidth,
    –padding = { 50, 0, 50, 0 },
    –order = { ‚icon‘, ‚time‘ },
    order = { ‚time‘ },
    }

    s.alarm_time = {
    w = screenWidth – 20,
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    align = „center“,
    font = _boldfont(62),
    }

    s.preview_text = _uses(s.alarm_time, {
    font = _boldfont(TITLE_FONT_SIZE),
    })

    — alarm menu window
    s.alarm_popup = {
    x = 10,
    y = 10,
    w = screenWidth – 20,
    h = screenHeight – 17,
    border = 0,
    padding = 0,
    bgImg = contextMenuBox,
    layer = LAYER_TITLE,

    title = {
    hidden = 1,
    },

    menu = {
    h = CM_MENU_HEIGHT * 5,
    w = screenWidth – 34,
    x = 7,
    y = 65,
    border = 0,
    itemHeight = CM_MENU_HEIGHT,
    position = LAYOUT_NORTH,
    scrollbar = {
    h = CM_MENU_HEIGHT * 5 – 8,
    border = {0,4,0,0},
    },
    item = {
    h = CM_MENU_HEIGHT,
    order = { „text“, „arrow“ },
    text = {
    w = WH_FILL,
    h = WH_FILL,
    align = ‚left‘,
    font = _boldfont(TEXTMENU_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    arrow = _uses(s.item.arrow),
    },
    selected = {
    item = {
    bgImg = fiveItemSelectionBox,
    order = { „text“, „arrow“ },
    text = {
    w = WH_FILL,
    h = WH_FILL,
    align = ‚left‘,
    font = _boldfont(TEXTMENU_FONT_SIZE),
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    },
    arrow = _uses(s.item.arrow),
    },
    },

    },
    }
    — slider popup (volume)
    s.slider_popup = {
    x = 50,
    y = screenHeight/2 – 100,
    w = screenWidth – 100,
    h = 200,
    bgImg = popupBox,
    heading = {
    w = WH_FILL,
    border = 10,
    fg = TEXT_COLOR,
    font = _boldfont(32),
    padding = { 4, 16, 4, 0 },
    align = „center“,
    bgImg = false,
    },
    slider_group = {
    w = WH_FILL,
    align = ‚center‘,
    padding = { 10, 0, 10, 0 },
    order = { ’slider‘ },
    },
    }

    — scanner popup
    s.scanner_popup = _uses(s.slider_popup, {
    h = 110,
    y = screenHeight/2 – 55,
    })

    s.image_popup = _uses(s.popup, {
    image = {
    w = screenWidth,
    position = LAYOUT_CENTER,
    align = „center“,
    h = screenHeight,
    border = 0,
    },
    })

    ——— SLIDERS ———

    s.volume_slider = {
    w = WH_FILL,
    border = { 0, 0, 0, 10 },
    bgImg = _volumeSliderBackground,
    img = _popupSliderBar,
    }

    s.scanner_slider = _uses(s.volume_slider, {
    img = _volumeSliderBar,
    })

    ——— BUTTONS ———

    — base button
    local _button = {
    bgImg = titlebarButtonBox,
    w = TITLE_BUTTON_WIDTH,
    h = WH_FILL,
    border = { 8, 0, 8, 0 },
    icon = {
    w = WH_FILL,
    h = WH_FILL,
    hidden = 1,
    align = ‚center‘,
    img = false,
    },
    text = {
    w = WH_FILL,
    h = WH_FILL,
    hidden = 1,
    border = 0,
    padding = 0,
    align = ‚center‘,
    font = _font(16),
    fg = { 0xdc,0xdc, 0xdc },
    },
    }
    local _pressed_button = _uses(_button, {
    bgImg = pressedTitlebarButtonBox,
    })

    — icon button factory
    local _titleButtonIcon = function(name, icon, attr)
    s[name] = _uses(_button)
    s[name].layer = LAYER_TITLE

    s.pressed[name] = _uses(_pressed_button)

    attr = {
    hidden = 0,
    img = icon,
    layer = LAYER_TITLE,
    }

    s[name].icon = _uses(_button.icon, attr)
    s[name].w = 65
    s.pressed[name].icon = _uses(_pressed_button.icon, attr)
    s.pressed[name].w = 65
    end

    — text button factory
    local _titleButtonText = function(name, string)
    s[name] = _uses(_button)
    s.pressed[name] = _uses(_pressed_button)

    attr = {
    hidden = 0,
    text = string,
    }

    s[name].text = _uses(_button.text, attr)
    s[name].w = 65
    s.pressed[name].text = _uses(_pressed_button.text, attr)
    s.pressed[name].w = 65
    end

    — invisible button
    s.button_none = _uses(_button, {
    bgImg = false,
    w = TITLE_BUTTON_WIDTH – 12,
    })

    _titleButtonIcon(„button_back“, backButton)
    _titleButtonIcon(„button_cancel“, cancelButton)
    _titleButtonIcon(„button_go_home“, homeButton)
    _titleButtonIcon(„button_playlist“, playlistButton)
    _titleButtonIcon(„button_more“, moreButton)
    _titleButtonIcon(„button_go_playlist“, playlistButton)
    _titleButtonIcon(„button_go_now_playing“, nowPlayingButton)
    _titleButtonIcon(„button_power“, powerButton)
    _titleButtonIcon(„button_nothing“, nil)
    _titleButtonIcon(„button_help“, helpButton)
    _titleButtonText(„button_more_help“, self:string(„MORE_HELP“))
    _titleButtonText(„button_finish_operation“, self:string(„ENTER“))

    s.button_back.padding = { 2, 0, 0, 2 }
    s.button_playlist.padding = { 2, 0, 0, 2 }

    s.button_volume_min = {
    img = _loadImage(self, „Icons/icon_toolbar_vol_down.png“),
    border = { 5, 0, 5, 0 },
    }

    s.button_volume_max = {
    img = _loadImage(self, „Icons/icon_toolbar_vol_up.png“),
    border = { 5, 0, 5, 0 },
    }

    s.button_keyboard_back = {
    align = ‚left‘,
    w = 96,
    h = 66,
    padding = { 14, 0, 0, 0 },
    border = { 0, 2, 9, 5},
    img = _loadImage(self, „Icons/icon_delete_tch_text_entry.png“),
    bgImg = deleteKeyBackground,
    }
    s.pressed.button_keyboard_back = _uses(s.button_keyboard_back, {
    bgImg = deleteKeyPressedBackground,
    })

    local _buttonicon = {
    h = THUMB_SIZE,
    padding = MENU_ITEM_ICON_PADDING,
    align = ‚center‘,
    img = false,
    }

    s.region_US = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_region_americas“ .. skinSuffix),
    })
    s.region_XX = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_region_other“ .. skinSuffix),
    })
    s.icon_help = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_help“ .. skinSuffix),
    })
    s.wlan = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_wireless“ .. skinSuffix),
    })
    s.wired = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ethernet“ .. skinSuffix),
    })

    ——— ICONS ——–

    — icons used for ‚waiting‘ and ‚update‘ windows
    local _icon = {
    w = WH_FILL,
    align = „center“,
    position = LAYOUT_CENTER,
    padding = { 0, 0, 0, 10 }
    }

    local _popupicon = {
    padding = 0,
    border = { 22, 22, 0, 0 },
    h = WH_FILL,
    w = 146,
    }

    — icon for albums with no artwork
    s.icon_no_artwork = {
    img = _loadImage(self, „IconsResized/icon_album_noart“ .. skinSuffix ),
    h = THUMB_SIZE,
    padding = MENU_ITEM_ICON_PADDING,
    align = ‚center‘,
    }

    s.icon_no_artwork_playlist = _uses(s.icon_no_artwork)

    s.icon_connecting = _uses(_icon, {
    img = _loadImage(self, „Alerts/wifi_connecting.png“),
    frameRate = 8,
    frameWidth = 120,
    padding = { 0, 90, 0, 10 },
    })

    s.icon_connected = _uses(_icon, {
    img = _loadImage(self, „Alerts/connecting_success_icon.png“),
    padding = { 0, 2, 0, 10 },
    })

    s.icon_photo_loading = _uses(_icon, {
    img = _loadImage(self, „Icons/image_viewer_loading.png“),
    })

    s.icon_software_update = _uses(_icon, {
    img = _loadImage(self, „IconsResized/icon_firmware_update“ .. skinSuffix),
    })

    s.icon_restart = _uses(_icon, {
    img = _loadImage(self, „IconsResized/icon_restart“ .. skinSuffix),
    })

    s.icon_popup_pause = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_pause.png“),
    })

    s.icon_popup_play = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_play.png“),
    })

    s.icon_popup_fwd = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_fwd.png“),
    })
    s.icon_popup_rew = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_rew.png“),
    })

    s.icon_popup_stop = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_stop.png“),
    })
    s.icon_popup_lineIn = _uses(_popupicon, {
    img = _loadImage(self, „IconsResized/icon_linein_134.png“),
    })

    s.icon_popup_volume = {
    img = _loadImage(self, „Icons/icon_popup_box_volume_bar.png“),
    w = WH_FILL,
    h = 90,
    align = ‚center‘,
    padding = { 0, 5, 0, 5 },
    }

    s.icon_popup_mute = _uses(s.icon_popup_volume, {
    img = _loadImage(self, „Icons/icon_popup_box_volume_mute.png“),
    })

    s.icon_popup_shuffle0 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_shuffle_off.png“),
    })

    s.icon_popup_shuffle1 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_shuffle.png“),
    })

    s.icon_popup_shuffle2 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_shuffle_album.png“),
    })

    s.icon_popup_repeat0 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_repeat_off.png“),
    })

    s.icon_popup_repeat1 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_repeat_song.png“),
    })

    s.icon_popup_repeat2 = _uses(_popupicon, {
    img = _loadImage(self, „Icons/icon_popup_box_repeat.png“),
    })

    s.icon_popup_sleep_15 = {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_15.png“),
    h = WH_FILL,
    w = WH_FILL,
    padding = { 24, 24, 0, 0 },
    }
    s.icon_popup_sleep_30 = _uses(s.icon_popup_sleep_15, {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_30.png“),
    })
    s.icon_popup_sleep_45 = _uses(s.icon_popup_sleep_15, {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_45.png“),
    })
    s.icon_popup_sleep_60 = _uses(s.icon_popup_sleep_15, {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_60.png“),
    })
    s.icon_popup_sleep_90 = _uses(s.icon_popup_sleep_15, {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_90.png“),
    })
    s.icon_popup_sleep_cancel = _uses(s.icon_popup_sleep_15, {
    img = _loadImage(self, „Icons/icon_popup_box_sleep_off.png“),
    padding = { 24, 34, 0, 0 },
    })

    s.icon_power = _uses(_icon, {
    img = _loadImage(self, „IconsResized/icon_restart“ .. skinSuffix),
    })

    s.icon_locked = _uses(_icon, {
    — FIXME no asset for this (needed?)
    — img = _loadImage(self, „Alerts/popup_locked_icon.png“),
    })

    s.icon_alarm = {
    img = _loadImage(self, „Icons/icon_alarm.png“),
    }

    s.icon_art = _uses(_icon, {
    padding = 0,
    img = false,
    })

    s.player_transporter = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_transporter“ .. skinSuffix),
    })
    s.player_squeezebox = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_SB1n2“ .. skinSuffix),
    })
    s.player_squeezebox2 = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_SB1n2“ .. skinSuffix),
    })
    s.player_squeezebox3 = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_SB3“ .. skinSuffix),
    })
    s.player_boom = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_boom“ .. skinSuffix),
    })
    s.player_slimp3 = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_slimp3“ .. skinSuffix),
    })
    s.player_softsqueeze = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_softsqueeze“ .. skinSuffix),
    })
    s.player_controller = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_controller“ .. skinSuffix),
    })
    s.player_receiver = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_receiver“ .. skinSuffix),
    })
    s.player_squeezeplay = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_squeezeplay“ .. skinSuffix),
    })
    s.player_http = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_tunein_url“ .. skinSuffix),
    })
    s.player_baby = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_baby“ .. skinSuffix),
    })
    s.player_fab4 = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_fab4“ .. skinSuffix),
    })

    — misc home menu icons
    s.hm_appletImageViewer = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_image_viewer“ .. skinSuffix),
    })
    s.hm_eject = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_eject“ .. skinSuffix),
    })
    s.hm_sdcard = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_device_SDcard“ .. skinSuffix),
    })
    s.hm_usbdrive = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_device_USB“ .. skinSuffix),
    })
    s.hm_appletNowPlaying = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_nowplaying“ .. skinSuffix),
    })
    s.hm_settings = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings“ .. skinSuffix),
    })
    s.hm_advancedSettings = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_adv“ .. skinSuffix),
    })
    s.hm_radio = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_tunein“ .. skinSuffix),
    })
    s.hm_radios = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_tunein“ .. skinSuffix),
    })
    s.hm_myApps = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_my_apps“ .. skinSuffix),
    })
    s.hm_myMusic = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_mymusic“ .. skinSuffix),
    })
    s.hm__myMusic = _uses(s.hm_myMusic)
    s.hm_otherLibrary = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_other_library“ .. skinSuffix),
    })
    s.hm_myMusicSelector = _uses(s.hm_myMusic)

    s.hm_favorites = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_favorites“ .. skinSuffix),
    })
    s.hm_settingsAlarm = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_alarm“ .. skinSuffix),
    })
    s.hm_settingsPlayerNameChange = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_name“ .. skinSuffix),
    })
    s.hm_settingsBrightness = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_brightness“ .. skinSuffix),
    })
    s.hm_settingsSync = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_sync“ .. skinSuffix),
    })
    s.hm_selectPlayer = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_choose_player“ .. skinSuffix),
    })
    s.hm_quit = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_power_off“ .. skinSuffix),
    })
    s.hm_playerpower = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_power_off“ .. skinSuffix),
    })
    s.hm_myMusicArtists = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_artist“ .. skinSuffix),
    })
    s.hm_myMusicAlbums = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_albums“ .. skinSuffix),
    })
    s.hm_myMusicGenres = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_genres“ .. skinSuffix),
    })
    s.hm_myMusicYears = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_years“ .. skinSuffix),
    })

    s.hm_myMusicNewMusic = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_new_music“ .. skinSuffix),
    })
    s.hm_myMusicPlaylists = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_playlist“ .. skinSuffix),
    })
    s.hm_myMusicSearch = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_search“ .. skinSuffix),
    })
    s.hm_myMusicSearchArtists = _uses(s.hm_myMusicSearch)
    s.hm_myMusicSearchAlbums = _uses(s.hm_myMusicSearch)
    s.hm_myMusicSearchSongs = _uses(s.hm_myMusicSearch)
    s.hm_myMusicSearchPlaylists = _uses(s.hm_myMusicSearch)
    s.hm_myMusicSearchRecent = _uses(s.hm_myMusicSearch)
    s.hm_homeSearchRecent = _uses(s.hm_myMusicSearch)
    s.hm_globalSearch = _uses(s.hm_myMusicSearch)

    s.hm_myMusicMusicFolder = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_folder“ .. skinSuffix),
    })
    s.hm_randomplay = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_ml_random“ .. skinSuffix),
    })
    s.hm_skinTest = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_blank“ .. skinSuffix),
    })

    s.hm_settingsRepeat = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_repeat“ .. skinSuffix),
    })
    s.hm_settingsShuffle = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_shuffle“ .. skinSuffix),
    })
    s.hm_settingsSleep = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_sleep“ .. skinSuffix),
    })
    s.hm_settingsScreen = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_screen“ .. skinSuffix),
    })
    s.hm_appletCustomizeHome = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_home“ .. skinSuffix),
    })
    s.hm_settingsAudio = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_audio“ .. skinSuffix),
    })
    s.hm_linein = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_linein“ .. skinSuffix),
    })

    — ??
    s.hm_loading = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_loading“ .. skinSuffix),
    })
    — ??
    s.hm_settingsPlugin = _uses(_buttonicon, {
    img = _loadImage(self, „IconsResized/icon_settings_plugin“ .. skinSuffix),
    })

    — indicator icons, on right of menus
    local _indicator = {
    align = „center“,
    }

    s.wirelessLevel1 = _uses(_indicator, {
    img = _loadImage(self, „Icons/icon_wireless_1.png“)
    })

    s.wirelessLevel2 = _uses(_indicator, {
    img = _loadImage(self, „Icons/icon_wireless_2.png“)
    })

    s.wirelessLevel3 = _uses(_indicator, {
    img = _loadImage(self, „Icons/icon_wireless_3.png“)
    })

    s.wirelessLevel4 = _uses(_indicator, {
    img = _loadImage(self, „Icons/icon_wireless_4.png“)
    })

    ——— ICONBAR ———

    s.iconbar_group = {
    hidden = 1,
    }

    — time (hidden off screen)
    s.button_time = {
    hidden = 1,
    }

    — BEGIN NowPlaying skin code

    local NP_ARTISTALBUM_FONT_SIZE = 30
    local NP_TRACK_FONT_SIZE = 36

    local controlHeight = 76
    local controlWidth = 85
    local volumeBarWidth = 410 — screenWidth – (transport controls + volume controls + dividers + border around volume bar)
    local buttonPadding = 10

    local _transportControlButton = {
    w = controlWidth,
    h = controlHeight,
    align = ‚center‘,
    padding = buttonPadding,
    }

    local _transportControlBorder = _uses(_transportControlButton, {
    w = 2,
    padding = 0,
    img = touchToolbarKeyDivider,
    })

    s.toolbar_spacer = _uses(_transportControlButton, {
    w = WH_FILL,
    })

    local _tracklayout = {
    border = { 4, 0, 4, 0 },
    position = LAYOUT_NONE,
    w = WH_FILL,
    align = „left“,
    lineHeight = NP_TRACK_FONT_SIZE,
    fg = TEXT_COLOR,
    x = 460,
    }

    s.nowplaying = _uses(s.window, {
    –title bar
    title = _uses(s.title, {
    zOrder = 1,
    text = {
    font = _boldfont(TITLEBAR_FONT_SIZE),
    bgImg = titlebarButtonBox,
    },
    rbutton = {
    font = _font(14),
    fg = TEXT_COLOR,
    bgImg = titlebarButtonBox,
    w = TITLE_BUTTON_WIDTH,
    padding = { 8, 0, 8, 0},
    align = ‚center‘,
    }
    }),

    — Song metadata
    nptitle = {
    order = { ’nptrack‘ },
    position = _tracklayout.position,
    border = _tracklayout.border,
    x = _tracklayout.x,
    y = TITLE_HEIGHT + 32 + 65,
    h = 32,
    nptrack = {
    w = screenWidth – _tracklayout.x – 10,
    h = WH_FILL,
    align = _tracklayout.align,
    lineHeight = _tracklayout.lineHeight,
    fg = _tracklayout.fg,
    font = _boldfont(NP_TRACK_FONT_SIZE),
    sh = TEXT_SH_COLOR,
    },
    },
    npartistgroup = {
    order = { ’npartist‘ },
    position = _tracklayout.position,
    border = _tracklayout.border,
    x = _tracklayout.x,
    y = TITLE_HEIGHT + 32 + 32 + 70,
    h = 32,
    npartist = {
    padding = { 0, 6, 0, 0 },
    w = screenWidth – _tracklayout.x – 10,
    align = _tracklayout.align,
    lineHeight = _tracklayout.lineHeight,
    fg = _tracklayout.fg,
    font = _font(NP_ARTISTALBUM_FONT_SIZE),
    sh = TEXT_SH_COLOR,
    },
    },
    npalbumgroup = {
    order = {’npalbum‘ },
    position = _tracklayout.position,
    border = _tracklayout.border,
    x = _tracklayout.x,
    y = TITLE_HEIGHT + 32 + 32 + 32 + 70,
    h = 32,
    npalbum = {
    w = screenWidth – _tracklayout.x – 10,
    padding = { 0, 6, 0, 0 },
    align = _tracklayout.align,
    lineHeight = _tracklayout.lineHeight,
    fg = _tracklayout.fg,
    font = _font(NP_ARTISTALBUM_FONT_SIZE),
    sh = TEXT_SH_COLOR,
    },
    },
    npartistalbum = {
    hidden = 1,
    },

    — cover art
    npartwork = {
    w = 440,
    position = LAYOUT_NONE,
    x = 7,
    y = TITLE_HEIGHT + 7,
    align = „center“,
    h = 440,

    artwork = {
    w = 440,
    align = „center“,
    padding = 0,
    img = false,
    },
    },

    npvisu = { hidden = 1 },

    –transport controls
    npcontrols = {
    order = { ‚rew‘, ‚div1‘, ‚play‘, ‚div2‘, ‚fwd‘, ‚div3‘, ‚repeatMode‘, ‚div4′, ’shuffleMode‘,
    ‚div5‘, ‚volDown‘, ‚div6‘, ‚volSlider‘, ‚div7‘, ‚volUp‘ },
    position = LAYOUT_SOUTH,
    h = controlHeight,
    w = WH_FILL,
    bgImg = touchToolbarBackground,

    div1 = _uses(_transportControlBorder),
    div2 = _uses(_transportControlBorder),
    div3 = _uses(_transportControlBorder),
    div4 = _uses(_transportControlBorder),
    div5 = _uses(_transportControlBorder),
    div6 = _uses(_transportControlBorder),
    div7 = _uses(_transportControlBorder),

    rew = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_rew.png“),
    }),
    play = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_play.png“),
    }),
    pause = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_pause.png“),
    }),
    fwd = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_ffwd.png“),
    }),
    shuffleMode = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_shuffle_off.png“),
    }),
    shuffleOff = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_shuffle_off.png“),
    }),
    shuffleSong = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_shuffle_on.png“),
    }),
    shuffleAlbum = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_shuffle_album_on.png“),
    }),
    repeatMode = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_repeat_off.png“),
    }),
    repeatOff = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_repeat_off.png“),
    }),
    repeatPlaylist = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_repeat_on.png“),
    }),
    repeatSong = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_repeat_song_on.png“),
    }),
    volDown = _uses(_transportControlButton, {
    — // w = 34,
    img = _loadImage(self, „Icons/icon_toolbar_vol_down.png“),
    }),
    volUp = _uses(_transportControlButton, {
    — // w = 34,
    img = _loadImage(self, „Icons/icon_toolbar_vol_up.png“),
    }),
    thumbsUp = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_thumbup.png“),
    }),
    thumbsDown = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_thumbdown.png“),
    }),
    thumbsUpDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_thumbup_dis.png“),
    }),
    thumbsDownDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_thumbdown_dis.png“),
    }),
    love = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_love_on.png“),
    }),
    hate = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_love_off.png“),
    }),
    fwdDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_ffwd_dis.png“),
    }),
    rewDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_rew_dis.png“),
    }),
    shuffleDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_shuffle_dis.png“),
    }),
    repeatDisabled = _uses(_transportControlButton, {
    img = _loadImage(self, „Icons/icon_toolbar_repeat_dis.png“),
    }),
    },

    — Progress bar
    npprogress = {
    position = LAYOUT_NONE,
    x = 460,
    y = TITLE_HEIGHT + 289,
    padding = { 0, 11, 0, 0 },
    order = { „elapsed“, „slider“, „remain“ },
    elapsed = {
    w = 80,
    align = ‚left‘,
    padding = { 0, 0, 4, 20 },
    font = _boldfont(24),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    remain = {
    w = 80,
    align = ‚right‘,
    padding = { 4, 0, 0, 20 },
    font = _boldfont(24),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    elapsedSmall = {
    w = 80,
    align = ‚left‘,
    padding = { 0, 0, 4, 20 },
    font = _boldfont(24),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    remainSmall = {
    w = 80,
    align = ‚right‘,
    padding = { 4, 0, 0, 20 },
    font = _boldfont(24),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    npprogressB = {
    w = 400,
    h = 30,
    padding = { 0, 0, 0, 0 },
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _songProgressBackground,
    img = _songProgressBar,
    },
    },

    — special style for when there shouldn’t be a progress bar (e.g., internet radio streams)
    npprogressNB = {
    order = { „elapsed“ },
    position = LAYOUT_NONE,
    x = 460,
    y = TITLE_HEIGHT + 9 + 26 + 32 + 32 + 23 + 84,
    elapsed = {
    w = WH_FILL,
    align = „left“,
    font = _boldfont(18),
    fg = { 0xe7, 0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    },

    })
    s.nowplaying.npprogressNB.elapsedSmall = s.nowplaying.npprogressNB.elapsed

    — sliders
    s.nowplaying.npprogress.npprogressB_disabled = _uses(s.nowplaying.npprogress.npprogressB, {
    img = _songProgressBarDisabled,
    })

    s.npvolumeB = {
    w = volumeBarWidth,
    border = { 5, 20, 5, 0 },
    padding = { 6, 0, 6, 0 },
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _volumeSliderBackground,
    img = _volumeSliderBar,
    pillImg = _volumeSliderPill,
    }
    s.npvolumeB_disabled = _uses(s.npvolumeB, {
    pillImg = false,
    })

    — pressed styles
    s.nowplaying.title.pressed = _uses(s.nowplaying.title, {
    text = {
    fg = { 0xB3, 0xB3, 0xB3 },
    sh = { },
    bgImg = pressedTitlebarButtonBox,
    },
    lbutton = {
    bgImg = pressedTitlebarButtonBox,
    },
    rbutton = {
    bgImg = pressedTitlebarButtonBox,
    },
    })

    s.nowplaying.pressed = s.nowplaying
    s.nowplaying.nptitle.pressed = _uses(s.nowplaying.nptitle)
    s.nowplaying.npalbumgroup.pressed = _uses(s.nowplaying.npalbumgroup)
    s.nowplaying.npartistgroup.pressed = _uses(s.nowplaying.npartistgroup)
    s.nowplaying.npartwork.pressed = s.nowplaying.npartwork

    s.nowplaying.npcontrols.pressed = {
    rew = _uses(s.nowplaying.npcontrols.rew, { bgImg = keyMiddlePressed }),
    play = _uses(s.nowplaying.npcontrols.play, { bgImg = keyMiddlePressed }),
    pause = _uses(s.nowplaying.npcontrols.pause, { bgImg = keyMiddlePressed }),
    fwd = _uses(s.nowplaying.npcontrols.fwd, { bgImg = keyMiddlePressed }),
    repeatPlaylist = _uses(s.nowplaying.npcontrols.repeatPlaylist, { bgImg = keyMiddlePressed }),
    repeatSong = _uses(s.nowplaying.npcontrols.repeatSong, { bgImg = keyMiddlePressed }),
    repeatOff = _uses(s.nowplaying.npcontrols.repeatOff, { bgImg = keyMiddlePressed }),
    repeatMode = _uses(s.nowplaying.npcontrols.repeatMode, { bgImg = keyMiddlePressed }),
    shuffleAlbum = _uses(s.nowplaying.npcontrols.shuffleAlbum, { bgImg = keyMiddlePressed }),
    shuffleSong = _uses(s.nowplaying.npcontrols.shuffleSong, { bgImg = keyMiddlePressed }),
    shuffleMode = _uses(s.nowplaying.npcontrols.shuffleMode, { bgImg = keyMiddlePressed }),
    shuffleOff = _uses(s.nowplaying.npcontrols.shuffleOff, { bgImg = keyMiddlePressed }),
    volDown = _uses(s.nowplaying.npcontrols.volDown, { bgImg = keyMiddlePressed }),
    volUp = _uses(s.nowplaying.npcontrols.volUp, { bgImg = keyMiddlePressed }),

    thumbsUp = _uses(s.nowplaying.npcontrols.thumbsUp, { bgImg = keyMiddlePressed }),
    thumbsDown = _uses(s.nowplaying.npcontrols.thumbsDown, { bgImg = keyMiddlePressed }),
    thumbsUpDisabled = s.nowplaying.npcontrols.thumbsUpDisabled,
    thumbsDownDisabled = s.nowplaying.npcontrols.thumbsDownDisabled,
    love = _uses(s.nowplaying.npcontrols.love, { bgImg = keyMiddlePressed }),
    hate = _uses(s.nowplaying.npcontrols.hate, { bgImg = keyMiddlePressed }),
    fwdDisabled = _uses(s.nowplaying.npcontrols.fwdDisabled),
    rewDisabled = _uses(s.nowplaying.npcontrols.rewDisabled),
    shuffleDisabled = _uses(s.nowplaying.npcontrols.shuffleDisabled),
    repeatDisabled = _uses(s.nowplaying.npcontrols.repeatDisabled),
    }

    s.nowplaying_art_only = _uses(s.nowplaying, {

    bgImg = blackBackground,
    title = { hidden = 1 },
    nptitle = { hidden = 1 },
    npcontrols = { hidden = 1 },
    npprogress = { hidden = 1 },
    npprogressNB = { hidden = 1 },
    npartistgroup = { hidden = 1 },
    npalbumgroup = { hidden = 1 },
    npartwork = {
    w = 570,
    position = LAYOUT_NONE,
    x = 220,
    y = 15,
    align = „center“,
    h = 570,
    artwork = {
    w = 570,
    align = „center“,
    padding = 0,
    img = false,
    },
    },

    npvisu = { hidden = 1 },

    })
    s.nowplaying_art_only.pressed = s.nowplaying_art_only

    s.nowplaying_text_only = _uses(s.nowplaying, {
    nptitle = {
    x = 40,
    y = TITLE_HEIGHT + 50,
    nptrack = {
    w = screenWidth – 140,
    },
    },
    npartistgroup = {
    x = 40,
    y = TITLE_HEIGHT + 50 + 65,
    npartist = {
    w = screenWidth – 65,
    },
    },
    npalbumgroup = {
    x = 40,
    y = TITLE_HEIGHT + 50 + 60 + 55,
    npalbum = {
    w = screenWidth – 65,
    },
    },
    npartwork = { hidden = 1 },

    npvisu = { hidden = 1 },

    npprogress = {
    position = LAYOUT_NONE,
    x = 63,
    y = 375,
    padding = { 0, 10, 0, 0 },
    elapsed = {
    w = 100,
    align = ‚left‘,
    padding = { 0, 0, 4, 20 },
    font = _boldfont(18),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    remain = {
    w = 100,
    align = ‚right‘,
    padding = { 4, 0, 0, 20 },
    font = _boldfont(18),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    elapsedSmall = {
    w = 100,
    align = ‚left‘,
    padding = { 0, 0, 4, 20 },
    font = _boldfont(18),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    remainSmall = {
    w = 100,
    align = ‚right‘,
    padding = { 4, 0, 0, 20 },
    font = _boldfont(18),
    fg = { 0xe7,0xe7, 0xe7 },
    sh = { 0x37, 0x37, 0x37 },
    },
    npprogressB = {
    w = 675,
    h = 63,
    padding = { 0, 0, 0, 0 },
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _songProgressBackground,
    img = _songProgressBar,
    },
    },
    npprogressNB = {
    x = 900,
    y = TITLE_HEIGHT + 55,
    padding = { 0, 0, 0, 0 },
    position = LAYOUT_NONE,
    },
    })
    s.nowplaying_text_only.npprogress.npprogressB_disabled = _uses(s.nowplaying_text_only.npprogress.npprogressB, {
    img = _songProgressBarDisabled,
    })
    s.nowplaying_text_only.pressed = s.nowplaying_text_only
    s.nowplaying_text_only.nptitle.pressed = _uses(s.nowplaying_text_only.nptitle)
    s.nowplaying_text_only.npalbumgroup.pressed = _uses(s.nowplaying_text_only.npalbumgroup)
    s.nowplaying_text_only.npartistgroup.pressed = _uses(s.nowplaying_text_only.npartistgroup)

    — Visualizer: Container with titlebar, progressbar and controls.
    — The space between title and controls is used for the visualizer.
    s.nowplaying_visualizer_common = _uses(s.nowplaying, {
    bgImg = nocturneWallpaper,

    npartistgroup = { hidden = 1 },
    npalbumgroup = { hidden = 1 },
    npartwork = { hidden = 1 },

    title = _uses(s.title, {
    zOrder = 1,
    h = TITLE_HEIGHT,
    text = {
    — Hack: text needs to be there to fill the space, but is not visible
    padding = { screenWidth, 0, 0, 0 }
    },
    }),

    — Drawn over regular text between buttons
    nptitle = {
    zOrder = 2,
    position = LAYOUT_NONE,
    x = 100,
    y = 0,
    h = TITLE_HEIGHT,
    border = { 0, 0 ,0, 0 },
    padding = { 20, 14, 5, 5 },
    nptrack = {
    align = „center“,
    w = screenWidth – 196,
    },
    },

    npartistalbum = {
    hidden = 0,
    zOrder = 2,
    position = LAYOUT_NONE,
    x = 0,
    y = TITLE_HEIGHT,
    w = screenWidth,
    h = 75,
    bgImg = titleBox,
    align = „center“,
    fg = { 0xb3, 0xb3, 0xb3 },
    padding = { 100, 0, 100, 5 },
    font = _font(NP_ARTISTALBUM_FONT_SIZE),
    },

    npprogress = {
    zOrder = 3,
    position = LAYOUT_NONE,
    x = 13,
    y = TITLE_HEIGHT + 20,
    h = 75,
    w = screenWidth – 30,
    elapsed = {
    w = 100,
    },
    remain = {
    w = 100,
    },
    elapsedSmall = {
    w = 100,
    },
    remainSmall = {
    w = 100,
    },
    npprogressB = {
    h = 37,
    w = WH_FILL,
    zOrder = 10,
    padding = { 0, 19, 0, 15 },
    horizontal = 1,
    bgImg = false,
    img = _vizProgressBar,
    pillImg = _vizProgressBarPill,
    },
    },

    npprogressNB = {
    x = screenWidth – 80,
    y = TITLE_HEIGHT + 22,
    h = 48,
    },
    })
    s.nowplaying_visualizer_common.npprogress.npprogressB_disabled = s.nowplaying_visualizer_common.npprogress.npprogressB

    — Visualizer: Spectrum Visualizer
    s.nowplaying_spectrum_text = _uses(s.nowplaying_visualizer_common, {
    npvisu = {
    hidden = 0,
    position = LAYOUT_NONE,
    x = 0,
    y = 2 * TITLE_HEIGHT + 4,
    w = 1024,
    h = 556 – (2 * TITLE_HEIGHT + 4 + 45),
    border = { 0, 0, 0, 0 },
    padding = { 0, 0, 0, 0 },

    spectrum = {
    position = LAYOUT_NONE,
    x = 0,
    y = 2 * TITLE_HEIGHT + 4,
    w = 1024,
    h = 556 – (2 * TITLE_HEIGHT + 4 + 45),
    border = { 0, 0, 0, 0 },
    padding = { 0, 0, 0, 0 },

    bg = { 0x00, 0x00, 0x00, 0x00 },

    barColor = { 0x14, 0xbc, 0xbc, 0xff },
    capColor = { 0x74, 0x56, 0xa1, 0xff },

    isMono = 0, — 0 / 1

    capHeight = { 4, 4 }, — >= 0
    capSpace = { 4, 4 }, — >= 0
    channelFlipped = { 0, 1 }, — 0 / 1
    barsInBin = { 2, 2 }, — > 1
    barWidth = { 1, 1 }, — > 1
    barSpace = { 3, 3 }, — >= 0
    binSpace = { 6, 6 }, — >= 0
    clipSubbands = { 1, 1 }, — 0 / 1
    }
    },
    })
    s.nowplaying_spectrum_text.pressed = s.nowplaying_spectrum_text

    s.nowplaying_spectrum_text.title.pressed = _uses(s.nowplaying_spectrum_text.title, {
    text = {
    — Hack: text needs to be there to fill the space, not visible
    padding = { screenWidth, 0, 0, 0 }
    },
    })

    — Visualizer: Analog VU Meter
    s.nowplaying_vuanalog_text = _uses(s.nowplaying_visualizer_common, {
    npvisu = {
    hidden = 0,
    position = LAYOUT_NONE,
    x = 0,
    y = TITLE_HEIGHT + 63,
    w = 1024,
    h = 533 – (TITLE_HEIGHT + 38 + 38),
    border = { 0, 0, 0, 0 },
    padding = { 0, 0, 0, 0 },

    vumeter_analog = {
    position = LAYOUT_NONE,
    x = 0,
    y = TITLE_HEIGHT + 63,
    w = 1024,
    h = 533 – (TITLE_HEIGHT + 38 + 38),
    border = { 0, 0, 0, 0 },
    padding = { 0, 0, 0, 0 },
    bgImg = _loadImage(self, „UNOFFICIAL/VUMeter/vu_analog_25seq_w.png“),
    }
    },
    })
    s.nowplaying_vuanalog_text.pressed = s.nowplaying_vuanalog_text

    s.nowplaying_vuanalog_text.title.pressed = _uses(s.nowplaying_vuanalog_text.title, {
    text = {
    — Hack: text needs to be there to fill the space, not visible
    padding = { screenWidth, 0, 0, 0 }
    },
    })

    s.brightness_group = {
    order = { ‚down‘, ‚div1′, ’slider‘, ‚div2‘, ‚up‘ },
    position = LAYOUT_SOUTH,
    h = 70,
    w = WH_FILL,
    bgImg = sliderBackground,

    div1 = _uses(_transportControlBorder),
    div2 = _uses(_transportControlBorder),

    down = _uses(_transportControlButton, {
    w = 70,
    h = 70,
    img = _loadImage(self, „Icons/icon_toolbar_brightness_down.png“),
    }),
    up = _uses(_transportControlButton, {
    w = 70,
    h = 70,
    img = _loadImage(self, „Icons/icon_toolbar_brightness_up.png“),
    }),
    }
    s.brightness_group.pressed = {

    down = _uses(s.brightness_group.down, { bgImg = sliderButtonPressed }),
    up = _uses(s.brightness_group.up, { bgImg = sliderButtonPressed }),
    }

    s.brightness_slider = {
    w = WH_FILL,
    border = { 5, 12, 5, 0 },
    padding = { 6, 0, 6, 0 },
    position = LAYOUT_SOUTH,
    horizontal = 1,
    bgImg = _volumeSliderBackground,
    img = _volumeSliderBar,
    pillImg = _volumeSliderPill,
    }

    s.settings_slider_group = _uses(s.brightness_group, {
    down = {
    img = _loadImage(self, „Icons/icon_toolbar_minus.png“),
    },
    up = {
    img = _loadImage(self, „Icons/icon_toolbar_plus.png“),
    },
    })

    s.settings_slider = _uses(s.brightness_slider, {
    })
    s.settings_slider_group.pressed = {
    down = _uses(s.settings_slider_group.down, {
    bgImg = sliderButtonPressed,
    img = _loadImage(self, „Icons/icon_toolbar_minus_dis.png“),
    }),
    up = _uses(s.settings_slider_group.up, {
    bgImg = sliderButtonPressed,
    img = _loadImage(self, „Icons/icon_toolbar_plus_dis.png“),
    }),
    }

    s.settings_volume_group = _uses(s.brightness_group, {
    down = {
    img = _loadImage(self, „Icons/icon_toolbar_vol_down.png“),
    },
    up = {
    img = _loadImage(self, „Icons/icon_toolbar_vol_up.png“),
    },
    })
    s.settings_volume_group.pressed = {
    down = _uses(s.settings_volume_group.down, {
    bgImg = sliderButtonPressed,
    img = _loadImage(self, „Icons/icon_toolbar_vol_down_dis.png“),
    }),
    up = _uses(s.settings_volume_group.up, {
    bgImg = sliderButtonPressed,
    img = _loadImage(self, „Icons/icon_toolbar_vol_up_dis.png“),
    }),
    }

    s.debug_canvas = {
    zOrder = 9999
    }

    s.demo_text = {
    font = _boldfont(18),
    position = LAYOUT_SOUTH,
    w = screenWidth,
    h = 63,
    align = ‚center‘,
    padding = { 6, 0, 6, 10 },
    fg = TEXT_COLOR,
    sh = TEXT_SH_COLOR,
    }

    return s

    end

    –[[

    =head1 LICENSE

    Copyright 2010 Logitech. All Rights Reserved.

    This file is licensed under BSD. Please see the LICENSE file for details.

    =cut
    –]]

    • This reply was modified 6 years, 2 months ago by linlar.
Viewing 5 posts - 1 through 5 (of 5 total)