Add fileDialogDict.hs

This commit is contained in:
千住柱間 2025-09-13 02:49:59 +00:00
commit 2489bfdbf3

51
fileDialogDict.hs Normal file
View file

@ -0,0 +1,51 @@
-- Copyright © 2025 Hashirama Senju
{-# LANGUAGE ImplicitParams #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BlockArguments #-}
import Control.Concurrent
import GI.Gtk
import GI.Gio hiding (Application)
import qualified GI.Gtk as GTK
import Control.Monad (when, void, mzero, guard)
import Data.Foldable (for_)
import System.Directory (doesDirectoryExist, listDirectory)
import System.FilePath ((</>))
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
import Wazahs
selectFolder :: FileDialog -> ApplicationWindow -> (Maybe String -> IO ()) -> IO ()
selectFolder fd w k =
fileDialogSelectFolder fd (Just w) (Nothing :: Maybe Cancellable) $ Just $ \_ r -> do
mbPath <- runMaybeT $ do
f <- MaybeT $ handleDialogError (\_ _ -> pure Nothing) (fileDialogSelectFolderFinish fd r)
p <- MaybeT $ fileGetPath f
p <$ (liftIO (doesDirectoryExist p) >>= guard)
k mbPath
main :: IO ()
main = do
app <- new Application []
onApplicationActivate app $ do
w <- new GI.Gtk.ApplicationWindow [#application := app,#title := "Wazajisho"]
fd <- GTK.fileDialogNew
GTK.fileDialogSetTitle fd "Select folder..."
GTK.fileDialogSetModal fd True
GTK.fileDialogSetAcceptLabel fd (Just "Select")
selectFolder fd w $ maybe
(putStrLn "No valid directory selected")
(\dir -> do
files <- listFiles dir
putStrLn "Selected directory:"
mapM_ putStrLn files)
applicationRun app Nothing
threadDelay 30000000000