Top > OOoBasic > Dialog > GridControl

* グリッドコントロール [#q1d45258]

OOo 3.3 から利用できますが、お勧めできません、[[グリッドコントロール(3.3)>../GridControl33]]参照。3.4 で色々変更があったので 3.4 以降での利用をお勧めします。3.4 と指定がある部分は LibreOffice 3.4 では動作しません。

//LibreOffice では Apache OpenOffice の少し古いバージョンのインターフェースを中途半端に更新された状態で実装されています。両方のバージョンで動作するように実装するのはかなり大変です。

ダイアログエディタでは現在は作成できません。

#contents
** モデルプロパティ [#e23af7a8]
- [[ヘルプテキストとヘルプ URL>../Common#he87424b]]
- [[位置>../Common#g02345ee]]

3.4
|プロパティ|型|説明|h
|GridDataModel|.awt.grid.XGridDataModel|データ|
|ColumnModel|.awt.grid.XGridColumnModel|カラムデータ|
|RowBackgroundColor|long|背景色|
|EvenRowBackgroundColor|long|偶数行の背景色|
|ShowRowHeader|boolean|行ヘッダの表示|
|ShowColumnHeader|boolean|列ヘッダの表示|
|RowHeaderWidth|long||
|ColumnHeaderHeight|long||
|RowHeight|long||
|UseGridLines|boolean||
|GridLineColor|long||
|HeaderTextColor|long||
|RowBackgroundColors|[]long||
|VerticalAlign|.style.VerticalAlignment||
|HeaderBackgroundColor|long|ヘッダの背景色|
|SelectionModel|.view.SelectionType|選択形式|
|HScroll|boolean|水平スクロールバーの表示|
|VScroll|boolean|垂直スクロールバーの表示|
|LineColor|long|線の色|
|TextColor|long|テキストの色|
|TextLineColor|long||

いまのところ表示するフォントと文字のサイズを変更できません。

*** コントローラ [#z9185ffc]
コントローラからからは選択範囲の操作などが行えます。選択モードの設定はモデルのプロパティで行います。モードによっては各メソッドから取得できる選択範囲のインデックスに注意が必要です。

css.awt.grid.XGridControl インターフェース

3.4 
- long getColumnAtPoint( [in] long x, [in] long y )
-- 近い列インデックスを返します。
- long getRowAtPoint( [in] long x, [in] long y )
-- 近い行インデックスを返します。
- long getCurrentColumn()
-- アクティブな列インデックスを返します。
- long getCurrentRow()
-- アクティブな行インデックスを返します。

3.4 ではツールチップはデータモデルが担当します。

css.awt.grid.XGridSelection ベースインターフェース

- void selectAllRows()
-- 全ての行を選択します。
- void selectRows( [in] long[] rows )
-- 指定した行を選択します。
- void deselectAllRows()
-- 全てのセルの選択を解除します。
- void deselectRows( [in] long[] rows )
-- 指定した行の選択を解除します。
- long[] getSelection()
-- 選択されている行のインデックスを取得します。
- boolean isSelectionEmpty()
-- 行が選択されているかどうか調べます。
- boolean isSelectedIndex( [in] long index )
-- 指定した行が選択されているかどうか調べます。
- void selectRow( [in] long index )
-- 指定した行を選択します。
- void addSelectionListener( [in] css.awt.grid.XGridSelectionListener listener )
-- 選択変更リスナーを追加します。
- void removeSelectionListener( [in] css.awt.grid.XGridSelectionListener listener )
-- 選択変更リスナーを削除します。
以下は 3.4 で削除。
- long getMinSelectionIndex()
-- 選択されている行の最小のインデックスを返します。
- long getMaxSelectionIndex()
-- 選択されている行の最大のインデックスを返します。

** 作成 [#ya8cb30c]
一般的なダイアログコントロールを動的に作成する時と同じように com.sun.star.awt.grid.UnoControlGridModel サービスをダイアログモデルからインスタンス化します。

  DialogLibraries.loadLibrary("Standard")
  oDialog = CreateUnoDialog( _
    DialogLibraries.getByName("Standard").getByName("Dialog1"))
  oDialogModel = oDialog.getModel()
 
  oGridModel = oDialogModel.createInstance( _
      "com.sun.star.awt.grid.UnoControlGridModel")
 
   with oGridModel
    .PositionX = 10
    .PositionY = 10
    .Width = 190
    .Height = 100
    .Name = "Grid"
    ' adds ColumnModel and GridDataModel
  end with
 
  oDialogModel.insertByName("Grid1", oGridModel)
  oDialog.execute()

ColumnModel および GridDataModel プロパティを正しく設定する前にダイアログにコントロールを追加しようとするとクラッシュします。列および行については下記参照。

** 列 [#ud2cf12c]
3.4 以降ではグリッドのカラムモデルはデフォルトで設定されています。特に変更がなければそれを取得、列を指定して利用します。カラムは createColumn メソッドを利用して作成します。

 oColModel = oGridModel.ColumnModel
 
 oGridCol1 = oColModel.createColumn()
 oGridCol1.Title = "Col 1"
 
 oColModel.addColumn(oGridCol1)


列のプロパティ
|プロパティ|型|説明|h
|Title|string|列タイトル|
|ColumnWidth|long|列幅|
|Identifier|any|列識別子|
|PreferredWidth|long|推奨幅|
|MinWidth|long|最小幅|
|MaxWidth|long|最大幅|
|Resizeable|boolean|列幅手動調整可能|
|HorizontalAlign|.style.HorizontalAlignment|水平方向配置|

css.awt.grid.XGridColumnModel

- long getColumnCount()
-- 列数を取得します
- long addColumn( [in] css.awt.grid.XGridColumn column )
-- 列を追加します
-  []css.awt.grid.XGridColumn getColumns()
-- すべての列を取得します
- css.awt.grid.XGridColumn getColumn( [in] long index )
-- 指定したインデックスの列を取得します。
- void setDefaultColumns( [in] long elements )
-- デフォルトの列数を設定します
- css.awt.grid.XGridColumn createColumn()
-- 新規列を作成します。
- void removeColumn( [in] long index )
-- 指定した列を削除します。


** 行データ [#k7f9a6a5]
3.4 以降ではグリッドデータモデルはデフォルトで作成されます。デフォルトではソート可能な css.awt.grid.SortableGridDataModel サービスが利用されます。ソートを無効にしたいときには css.awt.grid.DefaultGridDataModel サービスをインスタンス化して設定してください。

 oDataModel = oGridModel.GridDataModel

3.4

css.awt.grid.XGridDataModel インターフェース
- any getCellData( [in] long columnIndex, [in] long rowIndex )
- any getCellToolTip( [in] long columnIndex, [in] long rowIndex )
- any getRowHeading( [in] long rowIndex )
- long RowCount
-- attribute 行数
- long ColumnCount
-- attribute 列数

css.awt.grid.XMutableGridDataModel インターフェース
- void addRow( [in] string header, [in] seq<any> data)
-- 行を最後に追加します。
- void addRows( [in] seq<any> headings, [in] seq<seq<any>> data)
-- 複数行を一度に追加します。
- void removeRow([in] long index)
-- 指定行を削除します。
- void removeAllRows()
-- 全てのデータ行を削除します。
- void updateCellData( [in] long row, [in] long column, [in] any value)
-- 指定したセルのデータを更新します。
- void updateRowData([in] long row, [in] seq<long> columns, [in] seq<any> values )
- void updateRowHeading( [in] long rowIndx, [in] any data )
- void updateCellToolTip( [in] long column, [in] long row, [in] any data )
- void updateRowToolTip( [in] long rowIndx, [in] any data )
-- 行中の指定した列のデータを更新します。
- void addGridDataListener([in] css.grid.XGridDataListener listener)
-- リスナーを追加します。
- void removeGridDataListener([in] css.grid.XGridDataListener listener)
-- リスナーを削除します。

|プロパティ|型|説明|h
|Data|[][]any|表示データ|
|RowHeaderWidth|long|行ヘッダ幅|
|RowHeaders|[]string|行ヘッダデータ|
|RowHeight|long|行高さ|

データには文字列、数値の他、次のようにして画像を表示できます。
  Dim aProps(0) As New com.sun.star.beans.PropertyValue
  aProps(0).Name = "URL"
  aProps(0).Value = "file:///home/asuka/Documents/images/img.png"
  oGP = CreateUnoService("com.sun.star.graphic.GraphicProvider")
  oG1 = oGP.queryGraphic(aProps)
  
  oDataModel = createUnoService( "com.sun.star.awt.grid.DefaultGridDataModel")
  oDataModel.addRow ( "1", Array(oG1, "Germany") )
** GridDataModel (3.4) [#yb5e74ed]
** GridDataModel [#yb5e74ed]
AOO 3.4 では 3.3 と少しインターフェースが変更されてるため注意が必要です。しかし、グリッドの途中に行を挿入できるメソッドなどが追加されて使いやすくなりました。また、インターフェースが finalize されて今後は大きな変更は無い予定です。

独自の GridDataModel を実装する場合、css.awt.grid.XGridDataModel インターフェースだけでなく、css.uno.XWeak インターフェースも実装してください。そうしなければグリッドコントロールの内容が正しく表示されません。

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes