#!/usr/bin/python3 import gi import config import logging from datetime import datetime gi.require_version("Gtk", "3.0") from gi.repository import Gtk import db log = logging.getLogger("main") db.create_transmissions_table() class MainWindow(Gtk.Window): def __init__(self): super().__init__(title="bardzo biedny BBS %s"%config.version) ############################## Boxes ##################################### pad=15 self.main_box = Gtk.Box() self.main_box.set_orientation(Gtk.Orientation.HORIZONTAL) # left side self.left_box = Gtk.Box() self.left_box.set_orientation(Gtk.Orientation.VERTICAL) self.left_box.set_spacing(0) self.left_button_box = Gtk.Box() self.left_button_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.left_button_box.set_spacing(pad) # right side self.right_box = Gtk.Box() self.right_box.set_orientation(Gtk.Orientation.VERTICAL) self.right_box.set_spacing(0) self.title_author_box = Gtk.Box() self.title_author_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.title_author_box.set_spacing(pad) self.message_box = Gtk.Box() self.message_box.set_orientation(Gtk.Orientation.VERTICAL) self.message_box.set_spacing(2) self.date_time_box = Gtk.Box() self.date_time_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.date_time_box.set_spacing(pad) self.synthesize_listen_box = Gtk.Box() self.synthesize_listen_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.synthesize_listen_box.set_spacing(pad) self.clear_save_box = Gtk.Box() self.clear_save_box.set_orientation(Gtk.Orientation.HORIZONTAL) self.clear_save_box.set_spacing(pad) ################################ Widgets ###################################### # left side self.transmission_list = Gtk.ListBox() self.transmission_list.connect("row-activated", self.on_picked_transmission) transmissions = db.get_transmissions() for trx in transmissions: trxID = "%s %s %s" % (trx[0], trx[2], trx[1]) label = Gtk.Label() label.set_text("%s" % trxID) self.transmission_list.add(label) self.add_transmission_button = Gtk.Button(label="Add transmission") self.add_transmission_button.connect("clicked", self.on_add_transmission) self.delete_transmission_button = Gtk.Button(label="Delete transmission") self.delete_transmission_button.connect("clicked", self.on_delete_transmission) # right side self.title = Gtk.Entry() self.title.set_placeholder_text("Title") self.author = Gtk.Entry() self.author.set_placeholder_text("Author") self.message_label = Gtk.Label(label="Message") self.message_scroll_window = Gtk.ScrolledWindow() self.message = Gtk.TextView() self.calendar = Gtk.Calendar() self.calendar.connect("day-selected", self.on_date_picked) year, month, day = self.calendar.get_date() month += 1 month = str(month).rjust(2, '0') day = str(day).rjust(2, '0') self.picked_date = "%i-%s-%s"%(year, month, day) self.timeslots = Gtk.ListBox() for slot in config.timeslots: row = Gtk.ListBoxRow() hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50) row.add(hbox) time_label = Gtk.Label(label=slot, xalign=0) hbox.pack_start(time_label, True, True, 0) hbox.pack_start(Gtk.CheckButton(), False, True, 0) self.timeslots.add(row) self.synthesize_button = Gtk.Button(label="synthesize") self.listen_button = Gtk.Button(label="listen") self.clear_button = Gtk.Button(label="clear") self.save_button = Gtk.Button(label="save") self.save_button.connect("clicked", self.on_transmission_saved) # we need to put the buttons in a sizegroup to make the synthesize button the same length as the rest self.right_sizegroup = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL) self.right_sizegroup.add_widget(self.synthesize_button) self.right_sizegroup.add_widget(self.listen_button) self.right_sizegroup.add_widget(self.clear_button) self.right_sizegroup.add_widget(self.save_button) ######################### organise objects ################################### self.add(self.main_box) self.main_box.pack_start(self.left_box, True, True, pad) self.main_box.pack_start(self.right_box, True, True, pad) self.left_box.pack_start(self.transmission_list, True, True, pad) self.left_box.pack_start(self.left_button_box, False, True, pad) self.left_button_box.pack_start(self.add_transmission_button, True, True, 0) self.left_button_box.pack_start(self.delete_transmission_button, True, True, 0) self.right_box.pack_start(self.title_author_box, False, True, pad) self.title_author_box.pack_start(self.title, True, True, 0) self.title_author_box.pack_start(self.author, True, True, 0) self.right_box.pack_start(self.message_box, True, True, pad) self.message_box.pack_start(self.message_label, False, True, 0) self.message_box.pack_start(self.message_scroll_window, True, True, 0) self.message_scroll_window.add(self.message) self.right_box.pack_start(self.date_time_box, True, True, pad) self.date_time_box.pack_start(self.calendar, True, True, 0) self.date_time_box.pack_start(self.timeslots, True, True, 0) self.right_box.pack_start(self.synthesize_listen_box, False, True, 0) self.synthesize_listen_box.pack_start(self.synthesize_button, True, True, 0) self.synthesize_listen_box.pack_start(self.listen_button, True, True, 0) self.right_box.pack_start(self.clear_save_box, False, True, pad) self.clear_save_box.pack_start(self.clear_button, True, True, 0) self.clear_save_box.pack_start(self.save_button, True, True, 0) def on_picked_transmission(self, row, user_data): log.debug("row %i activated" % user_data.get_index()) def on_add_transmission(self, user_data): log.debug("new transmission %s"%(datetime.now().isoformat())) def on_delete_transmission(self, user_data): log.debug("transmission %s deleted" % self.transmission_list.get_selected_row().get_index()) def on_date_picked(self, user_data): year, month, day = self.calendar.get_date() month += 1 month = str(month).rjust(2, '0') day = str(day).rjust(2, '0') self.picked_date = "%i-%s-%s"%(year, month, day) def on_transmission_saved(self, user_data): messageBuffer = self.message.get_buffer() startIter, endIter = messageBuffer.get_bounds() message = messageBuffer.get_text(startIter, endIter, False) print(message) db.create_transmission( self.picked_date,\ self.author.get_buffer().get_text(),\ self.title.get_buffer().get_text(),\ message, 1,\ 1,\ True) win = MainWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() db.sqliteConnection.close() log.debug("database connection closed")