Pergunta

Eu estou escrevendo minhas primeiras gtk2hs + aplicação clareira, e eu estou usando um textview a saída de exibição do programa. Em vez de rolagem que eu pensei que era suposto ser o comportamento padrão, o textview fica maior cada vez que eu re-definir o texto, e faz os meus botões abaixo-lo menor até desaparecer, mas as barras de rolagem não aparecer, e nunca pergaminhos. Eu deveria fazer algo especial para obtê-lo para rolar? Aqui é a principal função que estou usando no momento, perdoar o código sujo, eu pretendo casa de limpar depois. :)

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

Se você precisar de qualquer outra coisa, por favor solicitá-lo em um comentário. Eu não tenho certeza se eu preciso para fornecer qualquer outra coisa.

O arquivo clareira é muito grande para mostrar aqui, mas eu colei aqui no caso de alguém precisa dele: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310

Foi útil?

Solução

Eu consegui resolver meu problema depois de falar com Axel nas gtk2hs lista de discussão.

TextViews são projetados de modo que eles podem ser uma única linha de texto, ou um TextView multilinha com barras de rolagem. Se você quiser recursos de rolagem, você tem que colocar o TextView em uma janela enrolada. Eu resolvi meu problema colocando meu TextView em uma janela enrolada, ele funciona perfeitamente agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top