#!/bin/bash

# dcop-array-std, for Konch 1.00+
# Author: Alex Ibrado <alex@kdex.org>
# Part of the Konch distribution, http://konch.kdex.org/

ID=$1
CMD=$2
shift 2

C=0
if [ "$CMD" != "init" ]; then
  eval "friends=( $LIST_DATA )"
  C=${#friends[*]}
fi

case $CMD in

  init)
    friends=("Superman" "Wonder Woman" "Batman")
    cat <<END
      name Friends
      icon package_toys

      set LIST_DATA 

      // dcop friends I ...
      use dcop friends I

      // dcop friends I add Spiderman
      dcop void add(QString name)

      // dcop friends I remove "Wonder Woman"
      dcop void remove(QString name)

      // dcop friends I have
      dcop QStringList have()

      // dcop friends I call Aquaman
      dcop void call(QString name)
END
  ;;

  rclick)
    echo menu show
  ;;

  have)
    echo "return ["
    for (( i=0 ; i<$C ; i++ )) do
      echo ${friends[$i]} 
    done
    echo "]"
  ;;

  add)
    friends[$C]=$1

  ;;

  remove)
    for (( i=0 ; i<$C ; i++ )) do
      if [ "${friends[$i]}" == "$1" ]; then
        unset friends[$i]
        break
      fi
    done
  ;; 

  call)
    # Used by menu and DCOP
    FOUND=
    for (( i=0 ; i<$C ; i++ )) do
      if [ "${friends[$i]}" == "$1" ]; then
        FOUND=1
        echo popup "Calling <b>$1</b>!"
        break
      fi
    done

    if [ ! $FOUND ]; then
      echo popup "<b>$1</b> is not your friend!"
    fi
  ;;

esac

if [ "$CMD" == "init" -o "$CMD" == "add" -o "$CMD" == "remove" ]; then
  echo menu clear

  # Print each entry on one line, so names can have embedded spaces
  OIFS=$IFS
  IFS=$'\n'

  NEW_LIST=""
  for F in ${friends[@]} ; do
    NEW_LIST="$NEW_LIST \"$F\""
    echo menu $F,,call $F
  done

  IFS=$OIFS
  echo set LIST_DATA $NEW_LIST
fi

