From a505a6be32f7e8f92473b61ea706e46fc105ffac Mon Sep 17 00:00:00 2001 From: L3D Date: Fri, 12 May 2023 20:05:16 +0200 Subject: [PATCH] Build example Editor --- ch.l3d.deutschlandticket/buildozer.spec | 2 +- ch.l3d.deutschlandticket/deutschlandticket.kv | 69 +++++++++++++++ ch.l3d.deutschlandticket/main.py | 84 ++++++++++++------- 3 files changed, 123 insertions(+), 32 deletions(-) create mode 100644 ch.l3d.deutschlandticket/deutschlandticket.kv diff --git a/ch.l3d.deutschlandticket/buildozer.spec b/ch.l3d.deutschlandticket/buildozer.spec index a41588f..abf46b5 100644 --- a/ch.l3d.deutschlandticket/buildozer.spec +++ b/ch.l3d.deutschlandticket/buildozer.spec @@ -29,7 +29,7 @@ source.include_exts = py,png,jpg,kv,atlas #source.exclude_patterns = license,images/*/*.jpg # (str) Application versioning (method 1) -version = 0.1 +version = 0.2 # (str) Application versioning (method 2) # version.regex = __version__ = ['"](.*)['"] diff --git a/ch.l3d.deutschlandticket/deutschlandticket.kv b/ch.l3d.deutschlandticket/deutschlandticket.kv new file mode 100644 index 0000000..2becf09 --- /dev/null +++ b/ch.l3d.deutschlandticket/deutschlandticket.kv @@ -0,0 +1,69 @@ +Root: + text_input: text_input + + BoxLayout: + orientation: 'vertical' + BoxLayout: + size_hint_y: None + height: 30 + Button: + text: 'Load' + on_release: root.show_load() + Button: + text: 'Save' + on_release: root.show_save() + + BoxLayout: + TextInput: + id: text_input + text: '' + + RstDocument: + text: text_input.text + show_errors: True + +: + BoxLayout: + size: root.size + pos: root.pos + orientation: "vertical" + FileChooserListView: + id: filechooser + + BoxLayout: + size_hint_y: None + height: 30 + Button: + text: "Cancel" + on_release: root.cancel() + + Button: + text: "Load" + on_release: root.load(filechooser.path, filechooser.selection) + +: + text_input: text_input + BoxLayout: + size: root.size + pos: root.pos + orientation: "vertical" + FileChooserListView: + id: filechooser + on_selection: text_input.text = self.selection and self.selection[0] or '' + + TextInput: + id: text_input + size_hint_y: None + height: 30 + multiline: False + + BoxLayout: + size_hint_y: None + height: 30 + Button: + text: "Cancel" + on_release: root.cancel() + + Button: + text: "Save" + on_release: root.save(filechooser.path, text_input.text) diff --git a/ch.l3d.deutschlandticket/main.py b/ch.l3d.deutschlandticket/main.py index 5ee2489..97e2d62 100644 --- a/ch.l3d.deutschlandticket/main.py +++ b/ch.l3d.deutschlandticket/main.py @@ -1,43 +1,65 @@ #/usr/bin/env python3 # -*- coding: utf-8 -*- from kivy.app import App -from kivy.uix.boxlayout import BoxLayout -from kivy.uix.image import Image -from kivy.uix.button import Button -from kivy.uix.filechooser import FileChooserIconView +from kivy.uix.floatlayout import FloatLayout +from kivy.factory import Factory +from kivy.properties import ObjectProperty +from kivy.uix.popup import Popup -class ImageChooser(BoxLayout): - def __init__(self, **kwargs): - super().__init__(**kwargs) - - self.orientation = 'vertical' - - self.file_chooser = FileChooserIconView() - self.add_widget(self.file_chooser) - - self.open_button = Button(text='Open Image') - self.open_button.bind(on_press=self.open_image) - self.add_widget(self.open_button) +import os - def open_image(self, instance): - if self.file_chooser.selection: - # Show Image - self.image = Image() - self.add_widget(self.image) +class LoadDialog(FloatLayout): + load = ObjectProperty(None) + cancel = ObjectProperty(None) - # Load Image - image_path = self.file_chooser.selection[0] - self.image.source = image_path - # Hide other Elements - self.remove_widget(self.file_chooser) - self.remove_widget(self.open_button) +class SaveDialog(FloatLayout): + save = ObjectProperty(None) + text_input = ObjectProperty(None) + cancel = ObjectProperty(None) + + +class Root(FloatLayout): + loadfile = ObjectProperty(None) + savefile = ObjectProperty(None) + text_input = ObjectProperty(None) + + def dismiss_popup(self): + self._popup.dismiss() + + def show_load(self): + content = LoadDialog(load=self.load, cancel=self.dismiss_popup) + self._popup = Popup(title="Load file", content=content, + size_hint=(0.9, 0.9)) + self._popup.open() + + def show_save(self): + content = SaveDialog(save=self.save, cancel=self.dismiss_popup) + self._popup = Popup(title="Save file", content=content, + size_hint=(0.9, 0.9)) + self._popup.open() + + def load(self, path, filename): + with open(os.path.join(path, filename[0])) as stream: + self.text_input.text = stream.read() + + self.dismiss_popup() + + def save(self, path, filename): + with open(os.path.join(path, filename), 'w') as stream: + stream.write(self.text_input.text) + + self.dismiss_popup() + class DeutschlandTicket(App): - def build(self): - return ImageChooser() + pass + +Factory.register('Root', cls=Root) +Factory.register('LoadDialog', cls=LoadDialog) +Factory.register('SaveDialog', cls=SaveDialog) if __name__ == '__main__': - app = DeutschlandTicket() - app.run() + app = DeutschlandTicket() + app.run()