Compare commits
No commits in common. "82308e4a74c5526201e9340f443d69e79a70a05f" and "8d3c45c09e13cd77980e03090b07865632680531" have entirely different histories.
82308e4a74
...
8d3c45c09e
@ -1,318 +0,0 @@
|
|||||||
-- Reaper scripted "Big Clock" window with extra functions
|
|
||||||
-- - Normal time display as in the usual "Big Clock"
|
|
||||||
-- - Time since last project marker
|
|
||||||
-- - Time since last region start
|
|
||||||
-- Author: Ludwig Frühschütz
|
|
||||||
-- Source: https://www.eleton-audio.de
|
|
||||||
-- Git: https://files.eleton-audio.de/gitea/Ludwig/Reaper-Scripts.git
|
|
||||||
-- License: GPL v3.0
|
|
||||||
-- Requires: Reaper 5 or 6
|
|
||||||
-- Basic gui stuff by forum user "spk77": https://forum.cockos.com/showthread.php?t=161557
|
|
||||||
|
|
||||||
|
|
||||||
-- Some adjustable settings:
|
|
||||||
local timeSinceProject = true -- EITHER this one is true OR one of the next two
|
|
||||||
local timeSinceMarker = false
|
|
||||||
local timeSinceRegion = false
|
|
||||||
|
|
||||||
-- Nothing to adjust here anymore...
|
|
||||||
local script_path
|
|
||||||
local mouse
|
|
||||||
local Menu
|
|
||||||
local gui = {} -- contains some settings for the GUI
|
|
||||||
local quit = false
|
|
||||||
local sws_present = false
|
|
||||||
|
|
||||||
-- Send a message to the console
|
|
||||||
function msg(m)
|
|
||||||
reaper.ShowConsoleMsg(tostring(m) .. "\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Store state to project variables
|
|
||||||
function storeExtState()
|
|
||||||
if timeSinceProject then
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceProject', '1')
|
|
||||||
else
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceProject', '0')
|
|
||||||
end
|
|
||||||
|
|
||||||
if timeSinceMarker then
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceMarker', '1')
|
|
||||||
else
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceMarker', '0')
|
|
||||||
end
|
|
||||||
|
|
||||||
if timeSinceRegion then
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceRegion', '1')
|
|
||||||
else
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'timeSinceRegion', '0')
|
|
||||||
end
|
|
||||||
|
|
||||||
reaper.SetProjExtState(0, 'bigclock_extra', 'dockState', gfx.dock(-1))
|
|
||||||
end
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
-- functions for graphics...
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
-- Returns current script's path
|
|
||||||
function get_script_path()
|
|
||||||
local info = debug.getinfo(1,'S');
|
|
||||||
local script_path = info.source:match[[^@?(.*[\/])[^\/]-$]]
|
|
||||||
return script_path
|
|
||||||
end
|
|
||||||
|
|
||||||
-- gui init stuff, including rightclick-menu
|
|
||||||
function gui_init()
|
|
||||||
-- Get "script path"
|
|
||||||
script_path = get_script_path()
|
|
||||||
--msg(script_path)
|
|
||||||
|
|
||||||
-- Modify "package.path"
|
|
||||||
package.path = package.path .. ";" .. script_path .. "?.lua"
|
|
||||||
--msg(package.path)
|
|
||||||
|
|
||||||
-- Import files ("classes", functions etc.)--
|
|
||||||
require "class" -- import "base class"
|
|
||||||
mouse = require "mouse"
|
|
||||||
Menu = require "menu class"
|
|
||||||
|
|
||||||
-- Create "right click" menu --
|
|
||||||
-- Create a "Menu" instance
|
|
||||||
rc_menu = Menu("rc_menu")
|
|
||||||
|
|
||||||
-- Add menu items to "rc_menu"
|
|
||||||
-- ">" at the start spawns a submenu, | at the end creates a spacer
|
|
||||||
rc_menu:add_item({label = "Time since project start",
|
|
||||||
toggleable = true,
|
|
||||||
selected = timeSinceProject})
|
|
||||||
rc_menu:add_item({label = "Time since previous marker",
|
|
||||||
toggleable = true,
|
|
||||||
selected = timeSinceMarker})
|
|
||||||
rc_menu:add_item({label = "Time since previous region",
|
|
||||||
toggleable = true,
|
|
||||||
selected = timeSinceRegion})
|
|
||||||
rc_menu:add_item({label = "Quit"})
|
|
||||||
|
|
||||||
-- Let's add a command to all created items:
|
|
||||||
rc_menu.items[1].command = function()
|
|
||||||
if rc_menu.items[1].selected then
|
|
||||||
timeSinceProject = true
|
|
||||||
timeSinceMarker = false
|
|
||||||
timeSinceRegion = false
|
|
||||||
rc_menu.items[2].selected = false
|
|
||||||
rc_menu.items[3].selected = false
|
|
||||||
else
|
|
||||||
--dont let user disable option but force selection of other option
|
|
||||||
rc_menu.items[1].selected = true;
|
|
||||||
end
|
|
||||||
storeExtState()
|
|
||||||
end
|
|
||||||
rc_menu.items[2].command = function()
|
|
||||||
if rc_menu.items[2].selected then
|
|
||||||
timeSinceProject = false
|
|
||||||
timeSinceMarker = true
|
|
||||||
timeSinceRegion = false
|
|
||||||
rc_menu.items[1].selected = false
|
|
||||||
rc_menu.items[3].selected = false
|
|
||||||
else
|
|
||||||
--dont let user disable option but force selection of other option
|
|
||||||
rc_menu.items[2].selected = true;
|
|
||||||
end
|
|
||||||
storeExtState()
|
|
||||||
end
|
|
||||||
rc_menu.items[3].command = function()
|
|
||||||
if rc_menu.items[3].selected then
|
|
||||||
timeSinceProject = false
|
|
||||||
timeSinceMarker = false
|
|
||||||
timeSinceRegion = true
|
|
||||||
rc_menu.items[1].selected = false
|
|
||||||
rc_menu.items[2].selected = false
|
|
||||||
else
|
|
||||||
--dont let user disable option but force selection of other option
|
|
||||||
rc_menu.items[3].selected = true;
|
|
||||||
end
|
|
||||||
storeExtState()
|
|
||||||
end
|
|
||||||
rc_menu.items[4].command = function() quit = true end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Draw GUI --
|
|
||||||
function drawGui()
|
|
||||||
local retval = 0
|
|
||||||
local val
|
|
||||||
local timeRaw
|
|
||||||
local timeDisplay
|
|
||||||
local timeDisplaySeconds
|
|
||||||
local markerId
|
|
||||||
local regionId
|
|
||||||
local isRegion
|
|
||||||
local markerRegionPos
|
|
||||||
local regionEnd
|
|
||||||
local markerRegionName
|
|
||||||
local markerRegionNumber
|
|
||||||
|
|
||||||
-- get time depending on play state
|
|
||||||
if reaper.GetAllProjectPlayStates(0) == 0 then -- 0: stopped
|
|
||||||
timeRaw = reaper.GetCursorPosition()
|
|
||||||
else -- 1: play; 2: pause; 4: record (and their bitwise |)
|
|
||||||
timeRaw = reaper.GetPlayPosition()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- calculate time since previous marker or region
|
|
||||||
markerId, regionId = reaper.GetLastMarkerAndCurRegion(0, timeRaw)
|
|
||||||
if timeSinceMarker then
|
|
||||||
retval, isRegion, markerRegionPos, regionEnd, markerRegionName, markerRegionNumber = reaper.EnumProjectMarkers(markerId)
|
|
||||||
elseif timeSinceRegion then
|
|
||||||
retval, isRegion, markerRegionPos, regionEnd, markerRegionName, markerRegionNumber = reaper.EnumProjectMarkers(regionId)
|
|
||||||
end
|
|
||||||
if retval > 0 then timeRaw = timeRaw - markerRegionPos end
|
|
||||||
|
|
||||||
-- construct display string, with leading zeros if neccessary (e.g. 27:08.321)
|
|
||||||
timeDisplaySeconds = math.floor((timeRaw%60)*1000)/1000
|
|
||||||
timeDisplay = math.floor(timeRaw/60) .. ":"
|
|
||||||
if timeDisplaySeconds < 10 then
|
|
||||||
timeDisplay = timeDisplay .. "0"
|
|
||||||
end
|
|
||||||
timeDisplay = timeDisplay .. timeDisplaySeconds
|
|
||||||
|
|
||||||
gfx.clear = 3355443 -- background is dark grey
|
|
||||||
|
|
||||||
-- If window is docked, use different scaling
|
|
||||||
if gfx.dock(-1) > 0 then
|
|
||||||
-- landscape format
|
|
||||||
if gfx.w > gfx.h then
|
|
||||||
gfx.x = 20
|
|
||||||
gfx.y = ( gfx.h-select(2, gfx.measurestr(timeDisplay)) ) / 2
|
|
||||||
gui.settings.font_size = gfx.h / 2
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
-- check if string fits into window, if not decrease fontsize a little, check again and loop
|
|
||||||
while gfx.measurestr(timeDisplay) > (gfx.w - 2*gfx.x) do
|
|
||||||
gui.settings.font_size = gui.settings.font_size / 1.1
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
end
|
|
||||||
gfx.printf(timeDisplay)
|
|
||||||
-- portrait format
|
|
||||||
else
|
|
||||||
gfx.x = gfx.w/15
|
|
||||||
gfx.y = ( gfx.h-select(2, gfx.measurestr(timeDisplay)) ) / 2
|
|
||||||
gui.settings.font_size = gfx.w / 3
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
gfx.printf(timeDisplay)
|
|
||||||
end
|
|
||||||
else -- window is not docked
|
|
||||||
-- landscape format
|
|
||||||
if gfx.w > gfx.h then
|
|
||||||
gfx.x = gfx.w/20
|
|
||||||
gfx.y = ( gfx.h-select(2, gfx.measurestr(timeDisplay)) ) / 2
|
|
||||||
gui.settings.font_size = gfx.w / 6
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
-- check if string fits into window, if not decrease fontsize a little, check again and loop
|
|
||||||
while gfx.measurestr(timeDisplay) > (gfx.w - 2*gfx.x) do
|
|
||||||
gui.settings.font_size = gui.settings.font_size / 1.1
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
end
|
|
||||||
gfx.printf(timeDisplay)
|
|
||||||
-- portrait format
|
|
||||||
else
|
|
||||||
gfx.x = gfx.w/20
|
|
||||||
gfx.y = ( gfx.h-select(2, gfx.measurestr(timeDisplay)) ) / 2
|
|
||||||
gui.settings.font_size = gfx.w / 3
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
gfx.printf(timeDisplay)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Called on script termination. Store stuff...
|
|
||||||
function onExit()
|
|
||||||
storeExtState()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Main init function
|
|
||||||
function init()
|
|
||||||
-- check for SWS extensions
|
|
||||||
if reaper.NamedCommandLookup('_SWS_ABOUT') > 0 then sws_present = true end
|
|
||||||
-- load settings from rpp
|
|
||||||
local retval
|
|
||||||
local val
|
|
||||||
retval, val = reaper.GetProjExtState(0, 'bigclock_extra', 'timeSinceProject')
|
|
||||||
if retval > 0 then
|
|
||||||
if tonumber(val) > 0 then
|
|
||||||
timeSinceProject = true
|
|
||||||
else
|
|
||||||
timeSinceProject = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
retval, val = reaper.GetProjExtState(0, 'bigclock_extra', 'timeSinceMarker')
|
|
||||||
if retval > 0 then
|
|
||||||
if tonumber(val) > 0 then
|
|
||||||
timeSinceMarker = true
|
|
||||||
else
|
|
||||||
timeSinceMarker = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
retval, val = reaper.GetProjExtState(0, 'bigclock_extra', 'timeSinceRegion')
|
|
||||||
if retval > 0 then
|
|
||||||
if tonumber(val) > 0 then
|
|
||||||
timeSinceRegion = true
|
|
||||||
else
|
|
||||||
timeSinceRegion = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- init stuff...
|
|
||||||
gui_init()
|
|
||||||
|
|
||||||
-- Add stuff to "gui" table
|
|
||||||
gui.settings = {} -- Add "settings" table to "gui" table
|
|
||||||
gui.settings.font_size = 50 -- font size
|
|
||||||
gui.settings.docker_id = 0 -- try 0, 1, 257, 513, 1027 etc.
|
|
||||||
|
|
||||||
-- Initialize gfx window --
|
|
||||||
gfx.init("Big Clock Extra", 350, 100, gui.settings.docker_id)
|
|
||||||
gfx.setfont(1,"Arial", gui.settings.font_size)
|
|
||||||
gfx.clear = 3355443 -- background is dark grey
|
|
||||||
|
|
||||||
-- Restore docked state
|
|
||||||
retval, val = reaper.GetProjExtState(0, 'bigclock_extra', 'dockState')
|
|
||||||
if retval > 0 then
|
|
||||||
gfx.dock(val)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Main loop --
|
|
||||||
function mainloop()
|
|
||||||
-- mouseclicks?
|
|
||||||
local RMB_state = mouse.cap(mouse.RB)
|
|
||||||
local LMB_state = mouse.cap(mouse.LB)
|
|
||||||
local mx = gfx.mouse_x
|
|
||||||
local my = gfx.mouse_y
|
|
||||||
|
|
||||||
if not mouse.last_RMB_state and gfx.mouse_cap&2 == 2 then
|
|
||||||
-- right click pressed down -> show "right click menu" at mouse cursor
|
|
||||||
rc_menu:show(mx, my)
|
|
||||||
if sws_present then
|
|
||||||
reaper.Main_OnCommand( reaper.NamedCommandLookup('_BR_FOCUS_ARRANGE_WND'), 0 ) -- focus arranger
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not mouse.last_LMB_state and gfx.mouse_cap&1 == 1 then
|
|
||||||
-- left click pressed down
|
|
||||||
if sws_present then
|
|
||||||
reaper.Main_OnCommand( reaper.NamedCommandLookup('_BR_FOCUS_ARRANGE_WND'), 0 ) -- focus arranger
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mouse.last_RMB_state = RMB_state -- store current right mouse button state
|
|
||||||
mouse.last_LMB_state = LMB_state -- store current left mouse button state
|
|
||||||
|
|
||||||
drawGui()
|
|
||||||
gfx.update()
|
|
||||||
if gfx.getchar() >= 0 and not quit then reaper.defer(mainloop) end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- START HERE...
|
|
||||||
reaper.atexit(onExit)
|
|
||||||
init()
|
|
||||||
mainloop()
|
|
@ -1,49 +0,0 @@
|
|||||||
-- Basic gui stuff by forum user "spk77": https://forum.cockos.com/showthread.php?t=161557
|
|
||||||
------------- "class.lua" is copied from http://lua-users.org/wiki/SimpleLuaClasses -----------
|
|
||||||
|
|
||||||
-- class.lua
|
|
||||||
-- Compatible with Lua 5.1 (not 5.0).
|
|
||||||
function class(base, init)
|
|
||||||
local c = {} -- a new class instance
|
|
||||||
if not init and type(base) == 'function' then
|
|
||||||
init = base
|
|
||||||
base = nil
|
|
||||||
elseif type(base) == 'table' then
|
|
||||||
-- our new class is a shallow copy of the base class!
|
|
||||||
for i,v in pairs(base) do
|
|
||||||
c[i] = v
|
|
||||||
end
|
|
||||||
c._base = base
|
|
||||||
end
|
|
||||||
-- the class will be the metatable for all its objects,
|
|
||||||
-- and they will look up their methods in it.
|
|
||||||
c.__index = c
|
|
||||||
|
|
||||||
-- expose a constructor which can be called by <classname>(<args>)
|
|
||||||
local mt = {}
|
|
||||||
mt.__call = function(class_tbl, ...)
|
|
||||||
local obj = {}
|
|
||||||
setmetatable(obj,c)
|
|
||||||
if init then
|
|
||||||
init(obj,...)
|
|
||||||
else
|
|
||||||
-- make sure that any stuff from the base class is initialized!
|
|
||||||
if base and base.init then
|
|
||||||
base.init(obj, ...)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return obj
|
|
||||||
end
|
|
||||||
c.init = init
|
|
||||||
c.is_a = function(self, klass)
|
|
||||||
local m = getmetatable(self)
|
|
||||||
while m do
|
|
||||||
if m == klass then return true end
|
|
||||||
m = m._base
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
setmetatable(c, mt)
|
|
||||||
return c
|
|
||||||
end
|
|
||||||
----------------------------------------------------------------------------------------
|
|
@ -1,191 +0,0 @@
|
|||||||
-- Basic gui stuff by forum user "spk77": https://forum.cockos.com/showthread.php?t=161557
|
|
||||||
----------------
|
|
||||||
-- Menu class --
|
|
||||||
----------------
|
|
||||||
|
|
||||||
-- To create a new menu instance, call this function like this:
|
|
||||||
-- menu_name = Menu("menu_name")
|
|
||||||
local Menu =
|
|
||||||
class(
|
|
||||||
function(menu, id)
|
|
||||||
menu.id = id
|
|
||||||
menu.items = {} -- Menu items are collected to this table
|
|
||||||
menu.items_str = ""
|
|
||||||
menu.curr_item_pos = 1
|
|
||||||
end
|
|
||||||
)
|
|
||||||
|
|
||||||
------------------
|
|
||||||
-- Menu methods --
|
|
||||||
------------------
|
|
||||||
|
|
||||||
--[[
|
|
||||||
-- True if menu item label starts with "prefix"
|
|
||||||
function Menu:label_starts_with(label, prefix)
|
|
||||||
return string.sub(label, 1, string.len(prefix)) == prefix
|
|
||||||
end
|
|
||||||
--]]
|
|
||||||
|
|
||||||
|
|
||||||
-- Returns "menu item table" (or false if "id" not found)
|
|
||||||
function Menu:get_item_from_id(id)
|
|
||||||
for i=1, #self.items do
|
|
||||||
if self.items[i].id == id then
|
|
||||||
return self.items[i]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Updates "menu item type" variables (_has_submenu, _last_item_in_submenu etc.)
|
|
||||||
function Menu:update_item(item_table)
|
|
||||||
local t = item_table
|
|
||||||
t._has_submenu = false
|
|
||||||
t._last_item_in_submenu = false
|
|
||||||
t.id = self.curr_item_pos
|
|
||||||
|
|
||||||
if string.sub(t.label, 1, 1) == ">" or
|
|
||||||
string.sub(t.label, 1, 2) == "<>" or
|
|
||||||
string.sub(t.label, 1, 2) == "><" then
|
|
||||||
t._has_submenu = true
|
|
||||||
t.id = -1
|
|
||||||
self.curr_item_pos = self.curr_item_pos - 1
|
|
||||||
--end
|
|
||||||
elseif string.sub(t.label, 1, 1) == "<" then
|
|
||||||
t._has_submenu = false
|
|
||||||
t._last_item_in_submenu = true
|
|
||||||
end
|
|
||||||
--t.id = self.curr_item_pos
|
|
||||||
self.curr_item_pos = self.curr_item_pos + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Returns the created table and table index in "menu_obj.items"
|
|
||||||
function Menu:add_item(...)
|
|
||||||
local t = ... or {}
|
|
||||||
self.items[#self.items+1] = t -- add new menu item at the end of menu
|
|
||||||
|
|
||||||
-- Parse arguments
|
|
||||||
for i,v in pairs(t) do
|
|
||||||
--msg(i .. " = " .. tostring(v))
|
|
||||||
if i == "label" then
|
|
||||||
t.label = v
|
|
||||||
elseif i == "selected" then
|
|
||||||
t.selected = v
|
|
||||||
elseif i == "active" then
|
|
||||||
t.active = v
|
|
||||||
elseif i == "toggleable" then
|
|
||||||
t.toggleable = v
|
|
||||||
elseif i == "command" then
|
|
||||||
t.command = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Default values for menu items
|
|
||||||
-- (Edit these)
|
|
||||||
if t.label == nil or t.label == "" then
|
|
||||||
t.label = tostring(#self.items) -- if label is nil or "" -> label is set to "table index in menu_obj.items"
|
|
||||||
end
|
|
||||||
|
|
||||||
if t.selected == nil then
|
|
||||||
t.selected = false -- edit
|
|
||||||
end
|
|
||||||
|
|
||||||
if t.active == nil then
|
|
||||||
t.active = true -- edit
|
|
||||||
end
|
|
||||||
|
|
||||||
if t.toggleable == nil then
|
|
||||||
t.toggleable = false -- edit
|
|
||||||
end
|
|
||||||
|
|
||||||
return t, #self.items
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Get menu item table at index
|
|
||||||
function Menu:get_item(index)
|
|
||||||
if self.items[index] == nil then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return self.items[index]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Show menu at mx, my
|
|
||||||
function Menu:show(mx, my)
|
|
||||||
gfx.x = mx
|
|
||||||
gfx.y = my
|
|
||||||
|
|
||||||
-- Check which items has a function to call when a menu is about to be shown
|
|
||||||
for i=1, #self.items do
|
|
||||||
if self.items[i].on_menu_show ~= nil then
|
|
||||||
self.items[i].on_menu_show()
|
|
||||||
end
|
|
||||||
-- Update item
|
|
||||||
self:update_item(self.items[i])
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Convert menu item tables to string
|
|
||||||
self.items_str = self:table_to_string() or ""
|
|
||||||
self.val = gfx.showmenu(self.items_str)
|
|
||||||
if self.val > 0 then
|
|
||||||
self:update(self.val)
|
|
||||||
end
|
|
||||||
self.curr_item_pos = 1 -- set "menu item position counter" back to the initial value
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function Menu:update(menu_item_index)
|
|
||||||
-- check which "menu item id" matches with "menu_item_index"
|
|
||||||
for i=1, #self.items do
|
|
||||||
if self.items[i].id == menu_item_index then
|
|
||||||
menu_item_index = i
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local i = menu_item_index
|
|
||||||
-- if menu item is "toggleable" then toggle "selected" state
|
|
||||||
if self.items[i].toggleable then
|
|
||||||
self.items[i].selected = not self.items[i].selected
|
|
||||||
end
|
|
||||||
-- if menu item has a "command" (function), then call that function
|
|
||||||
if self.items[i].command ~= nil then
|
|
||||||
self.items[i].command()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Convert "Menu_obj.items" to string
|
|
||||||
function Menu:table_to_string()
|
|
||||||
if self.items == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
self.items_str = ""
|
|
||||||
|
|
||||||
for i=1, #self.items do
|
|
||||||
local temp_str = ""
|
|
||||||
local menu_item = self.items[i]
|
|
||||||
if menu_item.selected then
|
|
||||||
temp_str = "!"
|
|
||||||
end
|
|
||||||
|
|
||||||
if not menu_item.active then
|
|
||||||
temp_str = temp_str .. "#"
|
|
||||||
end
|
|
||||||
|
|
||||||
if menu_item.label ~= "" then
|
|
||||||
temp_str = temp_str .. menu_item.label .. "|"
|
|
||||||
end
|
|
||||||
|
|
||||||
self.items_str = self.items_str .. temp_str
|
|
||||||
end
|
|
||||||
|
|
||||||
return self.items_str
|
|
||||||
end
|
|
||||||
|
|
||||||
--END of Menu class----------------------------------------------------
|
|
||||||
|
|
||||||
return Menu
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
-- Basic gui stuff by forum user "spk77": https://forum.cockos.com/showthread.php?t=161557
|
|
||||||
-----------------
|
|
||||||
-- Mouse table --
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
local mouse = {
|
|
||||||
-- Constants
|
|
||||||
LB = 1,
|
|
||||||
RB = 2,
|
|
||||||
CTRL = 4,
|
|
||||||
SHIFT = 8,
|
|
||||||
ALT = 16,
|
|
||||||
|
|
||||||
-- "cap" function
|
|
||||||
cap = function (mask)
|
|
||||||
if mask == nil then
|
|
||||||
return gfx.mouse_cap end
|
|
||||||
return gfx.mouse_cap&mask == mask
|
|
||||||
end,
|
|
||||||
|
|
||||||
uptime = 0,
|
|
||||||
|
|
||||||
last_x = -1, last_y = -1,
|
|
||||||
|
|
||||||
dx = 0,
|
|
||||||
dy = 0,
|
|
||||||
|
|
||||||
ox_l = 0, oy_l = 0, -- left click positions
|
|
||||||
ox_r = 0, oy_r = 0, -- right click positions
|
|
||||||
capcnt = 0,
|
|
||||||
last_LMB_state = false,
|
|
||||||
last_RMB_state = false
|
|
||||||
}
|
|
||||||
|
|
||||||
return mouse
|
|
Loading…
x
Reference in New Issue
Block a user