UNO Grid Control

From Apache OpenOffice Wiki
< API‎ | UNO AWT
Revision as of 06:31, 6 August 2009 by Tkr (Talk | contribs)

Jump to: navigation, search

Abstract

OpenOffice.org hasn't a Grid Control via UNO API today. The goal is to develop and implement an UNO Grid Control.

Overview

Overview gridcontrol.png

Example

Create new columns:

 // #1 column
 Object column1Obj = xMultiComponentFactory.createInstanceWithContext(
                "com.sun.star.awt.grid.GridColumn", m_xContext);
 
 XGridColumn column1 = (XGridColumn) UnoRuntime.queryInterface(
                XGridColumn.class, column1Obj);
 
 column1.setTitle("Column1");
 
 // #2 column
 Object column2Obj = xMultiComponentFactory.createInstanceWithContext(
                "com.sun.star.awt.grid.GridColumn", m_xContext);
 XGridColumn column2 = (XGridColumn) UnoRuntime.queryInterface(
                XGridColumn.class, column2Obj);
 
 column2.setTitle("Column2");

Add the columns to the column model of the grid control:

 Object columnModel = xMultiComponentFactory.createInstanceWithContext(
                "com.sun.star.awt.grid.DefaultGridColumnModel", m_xContext);
 XGridColumnModel xGridColumnModel = (XGridColumnModel) UnoRuntime.queryInterface(
                XGridColumnModel.class, columnModel);
 
 xGridColumnModel.addColumn(column1);
 xGridColumnModel.addColumn(column2);

Use the data model of the grid control to add rows:

 Object dataModel = xMultiComponentFactory.createInstanceWithContext(
                "com.sun.star.awt.grid.DefaultGridDataModel", m_xContext);
 XGridDataModel xGridDataModel = (XGridDataModel) UnoRuntime.queryInterface(
                XGridDataModel.class, dataModel);
 
 xGridDataModel.addRow("1", new String[] {"1,1","1,2"} );
 xGridDataModel.addRow("2", new String[] {"2,1","2,2"} );

Create the grid model and assign the column and data model:

 Object gridModel = xMultiServiceFactory.createInstance(
                "com.sun.star.awt.grid.UnoControlGridModel");
 XPropertySet xPSetButton = (XPropertySet) UnoRuntime.queryInterface(
                XPropertySet.class, gridModel);
 
 xPSetButton.setPropertyValue("PositionX", new Integer(50));
 xPSetButton.setPropertyValue("PositionY", new Integer(30));
 xPSetButton.setPropertyValue("Width", new Integer(400));
 xPSetButton.setPropertyValue("Height", new Integer(400));
 xPSetButton.setPropertyValue("Name", "GridControl");
 xPSetButton.setPropertyValue("TabIndex", new Short((short) 0));
 xPSetButton.setPropertyValue("ColumnModel", xGridColumnModel);
 xPSetButton.setPropertyValue("DataModel", xGridDataModel);

Event Handling

Supported Listeners

Name Method Comments
XGridDataListener
rowAdded
rowRemoved Invoked after a remove row call. If removedAll was called the GridDataEvent.Index contains -1.
dataChanged
XGridColumnListener
columnAdded
columnRemoved
columnChanged
XMouseListener
mousePressed
mouseReleased
mouseEntered Not yet implemented.
mouseExited Not yet implemented.
XGridSelectionListener Not yet implemented.
selectionChanged

XGridDataListener

XGridColumnLisener

XMouseListener

Known Issues

Iteration Description Task ID Status Comments
1 Currently it's not possible to grain the focus with the TAB key - new
1 If the property UnoControlGridModel HScroll is set to TRUE. All data were drawn in a small rectangle in the upper left corner - new
1 If the property UnoControlGridModel HScroll is set to FALSE and many columns were added. The office crashes if you slide with the scrollbar to the right end. - fixed
1 If the property UnoControlGridModel SelectionModel is set to NONE. It's still possible to navigate with the arrow keys through the grid but mouse actions were ignored. - fixed
1 All selection were removed by using left or right arrow keys. Usage of left or right arrow keys shouldn't have an effect on selection - fixed
1 If text content of a cell doesn't fit into the cell it's overwrites the neighbour cell - new

Feature Set

  • Width for each column
  • Height for each row
  • Each cell has its own data type
  • Column and row header
  • Vertical and horizontal scrollbars
  • Row selection ( Single, Multi, Range )
  • Auto resizing
  • A11y

Planned Iteration

Iteration Due date Status Comment Description Components
1 2009-07-31 QA

To do:

  • UnoControl
  • Selection
  • Textdata only
  • Eventhandling
  • Scrollbars
  • Scrollbar modi
  • Column and row headers
  • UNO
    • IDL
    • Impl.
  • VCL
    • Impl.
2 2009-08-28 in progress

To do:

  • Eventhandling
  • Different data types
  • A11y
  • UNO
    • IDL
    • Impl.
  • VCL
    • Impl.
3 open

To do:

  • modify column and row size
  • exception handling
  • A11y
  • UNO
    • IDL
    • Impl.
  • VCL
    • Impl.
4 open

To do:

  • Auto resizing
  • A11y
  • UNO
    • IDL
    • Impl.
  • VCL
    • Impl.
5 open

To do:

  • Basic IDE
  • Docs/Wiki |
  • IDE
    • Import/Export
    • UI
  • Doc
    • Wiki
    • SDK-Examples

Grid specification

Key And Mouse Usage

Action Selection Modus Description
Selection possibilities with the mouse
Mouse click in a cell SINGLE / RANGE / MULTI Single row selection.
Ctrl + mouse click in a cell MULTI Multiple rows selection possible, if row has been already selected, deselects it.
Shift + mouse click in a cell RANGE / MULTI Multiple rows selection, range is between current row and the chosen one.
Selection possibilities with the keyboard
Ctrl + Alt SINGLE / RANGE / MULTI Single row selection, if row has been already selected, deselects it.
Shift + UP RANGE / MULTI Multiple rows selection above current row, if rows above the current one have been already selected, they can be deselected one by one.
Shift + DOWN RANGE / MULTI Multiple rows selection beneath current row, if rows beneath the current one have been already selected, they can be deselected one by one
Shift + HOME RANGE / MULTI Multiple row selection, range is between current row and top one.
Shift + END RANGE / MULTI Multiple row selection, range is between current row and bottom one

.

  • Resizing
Personal tools