KV directory added
This commit is contained in:
parent
9c872ef676
commit
153b4dc1b2
26
src/bitmessagekivy/kv/addressbook.kv
Normal file
26
src/bitmessagekivy/kv/addressbook.kv
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<AddressBook>:
|
||||||
|
name: 'addressbook'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
SearchBar:
|
||||||
|
id: address_search
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 0, 0, 5]
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
ComposerButton:
|
25
src/bitmessagekivy/kv/allmails.kv
Normal file
25
src/bitmessagekivy/kv/allmails.kv
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<Allmails>:
|
||||||
|
name: 'allmails'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 20, 0, 5]
|
||||||
|
spacing: dp(5)
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
ComposerButton:
|
58
src/bitmessagekivy/kv/chat_list.kv
Normal file
58
src/bitmessagekivy/kv/chat_list.kv
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<ChatList>:
|
||||||
|
name: 'chlist'
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
MDTabs:
|
||||||
|
id: chat_panel
|
||||||
|
tab_display_mode:'text'
|
||||||
|
|
||||||
|
Tab:
|
||||||
|
text: app.tr._("Chats")
|
||||||
|
BoxLayout:
|
||||||
|
id: chat_box
|
||||||
|
orientation: 'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Caption'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._('No Chat')
|
||||||
|
halign: 'center'
|
||||||
|
size_hint_y: None
|
||||||
|
bold: True
|
||||||
|
valign: 'top'
|
||||||
|
# OneLineAvatarListItem:
|
||||||
|
# text: "Single-line item with avatar"
|
||||||
|
# divider: None
|
||||||
|
# _no_ripple_effect: True
|
||||||
|
# ImageLeftWidget:
|
||||||
|
# source: './images/text_images/A.png'
|
||||||
|
# OneLineAvatarListItem:
|
||||||
|
# text: "Single-line item with avatar"
|
||||||
|
# divider: None
|
||||||
|
# _no_ripple_effect: True
|
||||||
|
# ImageLeftWidget:
|
||||||
|
# source: './images/text_images/B.png'
|
||||||
|
# OneLineAvatarListItem:
|
||||||
|
# text: "Single-line item with avatar"
|
||||||
|
# divider: None
|
||||||
|
# _no_ripple_effect: True
|
||||||
|
# ImageLeftWidget:
|
||||||
|
# source: './images/text_images/A.png'
|
||||||
|
Tab:
|
||||||
|
text: app.tr._("Contacts")
|
||||||
|
BoxLayout:
|
||||||
|
id: contact_box
|
||||||
|
orientation: 'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
45
src/bitmessagekivy/kv/chat_room.kv
Normal file
45
src/bitmessagekivy/kv/chat_room.kv
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#:import C kivy.utils.get_color_from_hex
|
||||||
|
|
||||||
|
<ChatRoom>:
|
||||||
|
name: 'chroom'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
ScrollView:
|
||||||
|
Label:
|
||||||
|
id: chat_logs
|
||||||
|
text: ''
|
||||||
|
color: C('#101010')
|
||||||
|
text_size: (self.width, None)
|
||||||
|
halign: 'left'
|
||||||
|
valign: 'top'
|
||||||
|
padding: (0, 0) # fixed in Kivy 1.8.1
|
||||||
|
size_hint: (1, None)
|
||||||
|
height: self.texture_size[1]
|
||||||
|
markup: True
|
||||||
|
font_size: sp(20)
|
||||||
|
BoxLayout:
|
||||||
|
height: 50
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: 0
|
||||||
|
size_hint: (1, None)
|
||||||
|
|
||||||
|
TextInput:
|
||||||
|
id: message
|
||||||
|
size_hint: (1, 1)
|
||||||
|
multiline: False
|
||||||
|
font_size: sp(20)
|
||||||
|
on_text_validate: root.send_msg()
|
||||||
|
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._("Send")
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
size_hint: (0.3, 1)
|
||||||
|
pos_hint: {"center_x": .5}
|
||||||
|
on_press: root.send_msg()
|
62
src/bitmessagekivy/kv/common_widgets.kv
Normal file
62
src/bitmessagekivy/kv/common_widgets.kv
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<ArrowImg@Image>:
|
||||||
|
source: app.image_path +('/down-arrow.png' if self.parent.is_open == True else '/right-arrow.png')
|
||||||
|
size: 15, 15
|
||||||
|
x: self.parent.x + self.parent.width - self.width - 5
|
||||||
|
y: self.parent.y + self.parent.height/2 - self.height + 5
|
||||||
|
|
||||||
|
<SearchBar@BoxLayout>:
|
||||||
|
# id: search_bar
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
|
||||||
|
MDIconButton:
|
||||||
|
icon: 'magnify'
|
||||||
|
|
||||||
|
MDTextField:
|
||||||
|
id: search_field
|
||||||
|
hint_text: 'Search'
|
||||||
|
on_text: app.searchQuery(self)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
<Loader@MDSpinner>:
|
||||||
|
id: spinner
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(46), dp(46)
|
||||||
|
pos_hint: {'center_x': 0.5, 'center_y': 0.5}
|
||||||
|
active: False
|
||||||
|
|
||||||
|
<ComposerButton@BoxLayout>:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(56)
|
||||||
|
spacing: '10dp'
|
||||||
|
pos_hint: {'center_x':0.45, 'center_y': .1}
|
||||||
|
|
||||||
|
Widget:
|
||||||
|
|
||||||
|
MDFloatingActionButton:
|
||||||
|
icon: 'plus'
|
||||||
|
opposite_colors: True
|
||||||
|
elevation_normal: 8
|
||||||
|
md_bg_color: [0.941, 0, 0,1]
|
||||||
|
on_press: app.root.ids.scr_mngr.current = 'create'
|
||||||
|
on_press: app.clear_composer()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ToggleBtn>:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(36), dp(48)
|
||||||
|
pos_hint: {'center_x': .95, 'center_y': .4}
|
||||||
|
on_active: app.root.ids.sc10.toggleAction(self)
|
||||||
|
|
||||||
|
<CustomTwoLineAvatarIconListItem>:
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
id: set_clr
|
||||||
|
# rgba: 0.5, 0.5, 0.5, 0.5
|
||||||
|
rgba: 0,0,0,0
|
||||||
|
Rectangle: #woohoo!!!
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
28
src/bitmessagekivy/kv/credits.kv
Normal file
28
src/bitmessagekivy/kv/credits.kv
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<Credits>:
|
||||||
|
name: 'credits'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
OneLineListTitle:
|
||||||
|
id: cred
|
||||||
|
text: app.tr._("Available Credits")
|
||||||
|
divider: None
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
_no_ripple_effect: True
|
||||||
|
long_press_time: 1
|
||||||
|
|
||||||
|
OneLineListTitle:
|
||||||
|
id: cred
|
||||||
|
text: app.tr._(root.available_credits)
|
||||||
|
divider: None
|
||||||
|
font_style: 'H5'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
_no_ripple_effect: True
|
||||||
|
long_press_time: 1
|
||||||
|
AnchorLayout:
|
||||||
|
MDRaisedButton:
|
||||||
|
height: dp(38)
|
||||||
|
text: app.tr._("+Add more credits")
|
||||||
|
on_press: app.root.ids.scr_mngr.current = 'payment'
|
23
src/bitmessagekivy/kv/draft.kv
Normal file
23
src/bitmessagekivy/kv/draft.kv
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<Draft>:
|
||||||
|
name: 'draft'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 20, 0, 5]
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
ComposerButton:
|
39
src/bitmessagekivy/kv/inbox.kv
Normal file
39
src/bitmessagekivy/kv/inbox.kv
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<Inbox>:
|
||||||
|
name: 'inbox'
|
||||||
|
#transition: NoTransition()
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
SearchBar:
|
||||||
|
id:inbox_search
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 0, 0, 5]
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
#FloatLayout:
|
||||||
|
# MDScrollViewRefreshLayout:
|
||||||
|
# id: refresh_layout
|
||||||
|
# refresh_callback: root.refresh_callback
|
||||||
|
# root_layout: root.set_root_layout()
|
||||||
|
# MDList:
|
||||||
|
# id: ml
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
ComposerButton:
|
||||||
|
|
||||||
|
<TimeTagRightSampleWidget>:
|
||||||
|
size_hint:(None, None)
|
||||||
|
font_style: 'Caption'
|
||||||
|
halign: 'center'
|
264
src/bitmessagekivy/kv/login.kv
Normal file
264
src/bitmessagekivy/kv/login.kv
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
|
||||||
|
<Login>:
|
||||||
|
name:"login"
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
|
||||||
|
#buttons-area-outer
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: .53
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
|
||||||
|
ScreenManager:
|
||||||
|
id: check_screenmgr
|
||||||
|
Screen:
|
||||||
|
name: "check_screen"
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
padding: 0, dp(5), 0, dp(5)
|
||||||
|
spacing: dp(5)
|
||||||
|
|
||||||
|
#label area
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(50)
|
||||||
|
MDLabel:
|
||||||
|
text: app.tr._("Select method to make an address:")
|
||||||
|
bold: True
|
||||||
|
halign: "center"
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: .4,.4,.4,1
|
||||||
|
|
||||||
|
#upper-checkbor-area
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(40)
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: self.minimum_width
|
||||||
|
|
||||||
|
#check-container
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(40)
|
||||||
|
Check:
|
||||||
|
active: True
|
||||||
|
|
||||||
|
#text-container
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(200)
|
||||||
|
MDLabel:
|
||||||
|
text: app.tr._("Random Number Generator")
|
||||||
|
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(40)
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: self.minimum_width
|
||||||
|
|
||||||
|
#check-container
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(40)
|
||||||
|
Check:
|
||||||
|
|
||||||
|
#text-container
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(200)
|
||||||
|
MDLabel:
|
||||||
|
text: app.tr._("Pseudo Number Generator")
|
||||||
|
AnchorLayout:
|
||||||
|
MDFillRoundFlatIconButton:
|
||||||
|
icon: "chevron-double-right"
|
||||||
|
text: app.tr._("Proceed Next")
|
||||||
|
on_release:
|
||||||
|
app.root.ids.scr_mngr.current = 'random'
|
||||||
|
on_press:
|
||||||
|
app.root.ids.sc7.reset_address_label()
|
||||||
|
|
||||||
|
#info-area-outer
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: .47
|
||||||
|
padding: dp(7)
|
||||||
|
InfoLayout:
|
||||||
|
orientation:"vertical"
|
||||||
|
padding: 0, dp(5), 0, dp(5)
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba:1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
Color:
|
||||||
|
rgba: app.theme_cls.primary_color
|
||||||
|
Line:
|
||||||
|
rounded_rectangle: (self.pos[0]+4, self.pos[1]+4, self.width-8,self.height-8, 10, 10, 10, 10, 50)
|
||||||
|
width: dp(1)
|
||||||
|
ScreenManager:
|
||||||
|
id: info_screenmgr
|
||||||
|
|
||||||
|
Screen:
|
||||||
|
name: "info1"
|
||||||
|
ScrollView:
|
||||||
|
bar_width:0
|
||||||
|
do_scroll_x: False
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
|
||||||
|
#note area
|
||||||
|
ContentHead:
|
||||||
|
section_name: "NOTE:"
|
||||||
|
ContentBody:
|
||||||
|
section_text: ("You may generate addresses by using either random numbers or by using a pass-phrase.If you use a pass-phrase, the address is called a deterministic address. The Random Number option is selected by default but deterministic addresses may have several pros and cons.")
|
||||||
|
|
||||||
|
|
||||||
|
#pros area
|
||||||
|
ContentHead:
|
||||||
|
section_name: "PROS:"
|
||||||
|
ContentBody:
|
||||||
|
section_text: ("You can re-create your addresses on any computer from memory you need-not-to worry about backing up your keys.dat file as long as you can remember your pass-phrase.")
|
||||||
|
|
||||||
|
#cons area
|
||||||
|
ContentHead:
|
||||||
|
section_name: "CONS:"
|
||||||
|
ContentBody:
|
||||||
|
section_text: ("You must remember (or write down) your address version number and the stream number along with your pass-phrase.If you choose a weak pass-phrase and someone on the internet can brute-force it, they can read your messages and send messages as you.")
|
||||||
|
|
||||||
|
<Random>:
|
||||||
|
name:"random"
|
||||||
|
ScrollView:
|
||||||
|
id:add_random_bx
|
||||||
|
|
||||||
|
<RandomBoxlayout>:
|
||||||
|
orientation: "vertical"
|
||||||
|
#buttons-area-outer
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
# padding: 0, dp(5), 0, dp(5)
|
||||||
|
# spacing: dp(5)
|
||||||
|
size_hint_y: .53
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
|
||||||
|
#label area
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(50)
|
||||||
|
MDLabel:
|
||||||
|
text: app.tr._("Enter a label to generate address for:")
|
||||||
|
bold: True
|
||||||
|
halign: "center"
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: .4,.4,.4,1
|
||||||
|
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(40)
|
||||||
|
MDTextField:
|
||||||
|
id:lab
|
||||||
|
hint_text: "Label"
|
||||||
|
required: True
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(190)
|
||||||
|
helper_text_mode: "on_error"
|
||||||
|
# helper_text: "Please enter your label name"
|
||||||
|
on_text: app.root.ids.sc7.add_validation(self)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
AnchorLayout:
|
||||||
|
MDFillRoundFlatIconButton:
|
||||||
|
icon: "chevron-double-right"
|
||||||
|
text: app.tr._("Proceed Next")
|
||||||
|
on_release: app.root.ids.sc7.generateaddress()
|
||||||
|
|
||||||
|
Widget:
|
||||||
|
|
||||||
|
#info-area-outer
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: .47
|
||||||
|
padding: dp(7)
|
||||||
|
InfoLayout:
|
||||||
|
orientation:"vertical"
|
||||||
|
padding: 0, dp(5), 0, dp(5)
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba:1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
Color:
|
||||||
|
rgba: app.theme_cls.primary_color
|
||||||
|
Line:
|
||||||
|
rounded_rectangle: (self.pos[0]+4, self.pos[1]+4, self.width-8,self.height-8, 10, 10, 10, 10, 50)
|
||||||
|
width: dp(1)
|
||||||
|
ScreenManager:
|
||||||
|
id: info_screenmgr
|
||||||
|
|
||||||
|
Screen:
|
||||||
|
name: "info2"
|
||||||
|
ScrollView:
|
||||||
|
bar_width:0
|
||||||
|
do_scroll_x: False
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: "vertical"
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
|
||||||
|
#note area
|
||||||
|
ContentHead:
|
||||||
|
section_name: "NOTE:"
|
||||||
|
ContentBody:
|
||||||
|
section_text: ("Here you may generate as many addresses as you like..Indeed creating and abandoning addresses is not encouraged.")
|
||||||
|
|
||||||
|
<Check@MDCheckbox>:
|
||||||
|
group: 'group'
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(48)
|
||||||
|
|
||||||
|
<ContentHead@BoxLayout>:
|
||||||
|
section_name: ""
|
||||||
|
orientation: "vertical"
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(50)
|
||||||
|
padding: dp(20), 0, 0, 0
|
||||||
|
Widget:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(25)
|
||||||
|
MDLabel:
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: .1,.1,.1,.9
|
||||||
|
text: app.tr._(root.section_name)
|
||||||
|
bold: True
|
||||||
|
font_style: "Button"
|
||||||
|
|
||||||
|
<ContentBody@BoxLayout>:
|
||||||
|
section_text: ""
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
padding: dp(50), 0, dp(10), 0
|
||||||
|
|
||||||
|
MDLabel:
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.texture_size[1]+dp(10)
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: 0.3,0.3,0.3,1
|
||||||
|
font_style: "Body1"
|
||||||
|
text: app.tr._(root.section_text)
|
87
src/bitmessagekivy/kv/maildetail.kv
Normal file
87
src/bitmessagekivy/kv/maildetail.kv
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<MailDetail>:
|
||||||
|
name: 'mailDetail'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
# height: dp(bod.height) + self.minimum_height
|
||||||
|
height: self.minimum_height
|
||||||
|
padding: dp(10)
|
||||||
|
# MDLabel:
|
||||||
|
# size_hint_y: None
|
||||||
|
# id: subj
|
||||||
|
# text: root.subject
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# halign: 'left'
|
||||||
|
# font_style: 'H5'
|
||||||
|
# height: dp(40)
|
||||||
|
# on_touch_down: root.allclick(self)
|
||||||
|
OneLineListTitle:
|
||||||
|
id: subj
|
||||||
|
text: app.tr._(root.subject)
|
||||||
|
divider: None
|
||||||
|
font_style: 'H5'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
_no_ripple_effect: True
|
||||||
|
long_press_time: 1
|
||||||
|
TwoLineAvatarIconListItem:
|
||||||
|
id: subaft
|
||||||
|
text: app.tr._(root.from_addr)
|
||||||
|
secondary_text: app.tr._('to ' + root.to_addr)
|
||||||
|
divider: None
|
||||||
|
on_press: root.detailedPopup()
|
||||||
|
BadgeText:
|
||||||
|
size_hint:(None, None)
|
||||||
|
size:[120, 140] if app.app_platform == 'android' else [64, 80]
|
||||||
|
text: app.tr._(root.time_tag)
|
||||||
|
halign:'center'
|
||||||
|
font_style:'Caption'
|
||||||
|
pos_hint: {'center_y': .8}
|
||||||
|
_txt_right_pad: dp(70)
|
||||||
|
font_size: '11sp'
|
||||||
|
MDChip:
|
||||||
|
size_hint: (.16 if app.app_platform == 'android' else .08 , None)
|
||||||
|
text: app.tr._(root.page_type)
|
||||||
|
icon: ''
|
||||||
|
text_color: (1,1,1,1)
|
||||||
|
pos_hint: {'center_x': .91 if app.app_platform == 'android' else .95, 'center_y': .3}
|
||||||
|
radius: [8]
|
||||||
|
height: self.parent.height/4
|
||||||
|
AvatarSampleWidget:
|
||||||
|
source: root.avatarImg
|
||||||
|
MDLabel:
|
||||||
|
text: root.status
|
||||||
|
disabled: True
|
||||||
|
font_style: 'Body2'
|
||||||
|
halign:'left'
|
||||||
|
padding_x: 20
|
||||||
|
# MDLabel:
|
||||||
|
# id: bod
|
||||||
|
# font_style: 'Subtitle2'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: root.message
|
||||||
|
# halign: 'left'
|
||||||
|
# height: self.texture_size[1]
|
||||||
|
MyMDTextField:
|
||||||
|
id: bod
|
||||||
|
size_hint_y: None
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
text: root.message
|
||||||
|
multiline: True
|
||||||
|
readonly: True
|
||||||
|
line_color_normal: [0,0,0,0]
|
||||||
|
_current_line_color: [0,0,0,0]
|
||||||
|
line_color_focus: [0,0,0,0]
|
||||||
|
markup: True
|
||||||
|
font_size: '15sp'
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
Loader:
|
||||||
|
|
||||||
|
|
||||||
|
<MyMDTextField@MDTextField>:
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
178
src/bitmessagekivy/kv/msg_composer.kv
Normal file
178
src/bitmessagekivy/kv/msg_composer.kv
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
<Create>:
|
||||||
|
name: 'create'
|
||||||
|
Loader:
|
||||||
|
|
||||||
|
|
||||||
|
<DropDownWidget>:
|
||||||
|
ScrollView:
|
||||||
|
id: id_scroll
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height + 3 * self.parent.height/5
|
||||||
|
padding: dp(20)
|
||||||
|
spacing: 15
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDTextField:
|
||||||
|
id: ti
|
||||||
|
size_hint_y: None
|
||||||
|
hint_text: 'Type or Select sender address'
|
||||||
|
icon_right: 'account'
|
||||||
|
icon_right_color: app.theme_cls.primary_light
|
||||||
|
font_size: '15sp'
|
||||||
|
multiline: False
|
||||||
|
required: True
|
||||||
|
# height: self.parent.height/2
|
||||||
|
height: 100
|
||||||
|
current_hint_text_color: 0,0,0,0.5
|
||||||
|
helper_text_mode: "on_error"
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(40)
|
||||||
|
CustomSpinner:
|
||||||
|
id: btn
|
||||||
|
background_color: app.theme_cls.primary_dark
|
||||||
|
values: app.variable_1
|
||||||
|
on_text: root.auto_fill_fromaddr() if self.text != 'Select' else ''
|
||||||
|
option_cls: Factory.get("ComposerSpinnerOption")
|
||||||
|
#background_color: color_button if self.state == 'normal' else color_button_pressed
|
||||||
|
#background_down: 'atlas://data/images/defaulttheme/spinner'
|
||||||
|
background_normal: ''
|
||||||
|
background_color: app.theme_cls.primary_color
|
||||||
|
color: color_font
|
||||||
|
font_size: '13.5sp'
|
||||||
|
ArrowImg:
|
||||||
|
|
||||||
|
|
||||||
|
RelativeLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
txt_input: txt_input
|
||||||
|
rv: rv
|
||||||
|
size : (890, 60)
|
||||||
|
MyTextInput:
|
||||||
|
id: txt_input
|
||||||
|
size_hint_y: None
|
||||||
|
font_size: '15sp'
|
||||||
|
color: color_font
|
||||||
|
# height: self.parent.height/2
|
||||||
|
current_hint_text_color: 0,0,0,0.5
|
||||||
|
height: 100
|
||||||
|
hint_text: app.tr._('Type or Scan QR code for recipients address')
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
RV:
|
||||||
|
id: rv
|
||||||
|
MDIconButton:
|
||||||
|
icon: 'qrcode-scan'
|
||||||
|
pos_hint: {'center_x': 0.95, 'y': 0.6}
|
||||||
|
on_release:
|
||||||
|
if root.is_camara_attached(): app.root.ids.scr_mngr.current = 'scanscreen'
|
||||||
|
else: root.camera_alert()
|
||||||
|
on_press:
|
||||||
|
app.root.ids.sc23.get_screen('composer')
|
||||||
|
|
||||||
|
MyMDTextField:
|
||||||
|
id: subject
|
||||||
|
hint_text: 'Subject'
|
||||||
|
height: 100
|
||||||
|
font_size: '15sp'
|
||||||
|
icon_right: 'notebook-outline'
|
||||||
|
icon_right_color: app.theme_cls.primary_light
|
||||||
|
current_hint_text_color: 0,0,0,0.5
|
||||||
|
font_color_normal: 0, 0, 0, 1
|
||||||
|
size_hint_y: None
|
||||||
|
required: True
|
||||||
|
multiline: False
|
||||||
|
helper_text_mode: "on_focus"
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
# MyMDTextField:
|
||||||
|
# id: body
|
||||||
|
# multiline: True
|
||||||
|
# hint_text: 'body'
|
||||||
|
# size_hint_y: None
|
||||||
|
# font_size: '15sp'
|
||||||
|
# required: True
|
||||||
|
# helper_text_mode: "on_error"
|
||||||
|
# canvas.before:
|
||||||
|
# Color:
|
||||||
|
# rgba: (0,0,0,1)
|
||||||
|
ScrollView:
|
||||||
|
id: scrlv
|
||||||
|
MDTextField:
|
||||||
|
id: body
|
||||||
|
hint_text: 'Body'
|
||||||
|
mode: "fill"
|
||||||
|
fill_color: 1/255, 144/255, 254/255, 0.1
|
||||||
|
multiline: True
|
||||||
|
font_color_normal: 0, 0, 0, .4
|
||||||
|
icon_right: 'grease-pencil'
|
||||||
|
icon_right_color: app.theme_cls.primary_light
|
||||||
|
size_hint: 1, 1
|
||||||
|
height: app.window_size[1]/4
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: 125/255, 125/255, 125/255, 1
|
||||||
|
BoxLayout:
|
||||||
|
spacing:50
|
||||||
|
|
||||||
|
<MyTextInput>:
|
||||||
|
readonly: False
|
||||||
|
multiline: False
|
||||||
|
|
||||||
|
|
||||||
|
<SelectableLabel>:
|
||||||
|
# Draw a background to indicate selection
|
||||||
|
color: 0,0,0,1
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: app.theme_cls.primary_dark if self.selected else (1, 1, 1, 0)
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
|
||||||
|
<RV>:
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 0,0,0,.2
|
||||||
|
|
||||||
|
Line:
|
||||||
|
rectangle: self.x +1 , self.y, self.width - 2, self.height -2
|
||||||
|
bar_width: 10
|
||||||
|
scroll_type:['bars']
|
||||||
|
viewclass: 'SelectableLabel'
|
||||||
|
SelectableRecycleBoxLayout:
|
||||||
|
default_size: None, dp(20)
|
||||||
|
default_size_hint: 1, None
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
multiselect: False
|
||||||
|
|
||||||
|
|
||||||
|
<MyMDTextField@MDTextField>:
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ComposerSpinnerOption@SpinnerOption>:
|
||||||
|
font_size: '13.5sp'
|
||||||
|
#background_color: color_button if self.state == 'down' else color_button_pressed
|
||||||
|
#background_down: 'atlas://data/images/defaulttheme/button'
|
||||||
|
background_normal: 'atlas://data/images/defaulttheme/textinput_active'
|
||||||
|
background_color: app.theme_cls.primary_color
|
||||||
|
color: color_font
|
33
src/bitmessagekivy/kv/myaddress.kv
Normal file
33
src/bitmessagekivy/kv/myaddress.kv
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<MyAddress>:
|
||||||
|
name: 'myaddress'
|
||||||
|
BoxLayout:
|
||||||
|
id: main_box
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
SearchBar:
|
||||||
|
id: search_bar
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 0, 0, 5]
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: app.tr._('My Addresses')
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
FloatLayout:
|
||||||
|
MDScrollViewRefreshLayout:
|
||||||
|
id: refresh_layout
|
||||||
|
refresh_callback: root.refresh_callback
|
||||||
|
root_layout: root
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
|
||||||
|
|
||||||
|
<ToggleBtn>:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(36), dp(48)
|
||||||
|
pos_hint: {'center_x': .95, 'center_y': .4}
|
||||||
|
on_active: app.root.ids.sc10.toggleAction(self)
|
131
src/bitmessagekivy/kv/network.kv
Normal file
131
src/bitmessagekivy/kv/network.kv
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<NetworkStat>:
|
||||||
|
name: 'networkstat'
|
||||||
|
MDTabs:
|
||||||
|
id: tab_panel
|
||||||
|
tab_display_mode:'text'
|
||||||
|
|
||||||
|
Tab:
|
||||||
|
text: app.tr._("Total connections")
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(200)
|
||||||
|
OneLineListItem:
|
||||||
|
text: app.tr._("Total Connections")
|
||||||
|
_no_ripple_effect: True
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(58)
|
||||||
|
MDRaisedButton:
|
||||||
|
_no_ripple_effect: True
|
||||||
|
# size_hint: .6, 0
|
||||||
|
# height: dp(40)
|
||||||
|
text: app.tr._(root.text_variable_1)
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
pos_hint: {'center_x': .5}
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'H6'
|
||||||
|
# text: app.tr._(root.text_variable_1)
|
||||||
|
# font_size: '13sp'
|
||||||
|
# color: (1,1,1,1)
|
||||||
|
# halign: 'center'
|
||||||
|
Tab:
|
||||||
|
text: app.tr._('Processes')
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(500)
|
||||||
|
OneLineListItem:
|
||||||
|
text: app.tr._("person-to-person")
|
||||||
|
_no_ripple_effect: True
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(58)
|
||||||
|
MDRaisedButton:
|
||||||
|
_no_ripple_effect: True
|
||||||
|
# size_hint: .6, 0
|
||||||
|
# height: dp(40)
|
||||||
|
text: app.tr._(root.text_variable_2)
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
pos_hint: {'center_x': .5}
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'H6'
|
||||||
|
# text: app.tr._(root.text_variable_2)
|
||||||
|
# font_size: '13sp'
|
||||||
|
# color: (1,1,1,1)
|
||||||
|
# halign: 'center'
|
||||||
|
OneLineListItem:
|
||||||
|
text: app.tr._("Brodcast")
|
||||||
|
_no_ripple_effect: True
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(58)
|
||||||
|
MDRaisedButton:
|
||||||
|
_no_ripple_effect: True
|
||||||
|
# size_hint: .6, 0
|
||||||
|
# height: dp(40)
|
||||||
|
text: app.tr._(root.text_variable_3)
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
pos_hint: {'center_x': .5}
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'H6'
|
||||||
|
# text: app.tr._(root.text_variable_3)
|
||||||
|
# font_size: '13sp'
|
||||||
|
# color: (1,1,1,1)
|
||||||
|
# halign: 'center'
|
||||||
|
OneLineListItem:
|
||||||
|
text: app.tr._("publickeys")
|
||||||
|
_no_ripple_effect: True
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(58)
|
||||||
|
MDRaisedButton:
|
||||||
|
_no_ripple_effect: True
|
||||||
|
# size_hint: .6, 0
|
||||||
|
# height: dp(40)
|
||||||
|
text: app.tr._(root.text_variable_4)
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
pos_hint: {'center_x': .5}
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'H6'
|
||||||
|
# text: app.tr._(root.text_variable_4)
|
||||||
|
# font_size: '13sp'
|
||||||
|
# color: (1,1,1,1)
|
||||||
|
# halign: 'center'
|
||||||
|
OneLineListItem:
|
||||||
|
text: app.tr._("objects")
|
||||||
|
_no_ripple_effect: True
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(58)
|
||||||
|
MDRaisedButton:
|
||||||
|
_no_ripple_effect: True
|
||||||
|
# size_hint: .6, 0
|
||||||
|
#height: dp(40)
|
||||||
|
text: app.tr._(root.text_variable_5)
|
||||||
|
elevation_normal: 2
|
||||||
|
opposite_colors: True
|
||||||
|
pos_hint: {'center_x': .5}
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'H6'
|
||||||
|
# text: app.tr._(root.text_variable_5)
|
||||||
|
# font_size: '13sp'
|
||||||
|
# color: (1,1,1,1)
|
||||||
|
# halign: 'center'
|
253
src/bitmessagekivy/kv/payment.kv
Normal file
253
src/bitmessagekivy/kv/payment.kv
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
#:import get_color_from_hex kivy.utils.get_color_from_hex
|
||||||
|
|
||||||
|
<Payment>:
|
||||||
|
name: "payment"
|
||||||
|
BoxLayout:
|
||||||
|
ScrollView:
|
||||||
|
bar_width:0
|
||||||
|
do_scroll_x: False
|
||||||
|
#scroll_y:0
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
spacing: dp(8)
|
||||||
|
padding: dp(5)
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
orientation: "vertical"
|
||||||
|
|
||||||
|
ProductCategoryLayout:
|
||||||
|
category_text: "Monthly-Subscriptions"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Gas (Play Billing Codelab)"
|
||||||
|
price_text: "$0.99"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Buy gasoline to ride!"
|
||||||
|
product_id: "SKUGASBILLING"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Upgrade your car (Play Billing Codelab)"
|
||||||
|
price_text: "$1.49"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Buy a premium outfit for your car!"
|
||||||
|
product_id: "SKUUPGRADECAR"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Month in gold status (Play Billing Codelab)"
|
||||||
|
price_text: "$0.99"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Enjoy a gold status for a month!"
|
||||||
|
product_id: "SKUMONTHLYGOLD"
|
||||||
|
|
||||||
|
ProductCategoryLayout:
|
||||||
|
category_text: "One-time payment"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Gas (Play Billing Codelab)"
|
||||||
|
price_text: "$0.99"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Buy gasoline to ride!"
|
||||||
|
product_id: "SKUONETIMEGAS"
|
||||||
|
|
||||||
|
ProductCategoryLayout:
|
||||||
|
category_text: "Annual-Subscriptions"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Gas (Play Billing Codelab)"
|
||||||
|
price_text: "$0.99"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Buy gasoline to ride!"
|
||||||
|
product_id: "SKUANNUALGAS"
|
||||||
|
|
||||||
|
ProductLayout:
|
||||||
|
heading_text: "Year in gold status (Play Billing Codelab)"
|
||||||
|
price_text: "$10.99"
|
||||||
|
source: app.image_path + "/payment/buynew1.png"
|
||||||
|
description_text: "Enjoy a gold status for a year!"
|
||||||
|
product_id: "SKUANNUALGOLD"
|
||||||
|
|
||||||
|
<ProductCategoryLayout@BoxLayout>:
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
category_text:""
|
||||||
|
|
||||||
|
orientation: "vertical"
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
#category area
|
||||||
|
Category:
|
||||||
|
text_: root.category_text
|
||||||
|
|
||||||
|
<Category>:
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
text_: ""
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(30)
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
MDLabel:
|
||||||
|
text: root.text_
|
||||||
|
font_size: sp(15)
|
||||||
|
|
||||||
|
<ProductLayout>:
|
||||||
|
heading_text: ""
|
||||||
|
price_text: ""
|
||||||
|
source: ""
|
||||||
|
description_text: ""
|
||||||
|
|
||||||
|
product_id: ""
|
||||||
|
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos
|
||||||
|
size: self.size
|
||||||
|
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(200)
|
||||||
|
orientation: "vertical"
|
||||||
|
|
||||||
|
#heading area
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: 0.3
|
||||||
|
|
||||||
|
#text heading
|
||||||
|
BoxLayout:
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
MDLabel:
|
||||||
|
text: root.heading_text
|
||||||
|
bold: True
|
||||||
|
|
||||||
|
#price text
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_x:.3
|
||||||
|
MDLabel:
|
||||||
|
text: root.price_text
|
||||||
|
bold: True
|
||||||
|
halign: "right"
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: 0,0,1,1
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
|
||||||
|
#details area
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: 0.3
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
|
||||||
|
#image area
|
||||||
|
AnchorLayout:
|
||||||
|
size_hint_x: None
|
||||||
|
width: self.height
|
||||||
|
BoxLayout:
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Ellipse:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
source: root.source
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(10)
|
||||||
|
|
||||||
|
#description text
|
||||||
|
BoxLayout:
|
||||||
|
#size_hint_x: 1
|
||||||
|
MDLabel:
|
||||||
|
text: root.description_text
|
||||||
|
font_size: sp(15)
|
||||||
|
|
||||||
|
#Button Area
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: 0.4
|
||||||
|
Widget:
|
||||||
|
|
||||||
|
AnchorLayout:
|
||||||
|
anchor_x: "right"
|
||||||
|
MDRaisedButton:
|
||||||
|
elevation_normal: 5
|
||||||
|
text: "BUY"
|
||||||
|
on_release:
|
||||||
|
#print(app)
|
||||||
|
app.open_payment_layout(root.product_id)
|
||||||
|
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
|
||||||
|
<ListItemWithLabel>:
|
||||||
|
on_release: app.initiate_purchase(self.method_name)
|
||||||
|
recent: False
|
||||||
|
source: ""
|
||||||
|
method_name: ""
|
||||||
|
right_label_text: "Recent" if self.recent else ""
|
||||||
|
|
||||||
|
ImageLeftWidget:
|
||||||
|
source: root.source
|
||||||
|
|
||||||
|
RightLabel:
|
||||||
|
text: root.right_label_text
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: 0,0,0,.4
|
||||||
|
font_size: sp(12)
|
||||||
|
|
||||||
|
<PaymentMethodLayout>:
|
||||||
|
orientation: "vertical"
|
||||||
|
size_hint_y: None
|
||||||
|
height: "200dp"
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(40)
|
||||||
|
|
||||||
|
Widget:
|
||||||
|
size_hint_x: None
|
||||||
|
width: dp(20)
|
||||||
|
MDLabel:
|
||||||
|
text: "Select Payment Method"
|
||||||
|
font_size: sp(14)
|
||||||
|
bold: True
|
||||||
|
theme_text_color: "Custom"
|
||||||
|
text_color: 0,0,0,.5
|
||||||
|
|
||||||
|
|
||||||
|
ScrollView:
|
||||||
|
|
||||||
|
GridLayout:
|
||||||
|
cols: 1
|
||||||
|
size_hint_y:None
|
||||||
|
height:self.minimum_height
|
||||||
|
|
||||||
|
ListItemWithLabel:
|
||||||
|
source: app.image_path + "/payment/gplay.png"
|
||||||
|
text: "Google Play"
|
||||||
|
method_name: "gplay"
|
||||||
|
recent: True
|
||||||
|
|
||||||
|
ListItemWithLabel:
|
||||||
|
source: app.image_path + "/payment/btc.png"
|
||||||
|
text: "BTC"
|
||||||
|
method_name: "btc"
|
||||||
|
|
||||||
|
ListItemWithLabel:
|
||||||
|
source: app.image_path + "/payment/paypal.png"
|
||||||
|
text: "Paypal"
|
||||||
|
method_name: "som"
|
||||||
|
|
||||||
|
ListItemWithLabel:
|
||||||
|
source: app.image_path + "/payment/buy.png"
|
||||||
|
text: "One more method"
|
||||||
|
method_name: "omm"
|
333
src/bitmessagekivy/kv/popup.kv
Normal file
333
src/bitmessagekivy/kv/popup.kv
Normal file
|
@ -0,0 +1,333 @@
|
||||||
|
<LoadingPopup>:
|
||||||
|
separator_color: 1, 1, 1, 1
|
||||||
|
background: "White.png"
|
||||||
|
Button:
|
||||||
|
id: btn
|
||||||
|
disabled: True
|
||||||
|
background_disabled_normal: "White.png"
|
||||||
|
Image:
|
||||||
|
source: app.image_path + '/loader.zip'
|
||||||
|
anim_delay: 0
|
||||||
|
#mipmap: True
|
||||||
|
size: root.size
|
||||||
|
|
||||||
|
|
||||||
|
<GrashofPopup>:
|
||||||
|
id: popup_box
|
||||||
|
orientation: 'vertical'
|
||||||
|
# spacing:dp(20)
|
||||||
|
# spacing: "12dp"
|
||||||
|
size_hint_y: None
|
||||||
|
# height: "120dp"
|
||||||
|
height: label.height+address.height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDTextField:
|
||||||
|
id: label
|
||||||
|
multiline: False
|
||||||
|
hint_text: app.tr._("Label")
|
||||||
|
required: True
|
||||||
|
icon_right: 'label'
|
||||||
|
helper_text_mode: "on_error"
|
||||||
|
on_text: root.checkLabel_valid(self)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
MDTextField:
|
||||||
|
id: address
|
||||||
|
hint_text: app.tr._("Address")
|
||||||
|
required: True
|
||||||
|
icon_right: 'book-plus'
|
||||||
|
helper_text_mode: "on_error"
|
||||||
|
multiline: False
|
||||||
|
on_text: root.checkAddress_valid(self)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
|
||||||
|
<AddbookDetailPopup>:
|
||||||
|
id: addbook_popup_box
|
||||||
|
size_hint_y: None
|
||||||
|
height: 2.5*(add_label.height)
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing:dp(5)
|
||||||
|
MDLabel
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Label")
|
||||||
|
font_size: '17sp'
|
||||||
|
halign: 'left'
|
||||||
|
MDTextField:
|
||||||
|
id: add_label
|
||||||
|
font_style: 'Body1'
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
text: app.tr._(root.address_label)
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
required: True
|
||||||
|
helper_text_mode: "on_error"
|
||||||
|
on_text: root.checkLabel_valid(self)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Address")
|
||||||
|
font_size: '17sp'
|
||||||
|
halign: 'left'
|
||||||
|
Widget:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(1)
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
id: address
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._(root.address)
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
IconRightSampleWidget:
|
||||||
|
pos_hint: {'center_x': 0, 'center_y': 1}
|
||||||
|
icon: 'content-copy'
|
||||||
|
on_press: app.copy_composer_text(root.address)
|
||||||
|
|
||||||
|
|
||||||
|
<MyaddDetailPopup>:
|
||||||
|
id: myadd_popup
|
||||||
|
size_hint_y: None
|
||||||
|
height: "130dp"
|
||||||
|
spacing:dp(25)
|
||||||
|
|
||||||
|
#height: dp(1.5*(myaddr_label.height))
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
id: myaddr_label
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Label")
|
||||||
|
font_size: '17sp'
|
||||||
|
halign: 'left'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: root.address_label
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Address")
|
||||||
|
font_size: '17sp'
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
id: label_address
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._(root.address)
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
IconRightSampleWidget:
|
||||||
|
pos_hint: {'center_x': 0, 'center_y': 1}
|
||||||
|
icon: 'content-copy'
|
||||||
|
on_press: app.copy_composer_text(root.address)
|
||||||
|
BoxLayout:
|
||||||
|
id: my_add_btn
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 2, None
|
||||||
|
height: dp(40)
|
||||||
|
on_press: root.send_message_from()
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Send message from')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 1.5, None
|
||||||
|
height: dp(40)
|
||||||
|
on_press: app.root.ids.scr_mngr.current = 'showqrcode'
|
||||||
|
on_press: app.root.ids.sc15.qrdisplay(root, root.address)
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Show QR code')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 1.5, None
|
||||||
|
height: dp(40)
|
||||||
|
on_press: root.close_pop()
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
|
||||||
|
<AppClosingPopup>:
|
||||||
|
id: closing_popup
|
||||||
|
size_hint : (None,None)
|
||||||
|
height: 1.4*(popup_label.height+ my_add_btn.children[0].height)
|
||||||
|
width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4)
|
||||||
|
background: app.image_path + '/popup.jpeg'
|
||||||
|
auto_dismiss: False
|
||||||
|
separator_height: 0
|
||||||
|
BoxLayout:
|
||||||
|
id: myadd_popup_box
|
||||||
|
size_hint_y: None
|
||||||
|
spacing:dp(70)
|
||||||
|
orientation: 'vertical'
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing:dp(25)
|
||||||
|
MDLabel:
|
||||||
|
id: popup_label
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Bitmessage isn't connected to the network.\n If you quit now, it may cause delivery delays.\n Wait until connected and the synchronisation finishes?")
|
||||||
|
font_size: '17sp'
|
||||||
|
halign: 'center'
|
||||||
|
BoxLayout:
|
||||||
|
id: my_add_btn
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 1.5, None
|
||||||
|
height: dp(40)
|
||||||
|
on_press: root.closingAction(self.children[0].text)
|
||||||
|
on_press: app.stop()
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Yes')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 1.5, None
|
||||||
|
height: dp(40)
|
||||||
|
on_press: root.closingAction(self.children[0].text)
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('No')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
MDRaisedButton:
|
||||||
|
size_hint: 1.5, None
|
||||||
|
height: dp(40)
|
||||||
|
#on_press: root.dismiss()
|
||||||
|
on_press: root.closingAction(self.children[0].text)
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
|
||||||
|
<SenderDetailPopup>:
|
||||||
|
id: myadd_popup
|
||||||
|
size_hint : (None,None)
|
||||||
|
# height: 2*(sd_label.height+ sd_btn.children[0].height)
|
||||||
|
width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4)
|
||||||
|
background: app.image_path + '/popup.jpeg'
|
||||||
|
auto_dismiss: False
|
||||||
|
separator_height: 0
|
||||||
|
BoxLayout:
|
||||||
|
id: myadd_popup_box
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing:dp(8 if app.app_platform == 'android' else 3)
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
id: from_add_label
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("From :")
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
Widget:
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(1 if app.app_platform == 'android' else 0)
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
height: 50
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
id: sd_label
|
||||||
|
font_style: 'Body2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("[b]" + root.from_addr + "[/b]")
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
markup: True
|
||||||
|
IconRightSampleWidget:
|
||||||
|
icon: 'content-copy'
|
||||||
|
on_press: app.copy_composer_text(root.from_addr)
|
||||||
|
Widget:
|
||||||
|
id: space_1
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(2 if app.app_platform == 'android' else 0)
|
||||||
|
BoxLayout:
|
||||||
|
id: to_addtitle
|
||||||
|
Widget:
|
||||||
|
id:space_2
|
||||||
|
size_hint_y: None
|
||||||
|
height: dp(1 if app.app_platform == 'android' else 0)
|
||||||
|
BoxLayout:
|
||||||
|
id: to_addId
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: 50
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Date : " + root.time_tag)
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
id: sd_btn
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDRaisedButton:
|
||||||
|
id: dismiss_btn
|
||||||
|
on_press: root.dismiss()
|
||||||
|
size_hint: .2, 0
|
||||||
|
pos_hint: {'x': 0.8, 'y': 0}
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'H6'
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
font_size: '13sp'
|
||||||
|
color: (1,1,1,1)
|
||||||
|
halign: 'center'
|
||||||
|
|
||||||
|
<ToAddrBoxlayout>:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._(root.to_addr)
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
||||||
|
IconRightSampleWidget:
|
||||||
|
icon: 'content-copy'
|
||||||
|
on_press: app.copy_composer_text(root.to_addr)
|
||||||
|
|
||||||
|
<ToAddressTitle>:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
id: to_add_label
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: "To :"
|
||||||
|
font_size: '15sp'
|
||||||
|
halign: 'left'
|
33
src/bitmessagekivy/kv/qrcode.kv
Normal file
33
src/bitmessagekivy/kv/qrcode.kv
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<ShowQRCode>:
|
||||||
|
name: 'showqrcode'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
size_hint: (None, None)
|
||||||
|
pos_hint:{'center_x': .5, 'top': 0.9}
|
||||||
|
size: (app.window_size[0]/1.8, app.window_size[0]/1.8)
|
||||||
|
id: qr
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MyMDTextField:
|
||||||
|
size_hint_y: None
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._(root.address)
|
||||||
|
multiline: True
|
||||||
|
readonly: True
|
||||||
|
line_color_normal: [0,0,0,0]
|
||||||
|
_current_line_color: [0,0,0,0]
|
||||||
|
line_color_focus: [0,0,0,0]
|
||||||
|
halign: 'center'
|
||||||
|
font_size: dp(15)
|
||||||
|
bold: True
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: (0,0,0,1)
|
||||||
|
# MDLabel:
|
||||||
|
# size_hint_y: None
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: "[b]BM-2cV7Y8imvAevK6z6YmhYRcj2t7rghBtDSZ[/b]"
|
||||||
|
# markup: True
|
||||||
|
# pos_hint: {'x': .28, 'y': 0.6}
|
2
src/bitmessagekivy/kv/scan_screen.kv
Normal file
2
src/bitmessagekivy/kv/scan_screen.kv
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<ScanScreen>:
|
||||||
|
name:'scanscreen'
|
37
src/bitmessagekivy/kv/scanner.kv
Normal file
37
src/bitmessagekivy/kv/scanner.kv
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#:import ZBarSymbol pyzbar.pyzbar.ZBarSymbol
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
ZBarCam:
|
||||||
|
id: zbarcam
|
||||||
|
# optional, by default checks all types
|
||||||
|
code_types: ZBarSymbol.QRCODE, ZBarSymbol.EAN13
|
||||||
|
scan_callback: app._after_scan
|
||||||
|
scanner_line_y_initial: self.size[1]/2 +self.qrwidth/2
|
||||||
|
scanner_line_y_final: self.size[1]/2-self.qrwidth/2
|
||||||
|
|
||||||
|
canvas:
|
||||||
|
Color:
|
||||||
|
rgba: 0,0,0,.25
|
||||||
|
|
||||||
|
#left rect
|
||||||
|
Rectangle:
|
||||||
|
pos: self.pos[0], self.pos[1]
|
||||||
|
size: self.size[0]/2-self.qrwidth/2, self.size[1]
|
||||||
|
|
||||||
|
#right rect
|
||||||
|
Rectangle:
|
||||||
|
pos: self.size[0]/2+self.qrwidth/2, 0
|
||||||
|
size: self.size[0]/2-self.qrwidth/2, self.size[1]
|
||||||
|
|
||||||
|
#top rect
|
||||||
|
Rectangle:
|
||||||
|
pos: self.size[0]/2-self.qrwidth/2, self.size[1]/2+self.qrwidth/2
|
||||||
|
size: self.qrwidth, self.size[1]/2-self.qrwidth/2
|
||||||
|
|
||||||
|
#bottom rect
|
||||||
|
Rectangle:
|
||||||
|
pos: self.size[0]/2-self.qrwidth/2, 0
|
||||||
|
size: self.qrwidth, self.size[1]/2-self.qrwidth/2
|
||||||
|
|
||||||
|
|
26
src/bitmessagekivy/kv/sent.kv
Normal file
26
src/bitmessagekivy/kv/sent.kv
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<Sent>:
|
||||||
|
name: 'sent'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
SearchBar:
|
||||||
|
id: sent_search
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 0, 0, 5]
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
ComposerButton:
|
964
src/bitmessagekivy/kv/settings.kv
Normal file
964
src/bitmessagekivy/kv/settings.kv
Normal file
|
@ -0,0 +1,964 @@
|
||||||
|
<Setting>:
|
||||||
|
name: 'set'
|
||||||
|
MDTabs:
|
||||||
|
id: tab_panel
|
||||||
|
tab_display_mode:'text'
|
||||||
|
|
||||||
|
Tab:
|
||||||
|
text: app.tr._("User Interface")
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(250) + self.minimum_height
|
||||||
|
padding: 10
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'horizontal'
|
||||||
|
height: self.minimum_height
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
disabled: True
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Start-on-login not yet supported on your OS")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'center_x': 0, 'center_y': 0.6}
|
||||||
|
disabled: True
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [20, 0, 0, 0]
|
||||||
|
spacing: dp(10)
|
||||||
|
height: dp(100) + self.minimum_height
|
||||||
|
# pos_hint: {'center_x': 0, 'center_y': 0.6}
|
||||||
|
BoxLayout:
|
||||||
|
id: box_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Tray")
|
||||||
|
halign: 'left'
|
||||||
|
bold: True
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Start Bitmessage in the tray(don't show main window)")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Minimize to tray")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Close to tray")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': .5}
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(100) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Hide connection notifications")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Show notification when message received")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Run in Portable Mode")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._('In portable Mode, messages and config files are stored in the same directory as the program rather then the normal application-data folder. This makes it convenient to run Bitmessage from a USB thumb drive.')
|
||||||
|
# text: 'huiiiii'
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(100) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Willingly include unencrypted destination address when sending to a mobile device")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Use identicons")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Reply below Quote")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
Widget:
|
||||||
|
size_hint_y: None
|
||||||
|
height: 10
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
# padding: [0, 10, 0, 0]
|
||||||
|
spacing: 10
|
||||||
|
padding: [20, 0, 0, 0]
|
||||||
|
height: dp(20) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Interface Language")
|
||||||
|
# halign: 'right'
|
||||||
|
bold: True
|
||||||
|
MDDropDownItem:
|
||||||
|
id: dropdown_item
|
||||||
|
text: "System Setting"
|
||||||
|
# pos_hint: {"center_x": .5, "center_y": .6}
|
||||||
|
# current_item: "Item 0"
|
||||||
|
# on_release: root.menu.open()
|
||||||
|
BoxLayout:
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
# pos_hint: {'x':.76}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
spacing: 10
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Apply')
|
||||||
|
# on_press: root.change_language()
|
||||||
|
Tab:
|
||||||
|
text: 'Network Settings'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(500) + self.minimum_height
|
||||||
|
padding: 10
|
||||||
|
BoxLayout:
|
||||||
|
id: box_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Listening port")
|
||||||
|
halign: 'left'
|
||||||
|
bold: True
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Listen for connections on port:")
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(100), dp(30)
|
||||||
|
text: app.tr._('8444')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding_left: 10
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("UPnP")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Proxy server / Tor")
|
||||||
|
halign: 'left'
|
||||||
|
bold: True
|
||||||
|
|
||||||
|
GridLayout:
|
||||||
|
cols: 2
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
MDLabel:
|
||||||
|
size_hint_x: None
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Type:")
|
||||||
|
halign: 'left'
|
||||||
|
MDDropDownItem:
|
||||||
|
id: dropdown_item2
|
||||||
|
dropdown_bg: [1, 1, 1, 1]
|
||||||
|
text: 'none'
|
||||||
|
pos_hint: {'x': 0.9, 'y': 0}
|
||||||
|
items: [f"{i}" for i in ['System Setting','U.S. English']]
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
spacing: 10
|
||||||
|
height: dp(100) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Server hostname:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('localhost')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Port:")
|
||||||
|
halign: 'left'
|
||||||
|
# TextInput:
|
||||||
|
# size_hint: None, None
|
||||||
|
# hint_text: '9050'
|
||||||
|
# size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
# input_filter: "int"
|
||||||
|
# readonly: False
|
||||||
|
# multiline: False
|
||||||
|
# font_size: '15sp'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('9050')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Username:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Pass:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Authentication")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Listen for incoming connections when using proxy")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
MDCheckbox:
|
||||||
|
id: chkbox
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(48), dp(50)
|
||||||
|
# active: True
|
||||||
|
halign: 'center'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Only connect to onion services(*.onion)")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Bandwidth limit")
|
||||||
|
halign: 'left'
|
||||||
|
bold: True
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
height: dp(30) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Maximum download rate (kB/s):[0:unlimited]")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: app.window_size[0]/2, dp(30)
|
||||||
|
hint_text: app.tr._('0')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
height: dp(30) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Maximum upload rate (kB/s):[0:unlimited]")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: app.window_size[0]/2, dp(30)
|
||||||
|
hint_text: '0'
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
height: dp(30) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Maximum outbound connections:[0:none]")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: app.window_size[0]/2, dp(30)
|
||||||
|
hint_text: '8'
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
# pos_hint: {'x':.76}
|
||||||
|
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Apply')
|
||||||
|
Tab:
|
||||||
|
text: 'Demanded Difficulty'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(300) + self.minimum_height
|
||||||
|
padding: 10
|
||||||
|
BoxLayout:
|
||||||
|
id: box_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._("Listening port")
|
||||||
|
# halign: 'left'
|
||||||
|
# bold: True
|
||||||
|
|
||||||
|
# BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
# orientation: 'vertical'
|
||||||
|
# height: dp(210 if app.app_platform == 'android' else 100)+ self.minimum_height
|
||||||
|
# padding: 20
|
||||||
|
# # spacing: 10
|
||||||
|
# BoxLayout:
|
||||||
|
# # size_hint_y: None
|
||||||
|
# id: box1_height
|
||||||
|
# # orientation: 'vertical'
|
||||||
|
# # height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "\n\n\nWhen someone sends you a message, their computer must first complete some work. The difficulty of this work, by default, is 1. You may raise this default for new addresses you create by changing the values here. Any new addresses you create will require senders to meet the higher difficulty. There is one exception: if you add a friend or acquaintance to your address book, Bitmessage will automatically notify them when you next send a message that they need only complete the minimum amount of work: difficulty 1.\n\n"
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: 5
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Total difficulty:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('00000.0')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
id: box1_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: 5
|
||||||
|
# height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "The 'Total difficulty' affects the absolute amount of work the sender must complete. Doubling this value doubles the amount of work."
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
spacing: 0
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Small message difficulty:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('00000.0')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
padding: 0
|
||||||
|
id: box1_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
# height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "The 'Small message difficulty' mostly only affects the difficulty of sending small messages. Doubling this value makes it almost twice as difficult to send a small message but doesn't really affect large messages."
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
|
||||||
|
# BoxLayout:
|
||||||
|
# id: box2_height
|
||||||
|
# size_hint_y: None
|
||||||
|
# orientation: 'vertical'
|
||||||
|
# height: dp(30) + self.minimum_height
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._("Leave these input fields blank for the default behavior.")
|
||||||
|
# halign: 'left'
|
||||||
|
# BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
# orientation: 'vertical'
|
||||||
|
# padding: [10, 0, 0, 0]
|
||||||
|
# height: dp(50) + self.minimum_height
|
||||||
|
# BoxLayout:
|
||||||
|
# orientation: 'horizontal'
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._("Give up after")
|
||||||
|
# halign: 'left'
|
||||||
|
# MDTextFieldRect:
|
||||||
|
# size_hint: None, None
|
||||||
|
# size: dp(70), dp(30)
|
||||||
|
# text: app.tr._('0')
|
||||||
|
# # pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
# input_filter: "int"
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._("days and")
|
||||||
|
# halign: 'left'
|
||||||
|
# MDTextFieldRect:
|
||||||
|
# size_hint: None, None
|
||||||
|
# size: dp(70), dp(30)
|
||||||
|
# text: '0'
|
||||||
|
# # pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
# input_filter: "int"
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: "months"
|
||||||
|
# halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
spacing:10
|
||||||
|
orientation: 'horizontal'
|
||||||
|
# pos_hint: {'left': 0}
|
||||||
|
# pos_hint: {'x':.75}
|
||||||
|
height: dp(10) + self.minimum_height
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Apply')
|
||||||
|
|
||||||
|
Tab:
|
||||||
|
text: 'Max acceptable Difficulty'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(210 if app.app_platform == 'android' else 100)+ self.minimum_height
|
||||||
|
padding: 20
|
||||||
|
|
||||||
|
# spacing: 10
|
||||||
|
BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
id: box1_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: 10
|
||||||
|
|
||||||
|
# pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
# height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "\n\n\nHere you may set the maximum amount of work you are willing to do to send a message to another person. Setting these values to 0 means that any value is acceptable."
|
||||||
|
halign: 'left'
|
||||||
|
# BoxLayout:
|
||||||
|
# id: box2_height
|
||||||
|
# size_hint_y: None
|
||||||
|
# orientation: 'vertical'
|
||||||
|
# height: dp(40) + self.minimum_height
|
||||||
|
# BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
# orientation: 'vertical'
|
||||||
|
# padding: [10, 0, 0, 0]
|
||||||
|
# height: dp(50) + self.minimum_height
|
||||||
|
|
||||||
|
GridLayout:
|
||||||
|
cols: 2
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
spacing: 10
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Maximum acceptable total difficulty:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('00000.0')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Hardware GPU acceleration (OpenCL):")
|
||||||
|
halign: 'left'
|
||||||
|
MDDropDownItem:
|
||||||
|
id: dropdown_item
|
||||||
|
text: "None"
|
||||||
|
pos_hint: {"center_x": 0, "center_y": 0}
|
||||||
|
# current_item: "Item 0"
|
||||||
|
# on_release: root.menu.open()
|
||||||
|
|
||||||
|
# BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
# spacing:5
|
||||||
|
# orientation: 'horizontal'
|
||||||
|
# pos_hint: {'center_y': .4, 'center_x': 1.15}
|
||||||
|
# halign: 'right'
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
pos_hint: {'center_y': 1, 'center_x': 1.15}
|
||||||
|
halign: 'right'
|
||||||
|
# pos_hint: {'left': 0}
|
||||||
|
# pos_hint: {'x':.75}
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('OK')
|
||||||
|
Tab:
|
||||||
|
text: 'Resends Expire'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(210 if app.app_platform == 'android' else 100)+ self.minimum_height
|
||||||
|
padding: 20
|
||||||
|
# spacing: 10
|
||||||
|
BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
id: box1_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
# height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "By default, if you send a message to someone and he is offline for more than two days, Bitmessage will send the message again after an additional two days. This will be continued with exponential backoff forever; messages will be resent after 5, 10, 20 days ect. until the receiver acknowledges them. Here you may change that behavior by having Bitmessage give up after a certain number of days or months."
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
id: box2_height
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(30) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Leave these input fields blank for the default behavior.")
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Give up after")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(70), dp(30)
|
||||||
|
text: app.tr._('0')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("days and")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(70), dp(30)
|
||||||
|
text: '0'
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: "months"
|
||||||
|
halign: 'left'
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
# pos_hint: {'left': 0}
|
||||||
|
# pos_hint: {'x':.75}
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
# MDRaisedButton:
|
||||||
|
# text: app.tr._('Cancel')
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Apply')
|
||||||
|
|
||||||
|
Tab:
|
||||||
|
text: 'Namecoin Integration'
|
||||||
|
ScrollView:
|
||||||
|
do_scroll_x: False
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(210 if app.app_platform == 'android' else 100)+ self.minimum_height
|
||||||
|
padding: 20
|
||||||
|
|
||||||
|
# spacing: 10
|
||||||
|
BoxLayout:
|
||||||
|
# size_hint_y: None
|
||||||
|
id: box1_height
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: 10
|
||||||
|
|
||||||
|
# pos_hint: {'x': 0, 'y': 0.2}
|
||||||
|
# height: dp(100) + self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._(root.exp_text)
|
||||||
|
text: "\n\n\n\n\n\nBitmessage can utilize a different Bitcoin-based program called Namecoin to make addresses human-friendly. For example, instead of having to tell your friend your long Bitmessage address, you can simply tell him to send a message to test.\n\n(Getting your own Bitmessage address into Namecoin is still rather difficult).\n\nBitmessage can use either namecoind directly or a running nmcontrol instance\n\n"
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
id: box2_height
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
height: dp(40) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
|
||||||
|
# padding_left: 10
|
||||||
|
# MDCheckbox:
|
||||||
|
# id: chkbox
|
||||||
|
# size_hint: None, None
|
||||||
|
# size: dp(48), dp(50)
|
||||||
|
# # active: True
|
||||||
|
# halign: 'center'
|
||||||
|
# MDLabel:
|
||||||
|
# font_style: 'Body1'
|
||||||
|
# theme_text_color: 'Primary'
|
||||||
|
# text: app.tr._("UPnP")
|
||||||
|
# halign: 'left'
|
||||||
|
# pos_hint: {'x': 0, 'y': 0}
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Connect to:")
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
# MDCheckbox:
|
||||||
|
# id: chkbox
|
||||||
|
# size_hint: None, None
|
||||||
|
# size: dp(48), dp(50)
|
||||||
|
# # active: True
|
||||||
|
# halign: 'center'
|
||||||
|
Check:
|
||||||
|
active: True
|
||||||
|
pos_hint: {'x': 0, 'y': -0.2}
|
||||||
|
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Namecoind")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
|
||||||
|
Check:
|
||||||
|
active: False
|
||||||
|
pos_hint: {'x': 0, 'y': -0.2}
|
||||||
|
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("NMControl")
|
||||||
|
halign: 'left'
|
||||||
|
pos_hint: {'x': 0, 'y': 0}
|
||||||
|
|
||||||
|
GridLayout:
|
||||||
|
cols: 2
|
||||||
|
padding: [10, 0, 0, 0]
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
orientation: 'vertical'
|
||||||
|
padding: [30, 0, 0, 0]
|
||||||
|
spacing: 10
|
||||||
|
height: dp(100) + self.minimum_height
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("hostname:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('localhost')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Port:")
|
||||||
|
halign: 'left'
|
||||||
|
# TextInput:
|
||||||
|
# size_hint: None, None
|
||||||
|
# hint_text: '9050'
|
||||||
|
# size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
# input_filter: "int"
|
||||||
|
# readonly: False
|
||||||
|
# multiline: False
|
||||||
|
# font_size: '15sp'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
hint_text: app.tr._('9050')
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
input_filter: "int"
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Username:")
|
||||||
|
halign: 'left'
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
MDLabel:
|
||||||
|
font_style: 'Body1'
|
||||||
|
theme_text_color: 'Primary'
|
||||||
|
text: app.tr._("Password:")
|
||||||
|
halign: 'left'
|
||||||
|
|
||||||
|
MDTextFieldRect:
|
||||||
|
size_hint: None, None
|
||||||
|
size: dp(app.window_size[0]/4), dp(30)
|
||||||
|
pos_hint: {'center_y': .5, 'center_x': .5}
|
||||||
|
password: True
|
||||||
|
|
||||||
|
|
||||||
|
BoxLayout:
|
||||||
|
size_hint_y: None
|
||||||
|
spacing:5
|
||||||
|
orientation: 'horizontal'
|
||||||
|
pos_hint: {'center_y': .4, 'center_x': 1.15}
|
||||||
|
halign: 'right'
|
||||||
|
# pos_hint: {'left': 0}
|
||||||
|
# pos_hint: {'x':.75}
|
||||||
|
height: dp(50) + self.minimum_height
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Cancel')
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('Apply')
|
||||||
|
MDRaisedButton:
|
||||||
|
text: app.tr._('OK')
|
||||||
|
Loader:
|
25
src/bitmessagekivy/kv/trash.kv
Normal file
25
src/bitmessagekivy/kv/trash.kv
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<Trash>:
|
||||||
|
name: 'trash'
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: dp(5)
|
||||||
|
GridLayout:
|
||||||
|
id: identi_tag
|
||||||
|
padding: [20, 20, 0, 5]
|
||||||
|
spacing: dp(5)
|
||||||
|
cols: 1
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
MDLabel:
|
||||||
|
id: tag_label
|
||||||
|
text: ''
|
||||||
|
font_style: 'Subtitle2'
|
||||||
|
BoxLayout:
|
||||||
|
orientation:'vertical'
|
||||||
|
ScrollView:
|
||||||
|
id: scroll_y
|
||||||
|
do_scroll_x: False
|
||||||
|
MDList:
|
||||||
|
id: ml
|
||||||
|
Loader:
|
||||||
|
ComposerButton:
|
Reference in New Issue
Block a user