bauiv1lib.account.unlink
UI functionality for unlinking accounts.
1# Released under the MIT License. See LICENSE for details. 2# 3"""UI functionality for unlinking accounts.""" 4 5from __future__ import annotations 6 7import time 8from typing import TYPE_CHECKING 9 10import bauiv1 as bui 11 12if TYPE_CHECKING: 13 from typing import Any 14 15 16class AccountUnlinkWindow(bui.Window): 17 """A window to kick off account unlinks.""" 18 19 def __init__(self, origin_widget: bui.Widget | None = None): 20 plus = bui.app.plus 21 assert plus is not None 22 23 scale_origin: tuple[float, float] | None 24 if origin_widget is not None: 25 self._transition_out = 'out_scale' 26 scale_origin = origin_widget.get_screen_space_center() 27 transition = 'in_scale' 28 else: 29 self._transition_out = 'out_right' 30 scale_origin = None 31 transition = 'in_right' 32 bg_color = (0.4, 0.4, 0.5) 33 self._width = 540 34 self._height = 350 35 self._scroll_width = 400 36 self._scroll_height = 200 37 assert bui.app.classic is not None 38 uiscale = bui.app.ui_v1.uiscale 39 base_scale = ( 40 2.0 41 if uiscale is bui.UIScale.SMALL 42 else 1.6 43 if uiscale is bui.UIScale.MEDIUM 44 else 1.1 45 ) 46 super().__init__( 47 root_widget=bui.containerwidget( 48 size=(self._width, self._height), 49 transition=transition, 50 scale=base_scale, 51 scale_origin_stack_offset=scale_origin, 52 stack_offset=(0, -10) 53 if uiscale is bui.UIScale.SMALL 54 else (0, 0), 55 ) 56 ) 57 self._cancel_button = bui.buttonwidget( 58 parent=self._root_widget, 59 position=(30, self._height - 50), 60 size=(50, 50), 61 scale=0.7, 62 label='', 63 color=bg_color, 64 on_activate_call=self._cancel, 65 autoselect=True, 66 icon=bui.gettexture('crossOut'), 67 iconscale=1.2, 68 ) 69 bui.textwidget( 70 parent=self._root_widget, 71 position=(self._width * 0.5, self._height * 0.88), 72 size=(0, 0), 73 text=bui.Lstr( 74 resource='accountSettingsWindow.unlinkAccountsInstructionsText' 75 ), 76 maxwidth=self._width * 0.7, 77 color=bui.app.ui_v1.infotextcolor, 78 h_align='center', 79 v_align='center', 80 ) 81 bui.containerwidget( 82 edit=self._root_widget, cancel_button=self._cancel_button 83 ) 84 85 self._scrollwidget = bui.scrollwidget( 86 parent=self._root_widget, 87 highlight=False, 88 position=( 89 (self._width - self._scroll_width) * 0.5, 90 self._height - 85 - self._scroll_height, 91 ), 92 size=(self._scroll_width, self._scroll_height), 93 ) 94 bui.containerwidget(edit=self._scrollwidget, claims_left_right=True) 95 self._columnwidget = bui.columnwidget( 96 parent=self._scrollwidget, border=2, margin=0, left_border=10 97 ) 98 99 our_login_id = plus.get_v1_account_public_login_id() 100 if our_login_id is None: 101 entries = [] 102 else: 103 account_infos = plus.get_v1_account_misc_read_val_2( 104 'linkedAccounts2', [] 105 ) 106 entries = [ 107 {'name': ai['d'], 'id': ai['id']} 108 for ai in account_infos 109 if ai['id'] != our_login_id 110 ] 111 112 # (avoid getting our selection stuck on an empty column widget) 113 if not entries: 114 bui.containerwidget(edit=self._scrollwidget, selectable=False) 115 for i, entry in enumerate(entries): 116 txt = bui.textwidget( 117 parent=self._columnwidget, 118 selectable=True, 119 text=entry['name'], 120 size=(self._scroll_width - 30, 30), 121 autoselect=True, 122 click_activate=True, 123 on_activate_call=bui.Call(self._on_entry_selected, entry), 124 ) 125 bui.widget(edit=txt, left_widget=self._cancel_button) 126 if i == 0: 127 bui.widget(edit=txt, up_widget=self._cancel_button) 128 129 def _on_entry_selected(self, entry: dict[str, Any]) -> None: 130 plus = bui.app.plus 131 assert plus is not None 132 133 bui.screenmessage( 134 bui.Lstr( 135 resource='pleaseWaitText', fallback_resource='requestingText' 136 ), 137 color=(0, 1, 0), 138 ) 139 plus.add_v1_account_transaction( 140 { 141 'type': 'ACCOUNT_UNLINK_REQUEST', 142 'accountID': entry['id'], 143 'expire_time': time.time() + 5, 144 } 145 ) 146 plus.run_v1_account_transactions() 147 bui.containerwidget( 148 edit=self._root_widget, transition=self._transition_out 149 ) 150 151 def _cancel(self) -> None: 152 bui.containerwidget( 153 edit=self._root_widget, transition=self._transition_out 154 )
class
AccountUnlinkWindow(bauiv1._uitypes.Window):
17class AccountUnlinkWindow(bui.Window): 18 """A window to kick off account unlinks.""" 19 20 def __init__(self, origin_widget: bui.Widget | None = None): 21 plus = bui.app.plus 22 assert plus is not None 23 24 scale_origin: tuple[float, float] | None 25 if origin_widget is not None: 26 self._transition_out = 'out_scale' 27 scale_origin = origin_widget.get_screen_space_center() 28 transition = 'in_scale' 29 else: 30 self._transition_out = 'out_right' 31 scale_origin = None 32 transition = 'in_right' 33 bg_color = (0.4, 0.4, 0.5) 34 self._width = 540 35 self._height = 350 36 self._scroll_width = 400 37 self._scroll_height = 200 38 assert bui.app.classic is not None 39 uiscale = bui.app.ui_v1.uiscale 40 base_scale = ( 41 2.0 42 if uiscale is bui.UIScale.SMALL 43 else 1.6 44 if uiscale is bui.UIScale.MEDIUM 45 else 1.1 46 ) 47 super().__init__( 48 root_widget=bui.containerwidget( 49 size=(self._width, self._height), 50 transition=transition, 51 scale=base_scale, 52 scale_origin_stack_offset=scale_origin, 53 stack_offset=(0, -10) 54 if uiscale is bui.UIScale.SMALL 55 else (0, 0), 56 ) 57 ) 58 self._cancel_button = bui.buttonwidget( 59 parent=self._root_widget, 60 position=(30, self._height - 50), 61 size=(50, 50), 62 scale=0.7, 63 label='', 64 color=bg_color, 65 on_activate_call=self._cancel, 66 autoselect=True, 67 icon=bui.gettexture('crossOut'), 68 iconscale=1.2, 69 ) 70 bui.textwidget( 71 parent=self._root_widget, 72 position=(self._width * 0.5, self._height * 0.88), 73 size=(0, 0), 74 text=bui.Lstr( 75 resource='accountSettingsWindow.unlinkAccountsInstructionsText' 76 ), 77 maxwidth=self._width * 0.7, 78 color=bui.app.ui_v1.infotextcolor, 79 h_align='center', 80 v_align='center', 81 ) 82 bui.containerwidget( 83 edit=self._root_widget, cancel_button=self._cancel_button 84 ) 85 86 self._scrollwidget = bui.scrollwidget( 87 parent=self._root_widget, 88 highlight=False, 89 position=( 90 (self._width - self._scroll_width) * 0.5, 91 self._height - 85 - self._scroll_height, 92 ), 93 size=(self._scroll_width, self._scroll_height), 94 ) 95 bui.containerwidget(edit=self._scrollwidget, claims_left_right=True) 96 self._columnwidget = bui.columnwidget( 97 parent=self._scrollwidget, border=2, margin=0, left_border=10 98 ) 99 100 our_login_id = plus.get_v1_account_public_login_id() 101 if our_login_id is None: 102 entries = [] 103 else: 104 account_infos = plus.get_v1_account_misc_read_val_2( 105 'linkedAccounts2', [] 106 ) 107 entries = [ 108 {'name': ai['d'], 'id': ai['id']} 109 for ai in account_infos 110 if ai['id'] != our_login_id 111 ] 112 113 # (avoid getting our selection stuck on an empty column widget) 114 if not entries: 115 bui.containerwidget(edit=self._scrollwidget, selectable=False) 116 for i, entry in enumerate(entries): 117 txt = bui.textwidget( 118 parent=self._columnwidget, 119 selectable=True, 120 text=entry['name'], 121 size=(self._scroll_width - 30, 30), 122 autoselect=True, 123 click_activate=True, 124 on_activate_call=bui.Call(self._on_entry_selected, entry), 125 ) 126 bui.widget(edit=txt, left_widget=self._cancel_button) 127 if i == 0: 128 bui.widget(edit=txt, up_widget=self._cancel_button) 129 130 def _on_entry_selected(self, entry: dict[str, Any]) -> None: 131 plus = bui.app.plus 132 assert plus is not None 133 134 bui.screenmessage( 135 bui.Lstr( 136 resource='pleaseWaitText', fallback_resource='requestingText' 137 ), 138 color=(0, 1, 0), 139 ) 140 plus.add_v1_account_transaction( 141 { 142 'type': 'ACCOUNT_UNLINK_REQUEST', 143 'accountID': entry['id'], 144 'expire_time': time.time() + 5, 145 } 146 ) 147 plus.run_v1_account_transactions() 148 bui.containerwidget( 149 edit=self._root_widget, transition=self._transition_out 150 ) 151 152 def _cancel(self) -> None: 153 bui.containerwidget( 154 edit=self._root_widget, transition=self._transition_out 155 )
A window to kick off account unlinks.
AccountUnlinkWindow(origin_widget: _bauiv1.Widget | None = None)
20 def __init__(self, origin_widget: bui.Widget | None = None): 21 plus = bui.app.plus 22 assert plus is not None 23 24 scale_origin: tuple[float, float] | None 25 if origin_widget is not None: 26 self._transition_out = 'out_scale' 27 scale_origin = origin_widget.get_screen_space_center() 28 transition = 'in_scale' 29 else: 30 self._transition_out = 'out_right' 31 scale_origin = None 32 transition = 'in_right' 33 bg_color = (0.4, 0.4, 0.5) 34 self._width = 540 35 self._height = 350 36 self._scroll_width = 400 37 self._scroll_height = 200 38 assert bui.app.classic is not None 39 uiscale = bui.app.ui_v1.uiscale 40 base_scale = ( 41 2.0 42 if uiscale is bui.UIScale.SMALL 43 else 1.6 44 if uiscale is bui.UIScale.MEDIUM 45 else 1.1 46 ) 47 super().__init__( 48 root_widget=bui.containerwidget( 49 size=(self._width, self._height), 50 transition=transition, 51 scale=base_scale, 52 scale_origin_stack_offset=scale_origin, 53 stack_offset=(0, -10) 54 if uiscale is bui.UIScale.SMALL 55 else (0, 0), 56 ) 57 ) 58 self._cancel_button = bui.buttonwidget( 59 parent=self._root_widget, 60 position=(30, self._height - 50), 61 size=(50, 50), 62 scale=0.7, 63 label='', 64 color=bg_color, 65 on_activate_call=self._cancel, 66 autoselect=True, 67 icon=bui.gettexture('crossOut'), 68 iconscale=1.2, 69 ) 70 bui.textwidget( 71 parent=self._root_widget, 72 position=(self._width * 0.5, self._height * 0.88), 73 size=(0, 0), 74 text=bui.Lstr( 75 resource='accountSettingsWindow.unlinkAccountsInstructionsText' 76 ), 77 maxwidth=self._width * 0.7, 78 color=bui.app.ui_v1.infotextcolor, 79 h_align='center', 80 v_align='center', 81 ) 82 bui.containerwidget( 83 edit=self._root_widget, cancel_button=self._cancel_button 84 ) 85 86 self._scrollwidget = bui.scrollwidget( 87 parent=self._root_widget, 88 highlight=False, 89 position=( 90 (self._width - self._scroll_width) * 0.5, 91 self._height - 85 - self._scroll_height, 92 ), 93 size=(self._scroll_width, self._scroll_height), 94 ) 95 bui.containerwidget(edit=self._scrollwidget, claims_left_right=True) 96 self._columnwidget = bui.columnwidget( 97 parent=self._scrollwidget, border=2, margin=0, left_border=10 98 ) 99 100 our_login_id = plus.get_v1_account_public_login_id() 101 if our_login_id is None: 102 entries = [] 103 else: 104 account_infos = plus.get_v1_account_misc_read_val_2( 105 'linkedAccounts2', [] 106 ) 107 entries = [ 108 {'name': ai['d'], 'id': ai['id']} 109 for ai in account_infos 110 if ai['id'] != our_login_id 111 ] 112 113 # (avoid getting our selection stuck on an empty column widget) 114 if not entries: 115 bui.containerwidget(edit=self._scrollwidget, selectable=False) 116 for i, entry in enumerate(entries): 117 txt = bui.textwidget( 118 parent=self._columnwidget, 119 selectable=True, 120 text=entry['name'], 121 size=(self._scroll_width - 30, 30), 122 autoselect=True, 123 click_activate=True, 124 on_activate_call=bui.Call(self._on_entry_selected, entry), 125 ) 126 bui.widget(edit=txt, left_widget=self._cancel_button) 127 if i == 0: 128 bui.widget(edit=txt, up_widget=self._cancel_button)
Inherited Members
- bauiv1._uitypes.Window
- get_root_widget