Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
-- simple use of the file selector dialog
--
import System (getArgs, ExitCode(ExitSuccess, ExitFailure), exitWith)
import Monad (when)
import Gtk (WindowType(..),
ObjectSignalHandler(..), objectSignalConnect,
Box, boxPackStartDefaults,
HBox, hBoxNew,
VBox, vBoxNew,
Button, buttonNewWithLabel,
ButtonSignalHandler(..), buttonSignalConnect,
buttonSignalConnectObject,
Container, containerBorderWidth, containerAdd,
EditableSignalHandler(..), editableSignalConnect,
Entry, entryGetText, entrySetVisibility,
entrySetEditable, entryNewWithMaxLength, entrySetText,
entryAppendText, entrySelectRegion,
FileSelection, fileSelectionNew,
fileSelectionGetFilename, fileSelectionShowFileopButtons,
fileSelectionQueryButtons, fileSelectionSetFilename,
Label, labelNew,
RadioButton, radioButtonNewWithLabel,
radioButtonNewWithLabelFromWidget,
Widget, widgetShow, widgetDestroy,
WidgetSignalHandler(..), widgetSignalConnect,
Window, windowNew, windowSetTitle,
windowSetDefaultSize)
import qualified Gtk (init, main, mainQuit)
enter :: Entry -> IO ()
enter ety = do
text <- entryGetText ety
putStr ("Selected file: " ++ text ++ "\n")
-- create a file selection dialog that gets its initial filename from the
-- given entry and writes the result back to the entry
--
newFileSel :: Entry -> IO ()
newFileSel ety = do
fsel <- fileSelectionNew "Choose your file..."
fname <- entryGetText ety
fileSelectionSetFilename fsel fname
fileSelectionShowFileopButtons fsel
(ok, cancel) <- fileSelectionQueryButtons fsel
let okHdl = ButtonClickedHandler
(const (storeFName ety fsel))
buttonSignalConnect ok okHdl
let cancelHdl = ButtonClickedHandler
(const (widgetDestroy fsel))
buttonSignalConnect cancel cancelHdl
widgetShow fsel
storeFName :: Entry -> FileSelection -> IO ()
storeFName ety fsel = do
fname <- fileSelectionGetFilename fsel
entrySetText ety fname
widgetDestroy fsel
main :: IO ()
main = do
(_, args) <- Gtk.init Nothing
when (length args /= 1)
(putStr "Filename argument needed!\n" >> exitWith (ExitFailure 1))
let initialFileName = head args
window <- windowNew WindowToplevel
windowSetTitle window "GTK+ File Selection Example"
windowSetDefaultSize window 300 180
let winDelHdl = WidgetDeleteEventHandler $ \_ _ -> do
Gtk.mainQuit
return False
widgetSignalConnect window winDelHdl
containerBorderWidth window 10
-- box for the whole thing
--
bigBox <- vBoxNew False 10
containerAdd window bigBox
widgetShow bigBox
-- box for the radio buttons
--
rbutBox <- vBoxNew False 0
containerAdd bigBox rbutBox
widgetShow rbutBox
-- the radio buttons
--
lbl <- labelNew "Choose your favourite passion:"
containerAdd rbutBox lbl
widgetShow lbl
rb1 <- radioButtonNewWithLabel "Functional programming rules!"
containerAdd rbutBox rb1
widgetShow rb1
rb2 <- radioButtonNewWithLabelFromWidget rb1 "Linux rules!"
containerAdd rbutBox rb2
widgetShow rb2
rb3 <- radioButtonNewWithLabelFromWidget rb2
"I am boring; I don't have a passion."
containerAdd rbutBox rb3
widgetShow rb3
-- hbox
--
hbox <- hBoxNew False 10
containerAdd bigBox hbox
widgetShow hbox
entry <- entryNewWithMaxLength 100
let actHdl = EditableActivateHandler enter
editableSignalConnect entry actHdl
entrySetText entry initialFileName
fullText <- entryGetText entry
entrySelectRegion entry 0 (length fullText)
boxPackStartDefaults hbox entry
widgetShow entry
-- button to activate file selection
--
fselBut <- buttonNewWithLabel " Browse "
boxPackStartDefaults hbox fselBut
let fselHdl = ButtonClickedHandler (const (newFileSel entry))
buttonSignalConnect fselBut fselHdl
widgetShow fselBut
buttonQuit <- buttonNewWithLabel " Quit "
let quitHandler wd = widgetDestroy wd >> Gtk.mainQuit
buttonSignalConnectObject
buttonQuit (ButtonClickedHandler quitHandler) window
boxPackStartDefaults bigBox buttonQuit
widgetShow buttonQuit
widgetShow window
Gtk.main
exitWith ExitSuccess