Complete serialization with pretty printing. Works both in FF and Webkit. This fixes...
[redakcja.git] / apps / toolbar / admin.py
1 from django.contrib import admin
2 from django.utils.translation import ugettext_lazy as _
3 from django import forms
4 from django.utils import simplejson as json
5
6 from toolbar import models
7
8 #class ButtonGroupAdmin(admin.ModelAdmin):
9 #    list_display = ('name', 'slug', 'position',)
10 #    search_fields = ('name', 'slug',)
11 #    prepopulated_fields = {'slug': ('name',)}
12 #    list_editable = ('position',)
13
14 class KeyModSelector(forms.MultiWidget):
15     def __init__(self):
16         super(KeyModSelector, self).__init__(
17             [forms.CheckboxInput() for x in xrange(0, 3)])
18
19     def decompress(self, v):
20         if not v: v = 0
21         r = [(v & 0x01) != 0, (v & 0x02) != 0, (v & 0x04) != 0]
22         print "DECOMPRESS: " , v, repr(r)
23         return r
24
25     def format_output(self, widgets):
26         out = u''
27         out += u'<p>' + widgets[0] + u' Alt </p>'
28         out += u'<p>' + widgets[1] + u' Ctrl </p>'
29         out += u'<p>' + widgets[2] + u' Shift </p>'
30         return out
31
32 class KeyModField(forms.MultiValueField):
33
34     def __init__(self):
35         super(KeyModField, self).__init__(\
36             fields = tuple(forms.BooleanField() for x in xrange(0, 3)), \
37             widget = KeyModSelector())
38
39     def compress(self, dl):
40         v = int(dl[0]) | (int(dl[1]) << 1) | (int(dl[2]) << 2)
41         print "COMPRESS", v
42         return v
43
44
45 class ButtonAdminForm(forms.ModelForm):
46     key_mod = KeyModField()
47
48     class Meta:
49         model = models.Button
50
51     def clean_params(self):
52         value = self.cleaned_data['params']
53         try:
54             return json.dumps(json.loads(value))
55         except Exception, e:
56             raise forms.ValidationError(e)
57
58 class ButtonAdmin(admin.ModelAdmin):
59     form = ButtonAdminForm
60     list_display = ('slug', 'label', 'tooltip', 'hotkey_name')
61     list_display_links = ('slug',)
62     list_editable = ('label', 'tooltip',)
63     prepopulated_fields = {'slug': ('label',)}
64
65 admin.site.register(models.Button, ButtonAdmin)
66 admin.site.register(models.ButtonGroup)
67 admin.site.register(models.Scriptlet)
68
69 #class ButtonAdmin(admin.ModelAdmin):
70 #    list_display = ('label', 'action', 'key', 'position',)
71 #    list_filter = ('group',)
72 #    search_fields = ('label', 'action', 'key',)
73 #    filter_horizontal = ('group',)
74 #    list_editable = ('position',)
75