{-# OPTIONS -cpp #-} -- Test file for the ListView widget. module Main(main) where import Graphics.UI.Gtk import Graphics.UI.Gtk.ModelView as New import Control.Exception import System.Directory import System.IO import System.Locale import Data.Time data FileInfo = FileInfo { fName :: String, fSize :: Integer, fTime :: UTCTime } main = do initGUI win <- windowNew on win objectDestroy mainQuit curDir <- getCurrentDirectory files <- getDirectoryContents curDir fInfos <- (flip mapM) files $ \f -> do s <- handle (\e -> #if __GLASGOW_HASKELL__>=610 case e :: SomeException of e -> #endif return 0) $ do h <- openFile f ReadMode s <- hFileSize h hClose h return s t <- getModificationTime f return FileInfo { fName = f , fSize = s , fTime = t } store <- New.listStoreNew fInfos tv <- New.treeViewNewWithModel store containerAdd win tv tvc <- New.treeViewColumnNew set tvc [ New.treeViewColumnTitle := "File name" , New.treeViewColumnResizable := True ] New.treeViewAppendColumn tv tvc name <- New.cellRendererTextNew New.treeViewColumnPackStart tvc name True New.cellLayoutSetAttributes tvc name store $ \FileInfo { fName = name } -> [ New.cellText := name ] tvc <- New.treeViewColumnNew set tvc [ New.treeViewColumnTitle := "Size" , New.treeViewColumnResizable := True ] New.treeViewAppendColumn tv tvc size <- New.cellRendererTextNew New.treeViewColumnPackStart tvc size True New.cellLayoutSetAttributes tvc size store $ \FileInfo { fSize = size } -> [ New.cellText := show size ] tvc <- New.treeViewColumnNew set tvc [ New.treeViewColumnTitle := "Modification time" , New.treeViewColumnResizable := True ] New.treeViewAppendColumn tv tvc time <- New.cellRendererTextNew New.treeViewColumnPackStart tvc time True New.cellLayoutSetAttributes tvc time store $ \FileInfo { fTime = time } -> [ New.cellText :=> return (formatTime defaultTimeLocale "%D %T" time) ] widgetShowAll win mainGUI