From: Duncan C. <dun...@wo...> - 2007-07-05 16:01:13
|
Thu Jul 5 08:58:24 PDT 2007 Duncan Coutts <du...@ha...> * Update DirList demo to work on Windows and include file modification times Thanks to Bulat Ziganshin for the patch. I also updated it to use multiple columns with titles and to avoid the use of unsafePerformIO by using the :=> monadic attribute assignment operator. hunk ./demo/treeList/DirList.hs 7 +import Control.Exception (handle) hunk ./demo/treeList/DirList.hs 9 -import System.Posix.Files +import System.IO +import System.Locale +import System.Time hunk ./demo/treeList/DirList.hs 15 - fSize :: Integer + fSize :: Integer, + fTime :: ClockTime hunk ./demo/treeList/DirList.hs 27 - status <- getFileStatus f - return FileInfo { fName = f, - fSize = fromIntegral (fileSize status) } + s <- handle (\_ -> 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 } hunk ./demo/treeList/DirList.hs 40 - win `containerAdd` tv + containerAdd win tv hunk ./demo/treeList/DirList.hs 43 + set tvc [ New.treeViewColumnTitle := "File name" + , New.treeViewColumnResizable := True ] hunk ./demo/treeList/DirList.hs 47 - text <- New.cellRendererTextNew - New.treeViewColumnPackStart tvc text True - New.cellLayoutSetAttributes tvc text store - (\FileInfo { fName = name } -> [New.cellText := name]) + 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 hunk ./demo/treeList/DirList.hs 59 - New.cellLayoutSetAttributes tvc size store - (\FileInfo { fSize = size } -> [New.cellText := show size]) + 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 :=> do + calTime <- toCalendarTime time + return (formatCalendarTime defaultTimeLocale "%D %T" calTime) + ] |