[Sumika-devel 24] Re: libuim custom API対応

Back to archive index

YamaKen yamak****@bp*****
2004年 5月 17日 (月) 17:27:35 JST


ヤマケンです。

At Mon, 17 May 2004 13:27:38 +0900,
ashie****@homa***** wrote:
> On Thu, 13 May 2004 17:26:28 +0900
> YamaKen <yamak****@bp*****> wrote:
> 
> > 上記のstruct _uim_configと同様、GUIによる設定項目の構成も静的な
> > コードによって実現されていますが、libuimから取得した設定データに
> > 応じて未知の設定項目に対しても動的にUIを生成できるようになると便
> > 利なので、custom APIもそれを前提に設計してあります。
> 
> まずここに反応します。この話を初めて聞いたときから疑問に思っていながら聞
> くのを忘れていましたが、「動的に生成する」というのはどの程度の規模で考え
> ておられるのでしょうか?
> 
> 全てのUIを完全に動的に生成するのでしょうか?

まず始めに、uimのcustom APIは決してフルセットのUI記述言語を作ろ
うというような方向性ではありません。あくまでもuimの設定に限定し
た特定用途向けの機構です。

基本的に、現在のSumikaが実装しているuim向け設定画面の構造をその
ままトレースしたような構成で設定項目をまとめています。私が「UI生
成」と言っているのは基本的に以下のような処理の事です。Schemeのコー
ドで例示していますが、各APIのC版がuim-scm.hに用意されています。


1. 設定項目のグループを取得し、ここで得られた各グループに対応す
   るタブを生成する

  (custom-list-primary-groups)
  => (global anthy canna skk prime other-ims spellcheck)

  (custom-group-label 'anthy)
  => "Anthy"

  (custom-group-desc 'anthy)
  => "long description will be here."

2. 各グループに属する設定項目のリストを取得する

  (custom-collect-by-group 'anthy)
  => (anthy-segment-separator anthy-show-segment-separator?
      anthy-nr-candidate-max anthy-candidate-op-count
      anthy-use-candidate-window?)

3. 各項目毎に必要な情報を取得し、それに応じたwidgetを各グループ
   のタブに追加。タイプとwidgetの対応はintegerならspinbox、
   booleanならcheckbox等、一対一

  - 設定項目のタイプ
    (custom-type 'anthy-nr-candidate-max)
    => integer

  - 設定可能な値の範囲
    (custom-range 'anthy-nr-candidate-max)
    => (1 20)

  - 現在の設定値
    (custom-value 'anthy-nr-candidate-max)
    => 10

  - 設定項目の説明
    (custom-label 'anthy-nr-candidate-max)
    => "Number of candidates in candidate window at a time"

  - 設定項目の詳細説明
    (custom-desc 'anthy-nr-candidate-max)
    => "long description will be here."

> あるいは「キー設定一覧」のように、ある程度一まとまりの設定を動的に取得す
> るという雰囲気でしょうか?

キー設定については[Sumika-devel 21]で触れたようにまだ迷っている
部分があるんですが、基本的に他の設定項目と同様の扱いで単に設定項
目のタイプが「キー」と定義されているだけにする予定です。これに対
応するwidgetはkey capturing等に対応した専用のものが用意される事
を想定しています。

AnthyやSKKといったIM毎のタブの他に「キー設定一覧」のようなタブを
用意して各IMのキーバインドを横断的に設定できた方が便利かもしれま
せんが、それを実現する場合もuim側で設定項目のグルーピングを調整
する事で実現し、Sumika側はあくまでもuimから渡された情報に応じて
受動的にタブとwidgetを生成するだけで済むようにしたいと思います。

> いずれにしても、あまりやり過ぎると、おもてさんが仰っているようにリストで
> 表示する(Mozillaのabout:configのように)以外に手が無くなってしまうので、
> 完全にUIを生成するという線は無いとは思っているのですが...

設定項目が多すぎて収まりが悪い場合はuim側でグループを分け直す等
の対策を取って、Sumika側ではなるべく個別対応を無くしたいと考えて
います。

ただ、自動生成にこだわるあまりコードが複雑になってしまっては本末
転倒なので、特定の設定項目やグループについて個別対応するのはアリ
だと思います。例えば"Advanced settings"や"Key bindings" といった
グループを特別扱いして専用のUIでハンドリングするのは現実的だと思
います。

他にも疑問点などあったらどんどん聞いて下さい。

-------------------------------
ヤマケン yamak****@bp*****



Sumika-devel メーリングリストの案内
Back to archive index