]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/commitdiff
Add a 'common' section in key properties
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 12 Aug 2016 11:30:08 +0000 (13:30 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 12 Aug 2016 11:34:07 +0000 (13:34 +0200)
Any option defined here applies to all keys (they can be overriden individualy)
Fixes https://git.immae.eu/mantisbt/view.php?id=5

documentation_en.md
documentation_fr.md
music_sampler/mapping.py

index 1cf5cfdc2e587e4c6476134a255acd681b329e7d..d65e7ad6f4ce95e752f96c55aa4333be277b83d6 100644 (file)
@@ -226,6 +226,11 @@ protected for 2 seconds after each stroke.
   done, the key will remain disabled (semi-transparent and crossed) for that
   amount of time (in seconds).
 
+#### `common` key property
+
+A special entry `common` has its properties applying to all the keys. They can
+be overriden individually.
+
 ### `keys` : actions related to keys
 
 This section lets you describe for each key, the list of actions associated to
index b739aa2c752cddb5e75c62472da717b7073ec336..64e3a4f7b09b2adcebafbed4f9d2c37516e2c30a 100644 (file)
@@ -248,6 +248,11 @@ secondes d'intervalle, le second appui est ignoré.
   successifs sur la touche. La touche est désactivée (grisée et barrée) pendant
   toute la durée des actions puis le délai de x secondes.
 
+### Propriété `common`
+
+Une entrée spéciale `common` s'applique à toutes les touches. Les propriétés
+définies dans cette entrée peuvent être modifiées individuellement.
+
 ### `keys` : actions sur les touches
 
 Cette section sert à décrire, pour chaque touche, la liste des actions
index e589ac0a93edfdb234587e25ab6cb1d15a4d7d1b..50b68a9d903df95b0236cf76b4c39245628e9403 100644 (file)
@@ -224,7 +224,8 @@ class Mapping(RelativeLayout):
     def parse_config(self):
         def update_alias(prop_hash, aliases, key):
             if isinstance(aliases[key], dict):
-                prop_hash.update(aliases[key], **prop_hash)
+                for alias in aliases[key]:
+                    prop_hash.setdefault(alias, aliases[key][alias])
             else:
                 warn_print("Alias {} is not a hash, ignored".format(key))
 
@@ -336,6 +337,14 @@ class Mapping(RelativeLayout):
 
         seen_files = {}
 
+        common_key_properties = {}
+        if 'common' in config['key_properties'] and\
+                isinstance(config['key_properties'], dict):
+            common_key_properties = config['key_properties']['common']
+            include_aliases(common_key_properties, aliases)
+        elif 'common' in config['key_properties']:
+            warn_print("'common' key in key_properties is not a hash, ignored")
+
         key_properties = defaultdict(lambda: {
                 "actions":    [],
                 "properties": {},
@@ -343,6 +352,9 @@ class Mapping(RelativeLayout):
             })
 
         for key in check_key_properties(config):
+            if key == 'common':
+                continue
+
             key_prop = config['key_properties'][key]
 
             if not isinstance(key_prop, dict):
@@ -351,6 +363,9 @@ class Mapping(RelativeLayout):
                 continue
 
             include_aliases(key_prop, aliases)
+            for _key in common_key_properties:
+                key_prop.setdefault(_key, common_key_properties[_key])
+
             check_key_property(key_prop, key)
 
             key_properties[key]["properties"] = key_prop