Only allow users to add NPC or Player characters.
[matthijs/projects/xerxes.git] / influences / forms.py
index b9416f9d590dc5238b1615a4cefa13b70445e623..db825cc018362760833c0c2e74a44a11c582e8e4 100644 (file)
@@ -1,5 +1,9 @@
+from django.forms.fields import CharField, BooleanField
+from django.forms.widgets import Textarea
+from django.forms.models import ModelMultipleChoiceField
 from threadedcomments.forms import ThreadedCommentForm
 from xerxes.tools.forms import ContextModelForm
+from xerxes.tools.widgets import DropDownMultiple
 from models import Influence, Character
 
 #
@@ -10,6 +14,9 @@ from models import Influence, Character
 # didn't get this to work yet.
 # 
 class InfluenceCommentForm(ThreadedCommentForm):
+    # Force the textare to 80 columns. This is really a hack, we should
+    # rather create a template tag to do this at the template level.
+    comment = CharField(widget=Textarea(attrs={'cols' : 80}))
     def __init__(self, *args, **kwargs):
         super(InfluenceCommentForm, self).__init__(*args, **kwargs)
 
@@ -17,6 +24,8 @@ class InfluenceCommentForm(ThreadedCommentForm):
         exclude = ('markup', )
 
 class AdminInfluenceCommentForm(ThreadedCommentForm):
+    comment = CharField(widget=Textarea(attrs={'cols' : 80}))
+    is_public = BooleanField(required=False, initial=False)
     def __init__(self, *args, **kwargs):
         super(AdminInfluenceCommentForm, self).__init__(*args, **kwargs)
 
@@ -25,6 +34,7 @@ class AdminInfluenceCommentForm(ThreadedCommentForm):
         exclude = ('markup', )
 
 class AdminPrivateInfluenceCommentForm(ThreadedCommentForm):
+    comment = CharField(widget=Textarea(attrs={'cols' : 80}))
     def __init__(self, *args, **kwargs):
         super(AdminPrivateInfluenceCommentForm, self).__init__(*args, **kwargs)
         self.instance.is_public = False
@@ -58,12 +68,17 @@ def _get_influence_comment_form(allow_markup, allow_public, allow_private):
         raise Exception("Unsupported configuration")
 
 class InfluenceForm(ContextModelForm):
+    # Manually define this field so we can select the DropDownMultiple
+    # widget. However, we leave the queryset empty, which characters can
+    # be selected depends on the logged in user and should be set by
+    # setting the choices property in the view.
+    other_characters = ModelMultipleChoiceField(queryset=Character.objects.none(), widget=DropDownMultiple)
     class Meta:
         model = Influence
-        fields = ('character', 'contact', 'summary', 'description')
+        fields = ('initiator', 'summary', 'other_characters', 'other_contacts', 'description')
 
 class CharacterForm(ContextModelForm):
     class Meta:
         model = Character
-        fields = ('name')
+        fields = ('name', 'type')