The most annoying (and at the same time thrilling) thing in developing Lancelot compared to developing normal Plasma applets/applications is the fact that everything has to be done from ground up. I have to reimplement every widget, and not use a QWidget through QGraphicsProxyWidget because the widgets I need either do not exist (Extender buttons), or don’t fit the no-click idea. The notable exception is that I do use Plasma::LineEdit.

In 1.0, you had the evil scroll buttons which were used to scroll the lists. Those things had a more than few usability issues which I’m not going to list here now (see the past posts, comments, and bugs at bko).

That is changing now. There is a lot underground work going on at the moment in Lancelot since the old list widgets are being split into a more than a few separated classes, or to be more exact, a completely new set of classes were developed that will mimic the behaviour of the old one. The new implementation is even API compatible with the old one at the moment, altohugh API will need some cleaning later on.

Why am I reimplementing something if I just want to mimic the old behaviour? The main reason was that the old ActionListView was hard to maintain, and it was even harder to add new features to it. There is no chance that keyboard support (for example) could be added to the old implementation.

Tech

Now, the Lancelot framework has something new to brag about.

First, there was a ScrollBar. And the ScrollBar worked well.

Then, there was ScrollPane that could hold in its arms classes of Scrollable type. It showed 0, 1 or 2 scrollbars depending on the size of the Scrollable. And it worked quite well with some glitches.

After that, CustomList came to this world. CustomList was made to be able to show CustomListItems produced by the CustomListItemFactory, one item below another. It could also squeeze or expand the items to fit them inside, behaving like its old brother, the old ActionListView.

Then, the CustomList implemented the rules in the book of Scrollable, and showed itself as a CustomListView.

This was only the beginning. Somebody had to use the power of CustomList to display the data models of Lancelot. And then came the ActionListView2.

So, as you can see instead of having just one class, which would be too obvious and simplistic, we now have a dozen (not all classes are mentioned here :) ).

Conclusion

As of the last commit, the ActionListView2 is used by default in Lancelot. (you can still re-enable the old one if you use Lancelot’s trunk on daily basis by commenting out the ‘#define LANCELOT_ACTION_LIST_VIEW2_OVERRIDE’ line in the libs/lancelot/widgets/ActionListView.h)

There really are a lot of bugs in the new implementation, but those will be straightened up soon. So, don’t file bugs that are related to the new lists, since they are known.

Cheers


You can support my work on , or you can get my book Functional Programming in C++ at if you're into that sort of thing.