[Kde-imaging] Proposed enhancement to KIPIPlugins::ImagesList
Aurélien Gâteau
aurelien.gateau at free.fr
Sun Dec 7 23:50:04 CET 2008
Luka Renko wrote:
> On Sunday 07 December 2008 19:48:57 Aurélien Gâteau wrote:
>> I think the idea is good, but adding another bool to the constructor is
>> not a good idea, IMO. It leads to unreadable code like this:
>>
>> list = new ImagesList(iface, parent, true, false, false, true);
>
> I agree, I just used the way it was already done for other options (not to
> invent new way for only single option).
That's what I thought. Your post just made me realize the API could be
improved.
>> That kind of API is considerd bad practice in KDE4. It's better to
>> define setters and getters. This way one can write code like this:
>>
>> list = new ImagesList(iface, parent);
>> list->setListViewOnly(true);
>> list->setAllowRaw(false);
>> list->setAutoLoad(false);
>> list->setButtonsBelow(true);
>
> Yep, I like this "Qt-way" of doing it. I will wait for Andi Clemens (original
> author of the widget) to comment and see in what direction we should move.
> I think if we do this, we should change it for already existing options.
I agree.
> I am also not sure how hard it is to reorganize the code in that way, as
> currently all GUI widgets/layouts are created already in constructor,
> therefore these additional methods would need to change already created layout
> (btw, I am no GUI/Qt expert - just pure low-level C++ developer trying to
> write a simple GUI ;-))
Yes this can be a bit tricky. I haven't looked at the code but I guess
at least for allowRaw and autoLoad it should not be a problem as I
suppose these properties are not directly gui related. For the gui
related properties, there are a few ways to do it:
- Add a relayout() slot which deletes the existing layout if any and
does all the layouting. Call this method through a QTimer in ctor and in
each setter (using a QTimer means it will be only called once, even if
multiple setters are called)
- Defer layouting to showEvent(). This is probably simpler, but it means
all setters altering the layout need to be called before the widget is
first shown. Which is usually not a problem.
>> Additionally, adding new default parameters to a constructor is not
>> binary compatible, so one has to write and maintain separate
>> constructors. In contrast, adding new getters and setters (as long as
>> they are not virtual) is binary compatible.
>
> True, but I think this is not really the issue, as I think this widget was not
> officially released yet (still in beta) and does not have that many uses (at
> least not outside of KDE svn, which are trivial to fix).
No it's not an issue yet, but it could be in the future when the widget
is in a stable release of libkipi.
Aurélien
More information about the Kde-imaging
mailing list