[scribus-dev] Tables GSoC draft proposal

Elvis Stansvik elvstone at gmail.com
Sun Mar 20 16:33:13 CET 2011


Hi,

First of all, congratulations on being picked by Google this year!

Below is a first draft of my GSoC proposal. The proposal is perhaps
better read on the wiki, where it's available at

http://wiki.scribus.net/canvas/GSoC_2011_Tables_Proposal

Please respond if you have any comments or if there are things I have missed.

Best regards,
Elvis

= Basic support for tables in Scribus [DRAFT 1] =

== Abstract ==
The Scribus software currently lacks proper support for laying out
content in a tabular arrangement, a feature commonly known as tables.
In the following document I propose to implement a first basic support
for tables in Scribus. The proposal comes in three parts. First, a
problem description is given, where I provide a rationale for the
project. Second, an implementation plan, including project
deliverables and a contingency plan. Third, a tentative timeline for
the project, and last some biographical information and other
practicalities.

== Problem Description ==
Tables provide a compact way of representing tabular information in a
page layout, and is a common design element in books, magazines and
advertisements. Scribus currently has a shortcut for creating an
automatically grouped table-like array of text frames. These are not
proper tables. To stay competitive, Scribus needs better support for
tables. Support that enables the user to create and edit tables as
distinct items with their own set of properties as commonly found in
other table implementations.

== Implementation Plan ==
Having been through Summer of Code once before, I think I have a good
perspective on what's important going into a project of this nature.
One thing that cannot be stressed enough is the importance of having
something tangible and working by the end of the project period. Not
only will this give closure and a sense of accomplishment to me as a
student, it also gives the Scribus core developers a good outlook when
it comes to taking the code in and building further on it. To mitigate
the risk of ending up with an unfinished project, a contingency plan
is included. The contingency plan lists features that can be dropped
from the project, should time start to run out.

=== Basic Idea ===
The implementation will be done by introducing a new page item,
PageItem_Table. This item will be responsible for layout and drawing
of a table. The layout and drawing of table cell content will be
delegated to standard text frames, which might have to be given new
features/modifications to serve this purpose. As content in the table
cells change, the table will be notified of this and perform a
relayout of the table, starting from the row in which the change
occured.

=== Project Deliverables ===
These are features that I believe are realistic to implement during
the course of the project (but see further down for a contingency
plan). For more detailed chronological information, see Timeline.

* Tables
** Insert, select, resize and remove.
** Background color.
** Border color.
** Border style.
** Default cell style.
** Breaking across page boundaries.
** Import from CSV and ODT.

* Table Rows
** Insert, select, resize and remove.
** Background color.
** Default cell style.

* Table Columns
** Insert, select, resize and remove.
** Background color.
** Default cell style.

* Table Cells
** Select and resize.
** Background color.
** Border color.
** Border style.
** Padding and margin.
** Row and column spanning.

For all features, load/save roundtrip to Scribus .sla format will be supported.

=== Contingency Plan ===
If unforeseen difficulties are encountered during the project, one of
more of the following features may be dropped. Hopefully to be
implemented later. Note that should any of these features be dropped,
an effort will still be made keep the feature in mind to avoid
painting ourselves into any corners.

* '''Breaking across page boundaries'''
*: This is a feature which I did not finish completely during my 2009
project for KWord, and one which can be quite hairy to implement. I
think I have a good general idea of how to go about it, but should it
turn out to take too long, it may be dropped.
* '''Row and column spanning'''
*: This I really think I should be able to pull off. But should time
run short, it may be dropped.
* '''Import from CSV and ODT'''
*: While hopefully not too challanging, technically, this feature may
be time consuming and is something which can be added later. Hence it
may be dropped.

== Timeline ==
Below follows a rough tentative timeline for the project. The timeline
is of course subject to change, should some parts of the project turn
out to be more/less time consuming than anticipated.

I have my last exam on May 28, and my first day of school after the
summer is Aug 28. This means my project period will be cut five days
short in the beginning. It was the same thing during my project in
2009, and I believe it's quite common for European students taking
part in Summer of Code. It just means the timeline has to take this
into account.

In the time leading up to the project period, I'll try to acquaint
myself with the Scribus code I'll be touching, and experiment with
data structures and layout algorithms for the tables I'll be
implementing.

* '''Week 1''' May 29-June 5
** Removal of the old "tables" implementation.
** Data structures for tables.
* '''Week 2''' June 6-June 12
** Basic table layout with fixed column widths and mock content in cells.
** Insertion/removal of rows/columns.
** Basic drawing of table.
* '''Week 3''' June 13-June 19
** More advanced layout.
** Variable column widths.
* '''Week 4''' June 20-June 26
** Cell formatting properties such as border and padding.
** Cell content layout; use Scribus' text frames to populate cells.
* '''Week 5''' June 27-July 3
** More integration of text frames. Fixing of issues/road bumps.
** UI: Row/column selection/insertion/removal/resizing.
* '''Week 6''' July 4-July 10
** Wrapping up for mid-term evaluation.
** Fix bugs/finish up what I have so far.
* '''Week 7''' July 11-July 17 '''(Mid-term-evaluation)'''
** Row and column spanning.
* '''Week 8''' July 18-July 24
** Table/row/column/cell styles.
* '''Week 9''' July 25-July 31
** UI: Direct formatting.
** UI: Integration of styles in Style Manager.
* '''Week 10''' August 1-August 7
** Table breaking.
* '''Week 11''' August 8-August 14
** More table breaking.
** CSV and/or ODT import.
* '''Week 12''' August 15-August 21 '''(Suggested pencils down)'''
** Wrapping up for mid-term evaluation.
** Fix bugs/finish up what I have so far.
* '''Deadline''' August 22 '''(Firm pencils down)'''

== Post-Summer of Code Commitment ==
A big part of what makes a successful project is the students level of
involvement after the project period is over. Although the time I will
have available for FOSS hacking will go down drastically after the
summer, I'll of course stick around to answer questions, fix bugs and
help out the best I can. I've stayed in contact with the KWord
developers ever since my project in 2009, and I won't treat you
Scribus folks differently. In short; I won't disappear on you.

== Student Biography ==
Living in Stockholm with my girlfriend Hanna, I'm a 27 year old
freshman at the Computer Science program at KTH Royal Institute of
Technology in Stockholm. I've dabbled with Free Software for about 12
years now. In recent years KDE has been my main focus and in 2009 I
implemented basic support for tables in the KWord word processor as
part of Google Summer of Code. Previous employments include working at
my dads small publishing company Nya Doxa AB and running my own book
shop as well as a book café. I should note that Scribus has been a
great help at both these positions. Apart from my studies I enjoy
hiking our small Swedish mountains when I have the opportunity, and
hanging out discussing with my friends over a beer. I have no other
engagements this summer apart from Summer of Code.

== Contact Information ==
'''Name:''' Elvis Stansvik<br>
'''E-mail:''' elvstone at gmail.com<br>
'''IRC:''' estan @ irc.freenode.net<br>
'''Phone:''' +46763091545



More information about the scribus-dev mailing list