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!
[edit] Speech Input/Output Support
The goal is to provide a set of classes for alternative input/output methods, especially speech but possibly including other modes that can be used by disabled users. This project could build on the wxTextToSpeech speech synthesis wrapper classes available from http://www.anthemion.co.uk/wx/wxtexttospeech.zip. These classes provide access to several speech engines, and the project could add breadth and depth to these (for example using KDE and GNOME speech APIs, and better SSML support). However the main thrust would be to offer a consistent API for speech recognition engines on a number of platforms; as well as the basic functions, the project would probably involving creating GUIs for training and vocabulary editing, plus a consistent grammar specification mechanism.
(Note that if speech recognition APIs on the three major platforms (Windows, Linux and Mac) are not sufficiently mature for this approach to be practical, or cannot be unified in a reasonable way, then focusing on speech synthesis may not represent a big enough task and thus it would not be an appropriate GSoC project.)
Experience needed
Some wxWidgets knowledge, knowledge of speech technology.
See also
- http://www.anthemion.co.uk/wx/wxtexttospeech.zip
- http://en.wikipedia.org/wiki/Speech_Application_Programming_Interface
- http://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language
[edit] Accessibility Support
The goal is to research accessibility models on the major platforms and extend or replace the existing wxWidgets accessibility functionality, which is pressently Windows-only. Alternatively, it could be an independent API (not based on existing platform APIs) providing classes for augmenting an existing GUI application with a consistent hierarchical model and keyboard access. A text to speech API (wxTextToSpeech) is currently in progress that could be used with this project.
Experience needed
Some wxWidgets knowledge.
See also
- http://en.wikipedia.org/wiki/Microsoft_Active_Accessibility
- http://developer.gnome.org/projects/gap/
- http://www.apple.com/accessibility/
[edit] wxHTML2
The current lightweight HTML classes in wxWidgets, wxHTML, are good for presentation of simple text and graphical information, but cannot cope with modern web standards such as CSS. The goal of the wxHTML2 project is to implement a wrapper around fully-featured web browsers - there is already wxIE on Windows, and wxWebKitCtrl on Mac, so the main part of the project will be a wrapper around a suitable browser under GTK+, such as WebKit, Embeded Mozilla (GTKMozEmbed), or wxMozilla. Although there is a separate wxWebKit project, this is a wxWidgets port of the code rather than a wrapper of the GTK+ port, and may be in a less advanced state than the GTK+ implementation. However it would be worth evaluating as an alternative to a GTK+ based control. The project will create a uniform API on all platforms and demonstrate a simple browser making use of the control. The code should be usable with both wxWidgets 2.8 and 2.9, and part of the project will be to ensure that downloading and building the web browser code is made as easy as possible, given that resolving dependencies can be challenging.
Experience needed
Some wxWidgets knowledge; some GTK+ programming experience.
See also
- http://live.gnome.org/WebKitGtk
- http://libufo.sourceforge.net/ C++ core library for forms respectively graphical user interfaces (GUI)
- http://www.gtkforums.com/about1463.html&highlight=
- https://wiki.mozilla.org/Embedding/NewApi
- http://sourceforge.net/projects/wxactivex
- https://svn.wxwidgets.org/viewvc/wx/wxWidgets/branches/WX_2_8_BRANCH/include/wx/html/webkit.h?revision=53798&view=markup
- http://wxwebkit.wxcommunity.com/
[edit] Ribbon bar implementation
The goal is to create a set of classes for creating ribbon-bar-like UIs, with dynamic, compact, context-sensitive toolbar arrangements. The UI doesn't have to be exactly the same as the Microsoft ribbon bar (see also Adobe tools, with a less hard-core interpretation of the concept that doesn't exclude the use of menubars). It would be better if the classes were not based on Windows-specific libraries.
Experience needed
Some wxWidgets knowledge.
See also
[edit] Wrap new Vista/Windows7 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
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 in the future) 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.
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 eg we have a wxAnimatedPanel, that could do certain animations, like eg when wxWindows are shuffled in a manner that would not be reflected in true wxWindows' properties, eg genie-like moving from one place to another, where not the true wxWindow would be morphed and moved but rather a memory bitmap. Ie 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 shown using image effects based on the bitmap, and in the end the wxAnimatedPanel would be shown again at the new position.
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] 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
Experience needed
Mac OS X programming, some wxWidgets knowledge
See also
Apple Human Interface Guidelines
[edit] wxHildon and/or wxDFB
wxWidgets supports Maemo (2.2/Gregale/N770 only so far but work is in progress to add support for 3.2/bora/N800) and there is also a functional DirectFB port now. However both could do with significant improvements, please contact us on wx-dev mailing list if you're interested in working on either of these ports.
[edit] File-System Changes Notification Support
The goal of this project will be to write a class allowing to efficiently monitor changes to the given files and/or directories using
- ReadDirectoryChangesW() function under Windows
- inotify system call under Linux
- FSEvents framework under OS X
- inefficient polling implementation provided as fallback for the other systems
This project doesn't involve any GUI work but is otherwise representative of wxWidgets development process as it involves building a useful higher-level API which can be implemented using the different low-level functions with different semantics provided by different platforms.
[edit] Fully integrated tabs in wxAUI
The current version of wxAUI supports both docked panels as well as a splittable notebook control. This project would add tab sheets to the docking portion of the toolkit, without usage of extra dynamically created tab controls. The foundation work for this has already been laid. The developer shall then make sure that the full layout including tabs may be serialized in a perspective. 2-3 months maximum.
Another less ambitious project would be better support of minimum sizes in wxAUI. This requires some tricky calculations with sizers and pane proportions, but it would be useful if someone had the time to sit down and do it. Two weeks development time.
Experience needed
Knowledge of the inner workings of wxSizers
[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] Add bitmap support to wxButton
Currently wxButton supports only text and wxBitmapButton only bitmaps; we need wxButton to support both text and bitmap (and define the API for the placement of text/bitmap parts).
[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.



