今日はかなり大雨でしたね。こんな日は走りません。風邪引くわけにもいきません。
さて、誰が見ているのか分からないこのシリーズ。インターネットの世界の不良資産にでもなってくれればという思いで書き綴っていきます。
前回の記事はこちら。
プロジェクトにあるソースの構成
Widgetの構築です。プロジェクトを新規構築した時には、クラスは2種類できてきました。1つ目のGenmaiWebHooksWidgetApp.mc(Appクラス)が、Widgetのコントロールを行うメインのプログラム。2つ目のGenmaiWebHooksWidgetView.mc(Viewクラス)が画面表示を行うプログラムです。実はもう一つ必要なんですが、それはまた後述。
今日は、まず最初のAppソースを編集しておこうと思います。
Appクラスの構造
AppクラスはToybox :: Application :: AppBaseを継承して作られています。AppBaseの説明を公式で見るとこうなっています。
すべてのアプリはこのクラスを継承し、そのメソッドを使用してアプリのライフサイクルを管理します。
- ウィジェットとウォッチアプリの場合、これらの関数は次の順序で呼び出されます。
- onStart()
- getInitialView()
- onStop()
onStart()で必要であれば初期化し、getInitialView()で表示と操作のクラスを与えて、onStop()で後始末をするんだなってことが分かります。
プロジェクトの新規構築直後のソースはこんな感じになってます。
initialize()は、解説が無いのでよく分かりませんが、コンストラクタのようです。中身は親を呼んでいるだけです。
onStart()とonStop()は、特に触らなくて良さそうです。
getInitialView()は、Viewクラスをnewして、そのままリターンしています。これでViewクラスがどれなのかを時計に知らせているんですね。
Appクラスの編集
編集するのは、getInitialView()になります。公式によるとこんな感じです。
getInitialView ⇒ Toybox::Lang::Array
オーバーライドして、アプリケーションの初期WatchUi.Viewおよび WatchUi.InputDelegateを提供します。
WatchUi.InputDelegateの提供は、ウィジェットとウォッチアプリではオプションです。
ウォッチフェイスとデータフィールドの場合、これらのアプリタイプでは使用できないため、WatchUi.Viewのみを含む配列 が返されます。
戻り値: (Toybox :: Lang :: Array) — WatchUi.Viewおよびオプションの WatchUi.InputDelegateを含む配列
それでは、オプションのWatchUi.InputDelegateってなんなのかと言うと、時計のボタン操作を受け付けるクラスのようです。これを使って時計のボタン操作を受け付けるクラスを作るんですね。
inputDelegateを調べてみると、時計のボタン操作、タッチスクリーンのタップ・スワイプなどの物理的な操作を拾うことができるようです。ただ、ボタンの配置やタッチパネルの有無など機種依存になるので、プログラミングがめんどくさい。
他にいいのが無いかなと探していると、BehaviorDelegateというクラスを発見。こちらは選択、メニュー、進む、戻るなど論理上の操作を拾えるようです。これだと機種に共通した動作で作れるので、使いやすそう。
これを継承した新規クラスを格納するファイルを作ります。
まだ、中身はからっぽです。(初期化関数すら書いてないので、警告出ます。)
さてと、では、Appコードを修正かけます。
これで行けるはず。
エラーは無かったので、これで行けたようです。
まだまだ続きます。