Add base addressbook to GUI #102

Merged
pitmutt merged 21 commits from rvv041 into milestone3 2024-09-13 11:39:59 +00:00
2 changed files with 44 additions and 8 deletions
Showing only changes of commit e3de5c7624 - Show all commits

View file

@ -238,4 +238,5 @@ printUsage = do
putStrLn "Available commands:" putStrLn "Available commands:"
{-putStrLn "legacy\tLegacy CLI for zcashd"-} {-putStrLn "legacy\tLegacy CLI for zcashd"-}
putStrLn "tui\tTUI for zebrad" putStrLn "tui\tTUI for zebrad"
putStrLn "gui\tGUI for zebrad"
putStrLn "rescan\tRescan the existing wallet(s)" putStrLn "rescan\tRescan the existing wallet(s)"

View file

@ -1,5 +1,6 @@
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BlockArguments #-}
module Zenith.GUI where module Zenith.GUI where
@ -102,6 +103,9 @@ data AppEvent
| CheckRecipient !T.Text | CheckRecipient !T.Text
| CheckAmount !Float | CheckAmount !Float
| ShowTxId !T.Text | ShowTxId !T.Text
| ShowAdrBook
| CloseAdrBook
| NotImplemented
deriving (Eq, Show) deriving (Eq, Show)
data AppModel = AppModel data AppModel = AppModel
@ -144,6 +148,7 @@ data AppModel = AppModel
, _amountValid :: !Bool , _amountValid :: !Bool
, _showId :: !(Maybe T.Text) , _showId :: !(Maybe T.Text)
, _home :: !FilePath , _home :: !FilePath
, _showAdrBook :: !Bool
} deriving (Eq, Show) } deriving (Eq, Show)
makeLenses ''AppModel makeLenses ''AppModel
@ -185,6 +190,8 @@ buildUI wenv model = widgetTree
, txIdOverlay `nodeVisible` isJust (model ^. showId) , txIdOverlay `nodeVisible` isJust (model ^. showId)
, msgOverlay `nodeVisible` isJust (model ^. msg) , msgOverlay `nodeVisible` isJust (model ^. msg)
, modalOverlay `nodeVisible` isJust (model ^. modalMsg) , modalOverlay `nodeVisible` isJust (model ^. modalMsg)
, adrbookOverlay `nodeVisible` model ^. showAdrBook
pitmutt marked this conversation as resolved Outdated

Any new windows should be lower priority than msgOverlay, so the message window displays above. Also, the wallet sync notification uses modalOverlay and needs to be the top widget to make sure that no activities are performed during sync.

Any new windows should be lower priority than `msgOverlay`, so the message window displays above. Also, the wallet sync notification uses `modalOverlay` and needs to be the top widget to make sure that no activities are performed during sync.
, msgAdrBookOverlay `nodeVisible` model ^. notImplemented
] ]
mainWindow = mainWindow =
vstack vstack
@ -247,6 +254,8 @@ buildUI wenv model = widgetTree
[bgColor white, borderB 1 gray, padding 3] [bgColor white, borderB 1 gray, padding 3]
, box_ [alignLeft, onClick ShowSeed] (label "Backup Wallet") `styleBasic` , box_ [alignLeft, onClick ShowSeed] (label "Backup Wallet") `styleBasic`
[bgColor white, borderB 1 gray, padding 3] [bgColor white, borderB 1 gray, padding 3]
, box_ [alignLeft, onClick ShowAdrBook] (label "Address Book") `styleBasic`
[bgColor white, borderB 1 gray, padding 3]
]) `styleBasic` ]) `styleBasic`
[bgColor btnColor, padding 3] [bgColor btnColor, padding 3]
newBox = newBox =
@ -750,6 +759,26 @@ buildUI wenv model = widgetTree
] ]
]) `styleBasic` ]) `styleBasic`
[padding 2, bgColor white, width 280, borderB 1 gray, borderT 1 gray] [padding 2, bgColor white, width 280, borderB 1 gray, borderT 1 gray]
adrbookOverlay =
alert CloseAdrBook $
vstack
[ box_
[]
(label "Address Book" `styleBasic`
[textFont "Bold", textSize 12, textColor white]) `styleBasic`
[bgColor btnColor, radius 2, padding 3]
, spacer
, hstack [
button "New" notImplemented
, spacer
, button "Edit" notImplemented
, spacer
, button "Copy" notImplemented
]
]
notImplemented = NotImplemented
pitmutt marked this conversation as resolved Outdated

This is unnecessary, the event can be used directly

This is unnecessary, the event can be used directly
generateQRCodes :: Config -> IO () generateQRCodes :: Config -> IO ()
generateQRCodes config = do generateQRCodes config = do
@ -1060,6 +1089,9 @@ handleEvent wenv node model evt =
(i < (fromIntegral (model ^. balance) / 100000000.0)) (i < (fromIntegral (model ^. balance) / 100000000.0))
] ]
ShowTxId tx -> [Model $ model & showId ?~ tx & modalMsg .~ Nothing] ShowTxId tx -> [Model $ model & showId ?~ tx & modalMsg .~ Nothing]
ShowAdrBook -> [Model $ model & showAdrBook .~ True & menuPopup .~ False]
CloseAdrBook -> [Model $ model & showAdrBook .~ False]
NotImplemented -> [Model $ model & msg ?~ "Function not implemented..." & menuPopup .~ False & modalMsg .~ Nothing]
pitmutt marked this conversation as resolved Outdated

Using model & msg ?~ ... uses the msgOverlay dialog box that is lower in the widgetTree priority.

Using `model & msg ?~ ...` uses the `msgOverlay` dialog box that is lower in the `widgetTree` priority.
where where
currentWallet = currentWallet =
if null (model ^. wallets) if null (model ^. wallets)
@ -1325,10 +1357,9 @@ runZenithGUI config = do
Nothing Nothing
"" ""
"" ""
(SaveAddress $ (SaveAddress (if not (null accList)
pitmutt marked this conversation as resolved Outdated

Too many parenthesis, use $ instead.

Too many parenthesis, use `$` instead.
if not (null accList) then Just (head accList)
then Just (head accList) else Nothing ) )
else Nothing)
False False
False False
Nothing Nothing
@ -1342,7 +1373,9 @@ runZenithGUI config = do
False False
False False
Nothing Nothing
hD ""
False
-- hD
startApp model handleEvent buildUI (params hD) startApp model handleEvent buildUI (params hD)
Left e -> do Left e -> do
initDb dbFilePath initDb dbFilePath
@ -1358,9 +1391,9 @@ runZenithGUI config = do
0 0
[] []
0 0
(Just $ (Just (
pitmutt marked this conversation as resolved Outdated

Too many parenthesis, use $ instead.

Too many parenthesis, use `$` instead.
"Couldn't connect to Zebra on " <> "Couldn't connect to Zebra on " <>
host <> ":" <> showt port <> ". Check your configuration.") host <> ":" <> showt port <> ". Check your configuration." ) )
False False
314259000 314259000
(Just 30000) (Just 30000)
@ -1388,7 +1421,9 @@ runZenithGUI config = do
False False
False False
Nothing Nothing
hD ""
False
-- hD
startApp model handleEvent buildUI (params hD) startApp model handleEvent buildUI (params hD)
where where
params hd = params hd =