|
|
|
#:import Window kivy.core.window.Window
|
|
|
|
#:import Factory kivy.factory.Factory
|
|
|
|
#:import _ electrum.i18n._
|
|
|
|
|
|
|
|
# Custom Global Widgets
|
|
|
|
|
|
|
|
<VGridLayout@GridLayout>:
|
|
|
|
rows: 1
|
|
|
|
size_hint: 1, None
|
|
|
|
height: self.minimum_height
|
|
|
|
|
|
|
|
<LightOptions@SpinnerOption>
|
|
|
|
font_size: '14sp'
|
|
|
|
border: 4, 4, 4, 4
|
|
|
|
color: 0.439, 0.439, 0.439, .8
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/action_button_group'
|
|
|
|
background_down: 'atlas://gui/kivy/theming/light/overflow_btn_dn'
|
|
|
|
size_hint_y: None
|
|
|
|
height: '48dp'
|
|
|
|
text_size: self.size[0] - dp(20), self.size[1]
|
|
|
|
halign: 'left'
|
|
|
|
valign: 'middle'
|
|
|
|
shorten: True
|
|
|
|
on_press:
|
|
|
|
ddn = self.parent.parent
|
|
|
|
Factory.Animation(opacity=0, d=.25).start(ddn)
|
|
|
|
|
|
|
|
<OppositeDropDown@DropDown>
|
|
|
|
#auto_width: False
|
|
|
|
size_hint: None, None
|
|
|
|
size: self.container.minimum_size if self.container else (0, 0)
|
|
|
|
on_container: if args[1]: self.container.padding = '4dp', '4dp', '4dp', '4dp'
|
|
|
|
canvas.before:
|
|
|
|
Color:
|
|
|
|
rgba: 1, 1, 1, 1
|
|
|
|
BorderImage:
|
|
|
|
pos:self.pos
|
|
|
|
border: 20, 20, 20, 20
|
|
|
|
source: 'atlas://gui/kivy/theming/light/dropdown_background'
|
|
|
|
size: self.size
|
|
|
|
|
|
|
|
<OppositeSpinner@CSpinner>
|
|
|
|
dropdown_cls: Factory.OppositeDropDown
|
|
|
|
option_cls: Factory.LightOptions
|
|
|
|
border: 20, 20, 9, 9
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/action_group_dark'
|
|
|
|
background_down: self.background_normal
|
|
|
|
values: ('Copy to clipboard', 'Send Payment')
|
|
|
|
size_hint: None, 1
|
|
|
|
width: '12dp'
|
|
|
|
on_release:
|
|
|
|
ddn = self._dropdown
|
|
|
|
ddn.opacity = 0
|
|
|
|
Factory.Animation(opacity=1, d=.25).start(ddn)
|
|
|
|
|
|
|
|
|
|
|
|
<BlueSpinner@BoxLayout>
|
|
|
|
foreground_color: 1, 1, 1, 1
|
|
|
|
spacing: '9dp'
|
|
|
|
text: ''
|
|
|
|
values: ('', )
|
|
|
|
icon: ''
|
|
|
|
Image:
|
|
|
|
source: root.icon
|
|
|
|
size_hint: None, None
|
|
|
|
size: '22dp', '22dp'
|
|
|
|
pos_hint: {'center_y': .5}
|
|
|
|
OppositeSpinner:
|
|
|
|
color: root.foreground_color
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/action_group_light'
|
|
|
|
markup: False
|
|
|
|
shorten: True
|
|
|
|
font_size: '16dp'
|
|
|
|
size_hint: 1, .7
|
|
|
|
pos_hint: {'center_y': .5}
|
|
|
|
text: root.text
|
|
|
|
text_size: self.size
|
|
|
|
halign: 'left'
|
|
|
|
valign: 'middle'
|
|
|
|
on_text:
|
|
|
|
root.text = args[1]
|
|
|
|
values: root.values
|
|
|
|
|
|
|
|
|
|
|
|
<IconButton@ButtonBehavior+Image>
|
|
|
|
allow_stretch: True
|
|
|
|
size_hint_x: None
|
|
|
|
width: self.height
|
|
|
|
canvas:
|
|
|
|
BorderImage:
|
|
|
|
border: (10, 10, 10, 10)
|
|
|
|
source:
|
|
|
|
'atlas://gui/kivy/theming/light/' + ('tab_btn'\
|
|
|
|
if root.state == 'normal' else 'icon_border')
|
|
|
|
size: root.size
|
|
|
|
pos: root.pos
|
|
|
|
|
|
|
|
|
|
|
|
<ELTextInput>
|
|
|
|
padding: '10dp', '4dp'
|
|
|
|
background_color: (0.238, 0.589, .996, 1) if self.focus else self.foreground_color
|
|
|
|
foreground_color: 0.531, 0.531, 0.531, 1
|
|
|
|
background_active: 'atlas://gui/kivy/theming/light/textinput_active'
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/textinput_active'
|
|
|
|
|
|
|
|
|
|
|
|
###########################
|
|
|
|
# Global Defaults
|
|
|
|
###########################
|
|
|
|
<TextInput>
|
|
|
|
on_focus: app._focused_widget = root
|
|
|
|
|
|
|
|
<Label>
|
|
|
|
markup: True
|
|
|
|
font_name: 'Roboto'
|
|
|
|
font_size: '16sp'
|
|
|
|
|
|
|
|
<ListItemButton>
|
|
|
|
font_size: '12sp'
|
|
|
|
|
|
|
|
#########################
|
|
|
|
# Dialogs
|
|
|
|
#########################
|
|
|
|
|
|
|
|
<InfoBubble>
|
|
|
|
size_hint: None, None
|
|
|
|
width: '270dp' if root.fs else min(self.width, dp(270))
|
|
|
|
height: self.width if self.fs else (lbl.texture_size[1] + dp(27))
|
|
|
|
BoxLayout:
|
|
|
|
padding: '5dp' if root.fs else 0
|
|
|
|
Widget:
|
|
|
|
size_hint: None, 1
|
|
|
|
width: '4dp' if root.fs else '2dp'
|
|
|
|
Image:
|
|
|
|
id: img
|
|
|
|
source: root.icon
|
|
|
|
mipmap: True
|
|
|
|
size_hint: None, 1
|
|
|
|
width: (root.width - dp(20)) if root.fs else (0 if not root.icon else '32dp')
|
|
|
|
Widget:
|
|
|
|
size_hint_x: None
|
|
|
|
width: '5dp'
|
|
|
|
Label:
|
|
|
|
id: lbl
|
|
|
|
markup: True
|
|
|
|
font_size: '12sp'
|
|
|
|
text: root.message
|
|
|
|
text_size: self.width, None
|
|
|
|
valign: 'middle'
|
|
|
|
size_hint: 1, 1
|
|
|
|
width: 0 if root.fs else (root.width - img.width)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<WalletActionPrevious@ActionPrevious>
|
|
|
|
app_icon: 'atlas://gui/kivy/theming/light/' + ('wallets' if app.ui_mode[0] != 't' else 'tab_btn')
|
|
|
|
with_previous: False
|
|
|
|
size_hint: None, 1
|
|
|
|
mipmap: True
|
|
|
|
on_release: app.root.children[0].toggle_drawer()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<SendReceiveCardTop@GridLayout>
|
|
|
|
canvas.before:
|
|
|
|
BorderImage:
|
|
|
|
border: 9, 9, 9, 9
|
|
|
|
source: 'atlas://gui/kivy/theming/light/card_top'
|
|
|
|
size: self.size
|
|
|
|
pos:self.pos
|
|
|
|
padding: '12dp', '22dp', '12dp', 0
|
|
|
|
cols: 1
|
|
|
|
size_hint: 1, None
|
|
|
|
height: '120dp'
|
|
|
|
spacing: '4dp'
|
|
|
|
|
|
|
|
<SendReceiveBlueBottom@GridLayout>
|
|
|
|
canvas.before:
|
|
|
|
Color:
|
|
|
|
rgba: .238, .585, .878, 1
|
|
|
|
BorderImage:
|
|
|
|
border: 9, 9, 9, 9
|
|
|
|
source: 'atlas://gui/kivy/theming/light/card_bottom'
|
|
|
|
size: self.size
|
|
|
|
pos: self.pos
|
|
|
|
|
|
|
|
item_height: dp(42)
|
|
|
|
foreground_color: .843, .914, .972, 1
|
|
|
|
cols: 1
|
|
|
|
padding: '12dp', 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<CardSeparator@Widget>
|
|
|
|
size_hint: 1, None
|
|
|
|
height: dp(1)
|
|
|
|
color: .909, .909, .909, 1
|
|
|
|
canvas:
|
|
|
|
Color:
|
|
|
|
rgba: root.color if root.color else (0, 0, 0, 0)
|
|
|
|
Rectangle:
|
|
|
|
size: self.size
|
|
|
|
pos: self.pos
|
|
|
|
|
|
|
|
<AddressSelector@BlueSpinner>
|
|
|
|
icon: 'atlas://gui/kivy/theming/light/globe'
|
|
|
|
values: [] #app.wallet.addresses() if app.wallet else []
|
|
|
|
text: _("Select Your address")
|
|
|
|
|
|
|
|
<TextInputBlue@TextInput>
|
|
|
|
padding: '5dp'
|
|
|
|
size_hint: 1, None
|
|
|
|
height: '27dp'
|
|
|
|
pos_hint: {'center_y':.5}
|
|
|
|
multiline: False
|
|
|
|
hint_text_color: self.foreground_color
|
|
|
|
foreground_color: .843, .914, .972, 1
|
|
|
|
background_color: 1, 1, 1, 1
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
|
|
|
|
background_active: 'atlas://gui/kivy/theming/light/textinput_active'
|
|
|
|
|
|
|
|
|
|
|
|
<KButton@Button>:
|
|
|
|
size_hint: 1, None
|
|
|
|
height: '48dp'
|
|
|
|
on_release: self.label.amount = app.update_amount(self.label.amount, self.text)
|
|
|
|
|
|
|
|
|
|
|
|
<TabbedPanelStrip>:
|
|
|
|
on_parent:
|
|
|
|
if self.parent: self.parent.bar_width = 0
|
|
|
|
|
|
|
|
|
|
|
|
<TabbedCarousel>
|
|
|
|
carousel: carousel
|
|
|
|
do_default_tab: False
|
|
|
|
Carousel:
|
|
|
|
scroll_timeout: 190
|
|
|
|
anim_type: 'out_quart'
|
|
|
|
min_move: .05
|
|
|
|
anim_move_duration: .1
|
|
|
|
anim_cancel_duration: .54
|
|
|
|
scroll_distance: '10dp'
|
|
|
|
on_index: root.on_index(*args)
|
|
|
|
id: carousel
|
|
|
|
|
|
|
|
|
|
|
|
<CarouselIndicator@TabbedCarousel>
|
|
|
|
tab_pos: 'bottom_mid'
|
|
|
|
tab_height: '32dp'
|
|
|
|
tab_width: self.tab_height
|
|
|
|
#background_image: 'atlas://data/images/defaulttheme/action_item'
|
|
|
|
strip_border: 0, 0, 0, 0
|
|
|
|
|
|
|
|
<CloseButton@IconButton>
|
|
|
|
source: 'atlas://gui/kivy/theming/light/closebutton'
|
|
|
|
opacity: 1 if self.state == 'normal' else .75
|
|
|
|
size_hint: None, None
|
|
|
|
size: '27dp', '27dp'
|
|
|
|
|
|
|
|
<-CarouselDialog>
|
|
|
|
header_color: '#707070ff'
|
|
|
|
text_color: 0.701, 0.701, 0.701, 1
|
|
|
|
title_size: '13sp'
|
|
|
|
title: ''
|
|
|
|
separator_color: 0.89, 0.89, 0.89, 1
|
|
|
|
background: 'atlas://gui/kivy/theming/light/tab_btn'
|
|
|
|
carousel_content: carousel_content
|
|
|
|
canvas.before:
|
|
|
|
Color:
|
|
|
|
rgba: 0, 0, 0, .9
|
|
|
|
Rectangle:
|
|
|
|
size: Window.size
|
|
|
|
pos: 0, 0
|
|
|
|
Color:
|
|
|
|
rgba: 1, 1, 1, 1
|
|
|
|
BorderImage:
|
|
|
|
border: 12, 12, 12, 12
|
|
|
|
source: 'atlas://gui/kivy/theming/light/dialog'
|
|
|
|
size: root.width, root.height - self.carousel_content.tab_height if self.carousel_content else 0
|
|
|
|
pos: root.x, self.y + self.carousel_content.tab_height if self.carousel_content else 10
|
|
|
|
BoxLayout:
|
|
|
|
orientation: 'vertical'
|
|
|
|
GridLayout:
|
|
|
|
cols: 1
|
|
|
|
size_hint: 1, None
|
|
|
|
height: self.minimum_height
|
|
|
|
padding: 0, '7sp'
|
|
|
|
Label:
|
|
|
|
font_size: root.title_size
|
|
|
|
text: u'[color={}]{}[/color]'.format(root.header_color, root.title)
|
|
|
|
text_size: self.width, None
|
|
|
|
halign: 'left'
|
|
|
|
size_hint: 1, None
|
|
|
|
height: self.texture_size[1]
|
|
|
|
CardSeparator:
|
|
|
|
color: root.separator_color
|
|
|
|
height: root.separator_height
|
|
|
|
FloatLayout:
|
|
|
|
size_hint: None, None
|
|
|
|
size: 0, 0
|
|
|
|
CloseButton:
|
|
|
|
id: but_close
|
|
|
|
top: root.top - dp(10)
|
|
|
|
right: root.right - dp(10)
|
|
|
|
on_release: root.dismiss()
|
|
|
|
CarouselIndicator:
|
|
|
|
id: carousel_content
|
|
|
|
|
|
|
|
|
|
|
|
<CleanHeader@TabbedPanelHeader>
|
|
|
|
border: 0, 0, 16, 0
|
|
|
|
markup: False
|
|
|
|
text_size: self.size
|
|
|
|
halign: 'center'
|
|
|
|
valign: 'middle'
|
|
|
|
bold: True
|
|
|
|
font_size: '12.5sp'
|
|
|
|
background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
|
|
|
|
background_disabled_normal: 'atlas://gui/kivy/theming/light/tab_btn_disabled'
|
|
|
|
background_down: 'atlas://gui/kivy/theming/light/tab_btn_pressed'
|
|
|
|
#canvas.before:
|
|
|
|
# Color:
|
|
|
|
# rgba: .6, .6, .6, .7
|
|
|
|
# Rectangle:
|
|
|
|
# size: self.size
|
|
|
|
# pos: self.x + 1, self.y - 1
|
|
|
|
# texture: self.texture
|
|
|
|
|
|
|
|
|
|
|
|
<ColoredLabel@Label>:
|
|
|
|
font_size: '48sp'
|
|
|
|
color: (.6, .6, .6, 1)
|
|
|
|
canvas.before:
|
|
|
|
Color:
|
|
|
|
rgb: (.9, .9, .9)
|
|
|
|
Rectangle:
|
|
|
|
pos: self.x + sp(2), self.y + sp(2)
|
|
|
|
size: self.width - sp(4), self.height - sp(4)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ScreenTabs@Screen>
|
|
|
|
TabbedCarousel:
|
|
|
|
id: panel
|
|
|
|
tab_height: '48dp'
|
|
|
|
#default_tab: send_tab
|
|
|
|
strip_border: 0, 0, 0, 0
|
|
|
|
HistoryScreen:
|
|
|
|
id: history_screen
|
|
|
|
tab: history_tab
|
|
|
|
SendScreen:
|
|
|
|
id: send_screen
|
|
|
|
tab: send_tab
|
|
|
|
ReceiveScreen:
|
|
|
|
id: receive_screen
|
|
|
|
tab: receive_tab
|
|
|
|
ContactsScreen:
|
|
|
|
id: contacts_screen
|
|
|
|
tab: contacts_tab
|
|
|
|
CleanHeader:
|
|
|
|
id: history_tab
|
|
|
|
text: _('History')
|
|
|
|
slide: 0
|
|
|
|
CleanHeader:
|
|
|
|
id: send_tab
|
|
|
|
text: _('Send')
|
|
|
|
slide: 1
|
|
|
|
CleanHeader:
|
|
|
|
id: receive_tab
|
|
|
|
text: _('Receive')
|
|
|
|
slide: 2
|
|
|
|
CleanHeader:
|
|
|
|
id: contacts_tab
|
|
|
|
text: _('Contacts')
|
|
|
|
slide: 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BoxLayout:
|
|
|
|
|
|
|
|
orientation: 'vertical'
|
|
|
|
|
|
|
|
canvas.before:
|
|
|
|
Color:
|
|
|
|
rgb: .6, .6, .6
|
|
|
|
Rectangle:
|
|
|
|
size: self.size
|
|
|
|
source: 'gui/kivy/data/background.png'
|
|
|
|
|
|
|
|
ActionBar:
|
|
|
|
|
|
|
|
ActionView:
|
|
|
|
id: av
|
|
|
|
|
|
|
|
ActionPrevious:
|
|
|
|
app_icon: 'atlas://gui/kivy/theming/light/logo'
|
|
|
|
with_previous: False
|
|
|
|
on_release: app.on_back()
|
|
|
|
|
|
|
|
ActionButton:
|
|
|
|
id: action_status
|
|
|
|
important: True
|
|
|
|
size_hint: 1, 1
|
|
|
|
markup: True
|
|
|
|
mipmap: True
|
|
|
|
bold: True
|
|
|
|
markup: True
|
|
|
|
color: 1, 1, 1, 1
|
|
|
|
text:
|
|
|
|
"[color=#777777]{}[/color]"\
|
|
|
|
.format(app.status)
|
|
|
|
font_size: '22dp'
|
|
|
|
minimum_width: '1dp'
|
|
|
|
|
|
|
|
ActionOverflow:
|
|
|
|
id: ao
|
|
|
|
size_hint: 1, 1
|
|
|
|
ActionButton:
|
|
|
|
text: _('Network')
|
|
|
|
on_press: ao._dropdown.dismiss()
|
|
|
|
on_release: app.popup_dialog('network')
|
|
|
|
ActionButton:
|
|
|
|
text: _('Settings')
|
|
|
|
on_press: ao._dropdown.dismiss()
|
|
|
|
on_release: app.popup_dialog('settings')
|
|
|
|
ActionButton:
|
|
|
|
text: _('Wallets')
|
|
|
|
on_press: ao._dropdown.dismiss()
|
|
|
|
on_release: app.popup_dialog('wallet')
|
|
|
|
ActionButton:
|
|
|
|
text: _('Plugins')
|
|
|
|
on_press: ao._dropdown.dismiss()
|
|
|
|
on_release: app.popup_dialog('plugins')
|
|
|
|
|
|
|
|
ScreenManager:
|
|
|
|
id: manager
|
|
|
|
ScreenTabs:
|
|
|
|
id: tabs
|