Swyftのユーザーインターフェイス その3
クラスメソッドさんの会議室をお借りして、第76回Cocoa勉強会関東 を開催しました。
そこで、「Swyftのユーザーインターフェイス」の発表を行いました。
内容は、
- SwyftUIとは何かの説明
- MacOSXでSwiftyUI(のサブセット)を実現するアプリケーションの解説
- SwyftUIで使用する、キーボードの自作
なお、かな英数キーをLeapキーの代わりに使用しているので、JISキーボードであれば自作しなくともソフトウエアは使用できます。
プロジェクトファイルは、 TestTextEdit.zip に、pdfファイルは、 SwyftUI.pdf に置いておきます。
Swyftのユーザーインターフェイス その2
コードを書く前に、LEAPキーの状態遷移を書き出してみる。
まずはイベントの種類
| イベント名 | 説明 |
|---|---|
| LF下 | LEAP Forward keyDown event |
| LF上 | LEAP Forward keyUp event |
| LB下 | LEAP Back keyDown event |
| LB上 | LEAP Back keyUp event |
| Tab下 | Tab keyDown event |
| Tab上 | Tab keyUp event |
| その他 | その他のキーイベント |
SwyftではLeapキーを押している間だけ検索する。そのため、keyDownとKeyUpを区別する必要があり、keyDownイベントとkeyUpの2つのイベントを分けている。 TabキーはLeapキーとの組み合わせで再検索を行うためにイベントを追加した。
次に状態の種類
| 状態名 | 説明 |
|---|---|
| normal | 通常状態。各種キー入力はそのままTextViewへ渡される |
| findF | 前方検索状態。各種キー入力された文字列が検索文字列として前方逐次検索される |
| findB | 後方検索状態。各種キー入力された文字列が検索文字列として後方逐次検索される |
| select | 選択状態。現在のカーソル位置とマークされた位置を選択状態にする。 |
状態遷移図を書くとこんな感じ。
眠いから、状態遷移表はまた次に書く。
Swyftのユーザーインターフェイス その1
Swyftとはなんぞや?
Swiftではない。
Swyftは、ジェフ・ラスキンによって開発されたテキスト編集用のユーザーインターフェイスです。 Leapキーと呼ばれる2つのキーを使用した、逐次検索を主体とした操作体系が特徴です。
こんな画像のようなキーボードで操作します。(ウィキペディアのCanonCatより) もちろん私は使ったことはない。以下の文献を元に使用感を想像するだけ。
以下の文献をふんわりと心の目で見て妄想する。
ジェフ・ラスキン本人がSwyftについて解説している。第5章「統一化」で、Swyft特有のキーボード操作について解説している。
AppleII用のソフトウェアSwyftWareの使用レポート。日本語でSwyftの雰囲気がわかる貴重な文献です。 私にとっては、「ヒューメイン・インタフェース」より解りやすかった。
SwyftのUIを採用している、CanonCatの雰囲気がわかる。キー操作と画面の関係はこの動画を見ると腑に落ちる感じ。
そして、冬休みの工作の時間が始まる。
LEAPキーがないから作る
まずは、Leapキーがあるキーボードをデッチ上がる必要がある。
で、コレ。冬休みの工作としては良くできた。
HHKと 英数/かなキーボード を2個位置しただけ。 英数/かなキーボードは、基盤だけ自作の傾斜台に釘で打ち付けた。
スペースキーの前にキーを置くのは想像以上に打ちやすい。ただし、キーボードの配置そのものよりもキーの高さが打ちやすさに関係していると思われる。
スペースキーを押したときの高さよりも、Leapキーの高さが低い必要がある。 そうしないと、スペースキーを押したときにLeapキーを誤って押してしまうことがあった。
BDRuleEngine
BDRuleEngineは以下のサイトで配布しているルールエンジン。 http://eschatologist.net/bDistributed.com/
10年以上前にObjective-Cで書かれた。WebObjectsのDirectToWebのルールエンジンを再実装したものらしい。 前々回のCocoa勉強会で手直ししたものを発表したので、zipでまとめておく。
手直しの内容は、
- BDQualifier was replaced by NSPredicate.
- BDSortOrdering was replaced by NSSortDescriptor.
- BDControl was replaced by cocoa binding.
- Adds BDExpressionAssignment class.
プロジェクトファイルは以下からダウンロードできる。
