Development: Student Projects
From WxWiki
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.
[edit] wxiPhone port
A basic port of wxWidgets to Cocoa Touch has been started by Stefan Csomor, but this requires the UI to be written in Cocoa using Apple's tools. The goal of this project is to implement some of the required GUI wrappers by following the simulated wxiPhone API at wxMobile Proposal.
Difficulty
9
Experience needed
Some wxWidgets and Cocoa Touch knowledge
[edit] wxQt port
The goal is to build on the start that has been made on the wxQt port by Peter Most, and implement a chunk of functionality. This might be the window device contexts, or a set of classes such as the wxButton, wxCheckBox, wxTextCtrl and other basic controls.
Difficulty
11
Experience needed
Some wxWidgets and Qt knowledge
See also
- The latest version is available in the wxQt branch (http://svn.wxwidgets.org/svn/wx/wxWidgets/branches/wxQT)
[edit] Wrap new Vista/Windows 7 Functionality
The goal is to provide access to some of the new Vista UI functionality. This will involve identifying and implementing wrappers for new controls in Windows Vista/7, such as the command link button with BS_COMMANDLINK style, disclosure buttons e.g. [chevron] (which could be used to provide a native wxCollapsiblePane implementation), and the TaskDialog API; and identifying similar functionality on other platforms and making sure any new wxWidgets API will accommodate other plaforms. Also optionally, implement generic versions of Windows-specific controls. Note that not all Vista-like controls need be implemented with Vista APIs: you may decide to implement some or all of them generically.
Experience needed
Windows programming, some wxWidgets knowledge, possibly COM programming
Difficulty
6-8 depending on the range of the enhancements covered.
See also
- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/UxGuide/UXGuide/Controls/CommonControls.asp
- http://www.codeproject.com/KB/vista/Vista_TaskDialog_Wrapper.aspx
- http://www.codeproject.com/KB/vista/VGGlassIntro.aspx
[edit] Masked Edit Control
The goal is to write a wxTextEntry-derived class (so that it could be used with both wxTextCtrl and wxComboBox) which allows to limit the user input using the provided 'mask'. Such controls are commonly used for the entry of IP addresses (mask "###.###.###.###"), phone numbers ("(###) ###-####" in the US) and so on. The mask syntax and the API should follow the existing wxMaskedTextCtrl from wxPython.
Note that this is really too small a task for a whole GSoC project and should be combined with another task.
Difficulty
6.
See also
- http://svn.wxwidgets.org/viewvc/wx/wxPython/trunk/wx/lib/masked/maskededit.py?view=markup
- http://www.codeguru.com/cpp/controls/editctrl/article.php/c517
[edit] Animation for UI Elements
Animated UIs give the "WOW" Effect, which nowadays is an important factor for state of the art applications. Having controls slide to leave place for newly inserted items, fading effects, genie animations etc. increase the user experience. One way to tackle this topic would be
[edit] "basic animation" level
where
- simple properties (like size, position, color etc) should be changed, between n values
- over a certain time
- using a certain function, ie linear, or for a movement eg sin gives a better live experience for movements as it simulates acceleration, movement, deceleration
then perhaps a
[edit] "layer" animation
where we have for example a wxAnimatedPanel that can do certain animations, such as when wxWindows are shuffled in a manner that would not be reflected in true wxWindows' properties, for example genie-like moving from one place to another. In the beginning of the animations, the children of the wxAnimatedPanel would render their current state on a memory DC, the true wxAnimatedPanel would be hidden. The animation is then shown using image effects based on the bitmap, and in the end the wxAnimatedPanel is shown again at the new position.
Difficulty
7
Experience needed
Some wxWidgets knowledge, experience with animations on platforms that already support this
See also
http://msdn2.microsoft.com/en-us/library/ms752312.aspx
[edit] 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).
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.
[edit] wxOSX UI Enhancements
The goal is to improve native appearance of wxWidgets applications on Mac OS X. The student will identify where native appearance and behaviour improvements could be made, and implement some or all of these.
Tasks may include:
- Mac-friendly scrolling tab control (perhaps a Mac OS X look and feel for wxAuiNotebook)
- native Mac help controller and sample help file
- segmented controls, menu button, date picker control, token field
Difficulty
?
Experience needed
Mac OS X programming, some wxWidgets knowledge
See also
Apple Human Interface Guidelines
[edit] 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.
[edit] wxHildon
wxWidgets supports Maemo (2.2/Gregale/N770 only so far but work is in progress to add support for 3.2/bora/N800). This could do with significant improvements; please contact us on wx-dev mailing list if you're interested in working on it.
We need to consider whether the announcement of MeeGo makes this port obsolete (deprecation of GTK+) or whether GTK+ will be supported long enough for a finished port to be worthwhile.
[edit] 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.
[edit] 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.
[edit] wxRichTextCtrl table support
The goal is to add table support to the wxRichTextCtrl editor. HTML tables can be the model for the underlying structure, and there will need to be several dialogs for editing tables.
Experience needed
Some wxWidgets knowledge
[edit] wxRichTextCtrl image support
The goal is to improve the very basic image support in wxRichTextCtrl. Improvements include floating images (this will need some generic support for text flow around objects), resizing, and an image properties dialog.
Experience needed
Some wxWidgets knowledge
[edit] 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.
[edit] 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.
[edit] 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".
[edit] 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.
[edit] 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.
[edit] Ensure correct behaviour of GUI classes
This project would consist in writing wxGuiTesting-based automated tests for wx controls which ensure that the behaviour and the order and the number of events generated by the (main) wxWidgets GUI controls (wxTextCtrl, wxButton, etc etc) is consistent among the 3 major ports (wxMSW, wxGTK, wxMac).
See http://wxguitest.sourceforge.net/ for more info.
[edit] 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;
[edit] Older ideas
You can find older, less relevant ideas here: Old GSoC Project Ideas.

