Software/ooo-build/SummerOfCode/2010

This page is all about Google Summer of Code 2010 for Go-OO.

Check the timeline, and propose your own ideas :-)

Contents

  1. How to submit your project
    1. The exercise
    2. Hints
    3. Methodology and advices
      1. Time
      2. Communication
      3. Organization
      4. Tools
      5. Coding
    4. Preparing a good application
  2. Proposals
    1. Applications (Calc, Impress, Writer)
      1. Make Impress master pages copyable
      2. Attach Impress animations to styles
      3. Impress slide layout extendibility
      4. Implement additional 3D slideshow transitions
      5. Natural sorting in listboxes
      6. Make autocompletion word lists persistent
      7. Address map SmartTag
      8. Translation with memory
    2. Filters
      1. Create a Visio import filter for Draw
      2. Implement an AutoCAD vector import for OOo
      3. Use PDF import's layout recognition for other vector formats (e.g. postscript, wmf/emf)
      4. Improve RTF Import (RTF Tokenizer)
      5. Improve RTF Export
      6. Improve Writer HTML export
      7. Enhanced svg export filter
      8. Create export filter to SCORM
    3. Integration/porting
      1. Maxima Integration
      2. (Finish) porting Impress 3D slideshow transition framework to Windows
      3. Improve OOo usability on small-screen devices
      4. Make OOo UI complexity configurable
      5. Improve (Python) scriptability
      6. Improve the Impress slideshow annotation mode
      7. Improve Scanner integration inside OOo
      8. Improve the OOo Gallery
      9. Support document versioning via WebDAV
      10. Implement XCanvas using CoreGraphics
      11. Samba locking for GIO
      12. Patch Open Office to use native GTK for menus and implement a Global Menu client inside it.
      13. Improve Mono integration with OOO-Build
    4. Others
      1. Improve Equation Editor
      2. Standalone presentation viewer
      3. GUI builder for OOo
      4. Template preview
      5. Performance Improvement
      6. Use svg for OOo icons
      7. Photo album extension
      8. Extension: Integrate Ocropus OCR capabilities to OpenOffice.org
      9. IDE integration for new container controls
      10. Impove Container control usablility by adding support for scroll bars
  3. Proposals template

How to submit your project

This year we are requiring the applying students to do some little exercise. This will help you to get started in the ooo-build code and will help finding out the best of two almost identical project submissions.

Feel free to discuss your submission with the contact person or the community.

The exercise

  1. checkout & build ooo-build latest dev milestone

  2. run it
  3. run it inside gdb (preferably - you're free to use any other debugger on your platform of choice; asking us questions about your choice will get you a few points withdrawn, succeeding on your own gets you a bonus)
  4. find the code that handles the keyboard shortcuts, and swap the behaviour of Ctrl-S and Ctrl-N - note that we want a c++ code change, no change in the xml configuration files
  5. mail, or attach to your application, the patch for that "fix"

Hints

Some hints already given to students:

Methodology and advices

What follows, is thought for students applying for Google SoC, but not only ;)

What we need is to use a better methodology, and below, some advices :

Time

Communication

Organization

Tools

Coding

Preparing a good application

In order to have the best application ever produced you should work hard on the following points.

Proposals

Feel free to add your own ideas and proposals; in case there's currently no mentor assigned to an idea, just mail the poor gsoc admins (fstrba at novell dot com or cbosdonnat at novell dot com) and they'll get you one.

Applications (Calc, Impress, Writer)

Make Impress master pages copyable

Currently, when in master page edit mode, the slide sorter has cut/copy/paste disabled. The task would be to add this missing functionality, and correctly handle masterpage-attached styles.

Required skills/knowledge
c++
Difficulty
easy
Contact
thb at openoffice.org

Attach Impress animations to styles

Currently, Impress styles control most of the visual shape appearance, but not the slideshow animation effect. Which is a pity, as the styles concept is pretty powerful inside OOo, and provides a nice way to change animation settings and type for a great number of objects simultaneously. For a slightly different view onto the same problem, see this bug report.

Required skills/knowledge
c++
Difficulty
hard
Contact
thb at openoffice.org

