%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} module TexEditor.Setup( setupMainWindow )where \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} import Graphics.UI.Gtk( AttrOp(..), on, widgetSetSensitive ) import Graphics.UI.Gtk.General.StockItems( stockOpen, stockCancel ) import Graphics.UI.Gtk.Glade( GladeXML, xmlGetWidget ) import Graphics.UI.Gtk.ModelView ( TreeView, treeStoreNew , treeViewColumnNew, treeViewColumnSetTitle, treeViewColumnPackStart , castToTreeView, treeViewSetModel, treeStoreInsert , treeViewSetHeadersVisible, treeViewAppendColumn , cellLayoutSetAttributes, cellRendererTextNew, cellRendererToggleNew , cellText, cellToggleActive , cursorChanged, changed ) import Graphics.UI.Gtk.Display.Image( castToImage ) import Graphics.UI.Gtk.Buttons.Button( castToButton, onClicked ) import Graphics.UI.Gtk.MenuComboToolbar.ComboBox ( castToComboBox, comboBoxAppendText, comboBoxSetModelText ) import Graphics.UI.Gtk.MenuComboToolbar.MenuItem ( castToMenuItem, onActivateLeaf ) import Graphics.UI.Gtk.Layout.Notebook( castToNotebook, afterSwitchPage ) import Graphics.UI.Gtk.Selectors.FileChooserDialog( castToFileChooserDialog ) import Graphics.UI.Gtk.Selectors.FileChooser( fileChooserAddFilter ) import Graphics.UI.Gtk.Selectors.FileFilter ( fileFilterNew, fileFilterAddPattern, fileFilterSetName ) import Graphics.UI.Gtk.Windows.Dialog( dialogAddButton, ResponseId(..) ) import Graphics.HDemo.TexGen ( TextureTree(..), ChannelTree(..), generateTexture ) import Control.Monad( forM ) import TexEditor.Data ( EdNodeType(..), TreeModelRow(..), EditorData(..) , EdChannelTree, defaultTextureTreeNode, edNodeTypeNames ) import TexEditor.Dialogs( dialogBuilders, EdDialog(..), UpdateAction ) import TexEditor.SignalActions ( drawEditorTexture, applyChanges, previewChanges, selectDialogTab , changeTextureType, selectComboPos, refreshTexType , menuNewFileAction, menuOpenFileAction, menuExitAction ) import TexEditor.Utils( putTexture ) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} setupTexTreeViewChannel :: TreeView -> IO EdChannelTree setupTexTreeViewChannel view = do store <- treeStoreNew [] treeViewSetModel view store treeViewSetHeadersVisible view True col1 <- treeViewColumnNew renderer1 <- cellRendererTextNew treeViewColumnSetTitle col1 "Type" treeViewColumnPackStart col1 renderer1 True cellLayoutSetAttributes col1 renderer1 store $ \r -> [ cellText := show $ tmType r ] treeViewAppendColumn view col1 col2 <- treeViewColumnNew renderer2 <- cellRendererToggleNew treeViewColumnSetTitle col2 "Enabled" treeViewColumnPackStart col2 renderer2 True cellLayoutSetAttributes col2 renderer2 store $ \r -> [ cellToggleActive := tmEnabled r ] treeViewAppendColumn view col2 treeStoreInsert store [] 0 $ defaultTextureTreeNode ENT_COLOR return store \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} setupTexTreeView :: GladeXML -> [UpdateAction] -> IO EditorData setupTexTreeView xml funs = do combo <- xmlGetWidget xml castToComboBox "texType" texTreeRed <- xmlGetWidget xml castToTreeView "texTreeRed" storeRed <- setupTexTreeViewChannel texTreeRed on texTreeRed cursorChanged $ refreshTexType combo texTreeRed storeRed funs texTreeGreen <- xmlGetWidget xml castToTreeView "texTreeGreen" storeGreen <- setupTexTreeViewChannel texTreeGreen on texTreeGreen cursorChanged $ refreshTexType combo texTreeGreen storeGreen funs texTreeBlue <- xmlGetWidget xml castToTreeView "texTreeBlue" storeBlue <- setupTexTreeViewChannel texTreeBlue on texTreeBlue cursorChanged $ refreshTexType combo texTreeBlue storeBlue funs return (ED storeRed storeGreen storeBlue) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} setupMainMenu :: GladeXML -> EditorData -> IO () setupMainMenu xml editorData = do combo <- xmlGetWidget xml castToComboBox "texType" texImage <- xmlGetWidget xml castToImage "texImage" menuNew <- xmlGetWidget xml castToMenuItem "mi_newFile" onActivateLeaf menuNew $ menuNewFileAction editorData combo texImage menuOpen <- xmlGetWidget xml castToMenuItem "mi_openFile" openFileDialog <- xmlGetWidget xml castToFileChooserDialog "openFileDialog" dialogAddButton openFileDialog stockOpen ResponseOk dialogAddButton openFileDialog stockCancel ResponseCancel allfilt <- fileFilterNew fileFilterAddPattern allfilt "*.*" fileFilterSetName allfilt "All files (*.*)" fileChooserAddFilter openFileDialog allfilt texfilt <- fileFilterNew fileFilterAddPattern texfilt "*.gta" fileFilterSetName texfilt "Generated Texture Ascii (*.gta)" fileChooserAddFilter openFileDialog texfilt onActivateLeaf menuOpen $ menuOpenFileAction openFileDialog menuExit <- xmlGetWidget xml castToMenuItem "mi_exit" onActivateLeaf menuExit menuExitAction return () \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} setupMainWindow :: GladeXML -> IO () setupMainWindow xml = do combo <- xmlGetWidget xml castToComboBox "texType" widgetSetSensitive combo False comboBoxSetModelText combo mapM_ (comboBoxAppendText combo) edNodeTypeNames dialogs <- forM dialogBuilders ($ xml) editorData <- setupTexTreeView xml (map edUpdate dialogs) texImage <- xmlGetWidget xml castToImage "texImage" drawEditorTexture texImage editorData button <- xmlGetWidget xml castToButton "b_refresh" onClicked button $ drawEditorTexture texImage editorData onClicked button $ widgetSetSensitive button False widgetSetSensitive button False dialogTabs <- xmlGetWidget xml castToNotebook "dialogs" channels <- xmlGetWidget xml castToNotebook "texChannels" let mainData = (combo, channels, editorData) on combo changed $ changeTextureType mainData button on combo changed $ selectDialogTab dialogTabs combo afterSwitchPage channels $ selectComboPos mainData (map edUpdate dialogs) buttonApply <- xmlGetWidget xml castToButton "b_apply" onClicked buttonApply $ applyChanges mainData (map edApply dialogs) onClicked buttonApply $ widgetSetSensitive button True texPreview <- xmlGetWidget xml castToImage "texPreview" putTexture texPreview $ generateTexture (TexTree 256 256 [] (COLOR 0) (COLOR 0) (COLOR 0)) buttonPreview <- xmlGetWidget xml castToButton "b_preview" onClicked buttonPreview $ previewChanges mainData texPreview (map edPreview dialogs) setupMainMenu xml editorData return () \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%