diff --git a/src/bitmessagekivy/main.kv b/src/bitmessagekivy/main.kv index c4352cfe..85ba2979 100644 --- a/src/bitmessagekivy/main.kv +++ b/src/bitmessagekivy/main.kv @@ -16,6 +16,7 @@ #:import MDScrollViewRefreshLayout kivymd.refreshlayout.MDScrollViewRefreshLayout #:import MDSpinner kivymd.spinner.MDSpinner #:import NoTransition kivy.uix.screenmanager.NoTransition +#:import MDSeparator kivymd.card.MDSeparator #:set color_button (0.784, 0.443, 0.216, 1) # brown #:set color_button_pressed (0.659, 0.522, 0.431, 1) # darker brown @@ -202,8 +203,18 @@ NavigationLayout: transition: NoTransition() BoxLayout: orientation: 'vertical' - spacing: dp(10) + spacing: dp(5) SearchBar: + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + text: '' + font_style: 'Body1' + bold: True #FloatLayout: # MDScrollViewRefreshLayout: # id: refresh_layout @@ -225,7 +236,18 @@ NavigationLayout: name: 'sent' BoxLayout: orientation: 'vertical' + spacing: dp(5) SearchBar: + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + text: '' + font_style: 'Body1' + bold: True BoxLayout: orientation:'vertical' ScrollView: @@ -238,21 +260,52 @@ NavigationLayout: : name: 'trash' - ScrollView: - id: scroll_y - do_scroll_x: False - MDList: - id: ml + 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: + text: '' + font_style: 'Body1' + bold: True + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml Loader: ComposerButton: - + : name: 'draft' - ScrollView: - id: scroll_y - do_scroll_x: False - MDList: - id: ml + 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: + text: '' + font_style: 'Body1' + bold: True + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml ComposerButton: : @@ -289,12 +342,26 @@ NavigationLayout: # MDList: # id: ml BoxLayout: - orientation:'vertical' - ScrollView: - id: scroll_y - do_scroll_x: False - MDList: - id: ml + 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: + text: '' + font_style: 'Body1' + bold: True + BoxLayout: + orientation:'vertical' + ScrollView: + id: scroll_y + do_scroll_x: False + MDList: + id: ml Loader: ComposerButton: @@ -495,7 +562,6 @@ NavigationLayout: BoxLayout: AnchorLayout: MDRaisedButton: - size_hint: .5, .35 height: dp(40) on_press: app.root.ids.scr_mngr.current = 'random' on_press: app.root.ids.sc7.reset_address_label() @@ -541,7 +607,6 @@ NavigationLayout: BoxLayout: AnchorLayout: MDRaisedButton: - size_hint: .5, None height: dp(40) on_release: root.generateaddress(app) opposite_colors: True @@ -627,7 +692,18 @@ NavigationLayout: name: 'myaddress' BoxLayout: orientation: 'vertical' + spacing: dp(5) SearchBar: + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + text: 'My Addresses' + font_style: 'Body1' + bold: True FloatLayout: MDScrollViewRefreshLayout: id: refresh_layout @@ -642,7 +718,18 @@ NavigationLayout: name: 'addressbook' BoxLayout: orientation: 'vertical' + spacing: dp(5) SearchBar: + GridLayout: + id: identi_tag + padding: [20, 0, 0, 5] + cols: 1 + size_hint_y: None + height: self.minimum_height + MDLabel: + text: '' + font_style: 'Body1' + bold: True BoxLayout: orientation:'vertical' ScrollView: @@ -803,7 +890,7 @@ NavigationLayout: id: popup size_hint : (None,None) height: 2*(label.height + address.height) + 10 - width :app.window_size[0] - app.window_size[0]/10 + width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4) title: 'add contact\'s' background: './images/popup.jpeg' title_size: sp(20) @@ -1036,7 +1123,7 @@ NavigationLayout: id: myadd_popup size_hint : (None,None) height: 4.5*(myaddr_label.height+ my_add_btn.children[0].height) - width :app.window_size[0] - app.window_size[0]/10 + width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4) background: './images/popup.jpeg' auto_dismiss: False separator_height: 0 @@ -1116,7 +1203,7 @@ NavigationLayout: id: addbook_popup size_hint : (None,None) height: 4*(add_label.height) - width :app.window_size[0] - app.window_size[0]/10 + width :app.window_size[0] - (app.window_size[0]/10 if app.app_platform == 'android' else app.window_size[0]/4) background: './images/popup.jpeg' separator_height: 0 auto_dismiss: False diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index cdb55a18..c138831a 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -114,7 +114,9 @@ class Inbox(Screen): xAddress = 'toaddress' data = [] self.inboxDataQuery(xAddress, where, what) + self.ids.identi_tag.children[0].text = '' if self.queryreturn: + self.ids.identi_tag.children[0].text = 'Inbox' state.kivyapp.get_inbox_count() src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj.inbox_cnt.badge_text = state.inbox_count @@ -261,6 +263,8 @@ class Inbox(Screen): int(state.trash_count) + 1) state.all_count = str( int(state.all_count) - 1) + if int(state.inbox_count) <= 0: + self.ids.identi_tag.children[0].text = '' self.ids.ml.remove_widget( instance.parent.parent) toast('Deleted') @@ -326,7 +330,9 @@ class MyAddress(Screen): addr), BMConfigParser().addresses()) self.addresses_list = filtered_list self.addresses_list = [obj for obj in reversed(self.addresses_list)] + self.ids.identi_tag.children[0].text = '' if self.addresses_list: + self.ids.identi_tag.children[0].text = 'My Addresses' self.has_refreshed = True self.set_mdList(0, 15) self.ids.refresh_layout.bind(scroll_y=self.check_scroll_y) @@ -398,7 +404,7 @@ class MyAddress(Screen): """Method used for loading the myaddress screen data""" state.searcing_text = '' state.kivyapp.root.ids.sc10.children[2].active = False - self.children[2].children[1].ids.search_field.text = '' + self.children[2].children[2].ids.search_field.text = '' self.has_refreshed = True self.ids.ml.clear_widgets() self.init_ui() @@ -443,10 +449,12 @@ class AddressBook(Screen): where = ['label', 'address'] what = state.searcing_text xAddress = '' + self.ids.identi_tag.children[0].text = '' self.queryreturn = kivy_helper_search.search_sql( xAddress, account, "addressbook", where, what, False) self.queryreturn = [obj for obj in reversed(self.queryreturn)] if self.queryreturn: + self.ids.identi_tag.children[0].text = 'Address Book' self.has_refreshed = True self.set_mdList(0, 20) self.ids.scroll_y.bind(scroll_y=self.check_scroll_y) @@ -523,6 +531,8 @@ class AddressBook(Screen): def delete_address(self, address, instance, *args): """Delete inbox mail from inbox listing""" self.ids.ml.remove_widget(instance.parent.parent) + if len(self.ids.ml.children) == 0: + self.ids.identi_tag.children[0].text = '' sqlExecute( "DELETE FROM addressbook WHERE address = '{}';".format(address)) @@ -680,9 +690,10 @@ class DropDownWidget(BoxLayout): # pylint: disable=attribute-defined-outside-init def address_error_message(self, msg): """Generates error message""" + width = .8 if platform == 'android' else .55 msg_dialog = MDDialog( text=msg, - title='', size_hint=(.8, .25), text_button_ok='Ok', + title='', size_hint=(width, .25), text_button_ok='Ok', events_callback=self.callback_for_menu_items) msg_dialog.open() @@ -899,8 +910,10 @@ class Sent(Screen): what = state.searcing_text xAddress = 'fromaddress' data = [] + self.ids.identi_tag.children[0].text = '' self.sentDataQuery(xAddress, where, what) if self.queryreturn: + self.ids.identi_tag.children[0].text = 'Sent' self.set_sentCount(state.sent_count) for mail in self.queryreturn: data.append({ @@ -1063,6 +1076,8 @@ class Sent(Screen): state.sent_count = str(int(state.sent_count) - 1) state.trash_count = str(int(state.trash_count) + 1) state.all_count = str(int(state.all_count) - 1) + if int(state.sent_count) <= 0: + self.ids.identi_tag.children[0].text = '' sqlExecute( "UPDATE sent SET folder = 'trash'" " WHERE ackdata = ?;", str(data_index)) @@ -1109,8 +1124,10 @@ class Trash(Screen): if state.association == '': if BMConfigParser().addresses(): state.association = BMConfigParser().addresses()[0] + self.ids.identi_tag.children[0].text = '' self.trashDataQuery(0, 20) if self.trash_messages: + self.ids.identi_tag.children[0].text = 'Trash' src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj.trash_cnt.badge_text = state.trash_count self.set_mdList() @@ -1202,11 +1219,12 @@ class Trash(Screen): def delete_confirmation(self): """Show confirmation delete popup""" + width = .8 if platform == 'android' else .55 delete_msg_dialog = MDDialog( text='Are you sure you want to delete this' ' message permanently from trash?', title='', - size_hint=(.8, .25), + size_hint=(width, .25), text_button_ok='Yes', text_button_cancel='No', events_callback=self.callback_for_delete_msg) @@ -1269,6 +1287,7 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods nav_drawer = ObjectProperty() state.screen_density = Window.size window_size = state.screen_density + app_platform = platform title = "PyBitmessage" imgstatus = False count = 0 @@ -1338,7 +1357,7 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods self.root.ids.sc1.loadMessagelist(state.association) self.root.ids.sc4.ids.ml.clear_widgets() - self.root.ids.sc4.children[2].children[1].ids.search_field.text = '' + self.root.ids.sc4.children[2].children[2].ids.search_field.text = '' self.root.ids.sc4.loadSent(state.association) self.root.ids.sc16.clear_widgets() @@ -1429,7 +1448,8 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods elif self.root.ids.scr_mngr.current == "random": self.root.ids.scr_mngr.current = 'login' else: - self.root.ids.scr_mngr.current = 'inbox' + if state.kivyapp.variable_1: + self.root.ids.scr_mngr.current = 'inbox' self.root.ids.scr_mngr.transition.direction = 'right' self.root.ids.scr_mngr.transition.bind(on_complete=self.reset) return True @@ -1643,30 +1663,30 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods if state.search_screen == 'inbox': try: self.root.ids.sc1.children[ - 3].children[1].ids.search_field.text = '' + 3].children[2].ids.search_field.text = '' except Exception: self.root.ids.sc1.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' self.root.ids.sc1.children[1].active = True Clock.schedule_once(self.search_callback, 0.5) elif state.search_screen == 'addressbook': self.root.ids.sc11.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' self.root.ids.sc11.children[ 1].active = True Clock.schedule_once(self.search_callback, 0.5) elif state.search_screen == 'myaddress': try: self.root.ids.sc10.children[ - 3].children[1].ids.search_field.text = '' + 3].children[2].ids.search_field.text = '' except Exception: self.root.ids.sc10.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' self.root.ids.sc10.children[1].active = True Clock.schedule_once(self.search_callback, 0.5) else: self.root.ids.sc4.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' self.root.ids.sc4.children[1].active = True Clock.schedule_once(self.search_callback, 0.5) return @@ -1760,26 +1780,6 @@ class GrashofPopup(Popup): self.parent.children[1].ids.scr_mngr.current = 'addressbook' toast('Saved') - # pylint: disable=attribute-defined-outside-init - def show_error_message(self): - """Showing error message""" - content = MDLabel( - font_style='Body1', - theme_text_color='Secondary', - text="Hey you are not allowed to save blank address contact. " - "That's wrong!", - size_hint_y=None, - valign='top') - content.bind(texture_size=content.setter('size')) - self.dialog = MDDialog(content=content, - size_hint=(.8, None), - height=dp(200), - auto_dismiss=False) - - self.dialog.add_action_button("ok", - action=lambda *x: self.dialog.dismiss()) - self.dialog.open() - @staticmethod def close_pop(): """Pop is Canceled""" @@ -1947,25 +1947,25 @@ class MailDetail(Screen): self.children[0].children[0].active = True if state.detailPageType == 'sent': state.kivyapp.root.ids.sc4.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' sqlExecute( "UPDATE sent SET folder = 'trash' WHERE" " ackdata = ?;", str(state.mail_id)) - msg_count_objs.send_cnt.badge_text = str(int(state.sent_count) - 1) - state.sent_count = str(int(state.sent_count) - 1) + msg_count_objs.send_cnt.badge_text = str(int(state.sent_count) - 1) if int(state.sent_count) else '0' + state.sent_count = str(int(state.sent_count) - 1) if int(state.sent_count) else '0' self.parent.screens[3].ids.ml.clear_widgets() self.parent.screens[3].loadSent(state.association) elif state.detailPageType == 'inbox': state.kivyapp.root.ids.sc1.children[ - 2].children[1].ids.search_field.text = '' + 2].children[2].ids.search_field.text = '' self.parent.screens[0].children[2].children[ - 1].ids.search_field.text = '' + 2].ids.search_field.text = '' sqlExecute( "UPDATE inbox SET folder = 'trash' WHERE" " msgid = ?;", str(state.mail_id)) msg_count_objs.inbox_cnt.badge_text = str( - int(state.inbox_count) - 1) - state.inbox_count = str(int(state.inbox_count) - 1) + int(state.inbox_count) - 1) if int(state.inbox_count) else '0' + state.inbox_count = str(int(state.inbox_count) - 1) if int(state.inbox_count) else '0' self.parent.screens[0].ids.ml.clear_widgets() self.parent.screens[0].loadMessagelist(state.association) @@ -1984,13 +1984,13 @@ class MailDetail(Screen): msg_count_objs.trash_cnt.badge_text = str( int(state.trash_count) + 1) msg_count_objs.allmail_cnt.badge_text = str( - int(state.all_count) - 1) + int(state.all_count) - 1) if int(state.all_count) else '0' state.trash_count = str(int(state.trash_count) + 1) - state.all_count = str(int(state.all_count) - 1) + state.all_count = str(int(state.all_count) - 1) if int(state.all_count) else '0' self.parent.screens[4].clear_widgets() self.parent.screens[4].add_widget(Trash()) - self.parent.screens[16].ids.ml.clear_widgets() - self.parent.screens[16].init_ui(dt=0) + self.parent.screens[16].clear_widgets() + self.parent.screens[16].add_widget(Allmails()) Clock.schedule_once(self.callback_for_delete, 4) def callback_for_delete(self, dt=0): @@ -2182,11 +2182,13 @@ class Draft(Screen): def loadDraft(self, where="", what=""): """Load draft list for Draft messages.""" xAddress = 'fromaddress' + self.ids.identi_tag.children[0].text = '' self.draftDataQuery(xAddress, where, what) if state.msg_counter_objs: state.msg_counter_objs.draft_cnt.badge_text = str( len(self.queryreturn)) if self.queryreturn: + self.ids.identi_tag.children[0].text = 'Draft' src_mng_obj = state.kivyapp.root.children[2].children[0].ids src_mng_obj.draft_cnt.badge_text = state.draft_count self.set_mdList() @@ -2297,6 +2299,8 @@ class Draft(Screen): msg_count_objs.draft_cnt.badge_text = str( int(state.draft_count) - 1) state.draft_count = str(int(state.draft_count) - 1) + if int(state.draft_count) <= 0: + self.ids.identi_tag.children[0].text = '' self.ids.ml.remove_widget(instance.parent.parent) toast('Deleted') @@ -2376,8 +2380,10 @@ class Allmails(Screen): def loadMessagelist(self): """Load Inbox, Sent anf Draft list of messages.""" self.account = state.association + self.ids.identi_tag.children[0].text = '' self.allMessageQuery(0, 20) if self.all_mails: + self.ids.identi_tag.children[0].text = 'All Mails' state.kivyapp.get_inbox_count() state.kivyapp.get_sent_count() state.all_count = str( @@ -2510,6 +2516,8 @@ class Allmails(Screen): int(state.all_count) - 1) state.trash_count = str(int(state.trash_count) + 1) state.all_count = str(int(state.all_count) - 1) + if int(state.all_count) <= 0: + self.ids.identi_tag.children[0].text = '' nav_lay_obj.sc5.clear_widgets() nav_lay_obj.sc5.add_widget(Trash()) nav_lay_obj.sc17.remove_widget(instance.parent.parent)