def add_date_widgets(self, date_to=False): date_from_button = MDRectangleFlatIconButton( text=self.app.date_from.strftime('%d-%m-%Y'), icon="timetable", pos_hint={ 'center_x': .5, 'center_y': .65 }, size_hint=(0.49, 0.085), on_release=lambda x: self.show_date_from()) self.ids['date_from'] = WeakProxy(date_from_button) self.add_widget(date_from_button) if date_to: date_from_button.pos_hint = {'center_x': .25, 'center_y': .65} date_to_button = MDRectangleFlatIconButton( text=self.app.date_to.strftime('%d-%m-%Y'), icon="timetable", pos_hint={ 'center_x': .75, 'center_y': .65 }, size_hint=(0.49, 0.085), on_release=lambda x: self.show_date_to()) self.ids['date_to'] = WeakProxy(date_to_button) self.add_widget(date_to_button)
def user_screen(self): self.manager.get_screen( 'main').ids.btn_camera.color = get_color_from_hex('#FFFFFF') self.manager.get_screen( 'main').ids.btn_home.color = get_color_from_hex('#FFFFFF') self.manager.get_screen( 'main').ids.btn_user.color = get_color_from_hex('#2196F3') self.manager.get_screen('main').ids.master.clear_widgets() user_layout = GridLayout() user_layout.id = 'user_layout' user_layout.spacing = (0, 0.5) user_layout.padding = 40, 10, 40, 10 user_layout.cols = 1 user_layout.row_default_height = self.height * 0.25 user_layout.row_force_default = True lbl_user = Label() lbl_user.id = 'lbl_home' lbl_user.color = get_color_from_hex('#212121') lbl_user.text = 'User Layout' self.manager.get_screen('main').ids[user_layout.id] = \ WeakProxy(user_layout) self.manager.get_screen('main').ids[lbl_user.id] = \ WeakProxy(lbl_user) self.manager.get_screen('main').ids.master.\ add_widget(user_layout) self.manager.get_screen('main').ids.user_layout.\ add_widget(lbl_user)
def home_screen(self): self.manager.get_screen( 'main').ids.btn_camera.color = get_color_from_hex('#FFFFFF') self.manager.get_screen( 'main').ids.btn_home.color = get_color_from_hex('#2196F3') self.manager.get_screen( 'main').ids.btn_user.color = get_color_from_hex('#FFFFFF') self.manager.get_screen('main').ids.master.clear_widgets() home_layout = GridLayout() home_layout.id = 'home_layout' home_layout.spacing = (0, 0.5) home_layout.padding = 40, 10, 40, 10 home_layout.cols = 1 home_layout.row_default_height = self.height * 0.25 home_layout.row_force_default = True lbl_home = Label() lbl_home.id = 'lbl_home' lbl_home.color = get_color_from_hex('#212121') lbl_home.text = 'Home Layout' self.manager.get_screen('main').ids[home_layout.id] = \ WeakProxy(home_layout) self.manager.get_screen('main').ids[lbl_home.id] = \ WeakProxy(home_layout) self.manager.get_screen('main').ids.master.\ add_widget(home_layout) self.manager.get_screen('main').ids.lbl_home.\ add_widget(lbl_home)
def camera_screen(self): self.manager.get_screen( 'main').ids.btn_camera.color = get_color_from_hex('#2196F3') self.manager.get_screen( 'main').ids.btn_home.color = get_color_from_hex('#FFFFFF') self.manager.get_screen( 'main').ids.btn_user.color = get_color_from_hex('#FFFFFF') self.manager.get_screen('main').ids.master.clear_widgets() camera_layout = GridLayout() camera_layout.id = 'camera_layout' camera_layout.spacing = (0, 0.5) camera_layout.padding = 40, 10, 40, 10 camera_layout.cols = 1 camera_layout.row_default_height = self.height * 0.25 camera_layout.row_force_default = True lbl_camera = Label() lbl_camera.id = 'lbl_camera' lbl_camera.color = get_color_from_hex('#212121') lbl_camera.text = 'Camera Layout' self.manager.get_screen('main').ids[camera_layout.id] = \ WeakProxy(camera_layout) self.manager.get_screen('main').ids[lbl_camera.id] = \ WeakProxy(lbl_camera) self.manager.get_screen('main').ids.master.\ add_widget(camera_layout) self.manager.get_screen('main').ids.camera_layout.\ add_widget(lbl_camera)
def test_3_openpress(self, *args): # click on Group 2 to open its DropDown # - DropDown shows up # then click on Group 2 DropDown button # - DropDown disappears # click on Group 1 to open its DropDown # - DropDown shows up # then click on Group 1 DropDown button # - DropDown disappears self._win = EventLoop.window self.clean_garbage() root = Builder.load_string(KV) self.render(root) self.assertLess(len(self._win.children), 2) group2 = root.ids.group2 group2button = root.ids.group2button group1 = root.ids.group1 group1button = root.ids.group1button self.move_frames(5) # no DropDown present yet self.check_dropdown(present=False) self.assertFalse(group2.is_open) self.assertFalse(group1.is_open) items = ((group2, group1, group2button), (group1, group2, group1button)) for item in items: active, passive, button = item # click on active Group TouchPoint(*active.center) # active Group DropDown shows up self.check_dropdown(present=True) gdd = WeakProxy(self._win.children[0]) # active Group DropDown == value in WeakProxy self.assertIn(gdd, self._win.children) self.assertEqual(gdd, self._win.children[0]) self.assertTrue(active.is_open) self.assertFalse(passive.is_open) # click on active Group DropDown Button (needed to_window) TouchPoint(*button.to_window(*button.center)) self.assertTrue(getattr(root, active.text[0::6] + 'button')) # wait for closed Group DropDown to disappear # go to the next frame after the DropDown disappeared sleep(gdd.min_state_time) self.move_frames(1) # no DropDown is open self.assertNotEqual(gdd, self._win.children[0]) self.assertLess(len(self._win.children), 2) self.assertFalse(active.is_open) self.assertFalse(passive.is_open) self.check_dropdown(present=False) self._win.remove_widget(root)
def test_1_openclose(self, *args): # click on Group 2 to open its DropDown # - DropDown shows up # then click away # - Group 2 DropDown disappears # click on Group 1 to open its DropDown # - DropDown shows up # then click away # - Group 1 DropDown disappears self._win = EventLoop.window self.clean_garbage() root = Builder.load_string(KV) self.render(root) self.assertLess(len(self._win.children), 2) group2 = root.ids.group2 group1 = root.ids.group1 self.move_frames(5) # no DropDown present yet self.check_dropdown(present=False) self.assertFalse(group2.is_open) self.assertFalse(group1.is_open) items = ((group2, group1), (group1, group2)) for item in items: active, passive = item # click on active Group TouchPoint(*active.center) # active Group DropDown shows up self.check_dropdown(present=True) gdd = WeakProxy(self._win.children[0]) # active Group DropDown == value in WeakProxy self.assertIn(gdd, self._win.children) self.assertEqual(gdd, self._win.children[0]) self.assertTrue(active.is_open) self.assertFalse(passive.is_open) # click away TouchPoint(0, 0) # wait for closed Group DropDown to disappear # go to the next frame after the DropDown disappeared self.move_frames(5) # no DropDown is open self.assertNotEqual(gdd, self._win.children[0]) self.assertLess(len(self._win.children), 2) self.check_dropdown(present=False) self.assertFalse(active.is_open) self.assertFalse(passive.is_open) self._win.remove_widget(root)
def test_4_openmulti(self, *args): # click on Group to open its DropDown # - DropDown shows up # then click on Group DropDown button # - DropDown disappears # repeat self._win = EventLoop.window self.clean_garbage() root = Builder.load_string(KV) self.render(root) self.assertLess(len(self._win.children), 2) group2 = root.ids.group2 group2button = root.ids.group2button group1 = root.ids.group1 group1button = root.ids.group1button self.move_frames(5) # no DropDown present yet self.check_dropdown(present=False) self.assertFalse(group2.is_open) items = ((group2, group2button), (group1, group1button)) for item in items: group, button = item for _ in range(5): # click on Group TouchPoint(*group.center) # Group DropDown shows up self.check_dropdown(present=True) gdd = WeakProxy(self._win.children[0]) # Group DropDown == value in WeakProxy self.assertIn(gdd, self._win.children) self.assertEqual(gdd, self._win.children[0]) self.assertTrue(group.is_open) # click on Group DropDown Button TouchPoint(*button.to_window(*button.center)) # wait for closed Group DropDown to disappear # go to the next frame after the DropDown disappeared sleep(gdd.min_state_time) self.move_frames(1) # no DropDown is open self.assertNotEqual(gdd, self._win.children[0]) self.assertFalse(group.is_open) self.check_dropdown(present=False) self._win.remove_widget(root)
def proxy_ref(self): '''Return a proxy reference to the widget, i.e. without creating a reference to the widget. See `weakref.proxy <http://docs.python.org/2/library/weakref.html?highlight\ =proxy#weakref.proxy>`_ for more information. .. versionadded:: 1.7.2 ''' _proxy_ref = self._proxy_ref if _proxy_ref is not None: return _proxy_ref f = partial(_widget_destructor, self.uid) self._proxy_ref = _proxy_ref = WeakProxy(self, f) # Only f should be enough here, but it appears that is a very # specific case, the proxy destructor is not called if both f and # _proxy_ref are not together in a tuple. _widget_destructors[self.uid] = (f, _proxy_ref) return _proxy_ref
def fill_accordion_item(self, store): storage_butt = AccordionItem() storage_butt.id = str(store.id) storage_butt.height = 22 storage_butt.title = str(store.name) scroll = ScrollView() scroll.do_scroll_x = False scroll.size_hint = (1, 1) scroll.bar_color = [.5, .10, .15, .8] scroll.bar_inactive_color = [.5, .20, .10, .5] scroll.scroll_type = ['bars'] # [‘bars’, ‘content’] tree_obj = TreeView() tree_obj.size_hint = (1, None) tree_obj.hide_root = True store.tree_view = WeakProxy(tree_obj) scroll.add_widget(tree_obj) storage_butt.add_widget(scroll) return storage_butt
def test_2_switch(self, *args): # click on Group 2 to open its DropDown # - DropDown shows up # then click on Group 1 to open its DropDown # - Group 2 DropDown disappears, Group 1 DropDown shows up # click away # - no DropDown is opened self._win = EventLoop.window self.clean_garbage() root = Builder.load_string(KV) self.render(root) self.assertLess(len(self._win.children), 2) group2 = root.ids.group2 group1 = root.ids.group1 self.move_frames(5) # no DropDown present yet self.check_dropdown(present=False) self.assertFalse(group2.is_open) self.assertFalse(group1.is_open) # click on Group 2 TouchPoint(*group2.center) # Group 2 DropDown shows up self.check_dropdown(present=True) g2dd = WeakProxy(self._win.children[0]) # Group 2 DropDown == value in WeakProxy self.assertIn(g2dd, self._win.children) self.assertEqual(g2dd, self._win.children[0]) self.assertTrue(group2.is_open) self.assertFalse(group1.is_open) # click on Group 1 TouchPoint(*group1.center) # wait for closed Group 2 DropDown to disappear # and for Group 1 DropDown to appear (there are 2 DDs now) # go to the next frame after the DropDown disappeared self.move_frames(5) # Group 1 DropDown != value in WeakProxy (Group 2 DD) self.assertNotEqual(g2dd, self._win.children[0]) self.assertFalse(group2.is_open) self.assertTrue(group1.is_open) self.check_dropdown(present=True) # click away from ActionBar TouchPoint(0, 0) # wait for closed Group DropDown to disappear # go to the next frame after the DropDown disappeared self.move_frames(5) # no DropDown present in Window self.check_dropdown(present=False) self.assertFalse(group2.is_open) self.assertFalse(group1.is_open) self.assertNotIn(g2dd, self._win.children) self._win.remove_widget(root)
def grab_hover(self): '''Prevents other widgets from receiving hover''' HoverBehavior._hover_grab_widget = WeakProxy(self)
def hoverable_add(self): '''Add widget in hover system. By default, is called when widget is added to a parent''' HoverBehavior._hover_widgets.append(WeakProxy(self))