-- ----------------------------------------------------------------------- -- -- $Source: /repository/uni/htk/resources/Cursor.hs,v $ -- -- HTk - a GUI toolkit for Haskell - (c) Universitaet Bremen -- -- $Revision: 1.3 $ from $Date: 2001/12/10 21:29:34 $ -- Last modification by $Author: ludi $ -- -- ----------------------------------------------------------------------- --- -- Basic types and classes associated with the mouse cursor. module Cursor ( GUIVALUE(..), GUIValue(..), Colour, CursorDesignator(..), Cursor(..), XCursor(..), BCursor(..), arrow, circle, clock, diamondCross, dot, drapedBox, exchange, fleur, gobbler, gumby, hand1, hand2, pencil, plus, spraycan, tcross, watch, xterm ) where import GUIValue import Colour import Char import Debug(debug) -- ----------------------------------------------------------------------- -- Cursor Type -- ----------------------------------------------------------------------- --- -- The general Cursor datatype. newtype Cursor = Cursor String --- -- The XCursor dataype for predefined X cursors. data XCursor = XCursor String (Maybe Colour) (Maybe Colour) --- -- The BCursor datatype for bitmap cursors. data BCursor = BCursor String (Maybe String) Colour (Maybe Colour) -- ----------------------------------------------------------------------- -- Cursor Handle -- ----------------------------------------------------------------------- --- -- Datatypes that describe cursors instantiate the -- class CursorDesignator. class CursorDesignator ch where --- -- Internal. toCursor :: ch -> Cursor --- -- A Cursor object itself describes a cursor. instance CursorDesignator Cursor where --- -- Internal. toCursor = id --- -- An XCursor object describes a cursor (see type). instance CursorDesignator XCursor where --- -- Internal. toCursor = Cursor . show --- -- A BCursor object describes a cursor (see type). instance CursorDesignator BCursor where --- -- Internal. toCursor = Cursor . show --- -- A String describes a standard X cursor. instance CursorDesignator String where --- -- Internal. toCursor nm = toCursor (XCursor nm Nothing Nothing) --- -- A tuple of (String,Colour) describes a coloured standard -- X cursor. instance CursorDesignator (String,Colour) where --- -- Internal. toCursor (nm,fg) = toCursor (XCursor nm (Just fg) Nothing) --- -- A tuple of (String,Colour,Colour) describes a standard -- X cursor with foreground and background colour. instance CursorDesignator (String,Colour,Colour) where --- -- Internal. toCursor (nm,fg,bg) = toCursor (XCursor nm (Just fg) (Just bg)) --- -- A tuple of (String,String,Colour,Colour) describes a -- bitmap cursor with its X bitmap filename, mask filename, foreground -- and background colour. instance CursorDesignator ([Char],[Char],Colour,Colour) where --- -- Internal. toCursor (bfile,mfile,fg,bg) = toCursor (BCursor bfile (Just mfile) fg (Just bg)) -- ----------------------------------------------------------------------- -- Standard X Cursors -- ----------------------------------------------------------------------- --- -- A standard X cursor. arrow :: Cursor arrow = Cursor "arrow" --- -- A standard X cursor. circle :: Cursor circle = Cursor "circle" --- -- A standard X cursor. clock :: Cursor clock = Cursor "clock" --- -- A standard X cursor. diamondCross :: Cursor diamondCross = Cursor "diamondcross" --- -- A standard X cursor. dot :: Cursor dot = Cursor "dot" --- -- A standard X cursor. drapedBox :: Cursor drapedBox = Cursor "drapedbox" --- -- A standard X cursor. exchange :: Cursor exchange = Cursor "exchange" --- -- A standard X cursor. fleur :: Cursor fleur = Cursor "fleur" --- -- A standard X cursor. gobbler :: Cursor gobbler = Cursor "gobbler" --- -- A standard X cursor. gumby :: Cursor gumby = Cursor "gumby" --- -- A standard X cursor. hand1 :: Cursor hand1 = Cursor "hand1" --- -- A standard X cursor. hand2 :: Cursor hand2 = Cursor "hand2" --- -- A standard X cursor. pencil :: Cursor pencil = Cursor "pencil" --- -- A standard X cursor. plus :: Cursor plus = Cursor "plus" --- -- A standard X cursor. spraycan :: Cursor spraycan = Cursor "spraycan" --- -- A standard X cursor. tcross :: Cursor tcross = Cursor "tcross" --- -- A standard X cursor. watch :: Cursor watch = Cursor "watch" --- -- A standard X cursor. xterm :: Cursor xterm = Cursor "xterm" -- ----------------------------------------------------------------------- -- Parsing/Unparsing -- ----------------------------------------------------------------------- --- -- Internal. instance GUIValue Cursor where --- -- Internal. cdefault = Cursor "xterm" --- -- Internal. instance Read Cursor where --- -- Internal. readsPrec p b = case dropWhile (isSpace) b of ('{':xs) -> [(Cursor ("{" ++ (takeWhile (/= '}') xs) ++ "}"),"")] xs -> [(Cursor (takeWhile (/= ' ') xs),"")] --- -- Internal. instance Show Cursor where --- -- Internal. showsPrec d (Cursor p) r = p ++ r -- ----------------------------------------------------------------------- -- XCursor -- ----------------------------------------------------------------------- --- -- Internal. instance Show XCursor where --- -- Internal. showsPrec d c r = cshow c ++ r where cshow (XCursor s Nothing Nothing) = s cshow (XCursor s (Just fg) Nothing) = "{" ++ s ++ " " ++ show fg ++ "}" cshow (XCursor s (Just fg) (Just bg)) = "{" ++ s ++ " " ++ show fg ++ " " ++ show bg ++ "}" -- ----------------------------------------------------------------------- -- BCursor -- ----------------------------------------------------------------------- --- -- Internal. instance Show BCursor where --- -- Internal. showsPrec d c r = cshow c ++ r where cshow (BCursor fname Nothing fg Nothing) = "{@" ++ fname ++ " " ++ show fg ++ "}" cshow (BCursor fname (Just bname) fg (Just bg)) = "{" ++ fname ++ " " ++ bname ++ " " ++ show fg ++ " " ++ show bg ++ "}"