packages feed

manatee-ircclient-0.1.0: Manatee/Extension/IrcClient/Types.hs

-- Author:     Andy Stewart <lazycat.manatee@gmail.com>
-- Maintainer: Andy Stewart <lazycat.manatee@gmail.com>
-- 
-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved.
-- 
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- any later version.
-- 
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE TupleSections #-}
module Manatee.Extension.IrcClient.Types where

import Control.Concurrent.STM
import Data.Typeable
import GHC
import Graphics.UI.Gtk hiding (Statusbar, statusbarNew, get, Language)
import Language.Translate.Google
import Manatee.Core.Types
import Manatee.Toolkit.General.STM
import Unsafe.Coerce

import qualified Data.ByteString.Char8 as B

type Server     = String
type Channel    = String
type Port       = Int
type Nick       = String
type Password   = String

data IrcCustomize = 
  IrcCustomize {ircCustomizeSelfMsgColor        :: TVar Color
               ,ircCustomizeServerMsgColor      :: TVar Color
               ,ircCustomizeOtherMsgColor       :: TVar Color
               ,ircCustomizeJoinMsgColor        :: TVar Color
               ,ircCustomizeQuitMsgColor        :: TVar Color
               ,ircCustomizePartMsgColor        :: TVar Color
               ,ircCustomizeActionMsgColor      :: TVar Color
               ,ircCustomizeUrlColor            :: TVar Color
               ,ircCustomizeWrapColumn          :: TVar Int
               ,ircCustomizeServerColorTag      :: TextTag
               ,ircCustomizeSelfColorTag        :: TextTag
               ,ircCustomizeOtherColorTag       :: TextTag
               ,ircCustomizeJoinColorTag        :: TextTag
               ,ircCustomizeQuitColorTag        :: TextTag
               ,ircCustomizePartColorTag        :: TextTag
               ,ircCustomizeActionColorTag      :: TextTag
               ,ircCustomizeUrlColorTag         :: TextTag
               ,ircCustomizeTimeStampPosition   :: TVar TextWindowType
               ,ircCustomizeSourceLanguage      :: TVar Language
               ,ircCustomizeTargetLanguage      :: TVar Language
               ,ircCustomizeShowLineNumber      :: TVar Bool
               ,ircCustomizeDefaultNick         :: TVar String
               ,ircCustomizeDefaultServer       :: TVar String
               ,ircCustomizeDefaultPort         :: TVar Int
               ,ircCustomizeDefaultChannel      :: TVar String
               }
  deriving Typeable

instance Customize IrcCustomize where
  customizeConfigFile _ = "IrcClient.hs"
  customizeLoad a       = 
      [("selfMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeSelfMsgColor a) (ircCustomizeSelfColorTag a))
      ,("serverMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeServerMsgColor a) (ircCustomizeServerColorTag a))
      ,("otherMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeOtherMsgColor a) (ircCustomizeOtherColorTag a))
      ,("joinMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeJoinMsgColor a) (ircCustomizeJoinColorTag a))
      ,("quitMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeQuitMsgColor a) (ircCustomizeQuitColorTag a))
      ,("partMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizePartMsgColor a) (ircCustomizePartColorTag a))
      ,("actionMsgColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeActionMsgColor a) (ircCustomizeActionColorTag a))
      ,("urlColor"
        ,\ v -> ircUpdateColorTag v (ircCustomizeUrlColor a) (ircCustomizeUrlColorTag a))
      ,("wrapColumn"
        ,\ v -> writeTVarIO (ircCustomizeWrapColumn a) (unsafeCoerce v :: Int))
      ,("timeStampPosition"
        ,\ v -> writeTVarIO (ircCustomizeTimeStampPosition a) (unsafeCoerce v :: TextWindowType))
      ,("sourceLanguage"
        ,\ v -> writeTVarIO (ircCustomizeSourceLanguage a) (unsafeCoerce v :: Language))
      ,("targetLanguage"
        ,\ v -> writeTVarIO (ircCustomizeTargetLanguage a) (unsafeCoerce v :: Language))
      ,("showLineNumber"
        ,\ v -> writeTVarIO (ircCustomizeShowLineNumber a) (unsafeCoerce v :: Bool))
      ,("defaultNick"
        ,\ v -> writeTVarIO (ircCustomizeDefaultNick a) (unsafeCoerce v :: String))
      ,("defaultServer"
        ,\ v -> writeTVarIO (ircCustomizeDefaultServer a) (unsafeCoerce v :: String))
      ,("defaultPort"
        ,\ v -> writeTVarIO (ircCustomizeDefaultPort a) (unsafeCoerce v :: Int))
      ,("defaultChannel"
        ,\ v -> writeTVarIO (ircCustomizeDefaultChannel a) (unsafeCoerce v :: String))
      ]

-- | Update color tag.
ircUpdateColorTag :: HValue -> TVar Color -> TextTag -> IO ()
ircUpdateColorTag hvalue colorTVar colorTag = do
  let color = unsafeCoerce hvalue :: Color
  writeTVarIO colorTVar color
  set colorTag [textTagForegroundGdk := color]

-- | Temporary user name for test.
tempUser :: B.ByteString
tempUser = "Irc client for Manatee ( http://www.flickr.com/photos/48809572@N02/ )."

-- | Temporary real name for test.
tempRealname :: B.ByteString
tempRealname = "Manatee User"

-- | The prompt string.
promptStr :: String
promptStr = "> "

-- | The default time stamp : [00:00:00]
defaultTimeStamp :: String
defaultTimeStamp = 
    "          "