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 +1/−1
- Manatee/Extension/FileManager.hs +1/−1
- Manatee/Extension/FileManager/DiredBuffer.hs +33/−4
- Manatee/Extension/FileManager/DiredView.hs +93/−41
- Manatee/Extension/FileManager/PageMode.hs +1/−1
- Setup.hs +13/−3
- data/welcome/snapshot.png binary
- manatee-filemanager.cabal +9/−6
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: