%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} module TexEditor.Data ( MainData, EdChannelName(..), EdTextureNode(..), EdNodeType(..) , TreeModelRow(..), EditorData(..), EdChannelTree , edNodeTypeNames, toEdNodeType, numChilds, defaultTextureTreeNode , getChannelTree ) where \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} import Graphics.UI.Gtk.ModelView( TreeStore ) import Graphics.UI.Gtk.MenuComboToolbar.ComboBox( ComboBox ) import Graphics.UI.Gtk.Layout.Notebook( Notebook ) import Graphics.HDemo.TexGen( ChannelTree(..), ChannelOp(..) ) import Data.List( isPrefixOf ) import Data.Word( Word16 ) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} type MainData = (ComboBox, Notebook, EditorData) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} data EdTextureNode = EN_BASIC !ChannelTree | EN_SINEDIST !Word16 !Word16 | EN_MIXF !ChannelOp !Double | EN_COMP !ChannelOp | EN_FILTER \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} data EdChannelName = ECN_RED | ECN_GREEN | ECN_BLUE deriving( Enum ) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} data EdNodeType = ENT_COLOR | ENT_RANDCOL | ENT_SINEPLASMA | ENT_FRACPLASMA | ENT_DISTANCE | ENT_CATROM | ENT_SINEDIST | ENT_MIXF | ENT_COMP | ENT_FILTER deriving( Eq, Enum ) \end{code} \begin{code} instance Show EdNodeType where show ENT_COLOR = "Color" show ENT_RANDCOL = "Random" show ENT_SINEPLASMA = "SinePlasma" show ENT_FRACPLASMA = "FractalPlasma" show ENT_DISTANCE = "Distance" show ENT_CATROM = "CatmullRom" show ENT_SINEDIST = "SineDistort" show ENT_MIXF = "Mix" show ENT_COMP = "Comp" show ENT_FILTER = "Filter" \end{code} \begin{code} instance Read EdNodeType where readsPrec _ s = [(snd.head $ filter fst final, "")] where checks = zipWith ($) (repeat isPrefixOf) edNodeTypeNames boolList = map ($s) checks final = zip boolList [ENT_COLOR ..] \end{code} \begin{code} edNodeTypeNames :: [String] edNodeTypeNames = map show [ENT_COLOR ..] \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} toEdNodeType :: ChannelTree -> EdNodeType toEdNodeType (COLOR _) = ENT_COLOR toEdNodeType (RANDCOL _) = ENT_RANDCOL toEdNodeType (SINEPLASMA _ _) = ENT_SINEPLASMA toEdNodeType (FRACPLASMA _ _) = ENT_FRACPLASMA toEdNodeType (DISTANCE _ _ _) = ENT_DISTANCE toEdNodeType (CATROM _ _) = ENT_CATROM toEdNodeType (SINEDIST _ _ _) = ENT_SINEDIST toEdNodeType (MIXF _ _ _ _) = ENT_MIXF toEdNodeType (COMP _ _ _) = ENT_COMP toEdNodeType (FILTER _) = ENT_FILTER \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} numChilds :: Num a => EdNodeType -> a numChilds ENT_MIXF = 2 numChilds ENT_COMP = 2 numChilds ENT_SINEDIST = 1 numChilds ENT_FILTER = 1 numChilds _ = 0 \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} data TreeModelRow = TMRow { tmType :: EdNodeType , tmEnabled :: Bool , tmNode :: EdTextureNode } \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} type EdChannelTree = TreeStore TreeModelRow \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} data EditorData = ED { edRedStore :: EdChannelTree , edGreenStore :: EdChannelTree , edBlueStore :: EdChannelTree } \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} defaultTextureTreeNode :: EdNodeType -> TreeModelRow defaultTextureTreeNode ENT_COLOR = TMRow ENT_COLOR True (EN_BASIC (COLOR 0)) defaultTextureTreeNode ENT_RANDCOL = TMRow ENT_RANDCOL True (EN_BASIC (RANDCOL 0)) defaultTextureTreeNode ENT_SINEPLASMA = TMRow ENT_SINEPLASMA True (EN_BASIC (SINEPLASMA 4 4)) defaultTextureTreeNode ENT_FRACPLASMA = TMRow ENT_FRACPLASMA True (EN_BASIC (FRACPLASMA 0 4)) defaultTextureTreeNode ENT_DISTANCE = TMRow ENT_DISTANCE True (EN_BASIC (DISTANCE 128 128 128)) defaultTextureTreeNode ENT_CATROM = TMRow ENT_CATROM True (EN_BASIC (CATROM 0 64)) defaultTextureTreeNode ENT_SINEDIST = TMRow ENT_SINEDIST True (EN_SINEDIST 2 2) defaultTextureTreeNode ENT_MIXF = TMRow ENT_MIXF True (EN_MIXF ADDL 0.5) defaultTextureTreeNode ENT_COMP = TMRow ENT_COMP True (EN_COMP MULL) defaultTextureTreeNode ENT_FILTER = TMRow ENT_FILTER True (EN_FILTER) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} getChannelTree :: EdChannelName -> EditorData -> EdChannelTree getChannelTree ECN_RED ed = edRedStore ed getChannelTree ECN_GREEN ed = edGreenStore ed getChannelTree ECN_BLUE ed = edBlueStore ed \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%