phoityne 0.0.1.1 → 0.0.2.0
raw patch · 14 files changed
+979/−587 lines, 14 files
Files
- Changelog.md +13/−7
- README.md +53/−28
- app/Phoityne/Constant.hs +2/−0
- app/Phoityne/IO/CUI/GHCiControl.hs +6/−3
- app/Phoityne/IO/Control.hs +6/−3
- app/Phoityne/IO/GUI/Control.hs +283/−150
- app/Phoityne/IO/GUI/GTK/BreakPointTable.hs +6/−1
- app/Phoityne/IO/GUI/GTK/ConsoleView.hs +5/−0
- app/Phoityne/IO/GUI/GTK/Constant.hs +14/−0
- app/Phoityne/IO/GUI/GTK/Interface.hs +233/−58
- app/Phoityne/IO/GUI/GTK/TextEditor.hs +13/−14
- app/Phoityne/IO/Main.hs +1/−0
- conf/Phoityne.glade +343/−322
- phoityne.cabal +1/−1
Changelog.md view
@@ -1,8 +1,14 @@-20151223 phoityne-0.0.1.1 - -* [Add] README.md, Changelog.md - -20151220 phoityne-0.0.1.0 - -* [Info] Initial release.+20160101 phoityne-0.0.2.0++ * [Add] 参照先情報を取得する機能を追加した(:info)+ * [Add] ファイル保存時にghci上でファイルをロードする機能を追加した+ * [Add] print source file path on statusbar.++20151223 phoityne-0.0.1.1++ * [Add] README.md, Changelog.md++20151220 phoityne-0.0.1.0++ * [Info] Initial release.
README.md view
@@ -4,15 +4,15 @@ (on Windows) ## Install- - -### Setup GTK3 -Download the all in package of gtk from [here](http://win32builder.gnome.org/ "GTK3"). -Extract it and set path to bin and lib folder, set install directory to prefix of lib/pkgconfig/*.pc files. - - -### Start stack project ++### Setup GTK3+Download the all in package of gtk from [here](http://win32builder.gnome.org/ "GTK3").+Extract it and set path to bin and lib folder, set install directory to prefix of lib/pkgconfig/*.pc files.+++### Start stack project+ % stack new project . . . . . %@@ -25,26 +25,26 @@ ## Keyboard shortcuts - -### Build, Debug -* F5 : start debug / jump to next break point -* Shift+F5 : end debug -* F7 : build -* Shift+F7 : rebuild (stack clean; stack build) -* F9 : put on/off break point -* F10 : step over -* F11 : step in - -### File, Search -* Ctrl+S : save all -* Ctrl+F : search -* F3 : jump to next search result -* Ctrl+R : replace - -### Folder Tree -* Left : collapse folder -* Right : expand folder -* Up : go up ++### Build, Debug+* F5 : start debug / jump to next break point+* Shift+F5 : end debug+* F7 : build+* Shift+F7 : rebuild (stack clean; stack build)+* F9 : put on/off break point+* F10 : step over+* F11 : step in++### File, Search+* Ctrl+S : save all+* Ctrl+F : search+* F3 : jump to next search result+* Ctrl+R : replace++### Folder Tree+* Left : collapse folder+* Right : expand folder+* Up : go up * Down : go down @@ -55,4 +55,29 @@ ### Demo Video2 [](https://www.youtube.com/watch?v=T10wWCmWHaA)+++## Document++++++++++++++++++++++
app/Phoityne/Constant.hs view
@@ -19,6 +19,8 @@ _INI_SEC_PHOITYNE_TARGET_DIR :: String _INI_SEC_PHOITYNE_TARGET_DIR = "target" +_INI_SEC_PHOITYNE_GHCI_AUTO_START :: String+_INI_SEC_PHOITYNE_GHCI_AUTO_START = "ghci_auto_start" _LOG_NAME :: String _LOG_NAME = "phoityne"
app/Phoityne/IO/CUI/GHCiControl.hs view
@@ -18,7 +18,7 @@ import System.IO import System.Exit import System.Log.Logger -+import qualified Data.List as L -- | -- @@ -62,6 +62,7 @@ hSetEncoding outReadHandle osEnc hSetEncoding outWriteHandle utf8 + debugM _LOG_NAME $ cmd ++ (L.intercalate " " opts) ghciProc <- runProcess cmd opts curDir Nothing (Just stdInReadHandle) (Just outWriteHandle) (Just outWriteHandle) return $ ExternalCommandData (Just stdInWriteHandle) (Just outReadHandle) (Just outReadHandle) (Just ghciProc) @@ -82,8 +83,10 @@ -- -- writeLine :: ExternalCommandData -> String -> IO () -writeLine (ExternalCommandData (Just ghciIn) _ _ _) cmd = hPutStrLn ghciIn cmd -writeLine _ _ = criticalM _LOG_NAME "writeLine" +writeLine (ExternalCommandData (Just ghciIn) _ _ _) cmd = hIsOpen ghciIn >>= \case+ False -> criticalM _LOG_NAME "[writeLine] handle not open."+ True -> debugM _LOG_NAME ("[writeLine]" ++ cmd) >> hPutStrLn ghciIn cmd +writeLine _ _ = criticalM _LOG_NAME "[writeLine] handle is nothing." -- |
app/Phoityne/IO/Control.hs view
@@ -34,7 +34,9 @@ -> IO Int -- exit code run _ ini = do - let cwdSet = forceEither $ C.get ini _INI_SEC_PHOITYNE _INI_SEC_PHOITYNE_TARGET_DIR+ let cwdSet = forceEither $ C.get ini _INI_SEC_PHOITYNE _INI_SEC_PHOITYNE_TARGET_DIR+ autoRun = forceEither $ C.get ini _INI_SEC_PHOITYNE _INI_SEC_PHOITYNE_GHCI_AUTO_START+ cwd <- if "." == cwdSet then getCurrentDirectory else return cwdSet infoM _LOG_NAME $ "CWD:" ++ cwd @@ -46,7 +48,7 @@ let cmdData = createCmdData mvarCUI cwd - GUI.createMainWindow cmdData [cwd] + GUI.createMainWindow cmdData [cwd] autoRun return 1 @@ -75,7 +77,8 @@ , GUI.buildStartDebugCommandData = buildStart mvarCUI cwd , GUI.cleanStartDebugCommandData = cleanStart mvarCUI cwd , GUI.loadFileDebugCommandData = \f-> execCmd mvarCUI $ ":l " ++ f - , GUI.readWhileDebugCommandData = readWhile mvarCUI + , GUI.readWhileDebugCommandData = readWhile mvarCUI+ , GUI.infoDebugCommandData = \arg -> execCmd mvarCUI $ ":info " ++ arg }
app/Phoityne/IO/GUI/Control.hs view
@@ -81,7 +81,8 @@ , unDoReDoFlagMVarGUIData :: Bool , buildMsgMVarGUIData :: [String] , searchFilesMVarGUIData :: [FilePath]- , startupNodeDataMVarGUIData :: Maybe IF.NodeData + , startupNodeDataMVarGUIData :: Maybe IF.NodeData+ , ghciAutoStart :: Bool } -- | @@ -111,7 +112,8 @@ , buildStartDebugCommandData :: IO () , cleanStartDebugCommandData :: IO () , loadFileDebugCommandData :: FilePath -> IO String- , readWhileDebugCommandData :: (String -> Bool) -> IO String + , readWhileDebugCommandData :: (String -> Bool) -> IO String+ , infoDebugCommandData :: String -> IO String } -- | @@ -140,9 +142,10 @@ -> IF.FolderTreeStore -> IF.BindingListStore -> IF.TraceDataListStore - -> IF.SearchResultListStore + -> IF.SearchResultListStore+ -> Bool -> MVarGUIData -defaultMVarGUIData widgets breaks folder bindings trace search = +defaultMVarGUIData widgets breaks folder bindings trace search autoRun = MVarGUIData { widgetStoreMVarGUIData = widgets , breakPointListMVarGUIData = breaks @@ -158,13 +161,14 @@ , buildMsgMVarGUIData = [] , searchFilesMVarGUIData = [] , startupNodeDataMVarGUIData = Nothing+ , ghciAutoStart = autoRun } -- | -- ---createMainWindow :: DebugCommandData -> [FilePath] -> IO () -createMainWindow cmdData paths = do+createMainWindow :: DebugCommandData -> [FilePath] -> Bool -> IO () +createMainWindow cmdData paths autoRun = do -- Storeの作成 builder <- IF.getBuilder @@ -175,7 +179,7 @@ treeStore <- loadFolderForest _PROJECT_ROOT_MODULE_NAME paths >>= IF.createTreeStore -- GUI共有データの作成 - mvarGUI <- newMVar $ defaultMVarGUIData builder breakStore treeStore bindingStore traceStore searchResultStore + mvarGUI <- newMVar $ defaultMVarGUIData builder breakStore treeStore bindingStore traceStore searchResultStore autoRun -- イベントハンドラの登録 IF.setupMainWindow builder@@ -189,12 +193,13 @@ (toolBTstepInHandler mvarGUI cmdData) (toolBTcontinueHandler mvarGUI cmdData) (toolBTbuildHandler mvarGUI cmdData) - (toolBTdeleteHandler mvarGUI cmdData) (toolBTsaveHandler mvarGUI cmdData) (toolBTindentHandler mvarGUI) (toolBTunIndentHandler mvarGUI) (toolBTcommentHandler mvarGUI) (toolBTunCommentHandler mvarGUI) + (toolBTstartGHCiHandler mvarGUI cmdData) + (toolBTstopGHCiHandler mvarGUI cmdData) IF.setupFolderTree builder treeStore (folderTreeDoubleClickedHandler mvarGUI cmdData) @@ -213,6 +218,7 @@ IF.setupBreakPointTable builder breakStore (breakPointTableDoubleClickedHandler mvarGUI cmdData) + (toolBTdeleteHandler mvarGUI cmdData) IF.setupBindingTable builder bindingStore (bindingTableDoubleClickedHandler mvarGUI cmdData) @@ -222,10 +228,15 @@ IF.setupSearchResultTable builder searchResultStore (searchResultTableDoubleClickedHandler mvarGUI cmdData) ++ autoRunGHCi mvarGUI cmdData >>= \case+ True -> return ()+ False -> errorM _LOG_NAME "run ghci failed." -- 開始- IF.start builder + IF.start builder + -- |===================================================================== -- MainWindowのイベントハンドラ@@ -259,11 +270,9 @@ mainWindowKeyPressEventHandler mvarGUI cmdDat "F7" True _ = do guiData <- readMVar mvarGUI let builder = widgetStoreMVarGUIData guiData - isStart <- IF.isBuildStart builder - - when (False == isStart) $ do- runClean - toolBTbuildHandler mvarGUI cmdDat + IF.isBuildStart builder >>= \case+ True -> IF.putStrStatusBar builder "build unavailable. Currently building or ghci running."+ False -> runClean >> toolBTbuildHandler mvarGUI cmdDat return True @@ -298,12 +307,13 @@ mainWindowKeyPressEventHandler mvarGUI cmdDat "F7" _ _ = do guiData <- readMVar mvarGUI let builder = widgetStoreMVarGUIData guiData - isStart <- IF.isBuildStart builder - - when (False == isStart) $ do- IF.clearConsole builder- toolBTbuildHandler mvarGUI cmdDat + IF.isBuildStart builder >>= \case+ True -> IF.putStrStatusBar builder "build unavailable. Currently building or ghci running."+ False -> do + IF.clearConsole builder+ toolBTbuildHandler mvarGUI cmdDat + return True mainWindowKeyPressEventHandler mvarGUI cmdDat "F10" _ _ = do @@ -330,7 +340,7 @@ mainWindowKeyPressEventHandler mvarGUI cmdDat "s" _ True = do- saveAll mvarGUI cmdDat -- Ctr+s + saveAll mvarGUI cmdDat >>= loadHsFiles mvarGUI cmdDat return True mainWindowKeyPressEventHandler mvarGUI cmdDat "f" _ True = findCurrentTextEditor mvarGUI >>= \case@@ -398,71 +408,148 @@ -- toolBTdebugStartHandler :: MVar MVarGUIData -> DebugCommandData -> IF.DebugStartBTClickedEventHandler toolBTdebugStartHandler mvarGUI cmdData = do- runGHCi >>= \case- False -> do- warningM _LOG_NAME "run ghci fail."- True -> loadHsFile >>= \case+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData++ IF.isGHCiStarted builder >>= \case+ False -> errorM _LOG_NAME "ghci has not yet started."+ True -> loadHsFileInternal >>= \case+ True -> startDebug False -> do- warningM _LOG_NAME "run ghci fail."- True -> setupDebug >> startDebug + let msg = "load startup module fail. check startup module set."+ warningM _LOG_NAME msg+ IF.putStrStatusBar builder msg where- runGHCi = do- guiData <- readMVar mvarGUI - - let builder = widgetStoreMVarGUIData guiData - startCmd = startDebugCommandData cmdData - readLines = readLinesDebugCommandData cmdData - readWhile = readWhileDebugCommandData cmdData -- IF.clearConsole builder - IF.putStrConsole builder $ "start stack ghci.\n" - - startCmd - - cont <- readLines (debugStartResultHandler builder) - if | null cont -> return False- | startswith "Ok," (last cont) -> do- res <- readWhile $ not . endswith "> "- IF.putStrConsole builder res- return True- | otherwise -> return False- -- loadHsFile = do+ loadHsFileInternal = do guiData <- readMVar mvarGUI loadHsFileMay $ startupNodeDataMVarGUIData guiData - loadHsFileMay Nothing = return True- loadHsFileMay (Just nodeDat) = do+ loadHsFileMay Nothing = return False+ loadHsFileMay (Just nodeDat) = loadHsFile mvarGUI cmdData $ IF.getPathFromNodeData nodeDat+ + startDebug = do guiData <- readMVar mvarGUI let builder = widgetStoreMVarGUIData guiData- loadFile = loadFileDebugCommandData cmdData - readLines = readLinesDebugCommandData cmdData - readWhile = readWhileDebugCommandData cmdData + breakStore = breakPointListMVarGUIData guiData + getResult = readDebugCommandData cmdData + runDebug = runDebugCommandData cmdData ++ IF.changeTBsOnDebugStarted builder - cmdStr <- loadFile $ IF.getPathFromNodeData nodeDat + breakList <- IF.getBreakPointList breakStore + + mapM_ (addBreakPointOnCUI mvarGUI cmdData) breakList + + cmdStr <- runDebug True IF.putStrLnConsole builder cmdStr - cont <- readLines (debugStartResultHandler builder) + cmdStr <- getResult + IF.putStrConsole builder cmdStr + let breakPos = getStoppedTextRangeData cmdStr + + continueWithHighlightTextRangeData mvarGUI cmdData breakPos - if | null cont -> return False- | startswith "Ok," (last cont) -> do- res <- readWhile $ not . endswith "> "- IF.putStrConsole builder res- return True- | otherwise -> return False++-- | +-- +--+loadHsFiles :: MVar MVarGUIData -> DebugCommandData -> [FilePath] -> IO ()+loadHsFiles mvarGUI cmdData paths = do+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData++ debugStarted <- IF.isDebugStart builder+ when debugStarted $ do+ IF.putStrStatusBar builder "stop debug and load files."+ toolBTdebugStopHandler mvarGUI cmdData++ autoRunGHCi mvarGUI cmdData >>= \case+ False -> errorM _LOG_NAME "run ghci failed."+ True -> mapM_ (loadHsFile mvarGUI cmdData) paths+ +-- | +-- +--+loadHsFile :: MVar MVarGUIData -> DebugCommandData -> FilePath -> IO Bool+loadHsFile mvarGUI cmdData path+ | (False == endswith _HS_FILE_EXT path) = return False+ | otherwise = do+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData+ loadFile = loadFileDebugCommandData cmdData + readLines = readLinesDebugCommandData cmdData + getResult = readDebugCommandData cmdData+ + cmdStr <- loadFile path + IF.putStrLnConsole builder cmdStr + + cont <- readLines (debugStartResultHandler builder) + + if | null cont -> return False+ | startswith "Ok," (last cont) -> do+ cmdStr <- getResult + IF.putStrConsole builder cmdStr+ return True+ | otherwise -> do+ cmdStr <- getResult + IF.putStrConsole builder cmdStr+ return False+ +-- | +-- +--+autoRunGHCi :: MVar MVarGUIData -> DebugCommandData -> IO Bool+autoRunGHCi mvarGUI cmdData = do+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData+ autoRun = ghciAutoStart guiData + + isGHCiStarted <- IF.isGHCiStarted builder++ withFlag autoRun isGHCiStarted ++ where+ withFlag _ True = return True+ withFlag False False = return False+ withFlag True False = runGHCi mvarGUI cmdData+ +-- | +-- +--+runGHCi :: MVar MVarGUIData -> DebugCommandData -> IO Bool+runGHCi mvarGUI cmdData = do+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData + startCmd = startDebugCommandData cmdData + readLines = readLinesDebugCommandData cmdData ++ IF.changeTBsOnGHCiStartting builder++ IF.clearConsole builder + IF.putStrConsole builder $ "start stack ghci.\n" - setupDebug = do + startCmd + cont <- readLines (debugStartResultHandler builder) + if | null cont -> IF.changeTBsOnGHCiStopped builder >> return False+ | startswith "Ok," (last cont) -> readAndSetPrompt >> IF.changeTBsOnGHCiStarted builder >> return True+ | startswith "Failed," (last cont) -> readAndSetPrompt >> IF.changeTBsOnGHCiStarted builder >>return True+ | otherwise -> IF.changeTBsOnGHCiStopped builder >> return False++ where+ readAndSetPrompt = do guiData <- readMVar mvarGUI - - let builder = widgetStoreMVarGUIData guiData - breakStore = breakPointListMVarGUIData guiData - setPrompt = promptDebugCommandData cmdData - getResult = readDebugCommandData cmdData - printEvld = printEvldDebugCommandData cmdData + + let builder = widgetStoreMVarGUIData guiData + readWhile = readWhileDebugCommandData cmdData+ setPrompt = promptDebugCommandData cmdData+ getResult = readDebugCommandData cmdData + printEvld = printEvldDebugCommandData cmdData + res <- readWhile $ not . endswith "> "+ IF.putStrConsole builder res+ promptStr <- setPrompt IF.putStrLnConsole builder promptStr @@ -473,79 +560,32 @@ IF.putStrLnConsole builder cmdStr cmdStr <- getResult - IF.putStrConsole builder cmdStr - - IF.setupDebugButtonOn builder - - breakList <- IF.getBreakPointList breakStore - - mapM_ (addBreakPointOnCUI mvarGUI cmdData) breakList + IF.putStrConsole builder cmdStr - - startDebug = do - - guiData <- readMVar mvarGUI - - let builder = widgetStoreMVarGUIData guiData - getResult = readDebugCommandData cmdData - runDebug = runDebugCommandData cmdData - - cmdStr <- runDebug True - IF.putStrLnConsole builder cmdStr - - cmdStr <- getResult - IF.putStrConsole builder cmdStr - let breakPos = getStoppedTextRangeData cmdStr - - continueWithHighlightTextRangeData mvarGUI cmdData breakPos+-- | +-- +-- +debugStartResultHandler :: IF.WidgetStore -> [String] -> IO Bool +debugStartResultHandler builder acc = IF.putStrLnConsole builder curStr >> if + | L.isPrefixOf "Ok," curStr -> return False + | L.isPrefixOf "Failed," curStr -> return False + | otherwise -> return True+ where+ curStr | null acc = ""+ | otherwise = last acc - -- | - -- - -- - debugStartResultHandler :: IF.WidgetStore -> [String] -> IO Bool - debugStartResultHandler builder acc = IF.putStrLnConsole builder curStr >> if - | L.isPrefixOf "Ok," curStr -> return False - | L.isPrefixOf "Failed," curStr -> return False - | otherwise -> return True- where- curStr | null acc = ""- | otherwise = last acc- -- | -- Event Handler -- toolBTdebugStopHandler :: MVar MVarGUIData -> DebugCommandData -> IF.DebugStopBTClickedEventHandler -toolBTdebugStopHandler mvarGUI cmdData = do - - guiData <- takeMVar mvarGUI - - let builder = widgetStoreMVarGUIData guiData - codeNoteMap = codeNoteMapMVarGUIData guiData - exitCmd = stopDebugCommandData cmdData - quitCmd = quitDebugCommandData cmdData - -- readLines = readLinesDebugCommandData cmdData - readWhile = readWhileDebugCommandData cmdData - - putMVar mvarGUI guiData - - cmdStr <- quitCmd - IF.putStrLnConsole builder cmdStr - - str <- readWhile $ const True - IF.putStrConsole builder str - IF.putStrLnConsole builder "" - - code <- exitCmd - - IF.putStrLnConsole builder $ show code - - IF.setupDebugButtonOff builder - - mapM_ IF.offLightBreakPoint $ Map.elems codeNoteMap - - return () - +toolBTdebugStopHandler mvarGUI _ = do + guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData++ IF.changeTBsOnDebugStopped builder++ -- | -- Event Handler -- @@ -657,7 +697,7 @@ putMVar mvarGUI guiData{buildMsgMVarGUIData = []} - IF.setupBuildButtonOff builder + IF.changeTBsOnBuildStart builder --IF.clearConsole builder appendBuildMsg mvarGUI "start stack build.\n" @@ -671,7 +711,7 @@ appendBuildMsg mvarGUI $ "\n" ++ show code ++ "\n" _ <- IF.addCallback $ buildCallbackHandler mvarGUI False - IF.setupBuildButtonOn builder + IF.changeTBsOnBuildFinish builder return () @@ -720,9 +760,9 @@ toolBTdeleteHandler mvarGUI cmdData = do guiData <- takeMVar mvarGUI let bpList = breakPointListMVarGUIData guiData - noteMap = codeNoteMapMVarGUIData guiData + --noteMap = codeNoteMapMVarGUIData guiData - mapM_ IF.offLightBreakPoint $ Map.elems noteMap + --mapM_ IF.offLightBreakPoint $ Map.elems noteMap putMVar mvarGUI guiData IF.getBreakPointList bpList >>= mapM_ go @@ -738,8 +778,11 @@ -- Event Handler -- toolBTsaveHandler :: MVar MVarGUIData -> DebugCommandData -> IF.SaveBTClickedEventHandler -toolBTsaveHandler = saveAll+toolBTsaveHandler mvarGUI cmdData = do+ files <- saveAll mvarGUI cmdData+ loadHsFiles mvarGUI cmdData files + -- | -- Event Handler -- @@ -772,10 +815,47 @@ Nothing -> return() Just (_, editor) -> IF.blockUnCommentTextEditor editor +-- | +-- Event Handler +-- +toolBTstartGHCiHandler :: MVar MVarGUIData -> DebugCommandData -> IO () +toolBTstartGHCiHandler mvarGUI cmdData = runGHCi mvarGUI cmdData >>= \case+ True -> return ()+ False -> errorM _LOG_NAME "run ghci failed." -- | +-- Event Handler -- +toolBTstopGHCiHandler :: MVar MVarGUIData -> DebugCommandData -> IO () +toolBTstopGHCiHandler mvarGUI cmdData = do+ guiData <- readMVar mvarGUI + let builder = widgetStoreMVarGUIData guiData + --codeNoteMap = codeNoteMapMVarGUIData guiData + exitCmd = stopDebugCommandData cmdData + quitCmd = quitDebugCommandData cmdData + readWhile = readWhileDebugCommandData cmdData + + cmdStr <- quitCmd + IF.putStrLnConsole builder cmdStr + + str <- readWhile $ const True + IF.putStrConsole builder str + IF.putStrLnConsole builder "" + + code <- exitCmd + + IF.putStrLnConsole builder $ show code + + IF.changeTBsOnGHCiStopped builder + + --mapM_ IF.offLightBreakPoint $ Map.elems codeNoteMap + + return ()+++-- | -- +-- continueWithHighlightTextRangeData :: MVar MVarGUIData -> DebugCommandData -> Either ParseError HighlightTextRangeData -> IO () continueWithHighlightTextRangeData mvarGUI cmdData (Left err) = do warningM _LOG_NAME $ "[continueWithHighlightTextRangeData]" ++ show err @@ -1361,6 +1441,47 @@ infoM _LOG_NAME "ctrl g called. not yet implemented." return True +codeTextKeyPressEventHandler mvarGUI cmdData "F4" _ _ _ _ = findCurrentTextEditor mvarGUI >>= \case+ Nothing -> errorM _LOG_NAME "[codeTextKeyPressEventHandler] invalid text editor." >> return True+ Just a -> withEditor a+ where+ withEditor (nodeDat, editor) = do+ key <- IF.getSelectedText editor+ withKey key $ IF.getPathFromNodeData nodeDat++ withKey key path+ | null key = return True+ | otherwise = autoRunGHCi mvarGUI cmdData >>= \case+ False -> errorM _LOG_NAME "run ghci failed." >> return True+ True -> do+ guiData <- readMVar mvarGUI+ let builder = widgetStoreMVarGUIData guiData+ res <- IF.isDebugStart builder+ debugStarted key path res++ debugStarted key path True = fileLoaded key path True+ debugStarted key path False = loadHsFile mvarGUI cmdData path >>= fileLoaded key path++ fileLoaded _ path False = errorM _LOG_NAME ("load hs file fail." ++ path) >> return True+ fileLoaded key _ True = do+ guiData <- readMVar mvarGUI+ let builder = widgetStoreMVarGUIData guiData + info = infoDebugCommandData cmdData + getResult = readDebugCommandData cmdData + + cmdStr <- info key + IF.putStrLnConsole builder cmdStr + + cmdStr <- getResult + IF.putStrConsole builder cmdStr+ + case getDefinedTextRangeData cmdStr of + Right pos -> activateTextEditor mvarGUI cmdData pos+ Left err -> infoM _LOG_NAME $ "[codeTextKeyPressEventHandler]" ++ show err++ return True++ codeTextKeyPressEventHandler mvarGUI cmdDat "z" False True _ _ = do guiData <- takeMVar mvarGUI @@ -1563,11 +1684,22 @@ _ <- manyTill anyChar (string "Stopped at ") parseHighlightTextRange +-- | +--+-- +getDefinedTextRangeData :: String -> Either ParseError HighlightTextRangeData +getDefinedTextRangeData = parse parser "getDefinedTextRangeData" + where+ parser = do+ _ <- manyTill anyChar (try (string "Defined at "))+ parseHighlightTextRange+ -- | -- parser of -- A) src\Phoityne\IO\Main.hs:31:11-14 -- B) src\Main.hs:(17,3)-(19,35) -- C) src\Phoityne\IO\Main.hs:31:11 +-- src\Phoityne\IO\Main.hs:31:11: -- parseHighlightTextRange :: forall u. ParsecT String u Identity HighlightTextRangeData parseHighlightTextRange = do@@ -1592,7 +1724,7 @@ parseC = do ln <- manyTill digit (char ':')- sn <- manyTill digit (char ':')+ sn <- try (manyTill digit (char ':')) <|> try (manyTill digit endOfLine) <|> try (manyTill digit eof) return ((read ln), (read sn), (read ln), (read sn)) @@ -1909,11 +2041,11 @@ where highLightBreakPoint _ _ Nothing = errorM _LOG_NAME $ "[highLightBreakPoint]invalid node map." - highLightBreakPoint mvarGUI pos (Just textEditor) = do - guiData <- readMVar mvarGUI - let codeNoteMap = codeNoteMapMVarGUIData guiData + highLightBreakPoint _ pos (Just textEditor) = do + --guiData <- readMVar mvarGUI + --let codeNoteMap = codeNoteMapMVarGUIData guiData - mapM_ IF.offLightBreakPoint $ Map.elems codeNoteMap + --mapM_ IF.offLightBreakPoint $ Map.elems codeNoteMap IF.highLightBreakPoint textEditor (startLineNoHighlightTextRangeData pos) @@ -2089,20 +2221,21 @@ -- | -- すべての変更ファイルを保存する -- -saveAll :: MVar MVarGUIData -> DebugCommandData -> IO ()+saveAll :: MVar MVarGUIData -> DebugCommandData -> IO [FilePath] saveAll mvarGUI _ = do guiData <- readMVar mvarGUI let noteMap = codeNoteMapMVarGUIData guiData - mapM_ go $ Map.toList noteMap+ foldM go [] $ Map.toList noteMap where- go (nodeDat, editor) = do- isModified <- IF.isTextEditorModified editor- when isModified $ do+ go acc (nodeDat, editor) = IF.isTextEditorModified editor >>= \case+ False -> return acc+ True -> do content <- IF.getCodeViewContent editor saveFile (IF.getPathFromNodeData nodeDat) content IF.setTextEditorModified editor False+ return $ IF.getPathFromNodeData nodeDat : acc -- |
app/Phoityne/IO/GUI/GTK/BreakPointTable.hs view
@@ -78,8 +78,9 @@ setupBreakPointTable :: Builder -> BreakPointListStore -> BreakPointTableDoubleClickedHandler+ -> DeleteAllBreakBTClickedEventHandler -> IO () -setupBreakPointTable builder store evh = do +setupBreakPointTable builder store evh deleteEvh = do treeView <- builderGetObject builder castToTreeView _WIDGET_NAME_BREAK_POINT_TREE_VIEW _ <- treeViewSetModel treeView store @@ -126,6 +127,10 @@ sel <- treeViewGetSelection treeView treeSelectionSetMode sel SelectionSingle ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DELETE + onToolButtonClicked bt deleteEvh + widgetSetSensitive bt True setFont treeView widgetShowAll treeView
app/Phoityne/IO/GUI/GTK/ConsoleView.hs view
@@ -16,6 +16,7 @@ ) where -- モジュール+import Phoityne.Constant import Phoityne.IO.GUI.GTK.Constant import Phoityne.IO.GUI.GTK.Utility @@ -23,6 +24,8 @@ import GHC.Float import Graphics.UI.Gtk import Control.Monad.IO.Class+import System.Log.Logger +import Data.String.Utils import qualified Data.Text as T -- | @@ -98,6 +101,8 @@ -- append2Console :: Builder -> String -> IO () append2Console builder msg = do ++ debugM _LOG_NAME $ strip msg textView <- builderGetObject builder castToTextView _NAME_CONSOLE_TEXT_VIEW buf <- textViewGetBuffer textView
app/Phoityne/IO/GUI/GTK/Constant.hs view
@@ -100,6 +100,12 @@ _NAME_TOOL_BT_UNCOMMENT :: String _NAME_TOOL_BT_UNCOMMENT = "BlockUnCommentBT" +_NAME_TOOL_BT_START_GHCI :: String +_NAME_TOOL_BT_START_GHCI = "StartGHCiBT" ++_NAME_TOOL_BT_STOP_GHCI :: String +_NAME_TOOL_BT_STOP_GHCI = "StopGHCiBT" + _NAME_TOOL_BT_DEL_SEARCH :: String _NAME_TOOL_BT_DEL_SEARCH = "SearchResultDeleteBT" @@ -122,3 +128,11 @@ _BREAK_POINT_HIGHLIGHT_TAG = T.pack "BreakPointHighlightTag" +_NAME_STATUS_BAR :: String+_NAME_STATUS_BAR = "StatusBar"+++_STATUS_BAR_CONTEXT_ID :: String+_STATUS_BAR_CONTEXT_ID = "PHOITYNE_STATUS_BAR"++
app/Phoityne/IO/GUI/GTK/Interface.hs view
@@ -25,6 +25,7 @@ , setupMainWindow , addCallback , delCallback+, putStrStatusBar -- ToolButton , DebugStartBTClickedEventHandler @@ -37,13 +38,17 @@ , UnIndentBTClickedEventHandler , CommentBTClickedEventHandler , UnCommentBTClickedEventHandler -, setupToolButton -, setupDebugButtonOn -, setupDebugButtonOff -, setupBuildButtonOn -, setupBuildButtonOff +, setupToolButton+, changeTBsOnGHCiStartting+, changeTBsOnGHCiStarted+, changeTBsOnGHCiStopped +, changeTBsOnDebugStarted +, changeTBsOnDebugStopped +, changeTBsOnBuildStart +, changeTBsOnBuildFinish , isDebugStart , isBuildStart+, isGHCiStarted -- Dialog , getNameByFolderTreeDialog @@ -98,7 +103,10 @@ type UnCommentBTClickedEventHandler = IO () +type StartGHCiBTClickedEventHandler = IO () +type StopGHCiBTClickedEventHandler = IO ()+ -- | -- -- @@ -182,6 +190,12 @@ codePaned <- builderGetObject builder castToPaned _NAME_CODE_PANED panedSetPosition codePaned 350 + note <- builderGetObject builder castToNotebook _NAME_CODE_NOTE+ -- statusBar <- builderGetObject builder castToStatusbar _NAME_STATUS_BAR+ -- contId <- statusbarGetContextId statusBar "source_file_path"+ on note switchPage $ switchPageEventHandler note builder++ return () -- | -- Event Handler @@ -207,7 +221,15 @@ -- | -- +--+isGHCiStarted :: Builder -> IO Bool+isGHCiStarted builder = do + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetGetSensitive bt++-- | -- +-- isDebugStart :: Builder -> IO Bool isDebugStart builder = do bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP @@ -222,6 +244,32 @@ widgetGetSensitive bt >>= return . not +-- | +-- +-- +switchPageEventHandler :: Notebook -> Builder -> Int -> IO ()+switchPageEventHandler note builder pageId = do+ path <- notebookGetNthPage note pageId >>= \case+ Nothing -> return "[ERROR] texit editor not found."+ Just child -> notebookGetMenuLabelText note child >>= \case+ Nothing -> return "[ERROR] texit editor not found."+ Just a -> return a + + putStrStatusBar builder path+++-- | +-- +-- +putStrStatusBar :: Builder -> String -> IO ()+putStrStatusBar builder msg = do+ bar <- builderGetObject builder castToStatusbar _NAME_STATUS_BAR+ contId <- statusbarGetContextId bar _STATUS_BAR_CONTEXT_ID+ statusbarRemoveAll bar (fromIntegral (toInteger contId))+ statusbarPush bar contId msg+ return ()++ -- |===================================================================== -- Dialog --@@ -341,158 +389,285 @@ -> StepInBTClickedEventHandler -> ContinueBTClickedEventHandler -> BuildBTClickedEventHandler - -> DeleteAllBreakBTClickedEventHandler -> SaveBTClickedEventHandler -> IndentBTClickedEventHandler -> UnIndentBTClickedEventHandler -> CommentBTClickedEventHandler -> UnCommentBTClickedEventHandler + -> StartGHCiBTClickedEventHandler + -> StopGHCiBTClickedEventHandler -> IO () -setupToolButton builder debugStartEvh debugStopEvh stepOverEvh stepInEvh continueEvh buildEvh deleteEvh saveEvh indentEvh unIndentEvh commentEvh unCommentEvh = do +setupToolButton builder debugStartEvh debugStopEvh stepOverEvh stepInEvh continueEvh buildEvh saveEvh indentEvh unIndentEvh commentEvh unCommentEvh startGHCi stopGHCi= do + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_SAVE + onToolButtonClicked bt saveEvh + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD + onToolButtonClicked bt buildEvh + widgetSetSensitive bt True+ + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + onToolButtonClicked bt startGHCi + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + onToolButtonClicked bt stopGHCi + widgetSetSensitive bt False++ ------------------------------------+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START onToolButtonClicked bt debugStartEvh - + widgetSetSensitive bt False+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP onToolButtonClicked bt debugStopEvh + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE + onToolButtonClicked bt continueEvh + widgetSetSensitive bt False+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER onToolButtonClicked bt stepOverEvh + widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN onToolButtonClicked bt stepInEvh - - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE - onToolButtonClicked bt continueEvh - - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD - onToolButtonClicked bt buildEvh + widgetSetSensitive bt False - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DELETE - onToolButtonClicked bt deleteEvh -- bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_SAVE - onToolButtonClicked bt saveEvh + ------------------------------------ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_INDENT onToolButtonClicked bt indentEvh + widgetSetSensitive bt True bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_UNINDENT onToolButtonClicked bt unIndentEvh + widgetSetSensitive bt True bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_COMMENT onToolButtonClicked bt commentEvh + widgetSetSensitive bt True bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_UNCOMMENT onToolButtonClicked bt unCommentEvh -- setupDebugButtonOff builder - - return () -+ widgetSetSensitive bt True -- | -- -- -setupDebugButtonOn :: Builder -> IO () -setupDebugButtonOn builder = do - +changeTBsOnGHCiStartting :: Builder -> IO () +changeTBsOnGHCiStartting builder = do ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD + widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt False+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP - widgetSetSensitive bt True - - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER - widgetSetSensitive bt True - - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN - widgetSetSensitive bt True + widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE - widgetSetSensitive bt True - - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN + widgetSetSensitive bt False++ -- | -- -- -setupDebugButtonOff :: Builder -> IO () -setupDebugButtonOff builder = do - +changeTBsOnGHCiStarted :: Builder -> IO () +changeTBsOnGHCiStarted builder = do ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD + widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt True+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START widgetSetSensitive bt True bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN widgetSetSensitive bt False - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE - widgetSetSensitive bt False - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD - widgetSetSensitive bt True - - -- | -- -- -setupBuildButtonOn :: Builder -> IO () -setupBuildButtonOn builder = do +changeTBsOnGHCiStopped :: Builder -> IO () +changeTBsOnGHCiStopped builder = do - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD widgetSetSensitive bt True ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START + widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN widgetSetSensitive bt False + +-- | +-- +-- +changeTBsOnBuildStart :: Builder -> IO () +changeTBsOnBuildStart builder = do + + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD + widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START + widgetSetSensitive bt False + + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER + widgetSetSensitive bt False - bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD - widgetSetSensitive bt True + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN + widgetSetSensitive bt False -- | -- -- -setupBuildButtonOff :: Builder -> IO () -setupBuildButtonOff builder = do +changeTBsOnBuildFinish :: Builder -> IO () +changeTBsOnBuildFinish builder = do + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD + widgetSetSensitive bt True ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt False+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER widgetSetSensitive bt False bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN + widgetSetSensitive bt False+++-- | +-- +-- +changeTBsOnDebugStarted :: Builder -> IO () +changeTBsOnDebugStarted builder = do + + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt False++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP + widgetSetSensitive bt True + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE - widgetSetSensitive bt False + widgetSetSensitive bt True ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER + widgetSetSensitive bt True + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN + widgetSetSensitive bt True ++ +-- | +-- +-- +changeTBsOnDebugStopped :: Builder -> IO () +changeTBsOnDebugStopped builder = do + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_BUILD widgetSetSensitive bt False - --- |=====================================================================--- ---+ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_START_GHCI + widgetSetSensitive bt False + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STOP_GHCI + widgetSetSensitive bt True++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_START + widgetSetSensitive bt True + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_DEBUG_STOP + widgetSetSensitive bt False + + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_CONTINUE + widgetSetSensitive bt False ++ bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_OVER + widgetSetSensitive bt False + + bt <- builderGetObject builder castToToolButton _NAME_TOOL_BT_STEP_IN + widgetSetSensitive bt False
app/Phoityne/IO/GUI/GTK/TextEditor.hs view
@@ -17,7 +17,7 @@ , setupCodeNote , activateCodeNote , highLightBreakPoint -, offLightBreakPoint +--, offLightBreakPoint , addBreakPointTagAtLine , isCurrentTextEditor , getCodeViewContent @@ -169,14 +169,13 @@ notebookSetTabReorderable note (boxTextEditorData textEditor) True _ <- onToolButtonClicked closeButton (codeNoteCloseEventHandler note textEditor evh) - + setFont note widgetShowAll note - -- activateCodeNote builder textEditor lineNo - - return textEditor + return textEditor+ -- | -- @@ -489,18 +488,18 @@ -- | -- -- -offLightBreakPoint :: TextEditorData -> IO () -offLightBreakPoint textEditor = do +-- offLightBreakPoint :: TextEditorData -> IO () +-- offLightBreakPoint textEditor = do - let codeTextView = codeTextEditorData textEditor - codeBuf <- textViewGetBuffer codeTextView - - startIter <- textBufferGetStartIter codeBuf - endIter <- textBufferGetEndIter codeBuf + -- let codeTextView = codeTextEditorData textEditor + -- codeBuf <- textViewGetBuffer codeTextView + -- + -- startIter <- textBufferGetStartIter codeBuf + -- endIter <- textBufferGetEndIter codeBuf - textBufferRemoveTagByName codeBuf _BREAK_POINT_HIGHLIGHT_TAG startIter endIter + -- textBufferRemoveTagByName codeBuf _BREAK_POINT_HIGHLIGHT_TAG startIter endIter - return () + -- return () -- | --
app/Phoityne/IO/Main.hs view
@@ -86,6 +86,7 @@ , "" , "[PHOITYNE]" , "target = ."+ , "ghci_auto_start = True" ] -- |
conf/Phoityne.glade view
@@ -1,17 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?>+<!-- Generated with glade 3.19.0 --> <interface>- <!-- interface-requires gtk+ 3.0 -->- <object class="GtkAction" id="TreeViewPopupCreateFileAction"/>- <object class="GtkAction" id="TreeViewPopupCreateFolderAction"/>- <object class="GtkAction" id="TreeViewPopupDeleteAction">- <property name="sensitive">False</property>- </object>- <object class="GtkAction" id="TreeViewPopupRenameAction">- <property name="sensitive">False</property>- </object>- <object class="GtkAction" id="TreeViewPopupReplaceAction"/>- <object class="GtkAction" id="TreeViewPopupSearchAction"/>- <object class="GtkAction" id="TreeViewPopupStartupAction"/>+ <requires lib="gtk+" version="3.0"/> <object class="GtkLabel" id="BindingsCol1Label"> <property name="visible">True</property> <property name="can_focus">False</property>@@ -69,6 +59,299 @@ </attributes> </object> <object class="GtkTextTagTable" id="CodeTextTagTable"/>+ <object class="GtkDialog" id="ReplaceDialog">+ <property name="can_focus">False</property>+ <property name="border_width">5</property>+ <property name="window_position">center-always</property>+ <property name="icon">h.ico</property>+ <property name="type_hint">dialog</property>+ <child internal-child="vbox">+ <object class="GtkBox" id="ReplaceDialogBox">+ <property name="can_focus">False</property>+ <property name="orientation">vertical</property>+ <property name="spacing">2</property>+ <child internal-child="action_area">+ <object class="GtkButtonBox" id="ReplaceDialogActionArea">+ <property name="can_focus">False</property>+ <property name="layout_style">end</property>+ <child>+ <object class="GtkButton" id="ReplaceDialogReplaceBT">+ <property name="label">gtk-find-and-replace</property>+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="use_stock">True</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkButton" id="ReplaceDialogCancelBT">+ <property name="label">gtk-cancel</property>+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="use_stock">True</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">1</property>+ </packing>+ </child>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="pack_type">end</property>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <object class="GtkLabel" id="ReplaceDialogLabel">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="halign">start</property>+ <property name="label" translatable="yes">Input replacement</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 10"/>+ </attributes>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkGrid" id="grid1">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="row_homogeneous">True</property>+ <child>+ <object class="GtkLabel" id="ReplaceDialogSearchKeyLabel">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">Search</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 10"/>+ </attributes>+ </object>+ <packing>+ <property name="left_attach">0</property>+ <property name="top_attach">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkLabel" id="ReplaceDialogReplaceLabel">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">Replace</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 10"/>+ </attributes>+ </object>+ <packing>+ <property name="left_attach">0</property>+ <property name="top_attach">1</property>+ </packing>+ </child>+ <child>+ <object class="GtkEntry" id="ReplaceDialogReplaceEntry">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="invisible_char">●</property>+ </object>+ <packing>+ <property name="left_attach">1</property>+ <property name="top_attach">1</property>+ </packing>+ </child>+ <child>+ <object class="GtkEntry" id="ReplaceDialogSearchEntry">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="invisible_char">●</property>+ </object>+ <packing>+ <property name="left_attach">1</property>+ <property name="top_attach">0</property>+ </packing>+ </child>+ </object>+ <packing>+ <property name="expand">True</property>+ <property name="fill">True</property>+ <property name="padding">2</property>+ <property name="position">2</property>+ </packing>+ </child>+ </object>+ </child>+ <action-widgets>+ <action-widget response="0">ReplaceDialogReplaceBT</action-widget>+ <action-widget response="1">ReplaceDialogCancelBT</action-widget>+ </action-widgets>+ </object>+ <object class="GtkDialog" id="SearchDialog">+ <property name="can_focus">False</property>+ <property name="border_width">5</property>+ <property name="window_position">center-always</property>+ <property name="icon">h.ico</property>+ <property name="type_hint">dialog</property>+ <child internal-child="vbox">+ <object class="GtkBox" id="SearchDialogBox">+ <property name="can_focus">False</property>+ <property name="orientation">vertical</property>+ <property name="spacing">2</property>+ <child internal-child="action_area">+ <object class="GtkButtonBox" id="SearchDialogActionArea">+ <property name="can_focus">False</property>+ <property name="layout_style">end</property>+ <child>+ <object class="GtkButton" id="SearchDialogSearchBT">+ <property name="label">gtk-find</property>+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="can_default">True</property>+ <property name="has_default">True</property>+ <property name="receives_default">True</property>+ <property name="use_stock">True</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkButton" id="SearchDialogCancelBT">+ <property name="label">gtk-cancel</property>+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="use_stock">True</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">1</property>+ </packing>+ </child>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="pack_type">end</property>+ <property name="position">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkLabel" id="SearchDialogLabel">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="halign">start</property>+ <property name="label" translatable="yes">Input keyword</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 10"/>+ </attributes>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">0</property>+ </packing>+ </child>+ <child>+ <object class="GtkEntry" id="SearchDialogEntry">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="invisible_char">●</property>+ <property name="activates_default">True</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="fill">True</property>+ <property name="position">2</property>+ </packing>+ </child>+ </object>+ </child>+ <action-widgets>+ <action-widget response="0">SearchDialogSearchBT</action-widget>+ <action-widget response="1">SearchDialogCancelBT</action-widget>+ </action-widgets>+ </object>+ <object class="GtkLabel" id="SearchResultCol1Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">FilePath</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="SearchResultCol2Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="tooltip_text" translatable="yes">Line No</property>+ <property name="label" translatable="yes">L</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="SearchResultCol3Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="tooltip_text" translatable="yes">Start Col No</property>+ <property name="label" translatable="yes">SC</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="SearchResultCol4Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="tooltip_text" translatable="yes">End Col No</property>+ <property name="label" translatable="yes">EC</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="SearchResultCol5Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">Line</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="TraceCol1Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">TraceId</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="TraceCol2Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">Function</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object>+ <object class="GtkLabel" id="TraceCol3Label">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="label" translatable="yes">FilePath</property>+ <attributes>+ <attribute name="font-desc" value="MS Gothic 8"/>+ </attributes>+ </object> <object class="GtkWindow" id="MainWindow"> <property name="can_focus">False</property> <property name="title" translatable="yes">Phoityne</property>@@ -168,7 +451,7 @@ <property name="can_focus">False</property> <property name="tooltip_text" translatable="yes">Save All(Ctrl+s)</property> <property name="is_important">True</property>- <property name="label" translatable="yes">toolbutton1</property>+ <property name="label" translatable="yes">SaveLabel</property> <property name="use_underline">True</property> <property name="stock_id">gtk-save</property> </object>@@ -204,6 +487,36 @@ </packing> </child> <child>+ <object class="GtkToolButton" id="StartGHCiBT">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="tooltip_text" translatable="yes">Start GHCi</property>+ <property name="is_important">True</property>+ <property name="label" translatable="yes">StartGHCiLabel</property>+ <property name="use_underline">True</property>+ <property name="stock_id">gtk-connect</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="homogeneous">True</property>+ </packing>+ </child>+ <child>+ <object class="GtkToolButton" id="StopGHCiBT">+ <property name="visible">True</property>+ <property name="can_focus">False</property>+ <property name="tooltip_text" translatable="yes">Stop GHCi</property>+ <property name="is_important">True</property>+ <property name="label" translatable="yes">StopGHCiLabel</property>+ <property name="use_underline">True</property>+ <property name="stock_id">gtk-disconnect</property>+ </object>+ <packing>+ <property name="expand">False</property>+ <property name="homogeneous">True</property>+ </packing>+ </child>+ <child> <object class="GtkSeparatorToolItem" id="Separator3"> <property name="visible">True</property> <property name="can_focus">False</property>@@ -894,40 +1207,24 @@ </object> </child> </object>- <object class="GtkDialog" id="ReplaceDialog">+ <object class="GtkDialog" id="TreeFolderCreateFolderDialog"> <property name="can_focus">False</property> <property name="border_width">5</property> <property name="window_position">center-always</property> <property name="icon">h.ico</property> <property name="type_hint">dialog</property> <child internal-child="vbox">- <object class="GtkBox" id="ReplaceDialogBox">+ <object class="GtkBox" id="TreeFolderCreateFolderVBox"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">2</property>- <child>- <object class="GtkLabel" id="ReplaceDialogLabel">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="halign">start</property>- <property name="label" translatable="yes">Input replacement</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 10"/>- </attributes>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">0</property>- </packing>- </child> <child internal-child="action_area">- <object class="GtkButtonBox" id="ReplaceDialogActionArea">+ <object class="GtkButtonBox" id="TreeFolderCreateFolderActionArea"> <property name="can_focus">False</property> <property name="layout_style">end</property> <child>- <object class="GtkButton" id="ReplaceDialogReplaceBT">- <property name="label">gtk-find-and-replace</property>+ <object class="GtkButton" id="TreeFolderCreateFolderOkBT">+ <property name="label">gtk-ok</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property>@@ -940,7 +1237,7 @@ </packing> </child> <child>- <object class="GtkButton" id="ReplaceDialogCancelBT">+ <object class="GtkButton" id="TreeFolderCreateFolderCancelBT"> <property name="label">gtk-cancel</property> <property name="visible">True</property> <property name="can_focus">True</property>@@ -958,257 +1255,10 @@ <property name="expand">False</property> <property name="fill">True</property> <property name="pack_type">end</property>- <property name="position">1</property>- </packing>- </child>- <child>- <object class="GtkGrid" id="grid1">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="row_homogeneous">True</property>- <child>- <object class="GtkLabel" id="ReplaceDialogSearchKeyLabel">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">Search</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 10"/>- </attributes>- </object>- <packing>- <property name="left_attach">0</property>- <property name="top_attach">0</property>- <property name="width">1</property>- <property name="height">1</property>- </packing>- </child>- <child>- <object class="GtkLabel" id="ReplaceDialogReplaceLabel">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">Replace</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 10"/>- </attributes>- </object>- <packing>- <property name="left_attach">0</property>- <property name="top_attach">1</property>- <property name="width">1</property>- <property name="height">1</property>- </packing>- </child>- <child>- <object class="GtkEntry" id="ReplaceDialogReplaceEntry">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="invisible_char">●</property>- <property name="invisible_char_set">True</property>- </object>- <packing>- <property name="left_attach">1</property>- <property name="top_attach">1</property>- <property name="width">1</property>- <property name="height">1</property>- </packing>- </child>- <child>- <object class="GtkEntry" id="ReplaceDialogSearchEntry">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="invisible_char">●</property>- <property name="invisible_char_set">True</property>- </object>- <packing>- <property name="left_attach">1</property>- <property name="top_attach">0</property>- <property name="width">1</property>- <property name="height">1</property>- </packing>- </child>- </object>- <packing>- <property name="expand">True</property>- <property name="fill">True</property>- <property name="padding">2</property> <property name="position">2</property> </packing> </child>- </object>- </child>- <action-widgets>- <action-widget response="0">ReplaceDialogReplaceBT</action-widget>- <action-widget response="1">ReplaceDialogCancelBT</action-widget>- </action-widgets>- </object>- <object class="GtkDialog" id="SearchDialog">- <property name="can_focus">False</property>- <property name="border_width">5</property>- <property name="window_position">center-always</property>- <property name="icon">h.ico</property>- <property name="type_hint">dialog</property>- <child internal-child="vbox">- <object class="GtkBox" id="SearchDialogBox">- <property name="can_focus">False</property>- <property name="orientation">vertical</property>- <property name="spacing">2</property> <child>- <object class="GtkLabel" id="SearchDialogLabel">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="halign">start</property>- <property name="label" translatable="yes">Input keyword</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 10"/>- </attributes>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">0</property>- </packing>- </child>- <child internal-child="action_area">- <object class="GtkButtonBox" id="SearchDialogActionArea">- <property name="can_focus">False</property>- <property name="layout_style">end</property>- <child>- <object class="GtkButton" id="SearchDialogSearchBT">- <property name="label">gtk-find</property>- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="can_default">True</property>- <property name="has_default">True</property>- <property name="receives_default">True</property>- <property name="use_stock">True</property>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">0</property>- </packing>- </child>- <child>- <object class="GtkButton" id="SearchDialogCancelBT">- <property name="label">gtk-cancel</property>- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="use_stock">True</property>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">1</property>- </packing>- </child>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="pack_type">end</property>- <property name="position">0</property>- </packing>- </child>- <child>- <object class="GtkEntry" id="SearchDialogEntry">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="invisible_char">●</property>- <property name="activates_default">True</property>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">2</property>- </packing>- </child>- </object>- </child>- <action-widgets>- <action-widget response="0">SearchDialogSearchBT</action-widget>- <action-widget response="1">SearchDialogCancelBT</action-widget>- </action-widgets>- </object>- <object class="GtkLabel" id="SearchResultCol1Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">FilePath</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="SearchResultCol2Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="tooltip_text" translatable="yes">Line No</property>- <property name="label" translatable="yes">L</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="SearchResultCol3Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="tooltip_text" translatable="yes">Start Col No</property>- <property name="label" translatable="yes">SC</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="SearchResultCol4Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="tooltip_text" translatable="yes">End Col No</property>- <property name="label" translatable="yes">EC</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="SearchResultCol5Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">Line</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="TraceCol1Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">TraceId</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="TraceCol2Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">Function</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkLabel" id="TraceCol3Label">- <property name="visible">True</property>- <property name="can_focus">False</property>- <property name="label" translatable="yes">FilePath</property>- <attributes>- <attribute name="font-desc" value="MS Gothic 8"/>- </attributes>- </object>- <object class="GtkDialog" id="TreeFolderCreateFolderDialog">- <property name="can_focus">False</property>- <property name="border_width">5</property>- <property name="window_position">center-always</property>- <property name="icon">h.ico</property>- <property name="type_hint">dialog</property>- <child internal-child="vbox">- <object class="GtkBox" id="TreeFolderCreateFolderVBox">- <property name="can_focus">False</property>- <property name="orientation">vertical</property>- <property name="spacing">2</property>- <child> <object class="GtkLabel" id="TreeFolderCreateFolderLabel"> <property name="visible">True</property> <property name="can_focus">False</property>@@ -1236,46 +1286,6 @@ <property name="position">1</property> </packing> </child>- <child internal-child="action_area">- <object class="GtkButtonBox" id="TreeFolderCreateFolderActionArea">- <property name="can_focus">False</property>- <property name="layout_style">end</property>- <child>- <object class="GtkButton" id="TreeFolderCreateFolderOkBT">- <property name="label">gtk-ok</property>- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="use_stock">True</property>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">0</property>- </packing>- </child>- <child>- <object class="GtkButton" id="TreeFolderCreateFolderCancelBT">- <property name="label">gtk-cancel</property>- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="use_stock">True</property>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="position">1</property>- </packing>- </child>- </object>- <packing>- <property name="expand">False</property>- <property name="fill">True</property>- <property name="pack_type">end</property>- <property name="position">2</property>- </packing>- </child> </object> </child> <action-widgets>@@ -1283,6 +1293,17 @@ <action-widget response="1">TreeFolderCreateFolderCancelBT</action-widget> </action-widgets> </object>+ <object class="GtkAction" id="TreeViewPopupCreateFileAction"/>+ <object class="GtkAction" id="TreeViewPopupCreateFolderAction"/>+ <object class="GtkAction" id="TreeViewPopupDeleteAction">+ <property name="sensitive">False</property>+ </object>+ <object class="GtkAction" id="TreeViewPopupRenameAction">+ <property name="sensitive">False</property>+ </object>+ <object class="GtkAction" id="TreeViewPopupReplaceAction"/>+ <object class="GtkAction" id="TreeViewPopupSearchAction"/>+ <object class="GtkAction" id="TreeViewPopupStartupAction"/> <object class="GtkMenu" id="TreeViewPopupMenu"> <property name="visible">True</property> <property name="can_focus">False</property>
phoityne.cabal view
@@ -1,5 +1,5 @@ name: phoityne-version: 0.0.1.1+version: 0.0.2.0 synopsis: ghci debug viewer with simple editor. description: Phoityne is a ghci debug viewer with simple editor. license: BSD3