Gifcurry-3.0.0.0: src/gui/GuiMisc.hs
{-
Gifcurry
(C) 2018 David Lettier
lettier.com
-}
{-# LANGUAGE OverloadedStrings #-}
module GuiMisc where
import System.Directory
import Text.Read
import Data.Int
import Data.Maybe
import Data.Text
import qualified GI.Gtk
enumToInt32 :: (Enum a, Ord a) => a -> Int32
enumToInt32 enum = fromIntegral (fromEnum enum) :: Int32
floatToInt32 :: Float -> Int32
floatToInt32 f = enumToInt32 (round f :: Int)
int32ToDouble :: Int32 -> Double
int32ToDouble = fromIntegral
int32ToFloat :: Int32 -> Float
int32ToFloat = fromIntegral
entryGetMaybeFloat :: GI.Gtk.Entry -> IO (Maybe Float)
entryGetMaybeFloat entry = do
text <- Data.Text.strip <$> GI.Gtk.entryGetText entry
let containsPeriod = isJust $ Data.Text.find (== '.') text
let string = Data.Text.unpack text
let maybeFloat = readMaybe (string ++ if containsPeriod then "0" else "") :: Maybe Float
return maybeFloat
entryGetFloat :: GI.Gtk.Entry -> Float -> IO Float
entryGetFloat entry nothing = do
maybeFloat <- entryGetMaybeFloat entry
return $ fromMaybe nothing maybeFloat
entryGetMaybeInt :: GI.Gtk.Entry -> IO (Maybe Int)
entryGetMaybeInt entry = do
text <- Data.Text.strip <$> GI.Gtk.entryGetText entry
let string = Data.Text.unpack text
let maybeInt = readMaybe string :: Maybe Int
return maybeInt
fileChooserButtonGetString :: GI.Gtk.FileChooserButton -> IO String
fileChooserButtonGetString =
fmap
(Data.Text.unpack . Data.Text.strip . Data.Text.pack . fromMaybe "")
. GI.Gtk.fileChooserGetFilename
fileChooserButtonGetFilePath :: GI.Gtk.FileChooserButton -> IO String
fileChooserButtonGetFilePath fileChooserButton = do
result <- fileChooserButtonGetString fileChooserButton
fileExist <- doesFileExist result
return $
if fileExist
then result
else ""
safeDivide :: (Fractional a, Eq a) => a -> a -> Maybe a
safeDivide n d = if d == 0.0 then Nothing else Just $ n / d