Пример #1
0
def restore(self):
	"""restores a griffith compressed backup"""
	filename = gutils.file_chooser(_("Restore Griffith backup"), \
		action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons= \
		(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, \
		gtk.STOCK_OPEN, gtk.RESPONSE_OK))
	if filename[0]:
		try:
			zip = zipfile.ZipFile(filename[0], 'r')
		except:
			gutils.error(self, _("Can't read backup file"), self.widgets['window'])
			return False
		mypath = os.path.join(self.locations['posters'])
		for each in zip.namelist():
			file_to_restore = os.path.split(each)
			if not os.path.isdir(file_to_restore[1]):
				if file_to_restore[1] == '':
					continue
				if file_to_restore[1].endswith('.jpg'):
					myfile = os.path.join(mypath,file_to_restore[1])
				else:
					myfile = os.path.join(self.locations['home'],file_to_restore[1])
				outfile = open(myfile, 'wb')
				outfile.write(zip.read(each))
				outfile.flush()
				outfile.close()
		zip.close()

		# restore config file
		self.config = config.Config(file=os.path.join(self.locations['home'],'griffith.conf'))
		filename = os.path.join(self.locations['home'], self.config["default_db"])

		self.db.metadata.engine.dispose() # close DB
		from sqlalchemy.orm import clear_mappers
		clear_mappers()

		# check if file needs conversion
		if self.config['default_db'].lower().endswith('.gri'):
			self.debug.show('Old database format detected. Converting...')
			from dbupgrade import convert_from_old_db
			from initialize	import location_posters
			if convert_from_old_db(self, filename, os.path.join(self.locations['home'], 'griffith.db')):
				self.config.save()
				location_posters(self.locations, self.config)
			else:
				print 'Cant convert old database, exiting.'
				import sys
				sys.exit(4)

		self.db = sql.GriffithSQL(self.config, self.debug, self.locations['home'])
		from initialize	import dictionaries, people_treeview
		dictionaries(self)
		people_treeview(self)
		# let's refresh the treeview
		self.clear_details()
		self.populate_treeview()
		self.go_last()
		self.treeview_clicked()
		self.count_statusbar()
		gutils.info(self, _("Backup restored"), self.widgets['window'])