Impress slide layout extendibility

Make Impress layout templates easily extendible. Currently, the slide layouts in Impress (e.g. "Title page", "Outline page") are a hard-coded set; it would be really cool to have them extendible or even user-editable. This task has been almost completed in the 2009 GSoC term, see 2009 wrapup for the details - there's though still enough work left to make this more useful, e.g. having user-editable layouts.

Required skills/knowledge
c++
Difficulty
medium
Contact
cmc at openoffice.org, TBD

Implement additional 3D slideshow transitions

Building on top of a successful GSoC project from two years ago, the goal is to add more 3D transitions to the Impress application. A transition is an animation where one page is visible in the beginning and another in the end. It is used during presentation slideshow to switch pages.

The already existing OpenGL transition engine gets the previous and next page as a prerendered image, and then gets the stage (i.e. the screen) exclusively, for the duration of the transition.

Required skills/knowledge
c++
Difficulty
easy
Contact
rodo at novell.com

Natural sorting in listboxes

A lot of places in OOo list stuff like styles, references etc. sorted like a computer does, i.e. "1, 10, 2, ...". Which is ok though not nice for 5 items, but a PITA for a hundred. This is either some amount of work to find and fix all the places, or a task for a smart cookie to find the silver bullet that fixes this with a central 100 lines patch.

Required skills/knowledge
c++
Difficulty
easy
Contact
cmc at openoffice.org, TBD

Make autocompletion word lists persistent

People are lazy, and OOo's word autocompletion is a nice feature to save on typing - only that it doesn't offer a way to store your favorite word list persistently.

The task at hand would be to extend OOo's core to load and save those lists, independent of actual documents, in a way similar to what the autocorrection feature offers. This also includes adapting the UI.

Required skills/knowledge
c++
Difficulty
easy
Contact
cbosdonnat at novell.com

Address map SmartTag

We often see addresses in documents and we sometimes want to see where it is on a map. Writer provides a way to extend the contextual menu for the selection: the SmartTags. The goal of this project is to implement an OOo extension providing a SmartTag detecting some addresses in Writer documents and allowing the user to see it on a map.

Detecting an address in a chunk of text is a hard task as this depends on the locale of the user and its habits to write addresses. A nice algorithm to detect addresses is more than welcomed, but if not possible any efficient possibility requiring some input from the user is acceptable.

As this task is pretty easy, additional propositions for the project are welcomed: e.g. extending OOEclipse to help creating SmartTag extensions, or some other related task.

Required skills/knowledge
Java, Python or any language allowed for an OOo extension
Difficulty
easy
Contact
cbosdonnat at novell . com

Translation with memory

This project aims at providing a translation feature in the different OOo applications (not only Writer). Professional translators are usually using a translation memory (TM) tool to avoid translating the same sentences several times. The developed feature will then have to store and query the translations in a TM, either a local one or a remote one. As there are a lot of TM tools (open source and proprietary), the code will have to be extensible by OOo extension to provide the access to the Translation Memory. The core of the feature will be part of the OOo core and a simple connector to a TM will have to be written.

Various TM tools or libraries:

Filters

Create a Visio import filter for Draw

OOo currently lacks support for a Visio import filter. This proposal is about writing one, using the ODF format as the transport format to be loaded by the OOo application. Although a full blown filter seems to be unrealistic to be written within the short timeframe, large parts of Visio documents should be able to be filtered correctly.

Required skills/knowledge
c++, familiarity with Visio, and a fearless attitude towards poking into binary files.
Difficulty
medium
Contact
fstrba at novell.com

Implement an AutoCAD vector import for OOo

To complete OOo's already impressive list of import filters, this proposal is about adding an AutoCAD import for Draw. There's a spec at [3] to start from, and a filter lib to use/extend here.

Required skills/knowledge
c++, familiarity with AutoCAD, and a fearless attitude towards poking into binary files.
Difficulty
medium
Contact
fstrba at novell.com

Use PDF import's layout recognition for other vector formats (e.g. postscript, wmf/emf)

