X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=gui;fp=gui;h=83da0cd6b7c06b117647551b7f0eae14795a1006;hb=3264e87e6943ae418c910a606142976f0d05e58e;hp=fbcbb01e49dce6d7c6e55045c5286e2652411549;hpb=b94faafa111dbec1b5cc45fb588f9258b4ca5abc;p=gsu.git diff --git a/gui b/gui index fbcbb01..83da0cd 100644 --- a/gui +++ b/gui @@ -95,15 +95,16 @@ gsu_msgbox() _gsu_menu() { - local header=${1:-root} dflt_item=$2 items=$3 + local header=$1 dflt_item=$2 local geom + shift 2 _get_geometry geom=$result result="$(dialog --no-lines --no-items \ --default-item "$dflt_item" \ - --menu "$gsu_banner_txt ($header)" \ - $geom 16 $items 3>&1 1>&2 2>&3 3>&-)" + --menu "$gsu_banner_txt"$'\n'"Current location: $header" \ + $geom 16 "$@" 3>&1 1>&2 2>&3 3>&-)" _set_dialog_ret $? } @@ -154,26 +155,46 @@ _get_root_nodes() _browse() { - local header=$1 tree=$2 - local -a subtree=($3) - local old_header dflt_item=${subtree[0]} - + local root_item=$1 tree=$2 subtree=$3 + local -a items arr + local -A ids + local old_root dflt_item + local item id OIFS + local -i i=0 + + while read -a arr; do + ((${#arr[@]} == 0)) && continue + id=${arr[0]} + if ((${#arr[@]} > 1)); then + unset arr[0]; + item=${arr[*]} + if [[ "${id:$((${#id} - 1)):1}" == '/' ]]; then + item+=/ + else + item="• $item" + fi + else + item=$id + fi + items[$i]=$item + ids["$item"]=$id + let i++ + done <<< "$subtree" + dflt_item=${items[0]} while :; do - _gsu_menu "$header" "$dflt_item" "${subtree[*]}" + _gsu_menu "$root_item" "$dflt_item" "${items[@]}" ((ret < 0)) && return - dflt_item=$result [[ -z "$result" ]] && return # menu was cancelled - if [[ "${result%/}" != "$result" ]]; then - old_header="$header" - header="$result" - _get_subtree "$tree" "$header" + dflt_item=$result + id=${ids["$result"]} + if [[ "${id:$((${#id} - 1)):1}" == '/' ]]; then + _get_subtree "$tree" "$id" ((ret < 0)) && return - _browse "$header" "$tree" "$result" + _browse "${dflt_item%/}" "$tree" "$result" ((ret < 0)) && return - header="$old_header" continue fi - eval ${gsu_name}_$result + eval ${gsu_name}_${id} done } @@ -188,5 +209,5 @@ gsu_gui() fi _get_root_nodes "$tree" subtree="$result" - _browse "main menu" "$tree" "$subtree" + _browse 'Main menu' "$tree" "$subtree" }