[SailfishDevel] One ListModel for multiple SilicaGridViews

Tomek discuss at tdress.de
Sun Mar 16 05:37:49 UTC 2014


I am wondering how I could display a single ListModel in multiple SilicaGridViews (filtered)?
Simply making an item invisible in a specific view does not work, because it still consumes (cellWidth x  cellHeight) the space.

I know, I could also implement my own model in c++. Probably something like this was done my someone already? 


Currently, I am experimenting with multiple models which I need to keep in sync (implementation is far from ready ;)).
[FilteredListModel.qml]
import QtQuick 2.0
import Sailfish.Silica 1.0


Item {
    property ListModel filteredModel: _filteredModel
    property ListModel model: _model
    property string filterRoleName
    property var filterValue

    ListModel {
        id: _filteredModel
    }

    ListModel {
        id: _model

        onRowsInserted: {
            for (var i = first; i <= last; i++) {

                var entry = model.get(i);
                if (entry[filterRoleName] === filterValue)
                {
                  _filteredModel.append(entry);
                }
            }
        }

        onRowsRemoved: {
             for (var i = first; i <= last; i++) {
                _filteredModel.remove(i);
             }
        }
    }

    function append(sobject)
    {
        model.append(sobject);
    }

    function setProperty(index, key, value )
    {
        model.setProperty(index, key, value);
        var entry = model.get(index);

        if (entry[filterRoleName] === filterValue)
        {
            _filteredModel.set(index, model.get(index))
        }
        else
        {
            _filteredModel.remove(index);
        }
    }

    function remove(index)
    {
        model.remove(index);
    }

    Component.onCompleted: {
        model.append({"name": "Apple","cost": 0.25,active: false});
        model.append({"name": "Orange","cost": 0.90,active: true});
        model.append({"name": "Bannana","cost": 0.30,active: true});
        model.append({"name": "Ananas","cost": 3.10,active: true});
    }
}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20140316/757be466/attachment.html>


More information about the Devel mailing list