align-levels feature

This commit is contained in:
nadrad 2023-03-15 09:09:17 +01:00
parent 8c4c8f8e3a
commit d3afbd7ac4
2 changed files with 85 additions and 6 deletions

89
h-m-m
View file

@ -98,6 +98,7 @@ foreach ($e as $k=>$v)
config($mm, 'max_parent_node_width', 25);
config($mm, 'max_leaf_node_width', 55);
config($mm, 'line_spacing', 1);
config($mm, 'align_levels', 0);
config($mm, 'initial_depth', 1);
config($mm, 'center_lock', false);
@ -532,8 +533,8 @@ function calculate_x_and_lh(&$mm, $id)
{
$node = $mm['nodes'][$id];
$mm['nodes'][$id]['x']
= $mm['nodes'][ $node['parent'] ]['x']
$mm['nodes'][$id]['x'] =
$mm['nodes'][ $node['parent'] ]['x']
+ $mm['nodes'][ $node['parent'] ]['w']
+ conn_left_len
+ conn_right_len
@ -588,6 +589,43 @@ function calculate_x_and_lh(&$mm, $id)
}
// }}}
// {{{ calculate aligned x
function calculate_aligned_x(&$mm,$id,$x)
{
$mm['map_width'] =
max
(
$mm['map_width']
, $mm['nodes'][$id]['x']
+ $mm['nodes'][$id]['w']
)
;
$max_width = 0;
foreach ($mm['nodes'][$id]['children'] as $cid)
{
$max_width = max( $max_width, $mm['nodes'][$cid]['w'] );
$mm['nodes'][$cid]['x'] = $x;
}
foreach ($mm['nodes'][$id]['children'] as $cid)
calculate_aligned_x
(
$mm
,$cid
,$max_width
+$x
+conn_left_len
+conn_right_len
+1
)
;
}
// }}}
// {{{ calculate h
@ -733,12 +771,24 @@ function draw_connections(&$mm, $id)
$y1 = round( $node['y'] + $node['yo'] ) + round( ($node['lh'] ) / 2 - 0.6 );
$y2 = round( $child['y'] + $child['yo'] ) + round( ($child['lh']) / 2 - 0.6 );
$x =
$mm['align_levels']
? $node['x'] + $node['w'] - 2
: $child['x'] - conn_left_len - conn_right_len
;
$line =
$mm['align_levels']
? str_repeat('─', $child['x'] - $node['x'] - $node['w'] + 1)
: $mm['conn_single']
;
mmput
(
$mm
,$child['x'] - conn_left_len - conn_right_len
,$x
,min($y1,$y2)
,$mm['conn_single']
,$line
);
if (abs(min($y1,$y2)-$y2)>0)
@ -796,12 +846,24 @@ function draw_connections(&$mm, $id)
$middle = round($node['y']+$node['yo']) + round($node['lh']/2-0.6);
$x =
$mm['align_levels']
? $node['x'] + $node['w'] - 2
: $mm['nodes'][$top_child]['x'] - conn_left_len - conn_right_len
;
$line =
$mm['align_levels']
? str_repeat('─', $mm['nodes'][$top_child]['x'] - $node['x'] - $node['w'] - 2 )
: $mm['conn_left']
;
mmput
(
$mm
,$mm['nodes'][$top_child]['x'] - conn_left_len - conn_right_len
,$x
,$middle
,$mm['conn_left']
,$line
);
for ( $i = $top ; $i < $bottom ; $i++ )
@ -963,6 +1025,8 @@ function build_map(&$mm)
// calculating the new coordinates
calculate_x_and_lh($mm,$mm['root_id']);
if ($mm['align_levels'])
calculate_aligned_x($mm,$mm['root_id'],$mm['nodes'][ $mm['root_id'] ]['w'] + conn_left_len + conn_right_len + 1);
calculate_h($mm);
calculate_y($mm);
calculate_height_shift($mm, $mm['root_id']);
@ -1030,6 +1094,17 @@ function toggle_symbol(&$mm)
}
// }}}
// {{{ toggle align
function toggle_align(&$mm)
{
$mm['align_levels'] = !$mm['align_levels'];
build_map($mm);
display($mm);
}
// }}}
// {{{ toggle node
@ -2987,6 +3062,8 @@ function monitor_key_presses(&$mm)
case ' ': toggle_node($mm); break;
case '|': toggle_align($mm); break;
case '/': search($mm); break;
case '?': search($mm); break;
case ctrl_f: search($mm); break;

View file

@ -55,6 +55,7 @@ Adjusting the view:
* `W` - decreases the maximum node width
* `z` - decreases line spacing
* `Z` - increases line spacing
* `|` - align levels
Collapsing and expanding:
@ -106,6 +107,7 @@ The following are the settings in h-m-m:
max_parent_node_width = 25
max_leaf_node_width = 55
line_spacing = 1
align_levels = 0
initial_depth = 1
center_lock = false
focus_lock = false