packages feed

tabloid-0.3: ShellCmdInputView.hs

module ShellCmdInputView where

import Graphics.UI.Gtk
import Graphics.UI.Gtk.ModelView as MV

data ViewState = V 
    {
      mainWidget :: Widget
    , executeB :: Button
    , exitCodeL :: Label
    , textView :: TextView
    , cancelB :: Button
    , shellE :: Entry
    }

new buf fileButtons = do  
  cmdE <- textViewNewWithBuffer buf

  let stateTypes = [StateNormal, StateActive, StatePrelight, StateSelected, StateInsensitive]
      fgCols = [Color 65535 49152 0, Color  65535 49152 0, Color  65535 49152 0, Color  65535 49152 0]
      bgCols = [Color 255 192 0, Color 0 0 0, Color 0 0 0, Color 32535 32535 0]

  mapM_ (uncurry (widgetModifyText cmdE)) $
             stateTypes `zip` fgCols

  mapM_ (uncurry (widgetModifyBase cmdE)) $
             stateTypes `zip` bgCols

  scrollWin <- scrolledWindowNew Nothing Nothing
  set scrollWin 
          [ containerBorderWidth := 5
          , scrolledWindowShadowType := ShadowIn
          , scrolledWindowVscrollbarPolicy := PolicyAutomatic
          , scrolledWindowHscrollbarPolicy  := PolicyAutomatic
          ]
  containerAdd scrollWin cmdE

  cmdBHbox <- hBoxNew False 2
  cmdRunB <- buttonNewFromStock stockExecute
  boxPackEnd cmdBHbox cmdRunB PackNatural 2
             
  cancB <- buttonNewFromStock stockCancel
  widgetSetSensitivity cancB False
  boxPackEnd cmdBHbox cancB PackNatural 2
             
  boxPackStart cmdBHbox fileButtons PackNatural 2

  exitL <- labelNew Nothing
  boxPackStart cmdBHbox exitL PackGrow 2

  shellH <- hBoxNew False 2
  shellL <- labelNew $ Just "Shell: "
  shellE <- entryNew
  entrySetText shellE "/bin/bash"
  boxPackStart shellH shellL PackNatural 2
  boxPackStart shellH shellE PackGrow 2

  centerHB <- hBoxNew False 2
  
  cmdVbox <- vBoxNew False 2
  boxPackStart cmdVbox shellH PackNatural 2
  boxPackStart cmdVbox scrollWin PackGrow 2
  boxPackStart cmdVbox cmdBHbox PackNatural 2  

  vbox <- vBoxNew False 2
  boxPackStart vbox  cmdVbox PackGrow 2

  return $ V (toWidget vbox) cmdRunB exitL cmdE cancB shellE