Successfully implemented GSoC Ideas

From The Document Foundation Wiki
Jump to: navigation, search

2017

Implement QuarkXPress import filter

QuarkXPress is a desktop publishing application that once dominated the DTP world, which means there are lots of existing documents. The goal of this task is to reverse-engineer the document format produced by QuarkXPress 4--which was, as I've been told, the last widely used version--and create an import filter for it. The filter will be a library based on librevenge.

Required skills / knowledge
C++, reading other's C++ code (to reuse code from existing libraries)
Python (for OLEToy)
Difficulty
Medium
Mentors
David Tardon
Student
Aleksas Pantechovskis

Replace EditEngine binary clipboard with ODF filter

EditEngine still uses a legacy StarOffice format with SfxItemPool binary serialization for copy/paste. This is a maintainability problem and the only user of SfxItemPool serialization outside of the table auto-formats. This should be replaced by using the ODF filter (xmloff) for copy/paste instead. The legacy format is used if you edit inside some text in Draw/Impress/Calc and copy a selection to the clipboard.

Required skills / knowledge C++, Reading existing C++ code

Difficulty Medium

Mentors:

Michael Stahl
Eike Rathke

Student

Varun Dhall

2016

Redesigning the Template Manager

Issues:

  • User initially sees a collection of folders that they have to go into in order to get to any templates
  • All templates from a particular app/module aren't available in one location
  • User can navigate into template folders that have nothing in them
  • OK/Open and Cancel buttons are not found at bottom of dialog as HIG recommends
  • UI feels more like a file manager when it should be focused on being a template browser
  • Template manager’s bad design causes problems with its integrated into the start center
Code pointers
UI Concept
Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Mentors
Samuel Mehrbrodt, Yousuf Philips
Student
Akshay Deep

Infrastructure for defining toolbars via .ui (Glade) files

The goal of this task is to create a new toolbar implementation that allows dynamic layout of widgets, and potentially tabbed toolbars too. Using that, it will be possible to easily define rich toolbars using Glade as the user interface designing tool.

What needs to be done:

  • Load toolbar definition(s) from .ui files
  • Create new custom widgets and C++ implementation for them
  • Implement mechanism to show/hide them depending on the context (Current application and currently selected object)
  • Improve the look of various widgets for their presentation in the toolbar (where necessary - like smaller padding around the widget etc.)
  • Implement priorities for widgets to allow dynamic hiding according to screen size

As we want to reuse as much of the existing code as possible, this work will heavily base on the Widget layout work and also on the sidebar implementation.

More tasks after the grounds have been laid:

  • Find a way to let the user customize the panels (like it is possible to customize the current Toolbar).
  • Extension integration: Allow extensions to add their own buttons/widgets to a panel

To get started, read the Sidebar code (sfx2/source/sidebar), and fix some Sidebar related bugs.

Code pointers
Required skills / knowledge
C++, Glade
Difficulty
Medium
Mentors
Samuel Mehrbrodt, Jan Holesovsky
Student
Szymon Kłos

Table styles

Issues:

  • No common dialog
  • Style should be independent from the content (alternating rows)
  • No access from sidebar (either at styles/formatting or a sidebar for all table settings)
  • Similar workflow intended (sometimes) in Impress and Calc intended (Autoformat)
  • tdf#34391: Table Cell Styles / Table Styles
  • tdf#95279: Table content panel or tab

UI concept:

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Potential mentors
Jan Holesovsky, IRC: kendy, mail: kendy @ collabora . com
UX team, IRC: , mail: design @ global.libreoffice . org
Heiko Tietze, IRC: htietze, mail: tietze.heiko @ gmail . com
Yousuf Philips, IRC: jphilipz, mail: ypharis @ gmail . com

Implement table styles

Formatting a table in Writer is painful, really painful. Users need to apply a table auto-format that is only a collection of properties to be applied on all cells... if by chance the user needs to add some lines / columns to the table, he needs to apply the auto-format again. The idea behind this task is to replace this monstrosity by proper table styles. This project may be a bit ambitious on purpose: this can be split into smaller pieces and was already started last year. Some design ideas can be found on this whiteboard and the corresponding long-standing bug report. Further information can be found in the related LibreOffice bug entry: tdf#34391.

Here are a few major steps for the project:

  • Implement the table style support in the Writer model and layout
  • Implement odf and/or docx import filter
  • Implement a UI for creating and modifying a table style
  • Integrate this UI in the "Styles and Formatting" dialog
  • Implement odf and/or docx export filter
  • File an ODF change proposal to OASIS if needed

