Difference between revisions of "API/UNO AWT/Grid Control"
From Apache OpenOffice Wiki
Line 133: | Line 133: | ||
throw new UnsupportedOperationException("Not supported yet."); | throw new UnsupportedOperationException("Not supported yet."); | ||
} | } | ||
− | } | + | }); |
</source> | </source> | ||
Revision as of 06:38, 6 August 2009
Abstract
OpenOffice.org hasn't a Grid Control via UNO API today. The goal is to develop and implement an UNO Grid Control.
Overview
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
Object dataModel = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.grid.DefaultGridDataModel", this.context);
xGridDataModel = (XGridDataModel) UnoRuntime.queryInterface(
XGridDataModel.class, dataModel);
xGridDataModel.addDataListener(new XGridDataListener() {
public void rowAdded(GridDataEvent arg0) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void rowRemoved(GridDataEvent arg0) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void dataChanged(GridDataEvent arg0) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void disposing(EventObject arg0) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
XGridColumnLisener
Object columnModel = this.m_factory.createInstanceWithContext(
"com.sun.star.awt.grid.DefaultGridColumnModel", this.context);
XGridColumnModel xGridColumnModel = (XGridColumnModel) UnoRuntime.queryInterface( XGridColumnModel.class, columnModel);
xGridColumnModel.addColumnListener(new XGridColumnListener() {
public void columnAdded(GridColumnEvent arg0) { throw new UnsupportedOperationException("Not supported yet."); }
public void columnRemoved(GridColumnEvent arg0) { throw new UnsupportedOperationException("Not supported yet."); }
public void columnChanged(GridColumnEvent arg0) { throw new UnsupportedOperationException("Not supported yet."); } });
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:
|
| |
2 | 2009-08-28 | in progress |
To do:
|
| |
3 | open |
To do:
|
| ||
4 | open |
To do:
|
| ||
5 | open |
To do:
|
|
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