This year, I'll manage to write a wrap up post on the Google Summer of Code at LibreOffice. On the 12 students initially selected, 10 hacked on cool things for our favorite office suite.

The completed projects are:

  • Haskell UNO Language Binding from Jorge Mendes

LibreOffice's Universal Network Objects (UNO) API, can already be accessed by C/C++, Java, and Python, among other languages/frameworks. Jorge wrote the glue code for UNO to be used from Haskell code.

Two main artefacts were defined: a code generator to provide an interface to the UNO API at compile time, and a library to provide access to essential information, like basic type mapping between UNO and Haskell. The former is provided as an executable, run during the developed program configuration phase, and the latter is provided as a Cabal package hs-uno, as most Haskell software is.

The result of this project provides a simple way to develop software for the LibreOffice ecosystem using Haskell, and includes some examples on how to use this binding. See the code on github

Haskell code using UNO API

  • Calc formula error checking from Ben Ni

Ben worked on the validity check feature to get hands on the code. Then he implemented checking for discontinuous formula groups as well as expanding the formula wizard to evaluate subformulas to allow for easier error checking. He also started collaborating with Eike on the unit feature currently under development, to move unit evaluation to ScInterpreter.

Imput values in formula editor

  • Unifiying Calc units from Krisztian Pinter

Krisztian worked on unifying the internal drawing units in Calc to make the code easier to work with in the future.

The CMIS features was pretty well hidden so far. Szymon worked together with the UX team to make it easier to use. A new dialog for opening remote files was created and can be accessed from the Start Center. It helps the user to explore popular services like Google Drive, OneDrive, Alfresco or FTP servers. User can configure many of them and simply switch current service using dropdown menu. It is also possible to remember authorization data for each service.

Szymon also fixed a few CMIS bugs, including the most annoying bug where the password was always stored, even if it was wrong. Several users can now access the same repository in one session.

New remote file picker

  • Mozilla update system for LibreOffice from Nathan Yi

Although Nathan did not have time to fully implement the UI and server-side backend components of the project, he managed to do in-place upgrades of LibreOffice using full and partial (version-to-version) patches. These patches can optionally be signed for secure transport over the Internet.

Update done with Nathan's work

Want to use LibreOffice in your applications ? Yes, its quite possible now with the help of a gtk3 widget, LOKDocView, that Pranav worked on this summer. The widget wraps all the LibreOffice functionality and exposes a very simple API to interact with it. Consumer applications just need to embed this widget inside a scroll bar, and that's it. Further, user experience can be enhanced thanks to the API allowing simple text formatting or zooming of the opened document. Those can also be opened in both view and edit mode.

The special thing about this widget is that you can use it from any programming language, and this is possible using GObject Introspection. You can see the widget being used from GNOME Documents using GObject Introspection's javascript bindings in below screencast.

LOKDocView, and the necessary introspection files will be shipped with 5.1.

  • Tests improvement from Varun Dhall

Varun added more easy-to-debug unit tests through CppUnit. He have also ported some old Java unit tests to C++ and re-factored some tests that do remote control of an existing instance. His goal was to improve the LibreOffice test coverage to reduce the number of regression bugs. Of course there is still room for future development in this project.

  • Sidebar improvements from Rishabh Kumar

Rishabh has been improving the user interface of sidebar and its functionalities. The major part of the project included adding some of most commonly used controls to the sidebar. The project had impacts to Writer, Calc, Impress and Draw. Rishabh changed quite a lot of things in the sidebar, but among the most important ones, he added a few tabs, like the slide background or page tab ones. He also improved the selection analizer to show only the tabs related to the current selection, e.g. showing the area tab when a line is selected didn't make sense.

New page sidebar tab

  • Expert configuration improvements from Mihaly Palenik

The main part of the project was to convert the dialog from a fixed tree filled at load time from all options, which was incredibly slow and unusable with accessibility enabled, to a tree which was progressively and dynamically loaded when the user expanded a level or searched for certain keys.

That was a great success in the sense that the dialog now opens and displays entries almost immediately, while previous to the changes it could take up to 8 minutes to load with accessibility enabled.

Search and edit a configuration key

Matteo continued working on the text chaining implementation for Draw. This year, he add support for text transfer while editing or resizing the boxes, cursor motion, box chain persistence in file and text underflow handling.

Text flow comparison in draw