In recent years, computer monitor's resolutions moved from a 4/3 ratio to a 16/9 or even 16/10 ratio. This move results in bad usage of the screen space in many applications.
Nemiver is one of them, every debugging panels are stacked in the bottom of the application, and doesn't left much space to see the source code of the debugged program. On the other hand, there is a lot of free space which is never used on the right side of the application.
My proposal is to create a Layout Manager and additional layouts for Nemiver which will allow the user to choose the layout he wants.
My name is Fabien Parent, and I’m a 22 years old French IT Student. I have been using GNU/Linux and GNOME as main Operating System for the past 7 years. During those years I have learned a lot about programming and computer science thanks to free-software, and their source code publicly readable.
Few years ago, I decided to contribute back to a community that make me learn so much, and make me believe that this sort of knowledge shouldn’t be secret , but should be free and open. It was also a good way to keep learning.
In consequence, I have started looking at possible free-software where I could be contributing, but it wasn’t easy because of the difficulty to start contributing to projects that have a large amount of code. I joined many GNOME irc channels (my nickname is 'Fabo'), and finally found a small abandoned project where the code base size wasn’t repulsive: regexxer [1]. Since then, I tried the catch up with the latest GNOME A.P.I.s, like porting the application to GTK+3 and GSettings.
Few weeks ago, I decided to use my GSettings porting experience to start contributing to a software with a larger code base: Nemiver, by providing a GSettings implementation of the Nemiver’s configuration manager. On April 4th, my patch was finally committed [2].
It is hard to start contributing to a software with a large code base even with my previous experience, because the patch I mentioned earlier was very localized and wasn’t directly in contact with others sub-systems of Nemiver.
This Google Summer of Code is really good opportunity to continue my work on Nemiver and learn more and more about its code base, and ultimately become a regular contributor of Nemiver.
I think the goal of this project is not to work on a layout manager for Nemiver but is instead to make me a regular contributor of the Nemiver project, and the layout manager is just the means to it.
Nemiver is a great piece of software and one of the most complete graphical debugger of the GNOME desktop environment. But its user interface becomes really badly optimized for modern computer monitors, that's why I want to use this Google Summer of Code to improve it.
At this time, every debugging panel is stacked inside a GtkNotebook, which makes it very hard to have a full idea of what is going on in the program you are currently debugging because you can see only one debug panel at the time. I want to use all the free space that is currently available to show more debug panel at the same time, which will permit to see the complete state of your application at a glance.
However, the project is not to change the current layout of Nemiver but to add new layouts to it, because Nemiver must stay adequate for different kind of monitor. This is why the project will start by creating a layout manager which will allow to create as many layout as we want, and will be able to change the current layout of Nemiver without the need of restarting the application. Then I will have to port the current debugging perspective to this new layout manager. At this point there will be no visible change for the user but will allow the creation of new layouts.
Once the layout manager done, I will start developing a second layout which will be optimized for a better usage of the horizontal space. To be able to change on the fly the layout of Nemiver, soon after I will implement a setting page that let the user choose the layout he wants to use.
Afterward I will be using my previous work to add one or two more static layout, this shouldn't takes much time compared to the creation of the layout manager and the first alternative layout.
Finally, the most exciting feature, at least for me, will be the addition of a fully dynamic layout based on the library GDL [3] which will allow the user to create his own layout based on which debugging panel he is using more, on the size of its monitor and on the number of monitor it will be using. The GDL based layout will allow the user to detach panels to put them on a different monitor than the one showing the source code, the most obvious usage of this feature would be to move the console used for input and output out of the Nemiver window.
I do believe that this project will be a success because I will follow the following rules:
Getting regularly feedback from Nemiver's developers and always stay in contact with them.
Send a short e-mail every day-or-two-days to the mentor which will say what I have done, what I plan to do next, how I will do it. The goal is to get feedback from the mentor as soon as possible.
The project can be divided into 3 milestones:
The creation of the layout manager and migration of the current layout to the layout manager.
The creation of alternative static layouts.
The creation of a dynamic layout based on GDL.
25 April - 16 May:
Read documentations.
Familiarize myself with the Nemiver architecture, code and conventions.
Make a first draft of the design of the different layout I will develop.
17 May - 22 May:
Work on the Layout Manager design and get feedback from the mentor.
23 May – 9 June (Official coding period starts):
Write the Layout Manager
Migration of the current layout to the new layout manager
10 June – 12 June: Milestone 1
Document the existing code
13 June – 26 June:
Write the first alternative Layout.
Write the Layout Manager preferences user interface.
27 June – 13 July: Milestone 2
Write a second and third alternative static Layout.
14 July – 21 July:
Port the binding GDLmm to GTK+3
22 July - 15 August: Milestone 3
Add feature to show/hide debugging panels.
Create a dynamic layout based on GDLmm.
16 August – 22 August:
Finalize the project with tests, bugs fixing, and documentation writing.
[1]
Website: http://regexxer.sourceforge.net
Repository: http://git.gnome.org/browse/regexxer
[2]
Commit: http://git.gnome.org/browse/nemiver/commit/?id=f3b5b0275fbe00b958bb7c2bb29ab71ae53383d4
[3]
Repository: http://git.gnome.org/browse/gdl
Binding C++ I made: http://git.gnome.org/browse/gdlmm