Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Author: TheOriginalBIT
- Version: 1.0
- Created: 25 Mar 2013
- Last Update: 25 Mar 2013
- License:
- COPYRIGHT NOTICE
- Copyright © 2013 Joshua Asbury a.k.a TheOriginalBIT [theoriginalbit@gmail.com]
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
- associated documentation files (the "Software"), to deal in the Software without restriction,
- including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
- copies of the Software, and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
- -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- -Visible credit is given to the original author.
- -The software is distributed in a non-profit way.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- ]]--
- local views = {}
- local cycleInfo = {}
- local cycleInfoSub = {}
- local activeView = nil
- local monitorSide = nil
- local monitorObj = nil
- local offset_x, offset_y = 0, 0
- local shiftPressed = false
- local capsLockPressed = false
- local shiftLastPressed = 0
- local doubleClickSpeed = 0
- local routineKeyboard = nil
- _G.assert = function(condition, errMsg, level) if not condition then error(errMsg, (tonumber(level) or 1) + 1) end return condition end
- local function cycleActiveScreen()
- if cycleInfo[activeView] then
- activeView = cycleInfo[activeView]._next
- elseif cycleInfoSub[activeView] then
- activeView = cycleInfoSub[activeView]._next
- else
- error('Attempting to cycle from invalid screen', 2)
- end
- end
- --[[
- ########################### API ###########################
- ]]--
- function setActiveScreen(key)
- assert(views[key], 'A screen with the key \''..key..'\' does not exist', 2)
- activeView = key
- end
- function setNext(key, next)
- assert(cycleInfo[key], 'A screen with the key \''..key..'\' does not exist', 2)
- cycleInfo[key]._next = next
- end
- function setPrev(key, prev)
- assert(views[key], 'A screen with the key \''..key..'\' does not exist', 2)
- cycleInfo[key]._prev = prev
- end
- function setCycleKeyFunc(screen, func)
- assert(views[screen], 'A screen with the key \''..screen..'\' does not exist', 2)
- assert(type(func) == 'function', 'Invalid parameter: expected function, got '..type(func), 2)
- views[screen].__SP__.onClick = function( ... )
- func(...)
- shiftPressed = false
- end
- end
- function setDoubleClickSpeed(s)
- assert(type(s) == 'number', 'Invalid parameter: expected number, got '..type(s), 2)
- assert(s > 0.1 or s == 0, 'Invalid parameter: double click speed cannot be set to faster than 0.1', 2)
- assert(s < 0.5, 'Invalid parameter: double click speed cannot be set to slower than 0.5', 2)
- if s == 0 and emulog then
- emulog.log('WARNING: You are disabling double click; This means that the user will not be able to activate caps lock;')
- end
- doubleClickSpeed = s
- end
- function registerKey(screen, key, text, xPos, yPos, width, height, func, backColor, textColor)
- assert(views[screen], 'A screen with the key \''..screen..'\' does not exist', 2)
- assert(not views[screen][key], 'A key with the key \''..key..'\' already exists', 2)
- assert(type(text) == 'string', 'Invalid parameter: expected text to be a string, got '..type(text), 2)
- assert(type(xPos) == 'number', 'Invalid parameter: expected xPos to be a number, got '..type(xPos), 2)
- assert(type(yPos) == 'number', 'Invalid parameter: expected yPos to be a number, got '..type(yPos), 2)
- assert(type(width) == 'number' or type(width) == 'nil', 'Invalid parameter: expected width to be a number or nil, got '..type(width), 2)
- assert(type(height) == 'number' or type(height) == 'nil', 'Invalid parameter: expected height to be a number or nil, got '..type(height), 2)
- assert(type(func) == 'function', 'Invalid parameter: expected func to be a function, got '..type(func), 2)
- assert(type(backColor) == 'number' and backColor >= 2^0 and backColor <= 2^15, 'Invalid parameter: expected backColor to be a number color, got '..type(backColor), 2)
- assert(type(textColor) == 'number' and textColor >= 2^0 and textColor <= 2^15, 'Invalid parameter: expected textColor to be a number color, got '..type(textColor), 2)
- views[screen][key] = {}
- views[screen][key]._t = text
- views[screen][key]._x = xPos
- views[screen][key]._y = yPos
- views[screen][key]._w = width or #text
- views[screen][key]._h = height or 1
- views[screen][key]._bc = backColor
- views[screen][key]._tc = textColor
- views[screen][key].onClick = key == 'SF' and func or function( ... )
- func(...)
- shiftPressed = false -- turn off shift, we have done our capital letter
- end
- views[screen][key].wasClicked = function(self, mouse_x, mouse_y)
- return mouse_x >= self._x + offset_x and mouse_x <= self._x + offset_x + self._w - 1 and mouse_y >= self._y + offset_y and mouse_y <= self._y + offset_y + self._h - 1
- end
- views[screen][key].onDraw = function(self)
- if self._t == '^ ' then
- if capsLockPressed then
- term.setBackgroundColor(colors.blue)
- elseif shiftPressed then
- term.setBackgroundColor(colors.lightBlue)
- end
- else
- term.setBackgroundColor(self._bc)
- end
- term.setTextColor(self._t == '^ ' and capsLockPressed and colors.white or self._tc)
- for y = 0, self._h - 1 do
- term.setCursorPos(offset_x + self._x, offset_y + self._y + y)
- write( string.rep(' ', self._w) )
- end
- term.setCursorPos(offset_x + self._x + math.floor(self._w / 2 - #self._t / 2), offset_y + self._y + math.floor(self._h / 2))
- if (shiftPressed or capsLockPressed) and not (self._t == ' space ' or self._t == 'enter') then
- write(string.upper(self._t) or '?')
- elseif self._t == 'ERR' then
- if cycleInfo[activeView] then
- write(cycleInfo[activeView]._next or '???')
- elseif cycleInfoSub[activeView] then
- write(cycleInfoSub[activeView]._next or '???')
- else
- local _, cy = term.getCursorPos()
- term.setCursorPos(1, cy)
- error('Attempting to print a screen that has no next', 2)
- end
- else
- write(self._t or '?')
- end
- end
- end
- function registerScreen(key, prev_screen, next_screen)
- emulog.log('REG:'..tostring(not views[key]))
- assert(not views[key], 'A screen with the key \''..key..'\' already exists', 2)
- assert(type(prev_screen) == 'string', 'Invalid parameter: expected prev_screen to be a string, got '..type(prev_screen), 2)
- assert(type(next_screen) == 'string', 'Invalid parameter: expected next_screen to be a string, got '..type(next_screen), 2)
- views[key] = {}
- cycleInfo[key] = { _prev = prev_screen, _next = next_screen}
- registerKey(key, '__SP__', 'ERR', 1, 4, 3, nil, function() cycleActiveScreen() end, colors.lightGray, colors.black)
- end
- function registerSubScreen(key, prev_screen, next_screen)
- emulog.log('SUB-REG:'..tostring(not views[key]))
- assert(not views[key], 'A screen with the key \''..key..'\' already exists', 2)
- assert(type(prev_screen) == 'string', 'Invalid parameter: expected prev_screen to be a string, got '..type(prev_screen), 2)
- assert(type(next_screen) == 'string', 'Invalid parameter: expected next_screen to be a string, got '..type(next_screen), 2)
- views[key] = {}
- cycleInfoSub[key] = { _prev = prev_screen, _next = next_screen}
- registerKey(key, '__SP__', 'ERR', 1, 4, 3, nil, function() cycleActiveScreen() end, colors.lightGray, colors.black)
- end
- --[[
- ########################### END API ###########################
- ]]--
- function render()
- if onMonitor then
- term.redirect(monitorObj)
- end
- term.setBackgroundColor(colors.lightGray)
- for i = 1, 4 do
- term.setCursorPos(offset_x + 1, offset_y + i)
- write( string.rep(' ', 19) )
- end
- for _,v in pairs(views[activeView]) do
- v:onDraw()
- end
- if onMonitor then
- term.restore()
- end
- end
- local function run()
- while true do
- local event = { coroutine.yield() }
- if event[1] == 'terminate' then
- return
- elseif (onMonitor and event[1] == 'monitor_touch' and event[2] == monitorSide) or (not onMonitor and event[1] == 'mouse_click') then
- for _, v in pairs(views[activeView]) do
- if v:wasClicked( event[3], event[4]) then
- v:onClick()
- break -- a button was clicked, we don't have stacked buttons
- end
- end
- end
- end
- end
- function pullEvent(useRaw)
- local pullEvent = useRaw and os.pullEventRaw or os.pullEvent
- local event = { pullEvent() }
- coroutine.resume(routineKeyboard, unpack(event) )
- return unpack(event)
- end
- function isAlive()
- return routineKeyboard and coroutine.status(routineKeyboard) ~= 'dead'
- end
- function startCoroutine()
- if not routineKeyboard or not isAlive() then
- routineKeyboard = coroutine.create(run)
- end
- coroutine.resume(routineKeyboard)
- end
- local function setupOffsets(x, y, w, h)
- if x then
- offset_x = x
- end
- if y then
- offset_y = y
- end
- if offset_x == 'center' then
- offset_x = math.ceil(w / 2 - 19 / 2)
- end
- if offset_y == 'center' then
- offset_y = math.ceil(h / 2 - 2 )
- end
- end
- function setup( topLeftX, topLeftY, onMonitor, side )
- local w, h
- onMonitor = onMonitor ~= false
- if onMonitor then
- assert(type(side) == 'string', 'Invalid parameter: expected side to be a string, got '..type(side), 2)
- if peripheral.getType(side) ~= 'monitor' then printError('No monitor on the computers '..side..' side') error() end
- monitorSide = side
- monitorObj = peripheral.wrap(side)
- if not monitorObj.isColor() then printError('Monitor must be an advanced monitor') error() end
- monitorObj.setTextScale(1)
- local mw, mh = monitorObj.getSize()
- local scale = mw / 19
- if scale > 5 then scale = 5 end
- if scale < 0.5 then scale = 0.5 end
- monitorObj.setTextScale(scale)
- term.redirect(monitorObj)
- w, h = term.getSize()
- term.restore()
- setupOffsets(topLeftX, topLeftY, w, h)
- if w < 19 then
- printError('Monitor is not wide enough to display keyboard')
- error()
- end
- if h < 4 then
- printError('Monitor is not tall enough to display keyboard')
- error()
- end
- else
- w, h = term.getSize()
- end
- setupOffsets(topLeftX, topLeftY, w, h)
- if offset_y + 4 > h then
- error('Cannot display keyboard off screen. Pixels are '..math.abs(offset_y + 4 - h)..' row(s) off the bottom of the screen', 2)
- elseif offset_y < 1 then
- error('Cannot display keyboard off screen. Pixels are '..math.abs(offset_y)..' row(s) off the top of the screen', 2)
- end
- if offset_x + 19 > w then
- error('Cannot display keyboard off screen. Pixels are '..math.abs(offset_x + 19 - w)..' column(s) off the right of the screen', 2)
- elseif offset_x < 0 then
- error('Cannot display keyboard off screen. Pixels are '..math.abs(offset_x)..' column(s) off the left of the screen', 2)
- end
- registerScreen('ABC', '123', '123')
- registerScreen('123', 'ABC', 'ABC')
- registerSubScreen('#+=', '123', '123')
- setActiveScreen('ABC')
- setDoubleClickSpeed(0.2)
- -- FIRST VIEW: ABC
- do
- -- First row, ASCII keyboard
- registerKey('ABC', 'q', 'q', 1, 1, nil, nil, function() os.queueEvent('key', keys.q) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'Q' or 'q') end, colors.lightGray, colors.black)
- registerKey('ABC', 'w', 'w', 3, 1, nil, nil, function() os.queueEvent('key', keys.w) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'W' or 'w') end, colors.lightGray, colors.black)
- registerKey('ABC', 'e', 'e', 5, 1, nil, nil, function() os.queueEvent('key', keys.e) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'E' or 'e') end, colors.lightGray, colors.black)
- registerKey('ABC', 'r', 'r', 7, 1, nil, nil, function() os.queueEvent('key', keys.r) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'R' or 'r') end, colors.lightGray, colors.black)
- registerKey('ABC', 't', 't', 9, 1, nil, nil, function() os.queueEvent('key', keys.t) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'T' or 't') end, colors.lightGray, colors.black)
- registerKey('ABC', 'y', 'y', 11, 1, nil, nil, function() os.queueEvent('key', keys.y) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'Y' or 'y') end, colors.lightGray, colors.black)
- registerKey('ABC', 'u', 'u', 13, 1, nil, nil, function() os.queueEvent('key', keys.u) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'U' or 'u') end, colors.lightGray, colors.black)
- registerKey('ABC', 'i', 'i', 15, 1, nil, nil, function() os.queueEvent('key', keys.i) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'I' or 'i') end, colors.lightGray, colors.black)
- registerKey('ABC', 'o', 'o', 17, 1, nil, nil, function() os.queueEvent('key', keys.o) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'O' or 'o') end, colors.lightGray, colors.black)
- registerKey('ABC', 'p', 'p', 19, 1, nil, nil, function() os.queueEvent('key', keys.p) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'P' or 'p') end, colors.lightGray, colors.black)
- -- Second row, ASCII keyboard
- registerKey('ABC', 'a', 'a', 2, 2, nil, nil, function() os.queueEvent('key', keys.a) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'A' or 'a') end, colors.lightGray, colors.black)
- registerKey('ABC', 's', 's', 4, 2, nil, nil, function() os.queueEvent('key', keys.s) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'S' or 's') end, colors.lightGray, colors.black)
- registerKey('ABC', 'd', 'd', 6, 2, nil, nil, function() os.queueEvent('key', keys.d) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'D' or 'd') end, colors.lightGray, colors.black)
- registerKey('ABC', 'f', 'f', 8, 2, nil, nil, function() os.queueEvent('key', keys.f) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'F' or 'f') end, colors.lightGray, colors.black)
- registerKey('ABC', 'g', 'g', 10, 2, nil, nil, function() os.queueEvent('key', keys.g) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'G' or 'g') end, colors.lightGray, colors.black)
- registerKey('ABC', 'h', 'h', 12, 2, nil, nil, function() os.queueEvent('key', keys.h) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'H' or 'h') end, colors.lightGray, colors.black)
- registerKey('ABC', 'j', 'j', 14, 2, nil, nil, function() os.queueEvent('key', keys.j) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'J' or 'j') end, colors.lightGray, colors.black)
- registerKey('ABC', 'k', 'k', 16, 2, nil, nil, function() os.queueEvent('key', keys.k) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'K' or 'k') end, colors.lightGray, colors.black)
- registerKey('ABC', 'l', 'l', 18, 2, nil, nil, function() os.queueEvent('key', keys.l) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'L' or 'l') end, colors.lightGray, colors.black)
- -- Third row, ASCII keyboard
- registerKey('ABC', 'SF', '^ ', 1, 3, nil, nil, function() os.queueEvent('key', keys.leftShift) if os.clock() - shiftLastPressed < doubleClickSpeed and shiftPressed then capsLockPressed = not capsLockPressed elseif capsLockPressed then capsLockPressed = false else shiftPressed = not shiftPressed end shiftLastPressed = os.clock() end, colors.lightGray, colors.black)
- registerKey('ABC', 'z', 'z', 4, 3, nil, nil, function() os.queueEvent('key', keys.z) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'Z' or 'z') end, colors.lightGray, colors.black)
- registerKey('ABC', 'x', 'x', 6, 3, nil, nil, function() os.queueEvent('key', keys.x) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'X' or 'x') end, colors.lightGray, colors.black)
- registerKey('ABC', 'c', 'c', 8, 3, nil, nil, function() os.queueEvent('key', keys.c) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'C' or 'c') end, colors.lightGray, colors.black)
- registerKey('ABC', 'v', 'v', 10, 3, nil, nil, function() os.queueEvent('key', keys.v) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'V' or 'v') end, colors.lightGray, colors.black)
- registerKey('ABC', 'b', 'b', 12, 3, nil, nil, function() os.queueEvent('key', keys.b) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'B' or 'b') end, colors.lightGray, colors.black)
- registerKey('ABC', 'n', 'n', 14, 3, nil, nil, function() os.queueEvent('key', keys.n) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'N' or 'n') end, colors.lightGray, colors.black)
- registerKey('ABC', 'm', 'm', 16, 3, nil, nil, function() os.queueEvent('key', keys.m) os.queueEvent('char', (shiftPressed or capsLockPressed) and 'M' or 'm') end, colors.lightGray, colors.black)
- registerKey('ABC', 'BK', '<-', 18, 3, nil, nil, function() os.queueEvent('key', keys.backspace) end, colors.lightGray, colors.black)
- -- Fourth row, ASCII keyboard
- registerKey('ABC', 'SB', ' space ', 5, 4, nil, nil, function() os.queueEvent('key', keys.space) os.queueEvent('char', ' ') end, colors.lightGray, colors.black)
- registerKey('ABC', 'EN', 'enter', 15, 4, nil, nil, function() os.queueEvent('key', keys.enter) end, colors.lightGray, colors.black)
- end
- -- SECOND VIEW: 123
- do
- -- First row, Numbers
- registerKey('123', '1', '1', 1, 1, nil, nil, function() os.queueEvent('key', keys.one) os.queueEvent('char', '1') end, colors.lightGray, colors.black)
- registerKey('123', '2', '2', 3, 1, nil, nil, function() os.queueEvent('key', keys.two) os.queueEvent('char', '2') end, colors.lightGray, colors.black)
- registerKey('123', '3', '3', 5, 1, nil, nil, function() os.queueEvent('key', keys.three) os.queueEvent('char', '3') end, colors.lightGray, colors.black)
- registerKey('123', '4', '4', 7, 1, nil, nil, function() os.queueEvent('key', keys.four) os.queueEvent('char', '4') end, colors.lightGray, colors.black)
- registerKey('123', '5', '5', 9, 1, nil, nil, function() os.queueEvent('key', keys.five) os.queueEvent('char', '5') end, colors.lightGray, colors.black)
- registerKey('123', '6', '6', 11, 1, nil, nil, function() os.queueEvent('key', keys.six) os.queueEvent('char', '6') end, colors.lightGray, colors.black)
- registerKey('123', '7', '7', 13, 1, nil, nil, function() os.queueEvent('key', keys.seven) os.queueEvent('char', '7') end, colors.lightGray, colors.black)
- registerKey('123', '8', '8', 15, 1, nil, nil, function() os.queueEvent('key', keys.eight) os.queueEvent('char', '8') end, colors.lightGray, colors.black)
- registerKey('123', '9', '9', 17, 1, nil, nil, function() os.queueEvent('key', keys.nine) os.queueEvent('char', '9') end, colors.lightGray, colors.black)
- registerKey('123', '0', '0', 19, 1, nil, nil, function() os.queueEvent('key', keys.zero) os.queueEvent('char', '0') end, colors.lightGray, colors.black)
- -- Second row, Symbols
- registerKey('123', 'minus', '-', 2, 2, nil, nil, function() os.queueEvent('key', keys.minus) os.queueEvent('char', '-') end, colors.lightGray, colors.black)
- registerKey('123', 'slash', '/', 4, 2, nil, nil, function() os.queueEvent('key', keys.slash) os.queueEvent('char', '/') end, colors.lightGray, colors.black)
- registerKey('123', 'colon', ':', 6, 2, nil, nil, function() os.queueEvent('key', keys.colon) os.queueEvent('char', ':') end, colors.lightGray, colors.black)
- registerKey('123', 'semicolon', ';', 8, 2, nil, nil, function() os.queueEvent('key', keys.colon) os.queueEvent('char', ';') end, colors.lightGray, colors.black)
- registerKey('123', 'lbracket', '(', 10, 2, nil, nil, function() os.queueEvent('key', keys.nine) os.queueEvent('char', '(') end, colors.lightGray, colors.black)
- registerKey('123', 'rbrakcet', ')', 12, 2, nil, nil, function() os.queueEvent('key', keys.zero) os.queueEvent('char', ')') end, colors.lightGray, colors.black)
- registerKey('123', 'dollars', '$', 14, 2, nil, nil, function() os.queueEvent('key', keys.four) os.queueEvent('char', '$') end, colors.lightGray, colors.black)
- registerKey('123', 'amp', '&', 16, 2, nil, nil, function() os.queueEvent('key', keys.seven) os.queueEvent('char', '&') end, colors.lightGray, colors.black)
- registerKey('123', 'at', '@', 18, 2, nil, nil, function() os.queueEvent('key', keys.two) os.queueEvent('char', '@') end, colors.lightGray, colors.black)
- -- third row, Symbols
- registerKey('123', 'CYC_#+=', '#=', 1, 3, nil, nil, function() setActiveScreen('#+=') end, colors.lightGray, colors.black)
- registerKey('123', 'period', '.', 5, 3, nil, nil, function() os.queueEvent('key', keys.period) os.queueEvent('char', '.') end, colors.lightGray, colors.black)
- registerKey('123', 'comma', ',', 7, 3, nil, nil, function() os.queueEvent('key', keys.comma) os.queueEvent('char', ',') end, colors.lightGray, colors.black)
- registerKey('123', 'question', '?', 9, 3, nil, nil, function() os.queueEvent('key', keys.slash) os.queueEvent('char', '?') end, colors.lightGray, colors.black)
- registerKey('123', 'exclamation', '!', 11, 3, nil, nil, function() os.queueEvent('key', keys.one) os.queueEvent('char', '!') end, colors.lightGray, colors.black)
- registerKey('123', 'singleQuote', '\'', 13, 3, nil, nil, function() os.queueEvent('key', 0) os.queueEvent('char', '\'') end, colors.lightGray, colors.black)
- registerKey('123', 'quote', '\"', 15, 3, nil, nil, function() os.queueEvent('key', 0) os.queueEvent('char', '\"') end, colors.lightGray, colors.black)
- registerKey('123', 'BK', '<-', 18, 3, nil, nil, function() os.queueEvent('key', keys.backspace) end, colors.lightGray, colors.black)
- -- Fourth row, Standard
- registerKey('123', 'SB', ' space ', 5, 4, nil, nil, function() os.queueEvent('key', keys.space) os.queueEvent('char', ' ') end, colors.lightGray, colors.black)
- registerKey('123', 'EN', 'enter', 15, 4, nil, nil, function() os.queueEvent('key', keys.enter) end, colors.lightGray, colors.black)
- end
- -- THIRD VIEW: #+=
- do
- -- First row, Symbols
- registerKey('#+=', 'lsbrace', '[', 1, 1, nil, nil, function() os.queueEvent('key', keys.leftBracket) os.queueEvent('char', '[') end, colors.lightGray, colors.black)
- registerKey('#+=', 'rsbrace', ']', 3, 1, nil, nil, function() os.queueEvent('key', keys.rightBracket) os.queueEvent('char', ']') end, colors.lightGray, colors.black)
- registerKey('#+=', 'lcbrace', '{', 5, 1, nil, nil, function() os.queueEvent('key', keys.leftBracket) os.queueEvent('char', '{') end, colors.lightGray, colors.black)
- registerKey('#+=', 'rcbrace', '}', 7, 1, nil, nil, function() os.queueEvent('key', keys.rightBracket) os.queueEvent('char', '}') end, colors.lightGray, colors.black)
- registerKey('#+=', 'hash', '#', 9, 1, nil, nil, function() os.queueEvent('key', keys.three) os.queueEvent('char', '#') end, colors.lightGray, colors.black)
- registerKey('#+=', 'percent', '%', 11, 1, nil, nil, function() os.queueEvent('key', keys.five) os.queueEvent('char', '%') end, colors.lightGray, colors.black)
- registerKey('#+=', 'carrot', '^', 13, 1, nil, nil, function() os.queueEvent('key', keys.six) os.queueEvent('char', '^') end, colors.lightGray, colors.black)
- registerKey('#+=', 'asterisk', '*', 15, 1, nil, nil, function() os.queueEvent('key', keys.eight) os.queueEvent('char', '*') end, colors.lightGray, colors.black)
- registerKey('#+=', 'plus', '+', 17, 1, nil, nil, function() os.queueEvent('key', keys.equals) os.queueEvent('char', '+') end, colors.lightGray, colors.black)
- registerKey('#+=', 'equals', '=', 19, 1, nil, nil, function() os.queueEvent('key', keys.equals) os.queueEvent('char', '=') end, colors.lightGray, colors.black)
- -- Second row, Symbols
- registerKey('#+=', 'score', '_', 2, 2, nil, nil, function() os.queueEvent('key', keys.minus) os.queueEvent('char', '_') end, colors.lightGray, colors.black)
- registerKey('#+=', 'backslash', '\\', 4, 2, nil, nil, function() os.queueEvent('key', keys.backslash) os.queueEvent('char', '\\') end, colors.lightGray, colors.black)
- registerKey('#+=', 'bar', '|', 6, 2, nil, nil, function() os.queueEvent('key', keys.backslash) os.queueEvent('char', '|') end, colors.lightGray, colors.black)
- registerKey('#+=', 'tild', '~', 8, 2, nil, nil, function() os.queueEvent('key', 0) os.queueEvent('char', '~') end, colors.lightGray, colors.black)
- registerKey('#+=', 'lt', '<', 10, 2, nil, nil, function() os.queueEvent('key', keys.comma) os.queueEvent('char', '<') end, colors.lightGray, colors.black)
- registerKey('#+=', 'gt', '>', 12, 2, nil, nil, function() os.queueEvent('key', keys.period) os.queueEvent('char', '>') end, colors.lightGray, colors.black)
- registerKey('#+=', 'dollars', '$', 14, 2, nil, nil, function() os.queueEvent('key', keys.four) os.queueEvent('char', '$') end, colors.lightGray, colors.black)
- registerKey('#+=', 'amp', '&', 16, 2, nil, nil, function() os.queueEvent('key', keys.seven) os.queueEvent('char', '&') end, colors.lightGray, colors.black)
- registerKey('#+=', 'at', '@', 18, 2, nil, nil, function() os.queueEvent('key', keys.two) os.queueEvent('char', '@') end, colors.lightGray, colors.black)
- -- third row, Symbols
- registerKey('#+=', 'CYC_123', '12', 1, 3, nil, nil, function() setActiveScreen('123') end, colors.lightGray, colors.black)
- registerKey('#+=', 'period', '.', 5, 3, nil, nil, function() os.queueEvent('key', keys.period) os.queueEvent('char', '.') end, colors.lightGray, colors.black)
- registerKey('#+=', 'comma', ',', 7, 3, nil, nil, function() os.queueEvent('key', keys.comma) os.queueEvent('char', ',') end, colors.lightGray, colors.black)
- registerKey('#+=', 'question', '?', 9, 3, nil, nil, function() os.queueEvent('key', keys.slash) os.queueEvent('char', '?') end, colors.lightGray, colors.black)
- registerKey('#+=', 'exclamation', '!', 11, 3, nil, nil, function() os.queueEvent('key', keys.one) os.queueEvent('char', '!') end, colors.lightGray, colors.black)
- registerKey('#+=', 'singleQuote', '\'', 13, 3, nil, nil, function() os.queueEvent('key', 0) os.queueEvent('char', '\'') end, colors.lightGray, colors.black)
- registerKey('#+=', 'quote', '\"', 15, 3, nil, nil, function() os.queueEvent('key', 0) os.queueEvent('char', '\"') end, colors.lightGray, colors.black)
- registerKey('#+=', 'BK', '<-', 18, 3, nil, nil, function() os.queueEvent('key', keys.backspace) end, colors.lightGray, colors.black)
- -- Fourth row, Standard
- registerKey('#+=', 'SP_ABC', 'ABC', 1, 4, nil, nil, function() setActiveScreen('ABC') end, colors.lightGray, colors.black)
- registerKey('#+=', 'SB', ' space ', 5, 4, nil, nil, function() os.queueEvent('key', keys.space) os.queueEvent('char', ' ') end, colors.lightGray, colors.black)
- registerKey('#+=', 'EN', 'enter', 15, 4, nil, nil, function() os.queueEvent('key', keys.enter) end, colors.lightGray, colors.black)
- end
- startCoroutine()
- end
- --[[
- q w e r t y u i o p
- a s d f g h j k l
- ^ z x c v b n m <-
- 123 space enter
- 1 2 3 4 5 6 7 8 9 0
- - / : ; ( ) $ & @ "
- #+= . , ? ! ' <-
- ABC space enter
- [ ] { } # % ^ * + =
- _ \ | ~ < > $ & @ "
- 123 . , ? ! ' <-
- ABC space enter
- ]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement