<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cl</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cl"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Cl"/>
	<updated>2026-10-18T18:19:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=62293</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=62293"/>
		<updated>2008-02-01T17:18:06Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Older versions will load the new tables as vector graphic files. Therefore editing of the table contents will not be possible. If the older version saves documents that contained native tables the original tables will be lost and converted to vector graphic files, even if later loaded by newer versions.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61867</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61867"/>
		<updated>2008-01-28T10:42:17Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Older versions will load the new tables as vector graphic files. Therefore editing of the table contents will not be possible. If the older version saves documents that contained native tables the original tables will be lost and converted to vector graphic files, even if later loaded by newer versions.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61513</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61513"/>
		<updated>2008-01-24T10:17:26Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Older versions will load the new tables as vector graphic files. Therefore editing of the table contents will not be possible. If the older version saves documents that contained native tables the original tables will be lost and converted to vector graphic files, even if later loaded by newer versions.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61512</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=61512"/>
		<updated>2008-01-24T10:16:59Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Older versions will load the new tables as vector graphic files. Therefore editing of the table contents will not be possible. If the older version saves documents that contained native tables the original tables will be lost and converted to vector graphic files, even if later loaded by newer versions.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3.x&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ongoing&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=61030</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=61030"/>
		<updated>2008-01-19T20:08:18Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Current Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My personal list of todo stuff and current status&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : CL&lt;br /&gt;
