created model for pojector slides
This commit is contained in:
parent
a04c5fff1d
commit
7a63ec6f10
@ -22,7 +22,7 @@ from mptt.models import MPTTModel, TreeForeignKey
|
||||
|
||||
from system import config
|
||||
|
||||
from projector.models import SlideMixin
|
||||
from projector.projector import SlideMixin
|
||||
from projector.api import register_slidemodel
|
||||
|
||||
from agenda.api import is_summary
|
||||
@ -126,7 +126,6 @@ class Item(MPTTModel, SlideMixin):
|
||||
permissions = (
|
||||
('can_see_agenda', "Can see agenda"),
|
||||
('can_manage_agenda', "Can manage agenda"),
|
||||
('can_see_projector', "Can see projector"),
|
||||
)
|
||||
|
||||
class MPTTMeta:
|
||||
|
@ -1,5 +1,5 @@
|
||||
from system import config
|
||||
from projector.models import SLIDE, Slide
|
||||
from projector import SLIDE, Slide
|
||||
|
||||
|
||||
def get_slide_from_sid(sid):
|
||||
|
@ -1,62 +1,26 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from api import register_slidemodel
|
||||
from projector import SlideMixin
|
||||
|
||||
from system import config
|
||||
|
||||
SLIDE = {}
|
||||
|
||||
class SlideMixin(object):
|
||||
class ProjectorSlide(models.Model, SlideMixin):
|
||||
prefix = 'ProjectorSlide'
|
||||
|
||||
def slide(self):
|
||||
"""
|
||||
Return a map with all Data for a Slide
|
||||
"""
|
||||
return {
|
||||
'slide': self,
|
||||
'title': 'dummy-title',
|
||||
'template': 'projector/default.html',
|
||||
}
|
||||
title = models.CharField(max_length=100, verbose_name=_("Title"))
|
||||
text = models.TextField(null=True, blank=True, verbose_name=_("Text"))
|
||||
weight = models.IntegerField(default=0, verbose_name=_("Weight"))
|
||||
|
||||
@property
|
||||
def sid(self):
|
||||
"""
|
||||
Return the sid from this Slide
|
||||
"""
|
||||
for key, value in SLIDE.iteritems():
|
||||
if type(self) == value.model:
|
||||
return "%s-%d" % (key, self.id)
|
||||
return None
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
@property
|
||||
def active(self):
|
||||
"""
|
||||
Return True, if the the slide is the active one.
|
||||
"""
|
||||
from projector.api import get_active_slide
|
||||
return True if get_active_slide(only_sid=True) == self.sid else False
|
||||
class Meta:
|
||||
permissions = (
|
||||
('can_manage_projector', "Can manage the projector"),
|
||||
('can_see_projector', "Can see projector"),
|
||||
)
|
||||
|
||||
def set_active(self):
|
||||
"""
|
||||
Appoint this item as the active one.
|
||||
"""
|
||||
config["presentation"] = "%s-%d" % (self.prefix, self.id)
|
||||
|
||||
|
||||
class Slide(object):
|
||||
def __init__(self, model_slide=False, func=None, model=None, category=None, key=None, model_name=''):
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
self.model_slide = model_slide
|
||||
self.func = func
|
||||
self.model = model
|
||||
self.model_name = model_name
|
||||
self.category = category
|
||||
self.key = key
|
||||
|
||||
def get_items(self):
|
||||
return self.model.objects.all()
|
||||
register_slidemodel(ProjectorSlide, category=_('Projector'), model_name=_('Projector Slide'))
|
||||
|
60
openslides/projector/projector.py
Normal file
60
openslides/projector/projector.py
Normal file
@ -0,0 +1,60 @@
|
||||
from system import config
|
||||
|
||||
SLIDE = {}
|
||||
|
||||
class SlideMixin(object):
|
||||
|
||||
def slide(self):
|
||||
"""
|
||||
Return a map with all Data for a Slide
|
||||
"""
|
||||
return {
|
||||
'slide': self,
|
||||
'title': 'dummy-title',
|
||||
'template': 'projector/default.html',
|
||||
}
|
||||
|
||||
@property
|
||||
def sid(self):
|
||||
"""
|
||||
Return the sid from this Slide
|
||||
"""
|
||||
for key, value in SLIDE.iteritems():
|
||||
if type(self) == value.model:
|
||||
return "%s-%d" % (key, self.id)
|
||||
return None
|
||||
|
||||
@property
|
||||
def active(self):
|
||||
"""
|
||||
Return True, if the the slide is the active one.
|
||||
"""
|
||||
from api import get_active_slide
|
||||
return True if get_active_slide(only_sid=True) == self.sid else False
|
||||
|
||||
def set_active(self):
|
||||
"""
|
||||
Appoint this item as the active one.
|
||||
"""
|
||||
config["presentation"] = "%s-%d" % (self.prefix, self.id)
|
||||
|
||||
|
||||
class Slide(object):
|
||||
def __init__(self, model_slide=False, func=None, model=None, category=None, key=None, model_name=''):
|
||||
"""
|
||||
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.
|
||||
"""
|
||||
self.model_slide = model_slide
|
||||
self.func = func
|
||||
self.model = model
|
||||
self.model_name = model_name
|
||||
self.category = category
|
||||
self.key = key
|
||||
|
||||
def get_items(self):
|
||||
return self.model.objects.all()
|
@ -3,13 +3,16 @@
|
||||
{% load tags %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}foasdfasdfafs {% endblock %}
|
||||
|
||||
{% block submenu %}
|
||||
{% url item_overview as url_itemoverview %}
|
||||
{% url item_new as url_itemnew %}
|
||||
<h4 class="sectiontitle">{%trans "Projector" %}</h4>
|
||||
<ul>
|
||||
{% if perms.agenda.can_see_projector %}
|
||||
<li><a href="{% url projector_show %}"><img src="/static/images/icons/video-projector.png"> {%trans 'Projector view' %}</a></li>
|
||||
{% if perms.projector.can_see_projector %}
|
||||
<li><a href="{% url projector_new %}">{% trans 'New Slide' %}</a></li>
|
||||
<li><a href="{% url projector_show %}"><img src="/static/images/icons/video-projector.png"> {% trans 'Projector view' %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
@ -50,79 +50,78 @@
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans 'Projector' %}</h1>
|
||||
<div style="text-align: right; padding: 0 5px 5px 0; margin-top:-20px;">
|
||||
<!-- countdown -->
|
||||
<input type="checkbox" name="countdown" onchange="document.location='{% if countdown_visible %}{% url countdown_close %}{% else %}{% url countdown_open %}{% endif %}'"{% if countdown_visible %} checked{% endif %}>
|
||||
{% trans "Countdown" %} (<a href="{% url config_agenda %}">{{countdown_time}}{% trans "sec" %}</a>)
|
||||
{% if countdown_visible == "True" %}:
|
||||
<a class="projector_countdown" href="{% url countdown_reset countdown_time %}" title="{% trans 'Reset countdown' %}">
|
||||
<img src="/static/images/icons/media-skip-backward.png" />
|
||||
</a>
|
||||
<a class="projector_countdown" href="{% url countdown_start %}" title="{% trans 'Start countdown' %}">
|
||||
<img src="/static/images/icons/media-playback-start.png" />
|
||||
</a>
|
||||
<a class="projector_countdown" href="{% url countdown_stop %}" title="{% trans 'Stop countdown' %}">
|
||||
<img src="/static/images/icons/media-playback-pause.png" />
|
||||
</a>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
<!-- projector control -->
|
||||
{% trans "Adjust projector view" %}:
|
||||
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
|
||||
<img src="/static/images/icons/zoom-in.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
|
||||
<img src="/static/images/icons/zoom-out.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
|
||||
<img src="/static/images/icons/go-up.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
|
||||
<img src="/static/images/icons/go-down.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}">
|
||||
<img src="/static/images/icons/view-restore.png" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if perms.agenda.can_manage_agenda %}
|
||||
<div style="text-align: right; padding: 0 5px 5px 0; margin-top:-20px;">
|
||||
<!-- countdown -->
|
||||
<input type="checkbox" name="countdown" onchange="document.location='{% if countdown_visible %}{% url countdown_close %}{% else %}{% url countdown_open %}{% endif %}'"{% if countdown_visible %} checked{% endif %}>
|
||||
{% trans "Countdown" %} (<a href="{% url config_agenda %}">{{countdown_time}}{% trans "sec" %}</a>)
|
||||
{% if countdown_visible == "True" %}:
|
||||
<a class="projector_countdown" href="{% url countdown_reset countdown_time %}" title="{% trans 'Reset countdown' %}">
|
||||
<img src="/static/images/icons/media-skip-backward.png" />
|
||||
</a>
|
||||
<a class="projector_countdown" href="{% url countdown_start %}" title="{% trans 'Start countdown' %}">
|
||||
<img src="/static/images/icons/media-playback-start.png" />
|
||||
</a>
|
||||
<a class="projector_countdown" href="{% url countdown_stop %}" title="{% trans 'Stop countdown' %}">
|
||||
<img src="/static/images/icons/media-playback-pause.png" />
|
||||
</a>
|
||||
{% endif %}
|
||||
<p></p>
|
||||
<!-- projector control -->
|
||||
{% trans "Adjust projector view" %}:
|
||||
<a class="projector_edit" href="{% url projector_bigger %}" title="{% trans 'Zoom in' %}">
|
||||
<img src="/static/images/icons/zoom-in.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_smaller %}" title="{% trans 'Zoom out' %}">
|
||||
<img src="/static/images/icons/zoom-out.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_up %}" title="{% trans 'Scroll text up' %}">
|
||||
<img src="/static/images/icons/go-up.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_down %}" title="{% trans 'Scroll text down' %}">
|
||||
<img src="/static/images/icons/go-down.png" />
|
||||
</a>
|
||||
<a class="projector_edit" href="{% url projector_clean %}" title="{% trans 'Reset projector view' %}">
|
||||
<img src="/static/images/icons/view-restore.png" />
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% for category, slides in categories.items %}
|
||||
<div class="column">
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">{{ category }}</div>
|
||||
<div class="portlet-content">
|
||||
{% for slide in slides %}
|
||||
{% if slide.model_slide %}
|
||||
<ul>
|
||||
{% for item in slide.get_items %}
|
||||
<li><a href="{% url projector_activate_slide item.sid %}">{{ item }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
# <a href="{% url projector_activate_slide slide.key %}">{{ slide.key }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for category, slides in categories.items %}
|
||||
<div class="column">
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">{{ category }}</div>
|
||||
<div class="portlet-content">
|
||||
{% for slide in slides %}
|
||||
{% if slide.model_slide %}
|
||||
<ul>
|
||||
{% for item in slide.get_items %}
|
||||
<li><a href="{% url projector_activate_slide item.sid %}">{{ item }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
# <a href="{% url projector_activate_slide slide.key %}">{{ slide.key }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="column">
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">{% trans "Live View" %}</div>
|
||||
<div class="portlet-content">
|
||||
<iframe src="{% url projector_show %}" width="100%" style="zoom:15%;">
|
||||
<div class="column">
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">
|
||||
{% trans "Live View" %}
|
||||
</div>
|
||||
<div class="portlet-content">
|
||||
<iframe src="{% url projector_show %}" width="100%" style="zoom:15%;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">{% trans "Hidden information" %}</div>
|
||||
<div class="portlet-content">
|
||||
TODO: list hidden agenda items
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="portlet">
|
||||
<div class="portlet-header">{% trans "Hidden information" %}</div>
|
||||
<div class="portlet-content">
|
||||
TODO: list hidden agenda items
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
25
openslides/projector/templates/projector/new.html
Normal file
25
openslides/projector/templates/projector/new.html
Normal file
@ -0,0 +1,25 @@
|
||||
{% extends "projector/base_projector.html" %}
|
||||
|
||||
{% load tags %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{{ block.super }} – {%trans "New Slide" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans 'New Slide' %}</h1>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<button class="button" type="submit">
|
||||
<span class="icon ok">{%trans 'Save' %}</span>
|
||||
</button>
|
||||
<button class="button" type="submit" name="apply">
|
||||
<span class="icon apply">{%trans 'Apply' %}</span>
|
||||
</button>
|
||||
<a href='{% url item_overview %}'>
|
||||
<button class="button" type="button" onclick="window.location='{% url item_overview %}'">
|
||||
<span class="icon cancel">{%trans 'Cancel' %}</span>
|
||||
</button>
|
||||
</a>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
@ -12,7 +12,11 @@
|
||||
|
||||
from django.conf.urls.defaults import *
|
||||
|
||||
from projector.views import ControlView, ActivateView
|
||||
from utils.views import CreateView
|
||||
|
||||
from views import ControlView, ActivateView
|
||||
from models import ProjectorSlide
|
||||
|
||||
|
||||
urlpatterns = patterns('projector.views',
|
||||
url(r'^$', 'active_slide',
|
||||
@ -28,6 +32,16 @@ urlpatterns = patterns('projector.views',
|
||||
name='projector_activate_slide',
|
||||
),
|
||||
|
||||
url(r'^new/$',
|
||||
CreateView.as_view(
|
||||
success_url='projector_control',
|
||||
model=ProjectorSlide,
|
||||
template_name='projector/new.html',
|
||||
permission_required='projector.can_manage_projector'
|
||||
),
|
||||
name='projector_new',
|
||||
),
|
||||
|
||||
url(r'^bigger/$', 'projector_edit', {'direction': 'bigger'},
|
||||
name='projector_bigger'),
|
||||
|
||||
|
@ -25,8 +25,8 @@ from utils.template import render_block_to_string
|
||||
|
||||
from system import config
|
||||
|
||||
from projector.api import get_active_slide, set_active_slide
|
||||
from projector.models import SLIDE
|
||||
from api import get_active_slide, set_active_slide
|
||||
from projector import SLIDE
|
||||
|
||||
|
||||
class ControlView(TemplateView):
|
||||
@ -59,7 +59,7 @@ class ActivateView(RedirectView):
|
||||
return context
|
||||
|
||||
|
||||
@permission_required('agenda.can_see_projector')
|
||||
@permission_required('projector.can_see_projector')
|
||||
def active_slide(request):
|
||||
"""
|
||||
Shows the active Slide.
|
||||
|
Loading…
Reference in New Issue
Block a user