#!/bin/bash

# ==================================================================
# setime - ver.0.85
#  入力メソッド選択設定スクリプト for PCLinuxOS
#
# このスクリプトは Vine Linux 5.0 の vinelib スクリプト内の
# setime ファンクションを基にして、PCLinuxOS 用として改変したものです。
# Vine Linux の vinelib の開発者である Jun Nishii 氏に謝意を表します。
#                               tomcat <webmaster2@tomcat.nyanta.jp>
# ==================================================================

SETIME_PATH=/usr/share/setime
source $SETIME_PATH/imelib

## ロケール設定
setLocale

## システムに問題がないかチェックする
## 問題が在る場合には修正用のスクリプトを実行する
CheckSystem
if [ $NEED_FIX = 1 ]; then
  eval CheckSystemMsg_$LOCALE
  read DUMMY
  if [ $UID = 0 ]; then
    setime-delete-old-settings
  else
    su -m -c setime-delete-old-settings
  fi
	echo "-----------------------"
fi

## 現在の入力メソッドを調べる
CheckXIMStatus


## 引数として入力メソッド名が指定されている場合にはその判定を行う。
MENU="No"
case $# in
  0) MENU="Yes" ;;
  1)
    case $1 in
      status | STATUS) IM=status ;;
      scim | SCIM) IM=scim ;;
      scim-b* | SCIM-B*) IM=scim-bridge ;;
      uim | UIM | Uim) IM=uim ;;
      ibus | IBUS | IBus) IM=ibus ;;
      fcitx | FCITX | Fcitx) IM=fcitx ;;
      none | NONE | None | NO | No |no) IM=none ;;
      --help | -h) MENU="Yes" ;;
      *)
        if [ $LOCALE = ja ]; then
          echo "エラー： 指定された入力メソッド名が間違っています。"
        else
          echo "ERROR: The specified name of input method is wrong."
        fi
        echo ""
        MENU="Yes"
        ;;
    esac
    ;;
  *)
    if [ $LOCALE = ja ]; then
      echo "エラー： 指定できる入力メソッドは１つだけです。"
    else
      echo "ERROR: There are too many arguments."
    fi
    echo ""
    MENU="Yes"
    ;;
esac


## 入力メソッド名が指定されていない場合には一覧を表示して選択を促す。
if [ $MENU = "Yes" ]; then
  echo setime - ver.${VER}
  eval CurIMEMsg_$LOCALE
  echo ""
  if [ $LOCALE = ja ]; then
    echo "   1. ibus:         入力メソッドとして IBus を使用します"
    echo "   2. scim-bridge:  入力メソッドとして scim-bridge を使用します"
    echo "   3. scim:         入力メソッドとして scim を使用します"
    echo "   4. uim:          入力メソッドとして uim を使用します"
    echo "   5. fcitx:        入力メソッドとして fcitx を使用します"
    echo "   6. none:         入力メソッドは使用しません"
    echo "   9. status:       現在の入力メソッドに関する情報を表示します"
  else
    echo "   1. ibus:         set IBus as default input method."
    echo "   2. scim-bridge:  set scim-bridge as default input methods."
    echo "   3. scim:         set scim as default input method."
    echo "   4. uim:          set uim as default input method."
    echo "   5. fcitx:        set fcitx as default input method."
    echo "   6. none:         do not use input method."
    echo "   9. status:       get information about current environment for input methods."
  fi
  echo ""
  while true; do
    if [ $LOCALE = ja ]; then
      read -p "使用する入力メソッドを撰択してください (1-6 or 9): " ANS
    else
      read -p "Select Input Method (1-6 or 9): " ANS
    fi
    case $ANS in
      1) IM=ibus && break ;;
      2) IM=scim-bridge && break ;;
      3) IM=scim && break ;;
      4) IM=uim && break ;;
      5) IM=fcitx && break ;;
      6) IM=none && break ;;
      9) IM=status && break ;;
      *) ;;
    esac
  done
fi


## 選択した項目の処理 
# ステータス表示 
if [ $IM = status ]; then
CheckPackages
cat<<EOF

setime - ver.$VER
-----------------------------------------
`eval CurIMEMsg_$LOCALE`
-----------------------------------------
`eval EnvVarMsg_$LOCALE`
XMODIFIERS=$XMODIFIERS
GTK_IM_MODULE=$GTK_IM_MODULE
QT_IM_MODULE=$QT_IM_MODULE
XIM_PROGRAM=$XIM_PROGRAM
-----------------------------------------
`eval PackageStatMsg_$LOCALE`
mozc   : $MOZC
anthy  : $ANTHY
libkkc : $LIBKKC

ibus       : $IBUS
ibus-gtk   : $IBUS_GTK
ibus-gtk3  : $IBUS_GTK3
ibus-qt4   : $IBUS_QT4
ibus-mozc  : $IBUS_MOZC
ibus-anthy : $IBUS_ANTHY
ibus-kkc   : $IBUS_KKC

scim       : $SCIM
scim-qt4   : $SCIM_QT4
scim-gtk3  : $SCIM_GTK3
scim-anthy : $SCIM_ANTHY

scim-bridge     : $SCIM_BRIDGE
scim-bridge-gtk : $SCIM_BRIDGE_GTK
scim-bridge-qt4 : $SCIM_BRIDGE_QT4

uim      : $UIM
uim-gtk3 : $UIM_GTK3
uim-qt4  : $UIM_QT4
uim-mozc : $UIM_MOZC

fcitx      : $FCITX
fcitx-mozc : $FCITX_MOZC
-----------------------------------------

EOF
#
else
# 各入力メソッドの設定
if [ $UID = 0 ]; then
  ASROOT=1
  eval $SETIME_PATH/setime-sub $IM $ASROOT || exit 1
else
  # ユーザーで実行している場合には、システムワイドな設定にするか質問
  echo ""
  if [ $LOCALE = ja ]; then
    echo "入力メソッドとして $IM が選択されました。"
    echo ""
    echo "  1. $IM をシステムの標準の入力メソッドとして設定する"
    echo "  2. $IM は現在のユーザー ($USER) のみに有効とする"
  else
    echo "You selected $IM."
    echo ""
    echo "  1. $IM is set as a default input method of the system."
    echo "  2. $IM is set for a current user only."
  fi
  echo ""
  while true; do
    if [ $LOCALE = ja ]; then
      read -p "どちらの設定を行いますか？ (1 or 2): " ASROOT
    else
      read -p "Which do you select ? (1 or 2): " ASROOT
    fi
    case $ASROOT in
      1)
        echo ""
        su -m -c "eval $SETIME_PATH/setime-sub $IM $ASROOT" || exit 1
        break
        ;;
      2)
        eval $SETIME_PATH/setime-sub $IM $ASROOT || exit 1
        break
        ;;
      *) ;;
    esac
  done
fi
#
# 終了メッセージの表示
eval ExitMsg_$LOCALE $IM $ASROOT
#
fi


## 終了処理
unsetImeFuncs


exit 0
