Skip to content

Commit

Permalink
Remove set_on_ usage for ported widgets.
Browse files Browse the repository at this point in the history
  • Loading branch information
freakboy3742 committed Mar 30, 2023
1 parent ec34d4f commit 0d9d43a
Show file tree
Hide file tree
Showing 41 changed files with 55 additions and 204 deletions.
3 changes: 0 additions & 3 deletions android/src/toga_android/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,6 @@ def show_about_dialog(self):
def exit(self):
pass

def set_on_exit(self, value):
pass

async def intent_result(self, intent):
"""Calls an Intent and waits for its result.
Expand Down
6 changes: 1 addition & 5 deletions android/src/toga_android/widgets/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def __init__(self, button_impl):
self.button_impl = button_impl

def onClick(self, _view):
self.button_impl.interface.on_press()
self.button_impl.interface.on_press(None)


class Button(TextViewWidget):
Expand All @@ -33,10 +33,6 @@ def set_text(self, text):
def set_enabled(self, value):
self.native.setEnabled(value)

def set_on_press(self, handler):
# No special handling required
pass

def set_background_color(self, value):
# Do not use self.native.setBackgroundColor - this messes with the button style!
self.native.getBackground().setColorFilter(
Expand Down
13 changes: 1 addition & 12 deletions android/src/toga_android/widgets/slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ def __init__(self, impl):
self.impl = impl

def onProgressChanged(self, _view, _progress, _from_user):
if self.impl.interface.on_change:
self.impl.interface.on_change(widget=self.impl.interface)
self.impl.interface.on_change(None)

# Add two unused methods so that the Java interface is completely implemented.
def onStartTrackingTouch(self, native_seekbar):
Expand Down Expand Up @@ -73,13 +72,3 @@ def rehint(self):
)
self.interface.intrinsic.width = at_least(self.native.getMeasuredWidth())
self.interface.intrinsic.height = self.native.getMeasuredHeight()

def set_on_change(self, handler):
# No special handling required
pass

def set_on_press(self, handler):
self.interface.factory.not_implemented("Slider.set_on_press()")

def set_on_release(self, handler):
self.interface.factory.not_implemented("Slider.set_on_release()")
6 changes: 1 addition & 5 deletions android/src/toga_android/widgets/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def __init__(self, impl):
self._impl = impl

def onCheckedChanged(self, _button, _checked):
self._impl.interface.on_change()
self._impl.interface.on_change(None)


class Switch(TextViewWidget):
Expand All @@ -38,10 +38,6 @@ def set_value(self, value):
def get_value(self):
return self.native.isChecked()

def set_on_change(self, handler):
# No special handling required
pass

def rehint(self):
if not self.native.getLayoutParams():
return
Expand Down
3 changes: 0 additions & 3 deletions cocoa/src/toga_cocoa/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,6 @@ def show_about_dialog(self):
def exit(self):
self.loop.stop()

def set_on_exit(self, value):
pass

def current_window(self):
return self.native.keyWindow

Expand Down
6 changes: 1 addition & 5 deletions cocoa/src/toga_cocoa/widgets/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class TogaButton(NSButton):

@objc_method
def onPress_(self, obj) -> None:
self.interface.on_press()
self.interface.on_press(None)


class Button(Widget):
Expand Down Expand Up @@ -71,10 +71,6 @@ def get_text(self):
def set_text(self, text):
self.native.title = text

def set_on_press(self, handler):
# No special handling required
pass

def set_background_color(self, color):
if color == TRANSPARENT or color is None:
self.native.bezelColor = None
Expand Down
18 changes: 3 additions & 15 deletions cocoa/src/toga_cocoa/widgets/slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,11 @@ class TogaSlider(NSSlider):
def onSlide_(self, sender) -> None:
event_type = sender.window.currentEvent().type
if event_type == NSEventType.LeftMouseDown:
if self.interface.on_press:
self.interface.on_press(self.interface)
self.interface.on_press(None)
elif event_type == NSEventType.LeftMouseUp:
if self.interface.on_release:
self.interface.on_release(self.interface)
self.interface.on_release(None)

if self.interface.on_change:
self.interface.on_change(self.interface)
self.interface.on_change(None)


class Slider(Widget):
Expand Down Expand Up @@ -63,12 +60,3 @@ def rehint(self):
content_size = self.native.intrinsicContentSize()
self.interface.intrinsic.height = content_size.height
self.interface.intrinsic.width = at_least(self.interface.MIN_WIDTH)

def set_on_change(self, handler):
pass

def set_on_press(self, handler):
pass

def set_on_release(self, handler):
pass
5 changes: 1 addition & 4 deletions cocoa/src/toga_cocoa/widgets/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class TogaSwitch(NSButton):

@objc_method
def onPress_(self, obj) -> None:
self.interface.on_change()
self.interface.on_change(None)


class Switch(Widget):
Expand Down Expand Up @@ -63,6 +63,3 @@ def rehint(self):
content_size = self.native.intrinsicContentSize()
self.interface.intrinsic.height = content_size.height
self.interface.intrinsic.width = at_least(content_size.width)

def set_on_change(self, handler):
pass
3 changes: 0 additions & 3 deletions cocoa/src/toga_cocoa/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,9 +310,6 @@ def get_visible(self):
def set_full_screen(self, is_full_screen):
self.interface.factory.not_implemented("Window.set_full_screen()")

def set_on_close(self, handler):
pass

def cocoa_windowShouldClose(self):
if self.interface.on_close:
# The on_close handler has a cleanup method that will enforce
Expand Down
12 changes: 6 additions & 6 deletions core/src/toga/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,10 @@ def on_close(self, handler):
Args:
handler (:obj:`callable`): The handler passed.
"""
raise AttributeError(
"Cannot set on_close handler for the main window. Use the app on_exit handler instead"
)
if handler:
raise AttributeError(
"Cannot set on_close handler for the main window. Use the app on_exit handler instead"
)