Here are some code pointers to get started in the task:

Documentation of the OOXML specification for table styles: http://www.officeopenxml.com/WPstyleTableStylesCond.php

Required skills / knowledge
C++, Reading other's code
Difficulty
Hard
Potential mentors
Michael Stahl, IRC: mst[_]*, mail: mstahl AT redhat DOT com
Miklós Vajna, IRC: vmiklos, mail: vmiklos @ collabora . co . uk

Implement Zoner Draw import filter

Zoner Callisto (known as Draw outside of the Czech Republic) is a very good vector graphics editor. After the development stopped, the last version (5) has been released free of charge (not open source, regrettably). This makes it a good choice for students etc. and increases the likelihood of appearance of files with .zmf extension. Therefore it would be great if LibreOffice could import it :-)

The goal is to implement a filter for (at least) version 5 of the format (there appear to be 2 variants of the format: one, based on OLE2, was used by versions 2 and 3; the other, which can be either zip or a single binary, by versions 4 and 5). No specification is available, but the most important parts of the file format have already been reverse engineered. Additional efforts to reveal details will be required.

The filter will be based on librevenge library.

Required skills / knowledge:

  • C++
  • Reading other's C++ code (to reuse libwpg/libvisio/libcdr/libmspub importer code)
  • Ability to understand hexadecimal dump of data
  • Ability to read (better yet, write) Python (for OLEToy)
  • Readiness to become famous

Difficulty: medium

Potential mentors:

  • David Tardon, IRC: dtardon, mail: dtardon@redhat.com

2015

Integrate gtktiledviewer into GNOME-Documents

Today GNOME Documents spawns LibreOffice via a rather unreliable unoconv command-line that converts documents to PDF. Instead it would be awesome to substantially improve and re-use libreoffice via our existing LibreOfficeKit based gtk tiled renderer.

This project has several stages:

  • Improving tiled rendering in gtktiledrender.
    • re-use the MPLv2 Mozilla tiled rendering code in C++ and integrate that into the LibreOffice core checkout Off Main Thread Compositing
    • adapt the front-end to render gtk+ tiles.
Required skills / knowledge
C++, gtk+ optional.
Difficulty
Medium
Potential mentors
Michael Meeks, IRC: mmeeks mail: michael . meeks @ collabora.com
Miklos Vajna, IRC: vmiklos mail: vmiklos @ collabora.co.uk

Rework the Expert Configuration dialog

The "Expert Configuration" dialog is too slow to appear with accessibility enabled. This is because the amount of configuration entries is just too large for practical use in a single list. The list should be reworked to be a tree of options and progressively show/hide branches of the options tree to work with blocks of smaller segments of options.

tdf#72125

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Potential mentors
Caolan McNamara, IRC: caolanm, mail: caolanm @ redhat . com

2014

Dialog Widget Conversion

Our dialogs are described in .src files which is a custom format. Positions and sizes of elements are fixed, e.g. the size of a cancel button is the width of the longest translation of Cancel in all supported languages. There is a large effort underway to retrofit a more modern layout approach to our existing code. See this overview and WidgetLayout, where we are migrating to the gtk builder file format as used by gtk3 and glade3.

The task is to help complete the remaining 20% of dialogs that need converting to the new format. Here's a tutorial

Required skills / knowledge
Some C++
Difficulty
Easy to medium
Mentor
Caolán McNamara
Students
Palenik Mihály, Szymon Kłos

Improve usability of Personas

The UI to get Personas applied in LibreOffice is working, but needs the user to browse in Firefox, and then paste the URL to the LibreOffice Personalization dialog.

It would be much better to connect to the Themes repository API directly, and allow browsing directly in LibreOffice.

The API is described here: https://developer.mozilla.org/en-US/docs/addons.mozilla.org_%28AMO%29_API_Developers%27_Guide/The_generic_AMO_API

The Personalization dialog in LibreOffice that will need to be improved in order to browse the Personas directly in LO is here: https://cgit.freedesktop.org/libreoffice/core/tree/cui/source/options/personalization.cxx#n39

Required skills / knowledge
C++, Reading other's code
Difficulty
Easy
Mentors
Jan Holesovsky, Tomaž Vajngerl
Student
Rachit Gupta

Connection to SharePoint and/or Microsoft OneDrive

LibreOffice 4.0 can now connect to CMIS servers to fetch and handle documents. Although this is a standard protocol to communicate with Document Management Systems, there are a few other protocols that are widely used like the ones from SharePoint. Microsoft OneDrive may API may also turn widely used in the next few months. This project is about extending libcmis to implement one (or more) of these protocols. By adding a CMIS API for these protocols, LibreOffice would then be able to connect with them with no effort.

Here are some code pointers to get started in the task:

Required skills / knowledge
C++, Reading other's code, Networking (use of WireShark, knowledge of HTTP)
Difficulty
Medium
Mentors
Cédric Bosdonnat, Miklós Vajna
Student
Mihai Varga

Calc / Impress tiled rendering support

For Android / LibreOffice on-line we need great tiled rendering support. So far we have API support for that for Writer, but nothing for calc / impress. We should implement, and test the same API for Calc (with an extension for switching tabs - but a single large 'page' (I guess)) - and the same for Impress - with some extension for 'notes' =)

We should update the tiledrendering test app to render these document types too. Extra brownie points provided for performance optimisation for CPU / basebmp rendering of the same.

Required skills / knowledge
C++
Difficulty
Hard
Mentors
Michael Meeks, Adam Fyne
Student
Andrzej Hunt

Improve Text Boxes in Draw

LibreOffice Draw is a powerful vector graphics application and more. However, it cannot unleash its full capacities because of limited features supported by its text frame implementation. This task would aim at implementing different text frame features that are missing: Text background colour, flow of content from one frame to another, hyphenation, as well as support of styles. The student will work on these tasks in team with his mentor.

Getting the draw text frames able to layout complex text inside would also help for future code sharing with Writer or would allow to enhance Writer comments text formatting.

Some code pointers:

Required skills / knowledge
C++, Reading other people's code
Difficulty
Medium
Mentors
Fridrich Strba, Thorsten Behrens
Student
Matteo Campanelli


Improved Color selection

In all LibreOffice applications, the colors can be picked from a color palette defined in the global options. This is particularly annoying when the user wants to use several palettes, reuse palettes from other applications like Gimp or Inkscape or simply choose a color that is not in one of the palettes. This task is about:

  • changing the UI of the color selection to allow choosing a color among different palettes or an arbitrary color
  • changing the UI and configurations to handle several palettes
  • import palettes from other applications (Gimp ones at least)

Some UI ideas can be found here

Here are some code pointers to get started in the task:

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Mentors
Jan Holesovsky, Tomaž Vajngerl
Student
Krisztián Pintér

Further improvements in the Template manager

The template manager was implemented in the previous Summer of Code, but there are ideas for further improvements:

  • remove UI quirks and inconsistencies
  • fix any instabilities
  • improve performance (for example, when creating thumbnails of templates)
  • make the template manager more useful for larger template collections
  • allow creating (empty) templates from the manager
  • make as much as possible of the dialogue reusable for general purpose file browsing (at least the icon view)

The code of the template manager resides here:

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Mentors
Jan Holesovsky, Tomaž Vajngerl
Student
Efe Gürkan YALAMAN

Implement Adobe Pagemaker import filter

Pagemaker is still available but not actively marketed desktop publishing application. The task is to implement Adobe Pagemaker import filter for version 6 to 7 of the application. Basics of the format were already reverse engineered, additional efforts to reveal details will be required.

The filter will be based on librevenge library.

Required skills / knowledge:

  • C++
  • Reading other's C++ code (to reuse libwpg/libvisio/libcdr/libmspub importer code)
  • Ability to understand hexadecimal dump of data
  • Ability to read (better yet, write) Python (for OLEToy)
  • Readiness to become famous

Difficulty: medium

Potential mentors:

  • Fridrich Strba, IRC: fridrich, mail: fridrich . strba @ bluewin . ch
  • Valek Filippov, IRC: frob, frob_tea, mail: frob at gnomeorg

2013

VLC integration

Currently we use the native platform's video libraries and codecs, these are frequently extremely lacking in support - whether it is lack of support for webm / ogv on Windows, or various other codecs elsewhere. This leads to a poor user experience, and user complaints: "why can't LibreOffice play my video". As such - it would be great to detect if libVLC (now LGPL, with all it's code goodness) is around on the system, and if so - integrate and play using it. We should do that by dynamically loading and hooking version / symbol information out of it, and provide a new cross-platform, pluggable avmedia/ implementation for the latest APIs.

Required skills / knowledge
Windows, C, C++, Reading other's code
Difficulty
Medium
Mentor
Michael Meeks
Student
Minh Ngo

Borders around characters

