packages feed

manatee-filemanager 0.0.8 → 0.1.0

raw patch · 8 files changed

+151/−57 lines, 8 filesdep +binarydep +derivedep −gtk-serialized-eventdep ~manatee-coresetup-changedbinary-added

Dependencies added: binary, derive

Dependencies removed: gtk-serialized-event

Dependency ranges changed: manatee-core

Files

Main.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/FileManager.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/FileManager/DiredBuffer.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -17,17 +17,21 @@ -- along with this program.  If not, see <http://www.gnu.org/licenses/>.  {-# LANGUAGE ScopedTypeVariables, DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell #-} module Manatee.Extension.FileManager.DiredBuffer where  import Control.Applicative import Control.Concurrent.STM  import Control.Monad-import Data.ByteString.UTF8 import DBus.Client hiding (Signal)-import Data.Ord (comparing)+import Data.Binary+import Data.ByteString.UTF8+import Data.DeriveTH import Data.List (insert, delete)+import Data.Ord (comparing) import Data.Typeable-import Graphics.UI.Gtk+import Graphics.UI.Gtk hiding (get)+import Manatee.Core.Config import Manatee.Core.DBus import Manatee.Core.Types import Manatee.Extension.FileManager.PageMode@@ -57,9 +61,15 @@                 ,diredBufferFileMonitor         :: TVar FileMonitor                 ,diredBufferMode                :: PageMode                 ,diredBufferBroadcastChannel    :: TChan DiredBufferSignal+                ,diredBufferState               :: TVar DiredState                 }     deriving Typeable +data DiredState =+    DiredState {diredStateSelectedPath          :: (Maybe TreePath)+               ,diredStateScrolledPosition      :: (Double, Double)+               }+ data DiredBufferSignal = UpdateBuffer FilePath                        | UpdateView (Maybe String)                        | UpdateFile [DiredFileInfo] [DiredFileInfo]@@ -109,6 +119,11 @@       compareRow FIMTime      row1 row2 = return $ comparing fst (dfiMtimeDescrible row1) (dfiMtimeDescrible row2)       compareRow FIPermission row1 row2 = return $ comparing fst (dfiPermDescrible  row1) (dfiPermDescrible  row2) +-- | Init state.+diredInitState :: DiredState      +diredInitState = +  DiredState Nothing (0, 0)+ -- | New. diredBufferNew :: FilePath -> [String] -> Client -> PageId -> CustomizeWrap -> IO DiredBuffer diredBufferNew dir _ client pageId _ = do@@ -126,6 +141,7 @@                         <*> newTVarIO monitor                         <*> pure diredMode                         <*> (newTChanIO :: IO (TChan DiredBufferSignal)) +                        <*> newTVarIO diredInitState    -- Load directory content.   diredBufferLoad buffer dir@@ -285,3 +301,16 @@    -- Hook file monitor with new file.    diredBufferHandleFileMonitor buffer   +-- | Write state.+diredBufferWriteState :: DiredBuffer -> FilePath -> IO ()+diredBufferWriteState buffer path = do+  state <- readTVarIO $ diredBufferState buffer+  writeConfigPath path state++-- | Read state.+diredBufferReadState :: DiredBuffer -> FilePath -> IO ()  +diredBufferReadState buffer path = do+  state <- readConfigPath path diredInitState+  writeTVarIO (diredBufferState buffer) state+  +$(derive makeBinary ''DiredState)
Manatee/Extension/FileManager/DiredView.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -29,7 +29,7 @@ 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.DBus import Manatee.Core.FileOpenRule import Manatee.Core.PageFrame@@ -43,8 +43,8 @@ import Manatee.Toolkit.General.STM import Manatee.Toolkit.Gio.Gio import Manatee.Toolkit.Gtk.Concurrent-import Manatee.Toolkit.Gtk.Gtk import Manatee.Toolkit.Gtk.ModelView+import Manatee.Toolkit.Gtk.ScrolledWindow import Paths_manatee_filemanager import System.FilePath @@ -69,16 +69,21 @@     pageBufferPackageName _     = fmap takeFileName getDataDir  instance PageView DiredView where-    pageViewBuffer              = PageBufferWrap . diredViewBuffer-    pageViewPlugId              = diredViewPlugId-    pageViewBox                 = pageFrameBox . diredViewFrame-    pageViewScrolledWindow      = diredViewScrolledWindow-    pageViewFocus               = treeViewFocus . diredViewTreeView-    pageViewHandleKeyAction     = diredViewHandleKeyAction-    pageViewScrollToTop         = diredViewScrollToTop-    pageViewScrollToBottom      = diredViewScrollToBottom-    pageViewScrollVerticalPage  = diredViewScrollVerticalPage-    pageViewScrollVerticalStep  = diredViewScrollVerticalStep+    pageViewBuffer               = PageBufferWrap . diredViewBuffer+    pageViewPlugId               = diredViewPlugId+    pageViewFrame                = diredViewFrame+    pageViewLocalKeymap _        = diredViewLocalKeymap+    pageViewLocalCommandMap _    = diredViewLocalCommandMap+    pageViewPropagateWidget      = castToWidget . diredViewTreeView+    pageViewSaveState view       = diredViewSaveState view Nothing+    pageViewRestoreState view    = diredViewRestoreState view Nothing+    pageViewWriteState view path = diredViewSaveState view (Just path)+    pageViewReadState view path  = diredViewRestoreState view (Just path)+    pageViewFocus                = treeViewFocus . diredViewTreeView+    pageViewScrollToTop          = diredViewScrollToTop+    pageViewScrollToBottom       = diredViewScrollToBottom+    pageViewScrollVerticalPage   = diredViewScrollVerticalPage+    pageViewScrollVerticalStep   = diredViewScrollVerticalStep  -- | Internal new function. diredViewNew :: DiredBuffer -> PagePlugId -> IO DiredView@@ -377,30 +382,50 @@       treeSortableSetSortColumnId (diredViewSortModel view) x sortType  -- | Keymap.-diredViewKeymap :: Map Text (DiredView -> IO ())-diredViewKeymap = +diredViewLocalKeymap :: Map Text Text+diredViewLocalKeymap =      M.fromList-         [("j",         diredViewNextNode)-         ,("k",         diredViewPrevNode)-         ,("Down",      diredViewNextNode)-         ,("Up",        diredViewPrevNode)          -         ,("J",         diredViewScrollToBottom)-         ,("K",         diredViewScrollToTop)-         ,(" ",         diredViewScrollVerticalPage True)-         ,("b",         diredViewScrollVerticalPage False)-         ,("PageDown",  diredViewScrollVerticalPage True)-         ,("PageUp",    diredViewScrollVerticalPage False)-         ,("n",         diredViewSortByName)-         ,("x",         diredViewSortByMime)-         ,("s",         diredViewSortBySize)-         ,("t",         diredViewSortByMTime)-         ,("'",         diredViewUpperDirectory False)-         ,("\"",        diredViewUpperDirectory True)-         ,("m",         diredViewEntryNode False)-         ,("Return",    diredViewEntryNode False)-         ,("M",         diredViewEntryNode True)+         [("j",         "Next")+         ,("k",         "Previous")+         ,("Down",      "Next")+         ,("Up",        "Previous")          +         ,("J",         "Scroll to top")+         ,("K",         "Scroll to bottom")+         ,(" ",         "Scroll page up")+         ,("b",         "Scroll page download")+         ,("PageDown",  "Scroll page up")+         ,("PageUp",    "Scroll page download")+         ,("n",         "Sort by name")+         ,("x",         "Sort by type")+         ,("s",         "Sort by size")+         ,("t",         "Sort by modified time")+         ,("'",         "Upper directory")+         ,("\"",        "Upper directory in new tab")+         ,("m",         "Entry")+         ,("Return",    "Entry")+         ,("M",         "Entry in new tab")          ] +-- | Keymap.+diredViewLocalCommandMap :: Map Text (DiredView -> IO ())+diredViewLocalCommandMap = +    M.fromList+         [("Next",                      diredViewNextNode)+         ,("Previous",                  diredViewPrevNode)+         ,("Scroll to top",             diredViewScrollToBottom)+         ,("Scroll to bottom",          diredViewScrollToTop)+         ,("Scroll page up",            diredViewScrollVerticalPage True)+         ,("Scroll page down",          diredViewScrollVerticalPage False)+         ,("Sort by name",              diredViewSortByName)+         ,("Sort by type",              diredViewSortByMime)+         ,("Sort by size",              diredViewSortBySize)+         ,("Sort by modified time",     diredViewSortByMTime)+         ,("Upper directory",           diredViewUpperDirectory False)+         ,("Upper directory in new tab",diredViewUpperDirectory True)+         ,("Entry",                     diredViewEntryNode False)+         ,("Entry in new tab",          diredViewEntryNode True)+         ]+ -- | Begin. diredViewScrollToTop :: DiredView -> IO () diredViewScrollToTop = @@ -427,14 +452,41 @@   stepInc <- (<<<=) i2d treeViewGetSelectedCellHeight tv   treeViewScrollVertical tv sw (if isDown then stepInc else (- stepInc)) --- | Handle key action.-diredViewHandleKeyAction :: DiredView -> Text -> SerializedEvent -> IO ()  -diredViewHandleKeyAction view keystoke sEvent = -  case M.lookup keystoke diredViewKeymap of-    Just action -> action view-    Nothing -> widgetPropagateEvent (diredViewTreeView view) sEvent- -- | Scrolled window. diredViewScrolledWindow :: DiredView -> ScrolledWindow diredViewScrolledWindow =   pageFrameScrolledWindow . diredViewFrame++-- | Save state.+diredViewSaveState :: DiredView -> Maybe FilePath -> IO ()+diredViewSaveState view@(DiredView {diredViewBuffer     = buffer+                                   ,diredViewTreeView   = treeView}) +                   statePath = do+  -- Get selected path.+  selectedPath <- treeViewGetSelectedPath treeView++  -- Get scroll position.+  scrolledWindowPosition <- scrolledWindowGetValue (diredViewScrolledWindow view)++  -- Save state.+  let state = DiredState selectedPath scrolledWindowPosition+  case statePath of+    Nothing   -> writeTVarIO (diredBufferState buffer) state+    Just path -> writeConfigPath path state++-- | Restore state.+diredViewRestoreState :: DiredView -> Maybe FilePath -> IO ()+diredViewRestoreState view@(DiredView {diredViewBuffer  = buffer+                                      ,diredViewTreeView= treeView})+                      statePath = do+  bufferState <- readTVarIO (diredBufferState buffer)+  (DiredState selectedPath scrolledWindowPosition) <- +      case statePath of+        Just path -> readConfigPath path bufferState+        Nothing   -> return bufferState++  -- Restore selected path.+  selectedPath ?>= \path -> treeViewSetCursor treeView path Nothing++  -- Restore scroll position.+  scrolledWindowSetValue (diredViewScrolledWindow view) scrolledWindowPosition
Manatee/Extension/FileManager/PageMode.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Setup.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -19,6 +19,7 @@ import Distribution.Simple import Manatee.Core.Config import Manatee.Core.Types+import Manatee.Toolkit.Cabal.Utils import Manatee.Extension.FileManager.PageMode  import qualified Data.Map as M@@ -26,7 +27,7 @@ main = defaultMainWithHooks         -- Update Rule after install successful.        simpleUserHooks {-         postInst = \ _ _ _ _ -> do+         postInst = \ _ _ pack_des lbi -> do              -- Update PageTypeRule.              (PageTypeRule typeRule) <- readConfig pageTypeRulePath (PageTypeRule M.empty)              writeConfig pageTypeRulePath (PageTypeRule (M.insert "PageFileManager" "manatee-filemanager" typeRule))@@ -37,5 +38,14 @@              -- Update ExtensionGloalKeymap.              (ExtensionGloalKeymap keymap) <- readConfig extensionGlobalKeymapPath (ExtensionGloalKeymap M.empty)              writeConfig extensionGlobalKeymapPath (ExtensionGloalKeymap-                                                    (M.insert "F4" ("PageFileManager", "/home/", []) keymap))+                                                    (M.insert "F4" ("File Manager",+                                                                    ("PageFileManager", "/home/", [])) keymap))+             -- Update Application info.+             let snapshotPath = getDataFilePath pack_des lbi "data/welcome/snapshot.png"+             (WelcomeApplication apps) <- readConfig welcomeApplicationPath (WelcomeApplication M.empty)+             writeConfig welcomeApplicationPath (WelcomeApplication+                                                 (M.insert +                                                       ("File Manager", snapshotPath)+                                                       ("PageFileManager", "/home/", [])+                                                       apps))        }
+ data/welcome/snapshot.png view

binary file changed (absent → 195862 bytes)

manatee-filemanager.cabal view
@@ -1,13 +1,13 @@ name:			manatee-filemanager-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:		File manager extension for Manatee. description:    manatee-filemanager is file manager extension for Manatee (Haskell/Gtk+ Integrated Live Environment)  .- 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>  .@@ -22,16 +22,19 @@ stability:		provisional category:		Manatee, File Manager -tested-with:	GHC==6.12.3+tested-with:	GHC==7.0.2 build-type:		Custom +data-dir: ""+data-files: data/welcome/snapshot.png+ Source-Repository head   type:         darcs   location:     http://patch-tag.com/r/AndyStewart/manatee-filemanager    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,+     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, derive, binary,                     text >= 0.7.1.0, mtl >= 1.1.0.2, old-time >= 1.0.0.3, old-locale >= 1.0.0.2,                     glib >= 0.12.0, gio >= 0.12.0, filepath >= 1.1.0.3, utf8-string >= 0.3.4      exposed-modules: