Question

I ne peut pas forcer GTK pour rendre les données dans TreeView avec le modèle ListStore avec plusieurs colonnes à travers Haskell. J'ai le code suivant

addTextColumn view name =
    do
    col <- treeViewColumnNew
    rend <- cellRendererTextNew
    treeViewColumnSetTitle col name
    treeViewColumnPackStart col rend True
    treeViewColumnSetExpand col True
    treeViewAppendColumn view col

prepareTreeView view = 
    do
    addTextColumn view "column1"
    addTextColumn view "column2"

    --adding data here

Alors je tente d'ajouter des données, et il y a des problèmes. J'ai essayé ces:

    --variant 1 (data TRow = TRow {one::String, two::String}
    model <- listStoreNew ([] :: [TRow])
    listStoreAppend model $ TRow { one = "Foo", two = "Boo" }
    treeViewSetModel view model

    --variant 2
    model <- listStoreNew ([] :: [[String]])
    listStoreAppend model ["foo","boo"]
    treeViewSetModel view model

    --variant 3
    model <- listStoreNew ([] :: [(String, String)])
    listStoreAppend model ("foo", "boo")
    treeViewSetModel view model

Mais dans tous les cas, je vois la table avec en-tête de la colonne et une ligne vide insérée. Toute aide sera appréciée.

Était-ce utile?

La solution

J'ai manqué une chose importante. Étant donné que le modèle ListStore est polymorphique, vous devez décrire comment le modèle doit extraire des données à partir d'objets qui lui sont données. Chaque fois que vous ajoutez la nouvelle colonne, vous devez écrire le code comme celui-ci (texte exemple renderer):

cellLayoutSetAttributes yourColumn yourRenderer model (\row -> [ cellText := yourPowerfulValueExtractionFunction row ])

où est row vos données.

C'est donc le code de la solution avec les données mises en œuvre avec "variante 1" (voir la question):

prepareTreeView view = 
    do
    model <- listStoreNew ([] :: [TRow])

    addTextColumn view model one "one"
    addTextColumn view model two "two"

    listStoreAppend model $ TRow { one = "foo", two = "boo" }

    treeViewSetModel view model

-- 
addTextColumn view model f name =
    do
    col <- treeViewColumnNew
    rend <- cellRendererTextNew
    treeViewColumnSetTitle col name
    treeViewColumnPackStart col rend True
    -- LOOK HERE:
    cellLayoutSetAttributes col rend model (\row -> [ cellText := f row ])

    treeViewColumnSetExpand col True
    treeViewAppendColumn view col
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top