/ src / bitmessagekivy / main.kv
main.kv
  1  #:import get_color_from_hex kivy.utils.get_color_from_hex
  2  #:import Factory kivy.factory.Factory
  3  #:import Spinner kivy.uix.spinner.Spinner
  4  
  5  #:import colors kivymd.color_definitions.colors
  6  #:import images_path kivymd.images_path
  7  
  8  #:import IconLeftWidget kivymd.uix.list.IconLeftWidget
  9  #:import MDCard kivymd.uix.card.MDCard
 10  #:import MDCheckbox kivymd.uix.selectioncontrol.MDCheckbox
 11  #:import MDFloatingActionButton kivymd.uix.button.MDFloatingActionButton
 12  #:import MDList kivymd.uix.list.MDList
 13  #:import MDScrollViewRefreshLayout kivymd.uix.refreshlayout.MDScrollViewRefreshLayout
 14  #:import MDSpinner kivymd.uix.spinner.MDSpinner
 15  #:import MDTextField kivymd.uix.textfield.MDTextField
 16  #:import MDTabs kivymd.uix.tab.MDTabs
 17  #:import MDTabsBase kivymd.uix.tab.MDTabsBase
 18  #:import OneLineListItem kivymd.uix.list.OneLineListItem
 19  
 20  <Tab@BoxLayout+MDTabsBase>
 21  
 22  #:set color_button (0.784, 0.443, 0.216, 1)  # brown
 23  #:set color_button_pressed (0.659, 0.522, 0.431, 1)  # darker brown
 24  #:set color_font   (0.957, 0.890, 0.843, 1)  # off white
 25  
 26  <MySpinnerOption@SpinnerOption>:
 27      font_size: '12.5sp'
 28      background_normal: 'atlas://data/images/defaulttheme/textinput_active'
 29      background_color: app.theme_cls.primary_color
 30      color: color_font
 31  
 32  <NavigationItem>
 33      on_press: root.currentlyActive()
 34      active_color: root.theme_cls.primary_color if root.active else root.theme_cls.text_color
 35  
 36      IconLeftWidget:
 37          icon: root.icon
 38          theme_text_color: "Custom"
 39          text_color: root.active_color
 40  
 41      BadgeText:
 42          id: badge_txt
 43          text: f"{root.badge_text}"
 44          theme_text_color: "Custom"
 45          halign: 'right'
 46  
 47  <NavigationDrawerDivider>:
 48      canvas:
 49          Color:
 50              rgba: self.theme_cls.divider_color
 51          Line:
 52              points: root.x, root.y + dp(8), root.x + self.width, root.y + dp(8)
 53  
 54  <ContentNavigationDrawer>
 55  
 56      BoxLayout:
 57          orientation: 'vertical'
 58  
 59          FloatLayout:
 60              size_hint_y: None
 61              height: "200dp"
 62  
 63              MDIconButton:
 64                  id: reset_image
 65                  icon: "refresh"
 66                  x: root.parent.x + dp(10)
 67                  pos_hint: {"top": 1, 'left': 1}
 68                  color: [1,0,0,1]
 69                  on_release: app.rest_default_avatar_img()
 70                  theme_text_color: "Custom"
 71                  text_color: app.theme_cls.primary_color
 72                  opacity: 1 if app.have_any_address() else 0
 73                  disabled: False if app.have_any_address() else True
 74  
 75              MDIconButton:
 76                  id: file_manager
 77                  icon: "file-image"
 78                  x: root.parent.x + dp(10)
 79                  pos_hint: {"top": 1, 'right': 1}
 80                  color: [1,0,0,1]
 81                  on_release: app.file_manager_open()
 82                  theme_text_color: "Custom"
 83                  text_color: app.theme_cls.primary_color
 84                  opacity: 1 if app.have_any_address() else 0
 85                  disabled: False if app.have_any_address() else True
 86  
 87              BoxLayout:
 88                  id: top_box
 89                  size_hint_y: None
 90                  height: "200dp"
 91                  x: root.parent.x
 92                  pos_hint: {"top": 1}
 93                  Image:
 94                      source: app.get_default_logo(self)
 95  
 96          ScrollView:
 97              id: scroll_y
 98              pos_hint: {"top": 1}
 99  
