Skip to content

Commit c32c8bd

Browse files
committed
Add more pythonnative views
1 parent a1aa49f commit c32c8bd

File tree

14 files changed

+228
-19
lines changed

14 files changed

+228
-19
lines changed

apps/android_pythonnative_3/app/src/main/python/app/main.py

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,36 @@
44
def main(context):
55
layout = pn.LinearLayout(context)
66

7-
label = pn.Label(context, "This is a PythonNative label")
8-
layout.add_view(label)
9-
10-
switch = pn.Switch(context)
11-
layout.add_view(switch)
12-
13-
text_field = pn.TextField(context)
14-
layout.add_view(text_field)
15-
16-
text_view = pn.TextView(context)
17-
layout.add_view(text_view)
18-
19-
web_view = pn.WebView(context)
20-
web_view.load_url("https://www.djangoproject.com/")
21-
layout.add_view(web_view)
22-
23-
for i in range(100):
24-
button = pn.Button(context, "Click me")
25-
layout.add_view(button)
7+
# label = pn.Label(context, "This is a PythonNative label")
8+
# layout.add_view(label)
9+
#
10+
# switch = pn.Switch(context)
11+
# layout.add_view(switch)
12+
#
13+
# text_field = pn.TextField(context)
14+
# layout.add_view(text_field)
15+
#
16+
# text_view = pn.TextView(context)
17+
# layout.add_view(text_view)
18+
19+
activity_indicator_view = pn.ActivityIndicatorView(context)
20+
activity_indicator_view.start_animating()
21+
layout.add_view(activity_indicator_view)
22+
23+
material_activity_indicator_view = pn.MaterialActivityIndicatorView(context)
24+
material_activity_indicator_view.start_animating()
25+
layout.add_view(material_activity_indicator_view)
26+
27+
progress_view = pn.ProgressView(context)
28+
progress_view.set_progress(0.5)
29+
layout.add_view(progress_view)
30+
31+
# web_view = pn.WebView(context)
32+
# web_view.load_url("https://www.djangoproject.com/")
33+
# layout.add_view(web_view)
34+
#
35+
# for i in range(100):
36+
# button = pn.Button(context, "Click me")
37+
# layout.add_view(button)
2638

2739
return layout.native_instance

libs/pythonnative/pythonnative/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
from .activity_indicator_view import ActivityIndicatorView
12
from .button import Button
23
from .label import Label
34
from .linear_layout import LinearLayout
5+
from .material_activity_inidicator_view import MaterialActivityIndicatorView
6+
from .progress_view import ProgressView
47
from .screen import Screen
58
from .switch import Switch
69
from .text_field import TextField
710
from .text_view import TextView
811
from .web_view import WebView
912

