/
txn_preview.go
101 lines (86 loc) 路 2.31 KB
/
txn_preview.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package view
import (
"github.com/dyng/ramen/internal/view/util"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
const (
// txnPreviewDialogMinHeight is the minimum height of the transaction preview dialog.
txnPreviewDialogMinHeight = 20
// txnPreviewDialogMinWidth is the minimum width of the transaction preview dialog.
txnPreviewDialogMinWidth = 50
)
type TxnPreviewDialog struct {
*TransactionDetail
app *App
display bool
lastFocus tview.Primitive
}
func NewTxnPreviewDialog(app *App) *TxnPreviewDialog {
d := &TxnPreviewDialog{
TransactionDetail: NewTransactionDetail(app),
app: app,
display: false,
}
// setup keymap
d.initKeymap()
return d
}
func (d *TxnPreviewDialog) Show() {
if !d.display {
// save last focused element
d.lastFocus = d.app.GetFocus()
d.Display(true)
d.app.SetFocus(d)
}
}
func (d *TxnPreviewDialog) Hide() {
if d.display {
d.Display(false)
d.app.SetFocus(d.lastFocus)
}
}
func (d *TxnPreviewDialog) initKeymap() {
InitKeymap(d, d.app)
}
// KeyMaps implements KeymapPrimitive
func (d *TxnPreviewDialog) KeyMaps() util.KeyMaps {
keymaps := make(util.KeyMaps, 0)
keymaps = append(keymaps, util.NewSimpleKey(tcell.KeyEsc, d.Hide))
keymaps = append(keymaps, util.NewSimpleKey(tcell.KeyEnter, d.Hide))
keymaps = append(keymaps, util.NewSimpleKey(util.KeySpace, d.Hide))
keymaps = append(keymaps, util.NewSimpleKey(util.KeyF, func() {
d.Hide()
d.ViewSender()
}))
keymaps = append(keymaps, util.NewSimpleKey(util.KeyT, func() {
d.Hide()
d.ViewReceiver()
}))
return keymaps
}
func (d *TxnPreviewDialog) Display(display bool) {
d.display = display
}
func (d *TxnPreviewDialog) IsDisplay() bool {
return d.display
}
// Draw implements tview.Primitive
func (d *TxnPreviewDialog) Draw(screen tcell.Screen) {
if d.display {
d.TransactionDetail.Draw(screen)
}
}
func (d *TxnPreviewDialog) SetCentral(x int, y int, width int, height int) {
dialogWidth := width - width/3
dialogHeight := height / 2
if dialogWidth < txnPreviewDialogMinWidth {
dialogWidth = txnPreviewDialogMinWidth
}
if dialogHeight < notificationMinHeight {
dialogHeight = notificationMinHeight
}
dialogX := x + ((width - dialogWidth) / 2)
dialogY := y + ((height - dialogHeight) / 2)
d.TransactionDetail.SetRect(dialogX, dialogY, dialogWidth, dialogHeight)
}