split up graph editing settings and prepare for connecting nodes
This commit is contained in:
parent
fde9bfa30f
commit
38523b2cb4
3 changed files with 43 additions and 12 deletions
|
@ -243,11 +243,18 @@ class GraphEditorSettingsForm(Form):
|
||||||
), initial='connect_or_toggle')
|
), initial='connect_or_toggle')
|
||||||
|
|
||||||
click_anywhere = ChoiceField(label=_('when clicking anywhere…'), choices=(
|
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', _('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')),
|
('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=(
|
create_edge = ChoiceField(label=_('when connecting two nodes…'), choices=(
|
||||||
('bidirectional', _('create edge in both directions')),
|
('bidirectional', _('create edge in both directions')),
|
||||||
|
|
|
@ -171,6 +171,7 @@ editor = {
|
||||||
editor._active_graph_node = null;
|
editor._active_graph_node = null;
|
||||||
editor._active_graph_node_space_transfer = null;
|
editor._active_graph_node_space_transfer = null;
|
||||||
editor._active_graph_node_html = null;
|
editor._active_graph_node_html = null;
|
||||||
|
active_graph_node.remove();
|
||||||
} else {
|
} else {
|
||||||
editor._active_graph_node = active_graph_node_id;
|
editor._active_graph_node = active_graph_node_id;
|
||||||
editor._active_graph_node_space_transfer = active_graph_node.is('[data-space-transfer]');
|
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');
|
graph_editing = graph_editing.attr('data-graph-editing');
|
||||||
editor._graph_editing = true;
|
editor._graph_editing = true;
|
||||||
editor._graph_creating = (graph_editing === 'edit-create-nodes' ||
|
editor._graph_creating = (graph_editing === 'edit-create-nodes' ||
|
||||||
(graph_editing === 'edit-create-if-none-active-nodes' &&
|
(graph_editing === 'edit-create-if-no-active-node' &&
|
||||||
editor._active_graph_node === null));
|
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();
|
editor._last_graph_path = editor.get_location_path();
|
||||||
} else if (!editor._in_modal) {
|
} else if (!editor._in_modal) {
|
||||||
editor._last_graph_path = null;
|
editor._last_graph_path = null;
|
||||||
|
|
|
@ -334,6 +334,10 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
|
||||||
return render(request, 'editor/list.html', ctx)
|
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
|
@sidebar_view
|
||||||
def graph_edit(request, level=None, space=None):
|
def graph_edit(request, level=None, space=None):
|
||||||
Level = request.changeset.wrap_model('Level')
|
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':
|
if graph_editing_settings['click_anywhere'] != 'noop':
|
||||||
graph_editing = 'edit-create-nodes'
|
graph_editing = 'edit-create-nodes'
|
||||||
if graph_editing_settings['click_anywhere'] == 'create_node_if_none_active':
|
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
|
allow_clicked_position = True
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
@ -405,17 +411,30 @@ def graph_edit(request, level=None, space=None):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
elif clicked_node is None and clicked_position is not None:
|
elif clicked_node is None and clicked_position is not None:
|
||||||
click_anywhere_setting = graph_editing_settings['click_anywhere']
|
click_anywhere_setting = graph_editing_settings['click_anywhere']
|
||||||
if click_anywhere_setting != 'create_node_if_none_active' or active_node is None:
|
if (click_anywhere_setting == 'create_node' or
|
||||||
node = node_settings_form.instance
|
(click_anywhere_setting != 'create_node_if_none_active' or active_node is None) or
|
||||||
node.space = space
|
(click_anywhere_setting != 'create_node_if_other_active' or active_node is not None)):
|
||||||
node.geometry = clicked_position
|
|
||||||
if space.geometry.contains(clicked_position):
|
if space.geometry.contains(clicked_position):
|
||||||
with request.changeset.lock_to_edit(request) as changeset:
|
with request.changeset.lock_to_edit(request) as changeset:
|
||||||
if changeset.can_edit(request):
|
if changeset.can_edit(request):
|
||||||
|
node = node_settings_form.instance
|
||||||
|
node.space = space
|
||||||
|
node.geometry = clicked_position
|
||||||
node.save()
|
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:
|
else:
|
||||||
messages.error(request, _('You can not edit changes on this changeset.'))
|
messages.error(request, _('You can not edit changes on this changeset.'))
|
||||||
messages.success(request, _('New graph node created!'))
|
|
||||||
|
|
||||||
if set_active_node:
|
if set_active_node:
|
||||||
ctx.update({
|
ctx.update({
|
||||||
|
@ -450,7 +469,9 @@ def graph_editing_settings(request):
|
||||||
if request.POST.get('can_close_modal') == '1':
|
if request.POST.get('can_close_modal') == '1':
|
||||||
ctx['closemodal'] = True
|
ctx['closemodal'] = True
|
||||||
else:
|
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({
|
ctx.update({
|
||||||
'form': form,
|
'form': form,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue