From 7fc71a4856f65c42f5c0711d440d2e2136df0de3 Mon Sep 17 00:00:00 2001
From: lijenstina <lijenstina@gmail.com>
Date: Mon, 24 Apr 2017 02:24:39 +0200
Subject: [PATCH] Is key Free: Use property group for Scene props

Bumped version to 1.0.2
Move the scene properties into a separate group
The props can be accessed through
bpy.context.scene.is_keyfree
---
 development_iskeyfree.py | 572 ++++++++++++++++++++-------------------
 1 file changed, 292 insertions(+), 280 deletions(-)

diff --git a/development_iskeyfree.py b/development_iskeyfree.py
index 8db3919e8..4b6c08b4f 100644
--- a/development_iskeyfree.py
+++ b/development_iskeyfree.py
@@ -19,16 +19,26 @@
 # PEP8 compliant (https://www.python.org/dev/peps/pep-0008)
 
 bl_info = {
-    'name': 'Is key Free',
-    'author': 'Antonio Vazquez (antonioya)',
-    'version': (1, 0, 1),
+    "name": "Is key Free",
+    "author": "Antonio Vazquez (antonioya)",
+    "version": (1, 0, 2),
     "blender": (2, 6, 9),
-    'location': 'Properties pane > IsKeyFree Tools',
-    'description': 'Find free shortcuts and inform of used keys',
-    'category': 'Development'}
+    "location": "Properties pane > IsKeyFree Tools",
+    "description": "Find free shortcuts and inform of used keys",
+    "category": "Development"}
 
 import bpy
-from bpy.props import StringProperty, BoolProperty, EnumProperty
+from bpy.props import (
+        StringProperty,
+        BoolProperty,
+        EnumProperty,
+        PointerProperty,
+        )
+from bpy.types import (
+        Operator,
+        Panel,
+        PropertyGroup,
+        )
 
 
 # ------------------------------------------------------
@@ -66,6 +76,7 @@ class MyChecker():
 
         wm = bpy.context.window_manager
         mykeys = []
+
         for context, keyboardmap in wm.keyconfigs.user.keymaps.items():
             for myitem in keyboardmap.keymap_items:
                 if myitem.active is True and myitem.type == findkey:
@@ -77,7 +88,6 @@ class MyChecker():
                         continue
                     if oskey is True and myitem.oskey is not True:
                         continue
