tdscancel_dialog.py - electrum - Electrum Bitcoin wallet
HTML git clone https://git.parazyd.org/electrum
DIR Log
DIR Files
DIR Refs
DIR Submodules
---
tdscancel_dialog.py (3368B)
---
1 from typing import TYPE_CHECKING
2
3 from kivy.app import App
4 from kivy.factory import Factory
5 from kivy.properties import ObjectProperty
6 from kivy.lang import Builder
7
8 from electrum.gui.kivy.i18n import _
9
10 if TYPE_CHECKING:
11 from ...main_window import ElectrumWindow
12
13
14 Builder.load_string('''
15 <DSCancelDialog@Popup>
16 title: _('Cancel (double-spend) transaction')
17 size_hint: 0.8, 0.8
18 pos_hint: {'top':0.9}
19 BoxLayout:
20 orientation: 'vertical'
21 padding: '10dp'
22
23 GridLayout:
24 height: self.minimum_height
25 size_hint_y: None
26 cols: 1
27 spacing: '10dp'
28 BoxLabel:
29 id: old_fee
30 text: _('Current Fee')
31 value: ''
32 BoxLabel:
33 id: old_feerate
34 text: _('Current Fee rate')
35 value: ''
36 Label:
37 id: tooltip1
38 text: ''
39 size_hint_y: None
40 Label:
41 id: tooltip2
42 text: ''
43 size_hint_y: None
44 Slider:
45 id: slider
46 range: 0, 4
47 step: 1
48 on_value: root.on_slider(self.value)
49 Widget:
50 size_hint: 1, 1
51 BoxLayout:
52 orientation: 'horizontal'
53 size_hint: 1, 0.5
54 Button:
55 text: 'Cancel'
56 size_hint: 0.5, None
57 height: '48dp'
58 on_release: root.dismiss()
59 Button:
60 text: 'OK'
61 size_hint: 0.5, None
62 height: '48dp'
63 on_release:
64 root.dismiss()
65 root.on_ok()
66 ''')
67
68 class DSCancelDialog(Factory.Popup):
69
70 def __init__(self, app: 'ElectrumWindow', fee, size, callback):
71 Factory.Popup.__init__(self)
72 self.app = app
73 self.init_fee = fee
74 self.tx_size = size
75 self.callback = callback
76 self.config = app.electrum_config
77 self.mempool = self.config.use_mempool_fees()
78 self.dynfees = self.config.is_dynfee() and bool(self.app.network) and self.config.has_dynamic_fees_ready()
79 self.ids.old_fee.value = self.app.format_amount_and_units(self.init_fee)
80 self.ids.old_feerate.value = self.app.format_fee_rate(fee / self.tx_size * 1000)
81 self.update_slider()
82 self.update_text()
83
84 def update_text(self):
85 pos = int(self.ids.slider.value)
86 new_fee_rate = self.get_fee_rate()
87 text, tooltip = self.config.get_fee_text(pos, self.dynfees, self.mempool, new_fee_rate)
88 self.ids.tooltip1.text = text
89 self.ids.tooltip2.text = tooltip
90
91 def update_slider(self):
92 slider = self.ids.slider
93 maxp, pos, fee_rate = self.config.get_fee_slider(self.dynfees, self.mempool)
94 slider.range = (0, maxp)
95 slider.step = 1
96 slider.value = pos
97
98 def get_fee_rate(self):
99 pos = int(self.ids.slider.value)
100 if self.dynfees:
101 fee_rate = self.config.depth_to_fee(pos) if self.mempool else self.config.eta_to_fee(pos)
102 else:
103 fee_rate = self.config.static_fee(pos)
104 return fee_rate # sat/kbyte
105
106 def on_ok(self):
107 new_fee_rate = self.get_fee_rate() / 1000
108 self.callback(new_fee_rate)
109
110 def on_slider(self, value):
111 self.update_text()