Пример #2
0
def save_preferences(self):
	w = self.widgets['preferences']
	c = self.config
	global spell_support

	was_false = notes_was_false = plot_was_false = 1	

	if c.get('gtkspell', False, section='spell') == True:
		was_false = 0

	if c.get('notes', False, section='spell') == True:
		notes_was_false = 0

	if c.get('plot', False, section='spell') == True:
		plot_was_false = 0

	# number
	if w['view_number'].get_active():
		c.set('number', 'True', section='mainlist')
	else:
		c.set('number', 'False', section='mainlist')
	# image
	if w['view_image'].get_active():
		c.set('image', 'True', section='mainlist')
	else:
		c.set('image', 'False', section='mainlist')
	# original title
	if w['view_o_title'].get_active():
		c.set('otitle', 'True', section='mainlist')
	else:
		c.set('otitle', 'False', section='mainlist')
	# title
	if w['view_title'].get_active():
		c.set('title', 'True', section='mainlist')
	else:
		c.set('title', 'False', section='mainlist')
	# director
	if w['view_director'].get_active():
		c.set('director', 'True', section='mainlist')
	else:
		c.set('director', 'False', section='mainlist')
	# genre
	if w['view_genre'].get_active():
		c.set('genre', 'True', section='mainlist')
	else:
		c.set('genre', 'False', section='mainlist')
	# seen
	if w['view_seen'].get_active():
		c.set('seen', 'True', section='mainlist')
	else:
		c.set('seen', 'False', section='mainlist')
	# year
	if w['view_year'].get_active():
		c.set('year', 'True', section='mainlist')
	else:
		c.set('year', 'False', section='mainlist')
	# runtime
	if w['view_runtime'].get_active():
		c.set('runtime', 'True', section='mainlist')
	else:
		c.set('runtime', 'False', section='mainlist')
	# rating
	if w['view_rating'].get_active():
		c.set('rating', 'True', section='mainlist')
	else:
		c.set('rating', 'False', section='mainlist')
	
	# sortby
	if w['sortby'].get_active():
		field = self.sort_criteria[w['sortby'].get_active()]
		if field:
			c.set('sortby', field, section='mainlist')
	else:
		c.set('sortby', 'number', section='mainlist')
	c.set('sortby_reverse', w['sortby_reverse'].get_active(), section='mainlist')
	
	c.set('limit', str(int(w['s_limit'].get_value())), section='mainlist')
	

	# pdf font
	if w['font'].get_filename():
		c['font'] = w['font'].get_filename()

	# spellchecker
	if w['spellchecker'].get_active():
		c.set('gtkspell', True, section='spell')
	else:
		c.set('gtkspell', False, section='spell')
	if w['spell_notes'].get_active():
		c.set('notes', True, section='spell')
	else:
		c.set('notes', False, section='spell')
	if w['spell_plot'].get_active():
		c.set('plot', True, section='spell')
	else:
		c.set('plot', False, section='spell')

	# rating image
	c['rating_image'] = str(w['rating_image'].get_active())

	#defaults
	media_id = self.media_ids[w['media'].get_active()]
	if media_id is None:
		media_id = 0
	c.set('media', media_id, section='defaults')
	vcodec_id = self.vcodecs_ids[w['vcodec'].get_active()]
	if vcodec_id is None:
		vcodec_id = 0
	c.set('vcodec', vcodec_id, section='defaults')
	c.set('condition', str(w['condition'].get_active()), section='defaults')
	c.set('region', str(w['region'].get_active()), section='defaults')
	c.set('layers', str(w['layers'].get_active()), section='defaults')
	c.set('color', str(w['color'].get_active()), section='defaults')

	# email reminder
	if w['mail_use_auth'].get_active():
		c.set('use_auth', True, section='mail')
	else:
		c.set('use_auth', False, section='mail')
		
	if w['mail_use_tls'].get_active():
		c.set('mail_use_tls', True, section='mail')
	else:
		c.set('mail_use_tls', False, section='mail')

	c.set('smtp_server', w['mail_smtp_server'].get_text(), section='mail')
	c.set('mail_smtp_port', w['mail_smtp_port'].get_text(), section='mail')

	c.set('username', w['mail_username'].get_text(), section='mail')
	c.set('password', w['mail_password'].get_text(), section='mail')
	c.set('email', w['mail_email'].get_text(), section='mail')

	# default movie plugin
	if w['default_plugin'].get_active():
		c['default_movie_plugin'] = \
			gutils.on_combo_box_entry_changed(w['default_plugin'])
	# search for:
	c.set('s_classification', w['s_classification'].get_active(), section='add')
	c.set('s_country', w['s_country'].get_active(), section='add')
	c.set('s_director', w['s_director'].get_active(), section='add')
	c.set('s_genre', w['s_genre'].get_active(), section='add')
	c.set('s_image', w['s_image'].get_active(), section='add')
	c.set('s_notes', w['s_notes'].get_active(), section='add')
	c.set('s_o_site', w['s_o_site'].get_active(), section='add')
	c.set('s_o_title', w['s_o_title'].get_active(), section='add')
	c.set('s_plot', w['s_plot'].get_active(), section='add')
	c.set('s_rating', w['s_rating'].get_active(), section='add')
	c.set('s_runtime', w['s_runtime'].get_active(), section='add')
	c.set('s_site', w['s_site'].get_active(), section='add')
	c.set('s_studio', w['s_studio'].get_active(), section='add')
	c.set('s_title', w['s_title'].get_active(), section='add')
	c.set('s_trailer', w['s_trailer'].get_active(), section='add')
	c.set('s_cast', w['s_cast'].get_active(), section='add')
	c.set('s_year', w['s_year'].get_active(), section='add')
	
	mcounter = 0
	for p in self.plugins:
		plugin_module = os.path.basename(p).replace('.py','')
		plugin_name = plugin_module.replace('PluginMovie','')
		if gutils.on_combo_box_entry_changed(w['default_plugin']) == plugin_name:
			self.d_plugin = mcounter
		mcounter = mcounter + 1
	self.widgets['add']['source'].set_active(self.d_plugin)

	if self.windows:
		save_reader = ''
	else:
		save_reader = w['epdf_reader'].get_text()

	c.set('lang', w['spell_lang'].get_text(), section='spell')
	c['pdf_reader'] = save_reader

	c.set('amazon_locale', w['amazon_locale'].get_active(), section='add')
	
	if spell_support:
		if c.get('gtkspell', False, section='spell') == False and not was_false:
			self.notes_spell.detach()
			self.plot_spell.detach()
		elif c.get('gtkspell', False, section='spell') == True and was_false:
			initialize.initialize_gtkspell(self)
		else:
			pass

		if c.get('gtkspell', False, section='spell') == True:
			if c.get('plot', True, section='spell') == False and not plot_was_false:
				self.plot_spell.detach()
			elif c.get('plot', True, section='spell') == True and plot_was_false:
				self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
				self.plot_spell.set_language(c.get('lang', 'en', section='spell'))
			else:
				pass

			if c.get('notes', True, section='spell') == False and not notes_was_false:
				self.notes_spell.detach()
			elif c.get('notes', True, section='spell') == True and notes_was_false:
				self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
				self.notes_spell.set_language(c.get('lang', 'en', section='spell'))
			else:
				pass
	self.pdf_reader = save_reader

	# database
	old = c.toDict(section='database')
	
	c.set('host', w['db_host'].get_text(), section='database')
	c.set('port', int(w['db_port'].get_value()), section='database')
	c.set('name', w['db_name'].get_text(), section='database')
	c.set('user', w['db_user'].get_text(), section='database')
	c.set('passwd', w['db_passwd'].get_text(), section='database')
	db_type = int(w['db_type'].get_active())
	if db_type == 1:
		c.set('type', 'postgres', section='database')
	elif db_type == 2:
		c.set('type', 'mysql', section='database')
	elif db_type == 3:
		c.set('type', 'mssql', section='database')
	else:
		c.set('type', 'sqlite', section='database')

	if old['type'] != c.get('type', section='database') or (old['type']!='sqlite' and (\
			old['host'] != c.get('host', section='database') or \
			old['port'] != c.get('port', section='database') or \
			old['user'] != c.get('user', section='database') or \
			old['passwd'] != c.get('passwd', section='database'))) or \
			old['name'] != c.get('name', section='database'):
		self.debug.show('DATABASE: connecting to new db server...')
		
		# new database connection
		import sql
		self.initialized = False
		self.db.metadata.clear()
		from sqlalchemy.orm import clear_mappers
		from sqlalchemy.exceptions import InvalidRequestError
		clear_mappers()
		try:
			self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])
		except InvalidRequestError, e:
			self.debug.show(str(e))
			c.set('type', 'sqlite', section='database')
			w['db_type'].set_active(0)
			self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])

		self.debug.show("New database Engine: %s" % self.db.metadata.engine.name)
		
		# initialize new database
		self.total = int(self.db.Movie.count())
		self.count_statusbar()
		from initialize	import dictionaries, people_treeview, location_posters
		c['posters'] = None # force update
		location_posters(self.locations, self.config)
		dictionaries(self)
		people_treeview(self, False)
		self.initialized = True
