LoginSignup
0
0

More than 5 years have passed since last update.

「FMC2Goスケジューラーにおけるレスポンシブ・デザイン」の続き

Last updated at Posted at 2015-12-13

FileMaker Advent Calendar 2015の14日目

「FMC2Goスケジューラーにおけるレスポンシブ・デザイン」の続き

前回のFMC2Goスケジューラーにおけるレスポンシブ・デザインの続きです

引き続き「OnFirstWindowOpen」イベントに設定されている「OnOpen」スクリプトを見ていく

「OnOpen」というスクリプトは、なにをしている?

グローバル変数「$$device」を設定する

151213-04.png

グローバル変数「$$device」に
Desktop
という値を設定している

Let ( [

    //  set $$debug to "iPhone" or "iPad" to spoof the device type on a desktop machine; set to 1 to help troubleshoot on-device; set to empty to disable debug mode.
    $$debug = ""

] ; 

    Case    (

        PatternCount ( Get ( アプリケーションバージョン ) ; "Go_iPad" ) or $$debug = "iPad" ; 
            "iPad" ; 

        PatternCount ( Get ( アプリケーションバージョン ) ; "Go" ) or $$debug = "iPhone" ; 
            "iPhone or iPod Touch" ; 

        "Desktop"

    )
)

まずLet関数でグローバル変数「$$debug」を設定しているようだ

グローバル変数はファイル内にある計算式またはスクリプト、たとえば他のスクリプトやファイルパスなどで使用できます。グローバル変数の値はファイルが閉じられるときに消去されます。

このグローバル変数「$$debug」に値を設定することでPC環境でも

  • 「iPad」を設定するとiPad
  • 「iPhone」を設定するとiPhone、 iPod Touch

を使った時の動作を確認(デバッグ)できるようだ

FileMakerPro Advanced版では「データビューア」を使って変数の値を書き換えることができるので、その機能のないFileMakerProでも確認できるように実装されているのでしょう

ここではPatternCount関数を使って判定を行っているようだ
Get ( アプリケーションバージョン )関数で取得したものに

  • 「Go」が含まれていたらiPhoneかiPod Touchで動作している
  • 「Go_iPad」が含まれていたらiPadで動作している
  • いずれにも当てはまらなければPCで動作している

としているようだ

PatternCount関数

目的
テキストに、検索テキストで指定された文字列がいくつ含まれているのかを返します。
構文
PatternCount ( テキスト ; 検索テキスト )

同じスクリプトの中で、値に「Go」なり「Go_iPad」なりが含まれているかの判定に

  • Left関数+Position関数を使ったアプローチ
  • PatternCount関数を使ったアプローチ

の両方を使って実装されているのは、このソリューションの作成者がスクリプト実装のお手本としても使わせようとしている意図でしょうか
もしかして各地で読書会ならぬスクリプト分析会が行われているのでしょうか?

まだまだ「OnOpen」スクリプトは続くが、レスポンシブ・デザインに絡みそうな部分はここまでのようなので、ここまでにしておく

「OnOpen」スクリプトで定義したグローバル変数はどう使われているか

ソリューションには各機能について

  • iPhone用のレイアウト
    151213-05.png

  • iPadのレイアウト
    151213-06.png

のレイアウトが定義されている
※このソリューションではPCはiPad用のレイアウトを使用している

レイアウト名の末尾がiPhoneとiPadになっている同じ機能のレイアウトが用意されているのがミソ

ソリューションが開かれた時に「OnOpen」スクリプトを実行することで、いくつかのグローバル変数を定義し値を保存している
そのグローバル変数の値を基にレイアウトの切り替えを行うことで適切なレイアウトへのナビゲートを実現している

あるスクリプトの例

グローバル変数「$$device」を基にレイアウトを特定するためのローカル変数「$suffix」を設定
151213-07.png

遷移先として指定されたレイアウトにローカル変数「$suffix」を結合して存在するレイアウト名に読み替えをする
151213-08.png

グローバル変数「$$device」から直接切り替えるレイアウトを決める
151213-09.png

いままで書いてきたような方法で各デバイスに最適なレイアウトの選択(=レスポンシブ・デザイン)を実現している

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0