code for control view in apps

This commit is contained in:
Oskar Hahn 2012-04-14 20:10:49 +02:00
parent d94baf9760
commit 3a849880fb
9 changed files with 81 additions and 43 deletions

View File

@ -139,7 +139,7 @@ register_slidemodel(Item, model_name=_('Agenda Item'))
from projector.api import register_slidefunc
from agenda.slides import agenda_show
register_slidefunc(_('Agenda'), agenda_show)
register_slidefunc(_('Agenda'), agenda_show, weight=-1)
from django.dispatch import receiver

View File

@ -1,5 +1,6 @@
from config.models import config
from projector import SLIDE, Slide
from django.template.loader import render_to_string
def get_slide_from_sid(sid):
@ -35,31 +36,36 @@ def set_active_slide(sid):
config["presentation"] = sid
def register_slidemodel(model, model_name=None):
def register_slidemodel(model, model_name=None, control_template=None, weight=0):
#TODO: Warn if there already is a slide with this prefix
if model_name is None:
model_name = model.prefix
if control_template is None:
control_template = 'projector/default_control_slidemodel.html'
category = model.__module__.split('.')[0]
SLIDE[model.prefix] = Slide(
SLIDE[model_name] = Slide(
model_slide=True,
model=model,
category=category,
key=model.prefix,
model_name=model_name,
control_template=control_template,
weight=weight,
)
def register_slidefunc(key, func):
def register_slidefunc(key, func, control_template=None, weight=0):
#TODO: Warn if there already is a slide with this prefix
if control_template is None:
control_template = 'projector/default_control_slidefunc.html'
category = func.__module__.split('.')[0]
SLIDE[key] = Slide(
model_slide=False,
func=func,
category=category,
key=key,
control_template=control_template,
weight=weight,
)
#def get_possible_slides():

View File

@ -48,14 +48,15 @@ class SlideMixin(object):
class Slide(object):
def __init__(self, model_slide=False, func=None, model=None, category=None, key=None, model_name=''):
def __init__(self, model_slide=False, func=None, model=None, category=None,
key=None, model_name='', control_template='', weight=0):
"""
model_slide: Boolean if the value is a Model.
func: The function to call. Only if modelslide is False.
model: The model. Only if modelslide is True.
model_name: The name shown for the model.
category: The category to show this Slide.
key: the key in the slide object to find myself.
key: the key in the slide object to find itself.
"""
self.model_slide = model_slide
self.func = func
@ -63,9 +64,14 @@ class Slide(object):
self.model_name = model_name
self.category = category
self.key = key
self.control_template = control_template
self.weight = weight
def get_items(self):
try:
return self.model.objects.all()
except AttributeError:
return 'No Model'
@receiver(projector_messages, dispatch_uid="projector_countdown")

View File

@ -13,3 +13,5 @@
from django.dispatch import Signal
projector_messages = Signal(providing_args=['register', 'call'])
projector_control_box = Signal()

View File

@ -70,33 +70,19 @@
</div>
<div class="column">
{% for category, slides in categories.items %}
{% for category, group in categories.items %}
{% if category != 'projector' %}
<div class="portlet">
<div class="portlet-header">{{ category }}</div>
{% with category_big=category|capfirst %}
<div class="portlet-header">{% trans category_big %}</div>
{% endwith %}
<div class="portlet-content">
{% for slide in slides %}
{% if slide.model_slide %}
<ul style="line-height: 180%">
{% for slide in slide.get_items %}
<li class="{% if slide.active %}activeline{% endif %}"><a href="{% url projector_activate_slide slide.sid %}"
class="activate_link {% if slide.active %}active{% endif %}"
><div></div></a>
{% for i in slide.get_ancestors %}&nbsp;&nbsp;&nbsp;{% endfor %}
<a href="{% url projector_edit_slide slide.id %}">{{ slide }}</a>
{% if slide.children.exists %}
<a href="{% url projector_activate_summary slide.sid %}"><img src="{% static 'images/icons/view-list-tree.png' %}" title="{% trans 'Select item overview' %}"></a>
{% for slides in group %}
{% if slides.control_template %}
{% include slides.control_template %}
{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
{% if not forloop.last %}
<hr>
<ul style="line-height: 180%">
<li><a href="{% url projector_activate_slide slide.key %}"
class="activate_link {% if slide.active %}active{% endif %}"
><div></div></a>{{ slide.key }}</li>
</ul>
{% endif %}
{% endfor %}
</div>

View File

@ -0,0 +1,12 @@
{% load staticfiles %}
{% load i18n %}
<ul style="line-height: 180%">
<li>
<a href="{% url projector_activate_slide slide.key %}" class="activate_link {% if slide.active %}active{% endif %}">
<div></div>
</a>
{{ slides.key }}
</li>
</ul>

View File

@ -0,0 +1,14 @@
{% load staticfiles %}
{% load i18n %}
<ul style="line-height: 180%">
{% for slide in slides.get_items %}
<li class="{% if slide.active %}activeline{% endif %}">
<a href="{% url projector_activate_slide slide.sid %}" class="activate_link {% if slide.active %}active{% endif %}">
<div></div>
</a>
<a href="{% url projector_edit_slide slide.id %}">{{ slide }}</a>
</li>
{% endfor %}
</ul>

View File

@ -18,6 +18,8 @@ from django.core.urlresolvers import reverse
from django.contrib import messages
from django.utils.translation import ugettext as _
from django.utils.datastructures import SortedDict
from django.dispatch import receiver
from django.template.loader import render_to_string
from utils.views import TemplateView, RedirectView
@ -31,8 +33,9 @@ from config.models import config
from api import get_active_slide, set_active_slide
from projector import SLIDE
from models import ProjectorMessage
from openslides.projector.signals import projector_messages
from openslides.projector.signals import projector_messages, projector_control_box
from django.utils.importlib import import_module
import settings
@ -69,12 +72,20 @@ class ControlView(TemplateView):
categories[slide.category] = []
categories[slide.category].append(slide)
ordered_categories = SortedDict()
tmp_categories = categories
categories = SortedDict()
for app in settings.INSTALLED_APPS:
if app in categories:
ordered_categories[app] = categories[app]
if app in tmp_categories:
tmp_categories[app].sort(key=lambda slide: slide.weight)
categories[app] = tmp_categories[app]
## for receiver, response in projector_control_box.send(sender='ControllView'):
## if response is not None:
## categories[response[0]] = response[1]
context.update({
'categories': ordered_categories,
'categories': categories,
'countdown_visible': config['countdown_visible'],
'countdown_time': config['agenda_countdown_time'],
'projector_messages': self.get_projector_messages(),
@ -195,3 +206,7 @@ def register_tab(request):
selected=selected,
)
## @receiver(projector_control_box, dispatch_uid="openslides.projector.views.projector_box")
## def projector_box(sender, **kwargs):
## return ('header', 'text')

View File

@ -259,9 +259,6 @@ def server_error(request, template_name='500.html'):
@receiver(template_manipulation, dispatch_uid="send_register_tab")
def send_register_tab(sender, request, context, **kwargs):
#del kwargs['signal']
#register_tab.send(sender='register', request=request, context=context, **kwargs)
tabs = []
for app in settings.INSTALLED_APPS:
try: