import warnings from collections.abc import Iterable import openrazer.client from .color import Color from .keymap import Keymap class Keyboard: """Provides tooling to call openrazer.client.device""" def __init__(self, no_keymap = False): self.kbd = None self.find_keyboard(no_keymap) if self.kbd is None: warnings.warn('Compatible keyboard was not detected', RuntimeWarning) def find_keyboard(self, no_keymap): if self.kbd is not None: print('keyboard was already initiated') return True devman = openrazer.client.DeviceManager() for device in devman.devices: if (device.name == "Razer BlackWidow Chroma V2"): self.kbd = device if not no_keymap: self.keymap = Keymap() self.keymap.load_from_file(self.kbd.name) return True return False def found_keyboard(self): return self.kbd is not None def keyboard_name(self): return self.kbd.name def set_keys(self, color, *keys): if not isinstance(color, Color): print(f"Color {color} for key(s) '{keys}' is no instance of Color, skipping.") return False for key in keys: if isinstance(key, Iterable) and not isinstance(key, str): # Allow for iterables (lists etc) of keys to be parsed for single_key in key: self.set_keys(color, single_key) else: location = self.keymap.get_location(key) self.kbd.fx.advanced.matrix[location] = [color.red, color.green, color.blue] return True def set_key(self, row, column, color): if not isinstance(color, Color): print(f"Color '{color}' for key {row},{column} is no instance of Color, skipping.") return False self.kbd.fx.advanced.matrix[row, column] = [color.red, color.green, color.blue] def set_static(self, color): if not isinstance(color, Color): print(f"Color for set_static() is no instance of Color, skipping.") return False for row in range(0,6): for column in range(0, 22): self.kbd.fx.advanced.matrix[row,column] = [color.red, color.green, color.blue] def clear(self): self.set_static(Color(0, 0, 0)) def draw(self): self.kbd.fx.advanced.draw()