Development: Student Projects

From WxWiki

Jump to: navigation, search

Contents

This page lists some suggestions for possible student projects for Google Summer of Code which we consider to be both interesting to work on and important for wxWidgets community. This list is not exhaustive, please see our general TODO list for some more ideas and you can also perfectly well suggest your own projects -- anything that you are motivated to work on and which would make wxWidgets better is welcome!

If you find anything interesting here, please also read our student application guidelines and submit your application. Good luck!

Difficulty of each project is a rough estimation on 1 to 10 scale with 1 being trivial and 10 being very difficult.

Cross-platform system sound support

wxWidgets provides wxBell() function which is as simple as it gets and also uses the native platform implementation but also minimally flexible and wxSound class which allows to play any sound file but requires the file (or sound data) to be present and produces the same result under all platforms (meaning that it won't sound good on any but one of them). The goal of this project would be to provide a way to play various "system sounds" in a simple and portable way and respecting the user settings (in particular, not play anything at all if the sound effects are turned off).

See also

Difficulty

5 for minimal usable/useful implementation, 7-8 for something sufficiently powerful to represent libcanberra API while still being implementable on the other platforms.

Experience needed

This project requires experience (or at least ability to gain it) of work under all three major platforms.

Support for power management

wxWidgets has support for power events but it's implemented for Windows only right now and doesn't even work for Vista and later systems right now, e.g. it's impossible to prevent the system from suspending in this way (which was used until Windows XP) any more. The goal of this project would be to update power management support for Windows Vista/7 (which is simple to do, see this thread) and, most importantly, also implement them for Linux and/or OS X. This will include devising an API which can be implemented on all platforms and actually implementing it for Windows and at least one of Linux/OS X (and ideally both).

See also

Difficulty

7 for one platform, 9 if both Linux and OS X are taken into account.

Experience needed

Linux part will require the use of DBUS and/or DeviceKit so experience using them would be handy. OS X part obviously would be easier with some prior experience with this platform (foundation level) API.

wxWebView Improvements

Although a solid base was created as a Summer of Code 2011 project there is still much work that can be done to improve wxWebView and its associated classes. Recommended areas to work on include ways to manage cookies, downloads, scripts (enabling and disabling javascript etc) and plugins (enabling and disabling plugins e.g. flash / java). Other areas of potential work include improving printing support and support for proxies, authentication and text searching. It is expected that a number of these areas would be improved as part of a project, ideally on all three existing backends, whilst also keeping the new Chromium backend in mind. Please post to wx-dev if you are interested in working on this so that work is not duplicated.

See also

Difficulty

7 - Designing an API that unifies all of the backends can be difficult

Experience

Basic wxWidgets knowledge and the ability to learn about the backends. Some COM experience is useful on Windows. Experience of work on all three platforms, or the ability to learn them.

wxWebHelpWindow

wxWidgets currently provides the wxHtmlHelpWindow class to display HTML help files. However it uses the wxHtmlWidnow class which only supports rendering a limited subset of the HTML standard. This project would develop a new class wxWebHelpWindow based on wxWebView to allow complex help pages to be viewed. This would probably involve creating a new base class wxHelpWindowBase and then the new wxWebHelpWindow class. Other improvements could include the ability to use the wxAuiNotebook classes rather than wxNotebook to allow a better visual fit with classes that make extensive use of wxAUI.

See also

Difficulty

6

Experience

Some wxWidgets knowledge

wxFileSystem Improvements

wxFileSystem provides a virtual file system abstraction. It currently suffers from several problems, mainly confusion between the file names and file system URIs. The goal of this project would be to clean up and streamline the existing code to clear this up and make it possible to extend it further.

Notably, integration with underlying VFS facilities such as GVFS or KIO might be an interesting idea.

This proposal is not finalized, please post to wx-dev if you're interested to discuss it further.

wxDFB

There is also a functional DirectFB port now. This port could do with significant improvements, please contact us on wx-dev mailing list if you're interested in working on it.

wxAUI 'native' art providers

The goal is to make wxAUI blend in better on a set of platforms, particularly on Mac, GTK+ and Windows 7. The original wxAUI art is rather Windows XP-like and it should be possible to take colours from the current theme and apply them to wxAUI. Mostly this will be writing separate art provider classes, but occasionally it may be necessary to dig deeper into the wxAUI code. Note that this work doesn't have to be performed on any particular platform, since the themes will be generic wxWidgets code.

Experience needed

Some wxWidgets knowledge, knowledge of the look-and-feel of the targetted platforms

See also

  • The ribbon classes, implemented as a GSoC 2009 project, has customisable art and demonstrates a Vista/Windows 7-like art mode.

wxRichTextCtrl table UI

The wxRichTextCtrl class now has text box and table capabilities, but there is no user interface for creating and modifying tables. The goal of this project is to analyze what's needed, looking at word processors such as OpenOffice.org Writer, and implement the necessary dialogs and mouse manipulation (for example table object selection and row/column movement).

Experience needed

Some wxWidgets knowledge

wxRichTextCtrl right-to-left text support

The goal is to support right-to-left languages such as Hebrew, including support for composing individual diacritics.

Experience needed

Some wxWidgets knowledge, advanced Unicode experience, and knowledge of any platform-specific functionality that may be required to implement RTL and better diacritics support.

Small projects that you can combine in a single proposal

The projects/ideas in this sections are too small to be eligible for an entire GSoC project but you can discuss them on the wx-dev mailing list and find a combination of 2/3/4 of them suitable for GSoC.

wxRichTextCtrl, text selection

The aim would be to replace the current text selecting mechanism with a more precise one and more correct from a visual point of view. Currently text selection is emphasized by creating separate chunks from the selected text and paint them separated from the rest of the text. The drawback is that often there is a displacement of few pixels affecting the selected text compared with the unselected text. Things are even worse if the row contains Tab characters. As the wxRTC uses double buffering, a proposal is to have the selection emphasized by painting the area(s) underneath the selection with the intended color (using wxRichTextCtrl::PaintBackground ?), then text above it just painted normally (maybe using a LogicalFunction with the DC). A very nice example is in the Drawing sample in "Text screen" (F2) - the text that says "There should be a text below".

wxRichTextCtrl, justified text alignment

This could be done in a simpler fashion by only distributing extra space (between words, and if needed adjust character spacing) and no hyphenation, or more complicated by including hyphenation. The base should be a good algorithm. Special cases: last row of a paragraph, last character in a row, images. There is a "famous" TEX implementation but unfortunately I couldn't find any good references for it (try Tex (Wiki), Tex (by D.Knuth)). Another good description can be found here: Adobe InDesign, Text and Typography.

A javascript implementation can be found here: TeX line breaking algorithm in Javascript.

Cross platform administrator dialog

The aim would be to provide API for a cross-platform "get administrator privileges" dialog to allow installations/operations inside system paths. This project may include definition&implementation of an API for changing/querying access privileges at run-time for a certain process.

wxDataViewCtrl improvements

This graphics control is good but still lack of some features:

  • Add a mechanism to pass custom attributes from the model to the custom data renderer;
  • Add a way to the generic wxDataViewCtrl that indicates which column has the focus so that you can move to an exact row,column position and start editing there (pressing F2 e.g.);
  • Add navigation, so that you can navigate the cells in the table by clicking on a cell with the mouse, or by using the arrow keys;

Older ideas

See Previous GSoC Projects for the projects that were subject of previous GSoCs.

You can find older, less relevant ideas here: Old GSoC Project Ideas.

Personal tools