class App:
Expand Down Expand Up @@ -551,7 +552,7 @@ def main_loop(self):

def exit(self):
"""Quit the application gracefully."""
self.on_exit()
self.on_exit(None)

@property
def on_exit(self):
Expand Down Expand Up @@ -579,7 +580,6 @@ def cleanup(app, should_exit):
app._impl.exit()

self._on_exit = wrapped_handler(self, handler, cleanup=cleanup)
self._impl.set_on_exit(self._on_exit)

def add_background_task(self, handler):
"""Schedule a task to run in the background.
Expand All @@ -592,7 +592,7 @@ def add_background_task(self, handler):
:param handler: A coroutine, generator or callable.
"""
self._impl.loop.call_soon_threadsafe(wrapped_handler(self, handler))
self._impl.loop.call_soon_threadsafe(wrapped_handler(self, handler), None)


class DocumentApp(App):
Expand Down
4 changes: 2 additions & 2 deletions core/src/toga/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def wrapped_handler(interface, handler, cleanup=None):
if isinstance(handler, NativeHandler):
return handler.native

def _handler(*args, **kwargs):
def _handler(widget, *args, **kwargs):
if asyncio.iscoroutinefunction(handler):
asyncio.ensure_future(
handler_with_cleanup(handler, cleanup, interface, *args, **kwargs)
Expand All @@ -77,7 +77,7 @@ def _handler(*args, **kwargs):

else:
# A dummy no-op handler
def _handler(*args, **kwargs):
def _handler(widget, *args, **kwargs):
pass

_handler._raw = None
Expand Down
1 change: 0 additions & 1 deletion core/src/toga/widgets/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,3 @@ def on_press(self):
@on_press.setter
def on_press(self, handler):
self._on_press = wrapped_handler(self, handler)
self._impl.set_on_press(self._on_press)
11 changes: 4 additions & 7 deletions core/src/toga/widgets/slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ def __init__(
self.range = range
self.tick_count = tick_count

# IMPORTANT NOTE: Setting value before on_change in order to not
# call it in constructor. Please do not move it from here.
# Set a dummy handler before installing the actual on_change, because we do not want
# on_change triggered by the initial value being set
self.on_change = None
self.value = value

if on_slide:
Expand Down Expand Up @@ -116,8 +117,7 @@ def value(self, value):
)
)
self._impl.set_value(final)
if self.on_change:
self.on_change(self)
self.on_change(self)

@property
def range(self):
Expand Down Expand Up @@ -192,7 +192,6 @@ def on_change(self):
@on_change.setter
def on_change(self, handler):
self._on_change = wrapped_handler(self, handler)
self._impl.set_on_change(self._on_change)

@property
def on_press(self):
Expand All @@ -206,7 +205,6 @@ def on_press(self):
@on_press.setter
def on_press(self, handler):
self._on_press = wrapped_handler(self, handler)
self._impl.set_on_press(self._on_press)

@property
def on_release(self):
Expand All @@ -220,7 +218,6 @@ def on_release(self):
@on_release.setter
def on_release(self, handler):
self._on_release = wrapped_handler(self, handler)
self._impl.set_on_release(self._on_release)

@property
def on_slide(self):
Expand Down
1 change: 0 additions & 1 deletion core/src/toga/widgets/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ def on_change(self):
@on_change.setter
def on_change(self, handler):
self._on_change = wrapped_handler(self, handler)
self._impl.set_on_change(self._on_change)

@property
def value(self):
Expand Down
5 changes: 1 addition & 4 deletions core/src/toga/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,7 @@ def __init__(

self._toolbar = CommandSet(widget=self, on_change=self._impl.create_toolbar)

self._on_close = None
if on_close is not None:
self.on_close = on_close
self.on_close = on_close

@property
def id(self):
Expand Down Expand Up @@ -255,7 +253,6 @@ def cleanup(window, should_close):
window.close()

self._on_close = wrapped_handler(self, handler, cleanup=cleanup)
self._impl.set_on_close(self._on_close)

def close(self):
self.app.windows -= self
Expand Down
6 changes: 3 additions & 3 deletions core/tests/test_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def test_full_screen_set(self):
def test_on_close(self):
with patch.object(self.window, "_impl"):
self.app.windows += self.window
self.assertIsNone(self.window._on_close)
self.assertIsNone(self.window.on_close._raw)

# set a new callback
def callback(window, **extra):
Expand All @@ -213,7 +213,7 @@ def callback(window, **extra):
self.window.on_close = callback
self.assertEqual(self.window.on_close._raw, callback)
self.assertEqual(
self.window.on_close(a=1),
self.window.on_close(None, a=1),
"called <class 'toga.window.Window'> with {'a': 1}",
)

Expand All @@ -226,7 +226,7 @@ def callback(window, **extra):

self.assertEqual(window.on_close._raw, callback)
self.assertEqual(
window.on_close(a=1),
window.on_close(None, a=1),
"called <class 'toga.window.Window'> with {'a': 1}",
)

Expand Down
7 changes: 2 additions & 5 deletions core/tests/widgets/test_button.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,8 @@ def test_button_on_press(button):

assert button.on_press._raw == handler

# Backend has the wrapped version
assert attribute_value(button, "on_press") == button._on_press

# Invoke the callback
button.on_press(a=1)
button._impl.simulate_press()

# Callback was invoked
handler.assert_called_once_with(button, a=1)
handler.assert_called_once_with(button)
Loading

0 comments on commit 0d9d43a

Please sign in to comment.