From 2489bfdbf3c497dadf03cdef2e168cc823c1ef25 Mon Sep 17 00:00:00 2001 From: hashirama Date: Sat, 13 Sep 2025 02:49:59 +0000 Subject: [PATCH] Add fileDialogDict.hs --- fileDialogDict.hs | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 fileDialogDict.hs diff --git a/fileDialogDict.hs b/fileDialogDict.hs new file mode 100644 index 0000000..766b658 --- /dev/null +++ b/fileDialogDict.hs @@ -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