+ def format_output(self, widgets):
+ out = u''
+ out += u'<p>' + widgets[0] + u' Alt </p>'
+ out += u'<p>' + widgets[1] + u' Ctrl </p>'
+ out += u'<p>' + widgets[2] + u' Shift </p>'
+ return out
+
+class KeyModField(forms.MultiValueField):
+
+ def __init__(self):
+ super(KeyModField, self).__init__(\
+ fields = tuple(forms.BooleanField() for x in xrange(0, 3)), \
+ widget = KeyModSelector())
+
+ def compress(self, dl):
+ v = int(dl[0]) | (int(dl[1]) << 1) | (int(dl[2]) << 2)
+ print "COMPRESS", v
+ return v
+
+
+class ButtonAdminForm(forms.ModelForm):
+ key_mod = KeyModField()
+
+ class Meta:
+ model = models.Button
+
+ def clean_params(self):
+ value = self.cleaned_data['params']
+ try:
+ return json.dumps(json.loads(value))
+ except Exception, e:
+ raise forms.ValidationError(e)