100              GridLayout:
101                  id: box_item
102                  cols: 1
103                  size_hint_y: None
104                  height: self.minimum_height
105                  NavigationDrawerDivider:
106                  NavigationDrawerSubheader:
107                      text: app.tr._('Accounts')
108                      height:"35dp"
109                  NavigationItem:
110                      text: 'dropdown_nav_item'
111                      height: dp(48)
112                      IdentitySpinner:
113                          id: identity_dropdown
114                          pos_hint:{"x":0,"y":0}
115                          name: "identity_dropdown"
116                          option_cls: Factory.get("MySpinnerOption")
117                          font_size: '12.5sp'
118                          text: app.get_default_account_data(self)
119                          color: color_font
120                          background_normal: ''
121                          background_color: app.theme_cls.primary_color
122                          on_text: app.get_current_account_data(self.text)
123                          ArrowImg:
124                  NavigationItem:
125                      id: inbox_cnt
126                      text: app.tr._('Inbox')
127                      icon: 'email-open'
128                      divider: None
129                      on_release: app.set_screen('inbox')
130                      on_release: root.parent.set_state()
131                      on_press: app.load_screen(self)
132                  NavigationItem:
133                      id: send_cnt
134                      text: app.tr._('Sent')
135                      icon: 'send'
136                      divider: None
137                      on_release: app.set_screen('sent')
138                      on_release: root.parent.set_state()
139                  NavigationItem:
140                      id: draft_cnt
141                      text: app.tr._('Draft')
142                      icon: 'message-draw'
143                      divider: None
144                      on_release: app.set_screen('draft')
145                      on_release: root.parent.set_state()
146                  NavigationItem:
147                      id: trash_cnt
148                      text: app.tr._('Trash')
149                      icon: 'delete'
150                      divider: None
151                      on_release: app.set_screen('trash')
152                      on_press: root.parent.set_state()
153                      on_press: app.load_screen(self)
154                  NavigationItem:
155                      id: allmail_cnt
156                      text: app.tr._('All Mails')
157                      icon: 'mailbox'
158                      divider: None
159                      on_release: app.set_screen('allmails')
160                      on_release: root.parent.set_state()
161                      on_press: app.load_screen(self)
162                  NavigationDrawerDivider:
163                  NavigationDrawerSubheader:
164                      text: app.tr._('Chat')
165                  NavigationItem:
166                      id: draft_cnt
167                      text: app.tr._('Chat')
168                      icon: 'chat'
169                      divider: None
170                      on_release: app.set_screen('chat')
171                      on_release: root.parent.set_state()
172                  NavigationDrawerDivider:
173                  NavigationDrawerSubheader:
174                      text: app.tr._("All labels")
175                  NavigationItem:
176                      text: app.tr._('Address Book')
177                      icon: 'book-multiple'
178                      divider: None
179                      on_release: app.set_screen('addressbook')
180                      on_release: root.parent.set_state()
181                  NavigationItem:
182                      text: app.tr._('Settings')
183                      icon: 'application-settings'
184                      divider: None
185                      on_release: app.set_screen('set')
186                      on_release: root.parent.set_state()
187                  NavigationItem:
188                      text: app.tr._('Payment plan')
189                      icon: 'shopping'
190                      divider: None
191                      on_release: app.set_screen('payment')
192                      on_release: root.parent.set_state()
193                  NavigationItem:
194                      text: app.tr._('New address')
195                      icon: 'account-plus'
196                      divider: None
197                      on_release: app.set_screen('login')
198                      on_release: root.parent.set_state()
199                      on_press: app.reset_login_screen()
200                  NavigationItem:
201                      text: app.tr._('Network status')
202                      icon: 'server-network'
203                      divider: None
204                      on_release: app.set_screen('networkstat')
205                      on_release: root.parent.set_state()
206                  NavigationItem:
207                      text: app.tr._('My addresses')
208                      icon: 'account-multiple'
209                      divider: None
210                      on_release: app.set_screen('myaddress')
211                      on_release: root.parent.set_state()
212  
213  MDNavigationLayout:
214      id: nav_layout
215  
216      MDTopAppBar:
217          id: toolbar
218          title: app.format_address_and_label()
219          opacity: 1 if app.have_any_address() else 0
220          disabled: False if app.have_any_address() else True
221          pos_hint: {"top": 1}
222          md_bg_color: app.theme_cls.primary_color
223          elevation: 10
224          left_action_items: [['menu', lambda x: nav_drawer.set_state("toggle")]]
225          right_action_items: [['account-plus', lambda x: app.addingtoaddressbook()]]
226  
227      ScreenManager:
228          id: scr_mngr
229          size_hint_y: None
230          height: root.height - toolbar.height
231          Inbox:
232              id:id_inbox
233          Login:
234              id:sc6
235          Random:
236              id:id_newidentity
237          MyAddress:
238              id:id_myaddress
239          ScanScreen:
240              id:id_scanscreen
241          Payment:
242              id:id_payment
243          Create:
244              id:id_create
245          NetworkStat:
246              id:id_networkstat
247          Setting:
248              id:id_settings
249          Sent:
250              id:id_sent
251          Trash:
252              id:id_trash
253          AllMails:
254              id:id_allmail
255          Draft:
256              id:id_draft
257          AddressBook:
258              id:id_addressbook
259          ShowQRCode:
260              id:id_showqrcode
261          Chat:
262              id: id_chat
263  
264      MDNavigationDrawer:
265          id: nav_drawer
266  
267          ContentNavigationDrawer:
268              id: content_drawer
269  
270  <ArrowImg@Image>:
271      source: app.image_path +('/down-arrow.png' if self.parent.is_open == True else '/right-arrow.png')
272      size: 15, 15
273      x: self.parent.x + self.parent.width - self.width - 5
274      y: self.parent.y + self.parent.height/2 - self.height + 5
275  
276  
277  <SearchBar@BoxLayout>:
278      size_hint_y: None
279      height: self.minimum_height
280  
281      MDIconButton:
282          icon: 'magnify'
283  
284      MDTextField:
285          id: search_field
286          hint_text: 'Search'
287          canvas.before:
288              Color:
289                  rgba: (0,0,0,1)
290  
291  
292  <Loader@MDSpinner>:
293      id: spinner
294      size_hint: None, None
295      size: dp(46), dp(46)
296      pos_hint: {'center_x': 0.5, 'center_y': 0.5}
297      active: False
298  
299  <ComposerButton@BoxLayout>:
300      size_hint_y: None
301      height: dp(56)
302      spacing: '10dp'
303      pos_hint: {'center_x':0.45, 'center_y': .1}
304  
305      Widget:
306  
307      MDFloatingActionButton:
308          icon: 'plus'
309          opposite_colors: True
310          elevation_normal: 8
311          md_bg_color: [0.941, 0, 0,1]
312          on_press: app.root.ids.scr_mngr.current = 'create'
313          on_press: app.clear_composer()
314  
315  
316  <SwipeToDeleteItem>:
317      size_hint_y: None
318      height: content.height
319  
320      MDCardSwipeLayerBox:
321          padding: "8dp"
322  
323          MDIconButton:
324              id: delete_msg
325              icon: "trash-can"
326              pos_hint: {"center_y": .5}
327              md_bg_color: (1, 0, 0, 1)
328              disabled: True
329  
330      MDCardSwipeFrontBox:
331  
332          TwoLineAvatarIconListItem:
333              id: content
334              text: root.text
335              _no_ripple_effect: True
336  
337              AvatarSampleWidget:
338                  id: avater_img
339                  source: None
340  
341              TimeTagRightSampleWidget:
342                  id: time_tag
343                  text: ''
344                  font_size: "11sp"
345                  font_style: "Caption"
346                  size: [120, 140] if app.app_platform == "android" else [64, 80]
347  
348  
349  <CutsomSwipeToDeleteItem>:
350      size_hint_y: None
351      height: content.height
352  
353      MDCardSwipeLayerBox:
354          padding: "8dp"
355  
356          MDIconButton:
357              id: delete_msg
358              icon: "trash-can"
359              pos_hint: {"center_y": .5}
360              md_bg_color: (1, 0, 0, 1)
361              disabled: True
362  
363      MDCardSwipeFrontBox:
364  
365          TwoLineAvatarIconListItem:
366              id: content
367              text: root.text
368              _no_ripple_effect: True
369  
370              AvatarSampleWidget:
371                  id: avater_img
372                  source: None
373  
374              TimeTagRightSampleWidget:
375                  id: time_tag
376                  text: 'time'
377                  font_size: "11sp"
378                  font_style: "Caption"
379                  size: [120, 140] if app.app_platform == "android" else [64, 80]
380              MDChip:
381                  id: chip_tag
382                  size_hint: (0.16 if app.app_platform == "android" else 0.08, None)
383                  text: 'test'
384                  icon: ""
385                  pos_hint: {"center_x": 0.91 if app.app_platform == "android" else 0.94, "center_y": 0.3}
386                  height: '18dp'
387                  text_color: (1,1,1,1)
388                  radius: [8]