Skip to content

Commit d947761

Browse files
committed
Update pythonnative package structure
1 parent 949c577 commit d947761

File tree

7 files changed

+177
-165
lines changed

7 files changed

+177
-165
lines changed
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
from .pythonnative import Button, Label, LinearLayout, Screen
1+
from .view import View
2+
from .button import Button
3+
from .label import Label
4+
from .linear_layout import LinearLayout
5+
from .screen import Screen
26

3-
__all__ = ["Button", "Label", "LinearLayout", "Screen"]
7+
__all__ = ["View", "Button", "Label", "LinearLayout", "Screen"]
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import platform
2+
from .view import View
3+
4+
if platform.system() == "Android":
5+
from java import jclass
6+
7+
class Button(View):
8+
native_class = jclass("android.widget.Button")
9+
10+
def __init__(self, title: str = "") -> None:
11+
super().__init__()
12+
self.native_instance = self.native_class()
13+
self.set_title(title)
14+
15+
def set_title(self, title: str) -> None:
16+
self.native_instance.setText(title)
17+
18+
def get_title(self) -> str:
19+
return self.native_instance.getText().toString()
20+
21+
elif platform.system() == "iOS":
22+
from rubicon.objc import ObjCClass
23+
24+
class Button(View):
25+
native_class = ObjCClass("UIButton")
26+
27+
def __init__(self, title: str = "") -> None:
28+
super().__init__()
29+
self.native_instance = self.native_class.alloc().init()
30+
self.set_title(title)
31+
32+
def set_title(self, title: str) -> None:
33+
self.native_instance.setTitle_forState_(title, 0)
34+
35+
def get_title(self) -> str:
36+
return self.native_instance.titleForState_(0)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import platform
2+
from .view import View
3+
4+
if platform.system() == "Android":
5+
from java import jclass
6+
7+
class Label(View):
8+
native_class = jclass("android.widget.TextView")
9+
10+
def __init__(self, text: str = "") -> None:
11+
super().__init__()
12+
self.native_instance = self.native_class()
13+
self.set_text(text)
14+
15+
def set_text(self, text: str) -> None:
16+
self.native_instance.setText(text)
17+
18+
def get_text(self) -> str:
19+
return self.native_instance.getText().toString()
20+
21+
elif platform.system() == "iOS":
22+
from rubicon.objc import ObjCClass
23+
24+
class Label(View):
25+
native_class = ObjCClass("UILabel")
26+
27+
def __init__(self, text: str = "") -> None:
28+
super().__init__()
29+
self.native_instance = self.native_class.alloc().init()
30+
self.set_text(text)
31+
32+
def set_text(self, text: str) -> None:
33+
self.native_instance.setText_(text)
34+
35+
def get_text(self) -> str:
36+
return self.native_instance.text()
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import platform
2+
from .view import View
3+
4+
if platform.system() == "Android":
5+
from java import jclass
6+
7+
class LinearLayout(View):
8+
native_class = jclass("android.widget.LinearLayout")
9+
10+
def __init__(self) -> None:
11+
super().__init__()
12+
self.native_instance = self.native_class()
13+
self.native_instance.setOrientation(1) # Set orientation to vertical
14+
self.views = []
15+
16+
def add_view(self, view):
17+
self.views.append(view)
18+
self.native_instance.addView(view.native_instance)
19+
20+
elif platform.system() == "iOS":
21+
from rubicon.objc import ObjCClass
22+
23+
class LinearLayout(View):
24+
native_class = ObjCClass("UIStackView")
25+
26+
def __init__(self) -> None:
27+
super().__init__()
28+
self.native_instance = self.native_class.alloc().initWithFrame_(
29+
((0, 0), (0, 0))
30+
)
31+
self.native_instance.setAxis_(0) # Set axis to vertical
32+
self.views = []
33+
34+
def add_view(self, view):
35+
self.views.append(view)
36+
self.native_instance.addArrangedSubview_(view.native_instance)

libs/pythonnative/pythonnative/pythonnative.py

Lines changed: 0 additions & 163 deletions
This file was deleted.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import platform
2+
from .view import View
3+
4+
if platform.system() == "Android":
5+
from java import jclass
6+
7+
class Screen(View):
8+
native_class = jclass("android.app.Activity")
9+
10+
def __init__(self):
11+
super().__init__()
12+
self.native_instance = self.native_class()
13+
self.layout = None
14+
15+
def add_view(self, view):
16+
if self.layout is None:
17+
raise ValueError("You must set a layout before adding views.")
18+
self.layout.add_view(view)
19+
20+
def set_layout(self, layout):
21+
self.layout = layout
22+
self.native_instance.setContentView(layout.native_instance)
23+
24+
def show(self):
25+
# This method should contain code to start the Activity
26+
pass
27+
28+
elif platform.system() == "iOS":
29+
from rubicon.objc import ObjCClass
30+
31+
class Screen(View):
32+
native_class = ObjCClass("UIViewController")
33+
34+
def __init__(self):
35+
super().__init__()
36+
self.native_instance = self.native_class.alloc().init()
37+
self.layout = None
38+
39+
def add_view(self, view):
40+
if self.layout is None:
41+
raise ValueError("You must set a layout before adding views.")
42+
self.layout.add_view(view)
43+
44+
def set_layout(self, layout):
45+
self.layout = layout
46+
self.native_instance.view().addSubview_(layout.native_instance)
47+
48+
def show(self):
49+
# This method should contain code to present the ViewController
50+
pass
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class View:
2+
def __init__(self) -> None:
3+
self.native_instance = None
4+
self.native_class = None
5+
6+
def add_view(self, view):
7+
raise NotImplementedError("This method should be implemented in a subclass.")
8+
9+
def set_layout(self, layout):
10+
raise NotImplementedError("This method should be implemented in a subclass.")
11+
12+
def show(self):
13+
raise NotImplementedError("This method should be implemented in a subclass.")

0 commit comments

Comments
 (0)