Baby Language Lab Scripts
A collection of data processing tools.
 All Classes Namespaces Files Functions Variables Pages
load_window.py
Go to the documentation of this file.
1 from gi.repository import Gtk as gtk
2 from gi.repository import GObject as gobject
3 import datetime
4 
5 from data_structs.check import Check
6 from db.bll_database import BLLDatabase
7 from test_window import TestWindow
8 from utils.ui_utils import UIUtils
9 
10 class LoadWindow():
11  def __init__(self):
12  self.window = gtk.Window(gtk.WindowType.TOPLEVEL)
13  self.window.set_title('Load Check')
14  self.window.connect('destroy', lambda w: self.window.destroy())
15  self.window.set_border_width(10)
16  self.window.set_default_size(1000, 400)
17 
18  vbox = gtk.VBox()
19 
20  treeview = self._build_treeview()
21  scrolled_win = gtk.ScrolledWindow()
22  scrolled_win.set_policy(gtk.PolicyType.AUTOMATIC, gtk.PolicyType.AUTOMATIC)
23  scrolled_win.add(treeview)
24  vbox.pack_start(scrolled_win, True, True, 0)
25 
26  button_box = gtk.HButtonBox()
27  button_box.set_layout(gtk.ButtonBoxStyle.EDGE)
28  cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL, label='Cancel')
29  cancel_button.connect('clicked', lambda w: self.window.destroy())
30  button_box.pack_start(cancel_button, False, False, 0)
31 
32  delete_button = gtk.Button(stock=gtk.STOCK_DELETE)
33  delete_button.connect('clicked', lambda w: self._confirm_delete(treeview))
34  button_box.pack_start(delete_button, False, False, 0)
35 
36  load_button = gtk.Button('Load')
37  load_image = gtk.Image()
38  load_image.set_from_stock(gtk.STOCK_EXECUTE, gtk.ICON_SIZE_BUTTON)
39  load_button.set_image(load_image)
40  load_button.connect('clicked', lambda w: self._load(treeview))
41  button_box.pack_end(load_button, False, False, 0)
42 
43  vbox.pack_end(button_box, False, False, 0)
44  vbox.pack_end(gtk.HSeparator(), False, False, 0)
45 
46  self.window.add(vbox)
47  self.window.show_all()
48 
49  def _build_list_store(self):
50  list_store = gtk.ListStore(gobject.TYPE_INT,
51  gobject.TYPE_STRING,
52  gobject.TYPE_STRING,
53  gobject.TYPE_STRING,
54  gobject.TYPE_STRING,
55  gobject.TYPE_STRING,
56  gobject.TYPE_STRING,
57  gobject.TYPE_INT,
58  gobject.TYPE_STRING,
59  gobject.TYPE_STRING,
60  )
61  db = BLLDatabase()
62  checks_list = Check.db_select(db)
63  for check in checks_list:
64  created = UIUtils.get_db_timestamp_str(str(check.created)) if check.created != None else '-'
65  last_run = UIUtils.get_db_timestamp_str(str(check.last_run)) if check.last_run != None else '-'
66  completed = UIUtils.get_db_timestamp_str(str(check.completed)) if check.completed != None else '-'
67 
68  filters_str = ''
69  if not check.filters:
70  filters_str = '-'
71  else:
72  for i in range(len(check.filters)):
73  filters_str += check.filters[i].get_filter_desc_str()
74  if i < len(check.filters) - 1:
75  filters_str += ',\n'
76 
77  list_store.append([check.db_id,
78  check.name,
79  created,
80  completed,
81  last_run,
82  check.input_filename,
83  check.wav_filename,
84  check.default_context_padding,
85  str(check.pick_randomly),
86  filters_str,
87  ])
88  db.close()
89 
90  return list_store
91 
92  def _build_treeview(self):
93  list_store = self._build_list_store()
94 
95  treeview = gtk.TreeView(list_store)
96 
97  #create hidden id column
98  col = gtk.TreeViewColumn('ID', gtk.CellRendererText(), text=0)
99  col.set_visible(False)
100  treeview.append_column(col)
101 
102  #create the rest of the columns
103  column_names = ['Name', 'Created', 'Completed', 'Last Run', 'Input Filename', 'WAV Filename', 'Default Context padding (sec)', 'Pick Segs Randomly', 'Filters']
104  for i in range(len(column_names)):
105  col = gtk.TreeViewColumn(column_names[i], gtk.CellRendererText(), text=(i + 1))
106  col.set_resizable(True)
107  col.set_min_width( UIUtils.calc_treeview_col_min_width(column_names[i]) )
108  treeview.append_column(col)
109 
110  return treeview
111 
112  def _confirm_delete(self, treeview):
113  (model, it) = treeview.get_selection().get_selected()
114  db_id = model.get_value(it, 0) if it else None
115 
116  if db_id != None:
117  response = UIUtils.show_confirm_dialog('Are you sure you want to delete the selected check?')
118 
119  if response:
120  db = BLLDatabase()
121  rows_deleted = Check.db_select(db, [db_id])[0].db_delete(db)
122  db.close()
123 
124  if rows_deleted > 0:
125  model.remove(it)
126 
127  else:
128  UIUtils.show_message_dialog('An error occurred and the check could not be deleted.')
129 
130  else:
131  UIUtils.show_no_sel_dialog()
132 
133  def _load(self, treeview):
134  (model, it) = treeview.get_selection().get_selected()
135  db_id = model.get_value(it, 0) if it else None
136 
137  if db_id != None:
138  db = BLLDatabase()
139  check = Check.db_select(db, [db_id])[0]
140  db.close()
141 
142  self.window.destroy()
143  TestWindow(check)
144 
145  else:
146  UIUtils.show_no_sel_dialog()