193 lines
7.4 KiB
Python
Executable File
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")
|