&lt;br /&gt;
Mail : christian.lippka AT sun.com&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Work ==&lt;br /&gt;
&lt;br /&gt;
* Implementing table shapes for draw and impress ( [[Draw_Tables]] )&lt;br /&gt;
* Fixing issues for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== Open ODF issues ===&lt;br /&gt;
&lt;br /&gt;
* draw:textarea-horizontal-align attribute has no default exported? [[http://www.openoffice.org/issues/show_bug.cgi?id=85397 issue 85397]]&lt;br /&gt;
&lt;br /&gt;
=== Open ODF 1.2 features ===&lt;br /&gt;
&lt;br /&gt;
Auto shrink text in shapes [[http://lists.oasis-open.org/archives/office/200701/msg00025.html OASIS]]&lt;br /&gt;
Status: Desired for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposals for tables in presentations/drawings [[http://lists.oasis-open.org/archives/office/200701/msg00031.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposal: last visited page interaction [[http://lists.oasis-open.org/archives/office/200701/msg00042.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
How to add animations for shapes on master pages [[http://lists.oasis-open.org/archives/office/200702/msg00123.html OASIS]]&lt;br /&gt;
Status: Planed for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for rounded corners of rects (draw:corner-radius) [[http://lists.oasis-open.org/archives/office/200703/msg00206.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Add glue points to 3D objects [[http://lists.oasis-open.org/archives/office/200705/msg00102.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Proposal for &amp;lt;anim:audio&amp;gt; [[http://lists.oasis-open.org/archives/office/200705/msg00128.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
Proposal to enhance hyperlinks to support shapes [[http://lists.oasis-open.org/archives/office/200707/msg00061.html OASIS]]&lt;br /&gt;
Status: Import planned for OOo 2.4, export desired for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for extending stroke dashes [[http://lists.oasis-open.org/archives/office/200708/msg00006.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;svg:desc&amp;gt; and &amp;lt;svg:title&amp;gt; for drawing pages [[http://lists.oasis-open.org/archives/office/200710/msg00065.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Layer-set per page [[http://lists.oasis-open.org/archives/office/200705/msg00132.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Points are integers in ODF,but floating-point in SVG [[http://lists.oasis-open.org/archives/office/200703/msg00243.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Impress]]&lt;br /&gt;
[[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=61029</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=61029"/>
		<updated>2008-01-19T20:07:57Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My personal list of todo stuff and current status&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : CL&lt;br /&gt;
&lt;br /&gt;
Mail : christian.lippka AT sun.com&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Work ==&lt;br /&gt;
&lt;br /&gt;
* Implementing table shapes for draw and impress ( [[Draw_Tables]] )&lt;br /&gt;
* Fixing issues for OOo 2.4&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== Open ODF issues ===&lt;br /&gt;
&lt;br /&gt;
* draw:textarea-horizontal-align attribute has no default exported? [[http://www.openoffice.org/issues/show_bug.cgi?id=85397 issue 85397]]&lt;br /&gt;
&lt;br /&gt;
=== Open ODF 1.2 features ===&lt;br /&gt;
&lt;br /&gt;
Auto shrink text in shapes [[http://lists.oasis-open.org/archives/office/200701/msg00025.html OASIS]]&lt;br /&gt;
Status: Desired for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposals for tables in presentations/drawings [[http://lists.oasis-open.org/archives/office/200701/msg00031.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposal: last visited page interaction [[http://lists.oasis-open.org/archives/office/200701/msg00042.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
How to add animations for shapes on master pages [[http://lists.oasis-open.org/archives/office/200702/msg00123.html OASIS]]&lt;br /&gt;
Status: Planed for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for rounded corners of rects (draw:corner-radius) [[http://lists.oasis-open.org/archives/office/200703/msg00206.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Add glue points to 3D objects [[http://lists.oasis-open.org/archives/office/200705/msg00102.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Proposal for &amp;lt;anim:audio&amp;gt; [[http://lists.oasis-open.org/archives/office/200705/msg00128.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
Proposal to enhance hyperlinks to support shapes [[http://lists.oasis-open.org/archives/office/200707/msg00061.html OASIS]]&lt;br /&gt;
Status: Import planned for OOo 2.4, export desired for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for extending stroke dashes [[http://lists.oasis-open.org/archives/office/200708/msg00006.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;svg:desc&amp;gt; and &amp;lt;svg:title&amp;gt; for drawing pages [[http://lists.oasis-open.org/archives/office/200710/msg00065.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Layer-set per page [[http://lists.oasis-open.org/archives/office/200705/msg00132.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Points are integers in ODF,but floating-point in SVG [[http://lists.oasis-open.org/archives/office/200703/msg00243.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Impress]]&lt;br /&gt;
[[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Build_Instructions_(X11)&amp;diff=60779</id>
		<title>Mac OS X Build Instructions (X11)</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Build_Instructions_(X11)&amp;diff=60779"/>
		<updated>2008-01-18T13:49:11Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current build instructions also at: http://porting.openoffice.org/mac/build_680_X11.html. Those are being moved to this page at OOo Wiki.&lt;br /&gt;
&lt;br /&gt;
For historical reasons, there is also [[Mac OS X Build Instructions of SRC_m71]]&lt;br /&gt;
&lt;br /&gt;
Note: supported compilers for Mac can be found in [[Compiler versions used by port maintainers and release engineers]]&lt;br /&gt;
&lt;br /&gt;
Other [[:Category:MacOSX|Mac OS X related Wiki pages]].&lt;br /&gt;
&lt;br /&gt;
=== Building OpenOffice.org X11 for Mac OS X PPC and Mac OS X x86===&lt;br /&gt;
&lt;br /&gt;
Authors: Eric Hoch&lt;br /&gt;
&lt;br /&gt;
Revised 2006-01-23&lt;br /&gt;
&lt;br /&gt;
=== Introduction===&lt;br /&gt;
&lt;br /&gt;
These build instructions are based upon milestone 680_m140 and higher.&lt;br /&gt;
&lt;br /&gt;
Due to the nature of a port in progress this document cannot give a general overview of all the current patches necessary to build a specific milestone. To get this information we recommend you to subscribe to our porting mailing list dev@porting.openoffice.org.&lt;br /&gt;
&lt;br /&gt;
There you&amp;#039;ll get all the latest information about patches and everything else related to and needed to port OpenOffice.org to the Mac.&lt;br /&gt;
&lt;br /&gt;
=== Special Thanks===&lt;br /&gt;
Before we begin let me thank all the people without whom these build instructions would make no sense, the coders who are helping to bring OOo 2.0 to Mac OS X.&lt;br /&gt;
The coders and supporters behind the Mac port are:&lt;br /&gt;
&lt;br /&gt;
    Eric Bachard&lt;br /&gt;
    Thorsten Behrens&lt;br /&gt;
    Etsushi Kato&lt;br /&gt;
    Florian Heckl&lt;br /&gt;
    Pavel Janik&lt;br /&gt;
    Nakata Maho&lt;br /&gt;
    James McKenzie&lt;br /&gt;
    Tino Rachui&lt;br /&gt;
    Stephan Schäfer&lt;br /&gt;
    Eric Hoch&lt;br /&gt;
    Shaun McDonald&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
    * The fastest machine you can find. It&amp;#039;d be good if it had memory, too.&lt;br /&gt;
    * Mac OS X 10.3.5 or Mac OS X 10.4.x including all the latest available Security Updates for &lt;br /&gt;
      your version of Mac OS X&lt;br /&gt;
    * on Mac OS X 10.3.x: XCode 1.5 plus November 2004 gcc 3.3 Update for &lt;br /&gt;
    * on Mac OS X 10.4.x: XCode 2.1&lt;br /&gt;
      Note: You can get both applications after a free registration at http://connect.apple.com&lt;br /&gt;
    * JDK 1.4.2 plus latest SDK Updates (with full JDK SDK for the headers)&lt;br /&gt;
    * an installed X-Server. We recommend Apple&amp;#039;s X11 but you can also use the ones of X.org or Xfree86&lt;br /&gt;
    * You need a version of [[http://www.gnu.org/software/gperf/gperf.html gperf]] in your path for some modules&lt;br /&gt;
    * A minimum of 4 to 5GB for a standard build. &lt;br /&gt;
      Note: Usage of disk space depends upon the number of localizations you build for. &lt;br /&gt;
      More localizations means more disk space needed.&lt;br /&gt;
      A minimum of 18GB for a full debug build.&lt;br /&gt;
    * If you can afford it we recommend you to backup clean sources and work with a second set of sources.&lt;br /&gt;
      With a second set of clean sources you can easily go back to clean sources if a module doesn&amp;#039;t build, &lt;br /&gt;
      a patch doesn&amp;#039;t solve the problem, you have to revert a patch or for any other reason there may be. &lt;br /&gt;
      In the meantime cvs sources could have been edited and you need to recompile more modules then just &lt;br /&gt;
      one and that&amp;#039;s probably not what you want...&lt;br /&gt;
&lt;br /&gt;
===Determine the shell you use for compilation===&lt;br /&gt;
&lt;br /&gt;
The default shell of a cleanly installed Mac OS X 10.3.x/Mac OS X 10.4.x is bash.&lt;br /&gt;
If you did an update to 10.3.x or 10.4.x from early versions of Mac OS X while keeping your personal settings you may still use the tcsh shell, the default shell of Mac OS X 10.0 to 10.2.x.&lt;br /&gt;
&lt;br /&gt;
Where necessary this read-me distinguishes between bash and tcsh.&lt;br /&gt;
&lt;br /&gt;
To determine the shell you currently use open Terminal.app and type the following command:&lt;br /&gt;
&lt;br /&gt;
ps -p $$&lt;br /&gt;
&lt;br /&gt;
The output shows you which shell you&amp;#039;re currently using.&lt;br /&gt;
&lt;br /&gt;
-/bin/bash or -bash means you are using bash&lt;br /&gt;
&lt;br /&gt;
-/bin/tcsh or -tcsh means you are using the c-shell&lt;br /&gt;
&lt;br /&gt;
===Getting OpenOffice.org and External Sources===&lt;br /&gt;
&lt;br /&gt;
====Getting OpenOffice.org Source from CVS====&lt;br /&gt;
&lt;br /&gt;
Once you have X properly installed, it&amp;#039;s time to get the OpenOffice.org sources and other external sources. If you&amp;#039;ve built OpenOffice.org from previous sources and have applied other patches, you will need to start from scratch with a fresh CVS version of the sources.&lt;br /&gt;
&lt;br /&gt;
Download the CVS distribution for SRC680_mXXX (replace XXX by the current milestonenumber):&lt;br /&gt;
&lt;br /&gt;
   1. Open a new Terminal (/Applications/Utilities/Terminal)&lt;br /&gt;
   2. mkdir 680_mXXX/source&lt;br /&gt;
   3. cd 680_mXXX/source&lt;br /&gt;
   4. Now set the CVSROOT&lt;br /&gt;
          * for bash do:&lt;br /&gt;
            export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
          * for tcsh do:&lt;br /&gt;
            setenv CVSROOT :pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
   5. cvs login&lt;br /&gt;
   6. Enter the password anoncvs&lt;br /&gt;
   7. cvs -z3 co -r SRC680_mXXX OpenOffice2&lt;br /&gt;
      for later milestones simply replace the XXX with the most current milestonenumber&lt;br /&gt;
   8. go get some coffee, or a beer, since it&amp;#039;ll take a while to get it all &lt;br /&gt;
&lt;br /&gt;
Note that if your computer is behind a firewall and you&amp;#039;re trying to get the sources from the CVS server, you may need to find a proper way to get it to tunnel through the firewall. The protocol runs on port 2401, and some firewalls will not allow communication on this port.&lt;br /&gt;
&lt;br /&gt;
Attention: We recommend a broadband connection and a not too small amount of volume or time left within your contract since the sources are about 300MB and the checkout could take up to an hour or longer depending on the server load.&lt;br /&gt;
&lt;br /&gt;
For further information on this topic see get the source&lt;br /&gt;
&lt;br /&gt;
To get a second copy of the sources use the following commands within your 680_mXXX directory:&lt;br /&gt;
&lt;br /&gt;
   1. cd ..&lt;br /&gt;
   2. mkdir build&lt;br /&gt;
   3. cd build&lt;br /&gt;
   4. cp -R ../source/* .&lt;br /&gt;
&lt;br /&gt;
==== Additional software that&amp;#039;s not in the official OpenOffice.org sources ====&lt;br /&gt;
&lt;br /&gt;
Now that you have the sources it&amp;#039;s time to get the software that is not in the official OOo Source Code Tree.&lt;br /&gt;
&lt;br /&gt;
    * The perl module Archive::Zip&lt;br /&gt;
    * gpc - optional - NOT NEEDED&lt;br /&gt;
    * pkg-config&lt;br /&gt;
    * gtk2 - optional - not needed&lt;br /&gt;
    * X11&lt;br /&gt;
    * unowinreg.dll&lt;br /&gt;
&lt;br /&gt;
To install Archive::Zip use the following commands in Terminal.app:&lt;br /&gt;
&lt;br /&gt;
   1. perl -MCPAN -eshell&lt;br /&gt;
   2. install Archive::Zip&lt;br /&gt;
&lt;br /&gt;
If this is your first installation of a module using CPAN you&amp;#039;re asked to configure the CPAN environment. If you&amp;#039;re not 100% sure what to answer simply accept the default answers.&lt;br /&gt;
&lt;br /&gt;
Note: In some cases using CPAN with Mac OS X is a bit problematic. In this case simply follow the instructions given here on this website http://sial.org/howto/perl/life-with-cpan/macosx/ to solve the problem.&lt;br /&gt;
&lt;br /&gt;
GPC is available here: ftp://ftp.cs.man.ac.uk/pub/toby/gpc/gpc231.tar.Z&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention: Direct Link to the download but it&amp;#039;s only a few hundred KB.&lt;br /&gt;
&lt;br /&gt;
Note: You can alternatively use the libart_lgpl library instead of GPC. This requires an additional configure flag (--enable-libart) and a precompiled libart library installed in a standard location, such as /usr/lib.&lt;br /&gt;
&lt;br /&gt;
Since OS X comes with no pkg-config, or to be more specific it&amp;#039;s simply not complete in OS X, you have to install it via fink (http://fink.sourceforge.net), MacPorts (http://www.macports.org) or the gentoo port system (http://www.metadistribution.org/macos/).&lt;br /&gt;
&lt;br /&gt;
If you need cups headers (on Mac OS X 10.3., building reports &amp;quot;cups.h missing&amp;quot;), then download them from http://ftp.cusoo.org/MacOSX/Utilities/PowerPC/cups_Panther/cups.tar.gz and put the headers to &amp;quot;/usr/include/cups&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you want to compile OpenOffice.org with gtk2 support you have to install gtk2 via your porting_mechanism&lt;br /&gt;
Note: The most current versions of gkt2 and pkg-config are in about 90% of all cases only available as sources that you need to compile and not as binaries. Please consider this while preparing your mac.&lt;br /&gt;
&lt;br /&gt;
Additional Note for fink users: You need to install both packages gtk2 and gtk2-devel using fink install &amp;lt;/package name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yes, there are other porting mechanisms out there such as the one of NetBSD or you can get precompiled versions of gtk, gnu_copy and pkg-config via pages like osxgnu but the author of these build instructions has no experiences with these so no recommendation for them here.&lt;br /&gt;
&lt;br /&gt;
Note: If you need help with installing or maintaining packages please contact the project that provides the porting_mechanism.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s also possible to compile pkg-config, gnu_copy as part of the gnu-coreutils and gtk2 without fink or Macports. Be aware that in this case you need to resolve the various dependencies yourself. So we recommend using one of the porting mechanisms.&lt;br /&gt;
&lt;br /&gt;
Because OS X does not install X11 by default and up to now you haven&amp;#039;t installed one, now may be the time do so.&lt;br /&gt;
There are various X for Mac OS X out there e.g. Apple&amp;#039;s X11, XDarwin.org&amp;#039;s XDarwin or simply use your porting_mechanism to install either X.org 6.8.x or Xfree86 &amp;gt;=4.3.&lt;br /&gt;
For help with your X11 please contact the provider of the package or your porting mechanism project&lt;br /&gt;
&lt;br /&gt;
By default OOo builds an Office Development Kit. This ODK requires you to download the unowinreg.dll from here  http://tools.openoffice.org/unowinreg_prebuild/680/.&lt;br /&gt;
&lt;br /&gt;
===Preparing to Build===&lt;br /&gt;
&lt;br /&gt;
====Adding gpc to OOo sources====&lt;br /&gt;
&lt;br /&gt;
   1. uncompress &amp;lt;path to gpc&amp;gt;/gpc231.tar.Z&lt;br /&gt;
   2. tar xvf &amp;lt;path to gpc&amp;gt;/gpc231.tar&lt;br /&gt;
   3. cp &amp;lt;path to gpc&amp;gt;/gpc.[hc] &amp;lt;ooo source directory&amp;gt;/build/external/gpc/&lt;br /&gt;
   4. rmdir gpc231&lt;br /&gt;
&lt;br /&gt;
====Adding unowinreg.dll to OOo sources====&lt;br /&gt;
&lt;br /&gt;
Copy the downloaded unowinreg.dll to &amp;lt;ooo source directory&amp;gt;/build/external/unowinreg/ &lt;br /&gt;
&lt;br /&gt;
====Applying Patches====&lt;br /&gt;
&lt;br /&gt;
To apply a patch&lt;br /&gt;
cd&lt;br /&gt;
into the direcotory for the module which needs to be patched and do a:&lt;br /&gt;
patch -p0 &amp;lt;path/to/the patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most of the patches use the naming scheme&lt;br /&gt;
modul_(subdirectory_subdirectory_etc)_filetopatch.patch.&lt;br /&gt;
&lt;br /&gt;
To find all current patches do a search for issues in component subcomponent MacOSX.&lt;br /&gt;
&lt;br /&gt;
You can grab the patches necessary to avoid the freetype crash from my idisk public folder&lt;br /&gt;
&lt;br /&gt;
Due to the fact that not all the patches are from one author it&amp;#039;s sometimes necessary to change to the subdirectory/ies or not. In this case the patch knows which subdirectories to jump over.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Building OpenOffice.org===&lt;br /&gt;
Now that we&amp;#039;ve got it all the source, it&amp;#039;s time to execute the build!&lt;br /&gt;
&lt;br /&gt;
   1. Open up a new Terminal.&lt;br /&gt;
   2. Configure for your build&lt;br /&gt;
   3. cd &amp;lt;path to ooo&amp;gt;/680_mXXX/build/config_office&lt;br /&gt;
   4. ./configure --with-x --with-lang=&amp;quot;de fr en-US&amp;quot;&lt;br /&gt;
      --with-jdk-home=/System/Library/Frameworks/JavaVM.framework/Home/&lt;br /&gt;
      --disable-build-mozilla --disable-neon --disable-gtk&lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
      Instead of using --with-freetype2=... you can also use --with-system-freetype&lt;br /&gt;
      Attention: Darwinports gnu_copy is named gcp to avoid conflicts with Mac OS X cp&lt;br /&gt;
&lt;br /&gt;
      If you want to build with gtk-support please add --with-gtk2 to your configure script&lt;br /&gt;
      and/or want to use your own apache-ant add --with-ant-home=&amp;lt;your path&amp;gt;/680_mxx/apache-ant-1.6.5&lt;br /&gt;
&lt;br /&gt;
   5. If configure fails it will output an error message saying what&amp;#039;s missing or &lt;br /&gt;
      what else causes it&amp;#039;s breakage.&lt;br /&gt;
      Be sure to also check the warnings configure outputs at the end of the configuration process.&lt;br /&gt;
      Please report any breakage here with the error message output to dev@porting.openoffice.org&lt;br /&gt;
   6. cd ..&lt;br /&gt;
   7. ./bootstrap&lt;br /&gt;
   8. Set up your shell build enviroment:&lt;br /&gt;
          * for bash do:&lt;br /&gt;
            PPC: source MacOSXPPCEnv.Set.sh&lt;br /&gt;
            Intel: source MacOSXX86Env.Set.sh&lt;br /&gt;
          * for tcsh do:&lt;br /&gt;
            PPC: source MacOSXPPCEnv.Set&lt;br /&gt;
            Intel: source MacOSXX86Env.Set&lt;br /&gt;
   9. dmake&lt;br /&gt;
  10. Report any and all build failures to mac@porting.openoffice.org mail list&lt;br /&gt;
  11. cd instsetoo_native/unxmacxp.pro/OpenOffice/install&lt;br /&gt;
      Within this directory you will find a folder for each language that&lt;br /&gt;
      you build OpenOffice.org for. Those folders contain the installation disk images.&lt;br /&gt;
&lt;br /&gt;
====Additional Information for Macports Users====&lt;br /&gt;
When using Darwinports be sure to use ./configure without freetype since it leads to OpenOffice.org crashing with a version mismatch error when using Macport&amp;#039;s freetype. You will find the additional patches needed to build freetype within OpenOffice.org in the subdirectory freetype2_patches of the patch archive.&lt;br /&gt;
&lt;br /&gt;
====Using Mozilla within OpenOffice.org====&lt;br /&gt;
&lt;br /&gt;
If you decided to use Mozilla packages to get special functions OpenOffice.org provides you, as I did in the example configure script, you have two choices to get them:&lt;br /&gt;
&lt;br /&gt;
First:&lt;br /&gt;
&lt;br /&gt;
You let OpenOffice.org compile them. Be aware that this adds additional tim to your compiling time.&lt;br /&gt;
&lt;br /&gt;
If you decide to let OpenOffice.org compile Mozilla remove --disable-build-mozilla from the&lt;br /&gt;
./configure script and OpenOffice.org will compile Mozilla within the moz directory.&lt;br /&gt;
&lt;br /&gt;
   1. Before building Mozilla be sure to download Mozilla Sources. You can get them e.g. here:&lt;br /&gt;
      http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.7.5/source/&lt;br /&gt;
   2. cp mozilla-source-1.7.5.tar.gz &amp;lt;your path&amp;gt;/680_mXXX/moz/download&lt;br /&gt;
   3. cd &amp;lt;your path&amp;gt;/680_mXXX/moz&lt;br /&gt;
   4. cd config_office&lt;br /&gt;
   5. Use the same ./configure script out of but this time remove --disable-build-mozilla&lt;br /&gt;
   6. Continue with Step 5 of the &amp;quot;Building OpenOffice.org&amp;quot; paragraph&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org should now compile mozilla within its build process.&lt;br /&gt;
&lt;br /&gt;
Second:&lt;br /&gt;
&lt;br /&gt;
You grab the Mozilla packages for PPC here:&lt;br /&gt;
http://florian-heckl.de/ooo/MACOSXGCCPinc.zip&lt;br /&gt;
http://florian-heckl.de/ooo/MACOSXGCCPlib.zip&lt;br /&gt;
http://florian-heckl.de/ooo/MACOSXGCCPruntime.zip&lt;br /&gt;
and put them into &amp;lt;ooo build directory&amp;gt;/680_mXXX/moz/zipped&lt;br /&gt;
OpenOffice.org should detect and use them.&lt;br /&gt;
&lt;br /&gt;
Please use the Mozilla packages from http://eric.bachard.free.fr/mac/moz/zipped/ these libraries are universal binaries. If you want to build using them on PPC architecture (with Tiger)  please rename them this way  :&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Archive || Name in Intel architecture || Name on PowerPC architecture&lt;br /&gt;
|-&lt;br /&gt;
| headers || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;inc.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;inc.zip&lt;br /&gt;
|-&lt;br /&gt;
| runtime || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;runtime.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;runtime.zip&lt;br /&gt;
|-&lt;br /&gt;
| libs || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;lib.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;lib.zip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As you can see, &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; means PowerPC, and &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039; means Intel&lt;br /&gt;
&lt;br /&gt;
===Building the whole OpenOffice.org suite or just a single Project with Debug Information===&lt;br /&gt;
&lt;br /&gt;
To build the whole OpenOffice.org Suite with debug informations add&lt;br /&gt;
--enable-debug&lt;br /&gt;
to the configure command.&lt;br /&gt;
&lt;br /&gt;
To rebuild a complete project with debug information, remove all object files by removing the unxmacxp.pro directory. Then run dmake with the debug option set to true:&lt;br /&gt;
&lt;br /&gt;
    cd $SRC_ROOT/(module-name)&lt;br /&gt;
    $SRC_ROOT/(module-name)&amp;gt; rm -rf unxmacxp.pro&lt;br /&gt;
    $SRC_ROOT/(module-name)&amp;gt; build debug=true&lt;br /&gt;
    $SRC_ROOT/(module-name)&amp;gt; deliver&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=60778</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=60778"/>
		<updated>2008-01-18T13:47:25Z</updated>

		<summary type="html">&lt;p&gt;Cl: Added prerequisit for gperf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:blue; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Cocoa migration is in progress &amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:red; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Please note the next Master Work space (MWS) will soon change for DEV300, means SRC680 will be replaced at every place once 3.0 branch will exist &amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;This document tries to wrap-up the build process for [[OpenOffice.org]] on Mac OS X using the native windowing-toolkit of the platform named Aqua.&amp;#039;&amp;#039;&amp;#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important links for Cocoa development ===&lt;br /&gt;
&lt;br /&gt;
[http://www.cocoadev.com Cocoadev ]&lt;br /&gt;
&lt;br /&gt;
[http://ktd.club.fr/programmation/objective-c.php Pierre Chatelier page about C++ to Cocoa conversion ]&lt;br /&gt;
&lt;br /&gt;
Note: .pdf available in both english and french versions. Excellent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Outdated): To give a kickstart in the coding involved to get VCL ported to Carbon, please have a look at the excellent Pierre de Filippis [[Intro To Mac Porting]].&lt;br /&gt;
&lt;br /&gt;
We use the bash shell in all examples, since to our belief users of the C-shell are smart enough to figure out the differences anyway. If you want to dig deeper into the build process, please have a look at the description of the build environment here: [http://tools.openoffice.org/build_env.html OpenOffice.org Build Environment].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Prerequisites&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This document was derived from the description of the X11 build thanksworthy provided by Eric Hoch in this document: [[MacOSXBuildInstructions]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Here we would like to outline the things you need to build the Aqua Version&amp;#039;&amp;#039;&amp;#039; (besides the OS). &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:red; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Mandatory&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X version ===&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; &amp;#039;&amp;#039;&amp;#039;Minimal version for AquaBuild is Mac OS X 10.4 (aka Tiger).&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Due to important changes in the API, Aqua version cannot be built on Panther.&lt;br /&gt;
&lt;br /&gt;
=== Xcode ===&lt;br /&gt;
&lt;br /&gt;
This is the only mandatory part to be installed to build Aqua version of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
Current verified working version is &amp;#039;&amp;#039;&amp;#039;XCode 2.4.1&amp;#039;&amp;#039;&amp;#039;. Older are deprecated.&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
Aqua version of OpenOffice.org does not build yet using Java SDK 1.6.0.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Please use either J2SDK 1.4.2 or 1.5.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
To change the Java version -&amp;gt; go into folder : Applications -&amp;gt; Utilities -&amp;gt; Java and modify. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Else, you&amp;#039;ll meet unfixed build breakers (patches are welcome anyway)&lt;br /&gt;
&lt;br /&gt;
Note: If you are interested in helping us with Java 1.6 a patch which enables the build using java 1.6 is available [http://eric.bachard.free.fr/mac/aquavcl/patches/aquavcl03_august2007/java1.6/java_1.6_build.diff  &amp;#039;&amp;#039;&amp;#039;here&amp;#039;&amp;#039;&amp;#039;].  e.g. several known build issues have to be fixed e.g. hsqldb, but probably other modules are concerned.&lt;br /&gt;
&lt;br /&gt;
Be aware that it may impact important work and/or incompatibilities will occur. Feel free to submit your patches at mac@porting mailing list.&lt;br /&gt;
&lt;br /&gt;
=== gperf ===&lt;br /&gt;
&lt;br /&gt;
You need a build of [[http://www.gnu.org/software/gperf/gperf.html gperf]] in your path for some modules.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:blue; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039; Strongly recommended&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
If you intend to build OpenOffice.org several times, you probably can benefit of ccache since it will speed up your future builds. The first time you make a build with ccache you won&amp;#039;t notice it, but the next time the build will go up to five times faster.&lt;br /&gt;
&lt;br /&gt;
You can install it using fink. It is simply named &amp;quot;ccache&amp;quot;. For MacPorts users the package is called &amp;quot;ccache&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t use fink, you can download and build it yourself using the source provided at http://ccache.samba.org/&lt;br /&gt;
&lt;br /&gt;
In order to use ccache you need to change the following environment variables &amp;#039;&amp;#039;&amp;#039;assuming you&amp;#039;re using bash, and just before doing configure command line&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC=&amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Everything is installed ?  Now build it... &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:green; font-size:22px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;=&amp;gt; Current Milestone is m243, and current MWS is DEV300&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:green; font-size:22px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;=&amp;gt; Current Milestone is m239&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Getting the code (checkout, merge and patch the puppy)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Create a directory for a given milestone, setup CVS access: ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
mkdir DEV300_m243&lt;br /&gt;
 cd DEV300_m243&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
mkdir SRC680_m239&lt;br /&gt;
 cd SRC680_m239&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 export CVSROOT=&amp;quot;:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;quot;&lt;br /&gt;
 cvs login&lt;br /&gt;
(password is &amp;#039;anoncvs&amp;#039; )  + Enter&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
Note: The source should be downloaded to a path that does not contain any spaces, otherwise compiling might be troublesome.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== checkout DEV300 (Master workspace since 3.0 branch creation) (1,5 GB): ===&lt;br /&gt;
&amp;lt;code&amp;gt;[N]&lt;br /&gt;
 cvs -z3 co -r DEV300_m243 OpenOffice2    # don&amp;#039;t forget the &amp;quot;2&amp;quot; !!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone m243.&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
=== checkout SRC680 (Master workspace since aquavcl01 integration) (1,5 GB): ===&lt;br /&gt;
&amp;lt;code&amp;gt;[N]&lt;br /&gt;
 cvs -z3 co -r SRC680_m233 OpenOffice2    # don&amp;#039;t forget the &amp;quot;2&amp;quot; !!&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone m239.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:green; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Additional dependencies for current Milestone builds&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==== prebuilt Mozilla archives ====&lt;br /&gt;
&lt;br /&gt;
To enable the use of macros (disabled by default for security reasons), you&amp;#039;ll have to put the prebuilt archives of mozilla binaries in moz/zipped directory after renaming them properly.&lt;br /&gt;
&lt;br /&gt;
URL : http://tools.openoffice.org/moz_prebuild/680/&lt;br /&gt;
&lt;br /&gt;
Note: archives are Universal Binaries, and you&amp;#039;ll have to rename them, depending on your architecture (either Intel or PowerPC)&lt;br /&gt;
&lt;br /&gt;
Archives to be downloaded :&lt;br /&gt;
&lt;br /&gt;
http://tools.openoffice.org/moz_prebuild/680/MACOSXGCCUBinc.zip&lt;br /&gt;
&lt;br /&gt;
http://tools.openoffice.org/moz_prebuild/680/MACOSXGCCUBlib.zip&lt;br /&gt;
&lt;br /&gt;
http://tools.openoffice.org/moz_prebuild/680/MACOSXGCCUBruntime.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to build using them on PowerPC or Intel architecture (with Tiger)  please rename them this way  :&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Archive || Name in Intel architecture || Name on PowerPC architecture&lt;br /&gt;
|-&lt;br /&gt;
| headers || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;inc.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;inc.zip&lt;br /&gt;
|-&lt;br /&gt;
| runtime || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;runtime.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;lib.zip&lt;br /&gt;
|-&lt;br /&gt;
| libs || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;lib.zip || MACOSXGCC&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;lib.zip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see, &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; means PowerPC, and &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039; means Intel (replacing &amp;#039;&amp;#039;&amp;#039;UB&amp;#039;&amp;#039;&amp;#039; in the original name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
.. and put them into &amp;#039;&amp;#039;&amp;#039;&amp;lt;ooo build directory&amp;gt;/DEV300_m243/moz/zipped&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone m243.&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
.. and put them into &amp;#039;&amp;#039;&amp;#039;&amp;lt;ooo build directory&amp;gt;/SRC680_m239/moz/zipped&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org should detect and use them if you respect the configure command line as described in Milestone build.&lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org&amp;#039;s build environment is configured using the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 &amp;lt;!--&lt;br /&gt;
 DEV300_m243/&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
 SRC680_m225/&lt;br /&gt;
 SRC680_m239/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cd DEV300_m243/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cd SRC680_ m239/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; (to be written) looks like :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from     : $BASE&lt;br /&gt;
 echo OpenOffice Version: $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;en-US de fr&amp;quot; \&lt;br /&gt;
 --disable-odk \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-headless \&lt;br /&gt;
 --disable-build-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig \&lt;br /&gt;
 --without-nas \&lt;br /&gt;
 --with-use-shell=bash&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note :  --disable-neon has been removed since m217 resync. See issue : [[http://qa.openoffice.org/issues/show_bug.cgi?id=78206 --disable-neon breaks aqua build]]&lt;br /&gt;
&lt;br /&gt;
--disable-odk : disables SDK build, and will avoid you to download some windows dll which is not needed for aqua-build.&lt;br /&gt;
&lt;br /&gt;
--disable-pasf : pasf stands for Portable Audio System file. As we want to use system library rather than portable ones, we disabled this. However, at this time not all functionality will be available with pasf disabled. You might willing to use --with-pasf if you want working audio in your build.&lt;br /&gt;
&lt;br /&gt;
--without-nas : nas stands for Network Audio System, it uses X11, if you want to use it in your build, just remove this flag. You will need to install the X11 package provided in your CDs/DVD Mac OS X installation. X11 SDK from xCode tools is not required for build this.&lt;br /&gt;
&lt;br /&gt;
--disable-build-mozilla: will disable the mozilla build (in the moz module), but mozilla pre-built archives will be used instead (they are mandatory to enable the macro security configuration dialog (see [http://www.openoffice.org/issues/show_bug.cgi?id=79885 issue 79885]).&lt;br /&gt;
&lt;br /&gt;
--enable-dbgutil: add this option to enable assertions and other functionality useful for debugging&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Doing the build (about 4,5 GB)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 cd DEV300_m243/config_office/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 cd SRC680_m239/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
==== Mac Intel ====&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXX86Env.Set.sh&lt;br /&gt;
 cd instsetoo_native&lt;br /&gt;
 export TMP=/tmp&lt;br /&gt;
 export SYSTEM_OPENSSL=YES&lt;br /&gt;
&lt;br /&gt;
+ &lt;br /&gt;
 build --all -P4 --dlv_switch -link --dontgraboutput&lt;br /&gt;
 &lt;br /&gt;
 or&lt;br /&gt;
 &lt;br /&gt;
 build --all -P4 &lt;br /&gt;
&lt;br /&gt;
if you run into trouble with --dlv_switch (see: [http://qa.openoffice.org/issues/show_bug.cgi?id=77360 | issue 77360])&lt;br /&gt;
&lt;br /&gt;
==== On PowerPC ====&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXPPCEnv.Set.sh&lt;br /&gt;
 cd instsetoo_native&lt;br /&gt;
 export TMP=/tmp&lt;br /&gt;
 export SYSTEM_OPENSSL=YES&lt;br /&gt;
&lt;br /&gt;
+ &lt;br /&gt;
  &lt;br /&gt;
 build --all -P2 --dlv_switch -link --dontgraboutput&lt;br /&gt;
 &lt;br /&gt;
 or&lt;br /&gt;
 &lt;br /&gt;
 build --all -P2 &lt;br /&gt;
&lt;br /&gt;
===== Comments on above =====&lt;br /&gt;
&lt;br /&gt;
if you run into trouble with --dlv_switch (see: [http://qa.openoffice.org/issues/show_bug.cgi?id=77360|issue 77360])&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;bootstrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Dmake once was a unix make-clone made by wticorp but got incorporated into OpenOffice since it was orphaned. For more information about dmake, it&amp;#039;s history and manpage have a look here: http://tools.openoffice.org/dmake/index.html&lt;br /&gt;
&lt;br /&gt;
Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Environment-Variables for the Build will be set up. For a detailed description see [[Environment_Variables]]. Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039; should be substituted with &amp;#039;MacOSXX86Env.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours, and 3 to 6 hours on Mac Intel (3:30h on a 2GHz DualCore INTEL iMac). Be patient.&lt;br /&gt;
&lt;br /&gt;
If you want to see how the progress on that build  is you can use two &amp;#039;&amp;#039;&amp;#039;build&amp;#039;&amp;#039;&amp;#039; options to get a comfortable view:&lt;br /&gt;
&lt;br /&gt;
 build ... &amp;lt;see above&amp;gt; ... --html --html_path /Users/$USER/Sites&lt;br /&gt;
&lt;br /&gt;
where $USER is your user name. Then you can load in Firefox (not Safari!) the HTML file &amp;#039;&amp;#039;&amp;#039;unxmacxi.pro.build.html&amp;#039;&amp;#039;&amp;#039; via the in Mac OS X included Apache web server or diretctly form the directory &amp;#039;&amp;#039;/Users/$USER/Sites/&amp;#039;&amp;#039;. This file is automatically being updated and is showing the status of the build and also the time needed since the build started.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Installing, preparing and running OpenOffice.org&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039; Find the Bundle&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the build completed, the Final product ( en-US version ) is named :  OOo_2.4.0_071211_MacOSXIntel_install.dmg ( for version 2.4.0 e.g.) &lt;br /&gt;
&lt;br /&gt;
And is located in instsetoo_native/unxmacxi.pro/OpenOffice/archive/install/en-US  directory ( replace en-US with your locale )&lt;br /&gt;
&lt;br /&gt;
[[Image:Bundle_Location_2.4.0.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Run the soffice.bin&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In one line :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Double click the .dmg , drag the OpenOffice.org icon in the folder you want, and double click to run it !!&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : soffice.bin leads XCode to not work (because of the dot in the name). The issue has been reported to xcode-users list.&lt;br /&gt;
 &lt;br /&gt;
We&amp;#039;re nearly through, let&amp;#039;s fire-off the binary:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But a lot has to be done, and if you want to trace (using gdb e.g.), just do:&lt;br /&gt;
&lt;br /&gt;
cd &amp;lt;INSTALL_DIR&amp;gt;/OpenOffice.org\ 2.4.app/Contents/MacOS&lt;br /&gt;
&lt;br /&gt;
and run:&lt;br /&gt;
&lt;br /&gt;
gdb --args soffice.bin&lt;br /&gt;
&lt;br /&gt;
(add any breakpoint you want)&lt;br /&gt;
&lt;br /&gt;
r to run OpenOffice.org&lt;br /&gt;
&lt;br /&gt;
=== Use vcl menubar and / or vcl menus ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Native menus are defaults. If you want to use vcl menus, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AQUA_NATIVE_MENUS=FALSE ./soffice.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: options to not recover is  -norestore , and to bypass the user informations to fill in, use -nofirststartwizard&lt;br /&gt;
&lt;br /&gt;
AQUA_NATIVE_MENUS=FALSE ./soffice.bin -nofirststartwizard -norestore&lt;br /&gt;
&lt;br /&gt;
You can also insert environement variables in a Dictionary Class of Info.plist located in the Contents directory of OpenOffice.org bundle.&lt;br /&gt;
&lt;br /&gt;
For example, you can add the following XML in a text editor (or make it generated by Property List Editor) in your Info.plist :&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;key&amp;gt;LSEnvironment&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;dict&amp;gt;&lt;br /&gt;
       &amp;lt;key&amp;gt;AQUA_NATIVE_MENUS&amp;lt;/key&amp;gt;&lt;br /&gt;
       &amp;lt;string&amp;gt;TRUE&amp;lt;/string&amp;gt;&lt;br /&gt;
       &amp;lt;key&amp;gt;OOO_DISABLE_RECOVERY&amp;lt;/key&amp;gt;&lt;br /&gt;
       &amp;lt;string&amp;gt;TRUE&amp;lt;/string&amp;gt;&lt;br /&gt;
       &amp;lt;key&amp;gt;SAL_NO_NWF&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;string&amp;gt;TRUE&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that in order to work, the OOO_DISABLE_RECOVERY variable detection must be manually inserted in OOo code using the following patch :&lt;br /&gt;
http://www.go-oo.org/patches/src680/disable-recovery.diff&lt;br /&gt;
&lt;br /&gt;
This patch is outdated, but you can make the modifications yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice the enviroment variable here. AQUA_NATIVE_MENUS is experimental stuff created by Pavel, SAL_NO_NWF was created some times ago, and is located in vcl/source/window/window.cxx . At the moment we have:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;15&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable || Function&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NO_NWF=TRUE  || disable native controls code&lt;br /&gt;
|-&lt;br /&gt;
| AQUA_NATIVE_MENUS=FALSE || disable native menus code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Both changes are marked with comments in the source code, and when we remove them in the future, native controls and native menus will be enabled by default.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug and contribute &amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You want to provide crash issue details? Please see [[Providing_a_gdb_backtrace]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You want to debug using XCode? Please see [[MacOSX_Debug_OpenOffice.org_using_XCode]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You want to debug using Xemacs? Please see [http://www.mikesicotte.com/2007/02/21/debugging-ooo-with-xemacs-and-gdb Michael Sicotte&amp;#039;s blog entry]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:green; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;[[AquaBuild/Cocoa Informations]] &amp;lt;== Additionnal informations for advanced developers &amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Current Work in progress&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Developers are working on the following Child workspaces, all Mac OSX dedicated (not integrated )&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;stl4leopardppc&amp;#039;&amp;#039;&amp;#039; : allow OpenOffice.org to be built on Mac OS X 10.5 PowerPC using system stl, using --without-stlport4 configure option.&lt;br /&gt;
&lt;br /&gt;
If possible, continue with other builds (Leopard / Tiger Intel and PowerPC).&lt;br /&gt;
&lt;br /&gt;
Concerned modules : connectivity, cosv, fpicker, autodoc &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquafilepicker02&amp;#039;&amp;#039;&amp;#039; : replace Carbon native FilePicker with Cocoa native FilePicker &lt;br /&gt;
&lt;br /&gt;
Concerned module : fpicker&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;quicklookplugin01&amp;#039;&amp;#039;&amp;#039; : This cws provides a plugin for the QuickLook system available in MacOSX from versions 10.5 onwards&lt;br /&gt;
&lt;br /&gt;
Concerned modules : extensions scp2&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macosxdnd&amp;#039;&amp;#039;&amp;#039; Drag and Drop for Aqua&lt;br /&gt;
&lt;br /&gt;
Concerned modules : dtrans svtools vcl&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://eis.services.openoffice.org/EIS2/cws.ShowCWS?Path=SRC680%2Faquavcl05 aquavcl05]&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
concerned modules : vcl&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Closed for development&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;nativeprintdlg01&amp;#039;&amp;#039;&amp;#039; : add support for native print dialog &lt;br /&gt;
&lt;br /&gt;
Concerned modules: offapi, vcl, sfx2, svtools, sw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;[http://eis.services.openoffice.org/EIS2/cws.ShowCWS?Path=SRC680%2Faquavcl04 aquavcl04]&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
concerned modules : desktop vcl rsc shell svx sw solenv instsetoo_native&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Integrated&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Integrated in m239&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macosxquicktime01&amp;#039;&amp;#039;&amp;#039; : use QTKit for sounds and movies&lt;br /&gt;
&lt;br /&gt;
Concerned modules : avmedia scp2 vcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m238&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macosx24dmg&amp;#039;&amp;#039;&amp;#039; : fix bad icon positionning in the mounted disk image ( already Approved by QA )&lt;br /&gt;
&lt;br /&gt;
Concerned module : instsetoo_native&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m237&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pj86&amp;#039;&amp;#039;&amp;#039; : Make module sw warning free on Mac OS X&lt;br /&gt;
&lt;br /&gt;
Concerned modules : sw , solenv&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macleopardbuild&amp;#039;&amp;#039;&amp;#039; : be Leopard compatible, when building on Tiger&lt;br /&gt;
&lt;br /&gt;
Concerned modules : idlc soltools jvmfwk extensions stlport&lt;br /&gt;
&lt;br /&gt;
Integrated in m233&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;readme4macintel&amp;#039;&amp;#039;&amp;#039;  &lt;br /&gt;
&lt;br /&gt;
concerned module : readlicense_oo&lt;br /&gt;
&lt;br /&gt;
Integrated in m233&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquavcl03&amp;#039;&amp;#039;&amp;#039; ( Carbon -&amp;gt; Cocoa migration )&lt;br /&gt;
&lt;br /&gt;
concerned modules are desktop, instsetoo_native, solenv, svtools, vcl&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;spotlightplugin01&amp;#039;&amp;#039;&amp;#039; ( add a new Sportlight plugin )&lt;br /&gt;
&lt;br /&gt;
Concerned modules: extensions, scp2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m229&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macaddressbook01&amp;#039;&amp;#039;&amp;#039;  (QA in progress )&lt;br /&gt;
&lt;br /&gt;
concerned modules are : scp2, dbaccess, extensions, connectivity&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;macosxspellchecker&amp;#039;&amp;#039;&amp;#039;  :  use Mac OS X spellchecker&lt;br /&gt;
&lt;br /&gt;
Concerned modules: lingucomponent, solenv&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquavclcarbonfixes&amp;#039;&amp;#039;&amp;#039; ( Carbon version of Aqua OpenOffice.org ): fix the 5 most important issues. &lt;br /&gt;
&lt;br /&gt;
concerned modules are : desktop, vcl, fpicker, libxmlsec, xmlsecurity, basic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m228&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cloph09&amp;#039;&amp;#039;&amp;#039;  ( remove X11SDK dependance for Aquabuild )&lt;br /&gt;
&lt;br /&gt;
Concerned modules:  np_sdk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m227&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquaremovescripts&amp;#039;&amp;#039;&amp;#039;: remove useless Applescripts from Aqua version&lt;br /&gt;
&lt;br /&gt;
concerned module: instsetoo_native&lt;br /&gt;
&lt;br /&gt;
Integrated in m223:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquavcl02&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m222 : &lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquaremovefondu&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*macosxdmg23&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Integrated in m221:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;aquafilepicker01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All patches that developers have that need testing or peer review should be added here.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Known build issues &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Panther&amp;#039;&amp;#039;&amp;#039; build (X11 only) : currently broken ( work in progress )&lt;br /&gt;
&lt;br /&gt;
Since latest resync, no build issues have been reported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tiger&amp;#039;&amp;#039;&amp;#039;:  no problem nor for X11 nor Aqua versions (main baseline)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Leopard&amp;#039;&amp;#039;&amp;#039; Intel : builds OK now. Build is broken in cppu for PowerPC architecture, and builds fine using --without-stlport4 flag&lt;br /&gt;
&lt;br /&gt;
*Native FilePicker is fixed (aquafilepicker02 + pl fixed repaint issue )&lt;br /&gt;
&lt;br /&gt;
*Lot of warnings in vcl, due to other deprecated stuff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:grey; font-size:12px&amp;quot;&amp;gt;[[AquaBuild/Some Background | &amp;#039;&amp;#039;&amp;#039;Some Background (what is aquavcl01, EIS) (click me to know more) &amp;#039;&amp;#039;&amp;#039;]]&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;External links&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
# [http://www.openoffice.org/issues/query.cgi Bug Database]&lt;br /&gt;
# Mailinglist: [http://porting.openoffice.org/servlets/ProjectMailingListList mac@porting.openoffice.org]  (subscribe is mandatory )&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): [[Previous_Mac_Meeting_logs]] [[MacOSXPortMeetings]]&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Sebastien Plisson Wiki: http://splisson.blogspot.com/&lt;br /&gt;
# Christian Lippka Wiki: http://wiki.services.openoffice.org/wiki/User:CL&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
# Runtime Configuration: http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html&lt;br /&gt;
# OpenOffice Domain Developer http://wiki.services.openoffice.org/wiki/DomainDeveloper&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Screenshots&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
# Eric Bachard screenshots (some are from Stephan Schaefer) http://eric.bachard.free.fr/mac/aquavcl/screenshots/&lt;br /&gt;
# Most recent: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/&lt;br /&gt;
# Pavel Janik screenshots http://blog.janik.cz/images/MacOSX/2006-08-10&lt;br /&gt;
# Important screenshot (eventloop issue): http://blog.janik.cz/images/MacOSX/  =&amp;gt; See: OOoMenus-separator-and-disabled_entries.png&lt;br /&gt;
# Aqua look (the begining): &lt;br /&gt;
http://eric.bachard.free.fr/mac/aquavcl/screenshots/mars2007/combobox_search_and_replace02_14mars07.jpg&lt;br /&gt;
&lt;br /&gt;
More menus: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:Build_System]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=60756</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=60756"/>
		<updated>2008-01-18T12:35:18Z</updated>

		<summary type="html">&lt;p&gt;Cl: added requirement for gperf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to OOo development for Windows ==&lt;br /&gt;
&lt;br /&gt;
This is an initial attempt to fill out information for building on Windows.&lt;br /&gt;
If it ends up being complete, this notice can be removed!  At the moment you&amp;#039;ll have to piece together information from [[#See also|other pages]] with the changes here for doing it on Windows.&lt;br /&gt;
&lt;br /&gt;
Most of this wiki assumes that you&amp;#039;ll be using a reasonably current Linux system, as a time saving feature.  While real hackers prefer [http://www.gnu.org Free software], if you&amp;#039;re forced to build stuff for Windows, this is the place to be.&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
&lt;br /&gt;
There have been several different ways of building with more or less success...&lt;br /&gt;
&lt;br /&gt;
The reference page to look at is the misleadingly named page [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]. Despite the name, tcsh is not involved nowadays. If you are going to use the ooo-build method, you should stop reading that page after the Cygwin section. The ooo-build build system will download the rest of the dependencies. One exception is gdiplus.dll which cannot be downloaded automatically as it requires Genuine Windows authentication.&lt;br /&gt;
&lt;br /&gt;
Different compilers that can or can not be used to build are documented below. The official way is Visual C++ .NET 2003.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio .NET 2003 Professional ===&lt;br /&gt;
&lt;br /&gt;
The C++ compiler included in Visual Studio .NET 2003 is the official one used to build OpenOffice.org. When installing, unless you need them otherwise, there is no need to install the Visual Basic, C#, J#, or .NET 1.1 SDK components.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio .NET 2003 Standard (approx $100 price) ===&lt;br /&gt;
&lt;br /&gt;
NB: These fixes have been rolled into more recent milestones, so you should now be able to happily build using standard. This is a tag to remove these notes and the page at some future point. --[[User:KaiB|KaiB]] 13:14, 1 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
You can use the Standard version of Visual Studio to build OpenOffice but there are certain workarounds needed. The problem is that OO.o enables /O flags in Professional that conveniently cripples the compiler enough to hide some ugly hacks and bugs that have crept in over the years. Standard does not support optimizations so suddenly these beasts get out in the open. See [[BuildingMSVCStandard]]&lt;br /&gt;
&lt;br /&gt;
For how to tune the MS IDE into coding OOo efficiently, see [[Editor_MSDev|this]] page.&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio 2008 Express ===&lt;br /&gt;
&lt;br /&gt;
The compiler has been released on 11/20/2007.&lt;br /&gt;
Porting for this compiler has been started.&lt;br /&gt;
&lt;br /&gt;
- under construction -&lt;br /&gt;
&lt;br /&gt;
-obo&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio 2005 Professional ===&lt;br /&gt;
&lt;br /&gt;
The necessary changes for configure haven&amp;#039;t been made, yet.&lt;br /&gt;
It may help to set the environment variable PROF_EDITION=TRUE&lt;br /&gt;
by hand. When using the Vista SDK (03/22/2007, Rev. 6.1.6000.16384.10)&lt;br /&gt;
setting the environment variable WINDOWS_VISTA_PSDK=TRUE may help.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;There are some issues with the Vista SDK see there, please.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The --disable-activex switch in the configure step is not needed for&lt;br /&gt;
the Professional Edition. The other steps should be the same as described&lt;br /&gt;
in the section for the Express compiler, but it hasn&amp;#039;t been tested.&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ 2005 Express ===&lt;br /&gt;
&lt;br /&gt;
[http://msdn.microsoft.com/vstudio/express/visualc Visual C++ 2005 Express] the &amp;#039;&amp;#039;&amp;#039;FREE&amp;#039;&amp;#039;&amp;#039; (as in free beer) Microsoft compiler is now supported for Windows builds. So, the great news is it&amp;#039;s possible to build OpenOffice.org with a free Microsoft tool-chain.&lt;br /&gt;
See steps for using this compiler in the [[Windows#Using ooo-build]] section below. In fact I would guess the config options below will probably work for a vanilla OpenOffice.org build also ( maybe someone will try that and add any extra info/steps here ).&lt;br /&gt;
&lt;br /&gt;
=== MinGW ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mingw.org/ MinGW] is gcc and GNU binutils targeted for Windows, producing plain Win32 executables. No POSIX emulation layer as Cygwin is involved. Using the Cygwin compiler with the -mno-cygwin switch in theory does the same, but unless one is very careful it is easy to get into a mess when using a Cygwin environment to build pure Win32 binaries.&lt;br /&gt;
&lt;br /&gt;
MinGW is not supported for building OpenOffice.org at the moment.&lt;br /&gt;
&lt;br /&gt;
Information about work to build OpenOffice.org with MinGW is at [http://qa.openoffice.org/issues/show_bug.cgi?id=24588 issue 24588] ; however this mostly deals with OpenOffice.org 1.1 at the moment.&lt;br /&gt;
&lt;br /&gt;
Information about work to build OpenOffice.org 2 with MingGW is at [http://qa.openoffice.org/issues/show_bug.cgi?id=53572 issue 53572], [http://qa.openoffice.org/issues/show_bug.cgi?id=71986 issue 71986], [http://qa.openoffice.org/issues/show_bug.cgi?id=82653 issue 82653], [http://qa.openoffice.org/issues/show_bug.cgi?id=83133 issue 83133]&lt;br /&gt;
&lt;br /&gt;
== Using vanilla source ==&lt;br /&gt;
&lt;br /&gt;
While ooo-build has been developed to make building OOo less painful, you might also try to start out with the standard source code. After you download and unpack a vanilla ooo source tarball, running &amp;amp;quot;configure&amp;amp;quot; in the directory &amp;amp;quot;config_office&amp;amp;quot; will gladly complain about missing build-dependencies. The remaining build process is described in the document [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
== Using ooo-build ==&lt;br /&gt;
&lt;br /&gt;
These are addenda to using ooo-build with the following command line:&lt;br /&gt;
  ./configure --with-win32&lt;br /&gt;
&lt;br /&gt;
ooo-build should pick up all the other requirements for you automatically (reading them out of the registry)&lt;br /&gt;
&lt;br /&gt;
=== Extra requirements ===&lt;br /&gt;
&lt;br /&gt;
Here are some issues that require attention when building using ooo-build, and details not mentioned in the [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh] page:&lt;br /&gt;
* It is unclear whether using a ooo-build tarball will work. At least at some stage it didn&amp;#039;t. Building from a checkout from (anonymous) SVN is known to work. You will then have to run autogen.sh.&lt;br /&gt;
* For some reason autogen.sh needs to be run through dos2unix, but none of the other shell scripts involved require this treatment.&lt;br /&gt;
* You should install also the Cygwin autoconf, automake, cabextract, diffutils, patchutils, pkg-config and wget packages&lt;br /&gt;
* You need to install the Perl module Archive::Zip using cpan. Just give the command &amp;quot;cpan&amp;quot;, hit Enter to all questions, select the appropriate CPAN mirrors for your region, and give cpan the command &amp;quot;install Archive::Zip&amp;quot;. Note: cpan will tell you that it is not up-to-date, and tell you how to upgrade itself, that is the Bundle::CPAN module. Please don&amp;#039;t attempt to do that. It will bring in updates to a shitload of dependent Perl modules, try to build and install them, too, but the process will eventually fail miserably and you will end up with a non-working mess.&lt;br /&gt;
* The OpenOffice.org configure requires make version 3.80 in Cygwin. You must use that instead of the make 3.81 that Cygwin offers currently. For your convenience, there is a copy of make.exe here: [http://download.go-oo.org/tstnvl/tml/make.exe].&lt;br /&gt;
* Some modules need gperf.exe, download from [[http://gnuwin32.sourceforge.net/packages/gperf.htm]] and put gperf.exe into one of our PATH directories.&lt;br /&gt;
&lt;br /&gt;
=== ooo-build with Visual C++ 2005 Express ===&lt;br /&gt;
&lt;br /&gt;
The following steps were performed on a clean machine ( Win XP ) with no dev tools installed on it.&lt;br /&gt;
&lt;br /&gt;
first review the information above&lt;br /&gt;
&lt;br /&gt;
bits you need and where to get them ( as of Mon 6-Nov-2006 )&lt;br /&gt;
&lt;br /&gt;
* [http://msdn2.microsoft.com/en-gb/express/aa700735.aspx visual c++ 2005 express edition ]&lt;br /&gt;
&lt;br /&gt;
* [http://msdn2.microsoft.com/en-gb/express/aa700755.aspx Microsoft Platform SDK]&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&amp;amp;displaylang=en platform sdk gdi+ ]&lt;br /&gt;
&lt;br /&gt;
* [http://www.apache.org/dist/ant/binaries apache-ant-1.6.5 ] ( afaik this actually isn&amp;#039;t needed for ooo-build but I autopiloted it in the configure, wont do any harm )&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?familyid=7A1C9DA0-0510-44A2-B042-7EF370530C64&amp;amp;displaylang=en Microsoft Macro Assembler 8.0 (MASM) Package (x86) ]&lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=CD1FC4B2-0885-47F4-AF45-7FD5E14DB6C0 Platform SDK Redistributable: Dbghelp.dll] &lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&amp;amp;displaylang=en DirectX Software Development Kit]&lt;br /&gt;
 &lt;br /&gt;
* [http://prdownloads.sourceforge.net/nsis/nsis-2.21-setup.exe NSIS]&lt;br /&gt;
&lt;br /&gt;
* [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe instmsiw.exe] and [http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe instmsia.exe] - put them in the $SRCDIR/external/msi directory&lt;br /&gt;
&lt;br /&gt;
nice [http://tools.openoffice.org/servlets/ReadMsg?listName=dev&amp;amp;msgNo=6031 hints]&lt;br /&gt;
hints from Volker re. the config flags&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: in the configure flags shown below DirectX is disabled ( sorry at this point I was still waiting for it to download )&lt;br /&gt;
&lt;br /&gt;
You need to copy msvcp80.dll and msvcr80.dll  into your $SRCDIR/external/msvcp80 dir&lt;br /&gt;
in my case I found those libraries in &lt;br /&gt;
&lt;br /&gt;
/cygdrive/c/WINDOWS/WinSxS/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd/msvc&lt;br /&gt;
&lt;br /&gt;
had to downgrade the gnu make version from 3.81 to 3.80 ( apparently for building mozilla, but mozilla build failed anyway for me, I haven&amp;#039;t had time yet to investigate further )&lt;br /&gt;
&lt;br /&gt;
perform the manual header [http://tools.openoffice.org/servlets/ReadMsg?listName=dev&amp;amp;msgNo=6024 change] as described &lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s my configure as an example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ./configure  --disable-build-mozilla --with-use-shell=bash --disable-activex --with-win32 --with-distro=NovellWin32&lt;br /&gt;
--with-tag=src680-m190 --with-cl-home=&amp;quot;/cygdrive/c/Program Files/Microsoft Visual Studio 8/VC&amp;quot;&lt;br /&gt;
--with-csc-path=&amp;quot;/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727&amp;quot; --with-midl-path=&amp;quot;/cygdrive/c/Program &lt;br /&gt;
Files/Microsoft Platform SDK for Windows Server 2003 R2/Bin&amp;quot; --with-frame-home=&amp;quot;/cygdrive/c/Program &lt;br /&gt;
Files/Microsoft Platform SDK for Windows Server 2003 R2&amp;quot; --with-ant-home=/cygdrive/c/apache-ant-1.6.5 &lt;br /&gt;
--with-jdk-home=/cygdrive/c/j2sdk1.4.2_13 --disable-directx --with-nsis-path=&amp;quot;/cygdrive/c/Program Files/NSIS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
compile problems:&lt;br /&gt;
&lt;br /&gt;
* [http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites_on_the_1.7_and_1.8_Branches#Compiler_.26_Linker Building  Mozilla 1.7.x with VC8 is not possible.] Just use the mozilla binary dist.&lt;br /&gt;
&lt;br /&gt;
* lpsolve &amp;amp; scsolver didn&amp;#039;t build ( these 2 are only relevant for only ooo-build with --with-distro-Novellxxxxx ) lpsolve has a minor problem with includes, in scsolver there are many template errors which I didn&amp;#039;t investigate yet. &lt;br /&gt;
&lt;br /&gt;
To disable temporarily either remove the CalcSolver label from the NovellWin32xxx sections in ooo-build/patches/src680/apply file or just use the generic PlainWin32 distro-target ( should work though I haven&amp;#039;t tried that )&lt;br /&gt;
&lt;br /&gt;
I got alot of problems with calls to remove where the call to remove includes std namespace. It seems that there is a precendent somewhere and maybe this at one time was known issue I opened this [http://www.openoffice.org/issues/show_bug.cgi?id=71404 issue] for that&lt;br /&gt;
&lt;br /&gt;
I seem to get lots of &amp;quot;/usr/bin/bash: Resource temporarily unavailable&amp;quot; with my version of cygwin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ uname -a&lt;br /&gt;
CYGWIN_NT-5.1 trouble2 1.5.21(0.156/4/2) 2006-07-30 14:21 i686 Cygwin &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the following steps  seemed to help or maybe the problem just went away by itself :-(&lt;br /&gt;
* reboot machine&lt;br /&gt;
* switch to tcsh e.g. do a &amp;#039;tcsh&amp;#039; at the command prompt&lt;br /&gt;
* build from (the source tree)/instsetoo_native directory using the build --all command while in that directory&lt;br /&gt;
--[[User:Npower|Npower]] 11:42, 10 November 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The mozilla binary dist is linked against msvcr71.dll,msvcp71.dll. Therefore these librarys needs to be copied&lt;br /&gt;
into your $SRCDIR/external/msvcp71 directory before doing the configure step. You can get these from an OpenOffice&lt;br /&gt;
installation set.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Runtime requirement of installation sets&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
On sytems without an installed msvcr80.dll the vcredist_x86.exe has to be installed once first. This can be free downloaded at [http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&amp;amp;displaylang=en Microsoft]&lt;br /&gt;
&lt;br /&gt;
--[[User:obo|obo]]&lt;br /&gt;
&lt;br /&gt;
== Building with Windows Vista SDK ==&lt;br /&gt;
&lt;br /&gt;
Problems:&lt;br /&gt;
The Vista PSDK isn&amp;#039;t complete. Several headers/librarys are missing: the whole ATL stuff, stgprop.h, adoctint.h.&lt;br /&gt;
&lt;br /&gt;
Requirements (if you don&amp;#039;t have the .NET 2005 Professional Edition):&lt;br /&gt;
&lt;br /&gt;
* Download and install Windows Vista SDK (released on 3/22/07)&lt;br /&gt;
* Create stgprop.h in the PSDK include directory by copy/paste from MSDN forum [http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=508254&amp;amp;SiteID=1 here]&lt;br /&gt;
* Copy the winres.h header from Microsoft SDKs/Windows/v6.0/Samples/winui/tsfapp/winres.h to Microsoft SDKs/Windows/v6.0/include&lt;br /&gt;
* Install the runtime library version 8.0.5072.762 with vcredist_x86.exe. You can download it [http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1A-4A14-984D-389C36F85647&amp;amp;displaylang=en here]&lt;br /&gt;
&lt;br /&gt;
Requirements (if you have the .NET 2005 Professional Edition):&lt;br /&gt;
* same as above, but add the include path of the compiler PSDK to the SOLARINC include path in following order: first Vista PSDK then compiler PSDK&lt;br /&gt;
&lt;br /&gt;
=== Windows SDK V6.1 ===&lt;br /&gt;
&lt;br /&gt;
* libxml2 breaks: redefinition of vnsprintf in config.h&lt;br /&gt;
* cppu/inc/uno/lbnames.h -&amp;gt; ms compiler version&lt;br /&gt;
&lt;br /&gt;
-- under construction --&lt;br /&gt;
&lt;br /&gt;
--[[User:obo|obo]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous info ==&lt;br /&gt;
&lt;br /&gt;
* csc.exe comes from the c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 directory, you might need &amp;lt;tt&amp;gt;--with-csc-path&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Beware of using &amp;lt;tt&amp;gt;/c/&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;/cygdrive/c/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Avoid trailing slashes in configure parameters. They sure cause problems for &amp;lt;tt&amp;gt;--with-psdk-home&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using some not quite latest cygwin releases (1.5.18/1.5.19) can lead to tcsh freezing in places - the build will appear to hang. You can fix this by running &amp;#039;&amp;#039;ls /proc/$nnn/fd&amp;#039;&amp;#039; where $nnn is the number of the process. Or just run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ls /proc/*/fd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to &amp;quot;unhang&amp;quot; the process. See [http://www.openoffice.org/issues/show_bug.cgi?id=51560 issue 51560] for more info...&lt;br /&gt;
&lt;br /&gt;
Noone so far created a reproducible hang that doesn&amp;#039;t require the whole OOo environment, and to make it worse, there are those who cannot reproduce the hang at all ( Works fine here ;) ([[User:Vq]]) ). Until someone provides a recipe to reproduce this problem with a &amp;#039;&amp;#039;&amp;#039;small&amp;#039;&amp;#039;&amp;#039; testcase we have to hope that the cygwin developers accidentally fix this problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
* With cygwin 1.5.18, makecab.exe hangs when run from the build process (but it works fine when run standalone).  So you definitely want to use a snapshot and &amp;#039;&amp;#039;&amp;#039;avoid cygwin 1.5.18&amp;#039;&amp;#039;&amp;#039;, unless you enjoy wasting half a week of your life debugging like I did ...&lt;br /&gt;
* With later Cygwin versions (various 1.5.19 and 1.5.20 snapshots) hangs have been noticed at least by me ([[User:TorLillqvist]]) at various stages of the build on a hyperthreading (Pentium 4) machine, while doing the same build using the exact same Cygwin version on a single-processor machine worked fine. So it might be a good idea to turn off hyperthreading.&lt;br /&gt;
* If you get errors like &amp;quot;too long line in ddf file&amp;quot; during the MSI installer build this is caused by too long filenames. Try setting your TEMP/TMP environment variable to something short like &amp;quot;C:\tmp&amp;quot;. There is a 255 char line limit for dds files and class names like &amp;quot;InvalidAuthenticationMechanismException&amp;quot; push the envelope. Shaving of 10-15 chars puts us back just under the limit.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;#039;&amp;#039;&amp;#039;Avoid using winzip&amp;#039;&amp;#039;&amp;#039; to extract the downloaded source archive. Observed problems include: &lt;br /&gt;
* CR-LF errors that can affect makefiles and cause compile errors&lt;br /&gt;
* Certain files unpacked into root folder, esp. likely when actual path is deeply nested (e.g. foo/bar/source/foo/java/org/x/y/z/w/LongFileName.hmm) which again causes mysterious compile errors.&lt;br /&gt;
Use the tar from Cygwin instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tar xvzf OOo_2.0.2_src.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
* If you fail to getting together a working installation of Cygwin, one possibility is to use a known-to-work combination of Cygwin packages, i.e. a direct copy of some other user&amp;#039;s Cygwin tree. [[User:TorLillqvist]] has such a tree (from late 2006) zipped up at http://download.go-oo.org/tstnvl/tml/tml-cygwin.zip . Don&amp;#039;t hesitate to ask for advice if necessary.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* To get started from scratch you most likely need to follow these steps (from the Linux version): [[Getting It]], [[Building]], [[Installing]], [[Running]]&lt;br /&gt;
* [[Windows Debugging]]&lt;br /&gt;
* [[Windows Tips]]&lt;br /&gt;
* [[Windows Installer Hacking]]&lt;br /&gt;
* [[SDKInstallation| How to install the SDK and compile the C++ examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Porting]] [[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58592</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58592"/>
		<updated>2007-12-21T13:41:38Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Loading new tables in older versions of OpenOffice.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Older versions will load the new tables as vector graphic files. Therefore editing of the table contents will not be possible. If the older version saves documents that contained native tables the original tables will be lost and converted to vector graphic files, even if later loaded by newer versions.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58591</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58591"/>
		<updated>2007-12-21T13:39:39Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58494</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58494"/>
		<updated>2007-12-20T12:36:17Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58492</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58492"/>
		<updated>2007-12-20T12:19:49Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58446</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58446"/>
		<updated>2007-12-20T08:32:52Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58417</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58417"/>
		<updated>2007-12-19T17:02:06Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Open&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58390</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=58390"/>
		<updated>2007-12-19T12:18:02Z</updated>

		<summary type="html">&lt;p&gt;Cl: clipboard done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Table Styles ====&lt;br /&gt;
This is the first section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Table Styles&lt;br /&gt;
&lt;br /&gt;
==== Table Style Options ====&lt;br /&gt;
This is the second section in the Table Design task pane&lt;br /&gt;
;String, &amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  Options&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Header row&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
;String&lt;br /&gt;
  Total row&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded rows&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
;String&lt;br /&gt;
  First column&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
;String&lt;br /&gt;
  Last column&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
;String&lt;br /&gt;
  Banded columns&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
;String&lt;br /&gt;
  Table Design&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%80&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56300</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56300"/>
		<updated>2007-12-05T11:41:22Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ffff&amp;quot;&amp;gt;Canceled&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%80&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56299</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56299"/>
		<updated>2007-12-05T11:39:09Z</updated>

		<summary type="html">&lt;p&gt;Cl: Merge/Split cells are working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%40&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%80&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56260</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=56260"/>
		<updated>2007-12-05T08:20:02Z</updated>

		<summary type="html">&lt;p&gt;Cl: Updated Table Design section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impress=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Designs ===&lt;br /&gt;
&lt;br /&gt;
Table designs can be changed from the Table Design pane on the task panel.&lt;br /&gt;
&lt;br /&gt;
- DISCUSS: Should this open automatic if a table is selected?&lt;br /&gt;
* PRO: Feature is more visible to the user&lt;br /&gt;
* CON: Assigning an effect to a table is harder to do, since the Custom Animation pane must be re selected by hand each time a table is selected.&lt;br /&gt;
&lt;br /&gt;
A Table Design is a set of predefined cell styles that are dynamically assigned to the cells of a table.&lt;br /&gt;
The styles available are&lt;br /&gt;
&lt;br /&gt;
* header row&lt;br /&gt;
* total row&lt;br /&gt;
* first column&lt;br /&gt;
* last column&lt;br /&gt;
* vertical banding&lt;br /&gt;
* horizontal banding&lt;br /&gt;
* default&lt;br /&gt;
&lt;br /&gt;
For each individual table it can be customized which of the first six&lt;br /&gt;
styles are used. If none of the first six styles is used or available,&lt;br /&gt;
the default style of the Table Design will be used.&lt;br /&gt;
The first style in the list that is available in the Table Design and&lt;br /&gt;
used by the table is assigned to a cell.&lt;br /&gt;
For example the top left cell will get the &amp;quot;header row&amp;quot; style if it is&lt;br /&gt;
available and the table is formated to use the header row. If not, it&lt;br /&gt;
gets the first column style, if that is available and the table is&lt;br /&gt;
formated to use the first column. If not, vertical banding is checked,&lt;br /&gt;
than horizontal banding and if nothing fits, the default is used.&lt;br /&gt;
&lt;br /&gt;
The default style is also the parent style for all other styles of a&lt;br /&gt;
table design. This means that all settings from the default style&lt;br /&gt;
are also applied to the other styles, unless they are hard set in&lt;br /&gt;
the other styles.&lt;br /&gt;
&lt;br /&gt;
A cell style for a Table Design can contain text formating, background&lt;br /&gt;
filling and cell border formating.&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%40&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%80&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=52728</id>
		<title>/Impress/Features/Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=/Impress/Features/Tables&amp;diff=52728"/>
		<updated>2007-11-07T15:27:11Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* Milestone Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Tables in Impresse=&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || Christian Lippka&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039; || Preliminary [[Specification_Template_Help#Status|Help]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Currently OpenOffice.org Impress lacks the native support for tables. It is possible to create tables by embedding a OpenOffice.org Calc object or by &amp;#039;drawing&amp;#039; a table by using multiple shapes. Both methods are neither user friendly nor accessible. The user expects a native support for tables like it is available in the OpenOffice.org Writer application for example. This specification defines a feature set that a common user expects from a native table implementation in OpenOffice.org Impress and also how it should be accessible on the user interface. It also takes into account the interoperability requirements with other similar products.&lt;br /&gt;
This specification only talks about tables in Impress. The same feature can and will be integrated in OpenOffice.org Draw. If there is a need for differences in the user interface for tables in Draw they will be documented either in a separate chapter in this specification or in another specification for tables in Draw.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Reference Document&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Check&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Location (URL)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| |&amp;#039;&amp;#039;&amp;#039;[http://wiki.services.openoffice.org/wiki/Category:Specification#Before_Writing_a_Software_Specification_--_What_Else_Do_I_have_to_Do.3F Specification Process Entry Check]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [passed/failed]&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Product Requirement, RFE, Issue ID&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| available&lt;br /&gt;
| [https://so-web.germany.sun.com/iBIS/servlet/edit.ControlPanel?tid=i68103 issue 68103]&lt;br /&gt;
|-&lt;br /&gt;
| Product Concept Document&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[[Test case specification]]&amp;#039;&amp;#039;&amp;#039; (required)&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IDL Specification&lt;br /&gt;
| [available/not available]&lt;br /&gt;
| &amp;lt;PLEASE ENTER LOCATION HERE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.services.openoffice.org/wiki/The_Three_Golden_Rules_for_Writing_OpenOffice.org_Specifications &amp;#039;&amp;#039;&amp;#039;Software Specification Rules&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
| n/a&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;300&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Role&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;E-Mail Address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Lippka&lt;br /&gt;
| christian.lippka@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Quality Assurance&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Christian Guehnter&lt;br /&gt;
| christian.guehnter@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Uwe Fischer&lt;br /&gt;
| uwe.fischer@sun.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;User Experience&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Matthias Mueller-Prove&lt;br /&gt;
| Matthias.Mueller-Prove@Sun.COM&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Acronyms and Abbreviations ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Acronym / Abbreviation&amp;#039;&amp;#039;&amp;#039; || bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Definition&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;WYSIWYG&amp;gt;&lt;br /&gt;
| &amp;lt;What You See Is What You Get&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Specification ==&lt;br /&gt;
&lt;br /&gt;
=== Table Contents ===&lt;br /&gt;
A table in impress is presented to the user as a shape. All patterns that apply to all generic shapes also apply to tables. A table shape is a rectangle area build of cells that are arranged in horizontal rows and vertical columns. All rows and columns are always completely visible inside the rectangle that defines the table. No scrolling is needed to see all tables if the table itself is completely visible. Resizing the table itself will also resize the containing cells so that all cells fit in the new rectangle. Adjacent cells can be merged so that the first merged cell occupies the area of all merged cells. All other merged cells will be invisible as long as they are part of a merge. A cell itself can contain text with multiple paragraphs. &lt;br /&gt;
&lt;br /&gt;
=== Table Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Position &amp;amp; Size ====&lt;br /&gt;
As a shape, the table shape is placed on a slide and has a position and a size. Table shapes can not be rotated, so the position and size defines the rectangle area on the slide that is used to render all contained cells, excluding shadow and reflection. In contrast to using an embedded Calc object for tables, the position and size during editing a tables contents in Impress is always “what you see is what you get”.&lt;br /&gt;
&lt;br /&gt;
==== Style ====&lt;br /&gt;
Each table shape will have a table style assigned that defines the formating properties for the cells if the properties are not hard set on the table or cell itself. Table styles are described in Change Me&lt;br /&gt;
&lt;br /&gt;
==== Formating properties ====&lt;br /&gt;
&lt;br /&gt;
Formating properties can be hard set on the table. They will override the formating properties from the table style and are used when the user creates new content like text or new cells. If the user sets new formating properties to a table, these properties will also be hard set to each cell in that table. The following properties are supported&lt;br /&gt;
&lt;br /&gt;
* cell properties (TODO: com.sun.star.text.CellProperties or com.sun.star.table.CellProperties)&lt;br /&gt;
* character properties (com.sun.star.style.CharacterProperties, com.sun.star.style.CharacterPropertiesAsien, com.sun.star.style.CharacterPropertiesComplex )&lt;br /&gt;
* paragraph properties (com.sun.star.style.ParagraphProperties, com.sun.star.style.ParagraphPropertiesAsien, com.sun.star.style.ParagraphPropertiesComplex )&lt;br /&gt;
* fill properties (com.sun.star.drawing.FillProperties)&lt;br /&gt;
&lt;br /&gt;
==== Layout properties ====&lt;br /&gt;
Layout properties are hard set on the table. They help define the overall layout of the table and how the table style is used on the containing cells.&lt;br /&gt;
&lt;br /&gt;
==== Header Row ====&lt;br /&gt;
If enabled, all cells of the first row are using the header row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== Total Row ====&lt;br /&gt;
If enabled, all cells in the last row are using the total row formating from the table style&lt;br /&gt;
&lt;br /&gt;
==== First Column ====&lt;br /&gt;
If enabled, all cells in the first column are using the first column formating from the table style. This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Last Column ====&lt;br /&gt;
If enabled, all cells in the last column are using the last column formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Rows ====&lt;br /&gt;
If enabled, all cells from even rows are using the even horizontal banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
==== Banded Columns ====&lt;br /&gt;
If enabled, all cells from even columns are using the even vertical banding formating from the table style.  This excludes all cells that are affected from one of the layout properties defined above.&lt;br /&gt;
&lt;br /&gt;
=== Row Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Height ====&lt;br /&gt;
If a row has an assigned height, this is the absolute height of that row. If no height is assigned, a best fit algorithm is used to calculate the height depending on the maximum text height of all cells in that row, the height of all other rows and the overall table height. The sum of all column heights must not exceed the height of the table shape. If this is designated than the height of the table shape must also be changed to fit all rows.&lt;br /&gt;
&lt;br /&gt;
=== Column Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Width ====&lt;br /&gt;
&lt;br /&gt;
Each column has an assigned with. The sum of all column width must be exactly the width of the table shape.&lt;br /&gt;
&lt;br /&gt;
=== Cell Properties ===&lt;br /&gt;
&lt;br /&gt;
Each cell supports all formatting properties that are also available on the table itself. All properties set on the cell directly override the properties from the table style. Which of the formatting options from the tables style is used depends on the tables layout properties. The default formatting option is the uneven horizontal banding formation. Formatting properties set directly on the table do not override the formatting properties on cells, they are only used when creating new cells or adding text to cells without text.&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Span ====&lt;br /&gt;
If a cell is the first cell in a horizontal range of merged cells, this property defines the number of horizontal cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Vertical Span ====&lt;br /&gt;
If a cell is the first cell in a vertical range of merged cells, this property defines the number of vertical cells that are merged.&lt;br /&gt;
&lt;br /&gt;
==== Merged ====&lt;br /&gt;
All cells that are part of a range of merged cells, excluding the first cell, have this property set.&lt;br /&gt;
&lt;br /&gt;
=== Selection and Focus ===&lt;br /&gt;
&lt;br /&gt;
* A selection consist of one or more selected cells.&lt;br /&gt;
* If a selection is available there will be no text cursor visible.&lt;br /&gt;
* If an operation creates the text cursor, all selected cells will be deselected.&lt;br /&gt;
* A cell has the focus if there is a text cursor inside that cell.&lt;br /&gt;
* If an operation needs a cell with a focus and no cell has the focus but there is an active selection, the first cell of that selection will become the focus.&lt;br /&gt;
* There can only be either a text selection or selected cells, not both. Creating a text selection deselects all cells. Selecting cells deselects all selected text.&lt;br /&gt;
&lt;br /&gt;
=== Table Styles ===&lt;br /&gt;
&lt;br /&gt;
==== Header Row Formating ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Total Row Formating ====&lt;br /&gt;
&lt;br /&gt;
==== First Column Formating====&lt;br /&gt;
&lt;br /&gt;
==== Last Column Formating====&lt;br /&gt;
&lt;br /&gt;
==== Horizontal Banding Formating ====&lt;br /&gt;
&lt;br /&gt;
==== Vertical Banding Formating====&lt;br /&gt;
&lt;br /&gt;
=== Operations on Tables ===&lt;br /&gt;
&lt;br /&gt;
This section documents all the operations a user can apply to tables.&lt;br /&gt;
&lt;br /&gt;
==== Insert ====&lt;br /&gt;
&lt;br /&gt;
Tables can be inserted with the table slot from either the insert menu or the &amp;quot;Standard&amp;quot;, &amp;quot;Insert&amp;quot; or &amp;quot;Table&amp;quot; tool bar.&lt;br /&gt;
When using the tool bar a drop down floating window opens where the user can select the initial number of columns&lt;br /&gt;
and rows.&lt;br /&gt;
&lt;br /&gt;
[[image:Insert_Table_Preview.png|Inserting a table using the &amp;quot;Standard&amp;quot; tool bar and the mouse]]&lt;br /&gt;
&lt;br /&gt;
==== Resizing ====&lt;br /&gt;
When resizing a table shape the following constrains must be met&lt;br /&gt;
* All cells must have at least a minimum with and height&lt;br /&gt;
* All cells must be big enough to format and display all its text contents without clipping or over painting their borders.&lt;br /&gt;
If the user try to resize a table to a size that can not fulfill the above constrains the application will automatically increase the table shape width and height until all constrains are fulfilled. The application will give priority to the width and will only change height if possible.&lt;br /&gt;
&lt;br /&gt;
==== Text editing ====&lt;br /&gt;
If text is added to a cell that does not fit to the width of the cell, automatic line breaking is performed to format the text inside the cells width. If the formatted text still does not fit the cell then the height of the row for that cell is increased until the formatted text fits both the fixed with and the new cell height.&lt;br /&gt;
If text is removed from a cell and the size of the row is not fixed, the application automatically tries to reduce the height of the row until it has the minimum size to contain the contents of all cells in that row.&lt;br /&gt;
If as a result of text editing, the height of a row is changed, the height of the table shape is also changed so it exactly fits the new sizes.&lt;br /&gt;
&lt;br /&gt;
==== Delete Columns ====&lt;br /&gt;
If cells are selected, all columns that contain selected cells are deleted. If no cell is selected, the column with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Delete Rows ====&lt;br /&gt;
If cells are selected, all rows that contain selected cells are deleted. If no cell is selected, the row with the cell that has the focus is deleted. If there is no selection and no cell has the focus, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Insert Above ====&lt;br /&gt;
A new row is inserted before the current selection. If there is no selection a new row is inserted before the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is inserted before the first row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Below ====&lt;br /&gt;
A new row is inserted after the current selection. If there is no selection a new row is inserted after the row with the cell that has the focus. If no selection is available and no cell has the focus, a new row is appended to the last row of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Left ====&lt;br /&gt;
A new column is inserted before the current selection. If there is no selection a new column is inserted before the column with  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted before the first column of the table.&lt;br /&gt;
&lt;br /&gt;
==== Insert Right ====&lt;br /&gt;
A new column is inserted left to the current selection. If there is no selection a new column is inserted left to  the cell that has the focus. If no selection is available and no cell has the focus, a new column is inserted at the left of the table.&lt;br /&gt;
&lt;br /&gt;
==== Merge Cells ====&lt;br /&gt;
All selected cells are merged so that the first cell fills out the space of all other selected cells. All other selected cells become invisible. All text content of the selected cells is merged into the first cell. The first cell is the cell in the first selected row and the first selected column. Cells from different rows and columns can be merged, as long as the area defined by the rectangles of all cells contains no cells that will not be part of the merge. For example You can not merge Cell A1 with A3 as the merged rectangle would include A2. You can not merge A1 with A2 and B1 as the merged rectangle includes B2. You can not merge A1 with A2 if A2 is already merged with B2 as the merged rectangle would include B1.&lt;br /&gt;
If there is no valid selection of more than one cell, this operation is disabled.&lt;br /&gt;
&lt;br /&gt;
==== Split Cells ====&lt;br /&gt;
If this operation is executed, the “Split Cells Dialog” pops up and asks the user how many new columns and rows he wants for all selected cells. If that dialog is not canceled then all selected cells are split so that they each contain the new number of rows and cells in the same area of the old selected cells. If no cell is selected than this operation is performed only on the cell with the focus. If no cell is selected and there is no cell with the focus then this operation is disabled.&lt;br /&gt;
If the newly created cells are smaller than the minimum defined cell width or height the table shape is automatically resized to fit the new cells with the minimum width or height.&lt;br /&gt;
Internally splitting a cell is done by adding new rows and or columns and merging adjacent cells.&lt;br /&gt;
&lt;br /&gt;
==== Change Row Height ====&lt;br /&gt;
If the user changes the height of a row, this row becomes fixed size. It can&amp;#039;t be made smaller than the minimum cell height. If the height of a row is increased, the height of the table shape is also increased to fit the new row height.&lt;br /&gt;
&lt;br /&gt;
==== Change Column Width ====&lt;br /&gt;
If the user changes the width of a column, the width of the next column will be reduced so that the width of the table stays constant. The width of a column can not be smaller than the minimum cell width. If a columns width can only be increased as long as the next columns width is bigger than the minimum cell width. If the last column is resized, the width of the table is resized to fit the new column width.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Rows Equally ====&lt;br /&gt;
This operation makes all rows the same height. This is the height of the table shape divided by the number of rows.&lt;br /&gt;
&lt;br /&gt;
==== Distribute Columns Evenly ====&lt;br /&gt;
This operation makes all columns the same width. This is the width of the table shape divided by the number of columns.&lt;br /&gt;
&lt;br /&gt;
==== Select Row ====&lt;br /&gt;
This operation adds all cells in one row to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Column ====&lt;br /&gt;
This operation adds cells in one column to the current selection.&lt;br /&gt;
&lt;br /&gt;
==== Select Cell ====&lt;br /&gt;
&lt;br /&gt;
This operation adds one cell to the current selection.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard interactions ===&lt;br /&gt;
&lt;br /&gt;
The keyboard interactions specified here are taking from observing the current keyboard interactions for tables in OpenOffice.org Writer. All keys not specified below will be used as normal text input and will be inserted at the position of the text cursor. If no cell has a focus, the first cell will become the focus.&lt;br /&gt;
&lt;br /&gt;
==== Cursor keys ====&lt;br /&gt;
If a cell has the focus, the cursor keys are used to travel the text cursor in the containing text. If not text is contained or the start or end of the text is reached, the focus will be transferred to the corresponding adjacent cell, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor left =====&lt;br /&gt;
Travels the text cursor towards the beginning of the text in a cell, character by character. If no cell text is available or if the cursor is already at the beginning of the text, the focus is moved to the first visible cell left of the cell with the focus. If the cell with the current focus is the first visible cell in that row, the focus is transferred to the last visible cell in the previous row, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor right =====&lt;br /&gt;
Travels the text cursor towards the end of the text in a cell, character by character. If no text is available or if the text cursor is already at the end of the text, the focus is moved to the first visible cell in the same row after the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor up =====&lt;br /&gt;
Travels the text cursor towards the begin of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the prior row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
&lt;br /&gt;
===== Cursor down =====&lt;br /&gt;
Travels the text cursor towards the end of the text, line by line. If no text is available or if the text cursor is already at the begin of the text, the focus is moved to the cell in the next row that is adjacent to the cell with the focus, if available.&lt;br /&gt;
Cursor keys and modifier key STRG?&lt;br /&gt;
Only cursor left and cursor right are supported with this modifier. Behavior is the same, except text is traveled word by word instead of character by character.&lt;br /&gt;
&lt;br /&gt;
===== Tab key =====&lt;br /&gt;
The focus is moved to the next visible cell in the the row with the cell that contains the focus. If there are no more visible cells in that row, the first visible cell in the next row gets the focus, if available. If there is no selection and no focus, nothing happens.&lt;br /&gt;
If the tab key is used in the last visible cell of the last row, the operation “Insert Below” will be executed and the focus will be set to the first cell in the newly created row.&lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Tab key and modifier SHIFT? =====&lt;br /&gt;
The focus is moved to the previous visible cell in the the row with the cell that contains the focus. If there are no more visible cells prior to the cell with the focus in that row, the last visible cell in the previous row gets the focus, if available. &lt;br /&gt;
If there is an active selection, the selection is changed that the focused cell now is a border of the selection rectangle.&lt;br /&gt;
&lt;br /&gt;
===== Pos1 key =====&lt;br /&gt;
If there is a text cursor, it is placed at the beginning of the text from the cell with the focus.&lt;br /&gt;
Pos1 key and modifier STRG?&lt;br /&gt;
The focus is set to the first cell.&lt;br /&gt;
&lt;br /&gt;
===== End key =====&lt;br /&gt;
If there is a text cursor, it is placed at the end of the text from the cell with the focus.&lt;br /&gt;
End key and modifier STRG?&lt;br /&gt;
The focus is set to the last cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key =====&lt;br /&gt;
The character before the text cursor is deleted. If there are no characters before the text cursor, the focus is moved to the previous visible cell in the same row as the cell with the focus. If there is no previous visible cell in the same row, the last visible cell in the previous row will be used, if available. If the focus changes to another cell, the text cursor is placed at the end of the text in that cell.&lt;br /&gt;
&lt;br /&gt;
===== Backspace key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== Delete key =====&lt;br /&gt;
The character at the text cursor is deleted. If there are no characters at the text cursors, the focus is moved to the next visible cell in the same row as the cell with the focus. If there is no next visible cell in the same row, the first visible cell in the next row is used, if available.&lt;br /&gt;
&lt;br /&gt;
===== Delete key and modifier STRG? =====&lt;br /&gt;
Same Behavior as without modifier, expect that whole words are deleted instead of single characters.&lt;br /&gt;
&lt;br /&gt;
===== A key and modifier STRG? =====&lt;br /&gt;
If the cell with the focus contains text, the whole text of that cell is selected. If it is already selected or if there is no cell containing the focus, all cells are selected. If the cell with the focus contains no text, all cells are selected.&lt;br /&gt;
&lt;br /&gt;
===== Selection and the modifier key SHIFT? =====&lt;br /&gt;
All keys used for traveling can be combined with the modifier key SHIFT?. In that case an existing selection is expanded to the cell with the focus. If no selection is available a new selection is spawned from the cell with the initial focus. Traveling inside text spawns a text selection. As soon as cells are selected or a text selection is spawned across cell borders, only whole cells will be traveled and selected.&lt;br /&gt;
&lt;br /&gt;
=== Mouse interactions ===&lt;br /&gt;
If selected, a table shape becomes a border and handles for translation and resizing.&lt;br /&gt;
&lt;br /&gt;
==== Setting the focus ====&lt;br /&gt;
When the user clicks inside a cell, the focus and text cursor is placed inside that cell. If the click was made inside text in a cell, the text cursor is placed directly at this position. If the table shape does not yet have the focus, it will get the focus and text edit will become active.&lt;br /&gt;
&lt;br /&gt;
==== Context Menu ====&lt;br /&gt;
Right click into the table will set focus to the cell under the mouse pointer and create a context menu. If the text engine can provide a context menu for the given text selection or for the text under the mouse position, this context menu will be used. If not, the table shape context menu is shown (see 1.11).&lt;br /&gt;
&lt;br /&gt;
==== Resizing Row Height ====&lt;br /&gt;
If the mouse is near the border between two rows, the mouse pointer will change to reflect that resizing the row height is now possible. When the user press the left mouse button, horizontal changes of the mouse will result in resizing the row height. See 1.7.11 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Resizing Column Width ====&lt;br /&gt;
If the mouse is near the border between two rows and both the cell left and right to the mouse are not merged together, the mouse pointer will change to reflect that resizing the column width is possible. When the user press the left mouse button, vertical changes of the mouse will result in resizing the column width. See 1.7.12 for constrains.&lt;br /&gt;
&lt;br /&gt;
==== Row selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the left side of a row, the  mouse pointer will change to reflect that selecting the row is possible. If the left mouse is clicked, the old selection is removed and all cells in the row right to the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Column selection ====&lt;br /&gt;
If the table shape has the focus and the mouse is near to the top side of a column, the  mouse pointer will change to reflect that selecting the column is possible. If the left mouse is clicked, the old selection is removed and all cells in the column below the mouse are selected.&lt;br /&gt;
&lt;br /&gt;
==== Mouse selection ====&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Clipboard operations ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Table shape context menu ===&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
=== Split Cells Dialog ===&lt;br /&gt;
The “Split Cells” dialog from the OpenOffice.org Writer application will be used.&lt;br /&gt;
&lt;br /&gt;
[[image:Split_Cells_Preview.png|A preview of the &amp;quot;Split Cells&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
=== Table toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[image:Table_Toolbar_Preview.png|A preview of the &amp;quot;Table&amp;quot; tool bar in impress]]&lt;br /&gt;
&lt;br /&gt;
* Insert Table&lt;br /&gt;
* -------------&lt;br /&gt;
* Line Style -&amp;gt; Style: DropDownOnly&lt;br /&gt;
* Line Color (of the border) Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Border Style: DropDownOnly&lt;br /&gt;
* Background Color Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Merge Cells&lt;br /&gt;
* Split Cells&lt;br /&gt;
* Optimize --&amp;gt; Optimize Style: DropDownOnly&lt;br /&gt;
* -------------&lt;br /&gt;
* Top&lt;br /&gt;
* Center&lt;br /&gt;
* Bottom&lt;br /&gt;
* -------------&lt;br /&gt;
* Insert Row&lt;br /&gt;
* Insert Column&lt;br /&gt;
* Delete Row&lt;br /&gt;
* Delete Column&lt;br /&gt;
* ----------&lt;br /&gt;
* Select Table#&lt;br /&gt;
* Select Columns#&lt;br /&gt;
* Select Rows#&lt;br /&gt;
* ----------&lt;br /&gt;
* AutoFormat&lt;br /&gt;
* Table Properties&lt;br /&gt;
* -------------&lt;br /&gt;
* Sort...&lt;br /&gt;
* -------------&lt;br /&gt;
* Sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Detailed_Specification|Help]] | [[UI-Elements|User Interface Element Templates]] | [[Specification_Example|Example Spec]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&lt;br /&gt;
=== Migrating old tables ===&lt;br /&gt;
Existing content where user draw their tables using shapes or the OpenOffice.org Calc application can not be converted to native tables. The user will have to re create the table and copy the textual contents to the new table via clipboard.&lt;br /&gt;
The same applies to tables imported from Microsoft Powerpoint in versions that did not support native tables as the resulting group shape does not contain any information to re create the original table.&lt;br /&gt;
&lt;br /&gt;
=== Loading new tables in older versions of OpenOffice.org ===&lt;br /&gt;
Older versions of OpenOffice.org that do not contain the feature of native tables in impress will not be able to work with the new tables as described in this specification. Currently there are two options. Either the new table shapes show not up in older versions at all after loading a document. Or we store the new tables the same way as we store embedded OpenOffice.org Calc objects. In that case the tables are visible in older applications with the short come that they may render a little different and the content is still editable but not as user friendly as with the new tables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#Configuration|Help]] | [[Configuration-Table|Configuration Table Template]]&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&amp;lt;START TYPING HERE --- If this part is irrelevant state a reason for its absence.&amp;gt; [[Specification_Template_Help#File_Format|Help]]&lt;br /&gt;
&lt;br /&gt;
 [[Specification_Template_Help#File Format|Help]] | [[File Format Table|File Format Table Template]]&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
&amp;lt;State a bulleted list of issues Issue here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Milestone Planning ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td&amp;gt;Task&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Core&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement a table shape in the drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement XShape API for the table shape&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add support for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add mouse interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add keyboard interaction for multiple text objects per shape to drawing layer&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table rows&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add handles for table columns&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table structure with cell background and text&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Selection of cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Render table borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;API support for cell styles in Sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support for single and multiple cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Clipboard support between sd and other OOo applications&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;User Interface&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add table toolbar in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Line Style&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Border Line Color&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Borders&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Background Filling&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Merge / Split Cells&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;80%&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Optimize&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Text Alignment&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Insert/Delete Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Select Table/Row/Column&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Auto format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Table Properties&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sort&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Sum&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Create cell property dialog for drawing layer cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add font effect tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Borders tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;* Add Background tab page&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Keyboard navigation in table&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add cell styles to stylist in sd&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;setting cell styles to selected cells&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support search&amp;amp;replace for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support spell checking for text in tables&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Enable table shape as presentation layout object&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;User interface for auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%40&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;xml load/store for predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;define some predefined auto format styles&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell formatting&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%80&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for table structure changes&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;%50&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Undo for cell merges/split&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;XML&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure export&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell content auto styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Export auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement embedded cell structure import&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement external cell structure import&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import cell styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Import auto format styles&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#00ff00&amp;quot;&amp;gt;Done&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement backward compatibility strategies&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;I18N&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Support for RTL languages in tables&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Accesibility&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Implement accessibility API for table shape&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Interop&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add export support to ppt binary format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Add import support from ppt xml format&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;planned&amp;lt;/td&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr bgcolor=&amp;quot;#c0c0c0&amp;quot;&amp;gt;&amp;lt;td colspan=2&amp;gt;Milestone&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Due&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0c0ff&amp;quot;&amp;gt;M1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Basic User Interface&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6. Aug. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Advanced User Interface finishing, including feedback from Milestone 1 testing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0ff&amp;quot;&amp;gt;M3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XML Support&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;16. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#c0ffc0&amp;quot;&amp;gt;M4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Interop and Finishing&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30. Nov. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td bgcolor=&amp;quot;#ffc0c0&amp;quot;&amp;gt;M5&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Implement Feedback from testing/comunity/user exp.&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;21. Dez. 2007&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Status Changes ===&lt;br /&gt;
&lt;br /&gt;
08/20/2007&lt;br /&gt;
* Merge and Split operation took longer to implement then initially planned, shifting milestone M2 around two weeks&lt;br /&gt;
* Due to unplanned workload with OOo 2.3 show stopper issues shift M2 one week&lt;br /&gt;
* Since this now spans over my one week vacation in October, M4 is shifted one additional week&lt;br /&gt;
&lt;br /&gt;
10/15/2007&lt;br /&gt;
* Back from vacation, had to do some support for the presenter screen feature&lt;br /&gt;
* Undo is more complicated than planed, have to adjust dates again&lt;br /&gt;
* Talked about cell styles with MMP, having cell styles and table styles is confusing for the user.&lt;br /&gt;
Therefore we will only have table styles. Design of the user interface for table styles is currently&lt;br /&gt;
unclear...&lt;br /&gt;
&lt;br /&gt;
[[Category:Specification]] [[Category:Impress]] [[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=52727</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=52727"/>
		<updated>2007-11-07T15:26:17Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My personal list of todo stuff and current status&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : CL&lt;br /&gt;
&lt;br /&gt;
Mail : christian.lippka AT sun.com&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Work ==&lt;br /&gt;
&lt;br /&gt;
* Implementing table shapes for draw and impress ( [[Draw_Tables]] )&lt;br /&gt;
* Fixing issues for OOo 2.4&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== Open ODF 1.2 features ===&lt;br /&gt;
&lt;br /&gt;
Auto shrink text in shapes [[http://lists.oasis-open.org/archives/office/200701/msg00025.html OASIS]]&lt;br /&gt;
Status: Desired for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposals for tables in presentations/drawings [[http://lists.oasis-open.org/archives/office/200701/msg00031.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposal: last visited page interaction [[http://lists.oasis-open.org/archives/office/200701/msg00042.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
How to add animations for shapes on master pages [[http://lists.oasis-open.org/archives/office/200702/msg00123.html OASIS]]&lt;br /&gt;
Status: Planed for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for rounded corners of rects (draw:corner-radius) [[http://lists.oasis-open.org/archives/office/200703/msg00206.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Add glue points to 3D objects [[http://lists.oasis-open.org/archives/office/200705/msg00102.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Proposal for &amp;lt;anim:audio&amp;gt; [[http://lists.oasis-open.org/archives/office/200705/msg00128.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
Proposal to enhance hyperlinks to support shapes [[http://lists.oasis-open.org/archives/office/200707/msg00061.html OASIS]]&lt;br /&gt;
Status: Import planned for OOo 2.4, export desired for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for extending stroke dashes [[http://lists.oasis-open.org/archives/office/200708/msg00006.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;svg:desc&amp;gt; and &amp;lt;svg:title&amp;gt; for drawing pages [[http://lists.oasis-open.org/archives/office/200710/msg00065.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Layer-set per page [[http://lists.oasis-open.org/archives/office/200705/msg00132.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Points are integers in ODF,but floating-point in SVG [[http://lists.oasis-open.org/archives/office/200703/msg00243.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Impress]]&lt;br /&gt;
[[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Cl&amp;diff=52710</id>
		<title>User:Cl</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Cl&amp;diff=52710"/>
		<updated>2007-11-07T14:46:42Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You probably look for [[User:CL]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=52709</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=52709"/>
		<updated>2007-11-07T14:46:00Z</updated>

		<summary type="html">&lt;p&gt;Cl: transfered my new todo list from wrong wiki page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My personal list of todo stuff and current status&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : CL&lt;br /&gt;
&lt;br /&gt;
Mail : christian.lippka AT sun.com&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== Open ODF 1.2 features ===&lt;br /&gt;
&lt;br /&gt;
Auto shrink text in shapes [[http://lists.oasis-open.org/archives/office/200701/msg00025.html OASIS]]&lt;br /&gt;
Status: Desired for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposals for tables in presentations/drawings [[http://lists.oasis-open.org/archives/office/200701/msg00031.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
Proposal: last visited page interaction [[http://lists.oasis-open.org/archives/office/200701/msg00042.html OASIS]]&lt;br /&gt;
Status: Planed for OOo3.0&lt;br /&gt;
&lt;br /&gt;
How to add animations for shapes on master pages [[http://lists.oasis-open.org/archives/office/200702/msg00123.html OASIS]]&lt;br /&gt;
Status: Planed for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for rounded corners of rects (draw:corner-radius) [[http://lists.oasis-open.org/archives/office/200703/msg00206.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Add glue points to 3D objects [[http://lists.oasis-open.org/archives/office/200705/msg00102.html OASIS]]&lt;br /&gt;
Status: Currently not planed for OOo&lt;br /&gt;
&lt;br /&gt;
Proposal for &amp;lt;anim:audio&amp;gt; [[http://lists.oasis-open.org/archives/office/200705/msg00128.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
Proposal to enhance hyperlinks to support shapes [[http://lists.oasis-open.org/archives/office/200707/msg00061.html OASIS]]&lt;br /&gt;
Status: Import planned for OOo 2.4, export desired for OOo 3.0&lt;br /&gt;
&lt;br /&gt;
Proposal for extending stroke dashes [[http://lists.oasis-open.org/archives/office/200708/msg00006.html OASIS]]&lt;br /&gt;
Status: Already integrated in OOo 2.0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;svg:desc&amp;gt; and &amp;lt;svg:title&amp;gt; for drawing pages [[http://lists.oasis-open.org/archives/office/200710/msg00065.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Layer-set per page [[http://lists.oasis-open.org/archives/office/200705/msg00132.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
Points are integers in ODF,but floating-point in SVG [[http://lists.oasis-open.org/archives/office/200703/msg00243.html OASIS]]&lt;br /&gt;
Status: Still under discussion in the TC&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Impress]]&lt;br /&gt;
[[Category:Draw]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=VCL_UI_Rework&amp;diff=34328</id>
		<title>VCL UI Rework</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=VCL_UI_Rework&amp;diff=34328"/>
		<updated>2007-06-07T15:50:10Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* new XML format */  Thoughts about how to add layout to XML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rational ==&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs (along with most translated strings) are stored in a rather unusual binary resource file format, that has not had much love in the last decade. We need to write some new code that separates the process of designing &amp;amp; laying out the UI from the code - to allow UE to make our UI more beautiful, and allow future re-factoring. The existing Basic GUI dialog editor and it&amp;#039;s XML format should be re-used, a simple C++ compatibility API created, and a number of dialogs converted to the new format.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
There have already been several attempts at adding features to VCL, and of course people have different requirements, an initial synthesis of requirements is perhaps helpful. Please do add subsequent constraints, or comments thereof.&lt;br /&gt;
&lt;br /&gt;
=== Simple code changes (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
Of course, we want to remove lots of code - all the immediate construction of non-core widgets that do not require special handling for a start. However - given the scope of the problem, it does not seem sensible to require some vast re-writing of each &amp;amp;amp; every dialog from day 1. ie. re-implementing all callbacks using a UNO Listener type interface would kill the task, we should stick with existing callback mechanisms and signatures.&lt;br /&gt;
&lt;br /&gt;
=== QA Test tool (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
We need to ensure either, that relevant qa testtool tests are updated to use the new UI code, or that we have a strong back-compat story here.&lt;br /&gt;
&lt;br /&gt;
=== Re-use of existing code (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Clearly the existing form code has not only a working XML serialization, but code to (re)store from that, re-using that where at all possible is important. Unfortunately this code is rather complex and difficult to work with. A life-boat approach to creating a new cleaner, smaller structure and moving dialogs across would perhaps be better.&lt;br /&gt;
&lt;br /&gt;
=== Simple new APIs (Important) ===&lt;br /&gt;
&lt;br /&gt;
The existing &amp;amp;amp; successful [[http://svn.gnome.org/viewcvs/libglade/trunk/glade/glade-xml.h?view=markup libglade API]] is a good model to build from. Identifying widgets and signals by strings seems to scale well and be more extensible than the SID based system.&lt;br /&gt;
&lt;br /&gt;
=== I18n (Important) ===&lt;br /&gt;
&lt;br /&gt;
The i18n story is important, quite possibly we&amp;#039;ll want to process any Form XML to introduce integer IDs to identify strings, feature creep into re-writing i18n might kill this project.&lt;br /&gt;
&lt;br /&gt;
=== Layout (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
Adding automatic layout, as modern toolkits do, would substantially help improve the look of the UI, it&amp;#039;s portability to other platforms, and also it&amp;#039;s look when translated.&lt;br /&gt;
&lt;br /&gt;
=== Reduced Inheritance (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs inherit (somehow) from VCL&amp;#039;s Window class. Such inheritance from virtual bases generates large vtables, and substantial inefficiency across the code-base. Wherever possible we should have a child instance of the relevant window &amp;amp;amp; use an aggregating pattern. In other cases, we may want to have a simple base class to inherit from with &amp;#039;Show&amp;#039; / &amp;#039;Hide&amp;#039; type methods that chain to the aggregated instance, and in more complex situations stick with an inherited approach.&lt;br /&gt;
&lt;br /&gt;
It would also be good to do some code size profiles of the resulting code, to optimise for reduced code size.&lt;br /&gt;
&lt;br /&gt;
=== New file format (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Deprecating the rsc code, and preferably removing it is a good goal.&lt;br /&gt;
&lt;br /&gt;
== Proposed Design ==&lt;br /&gt;
&lt;br /&gt;
Some sensible phases of the work might be:&lt;br /&gt;
&lt;br /&gt;
* Implement layout / container implementations&lt;br /&gt;
* Implement new, simple, hierarchical XML serialization of widgets &amp;amp; layout&lt;br /&gt;
* Implement helper API &amp;amp; port sample dialogs&lt;br /&gt;
* Implement resource file encapsulation&lt;br /&gt;
* Implement support in dialog editor in basctl (optional)&lt;br /&gt;
* Commence porting dialogs&lt;br /&gt;
&lt;br /&gt;
=== layout / container implementations ===&lt;br /&gt;
&lt;br /&gt;
Several prototypes out there to choose from. Various decisions&lt;br /&gt;
* as little new API as possible - use introspectable / self describing &amp;#039;child&amp;#039; properties&lt;br /&gt;
* only the basic box, table and alignment primitives necessary to start with&lt;br /&gt;
&lt;br /&gt;
=== new XML format ===&lt;br /&gt;
&lt;br /&gt;
This should be based on the widget hierarchy and property names, suitable mangled.&lt;br /&gt;
&lt;br /&gt;
There is a decision to be made whether the layout information is mangled with the widgets or defined alongside.&lt;br /&gt;
&lt;br /&gt;
* Having layout information and widgets mixed like in XUL&lt;br /&gt;
** pro: format is more human readable in an XML editor&lt;br /&gt;
** con: current implementation to read/store the widgets from/to XML must be altered&lt;br /&gt;
&lt;br /&gt;
* Having layout information and widgets separated in one or more XML files&lt;br /&gt;
** pro: format may be easier to use by a dialog editor (see [http://www.netbeans.org/kb/55/quickstart-gui.html NetBeans GUI Editor] using [http://java.sun.com/javase/6/docs/api/javax/swing/GroupLayout.html javax.swing.GroupLayout]&lt;br /&gt;
** pro: implementation is faster as it must not be implemented inside the existing XML code for widgets (better compatibility, lower risk of regressions)&lt;br /&gt;
** con: not as easy to edit for humans in an XML editor&lt;br /&gt;
&lt;br /&gt;
=== helper API ===&lt;br /&gt;
&lt;br /&gt;
In order to reduce code impact, we should incrementally create (inline?) wrapper api around the AWT UNO APIs, providing VCL-like back-compatibility logic, to substantially limit the scope of the code changes. We should provide &amp;#039;placeholders&amp;#039; whereby complex widgets can easily be inserted into the layout &amp;amp;amp; used as-before.&lt;br /&gt;
&lt;br /&gt;
We should port at least 3 sample dialogs.&lt;br /&gt;
&lt;br /&gt;
=== resource file ===&lt;br /&gt;
&lt;br /&gt;
The resource file format can re-use the package code for a .zip encapsulation, though some tweaks will be necessary to populate an existing dialog parent with widgets, for those widgets that are re-used elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== support in dialog editor ===&lt;br /&gt;
&lt;br /&gt;
This will require more GUI work, extending the palette and adding properties specific to layout containers.&lt;br /&gt;
&lt;br /&gt;
* NetBeans has an interactive GUI editor that also supports layouts. [http://www.netbeans.org/kb/55/quickstart-gui.html Quickstart Guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:VCL]]&lt;br /&gt;
[[Category:GUI]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=VCL_UI_Rework&amp;diff=34324</id>
		<title>VCL UI Rework</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=VCL_UI_Rework&amp;diff=34324"/>
		<updated>2007-06-07T15:21:04Z</updated>

		<summary type="html">&lt;p&gt;Cl: /* support in dialog editor */  added linkt to netbeans layout editor quickstart guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rational ==&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs (along with most translated strings) are stored in a rather unusual binary resource file format, that has not had much love in the last decade. We need to write some new code that separates the process of designing &amp;amp; laying out the UI from the code - to allow UE to make our UI more beautiful, and allow future re-factoring. The existing Basic GUI dialog editor and it&amp;#039;s XML format should be re-used, a simple C++ compatibility API created, and a number of dialogs converted to the new format.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
There have already been several attempts at adding features to VCL, and of course people have different requirements, an initial synthesis of requirements is perhaps helpful. Please do add subsequent constraints, or comments thereof.&lt;br /&gt;
&lt;br /&gt;
=== Simple code changes (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
Of course, we want to remove lots of code - all the immediate construction of non-core widgets that do not require special handling for a start. However - given the scope of the problem, it does not seem sensible to require some vast re-writing of each &amp;amp;amp; every dialog from day 1. ie. re-implementing all callbacks using a UNO Listener type interface would kill the task, we should stick with existing callback mechanisms and signatures.&lt;br /&gt;
&lt;br /&gt;
=== QA Test tool (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
We need to ensure either, that relevant qa testtool tests are updated to use the new UI code, or that we have a strong back-compat story here.&lt;br /&gt;
&lt;br /&gt;
=== Re-use of existing code (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Clearly the existing form code has not only a working XML serialization, but code to (re)store from that, re-using that where at all possible is important. Unfortunately this code is rather complex and difficult to work with. A life-boat approach to creating a new cleaner, smaller structure and moving dialogs across would perhaps be better.&lt;br /&gt;
&lt;br /&gt;
=== Simple new APIs (Important) ===&lt;br /&gt;
&lt;br /&gt;
The existing &amp;amp;amp; successful [[http://svn.gnome.org/viewcvs/libglade/trunk/glade/glade-xml.h?view=markup libglade API]] is a good model to build from. Identifying widgets and signals by strings seems to scale well and be more extensible than the SID based system.&lt;br /&gt;
&lt;br /&gt;
=== I18n (Important) ===&lt;br /&gt;
&lt;br /&gt;
The i18n story is important, quite possibly we&amp;#039;ll want to process any Form XML to introduce integer IDs to identify strings, feature creep into re-writing i18n might kill this project.&lt;br /&gt;
&lt;br /&gt;
=== Layout (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
Adding automatic layout, as modern toolkits do, would substantially help improve the look of the UI, it&amp;#039;s portability to other platforms, and also it&amp;#039;s look when translated.&lt;br /&gt;
&lt;br /&gt;
=== Reduced Inheritance (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs inherit (somehow) from VCL&amp;#039;s Window class. Such inheritance from virtual bases generates large vtables, and substantial inefficiency across the code-base. Wherever possible we should have a child instance of the relevant window &amp;amp;amp; use an aggregating pattern. In other cases, we may want to have a simple base class to inherit from with &amp;#039;Show&amp;#039; / &amp;#039;Hide&amp;#039; type methods that chain to the aggregated instance, and in more complex situations stick with an inherited approach.&lt;br /&gt;
&lt;br /&gt;
It would also be good to do some code size profiles of the resulting code, to optimise for reduced code size.&lt;br /&gt;
&lt;br /&gt;
=== New file format (Desirable) ===&lt;br /&gt;
&lt;br /&gt;
Deprecating the rsc code, and preferably removing it is a good goal.&lt;br /&gt;
&lt;br /&gt;
== Proposed Design ==&lt;br /&gt;
&lt;br /&gt;
Some sensible phases of the work might be:&lt;br /&gt;
&lt;br /&gt;
* Implement layout / container implementations&lt;br /&gt;
* Implement new, simple, hierarchical XML serialization of widgets &amp;amp; layout&lt;br /&gt;
* Implement helper API &amp;amp; port sample dialogs&lt;br /&gt;
* Implement resource file encapsulation&lt;br /&gt;
* Implement support in dialog editor in basctl (optional)&lt;br /&gt;
* Commence porting dialogs&lt;br /&gt;
&lt;br /&gt;
=== layout / container implementations ===&lt;br /&gt;
&lt;br /&gt;
Several prototypes out there to choose from. Various decisions&lt;br /&gt;
* as little new API as possible - use introspectable / self describing &amp;#039;child&amp;#039; properties&lt;br /&gt;
* only the basic box, table and alignment primitives necessary to start with&lt;br /&gt;
&lt;br /&gt;
=== new XML format ===&lt;br /&gt;
&lt;br /&gt;
This should be based on the widget hierarchy and property names, suitable mangled.&lt;br /&gt;
&lt;br /&gt;
=== helper API ===&lt;br /&gt;
&lt;br /&gt;
In order to reduce code impact, we should incrementally create (inline?) wrapper api around the AWT UNO APIs, providing VCL-like back-compatibility logic, to substantially limit the scope of the code changes. We should provide &amp;#039;placeholders&amp;#039; whereby complex widgets can easily be inserted into the layout &amp;amp;amp; used as-before.&lt;br /&gt;
&lt;br /&gt;
We should port at least 3 sample dialogs.&lt;br /&gt;
&lt;br /&gt;
=== resource file ===&lt;br /&gt;
&lt;br /&gt;
The resource file format can re-use the package code for a .zip encapsulation, though some tweaks will be necessary to populate an existing dialog parent with widgets, for those widgets that are re-used elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== support in dialog editor ===&lt;br /&gt;
&lt;br /&gt;
This will require more GUI work, extending the palette and adding properties specific to layout containers.&lt;br /&gt;
&lt;br /&gt;
* NetBeans has an interactive GUI editor that also supports layouts. [http://www.netbeans.org/kb/55/quickstart-gui.html Quickstart Guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:VCL]]&lt;br /&gt;
[[Category:GUI]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16126</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16126"/>
		<updated>2006-09-03T17:09:51Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[09-03]] ===&lt;br /&gt;
&lt;br /&gt;
What a relief. I got source level debuging working under xcode 2.3 at last.&lt;br /&gt;
&lt;br /&gt;
First you must have xcode 2.3 or newer, as we need the new dwarf debug format. Then you&lt;br /&gt;
also must have a full build of cws aquavcl01. Install the office from the .dmg you find&lt;br /&gt;
in instsetoo_native project.&lt;br /&gt;
&lt;br /&gt;
I now assume you installed your OOo in /cws/OOo and have your cws projects in /cws/aquavcl01. If not please adapt the pathes according to your environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cd /cws/OOo/Contents/MacOS&lt;br /&gt;
&amp;gt; rm droplet&lt;br /&gt;
&amp;gt; ln -s program/soffice.bin droplet&lt;br /&gt;
&amp;gt; ln -s program/* ./&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Now start XCode, create a new project and choose &amp;quot;Empty Project&amp;quot;. &lt;br /&gt;
# Under &amp;quot;Project&amp;quot; choose &amp;quot;Add New Custom Executable&amp;quot;&lt;br /&gt;
# Choose soffice.bin as a name and /cws/OOo/Contents/MacOS/droplet as path&lt;br /&gt;
# Press &amp;quot;Finish&amp;quot;&lt;br /&gt;
# Now configure your custom executable, in the first pane choose &amp;quot;Custom directory&amp;quot; and enter /cws/OOo/Contents/MacOS/program&lt;br /&gt;
# Click on &amp;quot;Arguments&amp;quot; and add the argument &amp;quot;-nofirststartwizard&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now you should be able to fire up the debugger in xcode and start debuging.&lt;br /&gt;
&lt;br /&gt;
But for efective debuging you need source level debug information for the modules you want to debug.&lt;br /&gt;
First, since I have not yet commit it to the cws, you need to open /cws/aquavcl01/solenv/inc/unxmacx.mk and find&lt;br /&gt;
the following line&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -gdwarf-2 -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now lets say you want to debug vcl.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cd /cws/aquavcl01/vcl&lt;br /&gt;
&amp;gt; rm -fr unxmacxi.pro&lt;br /&gt;
&amp;gt; build debug=t&lt;br /&gt;
&amp;gt; cp unxmacxi.pro/lib/*.dylib /cws/OOo/Contents/MacOS/program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart your debuging session and now you should be able to set breakpoints and step through source code instead of assembler. You don&amp;#039;t have to compile whole projects with debug=t, if you need only debug one function you can touch that cxx file and only build that single file with debug=t.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-22]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/rasterops_notworking.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Had fun today implementing raster operations for the aqua output device. I have yet to write some background about raster operations, but to make it short just look at the screenshot of the day above. This happens when raster operations are not working. The gradient fill should be only visible inside the circle.&lt;br /&gt;
&lt;br /&gt;
I have nearly all of the needed implementation done, but it does not yet work as expected. To my surprise it was very easy to implement raster operations on a system that does not provide them in the rendering engine. I used the basebmp project, newly introduced by Thorsten Behrens in m182. It implements nearly all bitmap operations that vcl needs for memory bitmaps. So what I do is that if I need to paint with the raster mode XOR, I create a basebmp::BitmapDevice on demand that shares the same memory buffer with the CGBitmapContext from QUARTZ that I use for the offscreen rendering. When done painting to the CGBitmapContext by using the basebmp::BitmapDevice I blit the affected area from the offscreen bitmap context to the CGContext of the window. I suspect that the last part is not working correctly as I see only a black circle. Have to debug that later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16125</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16125"/>
		<updated>2006-09-03T17:07:06Z</updated>

		<summary type="html">&lt;p&gt;Cl: 09-03-2006 status update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[09-03]] ===&lt;br /&gt;
&lt;br /&gt;
What a relief. I got source level debuging working under xcode 2.3 at last.&lt;br /&gt;
&lt;br /&gt;
First you must have xcode 2.3 or newer, as we need the new dwarf debug format. Then you&lt;br /&gt;
also must have a full build of cws aquavcl01. Install the office from the .dmg you find&lt;br /&gt;
in instsetoo_native project.&lt;br /&gt;
&lt;br /&gt;
I now assume you installed your OOo in /cws/OOo and have your cws projects in /cws/aquavcl01. If not please adapt the pathes according to your environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cd /cws/OOo/Contents/MacOS&lt;br /&gt;
&amp;gt; rm droplet&lt;br /&gt;
&amp;gt; ln -s program/soffice.bin droplet&lt;br /&gt;
&amp;gt; ln -s program/* ./&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Now start XCode, create a new project and choose &amp;quot;Empty Project&amp;quot;. &lt;br /&gt;
# Under &amp;quot;Project&amp;quot; choose &amp;quot;Add New Custom Executable&amp;quot;&lt;br /&gt;
# Choose soffice.bin as a name and /cws/OOo/Contents/MacOS/droplet as path&lt;br /&gt;
# Press &amp;quot;Finish&amp;quot;&lt;br /&gt;
# Now configure your custom executable, in the first pane choose &amp;quot;Custom directory&amp;quot; and enter /cws/OOo/Contents/MacOS/program&lt;br /&gt;
# Click on &amp;quot;Arguments&amp;quot; and add the argument &amp;quot;-nofirststartwizard&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now you should be able to fire up the debugger in xcode and start debuging.&lt;br /&gt;
&lt;br /&gt;
But for efective debuging you need source level debug information for the modules you want to debug.&lt;br /&gt;
First, since I have not yet commit it to the cws, you need to open /cws/aquavcl01/solenv/inc/unxmacx.mk and find&lt;br /&gt;
the following line&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -gdwarf-2 -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now lets say you want to debug vcl.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cd /cws/aquavcl01/vcl&lt;br /&gt;
&amp;gt; rm -fr unxmacxi.pro&lt;br /&gt;
&amp;gt; build debug=t&lt;br /&gt;
&amp;gt; cp unxmacxi.pro/lib/*.dylib /cws/OOo/Contents/MacOS/program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart your debuging session and now you should be able to set breakpoints and step through source code instead of assembler. You don&amp;#039;t have to comple whole projects with debug=t, if you need only debug one function you can touch that cxx file and only build that single file with debug=t.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-22]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/rasterops_notworking.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Had fun today implementing raster operations for the aqua output device. I have yet to write some background about raster operations, but to make it short just look at the screenshot of the day above. This happens when raster operations are not working. The gradient fill should be only visible inside the circle.&lt;br /&gt;
&lt;br /&gt;
I have nearly all of the needed implementation done, but it does not yet work as expected. To my surprise it was very easy to implement raster operations on a system that does not provide them in the rendering engine. I used the basebmp project, newly introduced by Thorsten Behrens in m182. It implements nearly all bitmap operations that vcl needs for memory bitmaps. So what I do is that if I need to paint with the raster mode XOR, I create a basebmp::BitmapDevice on demand that shares the same memory buffer with the CGBitmapContext from QUARTZ that I use for the offscreen rendering. When done painting to the CGBitmapContext by using the basebmp::BitmapDevice I blit the affected area from the offscreen bitmap context to the CGContext of the window. I suspect that the last part is not working correctly as I see only a black circle. Have to debug that later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16124</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=16124"/>
		<updated>2006-09-03T17:03:33Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[09-03]] ===&lt;br /&gt;
&lt;br /&gt;
What a relief. I got source level debuging working under xcode 2.3 at last.&lt;br /&gt;
&lt;br /&gt;
First you must have xcode 2.3 or newer, as we need the new dwarf debug format. Then you&lt;br /&gt;
also must have a full build of cws aquavcl01. Install the office from the .dmg you find&lt;br /&gt;
in instsetoo_native project.&lt;br /&gt;
&lt;br /&gt;
I now assume you installed your OOo in /cws/OOo and have your cws projects in /cws/aquavcl01. If not please adapt the pathes according to your environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; cd /cws/OOo/Contents/MacOS&lt;br /&gt;
&amp;gt; rm droplet&lt;br /&gt;
&amp;gt; ln -s program/soffice.bin droplet&lt;br /&gt;
&amp;gt; ln -s program/* ./&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Now start XCode, create a new project and choose &amp;quot;Empty Project&amp;quot;. &lt;br /&gt;
# Under &amp;quot;Project&amp;quot; choose &amp;quot;Add New Custom Executable&amp;quot;&lt;br /&gt;
# Choose soffice.bin as a name and /cws/OOo/Contents/MacOS/droplet as path&lt;br /&gt;
# Press &amp;quot;Finish&amp;quot;&lt;br /&gt;
# Now configure your custom executable, in the first pane choose &amp;quot;Custom directory&amp;quot; and enter /cws/OOo/Contents/MacOS/program&lt;br /&gt;
# Click on &amp;quot;Arguments&amp;quot; and add the argument &amp;quot;-nofirststartwizard&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now you should be able to fire up the debugger in xcode and start debuging.&lt;br /&gt;
&lt;br /&gt;
But for efective debuging you need source level debug information for the modules you want to debug.&lt;br /&gt;
First, since I have not yet commit it to the cws, you need to open /cws/aquavcl01/solenv/inc/unxmacx.mk and find&lt;br /&gt;
the following line&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CFLAGS=-fsigned-char -fmessage-length=0 -malign-natural -gdwarf-2 -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-22]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/rasterops_notworking.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Had fun today implementing raster operations for the aqua output device. I have yet to write some background about raster operations, but to make it short just look at the screenshot of the day above. This happens when raster operations are not working. The gradient fill should be only visible inside the circle.&lt;br /&gt;
&lt;br /&gt;
I have nearly all of the needed implementation done, but it does not yet work as expected. To my surprise it was very easy to implement raster operations on a system that does not provide them in the rendering engine. I used the basebmp project, newly introduced by Thorsten Behrens in m182. It implements nearly all bitmap operations that vcl needs for memory bitmaps. So what I do is that if I need to paint with the raster mode XOR, I create a basebmp::BitmapDevice on demand that shares the same memory buffer with the CGBitmapContext from QUARTZ that I use for the offscreen rendering. When done painting to the CGBitmapContext by using the basebmp::BitmapDevice I blit the affected area from the offscreen bitmap context to the CGContext of the window. I suspect that the last part is not working correctly as I see only a black circle. Have to debug that later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15544</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15544"/>
		<updated>2006-08-22T22:37:31Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-22]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/rasterops_notworking.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Had fun today implementing raster operations for the aqua output device. I have yet to write some background about raster operations, but to make it short just look at the screenshot of the day above. This happens when raster operations are not working. The gradient fill should be only visible inside the circle.&lt;br /&gt;
&lt;br /&gt;
I have nearly all of the needed implementation done, but it does not yet work as expected. To my surprise it was very easy to implement raster operations on a system that does not provide them in the rendering engine. I used the basebmp project, newly introduced by Thorsten Behrends in m182. It implements nearly all bitmap operations that vcl needs for memory bitmaps. So what I do is that if I need to paint with the raster mode XOR, I create a basebmp::BitmapDevice on demand that shares the same memory buffer with the CGBitmapContext from QUARTZ that I use for the offscreen rendering. When done painting to the CGBitmapContext by using the basebmp::BitmapDevice I blit the affected area from the offscreen bitmap context to the CGContext of the window. I suspect that the last part is not working correctly as I see only a black circle. Have to debug that later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15543</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15543"/>
		<updated>2006-08-22T22:35:59Z</updated>

		<summary type="html">&lt;p&gt;Cl: update 2006-08-22&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-22]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/rasterops_notworking.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Had fun today implementing raster operations for the aqua output device. I have yet to write some background about raster operations, but to make it short just look at the screenshot of the day above. This happens when raster operations are not working. The gradient fill should be only visible inside the circle.&lt;br /&gt;
&lt;br /&gt;
I have nearly all of the needed implementation done, but it does not yet work as expected. To my surprise it was very easy to implement raster operations on a system that does not provide them in the rendering engine. I used the basebmp project, newly introduced by Thorsten Behrends in m182. It implements nearly all bitmap operations that vcl needs for in memory bitmaps. So what I do is that if I need to paint with the raster mode XOR, I create a basebmp::BitmapDevice on demand that shares the same memory buffer with the CGBitmapContext from QUARTZ that I use for the offscreen rendering. When done painting to the CGBitmapContext by using the basebmp::BitmapDevice I blit the affected area from the offscreen bitmap context to the CGContext of the window. I suspect that the last part is not working correctly as I see only a black circle. Have to debug that later.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15520</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15520"/>
		<updated>2006-08-22T00:04:53Z</updated>

		<summary type="html">&lt;p&gt;Cl: update 2006-08-21&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-21]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/menu.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Today I did a resync of aquavcl01 to m182.&lt;br /&gt;
&lt;br /&gt;
I looked at the sample implementation of how we could use the RunApplicationEvent() method to install some basic needed CarbonEvent handlers. The problem with that is that this call only returns when the application is finished.&lt;br /&gt;
So basicly what that sample code did and what I added to the ImplSVMainHook() method is the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOL ImplSVMainHook( BOOL * pbInit )&lt;br /&gt;
{&lt;br /&gt;
  EventLoopTimerRef aMainRunLoopTimerRef;&lt;br /&gt;
&lt;br /&gt;
  (void) InstallEventLoopTimer( GetCurrentEventLoop(), 0, 0,&lt;br /&gt;
                                NewEventLoopTimerUPP( MainRunLoopForThreadedApps ),&lt;br /&gt;
                                NULL, &amp;amp;aMainRunLoopTimerRef );&lt;br /&gt;
&lt;br /&gt;
  RunApplicationEventLoop();&lt;br /&gt;
&lt;br /&gt;
  return TRUE;   // indicate that ImplSVMainHook is implemented&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ImplSVMainHook() function is directly called from the applicaions main function. It is an alternative&lt;br /&gt;
for the call to ImplSVMain(). So when the &amp;#039;&amp;#039;return TRUE;&amp;#039;&amp;#039; statement is hit, the application&lt;br /&gt;
exits. What RunApplicationEventLoop() does is init all default handlers and then call the&lt;br /&gt;
registered timer handler at MainRunLoopForThreadedApps(). This is the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static pascal void MainRunLoopForThreadedApps( EventLoopTimerRef inTimer, void *inUserData )&lt;br /&gt;
{&lt;br /&gt;
  BOOL bRet = ImplSVMain();&lt;br /&gt;
  QuitApplicationEventLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And as you can see, all that we do is call the original ImplSVMain() instead of the ImplSVMainHook() which starts the actual office. So the stack currently is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{office code}&lt;br /&gt;
ImplSVMain()&lt;br /&gt;
MainRunLoopForThreadedApps()&lt;br /&gt;
ImplSVMainHook()&lt;br /&gt;
SVMain()&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we are still inside the call to RunApplicationEventLoop() but we can also query for all events ourselfs. As soon as ImplSVMain() exits, we tell QuitApplicationEventLoop() to end the application event loop, therefore exiting ImplSVMainHook and quiting the application for good.&lt;br /&gt;
&lt;br /&gt;
The results, as you can see on my screenshot above are realy cool. Rulers started to paint themselfs, I could create actuall shapes in impress, many repaint problems vanished. I even could start some java wizards without problems. Then I also compiled with pavels native menus and they worked! Great work pavel.&lt;br /&gt;
&lt;br /&gt;
Eric and Pierre are currently implementing more native drawn widgets so expect some real cool screenshots soon.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15472</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15472"/>
		<updated>2006-08-19T21:12:57Z</updated>

		<summary type="html">&lt;p&gt;Cl: Update 2006-08-19&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
=== [[2006]]-[[08-19]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/toolbar_bitmaps.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Not much update today. I managed to find my transparency problem yesterday night. You can see the&lt;br /&gt;
results on the screenshot above. I cleaned up my code a bit and commit everything to vcl. I also implemented that each window now also have an offscreen CGBitmapContext. All drawings are rendered both to the window and the offscreen bitmap. If pixels needs to be read, the offscreen bitmap is used.&lt;br /&gt;
&lt;br /&gt;
If you want to check it out, update vcl/aqua and also delete your ~/Library/Application Support/OpenOffice.org 2.0/users directory as it contains cached images that are broken.&lt;br /&gt;
&lt;br /&gt;
Currently the office loops as soon as a multi line text is visible. It loops somewhere in that ATSULayout stuff. I have to ask Stephan on monday if he may have a look as this crash is annoying.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work (done)&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
* check if text is also drawn to the offscreen bitmap&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15437</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15437"/>
		<updated>2006-08-18T13:23:39Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamma corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15436</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15436"/>
		<updated>2006-08-18T13:09:42Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status updates ==&lt;br /&gt;
=== [[2006]]-[[08-18]] ===&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15435</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15435"/>
		<updated>2006-08-18T13:08:07Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== DISCLAIMER ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily)&lt;br /&gt;
the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15434</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15434"/>
		<updated>2006-08-18T13:07:25Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DISCLAIMER: This is my personal wiki. Everything I write here&lt;br /&gt;
may be wrong, stupid, incorrect, harmful or worse.&lt;br /&gt;
The views expressed on this page aren&amp;#039;t (necessarily) the views&lt;br /&gt;
of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15433</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15433"/>
		<updated>2006-08-18T13:06:36Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DISCLAIMER: This is my personal wiki. Everything I write here may be wrong, stupid, incorrect, harmful or worse. The views expressed on this page aren&amp;#039;t (necessarily) the views of Sun Microsystems Inc. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15432</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15432"/>
		<updated>2006-08-18T13:01:05Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15431</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15431"/>
		<updated>2006-08-18T13:00:46Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
Nick on irc.freenode.net : ChristianL&lt;br /&gt;
Mail : mac AT fishbyte.de&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15430</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15430"/>
		<updated>2006-08-18T12:58:44Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Building OpenOffice for MacOSX using Aqua, or the Story of svdem ... ===&lt;br /&gt;
&lt;br /&gt;
This Document tries to wrap-up the buildprocess for OpenOffice on MacOS X using the native windowing-toolkit of the Platform named Aqua. The main goal is to get the demonstration programs &amp;#039;svdem&amp;#039; up and running. They act as a fairly good starting point to further endaevours, since they are used to test the capabilities of the underlying VCL Layer.&lt;br /&gt;
&lt;br /&gt;
The base for this Document is the Description of the X11 Build thanksworthy provided by Eric Hoch in this Document: [[MacOSXBuildInstructions]]. Please check this document for prerequesites (perl, gnu-copy, compilers, Xcode, ...). In this step-by-step description i will only refer to the things which need to be done for each &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; milestone of the Master workspace SRC680.&lt;br /&gt;
&lt;br /&gt;
I use the bash shell in all examples, since to my believe users of the c-shell are smart enough to figure out the differences anyway. If you want to dig deeper in the build-process have a look at the description of the build-enviroment here: http://tools.openoffice.org/build_env.html.&lt;br /&gt;
&lt;br /&gt;
Many thanks for help &amp;amp; assistance go to Pavel Janik and Eric Bachard.&lt;br /&gt;
&lt;br /&gt;
=== Some Backgroud (what is aquavcl01, EIS) ===&lt;br /&gt;
&lt;br /&gt;
==== EIS ====&lt;br /&gt;
OpenOffice sources are basically kept in the CVS server located at anoncvs.services.openoffice.org. However this repository is managed by a database on top called EIS (Environment Information System) which is used to keep track of Master- and Client Workspaces. Master Workspaces are used to keep track of changes going back of the mainline trunk and undergo extensive QA-cycles. These Master Workspaces are driven to official releases. Child workspaces in contrast are copies of certain Master Workspaces used to develop and test bugfixes and additional functionality. These Child Workspaces are later (hopefully) merged back to mainlain Master Workspaces. The TX20 Report mentioned in the Links section gives a very good overview about the overall process. To learn more about Childworkspaces (CWS) have a look here: [[CWS]]. &lt;br /&gt;
&lt;br /&gt;
Go to EIS http://eis.services.openoffice.org/EIS2/servlet/Logon and Logon as guest/guest to get yourself an impression. You can find information about the different workspaces, their dates and times there. &lt;br /&gt;
&lt;br /&gt;
==== VCL (Visual Class Libraries) ====&lt;br /&gt;
&lt;br /&gt;
Porting OpenOffice to a new Windowing Toolkit is mostly porting of the OpenOffice&amp;#039;s VCL Layer (Visual Class Libraries) to the new platforms toolkit. The VCL-Layer is responsible of mapping the OpenOffice Application calls to the windowing toolkit.&lt;br /&gt;
&lt;br /&gt;
The (native) OpenOffice port to MacOSX using the Aqua Windowing Toolkit is developed in a child workspace called &amp;#039;&amp;#039;&amp;#039;aquavcl01&amp;#039;&amp;#039;&amp;#039;. This child workspace consists of the modules (aka subdirs): canvas dtrans extensions freetype padmin scp2 sj2 solenv vcl.&lt;br /&gt;
&lt;br /&gt;
The basic approach to prepare a developer&amp;#039;s client system to succsessfully build OpenOffice/Aqua is the following:&lt;br /&gt;
&lt;br /&gt;
# checkout a given OpenOffice Milestone.&lt;br /&gt;
# checkout aquavcl01 Child Workspace.&lt;br /&gt;
# merge them together.&lt;br /&gt;
# apply the latest patches.&lt;br /&gt;
&lt;br /&gt;
The last point here is a cumbersome but nevertheless necessary operation, since this porting project is in flux. Thanks to Pavel and many others improvements are happening at tremendous pace at the moment. All of these improvements get distributed as patches/diffs against aquavcl01. Aquavcl01 needs to remain stable all the time, therefore the team needs to work on this patch-by-patch aproach at the moment.&lt;br /&gt;
&lt;br /&gt;
=== Getting the code (checkout, merge and patch the puppy) ===&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s have a look what to check-out and where. All these milestone numbers below highly depend on the given point-in-time. The current milestone as of now (August, 16th 2006) is m181. You may change this to your needs. You can finde the current milestone of each cws in the EIS database.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
One word of caution here: It worked out quite good to me having backup-copies of the Masterworkspace (m181) and the childworkspace (aquavcl01) and merge them manually using &amp;#039;cp&amp;#039; rather than to checkout in the same subdirectory. I explain here for demonstration purposes only the checkout in the same subdirectory, nevertheless i recommend the two-directories-copy-later aproach.&lt;br /&gt;
&lt;br /&gt;
==== create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&lt;br /&gt;
 mkdir src680-m181&lt;br /&gt;
 cd src680-m181&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
&lt;br /&gt;
Please Enter the password &amp;#039;anoncvs&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== checkout Milestone m181: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r SRC680_m181 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r cws_src680_aquavcl01 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== Apply some patches ====&lt;br /&gt;
&lt;br /&gt;
After you&amp;#039;ve checked out the sources you need, you have to apply the needed patches. Here an example:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 ../patches/aquavcl01-menus_debug.diff&lt;br /&gt;
&lt;br /&gt;
How our team keeps track of these patches, tests their compatibility and consolidates them remains to be seen. &lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
&lt;br /&gt;
For the OpenOffice Builds you need to have Apache&amp;#039;s Ant in the source-directory. You have to have Ant Version 1.6.5+. My Ant usually resides in /opt/ant so i link it in from there:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/&lt;br /&gt;
 ln -s /opt/ant/ apache-ant-1.6.5&lt;br /&gt;
&lt;br /&gt;
==== ./configure ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m176/&lt;br /&gt;
 src680-m181/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; looks like:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from      : $BASE&lt;br /&gt;
 echo OpenOffice Version : $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-ant-home=$BASE/apache-ant-1.6.5/ \&lt;br /&gt;
 --with-gnu-cp=/sw/bin/cp \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup, but my overall goal is to get people to have &amp;#039;svdem&amp;#039; build to start coding rather than to have a production ready build for the final release. Therefore I switched off most of the stuff. How these offical builds are done in the long run is to be decided when we get there.&lt;br /&gt;
&lt;br /&gt;
=== Doing the build ===&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
On PowePC :&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXPPCEnv.Set.sh&lt;br /&gt;
 dmake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or (on Mac Intel ) : &lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXIntelEnv.Set.sh&lt;br /&gt;
 dmake&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Enviroment-Variables for the Build will be set up. For a detailed descripton see [[Environment_Variables]].&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours. Be paitioned.&lt;br /&gt;
&lt;br /&gt;
(Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXIntelEnv.Set&amp;#039;.)&lt;br /&gt;
&lt;br /&gt;
=== Building and running svdem ===&lt;br /&gt;
&lt;br /&gt;
We want to run the demonstration programs called &amp;#039;svdem&amp;#039;. There are a couple of binaries called &amp;#039;svdem&amp;#039;, which area they cover is still somewhat unclear to me, i hope some of you guys can shed some light here. But Hey, this is a wiki! Just correct here :-).&lt;br /&gt;
&lt;br /&gt;
To have the VCL Testprogram build you have to do:&lt;br /&gt;
&lt;br /&gt;
 cd vcl; build --all&lt;br /&gt;
&lt;br /&gt;
This should have created a file called &amp;#039;svdem&amp;#039; here: vcl/unxmacxp.pro/bin/svdem. If you managed to build this binaries you are nearly there. What you need now is a wrapper directory structure to make this binary a fellow Mac OSX application. I mean the ones who have this structure:&lt;br /&gt;
&lt;br /&gt;
 svdem.app/&lt;br /&gt;
 svdem.app/Contents&lt;br /&gt;
 svdem.app/Contents/Info.plist&lt;br /&gt;
 svdem.app/Contents/MacOS&lt;br /&gt;
 svdem.app/Contents/MacOS/applicat.rdb&lt;br /&gt;
 svdem.app/Contents/MacOS/svdem&lt;br /&gt;
&lt;br /&gt;
You can basically create this structure anywhere you want. And you can link-in the file you just created (svdem). So you build up this structure once and link-in the freshly created svdem there:&lt;br /&gt;
&lt;br /&gt;
 ls -l svdem applicat.rdb&lt;br /&gt;
 svdem -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/svdem&lt;br /&gt;
 applicat.rdb -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/applicat.rdb&lt;br /&gt;
&lt;br /&gt;
Now only the Info.plist file is missing, so here we go:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDevelopmentRegion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;English&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;SvDem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;com.yourcompany.svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;????&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;1.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;LSRequiresCarbon&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you created the directory structure properly you can do &amp;#039;./svdem&amp;#039; in the &amp;#039;svdem.app/Contents/MacOS/&amp;#039; directory. You should see the svdem coming up.&lt;br /&gt;
&lt;br /&gt;
=== URL Links ===&lt;br /&gt;
&lt;br /&gt;
# MacOSX X11 Build Documentation: http://wiki.services.openoffice.org/wiki/MacOSXBuildInstructions&lt;br /&gt;
# Bug Database: http://www.openoffice.org/issues/query.cgi&lt;br /&gt;
# Mailinglist: mac@porting.openoffice.org&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): http://eric.bachard.free.fr/mac/aquavcl/logs_meetings/&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Christian Lippka Wiki: http://wiki.services.openoffice.org/wiki/User:CL&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
&lt;br /&gt;
=== Screenshots ===&lt;br /&gt;
&lt;br /&gt;
# Eric Bachard screenshots (some are from Stephan Schaefer) http://eric.bachard.free.fr/mac/aquavcl/screenshots/&lt;br /&gt;
# Pavel Janik screenshots http://blog.janik.cz/images/MacOSX/2006-08-10&lt;br /&gt;
# Important screenshot (eventloop issue) : http://blog.janik.cz/images/MacOSX/  =&amp;gt; See : OOoMenus-separator-and-disabled_entries.png&lt;br /&gt;
# Christian Lippka screenshots : http://www.fishbyte.de/nativecontrols.png&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15429</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15429"/>
		<updated>2006-08-18T12:57:31Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
[http://www.fishbyte.de/nativecontrols.png Screenshot of the day]&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15428</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15428"/>
		<updated>2006-08-18T12:56:21Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGBitmapContext/Reference/reference.html CGBitmapContext] with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15427</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15427"/>
		<updated>2006-08-18T12:53:36Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a CGBitmapContext with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
Rect windowBounds; &lt;br /&gt;
GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
Rect structureWidths;&lt;br /&gt;
// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
// exclude left and top window border&lt;br /&gt;
nX += structureWidths.left;&lt;br /&gt;
nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
AquaSalBitmap* pBitmap = new AquaSalBitmap;&lt;br /&gt;
ipBitmap-&amp;gt;Create( windowBounds.right - windowBounds.left,&lt;br /&gt;
                  windowBounds.bottom - windowBounds.top,&lt;br /&gt;
                  GetBitCount(), GetPixRowBytes(thePixels),&lt;br /&gt;
                  reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels)),&lt;br /&gt;
		  nX, nY, nDX, nDY );&lt;br /&gt;
&lt;br /&gt;
UnlockPixels (thePixels);&lt;br /&gt;
UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15426</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15426"/>
		<updated>2006-08-18T12:51:01Z</updated>

		<summary type="html">&lt;p&gt;Cl: add code fragment for GetBitmap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a CGBitmapContext with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;br /&gt;
&lt;br /&gt;
== Code fragments ==&lt;br /&gt;
&lt;br /&gt;
The following code creates a AquaSalBitmap from the window area (nX,nY,nDX,nDY). Problem is that the resulting pixels are already gamme corrected. Painting them again causes a second gamma correction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		CGrafPtr windowPort( GetWindowPort(mrWindow) );&lt;br /&gt;
		LockPortBits(windowPort);&lt;br /&gt;
&lt;br /&gt;
		PixMapHandle thePixels( GetPortPixMap(windowPort) );&lt;br /&gt;
		LockPixels(thePixels );&lt;br /&gt;
&lt;br /&gt;
        Rect windowBounds; &lt;br /&gt;
        GetWindowPortBounds ( mrWindow, &amp;amp;windowBounds);&lt;br /&gt;
&lt;br /&gt;
        Rect structureWidths;&lt;br /&gt;
		// Obtains the width of the structure region on each edge of a window.&lt;br /&gt;
		GetWindowStructureWidths ( mrWindow, &amp;amp;structureWidths );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		fprintf(stderr,&amp;quot;windowBounds( %d, %d, %d, %d ) structureWidths( %d, %d, %d, %d )\n&amp;quot;,&lt;br /&gt;
			windowBounds.left, windowBounds.top, windowBounds.right, windowBounds.bottom,&lt;br /&gt;
			structureWidths.left, structureWidths.top, structureWidths.right, structureWidths.bottom);&lt;br /&gt;
&lt;br /&gt;
		nX += structureWidths.left;&lt;br /&gt;
		nY += structureWidths.top;&lt;br /&gt;
&lt;br /&gt;
		pRet = new AquaSalBitmap;&lt;br /&gt;
		if( !pRet-&amp;gt;Create( windowBounds.right - windowBounds.left, windowBounds.bottom - windowBounds.top, GetBitCount(),&lt;br /&gt;
							GetPixRowBytes(thePixels), reinterpret_cast&amp;lt; sal_uInt8* &amp;gt;( GetPixBaseAddr(thePixels) ),&lt;br /&gt;
							nX, nY, nDX, nDY ) )&lt;br /&gt;
		{&lt;br /&gt;
			delete pRet;&lt;br /&gt;
			pRet = 0;&lt;br /&gt;
		}&lt;br /&gt;
		UnlockPixels (thePixels);&lt;br /&gt;
		UnlockPortBits(windowPort);	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15425</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15425"/>
		<updated>2006-08-18T12:45:55Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
== 08/18/2006 Update 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a CGBitmapContext with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
* AquaSalGraphics::getBitmap&lt;br /&gt;
* AquaSalGraphics::copyBits&lt;br /&gt;
* AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was [http://www.fishbyte.de/gamma_problem.png this].&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
* implement raster operations&lt;br /&gt;
* make transparency bitmaps work&lt;br /&gt;
* implement Invert methods&lt;br /&gt;
* implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
* Write something about raster operations&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15424</id>
		<title>User:CL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:CL&amp;diff=15424"/>
		<updated>2006-08-18T12:38:56Z</updated>

		<summary type="html">&lt;p&gt;Cl: 08/18/2006 Update 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My log of the vcl bitmap and widget stuff to the QUARTZ API&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
08/18/2006&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Status: I optimized the AquaSalBitmap implementation. In my first emplementation I always created a CGBitmapContext with either 16 or 32 bit. This made it fast and easy to create CGImage for rendering. The cost was that for AquaSalBitmap::AquireBuffer I had to convert the mac format back to VCL for 1,4,8 and 24 bit formats. This also is a drawback because many SalBitmaps are not even used for drawing. For example when loading a bitmap from a file a SalBitmap with the original file format is created. Then this is copied via the Create( const SalBitmap&amp;amp; rSalBmp, SalGraphics* pGraphics ) to have the same format as the current display. Also alpha masks are never drawn directly.&lt;br /&gt;
&lt;br /&gt;
As a consequence, I now always store the bitmap data in a memory puffer in the format that is requested by VCL. Only if the bitmap is to be drawn on screen I create a CGBitmapContext and only convert the format if needed.&lt;br /&gt;
&lt;br /&gt;
The biggest issue at the moment besides not having any raster operations is the problem with &lt;br /&gt;
&lt;br /&gt;
- AquaSalGraphics::getBitmap&lt;br /&gt;
- AquaSalGraphics::copyBits&lt;br /&gt;
- AquaSalGraphics::copyArea&lt;br /&gt;
&lt;br /&gt;
This methods need access to the pixels on screen. This currently is used sometimes for transparency in bitmaps&lt;br /&gt;
and also for late 80&amp;#039;s style scrolling speedups. Getting pixels from an on screen window on the mac would&lt;br /&gt;
require to directly access the buffer inside the graphic card.&lt;br /&gt;
&lt;br /&gt;
Pavel send me this marvelous [http://lists.apple.com/archives/cocoa-dev/2005/Jun/msg02321.html link] how to get a pointer to the pixels inside the graphic card. I got that working but what I get was this&lt;br /&gt;
&lt;br /&gt;
PIC HERE&lt;br /&gt;
&lt;br /&gt;
The problem is that the mac does a gamma correctur. So what you see is what you get but not what you want.&lt;br /&gt;
The image above shows a 32x32 area at the bottom right that is a copy of the same area at the top left.&lt;br /&gt;
You can see that it is much brighter. Thats because on second paint it again is gamma corrected. Therefore&lt;br /&gt;
the pixel information from the graphic card is not usable, unless we undo the gamma correction. But that slows&lt;br /&gt;
a slow method down even more and also we lose precision.&lt;br /&gt;
&lt;br /&gt;
So I rethink about my first aproach to this problem where I did all rendering to an offscreen CGBitmapContext&lt;br /&gt;
and then blitting that to the window. This worked like a charm since you can access the unaltered pixel from&lt;br /&gt;
a CGBitmapContext in contrast to a CGContext from a window.&lt;br /&gt;
&lt;br /&gt;
There is a problem with this aproach. If we want to let the mac render native widgets we can either use the draw methods of the controls itself or the appereance manager. But both only render directly in a window. Therefore the pixels of the controls would not be present in the offscreen CGBitmapContext and could be overridden if we blit that part of the offscreen bitmap to the window.&lt;br /&gt;
&lt;br /&gt;
My current idea is a mixed solution where we have a CGBitmapContext for each window and render twice. Once in the window directly and once in the offscreen bitmap. The offscreen bitmap is then only used to read pixels. This will be a significant overhead but on the other hand we will need an offscreen bitmap sooner or later to implement raster operations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Open Issues&lt;br /&gt;
- implement raster operations&lt;br /&gt;
- make transparency bitmaps work&lt;br /&gt;
- implement Invert methods&lt;br /&gt;
- implement GetPixel method&lt;br /&gt;
&lt;br /&gt;
Todo&lt;br /&gt;
- Write something about raster operations&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15372</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15372"/>
		<updated>2006-08-16T17:49:48Z</updated>

		<summary type="html">&lt;p&gt;Cl: changing current milestone to m181&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Building OpenOffice for MacOSX using Aqua, or the Story of svdem ... ===&lt;br /&gt;
&lt;br /&gt;
This Document tries to wrap-up the buildprocess for OpenOffice on MacOS X using the native windowing-toolkit of the Platform named Aqua. The main goal is to get the demonstration programs &amp;#039;svdem&amp;#039; up and running. They act as a fairly good starting point to further endaevours, since they are used to test the capabilities of the underlying VCL Layer.&lt;br /&gt;
&lt;br /&gt;
The base for this Document is the Description of the X11 Build thanksworthy provided by Eric Hoch in this Document: [[MacOSXBuildInstructions]]. Please check this document for prerequesites (perl, gnu-copy, compilers, Xcode, ...). In this step-by-step description i will only refer to the things which need to be done for each &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; milestone of the Master workspace SRC680.&lt;br /&gt;
&lt;br /&gt;
I use the bash shell in all examples, since to my believe users of the c-shell are smart enough to figure out the differences anyway. If you want to dig deeper in the build-process have a look at the description of the build-enviroment here: http://tools.openoffice.org/build_env.html.&lt;br /&gt;
&lt;br /&gt;
Many thanks for help &amp;amp; assistance go to Pavel Janik and Eric Bachard.&lt;br /&gt;
&lt;br /&gt;
=== Some Backgroud (what is aquavcl01, EIS) ===&lt;br /&gt;
&lt;br /&gt;
==== EIS ====&lt;br /&gt;
OpenOffice sources are basically kept in the CVS server located at anoncvs.services.openoffice.org. However this repository is managed by a database on top called EIS (Environment Information System) which is used to keep track of Master- and Client Workspaces. Master Workspaces are used to keep track of changes going back of the mainline trunk and undergo extensive QA-cycles. These Master Workspaces are driven to official releases. Child workspaces in contrast are copies of certain Master Workspaces used to develop and test bugfixes and additional functionality. These Child Workspaces are later (hopefully) merged back to mainlain Master Workspaces. The TX20 Report mentioned in the Links section gives a very good overview about the overall process. To learn more about Childworkspaces (CWS) have a look here: [[CWS]]. &lt;br /&gt;
&lt;br /&gt;
Go to EIS http://eis.services.openoffice.org/EIS2/servlet/Logon and Logon as guest/guest to get yourself an impression. You can find information about the different workspaces, their dates and times there. &lt;br /&gt;
&lt;br /&gt;
==== VCL (Visual Class Libraries) ====&lt;br /&gt;
&lt;br /&gt;
Porting OpenOffice to a new Windowing Toolkit is mostly porting of the OpenOffice&amp;#039;s VCL Layer (Visual Class Libraries) to the new platforms toolkit. The VCL-Layer is responsible of mapping the OpenOffice Application calls to the windowing toolkit.&lt;br /&gt;
&lt;br /&gt;
The (native) OpenOffice port to MacOSX using the Aqua Windowing Toolkit is developed in a child workspace called &amp;#039;&amp;#039;&amp;#039;aquavcl01&amp;#039;&amp;#039;&amp;#039;. This child workspace consists of the modules (aka subdirs): canvas dtrans extensions freetype padmin scp2 sj2 solenv vcl.&lt;br /&gt;
&lt;br /&gt;
The basic approach to prepare a developer&amp;#039;s client system to succsessfully build OpenOffice/Aqua is the following:&lt;br /&gt;
&lt;br /&gt;
# checkout a given OpenOffice Milestone.&lt;br /&gt;
# checkout aquavcl01 Child Workspace.&lt;br /&gt;
# merge them together.&lt;br /&gt;
# apply the latest patches.&lt;br /&gt;
&lt;br /&gt;
The last point here is a cumbersome but nevertheless necessary operation, since this porting project is in flux. Thanks to Pavel and many others improvements are happening at tremendous pace at the moment. All of these improvements get distributed as patches/diffs against aquavcl01. Aquavcl01 needs to remain stable all the time, therefore the team needs to work on this patch-by-patch aproach at the moment.&lt;br /&gt;
&lt;br /&gt;
=== Getting the code (checkout, merge and patch the puppy) ===&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s have a look what to check-out and where. All these milestone numbers below highly depend on the given point-in-time. The current milestone as of now (August, 16th 2006) is m181. You may change this to your needs. You can finde the current milestone of each cws in the EIS database.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
One word of caution here: It worked out quite good to me having backup-copies of the Masterworkspace (m181) and the childworkspace (aquavcl01) and merge them manually using &amp;#039;cp&amp;#039; rather than to checkout in the same subdirectory. I explain here for demonstration purposes only the checkout in the same subdirectory, nevertheless i recommend the two-directories-copy-later aproach.&lt;br /&gt;
&lt;br /&gt;
==== create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&lt;br /&gt;
 mkdir src680-m181&lt;br /&gt;
 cd src680-m181&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
&lt;br /&gt;
Please Enter the password &amp;#039;anoncvs&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== checkout Milestone m181: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r SRC680_m181 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r cws_src680_aquavcl01 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== Apply some patches ====&lt;br /&gt;
&lt;br /&gt;
After you&amp;#039;ve checked out the sources you need, you have to apply the needed patches. Here an example:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 ../patches/aquavcl01-menus_debug.diff&lt;br /&gt;
&lt;br /&gt;
How our team keeps track of these patches, tests their compatibility and consolidates them remains to be seen. &lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
&lt;br /&gt;
For the OpenOffice Builds you need to have Apache&amp;#039;s Ant in the source-directory. You have to have Ant Version 1.6.5+. My Ant usually resides in /opt/ant so i link it in from there:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/&lt;br /&gt;
 ln -s /opt/ant/ apache-ant-1.6.5&lt;br /&gt;
&lt;br /&gt;
==== ./configure ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m176/&lt;br /&gt;
 src680-m181/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; looks like:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from      : $BASE&lt;br /&gt;
 echo OpenOffice Version : $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-ant-home=$BASE/apache-ant-1.6.5/ \&lt;br /&gt;
 --with-gnu-cp=/sw/bin/cp \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup, but my overall goal is to get people to have &amp;#039;svdem&amp;#039; build to start coding rather than to have a production ready build for the final release. Therefore I switched off most of the stuff. How these offical builds are done in the long run is to be decided when we get there.&lt;br /&gt;
&lt;br /&gt;
=== Doing the build ===&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 . MacOSXPPCEnv.Set.sh&lt;br /&gt;
 dmake&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Enviroment-Variables for the Build will be set up. For a detailed descripton see [[Environment_Variables]].&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours. Be paitioned.&lt;br /&gt;
&lt;br /&gt;
(Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXIntelEnv.Set&amp;#039;.)&lt;br /&gt;
&lt;br /&gt;
=== Building and running svdem ===&lt;br /&gt;
&lt;br /&gt;
We want to run the demonstration programs called &amp;#039;svdem&amp;#039;. There are a couple of binaries called &amp;#039;svdem&amp;#039;, which area they cover is still somewhat unclear to me, i hope some of you guys can shed some light here. But Hey, this is a wiki! Just correct here :-).&lt;br /&gt;
&lt;br /&gt;
To have the VCL Testprogram build you have to do:&lt;br /&gt;
&lt;br /&gt;
 cd vcl; build --all&lt;br /&gt;
&lt;br /&gt;
This should have created a file called &amp;#039;svdem&amp;#039; here: vcl/unxmacxp.pro/bin/svdem. If you managed to build this binaries you are nearly there. What you need now is a wrapper directory structure to make this binary a fellow Mac OSX application. I mean the ones who have this structure:&lt;br /&gt;
&lt;br /&gt;
 svdem.app/&lt;br /&gt;
 svdem.app/Contents&lt;br /&gt;
 svdem.app/Contents/Info.plist&lt;br /&gt;
 svdem.app/Contents/MacOS&lt;br /&gt;
 svdem.app/Contents/MacOS/applicat.rdb&lt;br /&gt;
 svdem.app/Contents/MacOS/svdem&lt;br /&gt;
&lt;br /&gt;
You can basically create this structure anywhere you want. And you can link-in the file you just created (svdem). So you build up this structure once and link-in the freshly created svdem there:&lt;br /&gt;
&lt;br /&gt;
 ls -l svdem applicat.rdb&lt;br /&gt;
 svdem -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/svdem&lt;br /&gt;
 applicat.rdb -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/applicat.rdb&lt;br /&gt;
&lt;br /&gt;
Now only the Info.plist file is missing, so here we go:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDevelopmentRegion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;English&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;SvDem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;com.yourcompany.svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;????&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;1.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;LSRequiresCarbon&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you created the directory structure properly you can do &amp;#039;./svdem&amp;#039; in the &amp;#039;svdem.app/Contents/MacOS/&amp;#039; directory. You should see the svdem coming up.&lt;br /&gt;
&lt;br /&gt;
=== URL Links ===&lt;br /&gt;
&lt;br /&gt;
# MacOSX X11 Build Documentation: http://wiki.services.openoffice.org/wiki/MacOSXBuildInstructions&lt;br /&gt;
# Bug Database: http://www.openoffice.org/issues/query.cgi&lt;br /&gt;
# Mailinglist: mac@porting.openoffice.org&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): http://eric.bachard.free.fr/mac/aquavcl/logs_meetings/&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15371</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=15371"/>
		<updated>2006-08-16T17:47:18Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Building OpenOffice for MacOSX using Aqua, or the Story of svdem ... ===&lt;br /&gt;
&lt;br /&gt;
This Document tries to wrap-up the buildprocess for OpenOffice on MacOS X using the native windowing-toolkit of the Platform named Aqua. The main goal is to get the demonstration programs &amp;#039;svdem&amp;#039; up and running. They act as a fairly good starting point to further endaevours, since they are used to test the capabilities of the underlying VCL Layer.&lt;br /&gt;
&lt;br /&gt;
The base for this Document is the Description of the X11 Build thanksworthy provided by Eric Hoch in this Document: [[MacOSXBuildInstructions]]. Please check this document for prerequesites (perl, gnu-copy, compilers, Xcode, ...). In this step-by-step description i will only refer to the things which need to be done for each &amp;#039;&amp;#039;&amp;#039;new&amp;#039;&amp;#039;&amp;#039; milestone of the Master workspace SRC680.&lt;br /&gt;
&lt;br /&gt;
I use the bash shell in all examples, since to my believe users of the c-shell are smart enough to figure out the differences anyway. If you want to dig deeper in the build-process have a look at the description of the build-enviroment here: http://tools.openoffice.org/build_env.html.&lt;br /&gt;
&lt;br /&gt;
Many thanks for help &amp;amp; assistance go to Pavel Janik and Eric Bachard.&lt;br /&gt;
&lt;br /&gt;
=== Some Backgroud (what is aquavcl01, EIS) ===&lt;br /&gt;
&lt;br /&gt;
==== EIS ====&lt;br /&gt;
OpenOffice sources are basically kept in the CVS server located at anoncvs.services.openoffice.org. However this repository is managed by a database on top called EIS (Environment Information System) which is used to keep track of Master- and Client Workspaces. Master Workspaces are used to keep track of changes going back of the mainline trunk and undergo extensive QA-cycles. These Master Workspaces are driven to official releases. Child workspaces in contrast are copies of certain Master Workspaces used to develop and test bugfixes and additional functionality. These Child Workspaces are later (hopefully) merged back to mainlain Master Workspaces. The TX20 Report mentioned in the Links section gives a very good overview about the overall process. To learn more about Childworkspaces (CWS) have a look here: [[CWS]]. &lt;br /&gt;
&lt;br /&gt;
Go to EIS http://eis.services.openoffice.org/EIS2/servlet/Logon and Logon as guest/guest to get yourself an impression. You can find information about the different workspaces, their dates and times there. &lt;br /&gt;
&lt;br /&gt;
==== VCL (Visual Class Libraries) ====&lt;br /&gt;
&lt;br /&gt;
Porting OpenOffice to a new Windowing Toolkit is mostly porting of the OpenOffice&amp;#039;s VCL Layer (Visual Class Libraries) to the new platforms toolkit. The VCL-Layer is responsible of mapping the OpenOffice Application calls to the windowing toolkit.&lt;br /&gt;
&lt;br /&gt;
The (native) OpenOffice port to MacOSX using the Aqua Windowing Toolkit is developed in a child workspace called &amp;#039;&amp;#039;&amp;#039;aquavcl01&amp;#039;&amp;#039;&amp;#039;. This child workspace consists of the modules (aka subdirs): canvas dtrans extensions freetype padmin scp2 sj2 solenv vcl.&lt;br /&gt;
&lt;br /&gt;
The basic approach to prepare a developer&amp;#039;s client system to succsessfully build OpenOffice/Aqua is the following:&lt;br /&gt;
&lt;br /&gt;
# checkout a given OpenOffice Milestone.&lt;br /&gt;
# checkout aquavcl01 Child Workspace.&lt;br /&gt;
# merge them together.&lt;br /&gt;
# apply the latest patches.&lt;br /&gt;
&lt;br /&gt;
The last point here is a cumbersome but nevertheless necessary operation, since this porting project is in flux. Thanks to Pavel and many others improvements are happening at tremendous pace at the moment. All of these improvements get distributed as patches/diffs against aquavcl01. Aquavcl01 needs to remain stable all the time, therefore the team needs to work on this patch-by-patch aproach at the moment.&lt;br /&gt;
&lt;br /&gt;
=== Getting the code (checkout, merge and patch the puppy) ===&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s have a look what to check-out and where. All these milestone numbers below highly depend on the given point-in-time. I use the milestone m177 which worked for me at the time of this writing (August, 13th 2006). You may change this to your needs.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
One word of caution here: It worked out quite good to me having backup-copies of the Masterworkspace (m181) and the childworkspace (aquavcl01) and merge them manually using &amp;#039;cp&amp;#039; rather than to checkout in the same subdirectory. I explain here for demonstration purposes only the checkout in the same subdirectory, nevertheless i recommend the two-directories-copy-later aproach.&lt;br /&gt;
&lt;br /&gt;
==== create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&lt;br /&gt;
 mkdir src680-m181&lt;br /&gt;
 cd src680-m181&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
&lt;br /&gt;
Please Enter the password &amp;#039;anoncvs&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== checkout Milestone m181: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r SRC680_m181 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01: ==== &lt;br /&gt;
&lt;br /&gt;
 cvs -z3 co -r cws_src680_aquavcl01 OpenOffice2&lt;br /&gt;
&lt;br /&gt;
==== Apply some patches ====&lt;br /&gt;
&lt;br /&gt;
After you&amp;#039;ve checked out the sources you need, you have to apply the needed patches. Here an example:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 ../patches/aquavcl01-menus_debug.diff&lt;br /&gt;
&lt;br /&gt;
How our team keeps track of these patches, tests their compatibility and consolidates them remains to be seen. &lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
==== Ant ====&lt;br /&gt;
&lt;br /&gt;
For the OpenOffice Builds you need to have Apache&amp;#039;s Ant in the source-directory. You have to have Ant Version 1.6.5+. My Ant usually resides in /opt/ant so i link it in from there:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/&lt;br /&gt;
 ln -s /opt/ant/ apache-ant-1.6.5&lt;br /&gt;
&lt;br /&gt;
==== ./configure ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m176/&lt;br /&gt;
 src680-m181/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; looks like:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from      : $BASE&lt;br /&gt;
 echo OpenOffice Version : $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-ant-home=$BASE/apache-ant-1.6.5/ \&lt;br /&gt;
 --with-gnu-cp=/sw/bin/cp \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup, but my overall goal is to get people to have &amp;#039;svdem&amp;#039; build to start coding rather than to have a production ready build for the final release. Therefore I switched off most of the stuff. How these offical builds are done in the long run is to be decided when we get there.&lt;br /&gt;
&lt;br /&gt;
=== Doing the build ===&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m181/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 . MacOSXPPCEnv.Set.sh&lt;br /&gt;
 dmake&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Enviroment-Variables for the Build will be set up. For a detailed descripton see [[Environment_Variables]].&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours. Be paitioned.&lt;br /&gt;
&lt;br /&gt;
(Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXIntelEnv.Set&amp;#039;.)&lt;br /&gt;
&lt;br /&gt;
=== Building and running svdem ===&lt;br /&gt;
&lt;br /&gt;
We want to run the demonstration programs called &amp;#039;svdem&amp;#039;. There are a couple of binaries called &amp;#039;svdem&amp;#039;, which area they cover is still somewhat unclear to me, i hope some of you guys can shed some light here. But Hey, this is a wiki! Just correct here :-).&lt;br /&gt;
&lt;br /&gt;
To have the VCL Testprogram build you have to do:&lt;br /&gt;
&lt;br /&gt;
 cd vcl; build --all&lt;br /&gt;
&lt;br /&gt;
This should have created a file called &amp;#039;svdem&amp;#039; here: vcl/unxmacxp.pro/bin/svdem. If you managed to build this binaries you are nearly there. What you need now is a wrapper directory structure to make this binary a fellow Mac OSX application. I mean the ones who have this structure:&lt;br /&gt;
&lt;br /&gt;
 svdem.app/&lt;br /&gt;
 svdem.app/Contents&lt;br /&gt;
 svdem.app/Contents/Info.plist&lt;br /&gt;
 svdem.app/Contents/MacOS&lt;br /&gt;
 svdem.app/Contents/MacOS/applicat.rdb&lt;br /&gt;
 svdem.app/Contents/MacOS/svdem&lt;br /&gt;
&lt;br /&gt;
You can basically create this structure anywhere you want. And you can link-in the file you just created (svdem). So you build up this structure once and link-in the freshly created svdem there:&lt;br /&gt;
&lt;br /&gt;
 ls -l svdem applicat.rdb&lt;br /&gt;
 svdem -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/svdem&lt;br /&gt;
 applicat.rdb -&amp;gt; /opt/src/openoffice/src680-m177//vcl/unxmacxp.pro/bin/applicat.rdb&lt;br /&gt;
&lt;br /&gt;
Now only the Info.plist file is missing, so here we go:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDevelopmentRegion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;English&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;SvDem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;com.yourcompany.svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;????&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;1.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;LSRequiresCarbon&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you created the directory structure properly you can do &amp;#039;./svdem&amp;#039; in the &amp;#039;svdem.app/Contents/MacOS/&amp;#039; directory. You should see the svdem coming up.&lt;br /&gt;
&lt;br /&gt;
=== URL Links ===&lt;br /&gt;
&lt;br /&gt;
# MacOSX X11 Build Documentation: http://wiki.services.openoffice.org/wiki/MacOSXBuildInstructions&lt;br /&gt;
# Bug Database: http://www.openoffice.org/issues/query.cgi&lt;br /&gt;
# Mailinglist: mac@porting.openoffice.org&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): http://eric.bachard.free.fr/mac/aquavcl/logs_meetings/&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Libxml2&amp;diff=6063</id>
		<title>Libxml2</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Libxml2&amp;diff=6063"/>
		<updated>2006-03-09T15:08:38Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I created an uno compenent, implementing the &amp;#039;&amp;#039;com.sun.star.xml.sax.Parser&amp;#039;&amp;#039; service using libxml2.&lt;br /&gt;
&lt;br /&gt;
I wanted to do a life comparision on xml load performance between the expat parser and the libxml2 parser in&lt;br /&gt;
a running OOo. This so far does not work for all documents. I found a problem when during xml loading the&lt;br /&gt;
configmgr is triggered and has to do some xml parsing on its own. He then also uses libxml2 for xml&lt;br /&gt;
parsing in the same thread, causing a crash in the libxml2 implementation.&lt;br /&gt;
&lt;br /&gt;
If someone find out how this crash can be resolved please note here.&lt;br /&gt;
&lt;br /&gt;
Tests in writer showed nearly identical performance between expat and libxml2.&lt;br /&gt;
&lt;br /&gt;
You can find the source for this component [http://xml.openoffice.org/optimization/downloads/libxmlwrap.zip here].&lt;br /&gt;
To build, just get a copy of the sax modul, extract the libxmlwrap directory to sax/source and do a dmake in&lt;br /&gt;
sax/source/libxmlwrap. This creates a libxml library that you must copy to your office/program directory.&lt;br /&gt;
Inside the office/program directory register the library. (f.e. under windows you can write &amp;#039;&amp;#039;regcomp -register -r services.rdb -clibxml680.dll&amp;#039;&amp;#039;). You can revert the changes by registering the sax.uno library again.&lt;br /&gt;
This component only implements &amp;#039;&amp;#039;com.sun.star.xml.sax.Parser&amp;#039;&amp;#039;, so export is still be done over expat.&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=XML_Load&amp;diff=6062</id>
		<title>XML Load</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=XML_Load&amp;diff=6062"/>
		<updated>2006-03-09T14:54:21Z</updated>

		<summary type="html">&lt;p&gt;Cl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ODF Documents are a zipped archive of XML files along with some assorted information and pictures. Reading and parsing the XML constitutes a chunk of the time spent in opening documents. Below is an analysis of XML processing.&lt;br /&gt;
&lt;br /&gt;
We use a suite of 60 [[Performance Related Test Documents]]. The content.xml for each has been extracted for XML-only tests. &lt;br /&gt;
&lt;br /&gt;
Niklas and Florian have prototyped a test component, which tokenizes XML tags, and passes tokens around. This saves string allocation times and provides speedup.(FastXML) &lt;br /&gt;
&lt;br /&gt;
== Comparisons == &lt;br /&gt;
* Compare OpenOffice TestXML and TestFastXML for doc sample&lt;br /&gt;
* Compare different XML parsers &amp;amp; APIs in terms of processing content.xml &lt;br /&gt;
* Compare time spent in XML parsing, building document model, and rendering &lt;br /&gt;
&lt;br /&gt;
== Methodology == &lt;br /&gt;
* Time is measured in the same way for each test - This is based on Time::GetSystemTicks&lt;br /&gt;
* File handling and parsing is done as similar as possible - within allowances of API differences. &lt;br /&gt;
* Only C and C++ parsers are considered - Java based parsers/wrappers are excluded.   &lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
* FastXML provides good speedup, across the test suite. &lt;br /&gt;
* libxml2 (SAX API) is the fastest from a pure parsing point of view. &lt;br /&gt;
** libxml2 (Reader/processNode) is slower, but comparable to expat&lt;br /&gt;
** expat is faster than xerces (SAX &amp;amp; SAX2) as well as OO.o.&lt;br /&gt;
** OO.o parser has some UNO interface overhead (to be measured)&lt;br /&gt;
&lt;br /&gt;
== Ongoing Work == &lt;br /&gt;
* Performance counter to measure proportion of time spent in: &lt;br /&gt;
*# Opening &amp;amp; uncompressing container files &lt;br /&gt;
*# XML Parser setup &lt;br /&gt;
*# Actual Parsing &lt;br /&gt;
*# String Allocation &lt;br /&gt;
*# Building Doc Model &lt;br /&gt;
*# Rendering&lt;br /&gt;
*# replace expat with [[libxml2]] to compare performance in office, currently not working for all files&lt;br /&gt;
== Data ==&lt;br /&gt;
The [[Image:Xml-load-compare.ods|spreadsheet]].&lt;/div&gt;</summary>
		<author><name>Cl</name></author>
	</entry>
</feed>