From e160f340ec6ac0971e6d5a6b96070b149af02368 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Thu, 24 Dec 2015 14:41:06 +0100 Subject: [PATCH] GTK: make file/edit menus useful --- data/Gtk/builder.xml | 17 +++++++++++++---- src/GUI/Gtk.hs | 18 ++++++++++-------- src/GUI/Gtk/Callbacks.hs | 25 ++++++++++++++++++++++++- src/GUI/Gtk/Data.hs | 9 +++++---- 4 files changed, 52 insertions(+), 17 deletions(-) diff --git a/data/Gtk/builder.xml b/data/Gtk/builder.xml index 73c2613..450d9d3 100644 --- a/data/Gtk/builder.xml +++ b/data/Gtk/builder.xml @@ -32,6 +32,15 @@ True + + + gtk-execute + True + False + True + True + + True @@ -62,7 +71,7 @@ True False - + gtk-cut True False @@ -71,7 +80,7 @@ - + gtk-copy True False @@ -80,7 +89,7 @@ - + gtk-paste True False @@ -89,7 +98,7 @@ - + gtk-delete True False diff --git a/src/GUI/Gtk.hs b/src/GUI/Gtk.hs index 5833184..8386b94 100644 --- a/src/GUI/Gtk.hs +++ b/src/GUI/Gtk.hs @@ -151,14 +151,16 @@ startMainWindow startdir = do "menubarFileQuit" menubarFileOpen <- builderGetObject builder castToImageMenuItem "menubarFileOpen" - menubarFileCut <- builderGetObject builder castToImageMenuItem - "menubarFileCut" - menubarFileCopy <- builderGetObject builder castToImageMenuItem - "menubarFileCopy" - menubarFilePaste <- builderGetObject builder castToImageMenuItem - "menubarFilePaste" - menubarFileDelete <- builderGetObject builder castToImageMenuItem - "menubarFileDelete" + menubarFileExecute <- builderGetObject builder castToImageMenuItem + "menubarFileExecute" + menubarEditCut <- builderGetObject builder castToImageMenuItem + "menubarEditCut" + menubarEditCopy <- builderGetObject builder castToImageMenuItem + "menubarEditCopy" + menubarEditPaste <- builderGetObject builder castToImageMenuItem + "menubarEditPaste" + menubarEditDelete <- builderGetObject builder castToImageMenuItem + "menubarEditDelete" menubarHelpAbout <- builderGetObject builder castToImageMenuItem "menubarHelpAbout" urlBar <- builderGetObject builder castToEntry diff --git a/src/GUI/Gtk/Callbacks.hs b/src/GUI/Gtk/Callbacks.hs index 32c74e1..cce2841 100644 --- a/src/GUI/Gtk/Callbacks.hs +++ b/src/GUI/Gtk/Callbacks.hs @@ -79,7 +79,6 @@ setCallbacks mygui myview = do "Delete" <- fmap glibToString eventKeyName liftIO $ withRow mygui myview del _ <- treeView mygui `on` rowActivated $ (\_ _ -> withRow mygui myview open) - _ <- menubarFileQuit mygui `on` menuItemActivated $ mainQuit _ <- urlBar mygui `on` entryActivated $ urlGoTo mygui myview _ <- treeView mygui `on` keyPressEvent $ tryEvent $ do [Control] <- eventModifier @@ -93,6 +92,24 @@ setCallbacks mygui myview = do [Control] <- eventModifier "v" <- fmap glibToString eventKeyName liftIO $ operationFinal mygui myview + + -- menubar-file + _ <- menubarFileQuit mygui `on` menuItemActivated $ mainQuit + _ <- menubarFileOpen mygui `on` menuItemActivated $ + liftIO $ withRow mygui myview open + _ <- menubarFileExecute mygui `on` menuItemActivated $ + liftIO $ withRow mygui myview execute + + -- menubar-edit + _ <- menubarEditCopy mygui `on` menuItemActivated $ + liftIO $ withRow mygui myview copyInit + _ <- menubarEditPaste mygui `on` menuItemActivated $ + liftIO $ operationFinal mygui myview + _ <- menubarEditDelete mygui `on` menuItemActivated $ + liftIO $ withRow mygui myview del + _ <- menubarEditCut mygui `on` menuItemActivated $ + liftIO $ withRow mygui myview moveInit + return () @@ -118,6 +135,12 @@ open row mygui myview = withErrorDialog $ void $ openFile r +-- |Execute a given file. +execute :: Row -> MyGUI -> MyView -> IO () +execute row mygui myview = withErrorDialog $ + void $ executeFile row [] + + -- |Supposed to be used with 'withRow'. Deletes a file or directory. del :: Row -> MyGUI -> MyView -> IO () del row mygui myview = withErrorDialog $ do diff --git a/src/GUI/Gtk/Data.hs b/src/GUI/Gtk/Data.hs index 558371d..34c42f7 100644 --- a/src/GUI/Gtk/Data.hs +++ b/src/GUI/Gtk/Data.hs @@ -28,10 +28,11 @@ data MyGUI = MkMyGUI { rootWin :: Window , menubarFileQuit :: ImageMenuItem , menubarFileOpen :: ImageMenuItem - , menubarFileCut :: ImageMenuItem - , menubarFileCopy :: ImageMenuItem - , menubarFilePaste :: ImageMenuItem - , menubarFileDelete :: ImageMenuItem + , menubarFileExecute :: ImageMenuItem + , menubarEditCut :: ImageMenuItem + , menubarEditCopy :: ImageMenuItem + , menubarEditPaste :: ImageMenuItem + , menubarEditDelete :: ImageMenuItem , menubarHelpAbout :: ImageMenuItem , urlBar :: Entry , statusBar :: Statusbar