module VCSGui.Git.Commit (
showCommitGUI
) where
import Control.Monad.Trans(liftIO)
import Control.Monad.Reader(ask)
import Graphics.UI.Gtk
import VCSGui.Common.GtkHelper
import qualified VCSGui.Common.Commit as Commit
import qualified VCSWrapper.Git as Git
import qualified VCSWrapper.Common as Wrapper
import Data.Text (Text)
import qualified Data.Text as T (unpack, pack)
doCommit :: Text -> [FilePath] -> [Commit.Option] -> Wrapper.Ctx ()
doCommit commitMsg files _ = do
Git.add files
(Wrapper.Config _ _ mbAuthor _) <- ask
case mbAuthor of
Nothing -> Git.commit files Nothing commitMsg []
Just (Wrapper.Author author mbEmail) -> do
case mbEmail of
Nothing -> Git.commit files (Just (author, "noEmailSet@noEmailSet")) commitMsg []
Just m -> Git.commit files (Just (author, m)) commitMsg []
showCommitGUI :: Git.Ctx ()
showCommitGUI = do
Commit.showCommitGUI setupListStore doCommit
setupListStore :: TreeView -> Wrapper.Ctx (ListStore Commit.SCFile)
setupListStore view = do
repoStatus <- Git.status
let selectedF = [Commit.GITSCFile True fp (T.pack $ show mod) | (Wrapper.GITStatus fp mod) <- repoStatus, mod == Wrapper.Modified || mod == Wrapper.Added]
notSelectedF = [Commit.GITSCFile False fp (T.pack $ show mod) | (Wrapper.GITStatus fp mod) <- repoStatus, mod /= Wrapper.Modified && mod /= Wrapper.Added]
liftIO $ do
store <- listStoreNew (selectedF ++ notSelectedF)
treeViewSetModel view store
let item = (store, view)
toggleRenderer <- cellRendererToggleNew
addColumnToTreeView' item toggleRenderer "Commit" (\(Commit.GITSCFile s _ _)-> [cellToggleActive := s])
addTextColumnToTreeView' item "File" (\(Commit.GITSCFile _ p _) -> [cellText := T.pack p])
addTextColumnToTreeView' item "File status" (\(Commit.GITSCFile _ _ m) -> [cellText := m])
on toggleRenderer cellToggled $ \filepath -> do
putStrLn ("toggle called: " ++ T.unpack filepath)
Just treeIter <- treeModelGetIterFromString store filepath
value <- listStoreGetValue store $ listStoreIterToIndex treeIter
let newValue = (\(Commit.GITSCFile b fp m) -> Commit.GITSCFile (not b) fp m) value
listStoreSetValue store (listStoreIterToIndex treeIter) newValue
return ()
return store