ungana

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README

commit 1a67eb53a015f59e1d5af04c31af5a44ce39871a
parent 01ad95be9b5fbc4223effa06b85fd176bb71eb24
Author: lash <dev@holbrook.no>
Date:   Sun, 31 Aug 2025 06:51:38 +0100

Demo file picker and image display

Diffstat:
Mgui/base.py | 73++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
Mpyproject.toml | 6++++++
2 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/gui/base.py b/gui/base.py @@ -1,11 +1,12 @@ import sys import logging import gettext +import markdown import gi gi.require_version('Gtk', '4.0') gi.require_version('Adw', '1') -from gi.repository import Gtk, Adw +from gi.repository import Gtk, Adw, Gio from ungana.ical import ICalManager @@ -14,10 +15,29 @@ logg = logging.getLogger() _ = gettext.gettext +menu_src = """ +<?xml version="1.0" encoding="UTF-8"?> +<interface> +<menu id="menubar"> + <submenu> + <attribute name="label" translatable="yes">Edit</attribute> + <section> + <item> + <attribute name="action">win.settings</attribute> + <attribute name="target">Settings</attribute> + <attribute name="label" translatable="yes">Settings</attribute> + </item> + </section> + </submenu> +</menu> +</interface> +""" + class MainWindow(Gtk.ApplicationWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.props.show_menubar = True self.cal = None self.box_main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.set_child(self.box_main) @@ -57,10 +77,44 @@ class MainWindow(Gtk.ApplicationWindow): entry = Gtk.Entry(placeholder_text="") self.box_main.append(entry) + title = Gtk.Label(label="Banner") + self.box_main.append(title) + + + fltr = Gtk.FileFilter() + fltr.set_name("Images") + fltr.add_mime_type("image/*") + fltrs = Gio.ListStore.new(Gtk.FileFilter) + fltrs.append(fltr) + self.filedialog = Gtk.FileDialog.new() + self.filedialog.set_filters(fltrs) + self.filedialog.set_default_filter(fltr) + + img = Gtk.Image() + self.img = img + self.box_main.append(img) + self.img.set_size_request(0, 200) + + entry = Gtk.Button(label="Open") + entry.connect('clicked', self.show_open_dialog) + self.box_main.append(entry) + self.status = Gtk.Statusbar() self.box_main.append(self.status) + def show_open_dialog(self, button): + self.filedialog.open(self, None, self.open_dialog_callback) + + + def open_dialog_callback(self, dialog, result): + try: + f = dialog.open_finish(result) + if f is not None: + self.img.set_from_file(f.get_path()) + except GLib.Error as e: + logg.error("error open: {}".format(e)) + def load(self, fp): self.cal = ICalManager() self.cal.load_ical_file(fp) @@ -80,11 +134,17 @@ class MainWindow(Gtk.ApplicationWindow): class Ungana(Adw.Application): def __init__(self, initial_calendar=None, *args, **kwargs): - super().__init__(**kwargs) + super().__init__(flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, **kwargs) self.file = initial_calendar self.win = None self.connect('activate', self.on_activate) + def do_startup(self): + Adw.Application.do_startup(self) + builder = Gtk.Builder.new_from_string(menu_src, -1) + self.set_menubar(builder.get_object("menubar")) + + def on_activate(self, app): logg.debug("activate") self.win = MainWindow(application=app) @@ -92,8 +152,15 @@ class Ungana(Adw.Application): self.win.present() + def do_command_line(self, cli): + o = cli.get_options_dict() + logg.debug(o) + self.activate() + return 0 + + #gettext.install(gettext.translation("ungana", localedir="locale", languages=['es'])) gettext.bindtextdomain("messages", "locales") gettext.textdomain("messages") app = Ungana(application_id="org.defalsify.ungana", initial_calendar=sys.argv[1]) -app.run(None) +app.run(sys.argv) diff --git a/pyproject.toml b/pyproject.toml @@ -11,6 +11,12 @@ dependencies = [ "icalendar>=5.0.0", ] +[project.optional-dependencies] +gui = [ +"PyGObject~=3.52.3", +"markdown~=3.8.2", +] + [project.scripts] ungana = "ungana.runnable.ungana_cal_cli:main"