SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CurlデベロッパーセンターPick Up(AD)

モバイルアプリをCurlで作る!

  • X ポスト
  • このエントリーをはてなブックマークに追加

手順3)作成したCurlプロジェクト上でアプリ画面を実装

 前述の手順2までで、諸設定は完了しました。いよいよ画面を実装していきます。

実装(第1画面)

 この画面を作成するためのCurlのソースコードを紹介します。この画面では、CaedeListViewにて3行の商品情報を出力します。各明細をクリックすると、個別の画面が起動する仕組みです。Caedeでは、各画面ごとに画面クラスと画面コントロールクラスを定義する必要があります。

サンプルアプリ 第1画面
サンプルアプリ 第1画面

画面クラス

 まずは、画面クラスから確認してみましょう。画面クラスのことをGraphicクラスと呼びます。

画面クラス(GamenAGraphic):Ag.scurl
{define-class public GamenAGraphic
  {inherits Frame}
  {constructor public {default}
    {construct-super
        {VBox
            width = 480px,
            height = 800px,
            background = "#C6CDD5",
            {HBox
                width = 480px,
                height = 80px,
                background = "#798EA9",  
                valign = "center",
                {caede-image {url "./image/title.gif"}, width = 40px, height = 40px},
                {Fill width = 5px},
                {TextFlowBox color = "white", font-size = 24px, width = 300px,"Inventory control system for mobile" }
            },
            {VBox
                width = 480px,
                {Fill height = 10px},
                {HBox
                    width = 480px,
                    height = 50px,
                    valign = "center",
                    {caede-image {url "./image/icon1.png"}},
                    {TextFlowBox width = 200px , color = "white", font-size = 24px, "Item List" }
                },
                {CaedeListView
                    width = 480px,
                    name = "b-list-view",
                    font-size = 24px,
                    icon-map =
                        {new {HashTable-of String, Url},
                            "1", {url "./image/image001.png"},
                            "2", {url "./image/image003.png"},
                            "3", {url "./image/image003.png"}
                        },
                    {CaedeListViewItemDivider "商品名"},
                    {CaedeListViewItemData "ハロゲンヒータ(赤)", "名称1" ,height = 80,icon-name = "1"},
                    {CaedeListViewItemData "ハロゲンヒータ(青)", "名称2" ,height = 80,icon-name = "2"},
                    {CaedeListViewItemData "ハロゲンヒータ(黄)", "名称3" ,height = 80,icon-name = "3"}
                }
            }
        }
    }
  }
}

 画面クラス「GamenAGraphic」を定義しています。コンストラクタにてレイアウトを定義しています。

 HBoxと呼ばれる枠にVBoxがありその中にHBox、CaedeListViewがあります。HBoxとは、水平方向にGraphicのコレクションを配置するためのコンテナで、Curl上でレイアウトを作成する際にはおなじみのオブジェクトです。同様にVBoxは垂直方向に配置するためのものです。Fillはグラフィックディスプレイの空き領域を埋め、パディングを提供します。TextFlowBoxは、テキストをグラフィック階層内に表示するために使用します。今回は"Item List"を表示しています。

 また、Curlの標準APIには存在しないオブジェクトとして、下記の2つを使用しています。

  • CaedeListView:モバイル用のGUIとして提供されているオブジェクト
  • caede-image:モバイル上で画像を表示するためのプロシジャ

 続いて、オブジェクトのプロパティ(パラメータ)を見ていきましょう。幅(width)や高さ(height)、背景(background)などは想像がつくと思います。valignとは、HBoxのグラフィカルな子の間の垂直方向の整列方法を指定するためのプロパティです。今回はHBox内にある画像、TextFlowBoxをHBox内で中央に揃えるために"center"を指定しています。Curl言語では、レイアウトをきめ細かく制御するための多数のプロパティが用意されており、モバイルを実装する際も利用することができます。

 Curlで利用できるGUIは他にも多数存在し、そのままCaedeでも利用できます(※現在のCaedeはプレビュー版のため、Curlで用意されている全てのGUIが使えるわけではありません)。

画面コントロールクラス

 次に、画面コントロールクラスから確認してみましょう。画面コントロールクラスのことをScreenクラスと呼びます。スクリーンクラスは、グラフィッククラスを継承して作成します。

画面コントロールクラス(GamenAScreen):As.scurl
{define-class public GamenAScreen  {inherits {Screen-of GamenAGraphic}}
  
  field b-list-view:CaedeListView

  {constructor public {default}
    ||CaedeListViewのオブジェクト
    set self.b-list-view = {self.find-graphic-by-name "b-list-view"} asa CaedeListView

    ||各行にイベントを定義する。
    {self.b-list-view.set-action-handler-for-index
        {on Action do
            ||詳細画面へ遷移する。その際商品名称をパラメータで渡す。
            {self.change-page GamenBScreen, data = "ハロゲンヒータ(赤)"}
        },
        1
    }   
    {self.b-list-view.set-action-handler-for-index
        {on Action do
            {self.change-page GamenBScreen, data = "ハロゲンヒータ(青)"}
        },
        2
    }
    {self.b-list-view.set-action-handler-for-index
        {on Action do
            {self.change-page GamenBScreen, data = "ハロゲンヒータ(黄)"}
        },
        3
    }
  }
}

 Screenクラスでは、画面を操作するための手続きを定義します。上記例では、CaedeListViewの各行がクリックした際のイベントを定義しています。

{self.b-list-view.set-action-handler-for-index
    {on Action do
        ||詳細画面へ遷移する。その際商品名称をパラメータで渡す。
        {self.change-page GamenBScreen, data = "ハロゲンヒータ(赤)"}
    },
    1
}   

 この定義は、明細行をクリックした際に、詳細画面へ遷移するためのロジックです。画面遷移するには、{change-page}と書くだけで遷移できます。画面遷移時にパラメータを渡すこともできます。

 なお、ボタンが押された際のイベントは次のように定義します。

{self.bt-hachu.add-event-handler
    {on Action do
        ||TODO:ボタン押下時の処理・・・・
    }
}

 Curlではリッチクライアントならではの多くのイベントハンドラが用意されています。GUIと同様に、Curlで利用できるイベントハンドラは他にも多数存在し、そのままCaedeでも利用できます(※現在のCaedeのリリースでは機能制限があり、Curlで用意されている全てのイベントハンドラが使えるわけではありません)。

次のページ
実装(第2画面)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
CurlデベロッパーセンターPick Up連載記事一覧

もっと読む

この記事の著者

SCSソリューションズ株式会社 井野 恵介(イノケイスケ)

2000年、九州住商情報システムに入社後多くのERPパッケージ開発を担当、その後現在のCurlビジネスに従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6351 2012/02/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング