org-editor/main.py
Sergio Martínez Portela b4c086c049 Add sample CSS styling.
2021-12-26 21:09:20 +01:00

97 lines
2.7 KiB
Python

#!/usr/bin/env python3
import sys
import os
import logging
import threading
import task_manager
APP_TITLE = "Org-mob"
DOCS_PATH = os.environ["ORG_PATH"]
STYLE_FILE_PATH = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"style.css")
import gi
gi.require_version("Gtk", "4.0")
gi.require_version('Polkit', '1.0')
gi.require_version(namespace='Adw', version='1')
from gi.repository import Gtk, Polkit, GObject, Gio, Adw, Gdk
class MainWindow(Gtk.Window):
def __init__(self, *, title, application, task_manager):
super().__init__(title=title, application=application)
self.application = application
self.task_manager = task_manager
self.task_manager.get_task_list(self.on_task_list_ready)
self.task_list = Gtk.ListBox()
self.set_child(self.task_list)
def on_button_clicked(self, button):
print('{} was clicked'.format(button))
def build_agenda_task_row(self, task):
row = Gtk.ListBoxRow()
hbox = Gtk.Box(spacing=6)
state_button = Gtk.Button.new_with_label(task.state or '')
state_button.connect("clicked", self.on_button_clicked)
hbox.append(state_button)
task_name_label = Gtk.Entry(text=task.title)
hbox.append(task_name_label)
row.set_child(hbox)
return row
def on_task_list_ready(self, agenda):
for item in agenda.with_hour:
self.task_list.append(self.build_agenda_task_row(item))
for item in agenda.no_hour:
self.task_list.append(self.build_agenda_task_row(item))
class Application(Gtk.Application):
""" Main Aplication class """
def __init__(self):
super().__init__(application_id='com.codigoparallevar.gtk4-organizer',
flags=Gio.ApplicationFlags.FLAGS_NONE)
self.task_manager = task_manager.TaskManager(DOCS_PATH)
def do_activate(self):
win = self.props.active_window
if not win:
if os.path.exists(STYLE_FILE_PATH):
style_provider = Gtk.CssProvider()
Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
style_provider.load_from_path(STYLE_FILE_PATH)
win = MainWindow(
title=APP_TITLE,
application=self,
task_manager=self.task_manager,
)
win.present()
def main():
""" Run the main application"""
GObject.threads_init()
logging.basicConfig(level=logging.INFO, format="%(levelname)-8s %(message)s")
app = Application()
return app.run(sys.argv)
if __name__ == '__main__':
main()