mirror of
https://github.com/emendir/EndraApp.git
synced 2025-12-23 22:18:10 -05:00
defined SideBar GUI with KivyLang
This commit is contained in:
4
ToDo.md
4
ToDo.md
@@ -1,5 +1 @@
|
||||
## Next Steps
|
||||
- [ ] Message Class:
|
||||
- [ ] methods for metadata: author, recipient?
|
||||
- [ ] message content format
|
||||
- [ ] research existing standards
|
||||
|
||||
4
__main__.py
Normal file
4
__main__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
import sys
|
||||
import os
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), "src"))
|
||||
os.system(f"{sys.executable} -m endra_app")
|
||||
@@ -1,32 +1,30 @@
|
||||
# side_bar.py
|
||||
from loguru import logger
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.scrollview import ScrollView
|
||||
from kivy.uix.gridlayout import GridLayout
|
||||
from kivy.uix.button import Button
|
||||
from kivy.uix.label import Label
|
||||
from kivy.lang import Builder
|
||||
from endra import Profile
|
||||
from endra import Profile, Correspondence
|
||||
import os
|
||||
# Load the KV file
|
||||
KV_FILE= os.path.join(os.path.dirname(__file__), "style.kv")
|
||||
KV_FILE = os.path.join(os.path.dirname(__file__), "style.kv")
|
||||
Builder.load_file(KV_FILE)
|
||||
|
||||
class CorrespondenceHeader(BoxLayout):
|
||||
def __init__(self, label_text, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.orientation = 'horizontal'
|
||||
self.size_hint_y = None
|
||||
self.height = 50
|
||||
|
||||
# Create widgets
|
||||
class CorrespondenceHeaderView(BoxLayout):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.label = self.ids.label
|
||||
self.button1 = self.ids.button1
|
||||
self.button2 = self.ids.button2
|
||||
|
||||
class CorrespondenceHeaderController(CorrespondenceHeader):
|
||||
def __init__(self, label_text, **kwargs):
|
||||
super().__init__(label_text, **kwargs)
|
||||
self.label.text = label_text
|
||||
|
||||
class CorrespondenceHeader(CorrespondenceHeaderView):
|
||||
def __init__(self, correspondence:Correspondence, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.label.text = correspondence.id
|
||||
# Bind events
|
||||
self.label.bind(on_touch_down=self.on_label_click)
|
||||
self.button1.bind(on_press=self.on_button1_click)
|
||||
@@ -41,52 +39,53 @@ class CorrespondenceHeaderController(CorrespondenceHeader):
|
||||
|
||||
def on_button2_click(self, instance):
|
||||
print(f"Button 2 in '{self.label.text}' clicked!")
|
||||
|
||||
|
||||
from loguru import logger
|
||||
class SideBar(BoxLayout):
|
||||
def __init__(self, profile:Profile|None,**kwargs):
|
||||
|
||||
|
||||
class SideBarView(BoxLayout):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
self.scroll_view = self.ids.scroll_view
|
||||
|
||||
self.scroll_layout = self.ids.scroll_layout
|
||||
self.add_corresp_btn = self.ids.add_corresp_btn
|
||||
|
||||
self.scroll_layout.bind(
|
||||
minimum_height=self.scroll_layout.setter('height')
|
||||
)
|
||||
|
||||
class SideBar(SideBarView):
|
||||
def __init__(self, profile: Profile | None, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
self.profile = profile
|
||||
|
||||
self.orientation = 'vertical'
|
||||
self.size_hint = (0.3, 1)
|
||||
|
||||
|
||||
# Add scroll view
|
||||
self.scroll_view = ScrollView(size_hint=(1, 1))
|
||||
self.scroll_layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
|
||||
self.scroll_layout.bind(minimum_height=self.scroll_layout.setter('height'))
|
||||
self.scroll_view.add_widget(self.scroll_layout)
|
||||
|
||||
self.add_widget(self.scroll_view)
|
||||
|
||||
# Add button for testing
|
||||
self.add_widget(Button(text='Add Widget', size_hint=(1, None), height=50, on_press=self.create_correspondence))
|
||||
self.add_corresp_btn.bind(on_press=self.create_correspondence)
|
||||
self.reload_correspondences()
|
||||
|
||||
|
||||
def reload_correspondences(self):
|
||||
logger.info("Reloading correspondences...")
|
||||
|
||||
|
||||
self.remove_all_widgets()
|
||||
if self.profile:
|
||||
for correspondence_id in self.profile.get_active_correspondences():
|
||||
self.add_widget_to_scroll(correspondence_id)
|
||||
|
||||
self.add_widget_to_scroll(self.profile.get_correspondence(correspondence_id))
|
||||
|
||||
def create_correspondence(self, instance=None):
|
||||
logger.info("Creating correspondence...")
|
||||
self.profile.create_correspondence()
|
||||
self.reload_correspondences()
|
||||
def add_widget_to_scroll(self, correspondence_name:str):
|
||||
widget = CorrespondenceHeaderController(label_text=correspondence_name)
|
||||
|
||||
def add_widget_to_scroll(self, correspondence):
|
||||
widget = CorrespondenceHeader(correspondence=correspondence)
|
||||
self.scroll_layout.add_widget(widget)
|
||||
|
||||
def remove_widget_from_scroll(self, index):
|
||||
if 0 <= index < len(self.scroll_layout.children):
|
||||
self.scroll_layout.remove_widget(self.scroll_layout.children[index])
|
||||
self.scroll_layout.remove_widget(
|
||||
self.scroll_layout.children[index])
|
||||
|
||||
def remove_all_widgets(self):
|
||||
while(len(self.scroll_layout.children)):
|
||||
while (len(self.scroll_layout.children)):
|
||||
self.scroll_layout.remove_widget(self.scroll_layout.children[0])
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<CorrespondenceHeader>:
|
||||
<CorrespondenceHeaderView>:
|
||||
orientation: 'horizontal'
|
||||
size_hint_y: None
|
||||
height: 50
|
||||
@@ -6,7 +6,7 @@
|
||||
padding: 5
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: 0.9, 0.9, 0.9, 1 # Background color (light gray)
|
||||
rgba: 0.1, 0.1, 0.1, 1 # background colour
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
@@ -15,11 +15,11 @@
|
||||
id: button1
|
||||
text: "Button 1"
|
||||
size_hint: 0.2, 1
|
||||
background_color: 0.2, 0.6, 1, 1 # Light blue button
|
||||
background_color: 0.2, 0.6, 1, 1
|
||||
Label:
|
||||
id: label
|
||||
font_size: 16
|
||||
color: 0, 0, 0, 1 # Black text
|
||||
color: 0.9, 0.9, 0.9, 1
|
||||
size_hint: 0.6, 1
|
||||
|
||||
|
||||
@@ -27,4 +27,33 @@
|
||||
id: button2
|
||||
text: "Button 2"
|
||||
size_hint: 0.2, 1
|
||||
background_color: 0.8, 0.3, 0.3, 1
|
||||
<SideBarView>
|
||||
orientation: 'vertical'
|
||||
size_hint_x: 0.3
|
||||
size_hint_y: 1
|
||||
spacing: 5
|
||||
padding: 5
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: 0.2, 0.2, 0.2, 1 # background colour
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
|
||||
ScrollView:
|
||||
id: scroll_view
|
||||
size_hint: 1, 1
|
||||
|
||||
GridLayout:
|
||||
id: scroll_layout
|
||||
cols: 1
|
||||
spacing: 10
|
||||
size_hint_y: None
|
||||
|
||||
Button:
|
||||
id: add_corresp_btn
|
||||
text: "Add Widget"
|
||||
size_hint: 1, None
|
||||
height: 50
|
||||
background_color: 0.8, 0.3, 0.3, 1 # Light red button
|
||||
|
||||
Reference in New Issue
Block a user