manatee-template 0.0.8 → 0.1.0
raw patch · 4 files changed
+116/−31 lines, 4 filesdep +binarydep +derivedep −gtk-serialized-eventdep ~manatee-coresetup-changed
Dependencies added: binary, derive
Dependencies removed: gtk-serialized-event
Dependency ranges changed: manatee-core
Files
- Manatee/Extension/Template/TemplateBuffer.hs +30/−0
- Manatee/Extension/Template/TemplateView.hs +78/−23
- Setup.hs +2/−1
- manatee-template.cabal +6/−7
Manatee/Extension/Template/TemplateBuffer.hs view
@@ -17,14 +17,19 @@ -- along with this program. If not, see <http://www.gnu.org/licenses/>. {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell #-} module Manatee.Extension.Template.TemplateBuffer where import Control.Applicative import Control.Concurrent.STM import DBus.Client hiding (Signal)+import Data.Binary+import Data.DeriveTH import Data.Typeable+import Manatee.Core.Config import Manatee.Core.Types import Manatee.Extension.Template.PageMode+import Manatee.Toolkit.General.STM import qualified Graphics.UI.Gtk.SourceView.SourceBuffer as SB @@ -34,9 +39,19 @@ ,templateBufferPageId :: PageId ,templateBufferMode :: PageMode ,templateBufferBuffer :: SB.SourceBuffer+ ,templateBufferState :: TVar TemplateState } deriving Typeable +data TemplateState =+ TemplateState {templateStateCursor :: Maybe (Int, Int)+ ,templateStateScrolledPosition :: (Double, Double)}++-- | Init state.+templateInitState :: TemplateState+templateInitState =+ TemplateState (Just (1, 0)) (0, 0)+ -- | New template buffer. templateBufferNew :: String -- Buffer name, also is Tab name -> [String] -- option pass application to parse@@ -51,3 +66,18 @@ <*> pure pageId <*> pure templateMode <*> pure buffer+ <*> newTVarIO templateInitState++-- | Write state.+templateBufferWriteState :: TemplateBuffer -> FilePath -> IO ()+templateBufferWriteState buffer path = do+ state <- readTVarIO $ templateBufferState buffer+ writeConfigPath path state++-- | Read state.+templateBufferReadState :: TemplateBuffer -> FilePath -> IO () +templateBufferReadState buffer path = do+ state <- readConfigPath path templateInitState+ writeTVarIO (templateBufferState buffer) state+ +$(derive makeBinary ''TemplateState)
Manatee/Extension/Template/TemplateView.hs view
@@ -26,12 +26,13 @@ import Data.Text.Lazy (Text) import Data.Typeable import Graphics.UI.Gtk hiding (Statusbar, statusbarNew, get)-import Graphics.UI.Gtk.Gdk.SerializedEvent+import Manatee.Core.Config import Manatee.Core.PageFrame import Manatee.Core.Types import Manatee.Extension.Template.TemplateBuffer+import Manatee.Toolkit.General.Maybe import Manatee.Toolkit.General.STM-import Manatee.Toolkit.Gtk.Gtk+import Manatee.Toolkit.Gtk.Multiline import Paths_manatee_template import System.FilePath @@ -65,25 +66,46 @@ -- Get package name to update user's configure. pageBufferPackageName _ = fmap takeFileName getDataDir + -- Save buffer state.+ pageBufferWriteState = templateBufferWriteState+ + -- Restore buffer state.+ pageBufferReadState = templateBufferReadState+ instance PageView TemplateView where -- Page buffer.- pageViewBuffer = PageBufferWrap . templateViewBuffer+ pageViewBuffer = PageBufferWrap . templateViewBuffer+ + -- GtkPlug id. + pageViewPlugId = templateViewPlugId+ + -- Page Frame. + pageViewFrame = templateViewFrame+ + -- Local keymap. + pageViewLocalKeymap _ = templateViewLocalKeymap - -- GtkPlug id.- pageViewPlugId = templateViewPlugId+ -- Command map.+ pageViewLocalCommandMap _ = templateViewLocalCommandMap - -- Box.- pageViewBox = pageFrameBox . templateViewFrame+ -- How to focus when manatee focus current application.+ pageViewFocus = widgetGrabFocus . templateViewView - -- Scrolled window.- pageViewScrolledWindow = pageFrameScrolledWindow . templateViewFrame+ -- Which widget to propagate event.+ pageViewPropagateWidget = castToWidget . templateViewView+ + -- Save view state. + pageViewSaveState view = templateViewSaveState view Nothing - -- How to focus when manatee focus current application.- pageViewFocus = widgetGrabFocus . templateViewView+ -- Restore view state.+ pageViewRestoreState view = templateViewRestoreState view Nothing - -- How to handle key action that pass from daemon process.- pageViewHandleKeyAction = templateViewHandleKeyAction+ -- Save view state to file.+ pageViewWriteState view path = templateViewSaveState view (Just path) + -- Restore view state from file.+ pageViewReadState view path = templateViewRestoreState view (Just path)+ -- How to handle cut action, can ignore. -- pageViewCut = templateViewCut @@ -133,16 +155,49 @@ return $ TemplateView pId pFrame templateView sb -- | String buffer keymap.-templateViewKeymap :: Map Text (TemplateView -> IO ())-templateViewKeymap = +templateViewLocalKeymap :: Map Text Text+templateViewLocalKeymap = M.fromList [] --- | Handle key action.-templateViewHandleKeyAction :: TemplateView -> Text -> SerializedEvent -> IO ()-templateViewHandleKeyAction view keystoke sEvent = - case M.lookup keystoke templateViewKeymap of- -- Execute action when found in keymap.- Just action -> action view- -- Otherwise propagate event.- Nothing -> widgetPropagateEvent (templateViewView view) sEvent +-- | String buffer keymap.+templateViewLocalCommandMap :: Map Text (TemplateView -> IO ())+templateViewLocalCommandMap = + M.fromList []++-- | Template view scrolled window.+templateViewScrolledWindow :: TemplateView -> ScrolledWindow +templateViewScrolledWindow =+ pageFrameScrolledWindow . templateViewFrame++-- | Save state.+templateViewSaveState :: TemplateView -> Maybe FilePath -> IO ()+templateViewSaveState view@(TemplateView {templateViewBuffer = buffer}) + statePath = do+ -- Get scroll position.+ scrolledWindowPosition <- textViewGetCursorAlign (templateViewView view)++ -- Save state.+ let state = TemplateState Nothing scrolledWindowPosition+ case statePath of+ Nothing -> writeTVarIO (templateBufferState buffer) state+ Just path -> writeConfigPath path state++-- | Restore state.+templateViewRestoreState :: TemplateView -> Maybe FilePath -> IO ()+templateViewRestoreState TemplateView {templateViewBuffer = buffer+ ,templateViewView = textView} + statePath = do+ bufferState <- readTVarIO (templateBufferState buffer)+ (TemplateState cursor scrolledWindowPosition) <- + case statePath of+ Just path -> readConfigPath path bufferState+ Nothing -> return bufferState++ -- Restore cursor.+ cursor ?>= \ (line, column) -> do+ textViewGotoLine textView line+ textViewGotoColumn textView column++ -- Restore cursor alignment.+ textViewSetCursorAlign textView scrolledWindowPosition
Setup.hs view
@@ -37,5 +37,6 @@ -- PageMode with global keymap. (ExtensionGloalKeymap keymap) <- readConfig extensionGlobalKeymapPath (ExtensionGloalKeymap M.empty) writeConfig extensionGlobalKeymapPath (ExtensionGloalKeymap- (M.insert "F1" ("PageTemplate", "Template", []) keymap))+ (M.insert "F1" ("Example extension",+ ("PageTemplate", "Template", [])) keymap)) }
manatee-template.cabal view
@@ -1,16 +1,15 @@- name: manatee-template-version: 0.0.8+version: 0.1.0 Cabal-Version: >= 1.6 license: GPL-3 license-file: LICENSE-copyright: (c) 2009 ~ 2010 Andy Stewart+copyright: (c) 2010 ~ 2011 Andy Stewart synopsis: Template code to create Manatee application. description: manatee-template is template package to help you create your own manatee application. . Details look <http://haskell.org/haskellwiki/Manatee#How_to_write_Manatee_extension> .- Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>+ Video (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html> . Screenshots at : <http://goo.gl/MkVw> .@@ -25,7 +24,7 @@ stability: provisional category: Manatee, Template, IDE -tested-with: GHC==6.12.3+tested-with: GHC==7.0.2 build-type: Custom Source-Repository head@@ -33,8 +32,8 @@ location: http://patch-tag.com/r/AndyStewart/manatee-template Library- build-depends: base >= 4 && < 5, manatee-core >= 0.0.8, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,- containers >= 0.3.0.0, gtk-serialized-event >= 0.12.0, gtk >= 0.12.0, gtksourceview2 >= 0.12.0,+ build-depends: base >= 4 && < 5, manatee-core >= 0.1.0, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,+ containers >= 0.3.0.0, gtk >= 0.12.0, gtksourceview2 >= 0.12.0, derive, binary, text >= 0.7.1.0, bytestring >= 0.9.1.5, dbus-core, regex-tdfa, filepath exposed-modules: Manatee.Extension.Template