OOo's newly implemented PDF import employs some amount of layout recognition techniques, to generate a layout-compatible document. Leveraging this framework for other vector formats will make OOo an editor not only for PDF, but also for PostScript, EMF, XPS - whatever the successful applicant for this task chooses to import.

Required skills/knowledge
c++
Difficulty
medium
Contact
tbehrens at novell.com

Improve RTF Import (RTF Tokenizer)

For the ooxml Word import filter, a new filter framework is developed that has better import quality as the old separate filters, and also shares quite some code. Having the RTF import use that framework would be hugely useful; both binary doc and rtf are very similar in structure, and could have tokenizers plugged into the filter framework (and thus being handled by the same high-level filter code). The doc tokenizer is already worked on, so a RTF tokenizer would be a an awesome feature.

Required skills/knowledge
c++
Difficulty
medium
Contact
cbosdonnat at novell.com

Improve RTF Export

The current rework of the binary MS Word .doc (WW8) export filter made it easy to extend for other MS Word formats, like DOCX. The aim of this task is to use the advantages of the shared code to implement a new RTF export filter based on this rework.

Required skills/knowledge
C++
Difficulty
medium
Contact
kendy at suse cz

Improve Writer HTML export

There are currently one HTML and one XHTML export filters... but both are producing bad files. This projects aims at improving the current XHTML filter to use more recent features of the language. The current filter is written in XSL, but any change to hack some C++ core filter is more than welcome.

Required skills/knowledge
C++ / XSL
Difficulty
medium
Contact
cbosdonnat at novell.com

Enhanced svg export filter

OOo's svg export is rather limited, it would be nice to create svgs containing multiple slides, can be navigated etc.; also, having at least minimal animation support for Impress documents would be desirable, comparable to what the Flash export filter provided for the 1.x versions.

Required skills/knowledge
c++
Difficulty
medium
Contact
fstrba at novell.com

Create export filter to SCORM

Make OpenOffice.org generate courses for popular LMS (Learning Management System) like Moodle using a filter that can generate a SCORM package. The goal of this task is to create an export filter to create a SCORM package from an OpenOffice.org document. The filter should take a simple scheme that helps teachers create courses, courses description and prototyping information. The application should contain some scheme ideas to help creating the teachers.

Similar functionality has been taken from XHTML to SCORM like ZEKOLA Converter and PyXX.org converter.

Required skills/knowledge
C++, xslt, python, XML
Difficulty
medium
Contact
jza at openoffice.org

Integration/porting

Maxima Integration

Integrate the Maxima symbolic computer algebra system into OOo, to solve calc problems in Writer.

The idea : create a Maxima session inside an OOo Writer document, in an embeded frame, or equivalent.

IMPORTANT :

Iterations

