GTK: have two panels, fixes #52

This commit is contained in:
2016-11-06 01:33:03 +01:00
parent b495b3e89f
commit e2bf4d5f03
7 changed files with 360 additions and 170 deletions

View File

@@ -92,8 +92,8 @@ import System.Posix.FilePath
-- |Creates a new tab with its own view and refreshes the view.
newTab :: MyGUI -> IO FMView -> Item -> Int -> IO MyView
newTab mygui iofmv item pos = do
newTab :: MyGUI -> Notebook -> IO FMView -> Item -> Int -> IO MyView
newTab mygui nb iofmv item pos = do
-- create eventbox with label
@@ -104,8 +104,8 @@ newTab mygui iofmv item pos = do
containerAdd ebox label
widgetShowAll label
myview <- createMyView mygui iofmv
_ <- notebookInsertPageMenu (notebook mygui) (viewBox myview)
myview <- createMyView mygui nb iofmv
_ <- notebookInsertPageMenu (notebook myview) (viewBox myview)
ebox ebox pos
-- set initial history
@@ -113,7 +113,7 @@ newTab mygui iofmv item pos = do
putMVar (history myview)
(BrowsingHistory [] (path item) [] historySize)
notebookSetTabReorderable (notebook mygui) (viewBox myview) True
notebookSetTabReorderable (notebook myview) (viewBox myview) True
catchIOError (refreshView mygui myview item) $ \e -> do
file <- readFile getFileInfo . fromJust . P.parseAbs . fromString
@@ -127,8 +127,8 @@ newTab mygui iofmv item pos = do
eb <- eventButton
case eb of
MiddleButton -> liftIO $ do
n <- notebookGetNPages (notebook mygui)
when (n > 1) $ void $ destroyView mygui myview
n <- notebookGetNPages (notebook myview)
when (n > 1) $ void $ destroyView myview
return True
_ -> return False
@@ -138,9 +138,10 @@ newTab mygui iofmv item pos = do
-- |Constructs the initial MyView object with a few dummy models.
-- It also initializes the callbacks.
createMyView :: MyGUI
-> Notebook
-> IO FMView
-> IO MyView
createMyView mygui iofmv = do
createMyView mygui nb iofmv = do
inotify <- newEmptyMVar
history <- newEmptyMVar
@@ -175,6 +176,7 @@ createMyView mygui iofmv = do
viewBox <- builderGetObject builder castToBox
"viewBox"
let notebook = nb
let myview = MkMyView {..}
-- set the bindings
@@ -195,13 +197,15 @@ switchView :: MyGUI -> MyView -> IO FMView -> IO ()
switchView mygui myview iofmv = do
cwd <- getCurrentDir myview
oldpage <- destroyView mygui myview
let nb = notebook myview
oldpage <- destroyView myview
-- create new view and tab page where the previous one was
nview <- newTab mygui iofmv cwd oldpage
nview <- newTab mygui nb iofmv cwd oldpage
page <- fromJust <$> notebookPageNum (notebook mygui) (viewBox nview)
notebookSetCurrentPage (notebook mygui) page
page <- fromJust <$> notebookPageNum nb (viewBox nview)
notebookSetCurrentPage nb page
refreshView mygui nview cwd
@@ -213,18 +217,18 @@ switchView mygui myview iofmv = do
-- view needs to be done here.
--
-- Returns the page in the tab list this view corresponds to.
destroyView :: MyGUI -> MyView -> IO Int
destroyView mygui myview = do
destroyView :: MyView -> IO Int
destroyView myview = do
-- disconnect watcher
mi <- tryTakeMVar (inotify myview)
for_ mi $ \i -> killINotify i
page <- fromJust <$> notebookPageNum (notebook mygui) (viewBox myview)
page <- fromJust <$> notebookPageNum (notebook myview) (viewBox myview)
-- destroy old view and tab page
view' <- readTVarIO $ view myview
widgetDestroy (fmViewToContainer view')
notebookRemovePage (notebook mygui) page
notebookRemovePage (notebook myview) page
return page