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