現在地: Visual LANSA を使用したWeb アプリケーション > 14. ウィジェットとサードパーティ統合 > 14.1 ウィジェット > 14.1.3 ウィジェットの例

14.1.3 ウィジェットの例

次のソース例は、Visual LANSA で提供される Google 円グラフのサンプル・ウィジェットのコピーです。

function( PROTOTYPE, WIDGET )

{

  //--------------------------------------------------------------------------

  // Google 円グラフが完成した場合のみ、このグラフをロードして Widget 完了

  //--------------------------------------------------------------------------

  google.load( 'visualization', '1', { packages:["corechart"], callback:WIDGET.Finalize } );

 

  //--------------------------------------------------------

  // WIDGET-インターフェース 関数 (VL-ランタイムからの呼び出し)

  //--------------------------------------------------------

 

  //

  // 'onCreateInstance' - LANSA がこのクラスのインスタンスを作成時に呼び出し

  //

  PROTOTYPE.onCreateInstance = function()

  {

    // Create the datatable

    this.m_DataTable = new google.visualization.DataTable();

 

    this.m_DataTable.addColumn( 'string', 'Caption' );

    this.m_DataTable.addColumn( 'number', 'Value' );

  }

  

  //

  // 'onRealizeControl' - LANSA がこのクラスのインスタンスのビジュアル表現作成時に呼び出し

  //

  // パラメータ:

  //

  // - parentDiv : このコントロールのコンテナとして作成された Divこのサイズとスタイルは RDMLX でコントロール。

  //               コンテンツは以下の JavaScript でコントロール

  //

  PROTOTYPE.onRealizeControl = function( parentDiv )

  {

    // 円グラフ作成

    this.m_Chart = new google.visualization.PieChart( parentDiv );

 

    // イベント・ハンドラーを連結

    this.AttachEvents();

 

    // 描画の準備完了

    this.DrawChart();

  }

 

  //

  // 'onSizeChanged - ウィジェトのサイズ変更時に呼び出し

  //

  PROTOTYPE.onSizeChanged = function()

  {

    this.DrawChart();

  }

 

  ////////////////

  // プロパティ //

  ////////////////

 

  //

  // getTitle

  //

  PROTOTYPE.getTitle = function()

  {

    return this.m_Title;

  }

 

  //

  // setTitle

  //

  PROTOTYPE.setTitle = function( strTitle )

  {

    this.m_Title = strTitle;

 

    this.DrawChart();

  }

 

  /////////////

  // メソッド //

  /////////////

 

  //

  // Insert - データを円グラフに挿入

  //

  // パラメータ:

  // - 値: 整数

  // - キャプション: 文字列

  //

  // 戻りタイプ : 整数

  //

  PROTOTYPE.Insert = function( iValue, strCaption )

  {   

    var index = this.m_DataTable.addRow( [ strCaption, iValue ] );

 

    this.DrawChart();

 

    return index;

  }

 

  //

  // Clear - すべてのデータをクリア

  //

  PROTOTYPE.Clear = function()

  {

    //メンバのデータ初期化

    this.m_DataTable.removeRows( 0, this.m_DataTable.getNumberOfRows() );

 

    this.DrawChart();

  }

 

  //

  // 削除 - 円グラフから指定のインデックスを削除

  //

  // パラメータ:

  // - インデックス: 整数

  //

  PROTOTYPE.Remove = function( index )

  {

    index -= 1;

 

    if ( ( index >= 0 ) && ( index < this.m_DataTable.getNumberOfRows() ) )

    {

      this.m_DataTable.removeRow( index );

 

      this.DrawChart();

    }

  }

 

  //////////////////////

  // ヘルパー機能 //

  //////////////////////

 

  //

  // DrawChart

  //

  PROTOTYPE.DrawChart = function()

  {

    if ( this.m_Chart )

    {

      // Draw it using our data.

      this.m_Chart.draw( this.m_DataTable,

      {

        title          : this.m_Title,

        legend         :'none',

        pieSliceText   :'label',

        backgroundColor:'transparent'

      });

    }

  }

 

  //

  // AttachEvents

  //

  PROTOTYPE.AttachEvents = function()

  {

    var pThis = this;

 

    // イベント: select

    google.visualization.events.addListener( this.m_Chart, 'select', function()

    {

      var

        selectedItem = pThis.m_Chart.getSelection()[0];

 

      if ( selectedItem )

      {

        pThis.fireItemSelected( ( selectedItem.row + 1 ), pThis.m_DataTable.getValue( selectedItem.row, 1 ), pThis.m_DataTable.getValue( selectedItem.row, 0 ) );

      }

    }); 

  }

 

  // ロード中 (コールバック待ち)

  return WIDGET.Loading;

}