1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
{-# 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
|