file.mkdir('dlib/keybinds') DLib.bind = DLib.bind or { } local bind = DLib.bind bind.KeyMap = { [KEY_FIRST] = 'FIRST', [KEY_NONE] = 'NONE', [KEY_0] = '0', [KEY_1] = '1', [KEY_2] = '2', [KEY_3] = '3', [KEY_4] = '4', [KEY_5] = '5', [KEY_6] = '6', [KEY_7] = '7', [KEY_8] = '8', [KEY_9] = '9', [KEY_A] = 'A', [KEY_B] = 'B', [KEY_C] = 'C', [KEY_D] = 'D', [KEY_E] = 'E', [KEY_F] = 'F', [KEY_G] = 'G', [KEY_H] = 'H', [KEY_I] = 'I', [KEY_J] = 'J', [KEY_K] = 'K', [KEY_L] = 'L', [KEY_M] = 'M', [KEY_N] = 'N', [KEY_O] = 'O', [KEY_P] = 'P', [KEY_Q] = 'Q', [KEY_R] = 'R', [KEY_S] = 'S', [KEY_T] = 'T', [KEY_U] = 'U', [KEY_V] = 'V', [KEY_W] = 'W', [KEY_X] = 'X', [KEY_Y] = 'Y', [KEY_Z] = 'Z', [KEY_PAD_0] = 'PAD_0', [KEY_PAD_1] = 'PAD_1', [KEY_PAD_2] = 'PAD_2', [KEY_PAD_3] = 'PAD_3', [KEY_PAD_4] = 'PAD_4', [KEY_PAD_5] = 'PAD_5', [KEY_PAD_6] = 'PAD_6', [KEY_PAD_7] = 'PAD_7', [KEY_PAD_8] = 'PAD_8', [KEY_PAD_9] = 'PAD_9', [KEY_PAD_DIVIDE] = 'PAD_DIVIDE', [KEY_PAD_MULTIPLY] = 'PAD_MULTIPLY', [KEY_PAD_MINUS] = 'PAD_MINUS', [KEY_PAD_PLUS] = 'PAD_PLUS', [KEY_PAD_ENTER] = 'PAD_ENTER', [KEY_PAD_DECIMAL] = 'PAD_DECIMAL', [KEY_LBRACKET] = 'LBRACKET', [KEY_RBRACKET] = 'RBRACKET', [KEY_SEMICOLON] = 'SEMICOLON', [KEY_APOSTROPHE] = 'APOSTROPHE', [KEY_BACKQUOTE] = 'BACKQUOTE', [KEY_COMMA] = 'COMMA', [KEY_PERIOD] = 'PERIOD', [KEY_SLASH] = 'SLASH', [KEY_BACKSLASH] = 'BACKSLASH', [KEY_MINUS] = 'MINUS', [KEY_EQUAL] = 'EQUAL', [KEY_ENTER] = 'ENTER', [KEY_SPACE] = 'SPACE', [KEY_BACKSPACE] = 'BACKSPACE', [KEY_TAB] = 'TAB', [KEY_CAPSLOCK] = 'CAPSLOCK', [KEY_NUMLOCK] = 'NUMLOCK', [KEY_ESCAPE] = 'ESCAPE', [KEY_SCROLLLOCK] = 'SCROLLLOCK', [KEY_INSERT] = 'INSERT', [KEY_DELETE] = 'DELETE', [KEY_HOME] = 'HOME', [KEY_END] = 'END', [KEY_PAGEUP] = 'PAGEUP', [KEY_PAGEDOWN] = 'PAGEDOWN', [KEY_BREAK] = 'BREAK', [KEY_LSHIFT] = 'LSHIFT', [KEY_RSHIFT] = 'RSHIFT', [KEY_LALT] = 'LALT', [KEY_RALT] = 'RALT', [KEY_LCONTROL] = 'LCONTROL', [KEY_RCONTROL] = 'RCONTROL', [KEY_LWIN] = 'LWIN', [KEY_RWIN] = 'RWIN', [KEY_APP] = 'APP', [KEY_UP] = 'UP', [KEY_LEFT] = 'LEFT', [KEY_DOWN] = 'DOWN', [KEY_RIGHT] = 'RIGHT', [KEY_F1] = 'F1', [KEY_F2] = 'F2', [KEY_F3] = 'F3', [KEY_F4] = 'F4', [KEY_F5] = 'F5', [KEY_F6] = 'F6', [KEY_F7] = 'F7', [KEY_F8] = 'F8', [KEY_F9] = 'F9', [KEY_F10] = 'F10', [KEY_F11] = 'F11', [KEY_F12] = 'F12', [KEY_CAPSLOCKTOGGLE] = 'CAPSLOCKTOGGLE', [KEY_NUMLOCKTOGGLE] = 'NUMLOCKTOGGLE', [KEY_LAST] = 'LAST', [KEY_SCROLLLOCKTOGGLE] = 'SCROLLLOCKTOGGLE', [KEY_COUNT] = 'COUNT', [KEY_XBUTTON_A] = 'XBUTTON_A', [KEY_XBUTTON_B] = 'XBUTTON_B', [KEY_XBUTTON_X] = 'XBUTTON_X', [KEY_XBUTTON_Y] = 'XBUTTON_Y', [KEY_XBUTTON_LEFT_SHOULDER] = 'XBUTTON_LEFT_SHOULDER', [KEY_XBUTTON_RIGHT_SHOULDER] = 'XBUTTON_RIGHT_SHOULDER', [KEY_XBUTTON_BACK] = 'XBUTTON_BACK', [KEY_XBUTTON_START] = 'XBUTTON_START', [KEY_XBUTTON_STICK1] = 'XBUTTON_STICK1', [KEY_XBUTTON_STICK2] = 'XBUTTON_STICK2', [KEY_XBUTTON_UP] = 'XBUTTON_UP', [KEY_XBUTTON_RIGHT] = 'XBUTTON_RIGHT', [KEY_XBUTTON_DOWN] = 'XBUTTON_DOWN', [KEY_XBUTTON_LEFT] = 'XBUTTON_LEFT', [KEY_XSTICK1_RIGHT] = 'XSTICK1_RIGHT', [KEY_XSTICK1_LEFT] = 'XSTICK1_LEFT', [KEY_XSTICK1_DOWN] = 'XSTICK1_DOWN', [KEY_XSTICK1_UP] = 'XSTICK1_UP', [KEY_XBUTTON_LTRIGGER] = 'XBUTTON_LTRIGGER', [KEY_XBUTTON_RTRIGGER] = 'XBUTTON_RTRIGGER', [KEY_XSTICK2_RIGHT] = 'XSTICK2_RIGHT', [KEY_XSTICK2_LEFT] = 'XSTICK2_LEFT', [KEY_XSTICK2_DOWN] = 'XSTICK2_DOWN', [KEY_XSTICK2_UP] = 'XSTICK2_UP' } bind.LocalizedButtons = { UP = 'UP Arrow', DOWN = 'DOWN Arrow', LEFT = 'LEFT Arrow', RIGHT = 'RIGHT Arrow' } local KEY_LIST do local _accum_0 = { } local _len_0 = 1 for key, str in pairs(bind.KeyMap) do _accum_0[_len_0] = key _len_0 = _len_0 + 1 end KEY_LIST = _accum_0 end do local _tbl_0 = { } for k, v in pairs(bind.KeyMap) do _tbl_0[v] = k end bind.KeyMapReverse = _tbl_0 end bind.SerealizeKeys = function(keys) if keys == nil then keys = { } end local output do local _accum_0 = { } local _len_0 = 1 for _index_0 = 1, #keys do local k = keys[_index_0] if bind.KeyMap[k] then _accum_0[_len_0] = bind.KeyMap[k] _len_0 = _len_0 + 1 end end output = _accum_0 end return output end bind.UnSerealizeKeys = function(keys) if keys == nil then keys = { } end local output do local _accum_0 = { } local _len_0 = 1 for _index_0 = 1, #keys do local k = keys[_index_0] if bind.KeyMapReverse[k] then _accum_0[_len_0] = bind.KeyMapReverse[k] _len_0 = _len_0 + 1 end end output = _accum_0 end return output end do local _class_0 local _base_0 = { Setup = function(self, binds) self.KeybindingsMap = binds for name, data in pairs(self.KeybindingsMap) do data.secondary = data.secondary or { } data.id = name data.name = data.name or '#BINDNAME?' data.desc = data.desc or '#BINDDESC?' data.order = data.order or 100 end do local _accum_0 = { } local _len_0 = 1 for name, data in pairs(self.KeybindingsMap) do _accum_0[_len_0] = data _len_0 = _len_0 + 1 end self.KeybindingsOrdered = _accum_0 end return table.sort(self.KeybindingsOrdered, function(a, b) return a.order < b.order end) end, RegisterBind = function(self, id, name, desc, primary, secondary, order) if name == nil then name = '#BINDNAME?' end if desc == nil then desc = '#BINDDESC?' end if primary == nil then primary = { } end if secondary == nil then secondary = { } end if order == nil then order = 100 end if not id then error('No ID specified!') end self.KeybindingsMap[id] = { name = name, desc = desc, primary = primary, secondary = secondary, order = order, id = id } do local _accum_0 = { } local _len_0 = 1 for name, data in pairs(self.KeybindingsMap) do _accum_0[_len_0] = data _len_0 = _len_0 + 1 end self.KeybindingsOrdered = _accum_0 end return table.sort(self.KeybindingsOrdered, function(a, b) return a.order < b.order end) end, GetDefaultBindings = function(self) local output do local _accum_0 = { } local _len_0 = 1 for id, data in pairs(self.KeybindingsMap) do local primary = bind.SerealizeKeys(data.primary) local secondary = bind.SerealizeKeys(data.secondary) local _value_0 = { name = id, primary = primary, secondary = secondary } _accum_0[_len_0] = _value_0 _len_0 = _len_0 + 1 end output = _accum_0 end return output end, UpdateKeysMap = function(self) local watchButtons do local _tbl_0 = { } local _list_0 = self.Keybindings for _index_0 = 1, #_list_0 do local data = _list_0[_index_0] local _list_1 = data.primary for _index_1 = 1, #_list_1 do local key = _list_1[_index_1] _tbl_0[key] = true end end watchButtons = _tbl_0 end local _list_0 = self.Keybindings for _index_0 = 1, #_list_0 do local data = _list_0[_index_0] local _list_1 = data.secondary for _index_1 = 1, #_list_1 do local key = _list_1[_index_1] watchButtons[key] = true end end do local _tbl_0 = { } local _list_1 = self.Keybindings for _index_0 = 1, #_list_1 do local data = _list_1[_index_0] _tbl_0[data.name] = data end self.KeybindingsUserMap = _tbl_0 end do local _tbl_0 = { } local _list_1 = self.Keybindings for _index_0 = 1, #_list_1 do local data = _list_1[_index_0] _tbl_0[data.name] = { name = data.name, primary = bind.UnSerealizeKeys(data.primary), secondary = bind.UnSerealizeKeys(data.secondary) } end self.KeybindingsUserMapCheck = _tbl_0 end do local _accum_0 = { } local _len_0 = 1 for key, bool in pairs(watchButtons) do _accum_0[_len_0] = bind.KeyMapReverse[key] _len_0 = _len_0 + 1 end self.WatchingButtons = _accum_0 end do local _tbl_0 = { } local _list_1 = self.WatchingButtons for _index_0 = 1, #_list_1 do local key = _list_1[_index_0] _tbl_0[key] = false end self.PressedButtons = _tbl_0 end do local _tbl_0 = { } local _list_1 = self.WatchingButtons for _index_0 = 1, #_list_1 do local key = _list_1[_index_0] _tbl_0[key] = { } end self.WatchingButtonsPerBinding = _tbl_0 end do local _tbl_0 = { } local _list_1 = self.Keybindings for _index_0 = 1, #_list_1 do local data = _list_1[_index_0] _tbl_0[data.name] = false end self.BindPressStatus = _tbl_0 end local _list_1 = self.Keybindings for _index_0 = 1, #_list_1 do local _des_0 = _list_1[_index_0] local name, primary, secondary name, primary, secondary = _des_0.name, _des_0.primary, _des_0.secondary for _index_1 = 1, #primary do local key = primary[_index_1] table.insert(self.WatchingButtonsPerBinding[bind.KeyMapReverse[key]], name) end for _index_1 = 1, #secondary do local key = secondary[_index_1] table.insert(self.WatchingButtonsPerBinding[bind.KeyMapReverse[key]], name) end end end, SetKeyCombination = function(self, bindid, isPrimary, keys, update, doSave) if bindid == nil then bindid = '' end if isPrimary == nil then isPrimary = true end if keys == nil then keys = { } end if update == nil then update = true end if doSave == nil then doSave = true end if not self.KeybindingsMap[bindid] then return false end if not self.KeybindingsUserMap[bindid] then return false end if isPrimary then local _list_0 = self.Keybindings for _index_0 = 1, #_list_0 do local data = _list_0[_index_0] if data.name == bindid then data.primary = keys break end end else local _list_0 = self.Keybindings for _index_0 = 1, #_list_0 do local data = _list_0[_index_0] if data.name == bindid then data.secondary = keys break end end end if update then self:UpdateKeysMap() end if doSave then self:SaveKeybindings() end return true end, IsKeyDown = function(self, keyid) if keyid == nil then keyid = KEY_NONE end return self.PressedButtons[keyid] or false end, IsBindPressed = function(self, bindid) if bindid == nil then bindid = '' end if not self.KeybindingsMap[bindid] then return false end if not self.KeybindingsUserMap[bindid] then return false end return self.BindPressStatus[bindid] or false end, IsBindDown = IsBindPressed, InternalIsBindPressed = function(self, bindid) if bindid == nil then bindid = '' end if not self.KeybindingsMap[bindid] then return false end if not self.KeybindingsUserMapCheck[bindid] then return false end local data = self.KeybindingsUserMapCheck[bindid] local total = #data.primary local hits = 0 local total2 = #data.secondary local hits2 = 0 local _list_0 = data.primary for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] if self:IsKeyDown(key) then hits = hits + 1 end end local _list_1 = data.secondary for _index_0 = 1, #_list_1 do local key = _list_1[_index_0] if self:IsKeyDown(key) then hits2 = hits2 + 1 end end return total ~= 0 and total == hits or total2 ~= 0 and total2 == hits2 end, GetBindString = function(self, bindid) if bindid == nil then bindid = '' end if not self.KeybindingsMap[bindid] then return false end if not self.KeybindingsUserMap[bindid] then return false end local output local data = self.KeybindingsUserMap[bindid] if #data.primary ~= 0 then output = table.concat((function() local _accum_0 = { } local _len_0 = 1 local _list_0 = data.primary for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] _accum_0[_len_0] = bind.LocalizedButtons[key] or key _len_0 = _len_0 + 1 end return _accum_0 end)(), ' + ') end if #data.secondary ~= 0 then local tab do local _accum_0 = { } local _len_0 = 1 local _list_0 = data.secondary for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] _accum_0[_len_0] = bind.LocalizedButtons[key] or key _len_0 = _len_0 + 1 end tab = _accum_0 end if output then output = output .. (' or ' .. table.concat(tab, ' + ')) end if not output then output = table.concat(tab, ' + ') end end return output or '' end, SaveKeybindings = function(self) return file.Write(self.fpath, util.TableToJSON(self.Keybindings, true)) end, LoadKeybindings = function(self) self.Keybindings = nil local settingsExists = file.Exists(self.fpath, 'DATA') if settingsExists then local read = file.Read(self.fpath, 'DATA') self.Keybindings = util.JSONToTable(read) if self.Keybindings then local defaultBinds = self:GetDefaultBindings() local valid = true local hits = { } local _list_0 = self.Keybindings for _index_0 = 1, #_list_0 do local data = _list_0[_index_0] if not data.primary then valid = false break end if not data.secondary then valid = false break end if not data.name then valid = false break end if type(data.primary) ~= 'table' then valid = false break end if type(data.secondary) ~= 'table' then valid = false break end if type(data.name) ~= 'string' then valid = false break end hits[data.name] = true end local shouldSave = false if valid then for _index_0 = 1, #defaultBinds do local data = defaultBinds[_index_0] if not hits[data.name] then table.insert(self.Keybindings, data) shouldSave = true end end self:UpdateKeysMap() if shouldSave then self:SaveKeybindings() end else self.Keybindings = nil end end end if not self.Keybindings then self.Keybindings = self:GetDefaultBindings() self:UpdateKeysMap() self:SaveKeybindings() end return self.Keybindings end, UpdateKeysStatus = function(self) if not self.WatchingButtons then return end local _list_0 = self.WatchingButtons for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] local oldStatus = self.PressedButtons[key] local newStatus = input.IsKeyDown(key) if oldStatus ~= newStatus then self.PressedButtons[key] = newStatus local watching = self.WatchingButtonsPerBinding[key] if watching then for _index_1 = 1, #watching do local name = watching[_index_1] local oldPressStatus = self.BindPressStatus[name] local newPressStatus = self:InternalIsBindPressed(name) if oldPressStatus ~= newPressStatus then self.BindPressStatus[name] = newPressStatus if not newPressStatus then hook.Run(self.vname .. '.BindReleased', name) else hook.Run(self.vname .. '.BindPressed', name) end end end end end end end, OpenKeybindsMenu = function(self) do local frame = vgui.Create('DFrame') frame:SetSkin('DLib_Black') frame:SetSize(470, ScrHL() - 200) frame:SetTitle(self.vname .. ' Keybinds') frame:Center() frame:MakePopup() frame:SetKeyboardInputEnabled(true) frame.scroll = vgui.Create('DScrollPanel', frame) frame.scroll:Dock(FILL) do local _accum_0 = { } local _len_0 = 1 local _list_0 = self.KeybindingsOrdered for _index_0 = 1, #_list_0 do local _des_0 = _list_0[_index_0] local id id = _des_0.id do local _with_0 = vgui.Create('DLibBindRow', frame.scroll) _with_0:SetTarget(self) _with_0:SetBindID(id) _with_0:Dock(TOP) _accum_0[_len_0] = _with_0 end _len_0 = _len_0 + 1 end frame.rows = _accum_0 end return frame end end } _base_0.__index = _base_0 _class_0 = setmetatable({ __init = function(self, vname, binds, doLoad) if doLoad == nil then doLoad = true end if not vname then error('Name is required') end if not binds then error('Binds are required') end self.vname = vname self.fname = vname:lower() self.fpath = 'dlib/keybinds/' .. self.fname .. '.txt' self:Setup(binds) if doLoad then self:LoadKeybindings() end return hook.Add('Think', self.vname .. '.Keybinds', function() return self:UpdateKeysStatus() end) end, __base = _base_0, __name = "KeyBindsAdapter" }, { __index = _base_0, __call = function(cls, ...) local _self_0 = setmetatable({}, _base_0) cls.__init(_self_0, ...) return _self_0 end }) _base_0.__class = _class_0 bind.KeyBindsAdapter = _class_0 end bind.PANEL_BIND_FIELD = { Init = function(self) self:SetSkin('DLib_Black') self.lastMousePress = 0 self.lastMousePressRight = 0 self.primary = true self.lock = false self.combination = { } self.combinationNew = { } self:SetMouseInputEnabled(true) self:SetTooltip('Double RIGHT mouse press to clear binding\nDouble LEFT mouse press to change binding\nWhen changing binding, press needed buttons WITHOUT releasing.\nRelease one of pressed buttons to save.\nTo cancel, press ESCAPE') self.combinationLabel = vgui.Create('DLabel', self) self.addColor = 0 do local _with_0 = self.combinationLabel _with_0:Dock(FILL) _with_0:DockMargin(5, 0, 0, 0) _with_0:SetTextColor(color_white) _with_0:SetText('#COMBINATION?') return _with_0 end end, SetCombinationLabel = function(self, keys) if keys == nil then keys = { } end local str = table.concat((function() local _accum_0 = { } local _len_0 = 1 local _list_0 = bind.SerealizeKeys(keys) for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] _accum_0[_len_0] = bind.LocalizedButtons[key] or key _len_0 = _len_0 + 1 end return _accum_0 end)(), ' + ') return self.combinationLabel:SetText(str) end, StopLock = function(self) self.lock = false self:SetCursor('none') if #self.combinationNew == 0 then self.combinationNew = self.combination return self:SetCombinationLabel(self.combination) else self:GetParent():OnCombinationUpdates(self, self.combinationNew) self.combination = keys return self:SetCombinationLabel(self.combinationNew) end end, OnMousePressed = function(self, code) if code == nil then code = MOUSE_LEFT end if code == MOUSE_LEFT then if self.lock then self:StopLock() return end local prev = self.lastMousePress self.lastMousePress = RealTimeL() + 0.4 if prev < RealTimeL() then return end self.lock = true self.combinationNew = { } self.combinationLabel:SetText('???') self.mouseX, self.mouseY = self:LocalToScreen(5, 5) self:SetCursor('blank') do local _tbl_0 = { } for _index_0 = 1, #KEY_LIST do local key = KEY_LIST[_index_0] _tbl_0[key] = false end self.pressedKeys = _tbl_0 end elseif code == MOUSE_RIGHT and not self.lock then local prev = self.lastMousePressRight self.lastMousePressRight = RealTimeL() + 0.4 if prev < RealTimeL() then return end self.combinationNew = { } self:GetParent():OnCombinationUpdates(self, self.combinationNew) self.combination = self.combinationNew return self:SetCombinationLabel(self.combination) end end, OnKeyCodePressed = function(self, code) if code == nil then code = KEY_NONE end if code == KEY_NONE or code == KEY_FIRST then return end if not self.lock then return end if code == KEY_ESCAPE then self.lock = false self.combinationNew = self.combination self:SetCombinationLabel(self.combination) self:SetCursor('none') return elseif code == KEY_ENTER then self:StopLock() return end table.insert(self.combinationNew, code) return self:SetCombinationLabel(self.combinationNew) end, OnKeyCodeReleased = function(self, code) if code == nil then code = KEY_NONE end if code == KEY_NONE or code == KEY_FIRST then return end if self.lock then return self:StopLock() end end, Paint = function(self, w, h) if w == nil then w = 0 end if h == nil then h = 0 end surface.SetDrawColor(40 + 90 * self.addColor, 40 + 90 * self.addColor, 40) surface.DrawRect(0, 0, w, h) if self.lock then surface.SetDrawColor(137, 130, 104) return surface.DrawRect(4, 4, w - 8, h - 8) end end, Think = function(self) if self:IsHovered() then self.addColor = math.min(self.addColor + FrameTime() * 10, 1) else self.addColor = math.max(self.addColor - FrameTime() * 10, 0) end if self.lock then input.SetCursorPos(self.mouseX, self.mouseY) for _index_0 = 1, #KEY_LIST do local key = KEY_LIST[_index_0] local old = self.pressedKeys[key] local new = input.IsKeyDown(key) if old ~= new then self.pressedKeys[key] = new if new then self:OnKeyCodePressed(key) else self:OnKeyCodeReleased(key) end end end end end } bind.PANEL_BIND_INFO = { Init = function(self) self:SetSkin('DLib_Black') self:SetMouseInputEnabled(true) self:SetKeyboardInputEnabled(true) self.bindid = '' self.label = vgui.Create('DLabel', self) self:SetSize(200, 30) do local _with_0 = self.label _with_0:SetText(' #HINT?') _with_0:Dock(LEFT) _with_0:DockMargin(10, 0, 0, 0) _with_0:SetSize(200, 0) _with_0:SetTooltip(' #DESCRIPTION?') _with_0:SetTextColor(color_white) _with_0:SetMouseInputEnabled(true) end self.primary = vgui.Create('DLibBindField', self) do local _with_0 = self.primary _with_0:Dock(LEFT) _with_0:DockMargin(10, 0, 0, 0) _with_0:SetSize(100, 0) _with_0.Primary = true _with_0.combination = { } end self.secondary = vgui.Create('DLibBindField', self) do local _with_0 = self.secondary _with_0:Dock(LEFT) _with_0:DockMargin(10, 0, 0, 0) _with_0:SetSize(100, 0) _with_0.Primary = false _with_0.combination = { } return _with_0 end end, SetTarget = function(self, target) self.target = target end, SetBindID = function(self, id) if id == nil then id = '' end self.bindid = id local data = bind.KeybindingsUserMap[id] local dataLabels = bind.KeybindingsMap[id] if not data then return end if not dataLabels then return end do local _with_0 = self.label _with_0:SetText(dataLabels.name) _with_0:SetTooltip(dataLabels.desc) end do local _accum_0 = { } local _len_0 = 1 local _list_0 = bind.UnSerealizeKeys(data.primary) for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] _accum_0[_len_0] = key _len_0 = _len_0 + 1 end self.primary.combination = _accum_0 end do local _accum_0 = { } local _len_0 = 1 local _list_0 = bind.UnSerealizeKeys(data.secondary) for _index_0 = 1, #_list_0 do local key = _list_0[_index_0] _accum_0[_len_0] = key _len_0 = _len_0 + 1 end self.secondary.combination = _accum_0 end self.primary:SetCombinationLabel(self.primary.combination) return self.secondary:SetCombinationLabel(self.secondary.combination) end, OnCombinationUpdates = function(self, pnl, newCombination) if newCombination == nil then newCombination = { } end if self.bindid == '' then return end return self.target:SetKeyCombination(self.bindid, pnl.Primary, bind.SerealizeKeys(newCombination)) end, Paint = function(self, w, h) if w == nil then w = 0 end if h == nil then h = 0 end surface.SetDrawColor(106, 122, 120) return surface.DrawRect(0, 0, w, h) end } vgui.Register('DLibBindField', bind.PANEL_BIND_FIELD, 'EditablePanel') vgui.Register('DLibBindRow', bind.PANEL_BIND_INFO, 'EditablePanel') bind.exportBinds = function(classIn, target) target.RegisterBind = function(...) return classIn:RegisterBind(...) end target.SerealizeKeys = function(...) return bind.SerealizeKeys(...) end target.UnSerealizeKeys = function(...) return bind.UnSerealizeKeys(...) end target.GetDefaultBindings = function(...) return classIn:GetDefaultBindings(...) end target.UpdateKeysMap = function(...) return classIn:UpdateKeysMap(...) end target.SetKeyCombination = function(...) return classIn:SetKeyCombination(...) end target.IsKeyDown = function(...) return classIn:IsKeyDown(...) end target.IsBindPressed = function(...) return classIn:IsBindPressed(...) end target.IsBindDown = function(...) return classIn:IsBindPressed(...) end target.InternalIsBindPressed = function(...) return classIn:InternalIsBindPressed(...) end target.GetBindString = function(...) return classIn:GetBindString(...) end target.SaveKeybindings = function(...) return classIn:SaveKeybindings(...) end target.LoadKeybindings = function(...) return classIn:LoadKeybindings(...) end target.UpdateKeysStatus = function(...) return classIn:UpdateKeysStatus(...) end target.OpenKeybindsMenu = function(...) return classIn:OpenKeybindsMenu(...) end target.LocalizedButtons = bind.LocalizedButtons end return bind