-
                     t = (context,
                          myitem.type,
                          "Ctrl" if myitem.ctrl is True else "",
@@ -131,45 +141,48 @@ class MyChecker():
     # verify if key is valid
     @classmethod
     def isvalidkey(cls, txt):
-        allkeys = ["LEFTMOUSE", "MIDDLEMOUSE", "RIGHTMOUSE", "BUTTON4MOUSE", "BUTTON5MOUSE", "BUTTON6MOUSE",
-                   "BUTTON7MOUSE",
-                   "ACTIONMOUSE", "SELECTMOUSE", "MOUSEMOVE", "INBETWEEN_MOUSEMOVE", "TRACKPADPAN", "TRACKPADZOOM",
-                   "MOUSEROTATE", "WHEELUPMOUSE", "WHEELDOWNMOUSE", "WHEELINMOUSE", "WHEELOUTMOUSE", "EVT_TWEAK_L",
-                   "EVT_TWEAK_M", "EVT_TWEAK_R", "EVT_TWEAK_A", "EVT_TWEAK_S", "A", "B", "C", "D", "E", "F", "G", "H",
-                   "I", "J",
-                   "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "ZERO", "ONE", "TWO",
-                   "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "LEFT_CTRL", "LEFT_ALT", "LEFT_SHIFT",
-                   "RIGHT_ALT",
-                   "RIGHT_CTRL", "RIGHT_SHIFT", "OSKEY", "GRLESS", "ESC", "TAB", "RET", "SPACE", "LINE_FEED",
-                   "BACK_SPACE",
-                   "DEL", "SEMI_COLON", "PERIOD", "COMMA", "QUOTE", "ACCENT_GRAVE", "MINUS", "SLASH", "BACK_SLASH",
-                   "EQUAL",
-                   "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_ARROW", "DOWN_ARROW", "RIGHT_ARROW", "UP_ARROW", "NUMPAD_2",
-                   "NUMPAD_4", "NUMPAD_6", "NUMPAD_8", "NUMPAD_1", "NUMPAD_3", "NUMPAD_5", "NUMPAD_7", "NUMPAD_9",
-                   "NUMPAD_PERIOD", "NUMPAD_SLASH", "NUMPAD_ASTERIX", "NUMPAD_0", "NUMPAD_MINUS", "NUMPAD_ENTER",
-                   "NUMPAD_PLUS",
-                   "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15",
-                   "F16", "F17",
-                   "F18", "F19", "PAUSE", "INSERT", "HOME", "PAGE_UP", "PAGE_DOWN", "END", "MEDIA_PLAY", "MEDIA_STOP",
-                   "MEDIA_FIRST", "MEDIA_LAST", "TEXTINPUT", "WINDOW_DEACTIVATE", "TIMER", "TIMER0", "TIMER1", "TIMER2",
-                   "TIMER_JOBS", "TIMER_AUTOSAVE", "TIMER_REPORT", "TIMERREGION", "NDOF_MOTION", "NDOF_BUTTON_MENU",
-                   "NDOF_BUTTON_FIT", "NDOF_BUTTON_TOP", "NDOF_BUTTON_BOTTOM", "NDOF_BUTTON_LEFT", "NDOF_BUTTON_RIGHT",
-                   "NDOF_BUTTON_FRONT", "NDOF_BUTTON_BACK", "NDOF_BUTTON_ISO1", "NDOF_BUTTON_ISO2",
-                   "NDOF_BUTTON_ROLL_CW",
-                   "NDOF_BUTTON_ROLL_CCW", "NDOF_BUTTON_SPIN_CW", "NDOF_BUTTON_SPIN_CCW", "NDOF_BUTTON_TILT_CW",
-                   "NDOF_BUTTON_TILT_CCW", "NDOF_BUTTON_ROTATE", "NDOF_BUTTON_PANZOOM", "NDOF_BUTTON_DOMINANT",
-                   "NDOF_BUTTON_PLUS", "NDOF_BUTTON_MINUS", "NDOF_BUTTON_ESC", "NDOF_BUTTON_ALT", "NDOF_BUTTON_SHIFT",
-                   "NDOF_BUTTON_CTRL", "NDOF_BUTTON_1", "NDOF_BUTTON_2", "NDOF_BUTTON_3", "NDOF_BUTTON_4",
-                   "NDOF_BUTTON_5",
-                   "NDOF_BUTTON_6", "NDOF_BUTTON_7", "NDOF_BUTTON_8", "NDOF_BUTTON_9", "NDOF_BUTTON_10",
-                   "NDOF_BUTTON_A",
-                   "NDOF_BUTTON_B", "NDOF_BUTTON_C"]
+        allkeys = [
+            "LEFTMOUSE", "MIDDLEMOUSE", "RIGHTMOUSE", "BUTTON4MOUSE", "BUTTON5MOUSE", "BUTTON6MOUSE",
+            "BUTTON7MOUSE",
+            "ACTIONMOUSE", "SELECTMOUSE", "MOUSEMOVE", "INBETWEEN_MOUSEMOVE", "TRACKPADPAN", "TRACKPADZOOM",
+            "MOUSEROTATE", "WHEELUPMOUSE", "WHEELDOWNMOUSE", "WHEELINMOUSE", "WHEELOUTMOUSE", "EVT_TWEAK_L",
+            "EVT_TWEAK_M", "EVT_TWEAK_R", "EVT_TWEAK_A", "EVT_TWEAK_S", "A", "B", "C", "D", "E", "F", "G", "H",
+            "I", "J",
+            "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "ZERO", "ONE", "TWO",
+            "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "LEFT_CTRL", "LEFT_ALT", "LEFT_SHIFT",
+            "RIGHT_ALT",
+            "RIGHT_CTRL", "RIGHT_SHIFT", "OSKEY", "GRLESS", "ESC", "TAB", "RET", "SPACE", "LINE_FEED",
+            "BACK_SPACE",
+            "DEL", "SEMI_COLON", "PERIOD", "COMMA", "QUOTE", "ACCENT_GRAVE", "MINUS", "SLASH", "BACK_SLASH",
+            "EQUAL",
+            "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_ARROW", "DOWN_ARROW", "RIGHT_ARROW", "UP_ARROW", "NUMPAD_2",
+            "NUMPAD_4", "NUMPAD_6", "NUMPAD_8", "NUMPAD_1", "NUMPAD_3", "NUMPAD_5", "NUMPAD_7", "NUMPAD_9",
+            "NUMPAD_PERIOD", "NUMPAD_SLASH", "NUMPAD_ASTERIX", "NUMPAD_0", "NUMPAD_MINUS", "NUMPAD_ENTER",
+            "NUMPAD_PLUS",
+            "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15",
+            "F16", "F17",
+            "F18", "F19", "PAUSE", "INSERT", "HOME", "PAGE_UP", "PAGE_DOWN", "END", "MEDIA_PLAY", "MEDIA_STOP",
+            "MEDIA_FIRST", "MEDIA_LAST", "TEXTINPUT", "WINDOW_DEACTIVATE", "TIMER", "TIMER0", "TIMER1", "TIMER2",
+            "TIMER_JOBS", "TIMER_AUTOSAVE", "TIMER_REPORT", "TIMERREGION", "NDOF_MOTION", "NDOF_BUTTON_MENU",
+            "NDOF_BUTTON_FIT", "NDOF_BUTTON_TOP", "NDOF_BUTTON_BOTTOM", "NDOF_BUTTON_LEFT", "NDOF_BUTTON_RIGHT",
+            "NDOF_BUTTON_FRONT", "NDOF_BUTTON_BACK", "NDOF_BUTTON_ISO1", "NDOF_BUTTON_ISO2",
+            "NDOF_BUTTON_ROLL_CW",
+            "NDOF_BUTTON_ROLL_CCW", "NDOF_BUTTON_SPIN_CW", "NDOF_BUTTON_SPIN_CCW", "NDOF_BUTTON_TILT_CW",
+            "NDOF_BUTTON_TILT_CCW", "NDOF_BUTTON_ROTATE", "NDOF_BUTTON_PANZOOM", "NDOF_BUTTON_DOMINANT",
+            "NDOF_BUTTON_PLUS", "NDOF_BUTTON_MINUS", "NDOF_BUTTON_ESC", "NDOF_BUTTON_ALT", "NDOF_BUTTON_SHIFT",
+            "NDOF_BUTTON_CTRL", "NDOF_BUTTON_1", "NDOF_BUTTON_2", "NDOF_BUTTON_3", "NDOF_BUTTON_4",
+            "NDOF_BUTTON_5",
+            "NDOF_BUTTON_6", "NDOF_BUTTON_7", "NDOF_BUTTON_8", "NDOF_BUTTON_9", "NDOF_BUTTON_10",
+            "NDOF_BUTTON_A",
+            "NDOF_BUTTON_B", "NDOF_BUTTON_C"
+            ]
         try:
             allkeys.index(txt)
             return True
         except ValueError:
             return False
 
+
 mychecker = MyChecker()  # Global class handler
 
 
@@ -178,7 +191,7 @@ mychecker = MyChecker()  # Global class handler
 # ------------------------------------------------------
 
 
-class RunActionCheck(bpy.types.Operator):
+class RunActionCheck(Operator):
     bl_idname = "iskeyfree.action_check"
     bl_label = ""
     bl_description = "Verify if the selected shortcut is free"
@@ -188,11 +201,11 @@ class RunActionCheck(bpy.types.Operator):
     # ------------------------------
     # noinspection PyUnusedLocal
     def execute(self, context):
-        scene = context.scene
-        txt = scene.iskeyfree_data.upper()
+        scene = context.scene.is_keyfree
+        txt = scene.data.upper()
         global mychecker
-        mychecker.check(txt, scene.iskeyfree_use_crtl, scene.iskeyfree_use_alt, scene.iskeyfree_use_shift,
-                        scene.iskeyfree_use_oskey)
+        mychecker.check(txt, scene.use_crtl, scene.use_alt, scene.use_shift,
+                        scene.use_oskey)
 
         return {'FINISHED'}
 
@@ -200,7 +213,7 @@ class RunActionCheck(bpy.types.Operator):
 # ------------------------------------------------------
 # Defines UI panel
 # ------------------------------------------------------
-class UIControlPanel(bpy.types.Panel):
+class UIControlPanel(Panel):
     bl_space_type = "TEXT_EDITOR"
     bl_region_type = "UI"
     bl_label = "Is Key Free"
@@ -208,20 +221,20 @@ class UIControlPanel(bpy.types.Panel):
     # noinspection PyUnusedLocal
     def draw(self, context):
         layout = self.layout
-        scene = context.scene
+        scene = context.scene.is_keyfree
 
         row = layout.row(align=True)
-        row.prop(scene, "iskeyfree_data")
+        row.prop(scene, "data")
         row.operator("iskeyfree.action_check", icon="VIEWZOOM")
 
         row = layout.row(align=True)
-        row.prop(scene, "iskeyfree_use_crtl", toggle=True)
-        row.prop(scene, "iskeyfree_use_alt", toggle=True)
-        row.prop(scene, "iskeyfree_use_shift", toggle=True)
-        row.prop(scene, "iskeyfree_use_oskey", toggle=True)
+        row.prop(scene, "use_crtl", toggle=True)
+        row.prop(scene, "use_alt", toggle=True)
+        row.prop(scene, "use_shift", toggle=True)
+        row.prop(scene, "use_oskey", toggle=True)
 
         row = layout.row()
-        row.prop(scene, "iskeyfree_numpad")
+        row.prop(scene, "numpad")
 
         global mychecker
         mylist = mychecker.getlist()
@@ -258,238 +271,237 @@ class UIControlPanel(bpy.types.Panel):
 
 # noinspection PyUnusedLocal
 def update_data(self, context):
-    scene = context.scene
-    if scene.iskeyfree_numpad != "NONE":
-        scene.iskeyfree_data = scene.iskeyfree_numpad
-
-
-# ------------------------------------------------------
+    scene = context.scene.is_keyfree
+    if scene.numpad != "NONE":
+        scene.data = scene.numpad
+
+
+class IskeyFreeProperties(PropertyGroup):
+    data = StringProperty(
+                    name="Key", maxlen=32,
+                    description="Shortcut to verify"
+                    )
+    use_crtl = BoolProperty(
+                    name="Ctrl",
+                    description="Ctrl key used in shortcut",
+                    default=False
+                    )
+    use_alt = BoolProperty(
+                    name="Alt",
+                    description="Alt key used in shortcut",
+                    default=False
+                    )
+    use_shift = BoolProperty(
+                    name="Shift",
+                    description="Shift key used in shortcut",
+                    default=False
+                    )
+    use_oskey = BoolProperty(
+                    name="OsKey",
+                    description="Operating system key used in shortcut",
+                    default=False
+                    )
+    numpad = EnumProperty(
+                    items=(('NONE', "Select key", ""),
+                       ("LEFTMOUSE", "LEFTMOUSE", ""),
+                       ("MIDDLEMOUSE", "MIDDLEMOUSE", ""),
+                       ("RIGHTMOUSE", "RIGHTMOUSE", ""),
+                       ("BUTTON4MOUSE", "BUTTON4MOUSE", ""),
+                       ("BUTTON5MOUSE", "BUTTON5MOUSE", ""),
+                       ("BUTTON6MOUSE", "BUTTON6MOUSE", ""),
+                       ("BUTTON7MOUSE", "BUTTON7MOUSE", ""),
+                       ("ACTIONMOUSE", "ACTIONMOUSE", ""),
+                       ("SELECTMOUSE", "SELECTMOUSE", ""),
+                       ("MOUSEMOVE", "MOUSEMOVE", ""),
+                       ("INBETWEEN_MOUSEMOVE", "INBETWEEN_MOUSEMOVE", ""),
+                       ("TRACKPADPAN", "TRACKPADPAN", ""),
+                       ("TRACKPADZOOM", "TRACKPADZOOM", ""),
+                       ("MOUSEROTATE", "MOUSEROTATE", ""),
+                       ("WHEELUPMOUSE", "WHEELUPMOUSE", ""),
+                       ("WHEELDOWNMOUSE", "WHEELDOWNMOUSE", ""),
+                       ("WHEELINMOUSE", "WHEELINMOUSE", ""),
+                       ("WHEELOUTMOUSE", "WHEELOUTMOUSE", ""),
+                       ("EVT_TWEAK_L", "EVT_TWEAK_L", ""),
+                       ("EVT_TWEAK_M", "EVT_TWEAK_M", ""),
+                       ("EVT_TWEAK_R", "EVT_TWEAK_R", ""),
+                       ("EVT_TWEAK_A", "EVT_TWEAK_A", ""),
+                       ("EVT_TWEAK_S", "EVT_TWEAK_S", ""),
+                       ("A", "A", ""),
+                       ("B", "B", ""),
+                       ("C", "C", ""),
+                       ("D", "D", ""),
+                       ("E", "E", ""),
+                       ("F", "F", ""),
+                       ("G", "G", ""),
+                       ("H", "H", ""),
+                       ("I", "I", ""),
+                       ("J", "J", ""),
+                       ("K", "K", ""),
+                       ("L", "L", ""),
+                       ("M", "M", ""),
+                       ("N", "N", ""),
+                       ("O", "O", ""),
+                       ("P", "P", ""),
+                       ("Q", "Q", ""),
+                       ("R", "R", ""),
+                       ("S", "S", ""),
+                       ("T", "T", ""),
+                       ("U", "U", ""),
+                       ("V", "V", ""),
+                       ("W", "W", ""),
+                       ("X", "X", ""),
+                       ("Y", "Y", ""),
+                       ("Z", "Z", ""),
+                       ("ZERO", "ZERO", ""),
+                       ("ONE", "ONE", ""),
+                       ("TWO", "TWO", ""),
+                       ("THREE", "THREE", ""),
+                       ("FOUR", "FOUR", ""),
+                       ("FIVE", "FIVE", ""),
+                       ("SIX", "SIX", ""),
+                       ("SEVEN", "SEVEN", ""),
+                       ("EIGHT", "EIGHT", ""),
+                       ("NINE", "NINE", ""),
+                       ("LEFT_CTRL", "LEFT_CTRL", ""),
+                       ("LEFT_ALT", "LEFT_ALT", ""),
+                       ("LEFT_SHIFT", "LEFT_SHIFT", ""),
+                       ("RIGHT_ALT", "RIGHT_ALT", ""),
+                       ("RIGHT_CTRL", "RIGHT_CTRL", ""),
+                       ("RIGHT_SHIFT", "RIGHT_SHIFT", ""),
+                       ("OSKEY", "OSKEY", ""),
+                       ("GRLESS", "GRLESS", ""),
+                       ("ESC", "ESC", ""),
+                       ("TAB", "TAB", ""),
+                       ("RET", "RET", ""),
+                       ("SPACE", "SPACE", ""),
+                       ("LINE_FEED", "LINE_FEED", ""),
+                       ("BACK_SPACE", "BACK_SPACE", ""),
+                       ("DEL", "DEL", ""),
+                       ("SEMI_COLON", "SEMI_COLON", ""),
+                       ("PERIOD", "PERIOD", ""),
+                       ("COMMA", "COMMA", ""),
+                       ("QUOTE", "QUOTE", ""),
+                       ("ACCENT_GRAVE", "ACCENT_GRAVE", ""),
+                       ("MINUS", "MINUS", ""),
+                       ("SLASH", "SLASH", ""),
+                       ("BACK_SLASH", "BACK_SLASH", ""),
+                       ("EQUAL", "EQUAL", ""),
+                       ("LEFT_BRACKET", "LEFT_BRACKET", ""),
+                       ("RIGHT_BRACKET", "RIGHT_BRACKET", ""),
+                       ("LEFT_ARROW", "LEFT_ARROW", ""),
+                       ("DOWN_ARROW", "DOWN_ARROW", ""),
+                       ("RIGHT_ARROW", "RIGHT_ARROW", ""),
+                       ("UP_ARROW", "UP_ARROW", ""),
+                       ("NUMPAD_1", "NUMPAD_1", ""),
+                       ("NUMPAD_2", "NUMPAD_2", ""),
+                       ("NUMPAD_3", "NUMPAD_3", ""),
+                       ("NUMPAD_4", "NUMPAD_4", ""),
+                       ("NUMPAD_5", "NUMPAD_5", ""),
+                       ("NUMPAD_6", "NUMPAD_6", ""),
+                       ("NUMPAD_7", "NUMPAD_7", ""),
+                       ("NUMPAD_8", "NUMPAD_8", ""),
+                       ("NUMPAD_9", "NUMPAD_9", ""),
+                       ("NUMPAD_0", "NUMPAD_0", ""),
+                       ("NUMPAD_PERIOD", "NUMPAD_PERIOD", ""),
+                       ("NUMPAD_SLASH", "NUMPAD_SLASH", ""),
+                       ("NUMPAD_ASTERIX", "NUMPAD_ASTERIX", ""),
+                       ("NUMPAD_MINUS", "NUMPAD_MINUS", ""),
+                       ("NUMPAD_ENTER", "NUMPAD_ENTER", ""),
+                       ("NUMPAD_PLUS", "NUMPAD_PLUS", ""),
+                       ("F1", "F1", ""),
+                       ("F2", "F2", ""),
+                       ("F3", "F3", ""),
+                       ("F4", "F4", ""),
+                       ("F5", "F5", ""),
+                       ("F6", "F6", ""),
+                       ("F7", "F7", ""),
+                       ("F8", "F8", ""),
+                       ("F9", "F9", ""),
+                       ("F10", "F10", ""),
+                       ("F11", "F11", ""),
+                       ("F12", "F12", ""),
+                       ("F13", "F13", ""),
+                       ("F14", "F14", ""),
+                       ("F15", "F15", ""),
+                       ("F16", "F16", ""),
+                       ("F17", "F17", ""),
+                       ("F18", "F18", ""),
+                       ("F19", "F19", ""),
+                       ("PAUSE", "PAUSE", ""),
+                       ("INSERT", "INSERT", ""),
+                       ("HOME", "HOME", ""),
+                       ("PAGE_UP", "PAGE_UP", ""),
+                       ("PAGE_DOWN", "PAGE_DOWN", ""),
+                       ("END", "END", ""),
+                       ("MEDIA_PLAY", "MEDIA_PLAY", ""),
+                       ("MEDIA_STOP", "MEDIA_STOP", ""),
+                       ("MEDIA_FIRST", "MEDIA_FIRST", ""),
+                       ("MEDIA_LAST", "MEDIA_LAST", ""),
+                       ("TEXTINPUT", "TEXTINPUT", ""),
+                       ("WINDOW_DEACTIVATE", "WINDOW_DEACTIVATE", ""),
+                       ("TIMER", "TIMER", ""),
+                       ("TIMER0", "TIMER0", ""),
+                       ("TIMER1", "TIMER1", ""),
+                       ("TIMER2", "TIMER2", ""),
+                       ("TIMER_JOBS", "TIMER_JOBS", ""),
+                       ("TIMER_AUTOSAVE", "TIMER_AUTOSAVE", ""),
+                       ("TIMER_REPORT", "TIMER_REPORT", ""),
+                       ("TIMERREGION", "TIMERREGION", ""),
+                       ("NDOF_MOTION", "NDOF_MOTION", ""),
+                       ("NDOF_BUTTON_MENU", "NDOF_BUTTON_MENU", ""),
+                       ("NDOF_BUTTON_FIT", "NDOF_BUTTON_FIT", ""),
+                       ("NDOF_BUTTON_TOP", "NDOF_BUTTON_TOP", ""),
+                       ("NDOF_BUTTON_BOTTOM", "NDOF_BUTTON_BOTTOM", ""),
+                       ("NDOF_BUTTON_LEFT", "NDOF_BUTTON_LEFT", ""),
+                       ("NDOF_BUTTON_RIGHT", "NDOF_BUTTON_RIGHT", ""),
+                       ("NDOF_BUTTON_FRONT", "NDOF_BUTTON_FRONT", ""),
+                       ("NDOF_BUTTON_BACK", "NDOF_BUTTON_BACK", ""),
+                       ("NDOF_BUTTON_ISO1", "NDOF_BUTTON_ISO1", ""),
+                       ("NDOF_BUTTON_ISO2", "NDOF_BUTTON_ISO2", ""),
+                       ("NDOF_BUTTON_ROLL_CW", "NDOF_BUTTON_ROLL_CW", ""),
+                       ("NDOF_BUTTON_ROLL_CCW", "NDOF_BUTTON_ROLL_CCW", ""),
+                       ("NDOF_BUTTON_SPIN_CW", "NDOF_BUTTON_SPIN_CW", ""),
+                       ("NDOF_BUTTON_SPIN_CCW", "NDOF_BUTTON_SPIN_CCW", ""),
+                       ("NDOF_BUTTON_TILT_CW", "NDOF_BUTTON_TILT_CW", ""),
+                       ("NDOF_BUTTON_TILT_CCW", "NDOF_BUTTON_TILT_CCW", ""),
+                       ("NDOF_BUTTON_ROTATE", "NDOF_BUTTON_ROTATE", ""),
+                       ("NDOF_BUTTON_PANZOOM", "NDOF_BUTTON_PANZOOM", ""),
+                       ("NDOF_BUTTON_DOMINANT", "NDOF_BUTTON_DOMINANT", ""),
+                       ("NDOF_BUTTON_PLUS", "NDOF_BUTTON_PLUS", ""),
+                       ("NDOF_BUTTON_MINUS", "NDOF_BUTTON_MINUS", ""),
+                       ("NDOF_BUTTON_ESC", "NDOF_BUTTON_ESC", ""),
+                       ("NDOF_BUTTON_ALT", "NDOF_BUTTON_ALT", ""),
+                       ("NDOF_BUTTON_SHIFT", "NDOF_BUTTON_SHIFT", ""),
+                       ("NDOF_BUTTON_CTRL", "NDOF_BUTTON_CTRL", ""),
+                       ("NDOF_BUTTON_1", "NDOF_BUTTON_1", ""),
+                       ("NDOF_BUTTON_2", "NDOF_BUTTON_2", ""),
+                       ("NDOF_BUTTON_3", "NDOF_BUTTON_3", ""),
+                       ("NDOF_BUTTON_4", "NDOF_BUTTON_4", ""),
+                       ("NDOF_BUTTON_5", "NDOF_BUTTON_5", ""),
+                       ("NDOF_BUTTON_6", "NDOF_BUTTON_6", ""),
+                       ("NDOF_BUTTON_7", "NDOF_BUTTON_7", ""),
+                       ("NDOF_BUTTON_8", "NDOF_BUTTON_8", ""),
+                       ("NDOF_BUTTON_9", "NDOF_BUTTON_9", ""),
+                       ("NDOF_BUTTON_10", "NDOF_BUTTON_10", ""),
+                       ("NDOF_BUTTON_A", "NDOF_BUTTON_A", ""),
+                       ("NDOF_BUTTON_B", "NDOF_BUTTON_B", ""),
+                       ("NDOF_BUTTON_C", "NDOF_BUTTON_C", "")
+                    ),
+                    name="Quick Type",
+                    description="Enter key code in find text",
+                    update=update_data
+                    )
+
+
+# -----------------------------------------------------
 # Registration
 # ------------------------------------------------------
 
-
 def register():
     bpy.utils.register_module(__name__)
-
-    bpy.types.Scene.iskeyfree_data = StringProperty(name="Key", maxlen=32,
-                                                    description="Shortcut to verify")
-    bpy.types.Scene.iskeyfree_use_crtl = BoolProperty(name="Ctrl",
-                                                      description="Ctrl key used in shortcut",
-                                                      default=False)
-    bpy.types.Scene.iskeyfree_use_alt = BoolProperty(name="Alt",
-                                                     description="Alt key used in shortcut",
-                                                     default=False)
-    bpy.types.Scene.iskeyfree_use_shift = BoolProperty(name="Shift",
-                                                       description="Shift key used in shortcut",
-                                                       default=False)
-    bpy.types.Scene.iskeyfree_use_oskey = BoolProperty(name="OsKey",
-                                                       description="Operating system key used in shortcut",
-                                                       default=False)
-    bpy.types.Scene.iskeyfree_numpad = EnumProperty(items=(('NONE', "Select key", ""),
-                                                           ("LEFTMOUSE", "LEFTMOUSE", ""),
-                                                           ("MIDDLEMOUSE", "MIDDLEMOUSE", ""),
-                                                           ("RIGHTMOUSE", "RIGHTMOUSE", ""),
-                                                           ("BUTTON4MOUSE", "BUTTON4MOUSE", ""),
-                                                           ("BUTTON5MOUSE", "BUTTON5MOUSE", ""),
-                                                           ("BUTTON6MOUSE", "BUTTON6MOUSE", ""),
-                                                           ("BUTTON7MOUSE", "BUTTON7MOUSE", ""),
-                                                           ("ACTIONMOUSE", "ACTIONMOUSE", ""),
-                                                           ("SELECTMOUSE", "SELECTMOUSE", ""),
-                                                           ("MOUSEMOVE", "MOUSEMOVE", ""),
-                                                           ("INBETWEEN_MOUSEMOVE", "INBETWEEN_MOUSEMOVE", ""),
-                                                           ("TRACKPADPAN", "TRACKPADPAN", ""),
-                                                           ("TRACKPADZOOM", "TRACKPADZOOM", ""),
-                                                           ("MOUSEROTATE", "MOUSEROTATE", ""),
-                                                           ("WHEELUPMOUSE", "WHEELUPMOUSE", ""),
-                                                           ("WHEELDOWNMOUSE", "WHEELDOWNMOUSE", ""),
-                                                           ("WHEELINMOUSE", "WHEELINMOUSE", ""),
-                                                           ("WHEELOUTMOUSE", "WHEELOUTMOUSE", ""),
-                                                           ("EVT_TWEAK_L", "EVT_TWEAK_L", ""),
-                                                           ("EVT_TWEAK_M", "EVT_TWEAK_M", ""),
-                                                           ("EVT_TWEAK_R", "EVT_TWEAK_R", ""),
-                                                           ("EVT_TWEAK_A", "EVT_TWEAK_A", ""),
-                                                           ("EVT_TWEAK_S", "EVT_TWEAK_S", ""),
-                                                           ("A", "A", ""),
-                                                           ("B", "B", ""),
-                                                           ("C", "C", ""),
-                                                           ("D", "D", ""),
-                                                           ("E", "E", ""),
-                                                           ("F", "F", ""),
-                                                           ("G", "G", ""),
-                                                           ("H", "H", ""),
-                                                           ("I", "I", ""),
-                                                           ("J", "J", ""),
-                                                           ("K", "K", ""),
-                                                           ("L", "L", ""),
-                                                           ("M", "M", ""),
-                                                           ("N", "N", ""),
-                                                           ("O", "O", ""),
-                                                           ("P", "P", ""),
-                                                           ("Q", "Q", ""),
-                                                           ("R", "R", ""),
-                                                           ("S", "S", ""),
-                                                           ("T", "T", ""),
-                                                           ("U", "U", ""),
-                                                           ("V", "V", ""),
-                                                           ("W", "W", ""),
-                                                           ("X", "X", ""),
-                                                           ("Y", "Y", ""),
-                                                           ("Z", "Z", ""),
-                                                           ("ZERO", "ZERO", ""),
-                                                           ("ONE", "ONE", ""),
-                                                           ("TWO", "TWO", ""),
-                                                           ("THREE", "THREE", ""),
-                                                           ("FOUR", "FOUR", ""),
-                                                           ("FIVE", "FIVE", ""),
-                                                           ("SIX", "SIX", ""),
-                                                           ("SEVEN", "SEVEN", ""),
-                                                           ("EIGHT", "EIGHT", ""),
-                                                           ("NINE", "NINE", ""),
-                                                           ("LEFT_CTRL", "LEFT_CTRL", ""),
-                                                           ("LEFT_ALT", "LEFT_ALT", ""),
-                                                           ("LEFT_SHIFT", "LEFT_SHIFT", ""),
-                                                           ("RIGHT_ALT", "RIGHT_ALT", ""),
-                                                           ("RIGHT_CTRL", "RIGHT_CTRL", ""),
-                                                           ("RIGHT_SHIFT", "RIGHT_SHIFT", ""),
-                                                           ("OSKEY", "OSKEY", ""),
-                                                           ("GRLESS", "GRLESS", ""),
-                                                           ("ESC", "ESC", ""),
-                                                           ("TAB", "TAB", ""),
-                                                           ("RET", "RET", ""),
-                                                           ("SPACE", "SPACE", ""),
-                                                           ("LINE_FEED", "LINE_FEED", ""),
-                                                           ("BACK_SPACE", "BACK_SPACE", ""),
-                                                           ("DEL", "DEL", ""),
-                                                           ("SEMI_COLON", "SEMI_COLON", ""),
-                                                           ("PERIOD", "PERIOD", ""),
-                                                           ("COMMA", "COMMA", ""),
-                                                           ("QUOTE", "QUOTE", ""),
-                                                           ("ACCENT_GRAVE", "ACCENT_GRAVE", ""),
-                                                           ("MINUS", "MINUS", ""),
-                                                           ("SLASH", "SLASH", ""),
-                                                           ("BACK_SLASH", "BACK_SLASH", ""),
-                                                           ("EQUAL", "EQUAL", ""),
-                                                           ("LEFT_BRACKET", "LEFT_BRACKET", ""),
-                                                           ("RIGHT_BRACKET", "RIGHT_BRACKET", ""),
-                                                           ("LEFT_ARROW", "LEFT_ARROW", ""),
-                                                           ("DOWN_ARROW", "DOWN_ARROW", ""),
-                                                           ("RIGHT_ARROW", "RIGHT_ARROW", ""),
-                                                           ("UP_ARROW", "UP_ARROW", ""),
-                                                           ("NUMPAD_1", "NUMPAD_1", ""),
-                                                           ("NUMPAD_2", "NUMPAD_2", ""),
-                                                           ("NUMPAD_3", "NUMPAD_3", ""),
-                                                           ("NUMPAD_4", "NUMPAD_4", ""),
-                                                           ("NUMPAD_5", "NUMPAD_5", ""),
-                                                           ("NUMPAD_6", "NUMPAD_6", ""),
-                                                           ("NUMPAD_7", "NUMPAD_7", ""),
-                                                           ("NUMPAD_8", "NUMPAD_8", ""),
-                                                           ("NUMPAD_9", "NUMPAD_9", ""),
-                                                           ("NUMPAD_0", "NUMPAD_0", ""),
-                                                           ("NUMPAD_PERIOD", "NUMPAD_PERIOD", ""),
-                                                           ("NUMPAD_SLASH", "NUMPAD_SLASH", ""),
-                                                           ("NUMPAD_ASTERIX", "NUMPAD_ASTERIX", ""),
-                                                           ("NUMPAD_MINUS", "NUMPAD_MINUS", ""),
-                                                           ("NUMPAD_ENTER", "NUMPAD_ENTER", ""),
-                                                           ("NUMPAD_PLUS", "NUMPAD_PLUS", ""),
-                                                           ("F1", "F1", ""),
-                                                           ("F2", "F2", ""),
-                                                           ("F3", "F3", ""),
-                                                           ("F4", "F4", ""),
-                                                           ("F5", "F5", ""),
-                                                           ("F6", "F6", ""),
-                                                           ("F7", "F7", ""),
-                                                           ("F8", "F8", ""),
-                                                           ("F9", "F9", ""),
-                                                           ("F10", "F10", ""),
-                                                           ("F11", "F11", ""),
-                                                           ("F12", "F12", ""),
-                                                           ("F13", "F13", ""),
-                                                           ("F14", "F14", ""),
-                                                           ("F15", "F15", ""),
-                                                           ("F16", "F16", ""),
-                                                           ("F17", "F17", ""),
-                                                           ("F18", "F18", ""),
-                                                           ("F19", "F19", ""),
-                                                           ("PAUSE", "PAUSE", ""),
-                                                           ("INSERT", "INSERT", ""),
-                                                           ("HOME", "HOME", ""),
-                                                           ("PAGE_UP", "PAGE_UP", ""),
-                                                           ("PAGE_DOWN", "PAGE_DOWN", ""),
-                                                           ("END", "END", ""),
-                                                           ("MEDIA_PLAY", "MEDIA_PLAY", ""),
-                                                           ("MEDIA_STOP", "MEDIA_STOP", ""),
-                                                           ("MEDIA_FIRST", "MEDIA_FIRST", ""),
-                                                           ("MEDIA_LAST", "MEDIA_LAST", ""),
-                                                           ("TEXTINPUT", "TEXTINPUT", ""),
-                                                           ("WINDOW_DEACTIVATE", "WINDOW_DEACTIVATE", ""),
-                                                           ("TIMER", "TIMER", ""),
-                                                           ("TIMER0", "TIMER0", ""),
-                                                           ("TIMER1", "TIMER1", ""),
-                                                           ("TIMER2", "TIMER2", ""),
-                                                           ("TIMER_JOBS", "TIMER_JOBS", ""),
-                                                           ("TIMER_AUTOSAVE", "TIMER_AUTOSAVE", ""),
-                                                           ("TIMER_REPORT", "TIMER_REPORT", ""),
-                                                           ("TIMERREGION", "TIMERREGION", ""),
-                                                           ("NDOF_MOTION", "NDOF_MOTION", ""),
-                                                           ("NDOF_BUTTON_MENU", "NDOF_BUTTON_MENU", ""),
-                                                           ("NDOF_BUTTON_FIT", "NDOF_BUTTON_FIT", ""),
-                                                           ("NDOF_BUTTON_TOP", "NDOF_BUTTON_TOP", ""),
-                                                           ("NDOF_BUTTON_BOTTOM", "NDOF_BUTTON_BOTTOM", ""),
-                                                           ("NDOF_BUTTON_LEFT", "NDOF_BUTTON_LEFT", ""),
-                                                           ("NDOF_BUTTON_RIGHT", "NDOF_BUTTON_RIGHT", ""),
-                                                           ("NDOF_BUTTON_FRONT", "NDOF_BUTTON_FRONT", ""),
-                                                           ("NDOF_BUTTON_BACK", "NDOF_BUTTON_BACK", ""),
-                                                           ("NDOF_BUTTON_ISO1", "NDOF_BUTTON_ISO1", ""),
-                                                           ("NDOF_BUTTON_ISO2", "NDOF_BUTTON_ISO2", ""),
-                                                           ("NDOF_BUTTON_ROLL_CW", "NDOF_BUTTON_ROLL_CW", ""),
-                                                           ("NDOF_BUTTON_ROLL_CCW", "NDOF_BUTTON_ROLL_CCW",
-                                                            ""),
-                                                           (
-                                                               "NDOF_BUTTON_SPIN_CW", "NDOF_BUTTON_SPIN_CW",
-                                                               ""),
-                                                           ("NDOF_BUTTON_SPIN_CCW", "NDOF_BUTTON_SPIN_CCW",
-                                                            ""),
-                                                           (
-                                                               "NDOF_BUTTON_TILT_CW", "NDOF_BUTTON_TILT_CW",
-                                                               ""),
-                                                           ("NDOF_BUTTON_TILT_CCW", "NDOF_BUTTON_TILT_CCW",
-                                                            ""),
-                                                           ("NDOF_BUTTON_ROTATE", "NDOF_BUTTON_ROTATE", ""),
-                                                           (
-                                                               "NDOF_BUTTON_PANZOOM", "NDOF_BUTTON_PANZOOM",
-                                                               ""),
-                                                           ("NDOF_BUTTON_DOMINANT", "NDOF_BUTTON_DOMINANT",
-                                                            ""),
-                                                           ("NDOF_BUTTON_PLUS", "NDOF_BUTTON_PLUS", ""),
-                                                           ("NDOF_BUTTON_MINUS", "NDOF_BUTTON_MINUS", ""),
-                                                           ("NDOF_BUTTON_ESC", "NDOF_BUTTON_ESC", ""),
-                                                           ("NDOF_BUTTON_ALT", "NDOF_BUTTON_ALT", ""),
-                                                           ("NDOF_BUTTON_SHIFT", "NDOF_BUTTON_SHIFT", ""),
-                                                           ("NDOF_BUTTON_CTRL", "NDOF_BUTTON_CTRL", ""),
-                                                           ("NDOF_BUTTON_1", "NDOF_BUTTON_1", ""),
-                                                           ("NDOF_BUTTON_2", "NDOF_BUTTON_2", ""),
-                                                           ("NDOF_BUTTON_3", "NDOF_BUTTON_3", ""),
-                                                           ("NDOF_BUTTON_4", "NDOF_BUTTON_4", ""),
-                                                           ("NDOF_BUTTON_5", "NDOF_BUTTON_5", ""),
-                                                           ("NDOF_BUTTON_6", "NDOF_BUTTON_6", ""),
-                                                           ("NDOF_BUTTON_7", "NDOF_BUTTON_7", ""),
-                                                           ("NDOF_BUTTON_8", "NDOF_BUTTON_8", ""),
-                                                           ("NDOF_BUTTON_9", "NDOF_BUTTON_9", ""),
-                                                           ("NDOF_BUTTON_10", "NDOF_BUTTON_10", ""),
-                                                           ("NDOF_BUTTON_A", "NDOF_BUTTON_A", ""),
-                                                           ("NDOF_BUTTON_B", "NDOF_BUTTON_B", ""),
-                                                           ("NDOF_BUTTON_C", "NDOF_BUTTON_C", "")),
-                                                    name="Quick Type",
-                                                    description="Enter key code in find text",
-                                                    update=update_data)
+    bpy.types.Scene.is_keyfree = PointerProperty(type=IskeyFreeProperties)
 
 
 def unregister():
     bpy.utils.unregister_module(__name__)
-
-    del bpy.types.Scene.iskeyfree_use_crtl
-    del bpy.types.Scene.iskeyfree_use_alt
-    del bpy.types.Scene.iskeyfree_use_shift
-    del bpy.types.Scene.iskeyfree_use_oskey
-    del bpy.types.Scene.iskeyfree_numpad
-    del bpy.types.Scene.iskeyfree_data
+    del bpy.types.Scene.is_keyfree
-- 
GitLab