bbbbbs/main.py

193 lines
7.4 KiB
Python
Executable File

#!/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")