2009-06-27 17 views
1

J'écris ma première application gtk2hs + glade, et j'utilise un textview pour afficher la sortie du programme. Au lieu de faire défiler ce que je pensais être le comportement par défaut, le texte grossit chaque fois que je redéfinis le texte, et réduit mes boutons en dessous jusqu'à ce qu'ils disparaissent, mais les barres de défilement ne s'ouvrent jamais et ne défilent jamais. Suis-je censé faire quelque chose de spécial pour le faire défiler? Voici la fonction principale que j'utilise en ce moment, pardonnez le code sale, j'ai l'intention de nettoyer la maison plus tard. :)Problèmes de défilement dans TextView dans Gtk2hs et Haskell

main :: FilePath -> IO() 
main gladepath = do 
initGUI 
-- Create inital game state 
st <- newIORef (State "" "" "" 0 0 0) 
-- Get handles to all needed widgets from Glade file 
Just xml <- xmlNew gladepath 
mw  <- xmlGetWidget xml castToWindow "mainWindow" 
sw  <- xmlGetWidget xml castToWindow "window2" 
mb  <- xmlGetWidget xml castToButton "fireButton" 
ng  <- xmlGetWidget xml castToButton "nbutton" 
mv  <- xmlGetWidget xml castToTextView "textview1" 
but <- xmlGetWidget xml castToButton "button1" 
ab  <- xmlGetWidget xml castToAboutDialog "aboutdialog1" 
menu <- xmlGetWidget xml castToMenuItem "menuitem3" 
about <- xmlGetWidget xml castToMenuItem "imagemenuitem10" 
quitb <- xmlGetWidget xml castToMenuItem "menuitem3" 
p1name <- xmlGetWidget xml castToEntry "entry1" 
p2name <- xmlGetWidget xml castToEntry "entry2" 
spin <- xmlGetWidget xml castToSpinButton "spinbutton1" 
sett <- xmlGetWidget xml castToMenuItem "menuitem2" 
p1lab <- xmlGetWidget xml castToLabel "label4" 
p2lab <- xmlGetWidget xml castToLabel "label5" 
cylab <- xmlGetWidget xml castToLabel "label6" 
-- Handle events and such 
buff <- textViewGetBuffer mv 
onActivateLeaf quitb mainQuit 
onResponse ab $ \resp -> 
    case resp of 
     ResponseClose -> widgetHide ab 
     _    -> widgetHide ab 
onActivateLeaf about $ widgetShow ab 
onActivateLeaf sett $ widgetShowAll sw 
onDelete sw $ \_ -> widgetHide sw >> return True 
onClicked but $ 
      initalize sw p1name p2name spin st p1lab p2lab cylab buff 
onClicked ng $ widgetShowAll sw 
onDelete ab $ \_ -> widgetHide ab >> return True 
onClicked mb $ fireButton st sw buff cylab 
onActivateLeaf menu $ widgetDestroy mw 
onDestroy mw mainQuit 
widgetShowAll mw 
mainGUI 

Si vous avez besoin de quoi que ce soit d'autre, veuillez le demander dans un commentaire. Je ne suis pas sûr si j'ai besoin de fournir autre chose.

Le fichier Glade est trop grand pour montrer ici, mais je collé ici au cas où quelqu'un a besoin: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310

+0

Le code Glade XML est-il assez petit pour être inclus ici? – ephemient

+0

Modifié pour créer un lien vers le fichier glade, collé. – Rayne

Répondre

3

J'ai réussi à résoudre mon propre problème après avoir parlé avec Axel sur la gtk2hs liste de diffusion. Les TextViews sont conçus de telle sorte qu'ils peuvent être une seule ligne de texte, ou un TextView multiligne avec des barres de défilement. Si vous voulez des capacités de défilement, vous devez placer le TextView dans une fenêtre défilée. J'ai résolu mon problème en plaçant mon TextView dans une fenêtre défilée, cela fonctionne parfaitement maintenant.