Google Summer of Code 2008 - Student Application
KMail enhancements and porting to native Qt4
Szymon Tomasz Stefanek
Abstract

I would like to improve the KMail user interface by introducing some new features and in the meantime help in the native Qt4 port. The main task would be to create a new message-list widget with great display capabilities and possibility of message grouping. The secondary tasks would be to implement a full-thread message view and help in remodeling the existing list/tree widgets in order to use the new Qt4 model-view approach. As a side effect I would also take care of some of the UI-related bugs and wishes reported by the users on bugs.kde.org.

Project Details

I'm using KMail daily since years. It's a great application and I would like to help improving it yet more. My Google Summer of Code will serve as a kickstart in KDE development and will include the following tasks.

1. Improve the message list view

This task is present in the KDEPIM project ideas and it seems to be pending since 2006. The main goal is to compact message the view in order to allow having a three column layout for the main window, even on non-very-widescreen monitors. My idea is to introduce the following additions over the main goal.

1.a) Create a custom tree-like widget that handles rich text items.

The items will contain multiple lines of text with different attributes and possibly multiple icons. The widget will be configurable and will try to be backward compatible. That is, it will be possible to configure it in order to mimic closely the current Q3ListView behavior.

The widget could be useful also in other KDE applications so it could eventually end up in the kdeui library.

"Sketch" screenshots:

1.b) Support displaying logical message groups: "Today", "Yesterday", "Last Week"...

The groups will be displayed as separate trees with the group name as root item and the messages as children sub-trees. The root item appearance will resemble a paragraph header.

This is a widely requested and discussed feature. See http://bugs.kde.org/show_bug.cgi?id=41889 , for example.

1.c) Allow for additional sorting methods that can be chosen on-the-fly.

An example would be to have two date based sorting methods: one that considers only the top-level items (sort by thread start date) and another one that sorts by the latest message in the thread. This might also allow for switching from threaded view to a flat list on-the-fly (without the need of opening the options dialog, clicking apply etc...).

This task is another bugtrack wishlist entry: http://bugs.kde.org/show_bug.cgi?id=32400 .

1.d) Explore the possibility of having a minitools-like command bar attached to a side of the message view.

The kmail toolbar has only the most important operations in the default installation. Customizing the toolbar is an advanced operation that users often overlook. Marking a message as "To Do" is a very useful feature that is mostly unused since "too far" from the common user. Having such operations available on a small default command bar might enhance user's experience with KMail.

Another way to provide the same quick commands could be to implement graphical buttons in the message tree view described above.

1.e) Provide short message previews as tooltips.

I think that the task title is self-explanatory. You can see an sketch of the feature in the screenshot below.

2. Create a full-thread message view

Also this is task has been proposed in 2006. The idea is to allow the user to view a whole thread of messages in a single window. The messages should be properly ordered, formatted and possibly indented.

A closer look at the sources is needed in order to identify the feasible implementations but actually the guess is that it could be done by concatenating multiple messages in a single html file or maybe by using a scrollable view embedding multiple existing message viewers.

3. Help in the native Qt4 port

Qt4 has introduced a new approach to list and tree view widgets. They now offer a very different API and require the user code to be restructured in order to apply to the new model-view paradigm.

KMail has still several instances of "old style" list/tree widgets that substantially need a major rewrite. I will try to take care of as many as possible.

About Me

My name is Szymon Tomasz Stefanek. I live in Italy and I'm studying Informatic Engineering at the University of Siena. Currently I've passed 29 of the 31 required exams and I'm planning to graduate in december 2008.

I'm an opensource software enthusiast and I write free code since 1998. I'm the leader of the KVIrc project that is actually in a mature state. Other developers are taking care of it and I'm trying to expand my horizonts by joining another opensource team.

I'm using KDE since 1998. In the past I have contributed some artwork and several pieces of my code have indirectly ended up in the KDE codebase. I'm experienced in using the Qt library and have an idea about the KDE sources layout. I have already posted a first small patch that implements an "old style" to native Qt4 widget port and it has been evaluated as good by some developers found on the #kontact IRC channel.

I use the necessary development tools (subversion, gdb, valgrind...) since years and I'm accustomed to bazaar-like remote collaboration with others.

I'm native in two languages: Italian and Polish. I can read, write and speak English correctly enough to understand and be understood.

My curriculum vitae is available here.

Project Timeline
Approx. Date Time Span Task Details
April 15 Two Weeks Project Startup
  • Gather ideas and information
  • Learn existing framework facilities
  • Start projecting code with the mentor
May 1 1 Month Begin coding
  • Begin porting K3ListView/Q3ListView classes
  • Start from simple plain instances of K3ListView/Q3ListView then move to more complex ones like KMMimePartTree
  • Gather the necessary working knowledge of
    • KMail
    • the KDE frameworks used (Akonadi, "working" look at Kdeui, Kdepimlibs)
    • the new Qt model-view paradigm
June 1 1 Month Code the message-list
  • Most instances of "simple" Qt3 view classes ported to native Qt4.
  • Start working on the main task: the message-list view.
July 1 1 Month Code the full-tread view and other filler tasks
  • Message-list mostly working: begin polishing, testing and bughunting.
  • Start working on the other secondary tasks.
    • Code the full-thread message view
    • Explore the minitools-like command bar topic
August 1 2 Weeks Mentor Evaluation
  • Goals should be nearly achieved at this point.
  • Fulfill final mentor requests
August 15 - Project End
  • Project goals achieved