split up graph editing settings and prepare for connecting nodes

This commit is contained in:
Laura Klünder 2017-07-27 11:40:42 +02:00
parent fde9bfa30f
commit 38523b2cb4
3 changed files with 43 additions and 12 deletions

View file

@ -243,11 +243,18 @@ class GraphEditorSettingsForm(Form):
), initial='connect_or_toggle')
click_anywhere = ChoiceField(label=_('when clicking anywhere…'), choices=(
('create_connect_node', _('create node and connect if possible')),
('create_node_if_none_active', _('create node if no node is active')),
('create_node', _('create node')),
('create_node_if_none_active', _('create node if no node is active')),
('create_node_if_other_active', _('create node if another node is active')),
('noop', _('do nothing')),
), initial='create_connect_node')
), initial='create_node')
after_create_node = ChoiceField(label=_('after creating a new node…'), choices=(
('connect', _('connect to active node if possible')),
('activate', _('activate node')),
('deactivate', _('deactivate active node')),
('noop', _('do nothing')),
), initial='connect')
create_edge = ChoiceField(label=_('when connecting two nodes…'), choices=(
('bidirectional', _('create edge in both directions')),

View file

@ -171,6 +171,7 @@ editor = {
editor._active_graph_node = null;
editor._active_graph_node_space_transfer = null;
editor._active_graph_node_html = null;
active_graph_node.remove();
} else {
editor._active_graph_node = active_graph_node_id;
editor._active_graph_node_space_transfer = active_graph_node.is('[data-space-transfer]');
@ -191,8 +192,10 @@ editor = {
graph_editing = graph_editing.attr('data-graph-editing');
editor._graph_editing = true;
editor._graph_creating = (graph_editing === 'edit-create-nodes' ||
(graph_editing === 'edit-create-if-none-active-nodes' &&
editor._active_graph_node === null));
(graph_editing === 'edit-create-if-no-active-node' &&
editor._active_graph_node === null) ||
(graph_editing === 'edit-create-if-active-node' &&
editor._active_graph_node !== null));
editor._last_graph_path = editor.get_location_path();
} else if (!editor._in_modal) {
editor._last_graph_path = null;

View file

@ -334,6 +334,10 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
return render(request, 'editor/list.html', ctx)
def connect_nodes(active_node, to_node, edge_settings_form, graph_editing_settings):
return active_node, False
@sidebar_view
def graph_edit(request, level=None, space=None):
Level = request.changeset.wrap_model('Level')
@ -379,7 +383,9 @@ def graph_edit(request, level=None, space=None):
if graph_editing_settings['click_anywhere'] != 'noop':
graph_editing = 'edit-create-nodes'
if graph_editing_settings['click_anywhere'] == 'create_node_if_none_active':
graph_editing = 'edit-create-if-none-active-nodes'
graph_editing = 'edit-create-if-no-active-node'
elif graph_editing_settings['click_anywhere'] == 'create_node_if_other_active':
graph_editing = 'edit-create-if-active-node'
allow_clicked_position = True
if request.method == 'POST':
@ -405,17 +411,30 @@ def graph_edit(request, level=None, space=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 (click_anywhere_setting == 'create_node' or
(click_anywhere_setting != 'create_node_if_none_active' or active_node is None) or
(click_anywhere_setting != 'create_node_if_other_active' or active_node is not None)):
if space.geometry.contains(clicked_position):
with request.changeset.lock_to_edit(request) as changeset:
if changeset.can_edit(request):
node = node_settings_form.instance
node.space = space
node.geometry = clicked_position
node.save()
messages.success(request, _('New graph node created!'))
after_create_node_setting = graph_editing_settings['after_create_node']
if after_create_node_setting == 'connect':
active_node, set_active_node = connect_nodes(active_node, node,
edge_settings_form,
graph_editing_settings)
elif after_create_node_setting == 'activate':
active_node = node
set_active_node = True
elif after_create_node_setting == 'deactivate':
active_node = None
set_active_node = True
else:
messages.error(request, _('You can not edit changes on this changeset.'))
messages.success(request, _('New graph node created!'))
if set_active_node:
ctx.update({
@ -450,7 +469,9 @@ def graph_editing_settings(request):
if request.POST.get('can_close_modal') == '1':
ctx['closemodal'] = True
else:
form = GraphEditorSettingsForm(data=request.session.get('graph_editing_settings', {}))
graph_editing_settings = {field.name: field.initial for field in GraphEditorSettingsForm()}
graph_editing_settings.update(request.session.get('graph_editing_settings', {}))
form = GraphEditorSettingsForm(data=graph_editing_settings)
ctx.update({
'form': form,