Add fileDialogDict.hs
This commit is contained in:
parent
264a28aea4
commit
2489bfdbf3
1 changed files with 51 additions and 0 deletions
51
fileDialogDict.hs
Normal file
51
fileDialogDict.hs
Normal 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
|
||||
Loading…
Reference in a new issue