Пример #3
0
def save_preferences(self):
	w = self.widgets['preferences']
	c = self.config
	global spell_support

	was_false = notes_was_false = plot_was_false = 1	

	if c.get('use_gtkspell', 'False') == 'True':
		was_false = 0

	if c.get('spell_notes', 'False') == 'True':
		notes_was_false = 0

	if c.get('spell_plot', 'False') == 'True':
		plot_was_false = 0

	# image
	if w['view_image'].get_active():
		c['view_image'] = 'True'
	else:
		c['view_image'] = 'False'
	# original title
	if w['view_o_title'].get_active():
		c['view_otitle'] = 'True'
	else:
		c['view_otitle'] = 'False'
	# title
	if w['view_title'].get_active():
		c['view_title'] = 'True'
	else:
		c['view_title'] = 'False'
	# director
	if w['view_director'].get_active():
		c['view_director'] = 'True'
	else:
		c['view_director'] = 'False'
	
	# sortby
	if w['sortby'].get_active():
		field = self.sort_criteria[w['sortby'].get_active()]
		if field:
			c['sortby'] = field
	else:
		c['sortby'] = 'number'
	c['sortby_reverse'] = w['sortby_reverse'].get_active()
	

	# pdf font
	if w['font'].get_filename():
		c['font'] = w['font'].get_filename()

	# spellchecker
	if w['spellchecker'].get_active():
		c['use_gtkspell'] = 'True'
	else:
		c['use_gtkspell'] = 'False'		
	if w['spell_notes'].get_active():
		c['spell_notes'] = 'True'
	else:
		c['spell_notes'] = 'False'
	if w['spell_plot'].get_active():
		c['spell_plot'] = 'True'
	else:
		c['spell_plot'] = 'False'

	# rating image
	c['rating_image'] = str(w['rating_image'].get_active())

	#defaults
	c['media'] = self.media_ids[w['media'].get_active()]
	c['vcodec'] = self.vcodecs_ids[w['vcodec'].get_active()]
	c['condition'] = str(w['condition'].get_active())
	c['region'] = str(w['region'].get_active())
	c['layers'] = str(w['layers'].get_active())
	c['color'] = str(w['color'].get_active())

	# email reminder
	if w['mail_use_auth'].get_active():
		c['mail_use_auth'] = 'True'
	else:
		c['mail_use_auth'] = 'False'

	c['mail_smtp_server'] = w['mail_smtp_server'].get_text()
	c['mail_username'] = w['mail_username'].get_text()
	c['mail_password'] = w['mail_password'].get_text()
	c['mail_email'] = w['mail_email'].get_text()

	# default movie plugin
	if w['default_plugin'].get_active():
		c['default_movie_plugin'] = \
			gutils.on_combo_box_entry_changed(w['default_plugin'])
	# search for:
	c['s_classification'] = w['s_classification'].get_active()
	c['s_country'] = w['s_country'].get_active()
	c['s_director'] = w['s_director'].get_active()
	c['s_genre'] = w['s_genre'].get_active()
	c['s_image'] = w['s_image'].get_active()
	c['s_notes'] = w['s_notes'].get_active()
	c['s_o_site'] = w['s_o_site'].get_active()
	c['s_o_title'] = w['s_o_title'].get_active()
	c['s_plot'] = w['s_plot'].get_active()
	c['s_rating'] = w['s_rating'].get_active()
	c['s_runtime'] = w['s_runtime'].get_active()
	c['s_site'] = w['s_site'].get_active()
	c['s_studio'] = w['s_studio'].get_active()
	c['s_title'] = w['s_title'].get_active()
	c['s_trailer'] = w['s_trailer'].get_active()
	c['s_cast'] = w['s_cast'].get_active()
	c['s_year'] = w['s_year'].get_active()
	
	mcounter = 0
	for p in self.plugins:
		plugin_module = os.path.basename(p).replace('.py','')
		plugin_name = plugin_module.replace('PluginMovie','')
		if gutils.on_combo_box_entry_changed(w['default_plugin']) == plugin_name:
			self.d_plugin = mcounter
		mcounter = mcounter + 1
	self.widgets['add']['source'].set_active(self.d_plugin)

	if self.windows:
		save_reader = ''
	else:
		save_reader = w['epdf_reader'].get_text()

	c['spell_lang'] = w['spell_lang'].get_text()
	c['pdf_reader'] = save_reader

	c['amazon_locale'] = w['amazon_locale'].get_active()
	
	if spell_support:
		if c.get('use_gtkspell', 'False') == 'False' and not was_false:
			self.notes_spell.detach()
			self.plot_spell.detach()
		elif c.get('use_gtkspell', 'False') == 'True' and was_false:
			initialize.initialize_gtkspell(self)
		else:
			pass

		if c.get('use_gtkspell', 'False') == 'True':
			if c.get('spell_plot', 'True') == 'False' and not plot_was_false:
				self.plot_spell.detach()
			elif c.get('spell_plot', 'True') == 'True' and plot_was_false:
				self.plot_spell = gtkspell.Spell(self.widgets['add']['plot'])
				self.plot_spell.set_language(c.get('spell_lang', 'en'))
			else:
				pass

			if c.get('spell_notes', 'True') == 'False' and not notes_was_false:
				self.notes_spell.detach()
			elif c.get('spell_notes', 'True') == 'True' and notes_was_false:
				self.notes_spell = gtkspell.Spell(self.widgets['add']['notes'])
				self.notes_spell.set_language(c.get('spell_lang', 'en'))
			else:
				pass
	self.pdf_reader = save_reader

	# database
	old = {
		'db_type':   c['db_type'],
		'db_host':   c['db_host'],
		'db_port':   c['db_port'],
		'db_name':   c['db_name'],
		'db_user':   c['db_user'],
		'db_passwd': c['db_passwd'],
	}
	c['db_host']   = w['db_host'].get_text()
	c['db_port']   = int(w['db_port'].get_value())
	c['db_name']   = w['db_name'].get_text()
	c['db_user']   = w['db_user'].get_text()
	c['db_passwd'] = w['db_passwd'].get_text()
	db_type = int(w['db_type'].get_active())
	if db_type == 1:
		c['db_type'] = 'postgres'
	elif db_type == 2:
		c['db_type'] = 'mysql'
	else:
		c['db_type'] = 'sqlite'

	if old['db_type'] != c['db_type'] or (old['db_type']!='sqlite' and (\
			old['db_host'] != c['db_host'] or \
			old['db_port'] != c['db_port'] or \
			old['db_name'] != c['db_name'] or \
			old['db_user'] != c['db_user'] or \
			old['db_passwd'] != c['db_passwd'])):
		self.debug.show('DATABASE: connecting to new db server...')
		
		# new database connection
		import sql
		self.initialized = False
		self.db.metadata.clear()
		from sqlalchemy.orm import clear_mappers
		clear_mappers()
		self.db = sql.GriffithSQL(c, self.debug, self.locations['home'])
		self.debug.show("New database Engine: %s" % self.db.metadata.engine.name)
		
		# initialize new database
		self.total = int(self.db.Movie.count())
		self.count_statusbar()
		from initialize	import dictionaries, people_treeview, location_posters
		c['posters'] = None # force update
		location_posters(self.locations, self.config)
		dictionaries(self)
		people_treeview(self, False)
		self.initialized = True
	self.clear_details()
	self.populate_treeview()
	self.go_last()
	c.save()
