[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [618] contrib/py/scripts/addons/ system_keyboard_svg.py: add the keyboard layout to contrib/py/scripts/ addons/system_keyboard_svg.py
Brendon Murphy
meta.androcto1 at gmail.com
Wed Apr 21 16:53:40 CEST 2010
Revision: 618
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=618
Author: meta-androcto
Date: 2010-04-21 16:53:40 +0200 (Wed, 21 Apr 2010)
Log Message:
-----------
add the keyboard layout to contrib/py/scripts/addons/system_keyboard_svg.py
Added Paths:
-----------
contrib/py/scripts/addons/system_keyboard_svg.py
Added: contrib/py/scripts/addons/system_keyboard_svg.py
===================================================================
--- contrib/py/scripts/addons/system_keyboard_svg.py (rev 0)
+++ contrib/py/scripts/addons/system_keyboard_svg.py 2010-04-21 14:53:40 UTC (rev 618)
@@ -0,0 +1,236 @@
+# this script creates Keyboard layout images of the current keyboard configuration.
+# the result will be writen to the blender default directory.
+
+# first implementation done by jbakker
+
+bl_addon_info = {
+ 'name': 'System: Keyboard Layout (svg)',
+ 'author': 'Jbakker',
+ 'version': '1',
+ 'blender': (2, 5, 3),
+ 'location': 'View3D > Ctrl Space',
+ 'description': 'save the hotkeys as a .svg file (search: Keyboard)',
+ 'category': 'System'}
+
+
+import bpy
+
+keyboard=[
+['`', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO', 'MINUS', 'EQUAL', 'BACKSPACE'],
+['TAB', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '[', ']', '\\' ],
+['CAPSLOCK','A','S','D','F','G','H','J','K','L',';',"'",'ENTER'],
+['SHIFT', 'Z','X','C','V','B','N','M',',','.','/','SHIFT'],
+['CONTROL', 'OSKEY','ALT','SPACE','ALT','OSKEY','MENUKEY','CONTROL']
+]
+
+# default dimension of a single key [width, heidgh]
+DEFAULT_KEY_DIMENSION=[100,100]
+# alternative dimensions of specufic keys [keyname,[width, height]]
+ALTERNATIVE_KEY_DIMENSIONS={
+'BACKSPACE':[250,100],
+'TAB':[175,100],
+'\\':[175,100],
+'CAPSLOCK':[225,100],
+'ENTER':[240,100],
+'SHIFT':[290,100],
+'CONTROL':[225,100],
+'ALT':[100,100],
+'OSKEY':[100,100],
+'MENUKEY':[100,100],
+'SPACE':[690,100],
+}
+
+
+def createKeyboard(viewtype):
+ """
+ Creates a keyboard layout (.svg) file of the current configuration for a specific viewtype.
+ example of a viewtype is "VIEW_3D".
+ """
+ for keyconfig in bpy.data.window_managers[0].keyconfigs:
+ map = {}
+ for keymap in keyconfig.keymaps:
+ if keymap.space_type in [viewtype]:
+ for key in keymap.items:
+ if key.map_type=='KEYBOARD':
+ test = 0
+ pre = []
+ cont= ""
+ if key.ctrl:
+ test = test + 1
+ cont="C"
+ if key.alt:
+ test = test + 2
+ cont=cont+"A"
+ if key.shift:
+ test = test + 4
+ cont=cont+"S"
+ if key.oskey:
+ test = test + 8
+ cont=cont+"O"
+ if len(cont)>0:
+ cont="["+cont+"] "
+ ktype = key.type
+ if ktype not in map.keys():
+ map[ktype] = []
+ map[ktype].append((test, cont+key.name))
+
+ filename="keyboard_"+viewtype+".svg"
+ print(filename)
+ svgfile = open(filename, "w")
+ svgfile.write("""<?xml version="1.0" standalone="no"?>
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+ """)
+ svgfile.write("""<svg width="2000" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ """)
+ svgfile.write("""<style>
+ rect {
+ fill:rgb(192,192,192);
+ stroke-width:1;
+ stroke:rgb(0,0,0);
+ }
+ text.header {
+ font-size:xx-large;
+ }
+ text.key {
+ stroke-width:1;
+ stroke:rgb(0,0,0);
+ }
+ text.action {
+ font-size:smaller;
+ }
+ text.add0 {
+ font-size:smaller;
+ fill:rgb(0,0,0)
+ }
+ text.add1 {
+ font-size:smaller;
+ fill:rgb(255,0,0)
+ }
+ text.add2 {
+ font-size:smaller;
+ fill:rgb(0,255,0)
+ }
+ text.add3 {
+ font-size:smaller;
+ fill:rgb(128,128,0)
+ }
+ text.add4 {
+ font-size:smaller;
+ fill:rgb(0,0,255)
+ }
+ text.add5 {
+ font-size:smaller;
+ fill:rgb(128,0,128)
+ }
+ text.add6 {
+ font-size:smaller;
+ fill:rgb(0, 128, 128)
+ }
+ text.add7 {
+ font-size:smaller;
+ fill:rgb(128,128,128)
+ }
+ text.add8 {
+ font-size:smaller;
+ fill:rgb(128,128,128)
+ }
+ text.add9 {
+ font-size:smaller;
+ fill:rgb(255,128,128)
+ }
+ text.add10 {
+ font-size:smaller;
+ fill:rgb(128,255,128)
+ }
+ text.add11 {
+ font-size:smaller;
+ fill:rgb(255,255,128)
+ }
+ text.add12 {
+ font-size:smaller;
+ fill:rgb(128,128,255)
+ }
+ text.add13 {
+ font-size:smaller;
+ fill:rgb(255,128,255)
+ }
+ text.add14 {
+ font-size:smaller;
+ fill:rgb(128,255,255)
+ }
+ text.add15 {
+ font-size:smaller;
+ fill:rgb(255,255,128)
+ }
+ </style>
+ """)
+ svgfile.write("""<text class="header" x="100" y="24">keyboard layout - """+viewtype+"""</text>
+""")
+
+ x=0
+ xgap=15
+ ygap=15
+ y=32
+ for row in keyboard:
+ x=0
+ for key in row:
+ width=DEFAULT_KEY_DIMENSION[0]
+ height=DEFAULT_KEY_DIMENSION[1]
+ if key in ALTERNATIVE_KEY_DIMENSIONS.keys():
+ width=ALTERNATIVE_KEY_DIMENSIONS[key][0]
+ height=ALTERNATIVE_KEY_DIMENSIONS[key][1]
+ tx=16
+ ty=16
+ svgfile.write("""<rect x=\""""+str(x)+"""\" y=\""""+str(y)+"""\" width=\""""+str(width)+"""\" height=\""""+str(height)+"""\" rx="20" ry="20" />
+ """);
+ svgfile.write("""<text class="key" x=\""""+str(x+tx)+"""\" y=\""""+str(y+ty)+"""\" width=\""""+str(width)+"""\" height=\""""+str(height)+"""\">
+ """);
+ svgfile.write(key)
+ svgfile.write("</text>")
+ ty=ty+16
+ tx=4
+ if key in map.keys():
+ for a in map[key]:
+ svgfile.write("""<text class="add"""+str(a[0])+"""" x=\""""+str(x+tx)+"""\" y=\""""+str(y+ty)+"""\" width=\""""+str(width)+"""\" height=\""""+str(height)+"""\">
+ """);
+ svgfile.write(a[1])
+ svgfile.write("</text>")
+ ty=ty+16
+ x=x+width+xgap
+ y=y+100+ygap
+ svgfile.write("""</svg>""")
+ svgfile.flush()
+ svgfile.close()
+
+class WM_OT_Keyboardlayout(bpy.types.Operator):
+ """
+ Windows manager operator for keyboard leyout export
+ """
+ bl_idname = "wm.keyboardlayout"
+ bl_label = "Keyboard layout (SGV)"
+
+ def poll(self, context):
+ """
+ export of the keyboard layout should always be possible.
+ """
+ return True
+
+ def execute(self, context):
+ """
+ Iterate over all viewtypes to export the keyboard layout.
+ """
+ for vt in ['VIEW_3D', 'LOGIC_EDITOR', 'NODE_EDITOR', 'CONSOLE', 'GRAPH_EDITOR', 'PROPERTIES', 'SEQUENCE_EDITOR', 'OUTLINER', 'IMAGE_EDITOR', 'TEXT_EDITOR', 'DOPESHEET_EDITOR', 'Window']:
+ createKeyboard(vt)
+ return {'FINISHED'}
+
+def register():
+ register = bpy.types.register
+ register(WM_OT_Keyboardlayout)
+
+
+def unregister():
+ unregister = bpy.types.unregister
+ unregister(WM_OT_Keyboardlayout)
+
+if __name__ == "__main__":
+ register()
More information about the Bf-extensions-cvs
mailing list