Compare commits
2 commits
2fb889b1a2
...
16b5acabf2
Author | SHA1 | Date | |
---|---|---|---|
16b5acabf2 | |||
e946df43f8 |
2 changed files with 101 additions and 4 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,3 +3,5 @@
|
|||
dist-newstyle/
|
||||
zenith.db
|
||||
zenith.log
|
||||
zenith.db-shm
|
||||
zenith.db-wal
|
||||
|
|
|
@ -40,6 +40,8 @@ import Brick.Widgets.Core
|
|||
, joinBorders
|
||||
, padAll
|
||||
, padBottom
|
||||
, padTop
|
||||
, setAvailableSize
|
||||
, str
|
||||
, strWrap
|
||||
, strWrapWith
|
||||
|
@ -48,6 +50,7 @@ import Brick.Widgets.Core
|
|||
, txtWrapWith
|
||||
, updateAttrMap
|
||||
, vBox
|
||||
, viewport
|
||||
, vLimit
|
||||
, withAttr
|
||||
, withBorderStyle
|
||||
|
@ -108,6 +111,8 @@ data Name
|
|||
| RecField
|
||||
| AmtField
|
||||
| MemoField
|
||||
| ABViewport
|
||||
| ABList
|
||||
deriving (Eq, Show, Ord)
|
||||
|
||||
data DialogInput = DialogInput
|
||||
|
@ -132,6 +137,7 @@ data DialogType
|
|||
| ASelect
|
||||
| SendTx
|
||||
| Blank
|
||||
| AdrBook
|
||||
|
||||
data DisplayType
|
||||
= AddrDisplay
|
||||
|
@ -169,6 +175,7 @@ data State = State
|
|||
, _eventDispatch :: !(BC.BChan Tick)
|
||||
, _timer :: !Int
|
||||
, _txForm :: !(Form SendInput () Name)
|
||||
, _abaddresses :: !(L.List Name (Entity AddressBook))
|
||||
}
|
||||
|
||||
makeLenses ''State
|
||||
|
@ -341,6 +348,34 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
C.hCenter
|
||||
(hBox [capCommand "↲ " "Send", capCommand "<esc> " "Cancel"]))
|
||||
Blank -> emptyWidget
|
||||
AdrBook ->
|
||||
D.renderDialog
|
||||
(D.dialog (Just $ str " Address Book ") Nothing 60)
|
||||
(withAttr abDefAttr $
|
||||
setAvailableSize (50,20) $
|
||||
viewport ABViewport BT.Vertical $
|
||||
vLimit 20 $
|
||||
hLimit 50 $
|
||||
vBox $ [vLimit 16 $
|
||||
hLimit 50 $
|
||||
vBox $ [ L.renderList listDrawAB True (s ^. abaddresses) ],
|
||||
-- [str "Addresses 1.................",
|
||||
-- str "Addresses 2.....",
|
||||
-- str "Addresses 3",
|
||||
-- str "Addresses 4"],
|
||||
padTop Max $
|
||||
vLimit 4 $
|
||||
hLimit 50 $
|
||||
withAttr abMBarAttr $
|
||||
vBox $ [C.hCenter $
|
||||
(capCommand "N" "ew Address" <+>
|
||||
capCommand "E" "dit Address" <+>
|
||||
capCommand3 "" "C" "opy Address"),
|
||||
C.hCenter $
|
||||
(capCommand "D" "elete Address" <+>
|
||||
capCommand "S" "end Zcash" <+>
|
||||
capCommand3 "E" "x" "it")]])
|
||||
|
||||
splashDialog :: State -> Widget Name
|
||||
splashDialog st =
|
||||
if st ^. splashBox
|
||||
|
@ -568,6 +603,14 @@ listDrawTx znet sel tx =
|
|||
then withAttr customAttr (txt $ "> " <> s)
|
||||
else txt $ " " <> s
|
||||
|
||||
listDrawAB :: Bool -> Entity AddressBook -> Widget Name
|
||||
listDrawAB sel ab =
|
||||
let selStr s =
|
||||
if sel
|
||||
then withAttr abSelAttr (txt $ "" <> s <> ">")
|
||||
else txt s
|
||||
in selStr $ addressBookDescrip (entityVal ab)
|
||||
|
||||
customAttr :: A.AttrName
|
||||
customAttr = L.listSelectedAttr <> A.attrName "custom"
|
||||
|
||||
|
@ -586,6 +629,15 @@ barDoneAttr = A.attrName "done"
|
|||
barToDoAttr :: A.AttrName
|
||||
barToDoAttr = A.attrName "remaining"
|
||||
|
||||
abDefAttr :: A.AttrName
|
||||
abDefAttr = A.attrName "abdefault"
|
||||
|
||||
abSelAttr :: A.AttrName
|
||||
abSelAttr = A.attrName "abselected"
|
||||
|
||||
abMBarAttr :: A.AttrName
|
||||
abMBarAttr = A.attrName "menubar"
|
||||
|
||||
validBarValue :: Float -> Float
|
||||
validBarValue = clamp 0 1
|
||||
|
||||
|
@ -694,6 +746,7 @@ appEvent (BT.AppEvent t) = do
|
|||
WSelect -> return ()
|
||||
ASelect -> return ()
|
||||
SendTx -> return ()
|
||||
AdrBook -> return ()
|
||||
Blank -> do
|
||||
if s ^. timer == 90
|
||||
then do
|
||||
|
@ -931,6 +984,39 @@ appEvent (BT.VtyEvent e) = do
|
|||
setFieldValid
|
||||
(isRecipientValid (fs ^. sendTo))
|
||||
RecField
|
||||
AdrBook -> do
|
||||
case e of
|
||||
V.EvKey (V.KChar 'x') [] ->
|
||||
BT.modify $ set dialogBox Blank
|
||||
V.EvKey (V.KChar 'c') [] -> do
|
||||
-- Copy Address to Clipboard
|
||||
case L.listSelectedElement $ s ^. abaddresses of
|
||||
Just (_, a) -> do
|
||||
liftIO $
|
||||
setClipboard $
|
||||
T.unpack $ addressBookAddress (entityVal a)
|
||||
BT.modify $
|
||||
set msg $
|
||||
"Address copied to Clipboard from >>\n" ++
|
||||
T.unpack (addressBookDescrip (entityVal a)) ++ "->\n" ++
|
||||
T.unpack (addressBookAddress (entityVal a)) ++ "!"
|
||||
BT.modify $ set displayBox MsgDisplay
|
||||
_ -> do
|
||||
BT.modify $ set msg $ "Error while copying the address!!"
|
||||
BT.modify $ set displayBox MsgDisplay
|
||||
-- Send Zcash transaction
|
||||
V.EvKey (V.KChar 's') [] -> do
|
||||
case L.listSelectedElement $ s ^. abaddresses of
|
||||
Just (_, a) -> do
|
||||
BT.modify $
|
||||
set txForm $
|
||||
mkSendForm (s ^. balance) (SendInput (addressBookAddress (entityVal a)) 0.0 "")
|
||||
BT.modify $ set dialogBox SendTx
|
||||
_ -> do
|
||||
BT.modify $ set msg $ "No receiver address available!!"
|
||||
BT.modify $ set displayBox MsgDisplay
|
||||
-- Process any other event
|
||||
ev -> BT.zoom abaddresses $ L.handleListEvent ev
|
||||
Blank -> do
|
||||
case e of
|
||||
V.EvKey (V.KChar '\t') [] -> focusRing %= F.focusNext
|
||||
|
@ -955,13 +1041,15 @@ appEvent (BT.VtyEvent e) = do
|
|||
mkSendForm (s ^. balance) (SendInput "" 0.0 "")
|
||||
BT.modify $ set dialogBox SendTx
|
||||
V.EvKey (V.KChar 'b') [] ->
|
||||
BT.modify $ set dialogBox ASelect
|
||||
BT.modify $ set dialogBox AdrBook
|
||||
ev ->
|
||||
case r of
|
||||
Just AList ->
|
||||
BT.zoom addresses $ L.handleListEvent ev
|
||||
Just TList ->
|
||||
BT.zoom transactions $ L.handleListEvent ev
|
||||
Just ABList ->
|
||||
BT.zoom transactions $ L.handleListEvent ev
|
||||
_anyName -> return ()
|
||||
where
|
||||
printMsg :: String -> BT.EventM Name State ()
|
||||
|
@ -986,6 +1074,9 @@ theMap =
|
|||
, (baseAttr, bg V.brightBlack)
|
||||
, (barDoneAttr, V.white `on` V.blue)
|
||||
, (barToDoAttr, V.white `on` V.black)
|
||||
, (abDefAttr, V.white `on` V.blue)
|
||||
, (abSelAttr, V.black `on` V.white)
|
||||
, (abMBarAttr, V.white `on` V.black)
|
||||
]
|
||||
|
||||
theApp :: M.App State Tick Name
|
||||
|
@ -1031,6 +1122,9 @@ runZenithCLI config = do
|
|||
if not (null walList)
|
||||
then zcashWalletLastSync $ entityVal $ head walList
|
||||
else 0
|
||||
|
||||
abookList <- getAdrBook pool $ zgb_net chainInfo
|
||||
|
||||
bal <-
|
||||
if not (null accList)
|
||||
then getBalance pool $ entityKey $ head accList
|
||||
|
@ -1059,7 +1153,7 @@ runZenithCLI config = do
|
|||
else Blank)
|
||||
True
|
||||
(mkInputForm $ DialogInput "Main")
|
||||
(F.focusRing [AList, TList])
|
||||
(F.focusRing [AList, TList,ABList])
|
||||
(zgb_blocks chainInfo)
|
||||
dbFilePath
|
||||
host
|
||||
|
@ -1071,6 +1165,7 @@ runZenithCLI config = do
|
|||
eventChan
|
||||
0
|
||||
(mkSendForm 0 $ SendInput "" 0.0 "")
|
||||
(L.list ABList (Vec.fromList abookList) 1)
|
||||
Left e -> do
|
||||
print $
|
||||
"No Zebra node available on port " <>
|
||||
|
|
Loading…
Reference in a new issue