create nodes in graph view
This commit is contained in:
parent
ef7af700dc
commit
1c1227c361
3 changed files with 32 additions and 11 deletions
|
@ -5,8 +5,8 @@ from functools import reduce
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import FieldDoesNotExist
|
from django.core.exceptions import FieldDoesNotExist
|
||||||
from django.forms import BooleanField, CharField, ChoiceField, Form, ModelForm, MultipleChoiceField, ValidationError, \
|
from django.forms import (BooleanField, CharField, ChoiceField, Form, ModelChoiceField, ModelForm, MultipleChoiceField,
|
||||||
ModelChoiceField
|
ValidationError)
|
||||||
from django.forms.widgets import HiddenInput
|
from django.forms.widgets import HiddenInput
|
||||||
from django.utils.text import format_lazy
|
from django.utils.text import format_lazy
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
@ -15,7 +15,7 @@ from shapely.geometry.geo import mapping
|
||||||
|
|
||||||
from c3nav.editor.models import ChangeSet, ChangeSetUpdate
|
from c3nav.editor.models import ChangeSet, ChangeSetUpdate
|
||||||
from c3nav.mapdata.fields import GeometryField
|
from c3nav.mapdata.fields import GeometryField
|
||||||
from c3nav.mapdata.models import GraphNode, GraphEdge
|
from c3nav.mapdata.models import GraphEdge, GraphNode
|
||||||
|
|
||||||
|
|
||||||
class EditorFormBase(ModelForm):
|
class EditorFormBase(ModelForm):
|
||||||
|
|
|
@ -17,13 +17,13 @@
|
||||||
</small>
|
</small>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<a href="{% url 'editor.graph.settings' %}" class="btn btn-default btn-xs pull-right" data-graph-editing="{{ graph_editing }}">{% trans 'Settings' %}</a>
|
<a href="{% url 'editor.graph.settings' %}" class="btn btn-default btn-xs pull-right">{% trans 'Settings' %}</a>
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ back_url }}">« {{ back_title }}</a>
|
<a href="{{ back_url }}">« {{ back_title }}</a>
|
||||||
</p>
|
</p>
|
||||||
{% bootstrap_messages %}
|
{% bootstrap_messages %}
|
||||||
|
|
||||||
<form action="{{ request.path }}" method="post">
|
<form action="{{ request.path }}" method="post" data-graph-editing="{{ graph_editing }}" {% if nozoom %}data-nozoom {% endif %}>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
<h4>{% trans 'Default node properties' %}</h4>
|
<h4>{% trans 'Default node properties' %}</h4>
|
||||||
|
|
|
@ -8,8 +8,8 @@ from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from c3nav.editor.forms import GraphEditorSettingsForm, GraphEdgeSettingsForm, GraphNodeSettingsForm, \
|
from c3nav.editor.forms import (GraphEdgeSettingsForm, GraphEditorActionForm, GraphEditorSettingsForm,
|
||||||
GraphEditorActionForm
|
GraphNodeSettingsForm)
|
||||||
from c3nav.editor.views.base import sidebar_view
|
from c3nav.editor.views.base import sidebar_view
|
||||||
|
|
||||||
|
|
||||||
|
@ -379,16 +379,37 @@ def graph_edit(request, level=None, space=None):
|
||||||
allow_clicked_position = True
|
allow_clicked_position = True
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
node_settings_form = GraphNodeSettingsForm(data=request.POST)
|
node_settings_form = GraphNodeSettingsForm(instance=GraphNode(), data=request.POST)
|
||||||
edge_settings_form = GraphEdgeSettingsForm(request=request, data=request.POST)
|
edge_settings_form = GraphEdgeSettingsForm(instance=GraphEdge(), request=request, data=request.POST)
|
||||||
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position,
|
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position,
|
||||||
data=request.POST)
|
data=request.POST)
|
||||||
if node_settings_form.is_valid() and edge_settings_form.is_valid() and graph_action_form.is_valid():
|
if node_settings_form.is_valid() and edge_settings_form.is_valid() and graph_action_form.is_valid():
|
||||||
messages.success(request, _('Forms valid!'))
|
active_node = graph_action_form.cleaned_data['active_node']
|
||||||
|
clicked_node = graph_action_form.cleaned_data['clicked_node']
|
||||||
|
clicked_position = graph_action_form.cleaned_data.get('clicked_position')
|
||||||
|
if clicked_node is not None and clicked_position is None:
|
||||||
|
raise NotImplementedError
|
||||||
|
elif clicked_node is None and clicked_position is not None:
|
||||||
|
click_anywhere_setting = graph_editing_settings['click_anywhere']
|
||||||
|
if click_anywhere_setting != 'create_node_if_none_active' or active_node is None:
|
||||||
|
node = node_settings_form.instance
|
||||||
|
node.space = space
|
||||||
|
node.geometry = clicked_position
|
||||||
|
if space.geometry.contains(clicked_position):
|
||||||
|
with request.changeset.lock_to_edit(request) as changeset:
|
||||||
|
if changeset.can_edit(request):
|
||||||
|
node.save()
|
||||||
|
else:
|
||||||
|
messages.error(request, _('You can not edit changes on this changeset.'))
|
||||||
|
messages.success(request, _('New graph node created!'))
|
||||||
|
|
||||||
|
ctx.update({
|
||||||
|
'nozoom': True,
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
node_settings_form = GraphNodeSettingsForm()
|
node_settings_form = GraphNodeSettingsForm()
|
||||||
edge_settings_form = GraphEdgeSettingsForm(request=request)
|
edge_settings_form = GraphEdgeSettingsForm(request=request)
|
||||||
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position)
|
graph_action_form = GraphEditorActionForm(request=request, allow_clicked_position=allow_clicked_position)
|
||||||
|
|
||||||
ctx.update({
|
ctx.update({
|
||||||
'node_settings_form': node_settings_form,
|
'node_settings_form': node_settings_form,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue