packages feed

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 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