import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from mods.db import db, Patient, Catalog, List from mods.catalogs import create_new_catalog_win, build_catalog_row, catalog_sort_func, catalog_filter_func from mods.patients import build_patient_row, patient_sort_func, patient_filter_func_factory, create_new_patient_win, create_open_patient_win from mods.patients import search_patients from mods.receptions import create_new_reception_win, redraw_reception_list, create_reception_list_settings_win, create_open_reception_win from mods.lists import create_open_list_win, build_list_row from mods.root import builder from mods.utils import enable_widget, disable_widget, ConditionalFilter from datetime import datetime patient_filter = ConditionalFilter(search_patients) class MainWinHandler: def main_win_close(self, *args): Gtk.main_quit() def set_reception_list_today(self, *a): cal = builder.get_object('reception_cal') d = datetime.now() cal.select_month(d.month - 1, d.year) cal.select_day(d.day) redraw_reception_list(d) def change_reception_list_day(self, *a): cal = builder.get_object('reception_cal') cal_date = cal.get_date() d = datetime(cal_date.year, cal_date.month + 1, cal_date.day) rl = builder.get_object('reception_list') rl.unselect_all() self.reception_list_unselected() redraw_reception_list(d) def show_reception_list_settings_win(self, button): reception_list_settings_win = create_reception_list_settings_win() reception_list_settings_win.show_all() def show_new_reception_win(self, button): new_reception_win = create_new_reception_win() new_reception_win.show_all() def show_open_reception_win(self, button): open_reception_win = create_open_reception_win() open_reception_win.show_all() def show_new_patient_win(self, button): new_patient_win = create_new_patient_win() new_patient_win.show_all() def show_open_patient_win(self, button): pl = builder.get_object('patient_list') row = pl.get_selected_row() open_patient_win = create_open_patient_win(row.props.db_id) open_patient_win.show_all() def show_open_list_win(self, button): ll = builder.get_object('list_list') row = ll.get_selected_row() open_list_win = create_open_list_win(row.props.db_id) open_list_win.show_all() def show_new_catalog_win(self, button): new_catalog_win = create_new_catalog_win(catalog_list) new_catalog_win.show_all() def reception_list_selected(self, *a): rl = builder.get_object('reception_list') new_button = builder.get_object('new_reception_button') edit_button = builder.get_object('edit_reception_button') remove_button = builder.get_object('remove_reception_button') row = rl.get_selected_row() if not row: return True if row.props.scheduled: enable_widget([edit_button, remove_button]) disable_widget([new_button]) else: enable_widget([new_button]) disable_widget([edit_button, remove_button]) def reception_list_unselected(self, *a): new_button = builder.get_object('new_reception_button') edit_button = builder.get_object('edit_reception_button') remove_button = builder.get_object('remove_reception_button') disable_widget([new_button, edit_button, remove_button]) def patient_list_selected(self, *a): button = builder.get_object('patient_open_button') enable_widget([button]) def patient_list_unselected(self, *a): button = builder.get_object('patient_open_button') disable_widget([button]) def patient_filter_changed(self, filter_widget): pl = builder.get_object('patient_list') pl.unselect_all() self.patient_list_unselected() pl.invalidate_filter() def list_list_selected(self, *a): open_button = builder.get_object('list_open_button') enable_widget([open_button]) def catalog_list_selected(self, *a): open_button = builder.get_object('catalog_open_button') rename_button = builder.get_object('catalog_rename_button') enable_widget([open_button, rename_button]) def catalog_list_unselected(self, *a): open_button = builder.get_object('catalog_open_button') rename_button = builder.get_object('catalog_rename_button') disable_widget([open_button, rename_button]) def catalog_filter_changed(self, filter_widget): cl = builder.get_object('catalog_list') cl.unselect_all() self.catalog_list_unselected() cl.invalidate_filter() def list_sort_func(row1, row2, *a): text1 = row1.props.name text2 = row2.props.name return (text1 > text2) - (text1 < text2) builder.connect_signals(MainWinHandler()) ##### redraw_reception_list(datetime.now()) ##### patient_list = builder.get_object('patient_list') patient_list.set_sort_func(patient_sort_func) patient_list.set_filter_func(patient_filter_func_factory(patient_filter, builder)) with db.atomic(): for p in Patient.select(): patient_list.add(build_patient_row(p)) ##### list_list = builder.get_object('list_list') list_list.set_sort_func(list_sort_func) with db.atomic(): for l in List.select(): list_list.add(build_list_row(l)) ##### catalog_list = builder.get_object('catalog_list') catalog_list.set_sort_func(catalog_sort_func) catalog_list.set_filter_func(catalog_filter_func) with db.atomic(): for c in Catalog.select(): catalog_list.add(build_catalog_row(c)) main_win = builder.get_object('main_window') main_win.show_all() Gtk.main()