summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-04-09 23:11:31 -0400
committerWilliam Wilgus <me.theuser@yahoo.com>2021-04-20 03:30:41 +0000
commitacda37edd13b9c6aca16cd1d1ee9183368d5b40c (patch)
treee4b500df9ed0c8c18d576c5c7cc6d80a3ce5b28a
parentc71a47f6496766b80a9e8c965a1603c7223e45ce (diff)
downloadrockbox-acda37edd13b9c6aca16cd1d1ee9183368d5b40c.tar.gz
rockbox-acda37edd13b9c6aca16cd1d1ee9183368d5b40c.zip
lua print table put_line a do_menu alternative
add stylized lines to lua the exported do_menu has a severe limitation of 64 items it also requires double the memory put_line is the way rockbox builds menus update printtable user config from core -- done code cleanup fixed for 1-bit screens changed button behavior fixed for 2-bit screens Change-Id: I4de55e42685aa1d2f53a33bc8e980827864e810b
-rw-r--r--apps/plugins/lua/include_lua/print.lua165
-rw-r--r--apps/plugins/lua/include_lua/printmenus.lua249
-rw-r--r--apps/plugins/lua/include_lua/printtable.lua63
-rw-r--r--apps/plugins/lua/lua.make2
-rwxr-xr-xapps/plugins/lua/rbdefines_helper.pl1
-rw-r--r--apps/plugins/lua/rocklib_img.c148
-rw-r--r--apps/plugins/lua_scripts.lua22
-rw-r--r--apps/plugins/lua_scripts/file_browser.lua2
-rwxr-xr-xapps/plugins/lua_scripts/fileview.lua2
-rwxr-xr-xapps/plugins/lua_scripts/fileviewers.lua3
-rwxr-xr-xapps/plugins/lua_scripts/printmenu.lua83
-rwxr-xr-xapps/plugins/lua_scripts/rlimg.lua2
-rw-r--r--apps/plugins/lua_scripts/tagnav.lua2
13 files changed, 581 insertions, 163 deletions
diff --git a/apps/plugins/lua/include_lua/print.lua b/apps/plugins/lua/include_lua/print.lua
index 3fb19bef1f..3b4c389848 100644
--- a/apps/plugins/lua/include_lua/print.lua
+++ b/apps/plugins/lua/include_lua/print.lua
@@ -123,6 +123,49 @@ local _print = {} do
123 return w, h, msg 123 return w, h, msg
124 end 124 end
125-------------------------------------------------------------------------------- 125--------------------------------------------------------------------------------
126 local function set_linedesc(t_linedesc, opts)
127 local o = opts or _print.opt.get(true)
128 --local out = function() local t = {} for k, v in pairs(o) do t[#t + 1] = tostring(k) t[#t + 1] = tostring(v) end return table.concat(t, "\n") end
129 --rb.splash_scroller(1000, out())
130 local linedesc ={
131 --These are the defaults - changes will be made below if you supplied t_linedesc
132 indent = 0, -- internal indent text
133 line = 0, -- line index within group
134 nlines = 1, -- selection grouping
135 offset = 0, -- internal item offset
136 scroll = true,
137 selected = false, --internal
138 separator_height = 0,
139 line_separator = false,
140 show_cursor = false,
141 show_icons = false,
142 icon = -1,
143 icon_fn = function() return -1 end,
144 style = rb.STYLE_COLORBAR,
145 text_color = o.fg_pattern or WHITE,
146 line_color = o.bg_pattern or BLACK,
147 line_end_color= o.bg_pattern or BLACK,
148 }
149 if type(t_linedesc) == "table" then
150
151 if not o.linedesc then
152 o.linedesc = {}
153 for k, v in pairs(linedesc) do
154 o.linedesc[k] = v
155 end
156 end
157
158 for k, v in pairs(t_linedesc) do
159 o.linedesc[k] = v
160 end
161 if o.linedesc.separator_height > 0 then
162 o.linedesc.line_separator = true
163 end
164 return
165 end
166 o.linedesc = linedesc
167 return o.linedesc
168 end
126 169
127 -- set defaults for print view 170 -- set defaults for print view
128 local function set_defaults() 171 local function set_defaults()
@@ -138,11 +181,13 @@ local _print = {} do
138 line = 1, 181 line = 1,
139 max_line = _NIL, 182 max_line = _NIL,
140 col = 0, 183 col = 0,
141 ovfl = "auto", 184 header = false, --Internal use - treats first entry as header
142 justify = "left", 185 ovfl = "auto", -- auto, manual, none
143 autoupdate = true, 186 justify = "left", --left, center, right
144 drawsep = false, 187 autoupdate = true, --updates screen as items are added
188 drawsep = false, -- separator between items
145 } 189 }
190 set_linedesc(nil, _p_opts) -- default line display
146 _p_opts.max_line = max_lines(_p_opts) 191 _p_opts.max_line = max_lines(_p_opts)
147 192
148 s_lines, col_buf = {}, {} 193 s_lines, col_buf = {}, {}
@@ -187,29 +232,16 @@ local _print = {} do
187 232
188 -- helper function sets up colors/marker for selected items 233 -- helper function sets up colors/marker for selected items
189 local function show_selected(iLine, msg) 234 local function show_selected(iLine, msg)
190 local o = get_settings() -- using a copy of opts so changes revert
191
192 if s_lines[iLine] == true then
193 if not rb.lcd_set_background then
194 o.drawmode = bit.bxor(o.drawmode, 4)
195 else
196 o.fg_pattern = o.bg_pattern
197 o.bg_pattern = o.sel_pattern
198 end
199 -- alternative selection method
200 --msg = "> " .. msg
201 end
202
203 if not o then rb.set_viewport() return end
204
205 if rb.LCD_DEPTH == 2 then -- invert 2-bit screens 235 if rb.LCD_DEPTH == 2 then -- invert 2-bit screens
236 local o = get_settings() -- using a copy of opts so changes revert
237 if not o then rb.set_viewport() return end
206 o.fg_pattern = 3 - o.fg_pattern 238 o.fg_pattern = 3 - o.fg_pattern
207 o.bg_pattern = 3 - o.bg_pattern 239 o.bg_pattern = 3 - o.bg_pattern
240 rb.set_viewport(o)
241 o = _NIL
242 else
243 show_selected = function() end -- no need to check again
208 end 244 end
209
210 rb.set_viewport(o)
211
212 o = _NIL
213 end 245 end
214 246
215 -- sets line explicitly or increments line if line is _NIL 247 -- sets line explicitly or increments line if line is _NIL
@@ -274,31 +306,82 @@ local _print = {} do
274 s_lines[iLine] = true 306 s_lines[iLine] = true
275 end 307 end
276 308
277 -- Internal print function 309 -- Internal print function
278 local function print_internal(t_opts, x, w, h, msg) 310 local function print_internal(t_opts, x, w, h, msg)
279 311
312 local linedesc
313 local line_separator = false
280 local o = t_opts 314 local o = t_opts
281 if o.justify == "center" then 315 local ld = o.linedesc or set_linedesc()
282 x = x + (o.width - w) / 2 316 local show_cursor = ld.show_cursor or 0
283 elseif o.justify == "right" then 317 local line_indent = 0
284 x = x + (o.width - w) 318
319 local linestyle = ld.style or rb.STYLE_COLORBAR
320
321 if o.justify ~= "left" then
322 line_indent = (o.width - w) --"right"
323 if o.justify == "center" then
324 line_indent = line_indent / 2
325 end
285 end 326 end
286 327
287 local line = o.line - 1 -- rb is 0-based lua is 1-based 328 local line = o.line - 1 -- rb is 0-based lua is 1-based
288 if(o.ovfl == "auto" and w >= o.width) then -- -o.x 329
289 rb.lcd_puts_scroll(0, line, msg) 330 if o.ovfl == "manual" then --save msg for later side scroll
331 col_buf_insert(msg, o.line, o)
332 end
333
334 -- bit of a pain to set the fields this way but its much more efficient than iterating a table to set them
335 local function set_desc(tld, scroll, separator_height, selected, style, indent, text_color, line_color, line_end_color)
336 tld.scroll = scroll
337 tld.separator_height = separator_height
338 tld.selected = selected
339 tld.style = style
340 tld.indent = indent
341 tld.text_color = text_color
342 tld.line_color = line_color
343 tld.line_end_color = line_end_color
344 end
345
346 line_separator = ld.line_separator
347
348 if o.line == 1 and o.header then
349 --rb scroller doesn't like negative offset!
350 local indent = line_indent < 0 and 0 or line_indent
351 set_desc(ld, true, 1, false, rb.STYLE_DEFAULT,
352 indent, o.fg_pattern, o.bg_pattern, o.bg_pattern)
353 ld.show_cursor = false
354 elseif s_lines[o.line] then
355 --/* Display line selector */
356 local style = show_cursor == true and rb.STYLE_DEFAULT or linestyle
357
358 local indent = line_indent < 0 and 0 or line_indent
359 --rb scroller doesn't like negative offset!
360 local ovfl = (o.ovfl == "auto" and w >= o.width and x == 0)
361 set_desc(ld, ovfl, 0, true, style, indent,
362 o.bg_pattern, o.sel_pattern, o.sel_pattern)
290 else 363 else
291 rb.lcd_putsxy(x, line * h, msg) 364 set_desc(ld, false, 0, false, rb.STYLE_DEFAULT,line_indent,
292 if o.ovfl == "manual" then --save msg for later side scroll 365 o.fg_pattern, o.bg_pattern, o.bg_pattern)
293 col_buf_insert(msg, o.line, o)
294 end
295 end 366 end
296 if o.drawsep == true then 367
297 if s_lines[o.line] == true then 368 if ld.show_icons then
298 rb.set_viewport(o) --nned to revert drawmode if selected 369 ld.icon = ld.icon_fn(line, ld.icon or -1)
370 end
371
372 rb.lcd_put_line(x, line *h, msg, ld)
373
374 ld.show_cursor = show_cursor
375 ld.style = linestyle
376 if line_separator then
377 if ld.selected == true then
378 rb.set_viewport(o) -- revert drawmode if selected
299 end 379 end
300 rb.lcd_drawline(0, line * h, o.width, line * h) 380 rb.lcd_drawline(0, line * h, o.width, line * h)
381 rb.lcd_drawline(0, line * h + h, o.width, line * h + h) --only to add the last line
382 -- but we don't have an idea which line is the last line here so every line is the last line!
301 end 383 end
384
302 --only update the line we changed 385 --only update the line we changed
303 update_line(o.autoupdate, o, line, h) 386 update_line(o.autoupdate, o, line, h)
304 387
@@ -308,7 +391,7 @@ local _print = {} do
308 -- Helper function that acts mostly like a normal printf() would 391 -- Helper function that acts mostly like a normal printf() would
309 local function printf(fmt, v1, ...) 392 local function printf(fmt, v1, ...)
310 local o = get_settings(true) 393 local o = get_settings(true)
311 local w, h, msg 394 local w, h, msg, rep
312 local line = o.line - 1 -- rb is 0-based lua is 1-based 395 local line = o.line - 1 -- rb is 0-based lua is 1-based
313 396
314 if not (fmt) or (fmt) == "\n" then -- handles blank line / single '\n' 397 if not (fmt) or (fmt) == "\n" then -- handles blank line / single '\n'
@@ -322,6 +405,9 @@ local _print = {} do
322 return o.line, o.max_line, o.width, h 405 return o.line, o.max_line, o.width, h
323 end 406 end
324 407
408 fmt, rep = fmt.gsub(fmt or "", "%%h", "%%s")
409 o.header = (rep == 1)
410
325 msg = string.format(fmt, v1, ...) 411 msg = string.format(fmt, v1, ...)
326 412
327 show_selected(o.line, msg) 413 show_selected(o.line, msg)
@@ -337,6 +423,8 @@ local _print = {} do
337 local function set_column(x) 423 local function set_column(x)
338 local o = get_settings() 424 local o = get_settings()
339 if o.ovfl ~= "manual" then return end -- no buffer stored to scroll 425 if o.ovfl ~= "manual" then return end -- no buffer stored to scroll
426 rb.lcd_scroll_stop()
427
340 local res, w, h, str, line 428 local res, w, h, str, line
341 429
342 for key, value in pairs(col_buf) do 430 for key, value in pairs(col_buf) do
@@ -367,6 +455,7 @@ local _print = {} do
367 _print.opt.justify = set_justify 455 _print.opt.justify = set_justify
368 _print.opt.sel_line = select_line 456 _print.opt.sel_line = select_line
369 _print.opt.line = set_line 457 _print.opt.line = set_line
458 _print.opt.linedesc = set_linedesc
370 _print.opt.autoupdate = set_update 459 _print.opt.autoupdate = set_update
371 _print.clear = clear 460 _print.clear = clear
372 _print.f = printf 461 _print.f = printf
diff --git a/apps/plugins/lua/include_lua/printmenus.lua b/apps/plugins/lua/include_lua/printmenus.lua
new file mode 100644
index 0000000000..3e8f870104
--- /dev/null
+++ b/apps/plugins/lua/include_lua/printmenus.lua
@@ -0,0 +1,249 @@
1--[[
2/***************************************************************************
3 * __________ __ ___.
4 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
5 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
6 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
7 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
8 * \/ \/ \/ \/ \/
9 * $Id$
10 *
11 * Copyright (C) 2017 William Wilgus
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ****************************************************************************/
22]]
23if not rb.lcd_framebuffer then rb.splash(rb.HZ, "No Support!") return nil end
24
25require("printtable")
26
27local _clr = require("color")
28
29local _LCD = rb.lcd_framebuffer()
30
31--[[ -- dpad requires:
32require("actions") -- Contains rb.actions & rb.contexts
33local _timer = require("timer")
34-- Button definitions --
35local CANCEL_BUTTON = rb.actions.PLA_CANCEL
36local DOWN_BUTTON = rb.actions.PLA_DOWN
37local DOWNR_BUTTON = rb.actions.PLA_DOWN_REPEAT
38local EXIT_BUTTON = rb.actions.PLA_EXIT
39local LEFT_BUTTON = rb.actions.PLA_LEFT
40local LEFTR_BUTTON = rb.actions.PLA_LEFT_REPEAT
41local RIGHT_BUTTON = rb.actions.PLA_RIGHT
42local RIGHTR_BUTTON = rb.actions.PLA_RIGHT_REPEAT
43local SEL_BUTTON = rb.actions.PLA_SELECT
44local SELREL_BUTTON = rb.actions.PLA_SELECT_REL
45local SELR_BUTTON = rb.actions.PLA_SELECT_REPEAT
46local UP_BUTTON = rb.actions.PLA_UP
47local UPR_BUTTON = rb.actions.PLA_UP_REPEAT
48]]
49--------------------------------------------------------------------------------
50local function get_core_settings()
51 if rb.core_color_table ~= nil and rb.core_talk_table ~= nil and
52 rb.core_list_settings_table ~= nil then return end
53
54 local rbs_is_loaded = (package.loaded.rbsettings ~= nil)
55 local s_is_loaded = (package.loaded.settings ~= nil)
56
57 require("rbsettings")
58 require("settings")
59 rb.metadata = nil -- remove track metadata settings
60
61 local rb_settings = rb.settings.dump('global_settings', "system")
62 local color_table = {}
63 local talk_table = {}
64 local list_settings_table = {}
65 local list_settings = "cursor_style|show_icons|statusbar|scrollbar|scrollbar_width|list_separator_height|backdrop_file|"
66 for key, value in pairs(rb_settings) do
67 key = key or ""
68 if (key:find("color")) then
69 color_table[key]=value
70 elseif (key:find("talk")) then
71 talk_table[key]=value
72 elseif (list_settings:find(key)) then
73 list_settings_table[key]=value
74 end
75 end
76
77 if not s_is_loaded then
78 rb.settings = nil
79 package.loaded.settings = nil
80 end
81
82 if not rbs_is_loaded then
83 rb.system = nil
84 rb.metadata = nil
85 package.loaded.rbsettings = nil
86 end
87
88 rb.core_color_table = color_table
89 rb.core_talk_table = talk_table
90 rb.core_list_settings_table = list_settings_table
91 collectgarbage("collect")
92end
93
94--[[ cursor style button routine
95-- left / right are x, xi is increment xir is increment when repeat
96-- up / down are y, yi is increment yir is increment when repeat
97-- cancel is returned as 0,1
98-- select as 0, 1, 2, 3 (none, pressed, repeat, relesed)
99-- x_chg and y_chg are the amount x or y changed
100-- timeout == nil or -1 loop waits indefinitely till button is pressed
101-- time since last button press is returned in ticks..
102-- make xi, xir, yi, yir negative to flip direction...
103]]
104--[[
105local function dpad(x, xi, xir, y, yi, yir, timeout, overflow)
106 local scroll_is_fixed = overflow ~= "manual"
107 _timer("dpad") -- start a persistant timer; keeps time between button events
108 if timeout == nil then timeout = -1 end
109 local cancel, select = 0, 0
110 local x_chg, y_chg = 0, 0
111 local button
112 while true do
113 button = rb.get_plugin_action(timeout)
114
115 if button == CANCEL_BUTTON then
116 cancel = 1
117 break;
118 elseif button == EXIT_BUTTON then
119 cancel = 1
120 break;
121 elseif button == SEL_BUTTON then
122 select = 1
123 timeout = timeout + 1
124 elseif button == SELR_BUTTON then
125 select = 2
126 timeout = timeout + 1
127 elseif button == SELREL_BUTTON then
128 select = -1
129 timeout = timeout + 1
130 elseif button == LEFT_BUTTON then
131 x_chg = x_chg - xi
132 if scroll_is_fixed then
133 cancel = 1
134 break;
135 end
136 elseif button == LEFTR_BUTTON then
137 x_chg = x_chg - xir
138 elseif button == RIGHT_BUTTON then
139 x_chg = x_chg + xi
140 if scroll_is_fixed then
141 select = 1
142 timeout = timeout + 1
143 end
144 elseif button == RIGHTR_BUTTON then
145 x_chg = x_chg + xir
146 elseif button == UP_BUTTON then
147 y_chg = y_chg + yi
148 elseif button == UPR_BUTTON then
149 y_chg = y_chg + yir
150 elseif button == DOWN_BUTTON then
151 y_chg = y_chg - yi
152 elseif button == DOWNR_BUTTON then
153 y_chg = y_chg - yir
154 elseif timeout >= 0 then--and rb.button_queue_count() < 1 then
155 break;
156 end
157
158 if x_chg ~= 0 or y_chg ~= 0 then
159 timeout = timeout + 1
160 end
161 end
162
163 x = x + x_chg
164 y = y + y_chg
165
166 return cancel, select, x_chg, x, y_chg, y, _timer.check("dpad", true)
167end -- dpad
168]]
169--------------------------------------------------------------------------------
170-- displays text in menu_t calls function in same indice of func_t when selected
171function print_menu(menu_t, func_t, selected, settings, copy_screen)
172
173 local i, start, vcur, screen_img
174
175 if selected then vcur = selected + 1 end
176 if vcur and vcur <= 1 then vcur = 2 end
177
178 get_core_settings()
179 local c_table = rb.core_color_table or {}
180
181 if not settings then
182 settings = {}
183 settings.default = true
184 end
185
186 settings.justify = settings.justify or "center"
187 settings.wrap = settings.wrap or true
188 settings.hfgc = settings.hfgc or c_table.lst_color or _clr.set( 0, 000, 000, 000)
189 settings.hbgc = settings.hbgc or c_table.bg_color or _clr.set(-1, 255, 255, 255)
190 settings.ifgc = settings.ifgc or c_table.fg_color or _clr.set(-1, 000, 255, 060)
191 settings.ibgc = settings.ibgc or c_table.bg_color or _clr.set( 0, 000, 000, 000)
192 settings.iselc = settings.iselc or c_table.lss_color or _clr.set( 1, 000, 200, 100)
193
194 if not settings.linedesc or rb.core_list_settings_table then
195 settings.linedesc = settings.linedesc or {}
196 local t_l = rb.core_list_settings_table
197 local linedesc = {
198 separator_height = t_l.list_separator_height or 0,
199 show_cursor = (t_l.cursor_style or 0) == 0,
200 style = t_l.cursor_style or 0xFFFF, --just a random non used index
201 show_icons = t_l.show_icons or false,
202 text_color = c_table.fg_color or _clr.set(-1, 000, 255, 060),
203 line_color = c_table.bg_color or _clr.set( 0, 000, 000, 000),
204 line_end_color= c_table.bg_color or _clr.set( 0, 000, 000, 000),
205 }
206 local styles = {rb.STYLE_NONE, rb.STYLE_INVERT, rb.STYLE_GRADIENT, rb.STYLE_COLORBAR, rb.STYLE_DEFAULT}
207 linedesc.style = styles[linedesc.style + 1] or rb.STYLE_COLORBAR
208
209 for k, v in pairs(linedesc) do
210 --dont overwrite supplied settings
211 settings.linedesc[k] = settings.linedesc[k] or v
212 end
213 end
214
215 settings.hasheader = true
216 settings.co_routine = nil
217 settings.msel = false
218 settings.start = start
219 settings.curpos = vcur
220 --settings.dpad_fn = dpad
221
222 while not i or i > 0 do
223 if copy_screen == true then
224 --make a copy of screen for restoration
225 screen_img = screen_img or rb.new_image()
226 screen_img:copy(_LCD)
227 else
228 screen_img = nil
229 end
230
231 _LCD:clear(settings.ibgc)
232
233 settings.start = start
234 settings.curpos = vcur
235
236 i, start, vcur = print_table(menu_t, #menu_t, settings)
237 --vcur = vcur + 1
238 collectgarbage("collect")
239 if copy_screen == true then _LCD:copy(screen_img) end
240
241 if func_t and func_t[i] then
242 if func_t[i](i, menu_t) == true then break end
243 else
244 break
245 end
246 end
247 if settings.default == true then settings = nil end
248 return screen_img, i
249end
diff --git a/apps/plugins/lua/include_lua/printtable.lua b/apps/plugins/lua/include_lua/printtable.lua
index b289beeb0e..c23d801f83 100644
--- a/apps/plugins/lua/include_lua/printtable.lua
+++ b/apps/plugins/lua/include_lua/printtable.lua
@@ -27,9 +27,9 @@ require("actions") -- Contains rb.actions & rb.contexts
27local _clr = require("color") 27local _clr = require("color")
28local _print = require("print") 28local _print = require("print")
29local _timer = require("timer") 29local _timer = require("timer")
30local sb_width = 5
30 31
31-- Button definitions -- 32-- Button definitions --
32local EXIT_BUTTON = rb.PLA_EXIT
33local CANCEL_BUTTON = rb.actions.PLA_CANCEL 33local CANCEL_BUTTON = rb.actions.PLA_CANCEL
34local DOWN_BUTTON = rb.actions.PLA_DOWN 34local DOWN_BUTTON = rb.actions.PLA_DOWN
35local DOWNR_BUTTON = rb.actions.PLA_DOWN_REPEAT 35local DOWNR_BUTTON = rb.actions.PLA_DOWN_REPEAT
@@ -71,8 +71,8 @@ end
71-- time since last button press is returned in ticks.. 71-- time since last button press is returned in ticks..
72-- make xi, xir, yi, yir negative to flip direction... 72-- make xi, xir, yi, yir negative to flip direction...
73]] 73]]
74 74local function dpad(x, xi, xir, y, yi, yir, timeout, overflow)
75local function dpad(x, xi, xir, y, yi, yir, timeout) 75 local scroll_is_fixed = overflow ~= "manual"
76 _timer("dpad") -- start a persistant timer; keeps time between button events 76 _timer("dpad") -- start a persistant timer; keeps time between button events
77 if timeout == nil then timeout = -1 end 77 if timeout == nil then timeout = -1 end
78 local cancel, select = 0, 0 78 local cancel, select = 0, 0
@@ -98,10 +98,18 @@ local function dpad(x, xi, xir, y, yi, yir, timeout)
98 timeout = timeout + 1 98 timeout = timeout + 1
99 elseif button == LEFT_BUTTON then 99 elseif button == LEFT_BUTTON then
100 x_chg = x_chg - xi 100 x_chg = x_chg - xi
101 if scroll_is_fixed then
102 cancel = 1
103 break;
104 end
101 elseif button == LEFTR_BUTTON then 105 elseif button == LEFTR_BUTTON then
102 x_chg = x_chg - xir 106 x_chg = x_chg - xir
103 elseif button == RIGHT_BUTTON then 107 elseif button == RIGHT_BUTTON then
104 x_chg = x_chg + xi 108 x_chg = x_chg + xi
109 if scroll_is_fixed then
110 select = 1
111 timeout = timeout + 1
112 end
105 elseif button == RIGHTR_BUTTON then 113 elseif button == RIGHTR_BUTTON then
106 x_chg = x_chg + xir 114 x_chg = x_chg + xir
107 elseif button == UP_BUTTON then 115 elseif button == UP_BUTTON then
@@ -152,19 +160,26 @@ function print_table(t, t_count, settings)
152 end 160 end
153 161
154 local wrap, justify, start, curpos, co_routine, hasheader, m_sel 162 local wrap, justify, start, curpos, co_routine, hasheader, m_sel
155 local header_fgc, header_bgc, item_fgc, item_bgc, item_selc, drawsep 163 local header_fgc, header_bgc, item_fgc, item_bgc, item_selc
164 local table_linedesc, drawsep, overflow, dpad_fn
156 do 165 do
157 local s = settings or _print.get_settings() 166 local s = settings or _print.get_settings()
158 wrap, justify = s.wrap, s.justify 167 wrap, justify = s.wrap, s.justify
159 start, curpos = s.start, s.curpos 168 start, curpos = s.start, s.curpos
160 co_routine = s.co_routine 169 co_routine = s.co_routine
161 hasheader = s.hasheader 170 hasheader = s.hasheader
162 drawsep = s.drawsep 171 drawsep = s.drawsep
163 m_sel = false 172 sb_width = s.sb_width or sb_width
173 m_sel = false
174 table_linedesc = s.linedesc
175 dpad_fn = s.dpad_fn
176 if type(dpad_fn) ~= "function" then dpad_fn = dpad end
177
164 if co_routine == nil then 178 if co_routine == nil then
165 --no multi select in incremental mode 179 --no multi select in incremental mode
166 m_sel = s.msel 180 m_sel = s.msel
167 end 181 end
182 overflow = s.ovfl or "auto"
168 header_fgc = s.hfgc or _clr.set( 0, 000, 000, 000) 183 header_fgc = s.hfgc or _clr.set( 0, 000, 000, 000)
169 header_bgc = s.hbgc or _clr.set(-1, 255, 255, 255) 184 header_bgc = s.hbgc or _clr.set(-1, 255, 255, 255)
170 item_fgc = s.ifgc or _clr.set(-1, 000, 255, 060) 185 item_fgc = s.ifgc or _clr.set(-1, 000, 255, 060)
@@ -210,16 +225,19 @@ function print_table(t, t_count, settings)
210 -- displays header text at top 225 -- displays header text at top
211 local function disp_header(hstr) 226 local function disp_header(hstr)
212 local header = header or hstr 227 local header = header or hstr
213 local opts = _print.opt.get() 228 local opts = _print.opt.get() -- save to restore settings
214 _print.opt.overflow("none") -- don't scroll header; colors change 229 _print.opt.overflow("auto") -- don't scroll header; colors change
215 _print.opt.color(header_fgc, header_bgc) 230 _print.opt.color(header_fgc, header_bgc)
216 _print.opt.line(1) 231 _print.opt.line(1)
217 232
233 rb.set_viewport(_print.opt.get(true))
218 _print.f() 234 _print.f()
219 local line = _print.f(header) 235 _print.f("%h", tostring(header)) --hack to signal header
220 236
221 _print.opt.set(opts) 237 _print.opt.set(opts) -- restore settings
222 _print.opt.line(2) 238 _print.opt.line(2)
239 rb.set_viewport(opts)
240 opts = nil
223 return 2 241 return 2
224 end 242 end
225 243
@@ -229,7 +247,7 @@ function print_table(t, t_count, settings)
229 rb.lcd_update() 247 rb.lcd_update()
230 248
231 local quit, select, x_chg, xi, y_chg, yi, timeb = 249 local quit, select, x_chg, xi, y_chg, yi, timeb =
232 dpad(t_p.col, -1, -t_p.col_scrl, t_p.row, -1, -t_p.row_scrl) 250 dpad_fn(t_p.col, -1, -t_p.col_scrl, t_p.row, -1, -t_p.row_scrl, nil, overflow)
233 251
234 t_p.vcursor = t_p.vcursor + y_chg 252 t_p.vcursor = t_p.vcursor + y_chg
235 253
@@ -322,6 +340,7 @@ function print_table(t, t_count, settings)
322 340
323 rb.button_clear_queue() -- keep the button queue from overflowing 341 rb.button_clear_queue() -- keep the button queue from overflowing
324 end 342 end
343 rb.lcd_scroll_stop()
325 return sel 344 return sel
326 end -- display_table 345 end -- display_table
327--============================================================================-- 346--============================================================================--
@@ -331,7 +350,7 @@ function print_table(t, t_count, settings)
331 _print.opt.color(item_fgc, item_bgc, item_selc) 350 _print.opt.color(item_fgc, item_bgc, item_selc)
332 351
333 table_p = init_position(15, 5) 352 table_p = init_position(15, 5)
334 line, maxline = _print.opt.area(5, 1, rb.LCD_WIDTH - 10, rb.LCD_HEIGHT - 2) 353 line, maxline = _print.opt.area(5, 1, rb.LCD_WIDTH - 10 - sb_width, rb.LCD_HEIGHT - 2)
335 maxline = math.min(maxline, t_count) 354 maxline = math.min(maxline, t_count)
336 355
337 -- allow user to start at a position other than the beginning 356 -- allow user to start at a position other than the beginning
@@ -349,9 +368,11 @@ function print_table(t, t_count, settings)
349 end 368 end
350 369
351 _print.opt.sel_line(table_p.vcursor) 370 _print.opt.sel_line(table_p.vcursor)
352 _print.opt.overflow("manual") 371 _print.opt.overflow(overflow)
353 _print.opt.justify(justify) 372 _print.opt.justify(justify)
354 373
374 _print.opt.linedesc(table_linedesc)
375
355 local opts = _print.opt.get() 376 local opts = _print.opt.get()
356 opts.drawsep = drawsep 377 opts.drawsep = drawsep
357 _print.opt.set(opts) 378 _print.opt.set(opts)
@@ -360,17 +381,19 @@ function print_table(t, t_count, settings)
360 -- initialize vertical scrollbar 381 -- initialize vertical scrollbar
361 set_vsb(); do 382 set_vsb(); do
362 local vsb =_print.opt.get() 383 local vsb =_print.opt.get()
384 vsb.width = vsb.width + sb_width
385
363 if rb.LCD_DEPTH == 2 then -- invert 2-bit screens 386 if rb.LCD_DEPTH == 2 then -- invert 2-bit screens
364 vsb.fg_pattern = 3 - vsb.fg_pattern 387 vsb.fg_pattern = 3 - vsb.fg_pattern
365 vsb.bg_pattern = 3 - vsb.bg_pattern 388 vsb.bg_pattern = 3 - vsb.bg_pattern
366 end 389 end
367 390
368 set_vsb = function (item) 391 set_vsb = function (item)
369 if t_count > (maxline or t_count) then 392 if sb_width > 0 and t_count > (maxline or t_count) then
370 rb.set_viewport(vsb) 393 rb.set_viewport(vsb)
371 item = item or 0 394 item = item or 0
372 local m = maxline / 2 + 1 395 local m = maxline / 2 + 1
373 rb.gui_scrollbar_draw(vsb.width - 5, vsb.y, 5, vsb.height, 396 rb.gui_scrollbar_draw(vsb.width - sb_width, vsb.y, sb_width, vsb.height,
374 t_count, math.max(0, item - m), 397 t_count, math.max(0, item - m),
375 math.min(item + m, t_count), 0) 398 math.min(item + m, t_count), 0)
376 end 399 end
@@ -378,7 +401,7 @@ function print_table(t, t_count, settings)
378 end -- set_vsb 401 end -- set_vsb
379 local selected = display_table(table_p, 0, 1, 0) 402 local selected = display_table(table_p, 0, 1, 0)
380 403
381 _print.opt.defaults() 404 _print.opt.defaults() --restore settings
382 405
383 if m_sel == true then -- walk the table to get selected items 406 if m_sel == true then -- walk the table to get selected items
384 selected = {} 407 selected = {}
diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make
index daa8a05384..1e74277549 100644
--- a/apps/plugins/lua/lua.make
+++ b/apps/plugins/lua/lua.make
@@ -18,7 +18,7 @@ OTHER_SRC += $(LUA_SRC)
18LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua 18LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua
19LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua draw_floodfill.lua draw_poly.lua \ 19LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua draw_floodfill.lua draw_poly.lua \
20 draw_num.lua draw_text.lua files.lua image.lua image_save.lua lcd.lua math_ex.lua \ 20 draw_num.lua draw_text.lua files.lua image.lua image_save.lua lcd.lua math_ex.lua \
21 print.lua timer.lua playlist.lua pcm.lua sound.lua \ 21 print.lua timer.lua playlist.lua pcm.lua sound.lua printmenus.lua\
22 rbcompat.lua rbsettings.lua poly_points.lua printtable.lua) 22 rbcompat.lua rbsettings.lua poly_points.lua printtable.lua)
23 23
24 24
diff --git a/apps/plugins/lua/rbdefines_helper.pl b/apps/plugins/lua/rbdefines_helper.pl
index b55609077d..eca09187fa 100755
--- a/apps/plugins/lua/rbdefines_helper.pl
+++ b/apps/plugins/lua/rbdefines_helper.pl
@@ -53,6 +53,7 @@ if ($def_type eq "rb_defines") {
53 '^PLUGIN_DIR$', 53 '^PLUGIN_DIR$',
54 '^PLUGIN(_APPS_|_GAMES_|_)DATA_DIR$', 54 '^PLUGIN(_APPS_|_GAMES_|_)DATA_DIR$',
55 '^ROCKBOX_DIR$', 55 '^ROCKBOX_DIR$',
56 '^STYLE_(NONE|DEFAULT|INVERT|COLORBAR|GRADIENT|COLORED)',
56 '^VIEWERS_DATA_DIR$'); 57 '^VIEWERS_DATA_DIR$');
57} 58}
58elsif ($def_type eq "sound_defines") { 59elsif ($def_type eq "sound_defines") {
diff --git a/apps/plugins/lua/rocklib_img.c b/apps/plugins/lua/rocklib_img.c
index 13e5503f75..b0ca769ca4 100644
--- a/apps/plugins/lua/rocklib_img.c
+++ b/apps/plugins/lua/rocklib_img.c
@@ -23,6 +23,9 @@
23 23
24#define lrockimg_c 24#define lrockimg_c
25#define LUA_LIB 25#define LUA_LIB
26#define ICON_PADDING_S "1"
27
28
26 29
27#include "lua.h" 30#include "lua.h"
28#include "lauxlib.h" 31#include "lauxlib.h"
@@ -1292,6 +1295,137 @@ RB_WRAP(lcd_puts)
1292 return 0; 1295 return 0;
1293} 1296}
1294 1297
1298/* Helper function for opt_viewport lcd_put_line */
1299static int check_tablevalue_def(lua_State *L, const char* key, int tablepos, int def)
1300{
1301 lua_getfield(L, tablepos, key); /* Find table[key] */
1302
1303 int val;
1304
1305 if (lua_isboolean(L, -1))
1306 val = lua_toboolean (L, -1); /*True = 1 and False = 0*/
1307 else
1308 val = luaL_optinteger(L, -1, def);
1309
1310 lua_pop(L, 1); /* Pop the value off the stack */
1311 return val;
1312}
1313
1314/* Helper function for opt_viewport lcd_put_line */
1315static int check_tablevalue(lua_State *L, const char* key, int tablepos)
1316{
1317 /* returns 0 if key doesn't exist */
1318 return check_tablevalue_def(L, key, tablepos, 0);
1319}
1320
1321RB_WRAP(lcd_put_line)
1322{
1323 /*x, y, text, t_linedesc, [screen = MAIN]*/
1324
1325#if 0
1326 /* height of the line (in pixels). -1 to inherit the height
1327 * from the font. The text will be centered if the height is larger,
1328 * but the decorations will span the entire height */
1329 int height;
1330 /* multiline support: For some decorations (e.g. gradient) to work
1331 * across multiple lines (e.g. to draw a line selector across 2 lines)
1332 * the line index and line count must be known. For normal, single
1333 * lines specify nlines=1 and line=0 */
1334 /* line count of a group */
1335 int16_t nlines;
1336 /* index of the line in the group */
1337 int16_t line;
1338 /* line text color if STYLE_COLORED is specified, in native
1339 * lcd format (convert with LCD_RGBPACK() if necessary) */
1340 unsigned text_color;
1341 /* line color if STYLE_COLORBAR or STYLE_GRADIENT is specified, in native
1342 * lcd format (convert with LCD_RGBPACK() if necessary) */
1343 unsigned line_color, line_end_color;
1344 /* line decorations, see STYLE_DEFAULT etc. */
1345 enum line_styles style;
1346 /* whether the line can scroll */
1347 bool scroll;
1348 /* height of the line separator (in pixels). 0 to disable drawing
1349 * of the separator */
1350 int8_t separator_height;
1351#endif
1352
1353/*LINE_DESC_DEFINIT { .style = STYLE_DEFAULT, .height = -1, .separator_height = 0, .line = 0, .nlines = 1, .scroll = false }*/
1354
1355 struct line_desc linedes = LINE_DESC_DEFINIT;
1356
1357 bool is_selected = false;
1358 bool show_icons = false;
1359 bool show_cursor = false;
1360
1361 int line_indent = 0;
1362 int item_offset = 0;
1363
1364 int x = (int) luaL_checkint(L, 1);
1365 int y = (int) luaL_checkint(L, 2);
1366
1367 const unsigned char * string = luaL_checkstring(L, 3);
1368 int icon = Icon_NOICON;
1369 const int narg = 4;
1370
1371 if(lua_type(L, narg) == LUA_TTABLE)
1372 {
1373 /* check_tablevalue only returns INTS */
1374 linedes.line = check_tablevalue(L, "line", narg);
1375 linedes.height = check_tablevalue_def(L, "height", narg, -1);
1376 linedes.nlines = check_tablevalue_def(L, "nlines", narg, 1);
1377 linedes.style = check_tablevalue_def(L, "style", narg, STYLE_DEFAULT);
1378 linedes.separator_height = check_tablevalue(L, "separator_height", narg);
1379 linedes.scroll = check_tablevalue(L, "scroll", narg) > 0;
1380
1381 linedes.text_color = check_tablevalue(L, "text_color", narg);
1382 linedes.line_color = check_tablevalue(L, "line_color", narg);
1383 linedes.line_end_color = check_tablevalue(L, "line_end_color", narg);
1384
1385 icon = check_tablevalue_def(L, "icon", narg, Icon_NOICON);
1386 show_icons = check_tablevalue(L, "show_icons", narg) > 0 && icon > Icon_NOICON;
1387 show_cursor = check_tablevalue(L, "show_cursor", narg) > 0;
1388 is_selected = check_tablevalue(L, "selected", narg) > 0;
1389
1390 line_indent = check_tablevalue(L, "indent", narg);
1391 item_offset = check_tablevalue(L, "offset", narg);
1392
1393 }
1394
1395 while (*string == '\t')
1396 {
1397 line_indent++;
1398 string++;
1399 }
1400
1401 /* mask out gradient and colorbar styles for non-color displays */
1402 if (RB_SCREEN_STRUCT(L, 5)->depth < 16)
1403 {
1404 if (linedes.style & (STYLE_COLORBAR|STYLE_GRADIENT))
1405 {
1406 linedes.style &= ~(STYLE_COLORBAR|STYLE_GRADIENT);
1407 linedes.style |= STYLE_INVERT;
1408 }
1409 linedes.style &= ~STYLE_COLORED;
1410 }
1411
1412 if (show_cursor && (show_icons && icon > Icon_NOICON))
1413 RB_SCREENS(L, 5, put_line, x, y, &linedes,
1414 "$*s$"ICON_PADDING_S"I$i$"ICON_PADDING_S"s$*t",
1415 line_indent, is_selected ? Icon_Cursor : Icon_NOICON,
1416 icon, item_offset, string);
1417 else if (show_cursor || (show_icons && icon > Icon_NOICON))
1418 RB_SCREENS(L, 5, put_line, x, y, &linedes,
1419 "$*s$"ICON_PADDING_S"I$*t", line_indent,
1420 show_cursor ? (is_selected ? Icon_Cursor:Icon_NOICON):icon,
1421 item_offset, string);
1422 else
1423 RB_SCREENS(L, 5, put_line, x, y, &linedes, "$*s$*t", line_indent, item_offset, string);
1424
1425
1426 return 0;
1427}
1428
1295RB_WRAP(lcd_puts_scroll) 1429RB_WRAP(lcd_puts_scroll)
1296{ 1430{
1297 int x, y; 1431 int x, y;
@@ -1307,17 +1441,6 @@ RB_WRAP(lcd_scroll_stop)
1307 return 0; 1441 return 0;
1308} 1442}
1309 1443
1310/* Helper function for opt_viewport */
1311static int check_tablevalue(lua_State *L, const char* key, int tablepos)
1312{
1313 lua_getfield(L, tablepos, key); /* Find table[key] */
1314
1315 int val = lua_tointeger(L, -1);
1316
1317 lua_pop(L, 1); /* Pop the value off the stack */
1318 return val;
1319}
1320
1321static inline struct viewport* opt_viewport(lua_State *L, 1444static inline struct viewport* opt_viewport(lua_State *L,
1322 int narg, 1445 int narg,
1323 struct viewport* vp, 1446 struct viewport* vp,
@@ -1333,7 +1456,7 @@ static inline struct viewport* opt_viewport(lua_State *L,
1333 vp->width = check_tablevalue(L, "width", narg); 1456 vp->width = check_tablevalue(L, "width", narg);
1334 vp->height = check_tablevalue(L, "height", narg); 1457 vp->height = check_tablevalue(L, "height", narg);
1335 vp->font = check_tablevalue(L, "font", narg); 1458 vp->font = check_tablevalue(L, "font", narg);
1336 vp->drawmode = check_tablevalue(L, "drawmode", narg); 1459 vp->drawmode = check_tablevalue_def(L, "drawmode", narg, DRMODE_SOLID);
1337#if LCD_DEPTH > 1 1460#if LCD_DEPTH > 1
1338 vp->fg_pattern = (unsigned int) check_tablevalue(L, "fg_pattern", narg); 1461 vp->fg_pattern = (unsigned int) check_tablevalue(L, "fg_pattern", narg);
1339 vp->bg_pattern = (unsigned int) check_tablevalue(L, "bg_pattern", narg); 1462 vp->bg_pattern = (unsigned int) check_tablevalue(L, "bg_pattern", narg);
@@ -1686,6 +1809,7 @@ static const luaL_Reg rocklib_img[] =
1686 R(lcd_set_drawmode), 1809 R(lcd_set_drawmode),
1687 R(lcd_putsxy), 1810 R(lcd_putsxy),
1688 R(lcd_puts), 1811 R(lcd_puts),
1812 R(lcd_put_line),
1689 R(lcd_puts_scroll), 1813 R(lcd_puts_scroll),
1690 R(lcd_scroll_stop), 1814 R(lcd_scroll_stop),
1691 R(set_viewport), 1815 R(set_viewport),
diff --git a/apps/plugins/lua_scripts.lua b/apps/plugins/lua_scripts.lua
index 02fe50b327..43593d96b0 100644
--- a/apps/plugins/lua_scripts.lua
+++ b/apps/plugins/lua_scripts.lua
@@ -24,13 +24,15 @@
24local scrpath = rb.current_path() .. "/lua_scripts/" 24local scrpath = rb.current_path() .. "/lua_scripts/"
25 25
26package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path 26package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path
27require("printtable") 27require("printmenus")
28 28
29rb.actions = nil 29rb.actions = nil
30package.loaded["actions"] = nil 30package.loaded["actions"] = nil
31 31
32local excludedsrc = ";filebrowse.lua;fileviewers.lua;printmenu.lua;dbgettags.lua;" 32local excludedsrc = ";filebrowse.lua;fileviewers.lua;printmenu.lua;dbgettags.lua;"
33-------------------------------------------------------------------------------- 33--------------------------------------------------------------------------------
34local Icon_Plugin = 0x9
35
34 36
35local function get_files(path, norecurse, finddir, findfile, f_t, d_t) 37local function get_files(path, norecurse, finddir, findfile, f_t, d_t)
36 38
@@ -120,6 +122,15 @@ local function get_files(path, norecurse, finddir, findfile, f_t, d_t)
120end -- get_files 122end -- get_files
121-------------------------------------------------------------------------------- 123--------------------------------------------------------------------------------
122 124
125function icon_fn(item, icon)
126 if item ~= 0 then
127 icon = Icon_Plugin
128 else
129 icon = -1
130 end
131 return icon
132end
133
123-- uses print_table and get_files to display simple file browser 134-- uses print_table and get_files to display simple file browser
124function script_choose(dir, title) 135function script_choose(dir, title)
125 local dstr 136 local dstr
@@ -128,8 +139,8 @@ function script_choose(dir, title)
128 local norecurse = true 139 local norecurse = true
129 local f_finddir = false -- function to match directories; nil all, false none 140 local f_finddir = false -- function to match directories; nil all, false none
130 local f_findfile = nil -- function to match files; nil all, false none 141 local f_findfile = nil -- function to match files; nil all, false none
131 142 local t_linedesc = {show_icons = true, icon_fn = icon_fn}
132 local p_settings = {wrap = true, hasheader = true} 143 local p_settings = {wrap = true, hasheader = true, justify = "left", linedesc = t_linedesc}
133 local files = {} 144 local files = {}
134 local dirs = {} 145 local dirs = {}
135 local item = 1 146 local item = 1
@@ -142,10 +153,11 @@ function script_choose(dir, title)
142 for i = 1, #files do 153 for i = 1, #files do
143 table.insert(dirs, "\t" .. string.gsub(files[i], ".*/","")) 154 table.insert(dirs, "\t" .. string.gsub(files[i], ".*/",""))
144 end 155 end
145 156 --print_menu(menu_t, func_t, selected, settings, copy_screen)
146 item = print_table(dirs, #dirs, p_settings) 157 _, item = print_menu(dirs, nil, 0, p_settings)
147 158
148 -- If item was selected follow directory or return filename 159 -- If item was selected follow directory or return filename
160 item = item or -1
149 if item > 0 then 161 if item > 0 then
150 dir = files[item - 1] 162 dir = files[item - 1]
151 if not rb.dir_exists("/" .. dir) then 163 if not rb.dir_exists("/" .. dir) then
diff --git a/apps/plugins/lua_scripts/file_browser.lua b/apps/plugins/lua_scripts/file_browser.lua
index 19f475acf3..ab246a2a7e 100644
--- a/apps/plugins/lua_scripts/file_browser.lua
+++ b/apps/plugins/lua_scripts/file_browser.lua
@@ -33,7 +33,7 @@ local scrpath = rb.current_path()--rb.PLUGIN_DIR .. "/demos/lua_scripts/"
33 33
34package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path 34package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path
35 35
36require("printmenu") --menu 36require("printmenus") --menu
37require("filebrowse") -- file browser 37require("filebrowse") -- file browser
38 38
39rb.actions = nil 39rb.actions = nil
diff --git a/apps/plugins/lua_scripts/fileview.lua b/apps/plugins/lua_scripts/fileview.lua
index 920281bbef..08eea0337c 100755
--- a/apps/plugins/lua_scripts/fileview.lua
+++ b/apps/plugins/lua_scripts/fileview.lua
@@ -33,7 +33,7 @@ local scrpath = rb.current_path()--rb.PLUGIN_DIR .. "/demos/lua_scripts/"
33 33
34package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path 34package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path
35 35
36require("printmenu") --menu 36require("printmenus") --menu
37require("filebrowse") -- file browser 37require("filebrowse") -- file browser
38require("fileviewers") -- fileviewer, hexviewer 38require("fileviewers") -- fileviewer, hexviewer
39 39
diff --git a/apps/plugins/lua_scripts/fileviewers.lua b/apps/plugins/lua_scripts/fileviewers.lua
index 5a9c417d36..c686f3eeda 100755
--- a/apps/plugins/lua_scripts/fileviewers.lua
+++ b/apps/plugins/lua_scripts/fileviewers.lua
@@ -205,6 +205,7 @@ function print_file(filename, maxlinelen, settings)
205 end 205 end
206 settings.hasheader = true 206 settings.hasheader = true
207 settings.co_routine = nil 207 settings.co_routine = nil
208 settings.ovfl = "manual"
208 209
209 local sel = 210 local sel =
210 print_table(ftable, #ftable, settings) 211 print_table(ftable, #ftable, settings)
@@ -309,6 +310,7 @@ function print_file_increment(filename, settings)
309 settings.hasheader = true 310 settings.hasheader = true
310 settings.co_routine = co 311 settings.co_routine = co
311 settings.msel = false 312 settings.msel = false
313 settings.ovfl = "manual"
312 314
313 table.insert(file_t, 1, hstr) --position 1 is header/title 315 table.insert(file_t, 1, hstr) --position 1 is header/title
314 local sel = 316 local sel =
@@ -437,6 +439,7 @@ function print_file_hex(filename, bytesperline, settings)
437 settings.co_routine = co 439 settings.co_routine = co
438 settings.start = start 440 settings.start = start
439 settings.curpos = vcur 441 settings.curpos = vcur
442 settings.ovfl = "manual"
440 443
441 while sel > 0 do 444 while sel > 0 do
442 settings.start = start 445 settings.start = start
diff --git a/apps/plugins/lua_scripts/printmenu.lua b/apps/plugins/lua_scripts/printmenu.lua
deleted file mode 100755
index 3cb17d8026..0000000000
--- a/apps/plugins/lua_scripts/printmenu.lua
+++ /dev/null
@@ -1,83 +0,0 @@
1--[[
2/***************************************************************************
3 * __________ __ ___.
4 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
5 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
6 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
7 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
8 * \/ \/ \/ \/ \/
9 * $Id$
10 *
11 * Copyright (C) 2017 William Wilgus
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ****************************************************************************/
22]]
23if not rb.lcd_framebuffer then rb.splash(rb.HZ, "No Support!") return nil end
24
25require("printtable")
26local _clr = require("color")
27
28local _LCD = rb.lcd_framebuffer()
29--------------------------------------------------------------------------------
30-- displays text in menu_t calls function in same indice of func_t when selected
31function print_menu(menu_t, func_t, selected, settings, copy_screen)
32
33 local i, start, vcur, screen_img
34
35 if selected then vcur = selected + 1 end
36 if vcur and vcur <= 1 then vcur = 2 end
37
38 if not settings then
39 settings = {}
40 settings.justify = "center"
41 settings.wrap = true
42 settings.hfgc = _clr.set( 0, 000, 000, 000)
43 settings.hbgc = _clr.set(-1, 255, 255, 255)
44 settings.ifgc = _clr.set(-1, 000, 255, 060)
45 settings.ibgc = _clr.set( 0, 000, 000, 000)
46 settings.iselc = _clr.set( 1, 000, 200, 100)
47 settings.default = true
48 end
49
50 settings.hasheader = true
51 settings.co_routine = nil
52 settings.msel = false
53 settings.start = start
54 settings.curpos = vcur
55
56 while not i or i > 0 do
57 if copy_screen == true then
58 --make a copy of screen for restoration
59 screen_img = screen_img or rb.new_image()
60 screen_img:copy(_LCD)
61 else
62 screen_img = nil
63 end
64
65 _LCD:clear(settings.ibgc)
66
67 settings.start = start
68 settings.curpos = vcur
69
70 i, start, vcur = print_table(menu_t, #menu_t, settings)
71 --vcur = vcur + 1
72 collectgarbage("collect")
73 if copy_screen == true then _LCD:copy(screen_img) end
74
75 if func_t and func_t[i] then
76 if func_t[i](i, menu_t) == true then break end
77 else
78 break
79 end
80 end
81 if settings.default == true then settings = nil end
82 return screen_img
83end
diff --git a/apps/plugins/lua_scripts/rlimg.lua b/apps/plugins/lua_scripts/rlimg.lua
index 801d0c5fac..c9dde65ed4 100755
--- a/apps/plugins/lua_scripts/rlimg.lua
+++ b/apps/plugins/lua_scripts/rlimg.lua
@@ -36,7 +36,7 @@ local _draw_text = require("draw_text")
36 36
37--package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path 37--package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path
38 38
39require("printmenu") --menu 39require("printmenus") --menu
40 40
41--[[ RBIMAGE library functions 41--[[ RBIMAGE library functions
42NOTE!! on x, y coordinates + width & height 42NOTE!! on x, y coordinates + width & height
diff --git a/apps/plugins/lua_scripts/tagnav.lua b/apps/plugins/lua_scripts/tagnav.lua
index f62f27973b..9646f359e3 100644
--- a/apps/plugins/lua_scripts/tagnav.lua
+++ b/apps/plugins/lua_scripts/tagnav.lua
@@ -25,7 +25,7 @@
25--local scrpath = rb.current_path()" 25--local scrpath = rb.current_path()"
26 26
27--package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path 27--package.path = scrpath .. "/?.lua;" .. package.path --add lua_scripts directory to path
28require("printmenu") 28require("printmenus")
29require("printtable") 29require("printtable")
30require("dbgettags") 30require("dbgettags")
31 31