Пример #4
0
    def __init__(self, *args, **kwds):
    
        # debug object
        global debug
        debug = self.debug = gdebug.GriffithDebug()

        gconsole.check_args(self)
        initialize.locations(self)
        initialize.i18n(self, self.locations['i18n'])
        self.posix = (os.name == 'posix')
        
        # Configuration
        if self._tmp_config.find('/') >=0 or self._tmp_config.find('\\') >=0:
            configFileName = self._tmp_config
        else:
            configFileName = os.path.join(self.locations['home'], self._tmp_config)
        self.config = config.Config(file=configFileName)
        initialize.location_posters(self.locations, self.config)
        
        # convert old database
        filename = os.path.join(self.locations['home'], self.config.get('file', 'griffith.db', section='database'))
        if self.config.get('file', 'griffith.db', section='database').lower().endswith('.gri'):
            debug.show('Old database format detected. Converting...')
            from dbupgrade import convert_from_old_db
            if convert_from_old_db(self, filename, os.path.join(self.locations['home'], 'griffith.db')):
                self.config.save()
                initialize.location_posters(self.locations, self.config)
            else:
                print 'Cant convert old database, exiting.'
                sys.exit(4)     
        
        # create/connect db
        from sql import GriffithSQL
        self.db = GriffithSQL(self.config, self.debug, self.locations['home'])
        
        # let's check any console arguments to parse
        gconsole.check_args_with_db(self)
        
        self.filter_l = False
        
        # begin wxGlade: MainFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER|wx.SP_LIVE_UPDATE)
        self.window_1_pane_2 = wx.Panel(self.window_1, -1)
        self.notebook_1 = wx.Notebook(self.window_1_pane_2, -1, style=0)
        self.window_1_pane_1 = wx.Panel(self.window_1, -1)
        
        # Menu Bar
        self.main_frame_menubar = wx.MenuBar()
        wxglade_tmp_menu = wx.Menu()
        self.new = wx.MenuItem(wxglade_tmp_menu, 1, _("&New"), _("Start a blank database"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.new)
        self.save_as = wx.MenuItem(wxglade_tmp_menu, 2, _("Save as..."), _("Make a backup of the database"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.save_as)
        self.revert = wx.MenuItem(wxglade_tmp_menu, 3, _("Revert"), _("Revert to a previous database backup"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.revert)
        wxglade_tmp_menu.AppendSeparator()
        self.import_data = wx.MenuItem(wxglade_tmp_menu, 4, _("Import"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.import_data)
        self.export_data = wx.MenuItem(wxglade_tmp_menu, 5, _("Export"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.export_data)
        wxglade_tmp_menu.AppendSeparator()
        self._print = wx.MenuItem(wxglade_tmp_menu, 6, _("Print"), "", wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self._print)
        wxglade_tmp_menu.AppendSeparator()
        self.exit = wx.MenuItem(wxglade_tmp_menu, wx.ID_EXIT, _("Exit"), _("Terminate the program"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.exit)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("File"))
        wxglade_tmp_menu = wx.Menu()
        self.add = wx.MenuItem(wxglade_tmp_menu, 7, _("Add"), _("Add a new record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.add)
        self.delete = wx.MenuItem(wxglade_tmp_menu, 8, _("Delete"), _("Deletes a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.delete)
        self.edit = wx.MenuItem(wxglade_tmp_menu, 9, _("Edit"), _("Edit a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.edit)
        self.duplicate = wx.MenuItem(wxglade_tmp_menu, 10, _("Duplicate"), _("Duplicates a record"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.duplicate)
        wxglade_tmp_menu.AppendSeparator()
        wxglade_tmp_menu_sub = wx.Menu()
        self.open = wx.MenuItem(wxglade_tmp_menu_sub, 11, _("Open"), _("Opens the poster viewer"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.open)
        self.fetch = wx.MenuItem(wxglade_tmp_menu_sub, 12, _("Fetch from Amazon"), _("Fetches a poster using Amazon service"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.fetch)
        self.erase = wx.MenuItem(wxglade_tmp_menu_sub, 13, _("Erase"), _("Erase the current poster"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.erase)
        wxglade_tmp_menu.AppendMenu(wx.NewId(), _("Poster image"), wxglade_tmp_menu_sub, "")
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Edit"))
        wxglade_tmp_menu = wx.Menu()
        self.view_toolbar = wx.MenuItem(wxglade_tmp_menu, 14, _("Toolbar"), _("Toggles toolbar visibility"), wx.ITEM_CHECK)
        wxglade_tmp_menu.AppendItem(self.view_toolbar)
        wxglade_tmp_menu.AppendSeparator()
        self.view_not_seen = wx.MenuItem(wxglade_tmp_menu, 15, _("Not seen"), _("View only not seen"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_not_seen)
        self.view_loaned = wx.MenuItem(wxglade_tmp_menu, 16, _("Loaned"), _("View only loaned"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_loaned)
        self.view_all = wx.MenuItem(wxglade_tmp_menu, 17, _("All"), _("View all records"), wx.ITEM_RADIO)
        wxglade_tmp_menu.AppendItem(self.view_all)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("View"))
        wxglade_tmp_menu = wx.Menu()
        self.suggest = wx.MenuItem(wxglade_tmp_menu, 18, _("Suggest"), _("Suggest an unseen film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.suggest)
        wxglade_tmp_menu_sub = wx.Menu()
        self.print_cover_builtin = wx.MenuItem(wxglade_tmp_menu_sub, 19, _("Built-in"), _("Prints a cover with record data"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.print_cover_builtin)
        self.prints_cover_custom = wx.MenuItem(wxglade_tmp_menu_sub, 20, _("Custom"), _("Prints a cover with a custom image"), wx.ITEM_NORMAL)
        wxglade_tmp_menu_sub.AppendItem(self.prints_cover_custom)
        wxglade_tmp_menu.AppendMenu(wx.NewId(), _("Print cover"), wxglade_tmp_menu_sub, "")
        wxglade_tmp_menu.AppendSeparator()
        self.preferences = wx.MenuItem(wxglade_tmp_menu, wx.ID_PREFERENCES, _("Preferences"), _("Define the preferences"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.preferences)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Tools"))
        wxglade_tmp_menu = wx.Menu()
        self.loan_film = wx.MenuItem(wxglade_tmp_menu, 22, _("Loan"), _("Loans a film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.loan_film)
        self.return_film = wx.MenuItem(wxglade_tmp_menu, 23, _("Return"), _("Returns a previously loaned film"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.return_film)
        self.email_reminder = wx.MenuItem(wxglade_tmp_menu, 24, _("E-mail reminder"), _("Sends an automatic loan reminder e-mail message "), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.email_reminder)
        wxglade_tmp_menu.AppendSeparator()
        self.people = wx.MenuItem(wxglade_tmp_menu, 25, _("People"), _("Manages people information"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.people)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Loans"))
        wxglade_tmp_menu = wx.Menu()
        self.homepage = wx.MenuItem(wxglade_tmp_menu, 26, _("Homepage"), _("Visit Griffith's homepage"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.homepage)
        self.forum = wx.MenuItem(wxglade_tmp_menu, 27, _("Forum"), _("Visit Griffith's community forum"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.forum)
        self.reportbug = wx.MenuItem(wxglade_tmp_menu, 28, _("Reportbug"), _("Report a new bug"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.reportbug)
        wxglade_tmp_menu.AppendSeparator()
        self.about = wx.MenuItem(wxglade_tmp_menu, wx.ID_ABOUT, _("About"), _("Display information about this program"), wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.about)
        self.main_frame_menubar.Append(wxglade_tmp_menu, _("Help"))
        self.SetMenuBar(self.main_frame_menubar)
        # Menu Bar end
        self.main_frame_statusbar = self.CreateStatusBar(1, 0)
        
        # Tool Bar
        self.main_frame_toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL|wx.TB_DOCKABLE|wx.TB_TEXT)
        self.SetToolBar(self.main_frame_toolbar)
        self.main_frame_toolbar.AddLabelTool(1004, _("First"), wx.Bitmap("images/go-first.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1003, _("Previous"), wx.Bitmap("images/go-previous.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1004, _("Next"), wx.Bitmap("images/go-next.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddLabelTool(1005, _("Last"), wx.Bitmap("images/go-last.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1006, _("Add"), wx.Bitmap("images/document-new.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Add a new film"), _("Add a new film to the collection"))
        self.main_frame_toolbar.AddLabelTool(1008, _("Delete"), wx.Bitmap("images/user-trash.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Delete this film"), _("Deletes this film from collection"))
        self.main_frame_toolbar.AddLabelTool(1009, _("Edit"), wx.Bitmap("images/edit-select-all.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Edit film details"), _("Edit film details"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1010, _("Webpage"), wx.Bitmap("images/applications-internet.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Go to the film webpage"), _("Go to the film webpage"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1013, _("Amazon Poster"), wx.Bitmap("images/applications-graphics.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("Add Poster From Amazon"), _("Try to find a poster using the Amazon Services on the web"))
        self.main_frame_toolbar.AddSeparator()
        self.main_frame_toolbar.AddLabelTool(1014, _("People"), wx.Bitmap("images/system-users.png", wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, "", "")
        # Tool Bar end
        self.label_1 = wx.StaticText(self, -1, _("Filter"))
        self.tc_filter = wx.TextCtrl(self, -1, "")
        self.bt_clear_filter = wx.Button(self, -1, _("clear"))
        self.cb_criteria = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
        self.main_listcontrol = wx.ListCtrl(self.window_1_pane_1, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
        self.number = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.o_title = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.title = wx.StaticText(self.window_1_pane_2, -1, _("label_2"))
        self.poster = wx.BitmapButton(self.window_1_pane_2, -1, wx.NullBitmap, style=wx.BU_AUTODRAW)
        self.plot = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)
        self.cast = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)
        self.notes = wx.TextCtrl(self.notebook_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_LINEWRAP|wx.TE_WORDWRAP)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_MENU, self.OnNew, self.new)
        self.Bind(wx.EVT_MENU, self.OnSaveAs, self.save_as)
        self.Bind(wx.EVT_MENU, self.OnRevert, self.revert)
        self.Bind(wx.EVT_MENU, self.OnImport, self.import_data)
        self.Bind(wx.EVT_MENU, self.OnExport, self.export_data)
        self.Bind(wx.EVT_MENU, self.OnPrint, self._print)
        self.Bind(wx.EVT_MENU, self.OnExit, self.exit)
        self.Bind(wx.EVT_MENU, self.OnAdd, self.add)
        self.Bind(wx.EVT_MENU, self.OnDelete, self.delete)
        self.Bind(wx.EVT_MENU, self.OnEdit, self.edit)
        self.Bind(wx.EVT_MENU, self.onDuplicate, self.duplicate)
        self.Bind(wx.EVT_MENU, self.OnPosterOpen, self.open)
        self.Bind(wx.EVT_MENU, self.OnPosterFromAmazon, self.fetch)
        self.Bind(wx.EVT_MENU, self.OnPosterErase, self.erase)
        self.Bind(wx.EVT_MENU, self.OnViewToolbar, self.view_toolbar)
        self.Bind(wx.EVT_MENU, self.OnViewNotSeen, self.view_not_seen)
        self.Bind(wx.EVT_MENU, self.OnViewLoaned, self.view_loaned)
        self.Bind(wx.EVT_MENU, self.OnViewAll, self.view_all)
        self.Bind(wx.EVT_MENU, self.OnSuggest, self.suggest)
        self.Bind(wx.EVT_MENU, self.OnPrintCoverBuiltin, self.print_cover_builtin)
        self.Bind(wx.EVT_MENU, self.OnPrintCoverCustom, self.prints_cover_custom)
        self.Bind(wx.EVT_MENU, self.OnPreferences, self.preferences)
        self.Bind(wx.EVT_MENU, self.OnLoanFilm, self.loan_film)
        self.Bind(wx.EVT_MENU, self.OnReturnFilm, self.return_film)
        self.Bind(wx.EVT_MENU, self.OnEmailReminder, self.email_reminder)
        self.Bind(wx.EVT_MENU, self.OnPeople, self.people)
        self.Bind(wx.EVT_MENU, self.OnHomepage, self.homepage)
        self.Bind(wx.EVT_MENU, self.OnForum, self.forum)
        self.Bind(wx.EVT_MENU, self.OnReportBug, self.reportbug)
        self.Bind(wx.EVT_MENU, self.OnAbout, self.about)
        self.Bind(wx.EVT_TOOL, self.OnFirst, id=1004)
        self.Bind(wx.EVT_TOOL, self.OnPrevious, id=1003)
        self.Bind(wx.EVT_TOOL, self.OnNext, id=1004)
        self.Bind(wx.EVT_TOOL, self.OnLast, id=1005)
        self.Bind(wx.EVT_TOOL, self.OnAdd, id=1006)
        self.Bind(wx.EVT_TOOL, self.OnDelete, id=1008)
        self.Bind(wx.EVT_TOOL, self.OnEdit, id=1009)
        self.Bind(wx.EVT_TOOL, self.OnWebpage, id=1010)
        self.Bind(wx.EVT_TOOL, self.OnAddAmazonPoster, id=1013)
        self.Bind(wx.EVT_TOOL, self.OnPeople, id=1014)
        self.Bind(wx.EVT_TEXT, self.OnFilterChange, self.tc_filter)
        self.Bind(wx.EVT_BUTTON, self.OnClearFilter, self.bt_clear_filter)
        self.Bind(wx.EVT_TEXT, self.OnChangeCriteria, self.cb_criteria)
        self.Bind(wx.EVT_LIST_DELETE_ITEM, self.OnMainListDelete, self.main_listcontrol)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnMainListSelected, self.main_listcontrol)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnMainLColumnClicked, self.main_listcontrol)
        self.Bind(wx.EVT_BUTTON, self.OnPosterClick, self.poster)
        # end wxGlade
        
        initialize.locations_misc(self)
        #initialize.toolbar(self)
        initialize.treeview(self)
        #initialize.loans_treeview(self)
        #initialize.lang_treeview(self)
        initialize.dictionaries(self)
        initialize.combos(self)
        #initialize.preferences(self)
        #initialize.movie_plugins(self)
        #initialize.export_plugins(self)
        #initialize.people_treeview(self)
        #initialize.web_results(self)
        self.initialized = True
        #self.restore_state()
        #self.clear_details()
        self.populate_treeview()