From 90a649e0c3c953f2399705711903ef2453cdff0d Mon Sep 17 00:00:00 2001 From: ganimtron-10 Date: Sat, 18 Sep 2021 13:33:58 +0530 Subject: [PATCH 1/3] adding on_blur hook --- fury/ui/elements.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 9f3569d5e..3aee2aee5 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -100,6 +100,8 @@ def __init__(self, width, height, text="Enter Text", position=(100, 10), self.caret_pos = 0 self.init = True + self.on_blur = lambda ui: None + def _setup(self): """Setup this UI component. @@ -186,11 +188,12 @@ def handle_character(self, key, key_char): ---------- character : str """ - if key_char != '' and key_char in printable: - self.add_character(key_char) - elif key.lower() == "return": + if key.lower() == "return": self.render_text(False) + self.on_blur(self) return True + elif key_char != '' and key_char in printable: + self.add_character(key_char) if key.lower() == "backspace": self.remove_character() elif key.lower() == "left": From 750e99f4999ff13993fa485e0142fbdda7341dea Mon Sep 17 00:00:00 2001 From: ganimtron-10 Date: Fri, 15 Oct 2021 16:11:04 +0530 Subject: [PATCH 2/3] changing hookname to `off_focus` --- fury/ui/elements.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 3aee2aee5..58e578ad7 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -100,7 +100,7 @@ def __init__(self, width, height, text="Enter Text", position=(100, 10), self.caret_pos = 0 self.init = True - self.on_blur = lambda ui: None + self.off_focus = lambda ui: None def _setup(self): """Setup this UI component. @@ -190,7 +190,7 @@ def handle_character(self, key, key_char): """ if key.lower() == "return": self.render_text(False) - self.on_blur(self) + self.off_focus(self) return True elif key_char != '' and key_char in printable: self.add_character(key_char) @@ -1743,9 +1743,9 @@ def _setup(self): # Option's button self.button_icons = [] self.button_icons.append(('unchecked', - read_viz_icons(fname="stop2.png"))) + read_viz_icons(fname="stop2.png"))) self.button_icons.append(('checked', - read_viz_icons(fname="checkmark.png"))) + read_viz_icons(fname="checkmark.png"))) self.button = Button2D(icon_fnames=self.button_icons, size=self.button_size) @@ -2399,7 +2399,7 @@ def _setup(self): scroll_bar_height = self.nb_slots * (size[1] - 2 * self.margin) \ / len(self.values) self.scroll_bar = Rectangle2D(size=(int(size[0]/20), - scroll_bar_height)) + scroll_bar_height)) if len(self.values) <= self.nb_slots: self.scroll_bar.set_visibility(False) self.panel.add_element( From 83dc412900b6c7c34ff2f2012a14e39464981e11 Mon Sep 17 00:00:00 2001 From: ganimtron-10 Date: Fri, 15 Oct 2021 16:11:31 +0530 Subject: [PATCH 3/3] updating tests --- fury/data/files/test_ui_textbox.json | 2 +- fury/data/files/test_ui_textbox.log.gz | Bin 2436 -> 654 bytes fury/ui/tests/test_elements.py | 11 +++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/fury/data/files/test_ui_textbox.json b/fury/data/files/test_ui_textbox.json index cdc001565..835ee2647 100644 --- a/fury/data/files/test_ui_textbox.json +++ b/fury/data/files/test_ui_textbox.json @@ -1 +1 @@ -{"CharEvent": 36, "MouseMoveEvent": 400, "KeyPressEvent": 36, "KeyReleaseEvent": 36, "LeftButtonPressEvent": 1, "LeftButtonReleaseEvent": 1, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 75, "MouseMoveEvent": 1, "KeyPressEvent": 77, "KeyReleaseEvent": 75, "LeftButtonPressEvent": 2, "LeftButtonReleaseEvent": 2, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_textbox.log.gz b/fury/data/files/test_ui_textbox.log.gz index e5447c14b2a29767bd44e9c46a436a9422cced7f..7aecf42bd6be501cebc12332af9f52d6e771b739 100644 GIT binary patch literal 654 zcmV;90&)ExiwFo%R%u}Z|8!+@bYFF8Uvy=7bYgFKE^KdS0PUGkZ`v>vh2QxVmi9iy zF{I7oI`Ontnn2p?lz}O%Awh|$*uS6Mj1b7VHz;k|hgk?z@!gyg-?+|+`6TA1(8>0P zF3L@w3He!$riWc#>glu2j0nUej_v2mYc$i@QWuC!GjjxTqK;o%@R09I{g6NFtDxjy zAS4OLw;YUwqTyJKX&7=aV4%7c5e+BehK8YtX&5jtv`wJ<7e*`{vs4L5_csjfo2HVb z_NpqD(mj^3ofR~--JmalMI4>5)b{Fh{qFV3-0h9Yv+sp2%Z{3vPIXdZrEmHVl8A5Y z+)hSc*GYkiJr2vBIMRI?r6`f`5s}J`0w^80f7T_G{)bvkRi{=gfw4M2{L;9_b}ow5 znehc;r0W7KZT}FDSh_-tbX|a@ZF9sLOIL`It_!fVn*&c+xmGLJ_6mRUF5k|y*%uicKm*ej zjUr;7va#*fD#W6VQonk7GjHb2yqPz9U$X&!GPx${yluAnpoDXh?zaziRetRoo;tHN o``eV?#(wW@?EVjLZ=7?P8Sy1$=0gRihm9fOUvp+Pn=T^&0Ex|0`v3p{ literal 2436 zcmV-~348V*iwFpq3K?Jm|8!+@bYFF8Uvy=7bYgFKE^KdS0PWmMZ{5Zj#__#B1%a+z z%>A-W;Z+)-uz_w1)j4jA+EO4L2hO+eJCtnFGS58!HaDOU40ywzIGlH`oEe@!Ew9eE zr>pmWKi%HFy}4fepZ&8JAAh{LJH7bnbbVgjl6$xR*MHAmp02+?-5y=}_Vn}1)4S8v zr@!;b_vN{dN6(eF4VuUPKJN)5bMmMp`1y zE=UvBv0E9d^CbwAfw4AN=4BCD2gcIMO&IH+^E`&Z+Nd@e7?9TJGqZ^E=rg4$z*ybL zqAV=N(u{sAi?SGflr&D8(T_=E`AVYPM?a=aw6u~auULSIz*wD6qP#){#_C}b8%RHugLr31e{%0T_|5(bq|1&*Meji^a!_e2uhkP zj}TD_t&^7|EWHA$L?=vwzoNYF&oU00T@qMHzDny3N@ zh^R91h$Kzs1z@vFAm-t>F$4&wM4A_mz0U(NkG##3fhbZWDWViX3NM9@sZ(W}RLA8s z@tOoeqH3TK5#5FfshVU>k|wH$%!mX{ye3Zev!QF!WQR^j)g)_@G>N|o(W6-Knm9>( z*F;Cx>*%VN&p~tncwGQqN7w7kM_!2$g$*`P_(Bx#a0DVpeJ>zgKBlCg)C z=Wvhe7zs=xP!ae?=_~h?-tUm!IH0gx9VYZ}>9?tQ+s*&iMl+6REN_mJf4KIGGJWZ}#J&IEuspSo zr}X}t^pZ^#7k`-0!=+1qIks7saQK%GmoEP081&=uU*2E3oU84jE`TlVOW<=7#}7A} zcRGH!`%9Bse+Ex=_x~`xQL|qC@b=C5A1@D6+h0Gvhaan`emQ-7{qE}h!9Bjbe(4_L z;Kp)wKK%Pn*Dj_%hL7tH@BcYIcKFxz@iRO!m*V!-(_T=!XS#HsuTwmJ`tjfQH}BqE z-5x*r?)oG(q;zRMwXmo3j@|APpY@ZGhj-Ww9DP?JQK$?BjS@piqd<^bibTGCUS64? z{COQ`f)YW2pxvtRWwl?_pDP{o{WilyWu$hixfA7)azMr2whfz!DoCYm3u&SPQl6-B zfF7vb2H8aAZ8L77B2r=7` z5tSQK6{@J~y$y&&we29lM0KJpUPJ|?5>mUv5EE6A>e~s9X^kdocVJ|q3Q}!5pEB)p zh}xaInW%zP+YT*F`g^w>kD87hM3wC@)^y}cO^>1hsk9wbo6Z4q@FaO6SqKk{Y!t zOU+2>X}fh2wGq`o9{YBRe6Au=38{iqMM_5^`RxmWx$;N_q;w?4R(wXPAf@A#B31fr zZv9xtF%}rpRc!r=C@}_t);Md7b;Q66?#e*i`tCC?!7^hyAY;*AzuVn29gwlkA3S4$ zvBa1T$oPsbbi|@(3}hkiJ~I_8GgcXEi0O%C8oy4FJY$iu%owP>efMSdoPjCf$^v7N zF`d)#BO)uv|E6~-!Kx{{A2-|QL7j8()y-#ZqqLEpQw#8_dhG6uqH^{slwB4dfM!Whd! zV_5*N%dM=xAcRx4xx7_BTbhQb@cVARG^d}gd821c2cCB}4N zS?!2mlv!C|3?|wTODs_^%B+kfnpr@=@Ub#oLwZ_Q$a=Zyp6Q&% zz*$F3Zzzv$CWD#k%0NIeXCQ7?reH$5GToEg3vmV$+Lh^mSl^bxOx1d$toJ_dna*j7 zoOQ&&gx21|Gnmk(@jIrGF%S?dgF8%|%vL=<`YXATm CslcxQ diff --git a/fury/ui/tests/test_elements.py b/fury/ui/tests/test_elements.py index 673c2a8ff..2a02f68c4 100644 --- a/fury/ui/tests/test_elements.py +++ b/fury/ui/tests/test_elements.py @@ -26,6 +26,15 @@ def test_ui_textbox(recording=False): another_textbox_test = ui.TextBox2D(height=3, width=10, text="Enter Text") another_textbox_test.set_message("Enter Text") + # Checking whether textbox went out of focus + is_off_focused = [False] + + def _off_focus(textbox): + is_off_focused[0] = True + + # Set up a callback when textbox went out of focus + textbox_test.off_focus = _off_focus + # Assign the counter callback to every possible event. event_counter = EventCounter() event_counter.monitor(textbox_test) @@ -45,6 +54,8 @@ def test_ui_textbox(recording=False): expected = EventCounter.load(expected_events_counts_filename) event_counter.check_counts(expected) + npt.assert_equal(is_off_focused[0], True) + def test_ui_line_slider_2d_horizontal_bottom(recording=False): filename = "test_ui_line_slider_2d_horizontal_bottom"