In Writer, the user can add borders to several objects like paragraphs, pages, frames, tables and their cells... but not around runs of characters. This feature has been asked multiple times since 2003 and could be implemented as a Summer of Code project. Quite a lot of informations and code pointers are available in the bug tdf#35155. This project will require you to add a new feature to the Writer core, change the document layout to display the border and change the import/export filters to save it.

Here are some code pointers to get started in the task (taken from the bug report):

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Mentors
Cédric Bosdonnat, Miklos Vajna
Student
Tamás Zolnai

Support for Firebird Database in Base

Our current Base database backend is HSQLDB - but this causes severe performance problems primarily around the frequency of Java to C++ transitions. Anyone creating a Firebird backend would be a hero of the Base community and allow us to start writing fast, reliable regression tests for base, and to expand it's functionality with confidence.

There are lots of other database backends to re-use in doing this work, so it -should- be reasonably easy and extremely rewarding. Most databases have reasonably similar APIs, and this is mostly just a job of reducing minor impedance mis-matches between the two.

More information is here and here we need to use Firebird for this.

Required skills / knowledge
C++, a little SQL, Reading other's code.
Difficulty
Easy/Medium
Mentors
Muthu Subramanian, Lionel Elie Mamane, Michael Meeks
Student
Andrzej Hunt

Improved Android / Impress Remote Control

The Android Remote Control has a number of places it can be significantly improved. This project would focus on a number of these issues and potentials for extending and polishing the current capability:

  • accelerometer driven pointer support - this requires work on the C++ Impress code.
  • make protocol extensible - requires both C++ and Java work.
  • keep-alive ping - to detect and sever broken connections from the client
  • file/storage: this will all need UX input and advice I think.
    • it should be possible to store the currently open presentation on your device
    • it should also be possible to stream a slide-deck from the remote to the device if no slideshow is running.
  • add a larger thumbnail pane - to allow scrolling much larger thumbnails of slides with click to select - perhaps just a zoom in/out functionality in the existing thumbnail grid would do it.
  • The Tools,Options,Impress,General,"Enable remote" option should take effect immediately, without a re-start
  • The Slideshow, Impress Remote dialog should be enabled for all users and give live status on: is bluetooth enabled, are we connected to a remote, and separate bluetooth and WiFi remote displays, and add help. It should also detect and warn of the case where another LibreOffice instance or system process is bound to the bluetooth socket, thus making it impossible to connect.
Required skills / knowledge
C++ (you need to fix the impress core), Java, Android programming
Mentors
Michael Meeks
Student
Artur Dryomov

Impress Remote Control for iOS

We already have a great remote control app for Android to drive your slideshow over Bluetooth. It would be great to have a version for the iPhone, iPod Touch and iPad as well. The Android code is in the android/sdremote directory, and we would want to re-use the existing UI design you can see there and in Development/Impress/Remote. There is little possibility for code re-use as such. The Android remote control (of course) is written in Java and uses Android APIs, while the iOS remote control will be written in Objective-C and use the CocoaTouch API. Also, note that on iOS using Bluetooth will not be possible due to iOS not having suitable API for Bluetooth, so it will have to be Wi-Fi based. Thus the ideas of how the remote control works over TCP/IP will need to be reworked if necessary, and changes done also on the server side.

Full-time access to a reasomably modern Mac, running OS X 10.7 or 10.8 is required. Possibly one can manage compiling for the iOS simulator and using that for testing, but full-time access to an actual iOS device is preferred. Note that downloading code to an iOS device requires membership in the iOS Developer Program. Hackintosh or rooted device use is not permitted and will lead to failing the student.

Required skills / knowledge
Objective-C, iOS programming
Difficulty
Easy
Mentor
Tor Lillqvist
Student
Siqi Liu

Use Widget Layout for the Start Center

Currently, the Start Center (the start screen you get when you start LibreOffice) is only a static bitmap, with few buttons and links. It would be useful to present few recently used documents there (as thumbnails), and do more fancy stuff.

See this overview and WidgetLayout to get more information about the Widget Layout (this part is actually very similar to the above mentioned task). Additionally, code for rendering the thumbnails will have to be introduced, and maybe some code sharing with the new Template Manager will be needed too.

The code of the current Start Centre lives here: https://cgit.freedesktop.org/libreoffice/core/tree/framework/source/services/backingwindow.cxx

Ideal starter for this task is this Easy Hack: tdf#64088

Required skills / knowledge
C++, Reading other's code
Difficulty
Medium
Mentor
Jan Holesovsky
Student
Krisztian Pinter