Geek Desktop Solution project
In my free time I have started working on the new GPL project named "Geek Desktop Solution" (GDS). The project is a desktop (like KDE or GNOME) aimed for keyboard jedi and other technical geeks. It was inspired by SciFi movies especially "Stargate Atlantis". Rodney McKay, Chief Scientific Officer of the Atlantis Expedition, created his programs (or macros as it was called in the movie) interactively and very fast. I thought how it can be done and found a solution that makes this interactive and fast programming possible.
The main concepts of GDS are:
- All environment items can be programmatically modified by user.
- The interactive shell is an entry point of the desktop - all operations can be performed using the shell.
- There is no mouse requirements - the user can operate the desktop using shell or keyboard shortcuts only.
- But at the same time almost all operations can be performed with the mouse (for touchscreen-based devices without keyboards).
- The desktop consists of widgets (like terminal, image viewer, web browser etc).
- A widget can be in usual or fullscreen mode (for example, it is useful for web browsing).
- Widgets can be grouped in activities (like multiply desktops in X.Org-environment).
Please notice that such kind of desktops is already created - Smalltalk have all required features. But for me Smalltalk syntax is awful and the GUI of all modern Smalltalk IDE is really ugly. So I decided to use Python as the main language for the GDS because it is widespread, simple and at the same time powerful. As a GUI framework I have chosen Qt because of its matureness, smoothness and flexibility. Moreover starting from 4.5 version Qt became LGPL-compatible so it can be easily used in commercial applications, though it is not important for the GDS project. But the experience I'm getting from this project can be useful for other non-GPL projects.
From technical point of view using Python + Qt is very impressive. PyQt4 binding gives all the power of Qt classes to the application. For example, I found a very useful class in Qt4.5 - QStackedLayout that makes the programming of GDS much easier (stacked layouts are required for activities and widgets fullscreen mode). QTest namespace methods make testing easier, and now I have a 100% code coverage and do not plan to decrease this number. KDE4 Oxygen style gives amazing appearance to Qt application and I do not have to worry about GUI of the GDS right now. Of course, I do not want to depend on KDE4 and will create my own styles but it is not so critical for this stage of the project. Actually I'm not planning to release the project to the community until I fix the styles, because not all users have KDE4 installed especially with the black color theme (the current version appearance of the project is based on Zion Reversed scheme - black color theme).
Let me give a little note about Qt testing. Although QTest namespace provides methods for mouse clicking and keyboard typing, the application is not working in the test environment as it should. For example, clicking on widget does not set focus on it. So please be aware of testing focusing functionality or make your application business-logic independent from it. And do not forget about event processing - signal/slot mechanism uses events and will not work if you do not use qWait method or until you make tests asynchronized.
This is how it looks now - see a screenshot below. And of course, if you want to see the sources, let me know and I'll publish it. Keep in touch!