Difference between revisions of "API/UNO AWT/Grid Control"

From Apache OpenOffice Wiki
< API‎ | UNO AWT
Jump to: navigation, search
(XMouseListener)
(XMouseListener)
Line 166: Line 166:
 
XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, objectGrid);
 
XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, objectGrid);
  
xWindow .addMouseListener(new XMouseListener() {
+
xWindow.addMouseListener(new XMouseListener() {
  
 
                 public void mousePressed(MouseEvent arg0) {
 
                 public void mousePressed(MouseEvent arg0) {

Revision as of 06:57, 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

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("GridDataModel", 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

XControlContainer xControlCont = (XControlContainer) UnoRuntime.queryInterface(
                XControlContainer.class, dialog);
Object objectGrid = xControlCont.getControl("Grid1");
 
XWindow xWindow = (XWindow) UnoRuntime.queryInterface(XWindow.class, objectGrid);
 
xWindow.addMouseListener(new XMouseListener() {
 
                public void mousePressed(MouseEvent arg0) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
 
                public void mouseReleased(MouseEvent arg0) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
 
                public void mouseEntered(MouseEvent arg0) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
 
                public void mouseExited(MouseEvent arg0) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
 
                public void disposing(EventObject arg0) {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
            });

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