1013
__all__ = [
14+
"ActivityIndicatorView",
1115
"Button",
1216
"Label",
1317
"LinearLayout",
18+
"MaterialActivityIndicatorView",
19+
"ProgressView",
1420
"Screen",
1521
"Switch",
1622
"TextField",
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from abc import ABC, abstractmethod
2+
from .utils import IS_ANDROID
3+
from .view import ViewBase
4+
5+
# ========================================
6+
# Base class
7+
# ========================================
8+
9+
10+
class ActivityIndicatorViewBase(ABC):
11+
@abstractmethod
12+
def __init__(self) -> None:
13+
super().__init__()
14+
15+
@abstractmethod
16+
def start_animating(self) -> None:
17+
pass
18+
19+
@abstractmethod
20+
def stop_animating(self) -> None:
21+
pass
22+
23+
24+
if IS_ANDROID:
25+
# ========================================
26+
# Android class
27+
# ========================================
28+
29+
from java import jclass
30+
31+
class ActivityIndicatorView(ActivityIndicatorViewBase, ViewBase):
32+
def __init__(self, context) -> None:
33+
super().__init__()
34+
self.native_class = jclass("android.widget.ProgressBar")
35+
# self.native_instance = self.native_class(context, None, android.R.attr.progressBarStyleLarge)
36+
self.native_instance = self.native_class(context)
37+
self.native_instance.setIndeterminate(True)
38+
39+
def start_animating(self) -> None:
40+
# self.native_instance.setVisibility(android.view.View.VISIBLE)
41+
return
42+
43+
def stop_animating(self) -> None:
44+
# self.native_instance.setVisibility(android.view.View.GONE)
45+
return
46+
47+
else:
48+
# ========================================
49+
# iOS class
50+
# ========================================
51+
52+
from rubicon.objc import ObjCClass
53+
54+
class ActivityIndicatorView(ActivityIndicatorViewBase, ViewBase):
55+
def __init__(self) -> None:
56+
super().__init__()
57+
self.native_class = ObjCClass("UIActivityIndicatorView")
58+
self.native_instance = self.native_class.alloc().initWithActivityIndicatorStyle_(0) # 0: UIActivityIndicatorViewStyleLarge
59+
self.native_instance.hidesWhenStopped = True
60+
61+
def start_animating(self) -> None:
62+
self.native_instance.startAnimating()
63+
64+
def stop_animating(self) -> None:
65+
self.native_instance.stopAnimating()
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from abc import ABC, abstractmethod
2+
from .utils import IS_ANDROID
3+
from .view import ViewBase
4+
5+
# ========================================
6+
# Base class
7+
# ========================================
8+
9+
class MaterialActivityIndicatorViewBase(ABC):
10+
@abstractmethod
11+
def __init__(self) -> None:
12+
super().__init__()
13+
14+
@abstractmethod
15+
def start_animating(self) -> None:
16+
pass
17+
18+
@abstractmethod
19+
def stop_animating(self) -> None:
20+
pass
21+
22+
23+
if IS_ANDROID:
24+
# ========================================
25+
# Android class
26+
# ========================================
27+
28+
from java import jclass
29+
30+
class MaterialActivityIndicatorView(MaterialActivityIndicatorViewBase, ViewBase):
31+
def __init__(self, context) -> None:
32+
super().__init__()
33+
self.native_class = jclass("com.google.android.material.progressindicator.CircularProgressIndicator")
34+
self.native_instance = self.native_class(context)
35+
self.native_instance.setIndeterminate(True)
36+
37+
def start_animating(self) -> None:
38+
# self.native_instance.setVisibility(android.view.View.VISIBLE)
39+
return
40+
41+
def stop_animating(self) -> None:
42+
# self.native_instance.setVisibility(android.view.View.GONE)
43+
return
44+
45+
else:
46+
# ========================================
47+
# iOS class
48+
# ========================================
49+
50+
from rubicon.objc import ObjCClass
51+
52+
class MaterialActivityIndicatorView(MaterialActivityIndicatorViewBase, ViewBase):
53+
def __init__(self) -> None:
54+
super().__init__()
55+
self.native_class = ObjCClass("UIActivityIndicatorView")
56+
self.native_instance = self.native_class.alloc().initWithActivityIndicatorStyle_(0) # 0: UIActivityIndicatorViewStyleLarge
57+
self.native_instance.hidesWhenStopped = True
58+
59+
def start_animating(self) -> None:
60+
self.native_instance.startAnimating()
61+
62+
def stop_animating(self) -> None:
63+
self.native_instance.stopAnimating()

libs/pythonnative/pythonnative/material_button.py

Whitespace-only changes.

libs/pythonnative/pythonnative/material_date_picker.py

Whitespace-only changes.

libs/pythonnative/pythonnative/material_progress_view.py

Whitespace-only changes.

libs/pythonnative/pythonnative/material_search_bar.py

Whitespace-only changes.

libs/pythonnative/pythonnative/material_switch.py

Whitespace-only changes.

libs/pythonnative/pythonnative/material_time_picker.py

Whitespace-only changes.

0 commit comments

Comments
 (0)