# load_folders_gtk.py
# By MW, Jul 2013
# GPLv3+
#
# Graphical interface to load multi folders data
import gtk, logging, imp
LoadFolders = imp.load_source("LoadFolders", './bin/Movies/Loader/load_folders.py')
[docs]class Loader :
def __init__(self) :
self.main_label = "Use this tab if your channels are splitted into different folders, one per channel."
self.name = "Channels in folders"
self.lines_list = []
self.loader = LoadFolders.Loader()
[docs] def get_frames_object(self) :
"""Queries an object like :
[{name: " ", frames: (..., ...)}, ...]"""
for line in self.lines_list :
self.loader.add_channel(line['path_w'].get_text(), line['name_w'].get_text())
return self.loader.get_frames_object()
[docs] def get_panel(self) :
mainbox = gtk.VBox()
main_l = gtk.Label(self.main_label)
main_l.set_line_wrap_mode(True)
mainbox.pack_start(main_l, fill=False, expand=False)
frame = gtk.Frame("Folders")
mainbox.pack_start(frame, fill=True, expand=False)
frame_box = gtk.VBox()
self.box = gtk.VBox()
frame_box.pack_start(self.box, expand=True, fill=True)
frame.add(frame_box)
line = self.get_newline()
self.box.pack_start(line, expand=False, fill=False)
add = gtk.Button()
add_i = gtk.Image()
add_i.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_SMALL_TOOLBAR)
add.add(add_i)
add.set_tooltip_text("Add channel")
add.connect('clicked', self.add_channel_evt)
#add.connect("clicked", self.previous_next_clicked, -1)
frame_bottom_box = gtk.HBox()
frame_bottom_box.pack_start(gtk.Label(' '), fill=True, expand=True)
frame_bottom_box.pack_start(add, fill=False, expand=False)
frame_box.pack_start(frame_bottom_box, fill=False, expand=False)
mainbox.show_all()
return mainbox
[docs] def get_newline(self) :
"""Returns a new line to open a new folder"""
widget = gtk.HBox()
chname_l = gtk.Label("Channel name:")
chname_e = gtk.Entry()
chname_e.set_width_chars(6)
path_l = gtk.Label("Folder:")
path_e = gtk.Entry()
browse_b = gtk.Button("Browse...")
browse_b.connect('clicked', self.browse_evt, path_e)
delete = gtk.Button()
delete_i = gtk.Image()
delete_i.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_SMALL_TOOLBAR)
delete.add(delete_i)
delete.set_tooltip_text("Remove channel")
delete.connect('clicked', self.delete_line_evt, widget)
#add.connect("clicked", self.previous_next_clicked, -1)
widget.pack_start(chname_l, fill=False, expand=False)
widget.pack_start(chname_e, fill=False, expand=False)
widget.pack_start(path_l, fill=False, expand=False)
widget.pack_start(path_e, fill=True, expand=True)
widget.pack_start(browse_b, fill=False, expand=False)
widget.pack_start(delete, fill=False, expand=False)
self.lines_list.append({'line_w':widget,
'name_w':chname_e,
'path_w':path_e,
'delete_b':delete})
#print len(self.lines_list)
if len(self.lines_list) == 1 :
delete.set_sensitive(False)
else :
for w in self.lines_list :
w['delete_b'].set_sensitive(True)
return widget
[docs] def get_name(self) :
return self.name
[docs] def add_channel_evt(self, w) :
l = self.get_newline()
l.show_all()
self.box.pack_start(l, fill=False, expand=False)
[docs] def delete_line_evt(self, b, widget) :
self.box.remove(widget)
line = None
i = 0 # remove from list
while (i<len(self.lines_list)) and (self.lines_list[i]['line_w'] != widget) :
i+=1
self.lines_list.pop(i)
if len(self.lines_list) == 1 :
self.lines_list[0]['delete_b'].set_sensitive(False)
[docs] def browse_evt(self, w, path_e) :
dialog = gtk.FileChooserDialog("Select folder with channels", action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK))
resp = dialog.run()
if resp == gtk.RESPONSE_OK :
f = dialog.get_filename()
logging.info("Folder selected %s", f)
path_e.set_text(f)
dialog.destroy()