Step 1
  • Discover and learn UNO API
  • be able to create a Writer document (and play with it)
  • be able to launch an external application using UNO
  • In parallel : learn how a Writer document is structured and how to use it programmaticaly (structure, foundations)

    Step 2
  • Learn Maxima session requirements
  • implement a way to launch a Maxima session from OOo
  • implement a way to exchange datas with the open Maxima session
  • propose a follow up for the devs who will continue the implementation
  • Estimated Timeline

    (Finish) porting Impress 3D slideshow transition framework to Windows

    With running implementations on Linux and Mac, the Windows platform is still missing for having nice 3D animated slideshow transitions in OOo. Some initial effort has been done, also in separating out operating system idiosyncrasies, but nothing is really working yet. This task is about finishing the implementation and tuning it to the Windows platform.

    A possibility might be to plug http://code.google.com/p/angleproject/ , if it evolves enough in the time of GSoC.

    Required skills/knowledge
    c++, some knowledge of WGL
    Difficulty
    medium
    Contact
    rodo at novell.com

    Improve OOo usability on small-screen devices

    With devices like netbooks, the OLPC or (gasp!) smartphones becoming powerful enough to run OOo (or the stripped-down OOo4Kids), it's becoming critically important to adapt the UI to smaller screen sizes and/or vastly different aspect ratios. This task is about improving OOo4Kids usability on the XO - from better Sugar integration to smaller UI footprint.

    Required skills/knowledge
    c++, Sugar/OLPC a bonus
    Difficulty
    medium
    Contact
    ericb at openoffice dot org

    Make OOo UI complexity configurable

    The OOo4Kids project has pioneered a way of "dumbing down" the OOo UI, by selectively hiding functionality depending on user proficiency (controlled via three central user levels, beginner, intermediate & expert). This task is to expand on that, cover all five applications, and create a consistent, seamless level of complexity, adapted to the user skill level.

    Required skills/knowledge
    c++, UX design
    Difficulty
    medium
    Contact
    ericb at openoffice dot org

    Improve (Python) scriptability

    OOo has a language-agnostic bridge, that permits a host of programming languages (Java, Python, C#, JScript etc etc) to access certain parts of the OOo core. That's nice, but many of the more interesting intestines of the code are not, not easily, or not elegantly usable like that. This project is about providing a SWIG, or boost::python-based wrapper around un-UNOized OOo core classes.

    Required skills/knowledge
    c++, python, boost/swig
    Difficulty
    medium
    Contact
    ericb at openoffice dot org

    Improve the Impress slideshow annotation mode

    OOo has recently gotten a live annotation mode in the slideshow component, via a sequence of semester projects at Ecole Nante. This project is far from done, has been worked on by students previously, and is highly useful in a classroom/education setting.

    Required skills/knowledge
    c++
    Difficulty
    medium
    Contact
    ericb at openoffice dot org

    Improve Scanner integration inside OOo

    Scanner support inside OOo is existing, but neglected functionality. In our increasingly visual oriented world, getting that up to par (across all platforms - though especially lacking on Mac) would make you many friends.

    Required skills/knowledge
    c++, Cocoa
    Difficulty
    hard
    Contact
    ericb at openoffice dot org

    The OOo gallery (Tools->Gallery) is existing, but neglected functionality. In our increasingly visual oriented world, getting that up to snuff, and integrating online resources like opencliparts.org would make you many friends.

    Required skills/knowledge
    c++
    Difficulty
    hard
    Contact
    ericb at openoffice dot org

    Support document versioning via WebDAV

    OOo has good support for WebDAV and is thusly well suited to work on documents directly stored on a (web)server. Additionally cool would be to have support for document versioning as well, as provided by the DeltaV WebDAV protocol extension. This task is about adding support for DeltaV to the already existing WebDAV implementation, at least basic "core-versioning".

    Required skills/knowledge
    c++
    Difficulty
    medium
    Contact
    tlillqvist at novell.com

    Implement XCanvas using CoreGraphics

    With a DirectX-based Canvas implementation already available for Windows, and a cairo-based one for Linux, it's a natural move to provide a CoreGraphics-based on for the native Mac OS X platform OOo has recently been ported to. This proposal is about providing an initial XCanvas-implementation that solely uses CoreGraphics for rendering.

    Required skills/knowledge
    c++, objective c, Mac OS X knowledge
    Difficulty
    medium
    Contact
    thb at openoffice.org, ericb at openoffice.org

    Samba locking for GIO

    OOo has a UCB (universal content provider) that can reach data over GIO (gvfs). Unfortunately, the implementation of the samba protocol there lacks the locking functionality. This task covers the implementation of samba locking for GIO on all levels where appropriate - changes in OOo, in glib and gvfs, and even in fuse if necessary.

    Required skills/knowledge
    C, C++, glib
    Difficulty
    hard
    Contact
    tlillqvist at novell com, kendy at suse cz

    Patch Open Office to use native GTK for menus and implement a Global Menu client inside it.

    It has been long known that OpenOffice doesn't use native GTK, and therefore can not benefit from the Global Menu's GTK Plugin. However no fully usable office suite that utilizes native GTK is available. The result is direct: on a desktop with Global Menu enabled, the default office suite, which is accessed by the user almost everyday becomes an exception that behaves differently from all other applications. Too bad. This proposed SOC project aims to provide a patch for the Open Office & Global Menu users. With the work planned in KDE to implement a GlobalMenu and XFCE already working, this will provide one of the last parts in an integration on the main Linux desktop environments.

    References:

    Goals

    Patch OpenOffice to implement a Global Menu client inside it.

    Required skills/knowledge
    • Experience with Openoffice programming model
    • C++ experience
    • Knowledge in X11 or GDK
    Difficulty
    Contact

    kendy at suse dot cz, the GlobalMenu developpers will provide mentoring for the GTK and GlobalMenu part

    Improve Mono integration with OOO-Build

    Currently ( see. http://go-oo.org/discover/ ) ooo-build supports some Mono integration, but.. unfortunately currently the integration is more or less 'mono'-directional ( if you pardon the pun ) The existing integration only allows a mono client to 'drive' OpenOffice. To exploit 'mono' more effectively it would be cool to allow 'mono' functionality to be called from OpenOffice to do that we need to be embed mono in OpenOffice. There would be 2 ways then to allow OpenOffice to 'trigger' mono code

    1. via the scripting framework which would allow mono code to be called for various 'events' triggered by user actions ( clicking a button, or selecting an item on a custom menu ) or from application/document ( open, close etc. )
    2. enabling mono code to define an uno service, in other words allow an uno service written in mono to be registered with OpenOffice ( just like services written in c++ and java ), a new loader would need to be written that would allow the mono service to be instantiated.

    Although (1) above could be considered a task in it's own right (2) is a far more powerful and interesting prospect as it allows the mono code ( defined as an uno service ) to be run by any OpenOffice/uno aware code ( e.g. basic, c++, java, python ). To use those uno mono services from events as described above it would be just a simple matter of using some OpenOffice basic glue code ( about 3 lines ). Creating some scripting framework services (1) could be done if time permits to allow direct binding of mono functionality to the various classes of events that support the scripting framework, those scripting framework services of course could be written in mono themselves

    What needs to be done ? As a mono bridge already exists a new loader (see http://api.openoffice.org/docs/common/ref/com/sun/star/loader/XImplementationLoader.html) would need to be implemented. Some static symbols in the mono implementing assembly would probably need to be agreed in order to facilitate discovery and instantiation of the mono service(s) Additionally we could even think about tweaking the package management so that extensions written in mono could be supported.

    Required skills/knowledge
    c++, uno, mono
    Difficulty
    medium/hard
    Contact
    noel dot power at novell dot com

    Others

    Improve Equation Editor

    The equations editor has some issues (including very old one) and they need to be fixed, because all those issues are blocking OpenOffice.org acceptance in education. The main objective here is to implement a new feature for baseline computation.

    Main issues are: * misalignment - compute the baseline for equations anchored as character (main case) * missing symbols ( |-> , <-| , angle A^B .. etc) * a bunch of other minor, but in their entirety annoying, little issues to be fixed in starmath

    Required skills/knowledge
    c++, gdb, parser architectures. maths symbols and good math knowledge (for equations writing) is a plus.
    Difficulty
    medium
    Contact
    ericb at openoffice dot org

    Standalone presentation viewer

    In comparison to PowerPoint, OOo Impress does not have a standalone presentation viewer, although this greatly simplifies handling for inexperienced users. Furthermore, it offers a chance to pursue different routes in terms of UI and functionality, that might not (easily) fit in the main Impress application.

    Required skills/knowledge
    c++
    Difficulty
    hard
    Contact
    tbehrens at novell.com, rodo at novell com

    GUI builder for OOo

    There's currently work under way to give OOo auto-layoutable dialogs based on an xml description language, which is based on a GSoC 2007 project. The task at hand targets the generation of those xml UI description files in a UI-designer-friendly way - in short, to provide a GUI builder for OOo. Conceivable ways of reaching that goal also include programming a Glade plugin, or hacking up monodevelop's GUI builder (xslt might be another option).

    Required skills/knowledge
    c++
    Difficulty
    medium
    Contact
    mmeeks at novell.com

    Template preview

    Currently, OOo's template dialogs provide hard-coded previews, that do not take the document at hand into consideration. This proposal is about providing true preview functionality in the template dialog, such that a user can judge appearance of individual templates before actually applying it.

    Required skills/knowledge
    c++
    Difficulty
    medium
    Contact
    kendy at suse.cz

    Performance Improvement

    There are several known performance bottlenecks inside OpenOffice, and clearly more can be found with improved profiling. The exciting part of this task is clearly, finding and understanding sillies in the code - mis-uses of otherwise sensible APIs, problematic code structures and so on; and then with the minimum of code tweaking make them fly. As part of this, a small improvement to KCachegrind's visualisation will also be required (basic C++). We will also look at reducing memory use as an extensions. Not really a single task, but a collection of incremental wins over some weeks.

    Required skills/knowledge
    c++
    Difficulty
    medium
    Contact
    mmeeks at novell.com

    Use svg for OOo icons

    OOo uses png for its icons sets currently; with the trend towards higher display resolution and scalable UI, using an expressive vector format would be useful. This task is about adding proper svg rendering capabilities to the lower layers of OOo, and using that for standard OOo icon sets.

    Required skills/knowledge
    C++
    Difficulty
    medium
    Contact
    thb at openoffice.org

    Photo album extension

    Add an extension to the Impress which will enable users to easily create photo album presentations from supplied photos. It should layout the photos on pages - possibly using smart shapes, set transitions and animation effects. Various options should be available in the UI to customize the presentation parameters before it is created.

    Required skills/knowledge
    c++
    Difficulty
    hard
    Contact
    rodo at novell.com

    Extension: Integrate Ocropus OCR capabilities to OpenOffice.org

    Add an extension to Writer or Draw which will enable users to easily open/scan images and perform optical character recognition(OCR) in order to output editable text with layout. The most promising free OCR programme is Ocropus (www.ocropus.org), which lacks a GUI, though. This OpenOffice extension should provide a bridge between Ocropus and OpenOffice.org. The extension should be able to start an OCR scan of an image using Ocropus and directly sending the resulting hocr output file (based on HTML) to OpenOffice.org, where it is imported in Writer or Draw as editable text with layout. Note: this project has been started during last year's GSoC term, and there's some preliminary results to jumpstart from.

    An integration of this extension into the PDF-import of OpenOffice.org could be evaluated at a later stage.

    Required skills/knowledge
    applicant should either know how to hack OOo or ocropus; c++
    Difficulty
    easy to medium
    Contact
    rodo at novell.com, thb at openoffice.org

    IDE integration for new container controls

    Currently in ooo-build ( and on the way upstream via cws container_controls ) we have introduced some new controls

    These controls are currently only useable via the api, its not possible to use the Dialog designer to interact with them. The task would be to modify the IDE Dialog designer to allow a user to interact with those controls.

    Note: The existing dialog designer code doesn't at all support the concept of a control being 'inserted' into an existing control. Additionally when that control is something like a Tab/Multipage control things get more complicated as it needs to be possible to select the actual page of the multipage ( that is in design mode ) to insert a new control into. Also it must be possible to add/delete pages to/from the Tab/Multipage control.

    Required skills/knowledge
    c++, vcl, uno.
    Difficulty
    hard
    Contact
    noel dot power at novell dot com

    Impove Container control usablility by adding support for scroll bars

    Currently in ooo-build ( and on the way upstream via cws container_controls ) we have introduced some new controls

    These controls ( and additionally the dialog control itself ) are missing support for scrollbars ( vertical/horizontal/both ). This could be as easy as setting some needed bits in the peer control class or perhaps exchanging the peer control with some other similar scrollbar enabled control or could be as difficult as implementing the scrolling manually in code. Some digging in the existing code required to see what is the best solution. Additionally those new properties to support enabling such scrollbars needs to be propagated to the IDE propertysheet and underlying uno toolkit controls

    Required skills/knowledge
    c++, vcl, uno
    Difficulty
    easy to medium
    Contact
    noel dot power at novell dot com

    Proposals template

    This is just an example - please copy to the 'Proposals' part of the page without the enclosing braces.

    ==== Example entry ====
    
    A full description of the task should be here - it should help to see why this task
    is important, and interesting to hack on.
    
     Required skills/knowledge:: Language, technology1, technology2, ...
     Difficulty:: easy/medium/hard
     Contact:: The.Mentor at organization com