On jun 23, 2015, 12:26 p.m., David Faure wrote:
> > Regarding the style. AStyle time i think ;)
> > There is lots of function( arg ) instead of function(arg). ?besides that, 
> > some places could use more line breaks for readability (marked above).
> > 
> > Some API questions.
> > setSourceColumns seems to be used for both rearranging and filtering with 
> > no way to change individual columns (that i see). Eg, to toogle them or 
> > show/hide columns on demand.
> > Would it make sense to add the following API functions as well?
> > 
> > // toggle the visibility of a column
> > void toggleColumnVisibility(int column)
> > {
> >     // pseudo code
> >     setColumnVisible(column, !isColumnVisible(column));
> > }
> > 
> > // set the column visible or hidden, depending on the bool.
> > void setColumnVisible(int column, bool visible)
> > 
> > // returns if a column is visible
> > bool isColumnVisible(int column)
> > 
> > Adding the above functionality would make it much more convenient to use in 
> > cases where you want to hide/show a column on the fly.
> 
> David Faure wrote:
>     Thanks for the reminder about astyle-kdelibs, forgot to do that. Done now.
>     
>     Toggle seems overkill (even QHeaderView doesn't have that), but the other 
> two make sense. I'll add that (with QHeaderView naming).
> 
> David Faure wrote:
>     Hmm, it gets a bit hairy.
>     
>     If I do setSourceColumns(QVector<int>() << 2 << 1) and then 
> setColumnHidden(2, true), I assume I'm hiding source-column-2, so the 
> underlying vector becomes [1].
>     But if I now do setColumnHidden(2, false), where should column 2 reappear?
>     For the position to be kept, we would need (like QHeaderView) to 
> distinguish reordering (visual<->logical mapping) and hiding (happens on top).
>     This makes the implementation more complex and error-prone IMHO. I think 
> I'd rather let the program decide how it wants to handle that "vector of 
> source columns". Maybe it's statically known (like in the first app I wrote 
> this for), or it's replicating what a QHeaderView does at report-generation 
> time (like in the app I'm writing this for right now, see FatCRM on github) 
> (*), and only in a possible third case there would be a need for separating 
> reordering and hiding...
>     
>     (*) this reminds me, I wanted to add docu about how to replicate what 
> QHeaderView does, using this proxy, but maybe this is only useful for use 
> with KDReports...
> 
> Mark Gaiser wrote:
>     It's not hairy, but i see why you think it is. You're assuming that 
> setColumnHidden hides the _source_ column. That's not how i read your API.
>     
>     You have setSourceColumns(QVector<int>() << 2 << 1).
>     Then you have setColumnHidden(2, true)* which in my view hides the second 
> _proxy_ column, not the source column. If it hides the source column the name 
> should reflect that (eg setSourceColumnHidden).
>     
>     Think of it this way, if you use the Qt class QSortFilterProxyModel and 
> you call index(row, col) on that class, you get the QModelIndex from the 
> _proxy_, not the _source_, right? Or i'm very wrong and need to refresh my Qt 
> Model knowledge when a proxy is involved ;-)
> 
> David Faure wrote:
>     That doesn't remove the complexity, since the problem of "what should 
> setColumnHidden(2, false) do afterwards?" is still there, if the underlying 
> implementation is a single QVector<int>. And if it's not, then the 
> implementation needs to skip hidden columns, which becomes more complex.
>     
>     You're right about index(row, col), but this isn't what this is about. 
> Look at QHeaderView::hideSection, it works on logical indexes, not visual 
> indexes.
>     Imagine a table with columns like "first name, last name, age, company". 
> Then you want to programmatically use that table for a case where age doesn't 
> matter, you do hideSection(2). This should work, even if the user reordered 
> the columns. This is why the API works on logical indexes, they are the only 
> thing that makes sense to the caller of the API.
>     
>     Of course in the proxy here there's no such user/programmer distinction, 
> but in order to have some consistency I still think that *if* there should be 
> any separate API for hiding and reordering, it should probably work like 
> QHeaderView does.
>     
>     But at this point I think extra API isn't necessary.

Thank you for the detailed explenation. I see where you would have that 
complexity issue.


- Mark


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/124156/#review81702
-----------------------------------------------------------


On jun 23, 2015, 9:33 p.m., David Faure wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/124156/
> -----------------------------------------------------------
> 
> (Updated jun 23, 2015, 9:33 p.m.)
> 
> 
> Review request for KDE Frameworks.
> 
> 
> Repository: kitemmodels
> 
> 
> Description
> -------
> 
> It supports reordering and hiding columns from the source model.
> 
> 
> Diffs
> -----
> 
>   autotests/CMakeLists.txt 4e604eeb6bd64529ec1fba983e3f58e2f8d0bd2c 
>   autotests/krearrangecolumnsproxymodeltest.cpp PRE-CREATION 
>   autotests/test_model_helpers.h PRE-CREATION 
>   src/CMakeLists.txt dc7d5f04c650f8d21784f16f8d7676e5c74c93e1 
>   src/krearrangecolumnsproxymodel.h PRE-CREATION 
>   src/krearrangecolumnsproxymodel.cpp PRE-CREATION 
> 
> Diff: https://git.reviewboard.kde.org/r/124156/diff/
> 
> 
> Testing
> -------
> 
> Wrote it for a customer who allowed me to keep copyright and publish it under 
> the LGPL.
> 
> Unit-tested, and used in two real projects.
> 
> 
> Thanks,
> 
> David Faure
> 
>

_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel

Reply via email to