Apologies for being really extra-late with this report, but at least I don’t have to update this post with links to late video uploads or the upcoming LibreOffice 4.4 features page. ;)
Let me first thank Google’s OpenSource office for their generousity, our many volunteer mentors for their time & efforts, and of course this year’s ten successful GSoC students for their outstanding job!
Without further ado, below is the collection of the achievements during the 2014 GSoC period, in no particular order:
Andrzej is a returning GSoC student, and continued his work with the mobile story for LibreOffice. In particular, he worked on tiled rendering support in Calc and Impress, to be used e.g. for viewer applications on mobile devices.
With his words, the achievements include:
- “Zoom” Controls for the gtk tiled viewer. (Zooming is however quite slow as we’re repainting a huge tile…)
- A part selector for the gtk tiled viewer, i.e. permits switching between tabs in a spreadsheet, or slides in a presentation (writer documents are however rendered all as one huge block).
- Associated zoom and part selection methods for the LokDocView gtk+ widget.
- A quad-tiled widget for testing (nothing to do with real tile composition…): this allows for inspecting tile transitions/borders (and was useful for finding some more glaring issues in the calc implementation).
- Some automated tests that aren’t yet fully enabled due to some further bugs that have been uncovered (which would cause them to fail).
Here’s how it looks:
Andrzej’s LibOCon talk gives even more details.
In his words, this is what he did:
- Reverse Engineered about the encoding of various shapes ( line, rectangle, polygon, ellipse) in the pmd file format, using oletoy.
- Parsing of various shape transformations such as Rotation and Skew.
- Implementation of proper geometry and output the shapes to open document format.
- Rotation and Skew is implemented for the shapes. So, that basic skeleton of all the shapes are ready.
- Fill and Stroke are reverse engineered and parsing is done.
- Solid Fill and Normal Stroke for shapes are output properly.
- Ellipse Skew Output is not perfect yet.
- Fill patterns are to be implemented. ( Bars, Tilted lines, Grids etc.)
- Stroke patterns are to be implemented. ( Dashed array, multi line stroke etc.)
- Stroke are not output properly, Pagemaker stroke overlaps the shape where as open document format adds stroke on the outside the shape. ( To reproduce the problem , try a custom stroke on a rectangle with width 40pt and then convert).
- Fill doesn’t work fine for open polygon.
You can find a pagemaker file and a converted odg file here for comparison:
Further details can be found on Anurag’s blog.
Valentin jumped onto the thankless job of refactoring Writer – both the oldest and the largest application in the LibreOffice suite, with a lot of coding sins and technical debt. One example:
sw/inc/doc.hxx is included by half of the Writer source files, and itself includes loads of other headers (by way of being the central class of a text document). Apart from undesirably tight coupling, that also causes a major and unneeded increase in incremental (re-)build times.
Below is the impressive list of changes Valentin did:
- fdo#75280 Started cleaning up of sal_uIntPtr usage.
- Split out the IDocumentDeviceAccess interface of SwDoc.
- Started cleaning up of IDocumentDeviceAccess methods in SwDoc.
- Removed getVirtualDevice and setVirtualDevice from SwDoc.
- Cleaning up of IDocumentDeviceAccess methods in SwDoc.
- Cleaning up of IDocumentDeviceAccess methods in SwDoc.
- Finished cleaning up of IDocumentDeviceAccess methods in SwDoc.
- Made SwDoc::getDocumentDeviceAccess return a reference.
- Work on DocumentSettingManager for SwDoc.
- Added 32DummyCompatabilityOptions to DocumentSettingMananger
- Removed DocumentSettingManager methods from SwDoc.
- Removed IDocumentSettingAccess.hxx include in SwDoc.hxx
- Removed IDocumentDeviceAccess.hxx include in SwDoc.hxx
- Fixed a typo in IDocumentSettingAccess.hxx
- Added IDocumentSettingAccess& getIDocumentSettingAccess() to SwDoc
- Changed DocumentDeviceManager includes to IDocumentDeviceAccess.
- Split out IDocumentDrawModelAccess from SwDoc.
- Moved SwDoc’s get methods from docnew to doc.cxx
- Finished rebasing to master.
- Refactored IDocumentChartDataProviderAccess in SwDoc.
- Refactored IDocumentTimerAccess in SwDoc into DocumentTimerManager.
- Refactored IDocumentLinksAdministration out of SwDoc.
- Refactored IDocumentListItems out of SwDoc.
- Refactored IDocumentListsAccess out of SwDoc.
- Refactored IDocumentOutlineNodes out of SwDoc.
- Refactored IDocumentContentOperations out of SwDoc.
- Fixed build fail on MacOSX after f634ec5 .
- Fixed another build failure caused by 2 refactorings.
- Added #include to DocumentContentOperationsManager.
- Refactored IDocumentRedlineAccess out of SwDoc.
- Refactored IDocumentFieldsAccess out of SwDoc.
- Refactored IDocumentLineNumberAccess.
- Refactored IDocumentStatistics our of SwDoc.
- Refactored IDocumentState out of SwDoc.
- Refactored IDocumentLayoutAccess out of SwDoc.
- Refactored IDocumentStylePoolAccess out of SwDoc.
- Refactored IDocumentExternalData out of SwDoc.
- Refactored SwDoc::GetEditShell .
Valentin’s mentor Michael Stahl’s LibOCon talk gives even more details.
Efe Gürkan Yalaman
Efe worked on the new LibreOffice start center, improving it such that templates now appear directly in the Start Center, and can be picked from there:
Below is what Efe achieved during GSoC:
- Start Center now has TemplateLocalView with templates.
- Default view (TemplateLocalView) is set to show all types of templates.
- A few more handlers and toolbars got moved
- Opening regions works properly
- Creating and deleting folders works.
- Moved initial parts of TemplateBar.(Save, Export etc.)
- Change Templates button with a dropdown to filter the templates for the Module.
- Put a return point to Recent Documents. Maybe put it in the dropdown?
- How should editing work?
- Pondering about filtering (date, alphabetical, filetype etc.)
Efe’s LibOCon talk contains a demo and many more details.
Matteo worked on two pieces, both situated in the Draw and Impress text editing code. Firtly, the missing feature of setting a background color for text characters was implemented. This was needed especially be a number of Document Liberation Project import filters.
Secondly, a more challenging task was started, namely involving automatic flow of text from one box to another. Imagine having a text box containing too much content for its size. In some documents it is not possible or convenient to solve the problem resizing the box or the font. In these situations we may want the overflowing text to move to some other area in the document, such as another text box logically linked to the overflowing one. This is commonly used for two-column text layouts, but was missing for Impress
See also Matteo’s LibOCon talk for more details and insights.
Mihai successfully implemented support for OneDrive and Microsoft SharePoint 2010 native API into libcmis. He also fixed LibreOffice to work with those 2 new protocols. So users will soon be able to grab their documents from their OneDrive account or from SharePoint Foundation server.
See alo Mihai’s LibOCon talk for more details and a demo.
Krisztián implemented support for more colour palettes, reading of “.gpl” (Gimp) palettes and redesigned the colour picker to be able to use them. With the new colour picker the user has the ability to select the wished colour palette in a drop down menu that are included in the profile (by default there are already additional palettes included). As a document can have colours that are not provided by any colour palette (especially when the document is not ODF), Krisztián added gathering of all colours in the current opened document and presented them as “Document colours” palette.
There were 2 more changes that were missing, are very convenient and highly requested: recent colours and custom colour. With custom colour a user has the ability to select a colour from the colour spectrum, and use that in the document. Recent colour are those that were recently chosen by the user – it is unlikely that a user will use many colours in a document so such a list of recent colours is very convenient for users when they are creating a document.
All this changes have been integrated into master and will be available in LO 4.4.
See also Krisztián’s LibOCon talk for more details and insights.
Rachit worked on the LibreOffice support for FireFox personas (a feature implemented in an earlier gsoc term). During this Summer of Code, he improved the usability of personas. LibreOffice version 4.0 introduced the possibility of applying Firefox Personas to the suite so that users can customize the look and feel while working with LO. However, to do that, the user had to open up the dialog, which would redirect them to a browser, search for the themes on the Mozilla website, copy the URL back in the dialog and wait till the theme was downloaded and applied. The aim for the summer was to make this process a bit more intuitive for the user. The user can search for themes by putting in a search term in the dialog itself. The dialog searches for themes using the Mozilla add-on API, and display the first 9 results with previews in the dialog itself. The user can select any theme and continue working as the theme is now downloaded in a separate thread which does not block the main thread. Also, the user can install a self made theme using oxt extensions. The user can install multiple oxt themes and select one from them.
Palneik Mihaly and Szymon Kłos
Both Mihaly and Szymon worked (independently) on converting legacy UI fixed-layout dialogs over to Caolán’s new format, which is editable by the glade UI builder tool.
When they started working, 64 Dialogs and TabPages were still awaiting conversion. It was uncertain how to launch all of them (obscure cases, unclear if related to long-removed functionality etc). These were the last, and therefore most obscure, difficult to convert, or just plain huge ones.
And the end of the project, each student converted approximately 30 dialogs and TabPages. That means, all .src-based dialogs were converted, as well as all .src-based TabPages.
From the wiki page tracking the UI conversion:
- 842 .ui files currently exist
- There are 0 unconverted dialogs
- There are 0 unconverted tabpages
- There are 0 unconverted errorboxes
- There are 0 unconverted infoboxes
- There are 0 unconverted queryboxes
- There are 0 unconverted warningboxes
- There are 0 unconverted msgboxes
- There are 0 unconverted floatingwindows
- There are 19 unconverted dockingwindows
- An estimated additional 19 .ui are required
- We are 97% of the way through the .ui conversion.
(footnote: by now 100% is converted)
As an aside: the next opportunity to meet loads of LibreOffice hackers will be during the annual FOSDEM in Brussels. We’re having a number of talks in the OpenDocument Editor’s DevRoom, and a stand in the K building. Looking forward!