packages feed

gt-tools-0.2.1: Gtg/gtg.hs

{-# LANGUAGE CPP #-}
module Main (
    main
) where

import Gt.Core
import Gt.Langs
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Glade
import Paths_gt_tools(getDataDir)
import Data.List (elemIndex)
import qualified Data.Text as T
import qualified System.Environment as E

comboIndex :: [String] -> String -> Int
comboIndex xs x = maybe (-1) (id) (x `elemIndex` xs)

main :: IO()
main = do
    args <- E.getArgs
    let fromL = if (length args) >= 1 then comboIndex langs (args !! 0) else -1
    let toL   = if (length args) >= 2 then comboIndex (tail langs) (args !! 1) else -1

    -- GUI initialization
    _ <- initGUI
    data_dir  <- getDataDir
    Just xml  <- xmlNew $ data_dir ++ "/Gtg/main.glade"

    -- Casts
    window          <- xmlGetWidget xml castToWindow    "gtg_main"
    lbl_translation <- xmlGetWidget xml castToLabel     "lbl_translation"
    ent_trans_text  <- xmlGetWidget xml castToEntry     "ent_trans_text"
    btn_translate   <- xmlGetWidget xml castToButton    "btn_translate"
    btn_close       <- xmlGetWidget xml castToButton    "btn_close"
    cmb_dest_lang   <- xmlGetWidget xml castToComboBox  "cmb_dest_lang"
    cmb_source_lang <- xmlGetWidget xml castToComboBox  "cmb_source_lang"

    _ <- comboBoxSetModelText cmb_dest_lang
    _ <- comboBoxSetModelText cmb_source_lang

    let text_langs_descrs = map T.pack langs_descrs

    mapM_ (comboBoxAppendText cmb_dest_lang  ) (tail text_langs_descrs)
    mapM_ (comboBoxAppendText cmb_source_lang) text_langs_descrs

    -- Set active lang from command line
    comboBoxSetActive cmb_source_lang fromL
    comboBoxSetActive cmb_dest_lang toL

    -- Actions
    _ <- onClicked       btn_close      (widgetDestroy window)
    _ <- onClicked       btn_translate  (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
    _ <- onEntryActivate ent_trans_text (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
    _ <- onDestroy       window         mainQuit

    -- Let's go
    widgetShowAll window
    mainGUI

get_dest_lang :: ComboBox -> IO String
get_dest_lang cmb = do
    index <- comboBoxGetActive cmb
    return $ tail langs !! index

get_src_lang :: ComboBox -> IO String
get_src_lang cmb = do
    index <- comboBoxGetActive cmb
    return (langs !! index)

trans_click :: (EntryClass o, LabelClass o1) => o -> o1 -> ComboBox -> ComboBox -> IO ()
trans_click ent lbl cmb_src cmb_dest = do
    text <- get ent entryText
    src <- get_src_lang cmb_src
    dst <- get_dest_lang cmb_dest
    translated_text <- do_trans src dst text
    set lbl [ labelText := translated_text ]