def define_widgets(self, gladefile): get = lambda x: gladefile.get_widget(x) self.widgets = {} self.widgets['window'] = get('main_window') self.widgets['window'].connect('key_press_event', self.on_key_press_event) self.widgets['treeview'] = get('main_treeview') self.widgets['treeview'].connect('button_press_event', self.on_maintree_button_press_event) self.widgets['statusbar'] = get('statusbar') self.widgets['progressbar'] = get('w_progress') # get from web #buttons self.widgets['new_db'] = get('new_bt') self.widgets['toolbar'] = get('toolbar1') self.widgets['movie'] = {#{{{ 'cast': get('m_cast'), 'classification': get('m_classification'), 'cameraman': get('m_cameraman'), 'collection': get('m_collection'), 'color': get('m_color'), 'condition': get('m_condition'), 'country': get('m_country'), 'director': get('m_director'), 'genre': get('m_genre'), 'imdb': get('m_imdb'), 'layers': get('m_layers'), 'loan_info': get('loan_information'), 'medium': get('m_medium'), 'notes': get('m_notes'), 'number': get('m_number'), 'o_title': get('m_o_title'), 'picture': get('m_picture_image'), 'picture_button': get('m_picture'), 'plot': get('m_plot'), 'region': get('m_region'), 'resolution': get('m_resolution'), 'runtime': get('m_runtime'), 'screenplay': get('m_screenplay'), 'seen_icon': get('m_seen_icon'), 'site': get('m_site'), 'studio': get('m_studio'), 'ratio': get('m_ratio'), 'tags': get('m_tags'), 'title': get('m_title'), 'trailer': get('m_trailer'), 'vcodec': get('m_vcodec'), 'volume': get('m_volume'), 'year': get('m_year'), 'audio_vbox': get('m_audio_vbox'), 'subtitle_vbox': get('m_subtitle_vbox'), 'show_collection_button': get('m_show_collection_button'), 'show_volume_button': get('m_show_volume_button'), 'go_o_site_button': get('go_o_site'), 'go_site_button': get('go_site'), 'go_trailer_button': get('go_trailer'), 'return_button': get('return_button'), 'loan_button': get('loan_button'), 'loan_history': get('loan_history'), 'loan_to': get('loan_to'), 'email_reminder_button': get('b_email_reminder'), 'image_rating': get('m_image_rating'), } get('m_seen_icon_eventbox').connect('button_press_event', self.on_m_seen_icon_button_press_event) #}}} self.widgets['add'] = {#{{{ 'window': get('add_movie'), 'notebook': get('notebook_add'), 'barcode': get('am_barcode'), 'classification': get('am_classification'), 'cameraman': get('am_cameraman'), 'collection': get('am_collection_combo'), 'color': get('am_color'), 'condition': get('am_condition'), 'country': get('am_country'), 'director': get('am_director'), 'discs': get('am_discs'), 'genre': get('am_genre'), 'site': get('am_imdb'), 'layers': get('am_layers'), 'media': get('am_media'), 'medium_vbox': get('am_medium_vbox'), 'number': get('am_number'), 'notes': get('am_obs'), 'o_title': get('am_original_title'), 'picture': get('am_image'), 'image': get('am_hide_image_name'), 'plot': get('am_plot'), 'plugin_desc': get('am_plugin_desc'), 'plugin_image': get('am_plugin_image'), #'ratio': get('am_ratio'), # TODO 'region': get('am_region'), 'resolution': get('am_resolution'), 'runtime': get('am_runtime'), 'seen': get('am_seen'), 'o_site': get('am_site'), 'screenplay': get('am_screenplay'), 'source': get('am_source'), 'studio': get('am_studio'), 'tag_vbox': get('am_tag_vbox'), 'title': get('am_title'), 'trailer': get('am_trailer'), 'vcodec': get('am_vcodec'), 'volume': get('am_volume_combo'), 'cast': get('am_with'), 'year': get('am_year'), 'image_rating': get('image_add_rating'), 'rating_slider': get('rating_scale_add'), 'lang_menu': get('lang_menu'), 'lang_treeview': get('lang_treeview'), 'b_get_from_web': get('get_from_web'), 'c_web_source': get('combo_source'), # c_web_source 'delete_poster': get('t_delete_poster'), 'add_button': get('am_add_button'), 'add_close_button': get('am_add_close_button'), 'clear_button': get('am_clear_button'), 'save_button': get('am_save_button'), 'cb_only_empty': get('am_cb_only_empty'), } self.widgets['add']['window'].connect('delete_event', self.on_delete_event_am) self.widgets['add']['lang_treeview'].connect('button_press_event', self.on_lang_treeview_button_press_event) self.widgets['add']['o_title'].connect('activate', self.on_enter) self.widgets['add']['title'].connect('activate', self.on_enter) self.widgets['add']['window'].set_transient_for(self.widgets['window']) #}}} self.widgets['advfilter'] = {#{{{ 'window': get('w_advfilter'), 'advfilter_vbox': get('advfilter_rules_vbox'), 'rb_seen': get('af_rb_seen'), 'rb_seen_only': get('af_rb_seen_only'), 'rb_seen_only_n': get('af_rb_seen_only_n'), 'rb_loaned': get('af_rb_loaned'), 'rb_loaned_only': get('af_rb_loaned_only'), 'rb_loaned_only_n': get('af_rb_loaned_only_n'), 'tags_vbox': get('af_tags_vbox'), 'volumes_vbox': get('af_volumes_vbox'), 'collections_vbox': get('af_collections_vbox'), 'loans_vbox': get('af_loans_vbox'), 'dynamic_vbox': get('af_dynamic_vbox'), 'add_button': get('af_add_button'), 'tags_frame': get('af_frame_tags'), 'volumes_frame': get('af_frame_volumes'), 'collections_frame': get('af_frame_collections'), 'loans_frame': get('af_frame_loans'), 'cb_name': get('af_cbe_name'), 'name': get('af_cbe_name_entry'), } self.widgets['advfilter']['window'].connect('delete_event', self.hide_advfilter_window) self.widgets['advfilter']['window'].set_transient_for(self.widgets['window']) #}}} self.widgets['preferences'] = {#{{{ 'window': get('w_preferences'), 'notebook': get('p_notebook'), 'treeview': get('p_treeview'), 'color': get('p_color'), 'condition': get('p_condition'), 'db_details': get('p_db_details'), 'db_host': get('p_db_host'), 'db_name': get('p_db_name'), 'db_passwd': get('p_db_passwd'), 'db_port': get('p_db_port'), 'db_type': get('p_db_type'), 'db_user': get('p_db_user'), 'epdf_reader': get('pdf_reader_entry'), 'font': get('p_font'), 'font_size': get('p_font_size'), 'pdf_elements_table': get('pdf_elements_table'), 'pdf_image': get('pdf_image'), 'pdf_director': get('pdf_director'), 'pdf_genre': get('pdf_genre'), 'pdf_cast': get('pdf_cast'), 'pdf_plot': get('pdf_plot'), 'pdf_year': get('pdf_year'), 'pdf_runtime': get('pdf_runtime'), 'pdf_notes': get('pdf_notes'), 'layers': get('p_layers'), 'media': get('p_media'), 'region': get('p_region'), 's_classification': get('p_s_classification'), 's_country': get('p_s_country'), 's_director': get('p_s_director'), 's_genre': get('p_s_genre'), 's_image': get('p_s_image'), 's_notes': get('p_s_notes'), 's_o_site': get('p_s_o_site'), 's_o_title': get('p_s_o_title'), 's_plot': get('p_s_plot'), 's_rating': get('p_s_rating'), 's_runtime': get('p_s_runtime'), 's_site': get('p_s_site'), 's_studio': get('p_s_studio'), 's_title': get('p_s_title'), 's_trailer': get('p_s_trailer'), 's_cast': get('p_s_cast'), 's_year': get('p_s_year'), 's_screenplay': get('p_s_screenplay'), 's_cameraman': get('p_s_cameraman'), 's_resolution': get('p_s_resolution'), 's_barcode': get('p_s_barcode'), 's_limit': get('p_sp_s_limit'), 'vcodec': get('p_vcodec'), 'view_image': get('view_image'), 'view_number': get('view_number'), 'view_o_title': get('view_otitle'), 'view_title': get('view_title'), 'view_director': get('view_director'), 'view_genre': get('view_genre'), 'view_seen': get('view_seen'), 'view_year': get('view_year'), 'view_runtime': get('view_runtime'), 'view_rating': get('view_rating'), 'view_created': get('view_created'), 'view_updated': get('view_updated'), 'rating_image': get('rating_image'), 'spellchecker': get('spellchecker_pref'), 'spell_notes': get('spell_notes'), 'spell_plot': get('spell_plot'), 'spell_lang': get('spell_lang'), 'vbox_spellchecker': get('vbox_spellchecker'), 'default_plugin': get('default_plugin'), 'mail_smtp_server': get('mail_smtp_server'), 'mail_use_auth': get('mail_use_auth'), 'mail_username': get('mail_username'), 'mail_password': get('mail_password'), 'mail_email': get('mail_email'), 'mail_smtp_port': get('mail_smtp_port'), 'mail_use_tls': get('mail_use_tls'), 'lang_name': get('lang_name_combo'), 'tag_name': get('tag_name_combo'), 'acodec_name': get('acodec_name_combo'), 'achannel_name': get('achannel_name_combo'), 'subformat_name': get('subformat_name_combo'), 'medium_name': get('medium_name_combo'), 'vcodec_name': get('vcodec_name_combo'), 'sortby': get('p_sortby'), 'sortby_reverse': get('p_sortby_reverse'), } self.widgets['preferences']['treeview'].connect('button_press_event', self.on_p_tree_button_press_event) self.widgets['preferences']['window'].connect('delete_event', self.on_delete_event_p) self.widgets['preferences']['spellchecker'].connect('toggled', self.on_cb_spellchecker_pref_toggled) self.widgets['preferences']['window'].set_transient_for(self.widgets['window']) #}}} self.widgets['results'] = {#{{{ 'window': get('results'), 'treeview': get('results_treeview'), 'select': get('results_select'), 'cancel': get('results_cancel'), } self.widgets['results']['window'].connect('delete_event', self.on_results_window_close) self.widgets['results']['window'].set_transient_for(self.widgets['add']['window']) # default results window signals: self._resultswin_window_closed_signal = None self._resultswin_process = self.populate_dialog_with_results self._resultswin_button_pressed_signal = self.on_add_movie_results_button_press_event self.widgets['results']['select'].connect('clicked', self.on_results_select_press_event) self.widgets['results']['treeview'].connect('button_press_event', self.on_results_button_press_event) #}}} self.widgets['print_cover'] = {#{{{ # TODO: merge these two windows 'window_simple': get('w_print_cover_simple'), 'window_image': get('w_print_cover_image'), 'cs_size': get('cover_simple_size'), 'cs_include_movie_number': get('cover_simple_include_movie_number'), 'cs_include_poster': get('cover_simple_include_poster'), 'ci_size': get('cover_image_size'), 'ci_number': get('cover_image_number'), } self.widgets['print_cover']['window_simple'].connect('delete_event', self.on_delete_event_pcs) self.widgets['print_cover']['window_image'].connect('delete_event', self.on_delete_event_pci) self.widgets['print_cover']['window_simple'].set_transient_for(self.widgets['window']) self.widgets['print_cover']['window_image'].set_transient_for(self.widgets['window']) #}}} self.widgets['people'] = {#{{{ 'window': get('w_people'), 'treeview': get('p_treeview'), } self.widgets['people']['window'].connect('delete_event', self.on_delete_event_wp) self.widgets['people']['window'].set_transient_for(self.widgets['window']) #}}} self.widgets['person'] = {#{{{ # TODO: merge these two windows 'window': get('w_add_person'), 'e_window': get('w_edit_person'), 'name': get('ap_name'), 'email': get('ap_email'), 'phone': get('ap_phone'), 'e_name': get('ep_name'), 'e_email': get('ep_email'), 'e_phone': get('ep_phone'), 'e_id': get('ep_id'), } self.widgets['person']['window'].connect('delete_event', self.on_delete_event_ap) self.widgets['person']['e_window'].connect('delete_event', self.on_delete_event_ep) self.widgets['person']['window'].set_transient_for(self.widgets['people']['window']) self.widgets['person']['e_window'].set_transient_for(self.widgets['people']['window']) #}}} self.widgets['filter'] = {#{{{ 'text': get('filter_txt'), 'criteria': get('filter_criteria'), 'collection': get('f_col'), 'advfilter': get('f_advfilter'), }#}}} self.widgets['menu'] = {#{{{ 'fullscreen': get('menu_fullscreen'), 'toolbar': get('menu_toolbar'), 'ext_toolbar': get('menu_ext_toolbar'), 'export': get('export_menu'), 'import': get('import_menu'), 'not_seen_movies': get('seen_movies'), 'loaned_movies': get('loaned_movies'), 'all_movies': get('all_movies'), 'loan': get('loan1'), 'email': get('return1'), 'return': get('e-mail_reminder1'), }#}}} self.widgets['popups'] = {#{{{ 'main': get('popup'), 'loan': get('popup_loan'), 'return': get('popup_return'), 'email': get('popup_email'), }#}}} self.widgets['extensions'] = { 'toolbar': get('ext_toolbar'), 'toolbar_hb': get('ext_toolbar_hb'), 'preferences_vbox': get('p_extensions_vbox'), } self.widgets['w_loan_to'] = get('w_loan_to') self.widgets['w_loan_to'].connect('delete_event', self.on_delete_event_lt) self.widgets['poster_window'] = get('poster_window') self.widgets['poster_window'].connect('delete_event', self.on_delete_event_pw) self.widgets['poster_window'].set_transient_for(self.widgets['window']) self.widgets['big_poster'] = get('big_poster') #add some tooltips self.widgets['tooltips'] = gtk.Tooltips() self.widgets['tooltips'].set_tip(self.widgets['preferences']['epdf_reader'], _('Define here the PDF reader you want to use within Griffith. Popular choices are xpdf, gpdf, evince or kpdf. Make sure you have this program installed and working first.')) self.widgets['tooltips'].set_tip(self.widgets['preferences']['spell_lang'], _("Here you can define the desired language to use while spell checking some fields. Use you locale setting. For example, to use european portuguese spell checking enter 'pt'")) self.widgets['tooltips'].set_tip(self.widgets['preferences']['mail_smtp_server'], _("Use this entry to define the SMTP server you want to use to send e-mails. On *nix systems, 'localhost' should work. Alternatively, you can use your Internet Service Provider's SMTP server address.")) self.widgets['tooltips'].set_tip(self.widgets['preferences']['mail_email'], _("This is the from e-mail address that should be used to all outgoing e-mail. You want to include your own e-mail address here probably.")) self.widgets['tooltips'].set_tip(self.widgets['preferences']['mail_smtp_port'], _("Here you can define the smtp server port to use. If you want to use your gmail account service to send e-mails, try to enter '587' here. Default (and the most common one) is '25'")) self.widgets['tooltips'].set_tip(self.widgets['preferences']['mail_use_tls'], _("If you need TLS support, please check this checkbox. This is needed, for example, when using gmail service to send your reminder e-mails.")) # define handlers for general events gladefile.signal_autoconnect({#{{{ 'gtk_main_quit': self.destroy, 'on_window_state': self.on_window_state, 'on_configure': self.on_configure, 'on_about1_activate': self.about_dialog, 'on_quit1_activate': self.destroy, 'on_toolbar_quit_clicked': self.destroy, 'on_toolbar_add_clicked': self.add_movie, 'on_cancel_add_movie_clicked': self.hide_add_window, 'on_add1_activate': self.add_movie, 'on_add_movie_clicked': self.add_movie_db, 'on_add_movie_close_clicked': self.add_movie_close_db, 'on_delete_movie_clicked': self.delete_movie, 'on_delete1_movie_activate': self.delete_movie, 'on_main_treeview_row_activated': self.treeview_clicked, 'on_row_activated': self.treeview_clicked, 'on_get_from_web_clicked': self.get_from_web, 'on_update_button_clicked': self.update_movie, 'on_import_activate': self.on_import_activate, 'on_seen_activate': self.toggle_seen, 'on_fullscreen_activate': self.toggle_fullscreen, # preferences 'on_preferences1_activate': self.show_preferences, 'on_select_db_activate': lambda w: self.show_preferences(w, page=6), 'on_cancel_preferences_clicked': self.hide_preferences, 'on_save_preferences_clicked': self.save_preferences, 'on_p_db_type_changed': self.on_p_db_type_changed, 'on_backup_activate': self.backup, 'on_restore_activate': self.restore, 'on_merge_activate': self.merge, 'on_cover_simple_activate': self.print_cover_simple_show, 'on_cancel_print_cover_simple_clicked': self.print_cover_simple_hide, 'on_b_print_cover_simple_clicked': self.print_cover_simple_process, 'on_add_clear_clicked': self.clear_add_dialog, 'on_am_save_button_clicked': self.update_movie, 'on_people_activate': self.show_people_window, 'on_cancel_people_clicked': self.hide_people_window, 'on_filter_txt_changed': self.filter_txt, 'on_filter_criteria_changed': self.on_filter_criteria_changed, 'on_clear_filter_clicked': self.clear_filter, 'on_people_add_clicked': self.add_person, 'on_add_person_cancel_clicked': self.add_person_cancel, 'on_add_person_db_clicked': self.add_person_db, 'on_people_delete_clicked': self.delete_person, 'on_people_edit_clicked': self.edit_person, 'on_edit_person_cancel_clicked': self.edit_person_cancel, 'on_update_person_clicked': self.update_person, 'on_clone_activate': self.clone_movie, 'on_loan_button_clicked': self.loan_movie, 'on_cancel_loan_clicked': self.cancel_loan, 'on_loan_ok_clicked': self.commit_loan, 'on_return_button_clicked': self.return_loan, 'on_list_loaned_movies_activate': self.filter_loaned, 'on_m_show_volume_button_clicked': self.show_volume, 'on_m_show_collection_button_clicked': self.show_collection, 'on_cover_choose_image_activate': self.print_cover_image, 'on_cancel_print_cover_image_clicked': self.print_cover_image_hide, 'on_b_print_cover_image_clicked': self.print_cover_image_process, 'on_combo_source_changed': self.source_changed, # toolbar 'on_view_toolbar_activate': self.toggle_toolbar, 'on_view_ext_toolbar_activate': self.toggle_ext_toolbar, 'on_go_first_clicked': self.go_first, 'on_go_last_clicked': self.go_last, 'on_go_back_clicked': self.go_prev, 'on_go_forward_clicked': self.go_next, 'on_new_bt_clicked': self.new_dbb, 'on_new_activate': self.new_dbb, 'on_edit_button_clicked': self.edit_movie, # poster 'on_e_picture_clicked': self.change_poster, 'on_open_poster_clicked': self.change_poster, 'on_zoom_poster_clicked': self.z_poster, 'on_delete_poster_clicked': self.del_poster, # URLs 'on_goto_homepage_activate': self.on_goto_homepage_activate, 'on_goto_forum_activate': self.on_goto_forum_activate, 'on_goto_report_bug_activate': self.on_goto_report_bug_activate, 'on_go_o_site_clicked': self.go_oficial_site, 'on_go_site_clicked': self.go_site, 'on_go_trailer_clicked': self.go_trailer_site, 'on_seen_movies_activate': self.filter_not_seen, 'on_all_movies_activate': self.filter_all, 'on_rating_scale_add_value_changed': self.scale_rating_change_add, 'on_sugest_activate': self.sugest_movie, 'on_popup_delete_activate': self.delete_movie, 'on_popup_clone_activate': self.clone_movie, 'on_popup_simple_activate': self.print_cover_simple_show, 'on_popup_choose_image_activate': self.print_cover_image, # loans 'on_popup_loan_activate': self.loan_movie, 'on_popup_return_activate': self.return_loan, 'on_popup_email_activate': self.email_reminder, 'on_email_reminder_clicked': self.email_reminder, # volumes/collections 'on_am_collection_combo_changed': self.on_am_collection_combo_changed, 'on_am_volume_combo_changed': self.on_am_volume_combo_changed, 'on_am_add_volume_button_clicked': self.add_volume, 'on_am_add_collection_button_clicked': self.add_collection, 'on_am_remove_volume_button_clicked': self.remove_volume, 'on_am_remove_collection_button_clicked': self.remove_collection, 'on_f_col_changed': self.filter_collection, 'on_f_advfilter_changed': self.filter_using_advfilter_rule, 'on_results_cancel_clicked': self.on_results_window_close, # languages 'on_lang_add_clicked': self.on_lang_add_clicked, 'on_lang_remove_clicked': self.on_lang_remove_clicked, 'on_am_lang_add_clicked': self.on_am_lang_add_clicked, 'on_am_lang_remove_clicked': self.on_am_lang_remove_clicked, 'on_lang_rename_clicked': self.on_lang_rename_clicked, 'on_lang_name_combo_changed': self.on_lang_name_combo_changed, # tags 'on_tag_add_clicked': self.on_tag_add_clicked, 'on_tag_remove_clicked': self.on_tag_remove_clicked, 'on_tag_rename_clicked': self.on_tag_rename_clicked, 'on_tag_name_combo_changed': self.on_tag_name_combo_changed, # audio codecs 'on_acodec_add_clicked': self.on_acodec_add_clicked, 'on_acodec_remove_clicked': self.on_acodec_remove_clicked, 'on_acodec_rename_clicked': self.on_acodec_rename_clicked, 'on_acodec_name_combo_changed': self.on_acodec_name_combo_changed, # audio channels 'on_achannel_add_clicked': self.on_achannel_add_clicked, 'on_achannel_remove_clicked': self.on_achannel_remove_clicked, 'on_achannel_rename_clicked': self.on_achannel_rename_clicked, 'on_achannel_name_combo_changed': self.on_achannel_name_combo_changed, # subtitle formats 'on_subformat_add_clicked': self.on_subformat_add_clicked, 'on_subformat_remove_clicked': self.on_subformat_remove_clicked, 'on_subformat_rename_clicked': self.on_subformat_rename_clicked, 'on_subformat_name_combo_changed': self.on_subformat_name_combo_changed, # media 'on_medium_add_clicked': self.on_medium_add_clicked, 'on_medium_remove_clicked': self.on_medium_remove_clicked, 'on_medium_rename_clicked': self.on_medium_rename_clicked, 'on_medium_name_combo_changed': self.on_medium_name_combo_changed, # video codecs 'on_vcodec_add_clicked': self.on_vcodec_add_clicked, 'on_vcodec_remove_clicked': self.on_vcodec_remove_clicked, 'on_vcodec_rename_clicked': self.on_vcodec_rename_clicked, 'on_vcodec_name_combo_changed': self.on_vcodec_name_combo_changed, # advfilter 'on_open_advfilterwindow_clicked': self.show_advfilter_window, 'on_af_find_clicked': self.on_af_find_clicked, 'on_advfilter_close': self.hide_advfilter_window, 'on_advfilter_add': lambda w: advfilter.add_query_widget(self.widgets['advfilter']['dynamic_vbox'], self.field_names), 'on_advfilter_clear': lambda w: advfilter.set_conditions(self.widgets['advfilter'], advfilter.get_def_conditions(), self.field_names), 'on_advfilter_save': lambda w: advfilter.save(self.db, self.widgets['advfilter']), 'on_advfilter_open': lambda w: advfilter.load(self.db, self.widgets['advfilter'], self.field_names), 'on_advfilter_delete': lambda w: advfilter.delete(self.db, self.widgets['advfilter']), })#}}}
def populate(self, movies=None, where=None, qf=True):#{{{ if self.initialized is False: # dont try to fill movie list if Griffith is not initialized yet return False if qf and movies is None or isinstance(movies, Select): # if ".execute().fetchall()" not invoked on movies yet if not where: # due to possible 'seen', 'loaned', 'collection_id' in where import advfilter # saved in advfilter name = self.widgets['filter']['advfilter'].get_active_text()[:-3].decode('utf-8') # :-3 due to additional ' ' in the name if name: cond = self.db.session.query(db.Filter).filter_by(name=name).first() if not cond: cond = advfilter.get_def_conditions() else: cond = cond.data else: cond = advfilter.get_def_conditions() # add sorting from config sort_column_name = self.config.get('sortby', 'number', section='mainlist') sort_reverse = self.config.get('sortby_reverse', False, section='mainlist') if sort_reverse: cond['sort_by'] = set((sort_column_name + ' DESC', )) else: cond['sort_by'] = set((sort_column_name, )) # seen / loaned if self.widgets['menu']['loaned_movies'].get_active(): cond['loaned'] = True if self.widgets['menu']['not_seen_movies'].get_active(): cond["seen"] = False # collection pos = self.widgets['filter']['collection'].get_active() if pos >= 0: col_id = self.collection_combo_ids[pos] if col_id > 0: cond["collections"].add(col_id) movies = advfilter.create_select_query(self, None, cond, movies) else: # select sort column sort_column_name = self.config.get('sortby', 'number', section='mainlist') sort_reverse = self.config.get('sortby_reverse', False, section='mainlist') # explicit conditions, only empty dictionary needed to add the order by values cond = {} if sort_reverse: cond['sort_by'] = set((sort_column_name + ' DESC', )) else: cond['sort_by'] = set((sort_column_name, )) movies = sql.update_whereclause(movies, cond) # additional whereclause (volume_id, collection_id, ...) if where: for i in where: if i in db.Movie: movies.append_whereclause(db.Movie[i] == where[i]) movies = movies.execute().fetchall() self.total = len(movies) # disable refreshing while inserting self.widgets['treeview'].freeze_child_notify() self.widgets['treeview'].set_model(None) # save user sort column sort_column_id, order = self.treemodel.get_sort_column_id() # new treemodel (faster and prevents some problems) self.treemodel = gtk.TreeStore(str, gtk.gdk.Pixbuf, str, str, str, str, bool, str, str, int, str, str) # check preferences to hide or show columns if self.config.get('number', True, 'mainlist') == True: self.number_column.set_visible(True) else: self.number_column.set_visible(False) if self.config.get('otitle', True, 'mainlist') == True: self.otitle_column.set_visible(True) else: self.otitle_column.set_visible(False) if self.config.get('title', True, 'mainlist') == True: self.title_column.set_visible(True) else: self.title_column.set_visible(False) if self.config.get('director', True, 'mainlist') == True: self.director_column.set_visible(True) else: self.director_column.set_visible(False) if self.config.get('image', True, 'mainlist') == True: self.image_column.set_visible(True) else: self.image_column.set_visible(False) if self.config.get('genre', True, 'mainlist') == True: self.genre_column.set_visible(True) else: self.genre_column.set_visible(False) if self.config.get('seen', True, 'mainlist') == True: self.seen_column.set_visible(True) else: self.seen_column.set_visible(False) if self.config.get('year', True, 'mainlist') == True: self.year_column.set_visible(True) else: self.year_column.set_visible(False) if self.config.get('runtime', True, 'mainlist') == True: self.runtime_column.set_visible(True) else: self.runtime_column.set_visible(False) if self.config.get('rating', True, 'mainlist') == True: self.rating_column.set_visible(True) else: self.rating_column.set_visible(False) if self.config.get('created', True, 'mainlist') == True: self.created_column.set_visible(True) else: self.created_column.set_visible(False) if self.config.get('updated', True, 'mainlist') == True: self.updated_column.set_visible(True) else: self.updated_column.set_visible(False) for movie in movies: addmovie(self, movie) # restore user sort column if sort_column_id is not None: self.treemodel.set_sort_column_id(sort_column_id, order) # add new treemodel and allow refreshs again self.widgets['treeview'].set_model(self.treemodel) self.widgets['treeview'].thaw_child_notify() if self.total: self.widgets['treeview'].set_cursor_on_cell(0) self.count_statusbar()
def define_widgets(self, gladefile): get = lambda x: gladefile.get_widget(x) self.widgets = {} self.widgets['window'] = get('main_window') self.widgets['window'].connect('key_press_event', self.on_key_press_event) self.widgets['treeview'] = get('main_treeview') self.widgets['treeview'].connect('button_press_event', self.on_maintree_button_press_event) self.widgets['statusbar'] = get('statusbar') self.widgets['progressbar'] = get('w_progress') # get from web #buttons self.widgets['new_db'] = get('new_bt') self.widgets['toolbar'] = get('toolbar1') self.widgets['movie'] = {#{{{ 'cast': get('m_cast'), 'classification': get('m_classification'), 'cameraman': get('m_cameraman'), 'collection': get('m_collection'), 'color': get('m_color'), 'condition': get('m_condition'), 'country': get('m_country'), 'director': get('m_director'), 'genre': get('m_genre'), 'imdb': get('m_imdb'), 'layers': get('m_layers'), 'loan_info': get('loan_information'), 'medium': get('m_medium'), 'notes': get('m_notes'), 'number': get('m_number'), 'o_title': get('m_o_title'), 'picture': get('m_picture_image'), 'picture_button': get('m_picture'), 'plot': get('m_plot'), 'region': get('m_region'), 'resolution': get('m_resolution'), 'runtime': get('m_runtime'), 'screenplay': get('m_screenplay'), 'seen_icon': get('m_seen_icon'), 'site': get('m_site'), 'studio': get('m_studio'), 'ratio': get('m_ratio'), 'tags': get('m_tags'), 'title': get('m_title'), 'trailer': get('m_trailer'), 'vcodec': get('m_vcodec'), 'volume': get('m_volume'), 'year': get('m_year'), 'audio_vbox': get('m_audio_vbox'), 'subtitle_vbox': get('m_subtitle_vbox'), 'show_collection_button': get('m_show_collection_button'), 'show_volume_button': get('m_show_volume_button'), 'go_o_site_button': get('go_o_site'), 'go_site_button': get('go_site'), 'go_trailer_button': get('go_trailer'), 'return_button': get('return_button'), 'loan_button': get('loan_button'), 'loan_history': get('loan_history'), 'loan_to': get('loan_to'), 'email_reminder_button': get('b_email_reminder'), 'image_rating': get('m_image_rating'), } get('m_seen_icon_eventbox').connect('button_press_event', self.on_m_seen_icon_button_press_event) #}}} self.widgets['add'] = {#{{{ 'window': get('add_movie'), 'notebook': get('notebook_add'), 'barcode': get('am_barcode'), 'classification': get('am_classification'), 'cameraman': get('am_cameraman'), 'collection': get('am_collection_combo'), 'color': get('am_color'), 'condition': get('am_condition'), 'country': get('am_country'), 'director': get('am_director'), 'discs': get('am_discs'), 'genre': get('am_genre'), 'site': get('am_imdb'), 'layers': get('am_layers'), 'media': get('am_media'), 'medium_vbox': get('am_medium_vbox'), 'number': get('am_number'), 'notes': get('am_obs'), 'o_title': get('am_original_title'), 'picture': get('am_image'), 'image': get('am_hide_image_name'), 'plot': get('am_plot'), 'plugin_desc': get('am_plugin_desc'), 'plugin_image': get('am_plugin_image'), #'ratio': get('am_ratio'), # TODO 'region': get('am_region'), 'resolution': get('am_resolution'), 'runtime': get('am_runtime'), 'seen': get('am_seen'), 'o_site': get('am_site'), 'screenplay': get('am_screenplay'), 'source': get('am_source'), 'studio': get('am_studio'), 'tag_vbox': get('am_tag_vbox'), 'title': get('am_title'), 'trailer': get('am_trailer'), 'vcodec': get('am_vcodec'), 'volume': get('am_volume_combo'), 'cast': get('am_with'), 'year': get('am_year'), 'image_rating': get('image_add_rating'), 'rating_slider': get('rating_scale_add'), 'lang_menu': get('lang_menu'), 'lang_treeview': get('lang_treeview'), 'b_get_from_web': get('get_from_web'), 'c_web_source': get('combo_source'), # c_web_source 'delete_poster': get('t_delete_poster'), 'add_button': get('am_add_button'), 'add_close_button': get('am_add_close_button'), 'clear_button': get('am_clear_button'), 'save_button': get('am_save_button'), 'cb_only_empty': get('am_cb_only_empty'), 'aremove_poster': get('aremove_poster'), 'aadd_poster': get('aadd_poster'), } self.widgets['add']['window'].connect('delete_event', self.on_delete_event_am) self.widgets['add']['lang_treeview'].connect( 'button_press_event', self.on_lang_treeview_button_press_event) self.widgets['add']['o_title'].connect('activate', self.on_enter) self.widgets['add']['title'].connect('activate', self.on_enter) self.widgets['add']['window'].set_transient_for(self.widgets['window']) self.widgets['add']['aadd_poster'].connect('button_press_event', self.a_change_poster) self.widgets['add']['aremove_poster'].connect('button_press_event', self.a_del_poster) #}}} self.widgets['advfilter'] = {#{{{ 'window': get('w_advfilter'), 'advfilter_vbox': get('advfilter_rules_vbox'), 'rb_seen': get('af_rb_seen'), 'rb_seen_only': get('af_rb_seen_only'), 'rb_seen_only_n': get('af_rb_seen_only_n'), 'rb_loaned': get('af_rb_loaned'), 'rb_loaned_only': get('af_rb_loaned_only'), 'rb_loaned_only_n': get('af_rb_loaned_only_n'), 'tags_vbox': get('af_tags_vbox'), 'volumes_vbox': get('af_volumes_vbox'), 'collections_vbox': get('af_collections_vbox'), 'loans_vbox': get('af_loans_vbox'), 'dynamic_vbox': get('af_dynamic_vbox'), 'add_button': get('af_add_button'), 'tags_frame': get('af_frame_tags'), 'volumes_frame': get('af_frame_volumes'), 'collections_frame': get('af_frame_collections'), 'loans_frame': get('af_frame_loans'), 'cb_name': get('af_cbe_name'), 'name': get('af_cbe_name_entry'), } self.widgets['advfilter']['window'].connect('delete_event', self.hide_advfilter_window) self.widgets['advfilter']['window'].set_transient_for( self.widgets['window']) #}}} self.widgets['preferences'] = {#{{{ 'window': get('w_preferences'), 'notebook': get('p_notebook'), 'treeview': get('p_treeview'), 'color': get('p_color'), 'condition': get('p_condition'), 'db_details': get('p_db_details'), 'db_host': get('p_db_host'), 'db_name': get('p_db_name'), 'db_passwd': get('p_db_passwd'), 'db_port': get('p_db_port'), 'db_type': get('p_db_type'), 'db_user': get('p_db_user'), 'epdf_reader': get('pdf_reader_entry'), 'font': get('p_font'), 'font_size': get('p_font_size'), 'pdf_elements_table': get('pdf_elements_table'), 'pdf_image': get('pdf_image'), 'pdf_director': get('pdf_director'), 'pdf_genre': get('pdf_genre'), 'pdf_cast': get('pdf_cast'), 'pdf_plot': get('pdf_plot'), 'pdf_year': get('pdf_year'), 'pdf_runtime': get('pdf_runtime'), 'pdf_notes': get('pdf_notes'), 'layers': get('p_layers'), 'media': get('p_media'), 'region': get('p_region'), 'seen': get('p_seen'), 's_classification': get('p_s_classification'), 's_country': get('p_s_country'), 's_director': get('p_s_director'), 's_genre': get('p_s_genre'), 's_image': get('p_s_image'), 's_notes': get('p_s_notes'), 's_o_site': get('p_s_o_site'), 's_o_title': get('p_s_o_title'), 's_plot': get('p_s_plot'), 's_rating': get('p_s_rating'), 's_runtime': get('p_s_runtime'), 's_site': get('p_s_site'), 's_studio': get('p_s_studio'), 's_title': get('p_s_title'), 's_trailer': get('p_s_trailer'), 's_cast': get('p_s_cast'), 's_year': get('p_s_year'), 's_screenplay': get('p_s_screenplay'), 's_cameraman': get('p_s_cameraman'), 's_resolution': get('p_s_resolution'), 's_barcode': get('p_s_barcode'), 's_limit': get('p_sp_s_limit'), 'vcodec': get('p_vcodec'), 'view_image': get('view_image'), 'view_number': get('view_number'), 'view_o_title': get('view_otitle'), 'view_title': get('view_title'), 'view_director': get('view_director'), 'view_genre': get('view_genre'), 'view_seen': get('view_seen'), 'view_year': get('view_year'), 'view_runtime': get('view_runtime'), 'view_rating': get('view_rating'), 'view_created': get('view_created'), 'view_updated': get('view_updated'), 'rating_image': get('rating_image'), 'spellchecker': get('spellchecker_pref'), 'spell_notes': get('spell_notes'), 'spell_plot': get('spell_plot'), 'spell_lang': get('spell_lang'), 'vbox_spellchecker': get('vbox_spellchecker'), 'default_plugin': get('default_plugin'), 'mail_smtp_server': get('mail_smtp_server'), 'mail_use_auth': get('mail_use_auth'), 'mail_username': get('mail_username'), 'mail_password': get('mail_password'), 'mail_email': get('mail_email'), 'mail_smtp_port': get('mail_smtp_port'), 'mail_use_tls': get('mail_use_tls'), 'lang_name': get('lang_name_combo'), 'tag_name': get('tag_name_combo'), 'acodec_name': get('acodec_name_combo'), 'achannel_name': get('achannel_name_combo'), 'subformat_name': get('subformat_name_combo'), 'medium_name': get('medium_name_combo'), 'vcodec_name': get('vcodec_name_combo'), 'sortby': get('p_sortby'), 'sortby_reverse': get('p_sortby_reverse'), } self.widgets['preferences']['treeview'].connect( 'button_press_event', self.on_p_tree_button_press_event) self.widgets['preferences']['window'].connect('delete_event', self.on_delete_event_p) self.widgets['preferences']['spellchecker'].connect( 'toggled', self.on_cb_spellchecker_pref_toggled) self.widgets['preferences']['window'].set_transient_for( self.widgets['window']) #}}} self.widgets['results'] = {#{{{ 'window': get('results'), 'treeview': get('results_treeview'), 'select': get('results_select'), 'cancel': get('results_cancel'), } self.widgets['results']['window'].connect('delete_event', self.on_results_window_close) self.widgets['results']['window'].set_transient_for( self.widgets['add']['window']) # default results window signals: self._resultswin_window_closed_signal = None self._resultswin_process = self.populate_dialog_with_results self._resultswin_button_pressed_signal = self.on_add_movie_results_button_press_event self.widgets['results']['select'].connect( 'clicked', self.on_results_select_press_event) self.widgets['results']['treeview'].connect( 'button_press_event', self.on_results_button_press_event) #}}} self.widgets['print_cover'] = {#{{{ # TODO: merge these two windows 'window_simple': get('w_print_cover_simple'), 'window_image': get('w_print_cover_image'), 'cs_size': get('cover_simple_size'), 'cs_include_movie_number': get('cover_simple_include_movie_number'), 'cs_include_poster': get('cover_simple_include_poster'), 'ci_size': get('cover_image_size'), 'ci_number': get('cover_image_number'), } self.widgets['print_cover']['window_simple'].connect( 'delete_event', self.on_delete_event_pcs) self.widgets['print_cover']['window_image'].connect( 'delete_event', self.on_delete_event_pci) self.widgets['print_cover']['window_simple'].set_transient_for( self.widgets['window']) self.widgets['print_cover']['window_image'].set_transient_for( self.widgets['window']) #}}} self.widgets['people'] = {#{{{ 'window': get('w_people'), 'treeview': get('p_treeview'), } self.widgets['people']['window'].connect('delete_event', self.on_delete_event_wp) self.widgets['people']['window'].set_transient_for(self.widgets['window']) #}}} self.widgets['person'] = {#{{{ # TODO: merge these two windows 'window': get('w_add_person'), 'e_window': get('w_edit_person'), 'name': get('ap_name'), 'email': get('ap_email'), 'phone': get('ap_phone'), 'e_name': get('ep_name'), 'e_email': get('ep_email'), 'e_phone': get('ep_phone'), 'e_id': get('ep_id'), } self.widgets['person']['window'].connect('delete_event', self.on_delete_event_ap) self.widgets['person']['e_window'].connect('delete_event', self.on_delete_event_ep) self.widgets['person']['window'].set_transient_for( self.widgets['people']['window']) self.widgets['person']['e_window'].set_transient_for( self.widgets['people']['window']) #}}} self.widgets['filter'] = {#{{{ 'text': get('filter_txt'), 'criteria': get('filter_criteria'), 'collection': get('f_col'), 'advfilter': get('f_advfilter'), }#}}} self.widgets['menu'] = {#{{{ 'preferences': get('preferences1'), 'about': get('about1'), 'menubar': get('menubar1'), 'fullscreen': get('menu_fullscreen'), 'toolbar': get('menu_toolbar'), 'ext_toolbar': get('menu_ext_toolbar'), 'export': get('export_menu'), 'import': get('import_menu'), 'not_seen_movies': get('seen_movies'), 'loaned_movies': get('loaned_movies'), 'all_movies': get('all_movies'), 'loan': get('loan1'), 'email': get('return1'), 'return': get('e-mail_reminder1'), 'select_all': get('select_all'), 'clone' : get('clone'), 'make_cover': get('make_cover'), 'edit': get('edit1'), }#}}} self.widgets['popups'] = {#{{{ 'main': get('popup'), 'loan': get('popup_loan'), 'return': get('popup_return'), 'email': get('popup_email'), 'clone': get('clone1'), 'print_cover': get('print_cover1'), 'edit': get('edit2'), }#}}} self.widgets['extensions'] = { 'toolbar': get('ext_toolbar'), 'toolbar_hb': get('ext_toolbar_hb'), 'preferences_vbox': get('p_extensions_vbox'), } self.widgets['w_loan_to'] = get('w_loan_to') self.widgets['w_loan_to'].connect('delete_event', self.on_delete_event_lt) self.widgets['poster_window'] = get('poster_window') self.widgets['poster_window'].connect('delete_event', self.on_delete_event_pw) self.widgets['poster_window'].set_transient_for(self.widgets['window']) self.widgets['big_poster'] = get('big_poster') #add some tooltips self.widgets['tooltips'] = gtk.Tooltips() self.widgets['tooltips'].set_tip( self.widgets['preferences']['epdf_reader'], _('Define here the PDF reader you want to use within Griffith. Popular choices are xpdf, gpdf, evince or kpdf. Make sure you have this program installed and working first.' )) self.widgets['tooltips'].set_tip( self.widgets['preferences']['spell_lang'], _("Here you can define the desired language to use while spell checking some fields. Use you locale setting. For example, to use european portuguese spell checking enter 'pt'" )) self.widgets['tooltips'].set_tip( self.widgets['preferences']['mail_smtp_server'], _("Use this entry to define the SMTP server you want to use to send e-mails. On *nix systems, 'localhost' should work. Alternatively, you can use your Internet Service Provider's SMTP server address." )) self.widgets['tooltips'].set_tip( self.widgets['preferences']['mail_email'], _("This is the from e-mail address that should be used to all outgoing e-mail. You want to include your own e-mail address here probably." )) self.widgets['tooltips'].set_tip( self.widgets['preferences']['mail_smtp_port'], _("Here you can define the smtp server port to use. If you want to use your gmail account service to send e-mails, try to enter '587' here. Default (and the most common one) is '25'" )) self.widgets['tooltips'].set_tip( self.widgets['preferences']['mail_use_tls'], _("If you need TLS support, please check this checkbox. This is needed, for example, when using gmail service to send your reminder e-mails." )) # define handlers for general events gladefile.signal_autoconnect({#{{{ 'gtk_main_quit': self.destroy, 'on_window_state': self.on_window_state, 'on_configure': self.on_configure, 'on_about1_activate': self.about_dialog, 'on_quit1_activate': self.destroy, 'on_toolbar_quit_clicked': self.destroy, 'on_toolbar_add_clicked': self.add_movie, 'on_cancel_add_movie_clicked': self.hide_add_window, 'on_add1_activate': self.add_movie, 'on_add_movie_clicked': self.add_movie_db, 'on_add_movie_close_clicked': self.add_movie_close_db, 'on_delete_movie_clicked': self.delete_movie, 'on_delete1_movie_activate': self.delete_movie, 'on_main_treeview_row_activated': self.treeview_clicked, 'on_row_activated': self.treeview_clicked, 'on_get_from_web_clicked': self.get_from_web, 'on_update_button_clicked': self.update_movie, 'on_import_activate': self.on_import_activate, 'on_seen_activate': self.toggle_seen, 'on_select_all_activate': self.select_all, 'on_fullscreen_activate': self.toggle_fullscreen, # preferences 'on_preferences1_activate': self.show_preferences, 'on_select_db_activate': lambda w: self.show_preferences(w, page=6), 'on_cancel_preferences_clicked': self.hide_preferences, 'on_save_preferences_clicked': self.save_preferences, 'on_p_db_type_changed': self.on_p_db_type_changed, 'on_backup_activate': self.backup, 'on_restore_activate': self.restore, 'on_merge_activate': self.merge, 'on_cover_simple_activate': self.print_cover_simple_show, 'on_cancel_print_cover_simple_clicked': self.print_cover_simple_hide, 'on_b_print_cover_simple_clicked': self.print_cover_simple_process, 'on_add_clear_clicked': self.clear_add_dialog, 'on_am_save_button_clicked': self.update_movie, 'on_people_activate': self.show_people_window, 'on_cancel_people_clicked': self.hide_people_window, 'on_filter_txt_changed': self.filter_txt, 'on_filter_txt_key_release': self.filter_txt_key_release, 'on_filter_criteria_changed': self.on_filter_criteria_changed, 'on_clear_filter_clicked': self.clear_filter, 'on_people_add_clicked': self.add_person, 'on_add_person_cancel_clicked': self.add_person_cancel, 'on_add_person_db_clicked': self.add_person_db, 'on_people_delete_clicked': self.delete_person, 'on_people_edit_clicked': self.edit_person, 'on_edit_person_cancel_clicked': self.edit_person_cancel, 'on_update_person_clicked': self.update_person, 'on_clone_activate': self.clone_movie, 'on_loan_button_clicked': self.loan_movie, 'on_cancel_loan_clicked': self.cancel_loan, 'on_loan_ok_clicked': self.commit_loan, 'on_return_button_clicked': self.return_loan, 'on_list_loaned_movies_activate': self.filter_loaned, 'on_m_show_volume_button_clicked': self.show_volume, 'on_m_show_collection_button_clicked': self.show_collection, 'on_cover_choose_image_activate': self.print_cover_image, 'on_cancel_print_cover_image_clicked': self.print_cover_image_hide, 'on_b_print_cover_image_clicked': self.print_cover_image_process, 'on_combo_source_changed': self.source_changed, # toolbar 'on_view_toolbar_activate': self.toggle_toolbar, 'on_view_ext_toolbar_activate': self.toggle_ext_toolbar, 'on_go_first_clicked': self.go_first, 'on_go_last_clicked': self.go_last, 'on_go_back_clicked': self.go_prev, 'on_go_forward_clicked': self.go_next, 'on_new_bt_clicked': self.new_dbb, 'on_new_activate': self.new_dbb, 'on_edit_button_clicked': self.edit_movie, # poster 'on_e_picture_clicked': self.change_poster, 'on_open_poster_clicked': self.change_poster, 'on_zoom_poster_clicked': self.z_poster, 'on_delete_poster_clicked': self.del_poster, # URLs 'on_goto_homepage_activate': self.on_goto_homepage_activate, 'on_goto_forum_activate': self.on_goto_forum_activate, 'on_goto_report_bug_activate': self.on_goto_report_bug_activate, 'on_go_o_site_clicked': self.go_oficial_site, 'on_go_site_clicked': self.go_site, 'on_go_trailer_clicked': self.go_trailer_site, 'on_seen_movies_activate': self.filter_not_seen, 'on_all_movies_activate': self.filter_all, 'on_rating_scale_add_value_changed': self.scale_rating_change_add, 'on_sugest_activate': self.sugest_movie, 'on_popup_delete_activate': self.delete_movie, 'on_popup_clone_activate': self.clone_movie, 'on_popup_simple_activate': self.print_cover_simple_show, 'on_popup_choose_image_activate': self.print_cover_image, # loans 'on_popup_loan_activate': self.loan_movie, 'on_popup_return_activate': self.return_loan, 'on_popup_email_activate': self.email_reminder, 'on_email_reminder_clicked': self.email_reminder, # volumes/collections 'on_am_collection_combo_changed': self.on_am_collection_combo_changed, 'on_am_volume_combo_changed': self.on_am_volume_combo_changed, 'on_am_add_volume_button_clicked': self.add_volume, 'on_am_add_collection_button_clicked': self.add_collection, 'on_am_remove_volume_button_clicked': self.remove_volume, 'on_am_remove_collection_button_clicked': self.remove_collection, 'on_f_col_changed': self.filter_collection, 'on_f_advfilter_changed': self.filter_using_advfilter_rule, 'on_results_cancel_clicked': self.on_results_window_close, # languages 'on_lang_add_clicked': self.on_lang_add_clicked, 'on_lang_remove_clicked': self.on_lang_remove_clicked, 'on_am_lang_add_clicked': self.on_am_lang_add_clicked, 'on_am_lang_remove_clicked': self.on_am_lang_remove_clicked, 'on_lang_rename_clicked': self.on_lang_rename_clicked, 'on_lang_name_combo_changed': self.on_lang_name_combo_changed, # tags 'on_tag_add_clicked': self.on_tag_add_clicked, 'on_tag_remove_clicked': self.on_tag_remove_clicked, 'on_tag_rename_clicked': self.on_tag_rename_clicked, 'on_tag_name_combo_changed': self.on_tag_name_combo_changed, # audio codecs 'on_acodec_add_clicked': self.on_acodec_add_clicked, 'on_acodec_remove_clicked': self.on_acodec_remove_clicked, 'on_acodec_rename_clicked': self.on_acodec_rename_clicked, 'on_acodec_name_combo_changed': self.on_acodec_name_combo_changed, # audio channels 'on_achannel_add_clicked': self.on_achannel_add_clicked, 'on_achannel_remove_clicked': self.on_achannel_remove_clicked, 'on_achannel_rename_clicked': self.on_achannel_rename_clicked, 'on_achannel_name_combo_changed': self.on_achannel_name_combo_changed, # subtitle formats 'on_subformat_add_clicked': self.on_subformat_add_clicked, 'on_subformat_remove_clicked': self.on_subformat_remove_clicked, 'on_subformat_rename_clicked': self.on_subformat_rename_clicked, 'on_subformat_name_combo_changed': self.on_subformat_name_combo_changed, # media 'on_medium_add_clicked': self.on_medium_add_clicked, 'on_medium_remove_clicked': self.on_medium_remove_clicked, 'on_medium_rename_clicked': self.on_medium_rename_clicked, 'on_medium_name_combo_changed': self.on_medium_name_combo_changed, # video codecs 'on_vcodec_add_clicked': self.on_vcodec_add_clicked, 'on_vcodec_remove_clicked': self.on_vcodec_remove_clicked, 'on_vcodec_rename_clicked': self.on_vcodec_rename_clicked, 'on_vcodec_name_combo_changed': self.on_vcodec_name_combo_changed, # advfilter 'on_open_advfilterwindow_clicked': self.show_advfilter_window, 'on_af_find_clicked': self.on_af_find_clicked, 'on_advfilter_close': self.hide_advfilter_window, 'on_advfilter_add': lambda w: advfilter.add_query_widget(self.widgets['advfilter']['dynamic_vbox'], self.field_names), 'on_advfilter_clear': lambda w: advfilter.set_conditions(self.widgets['advfilter'], advfilter.get_def_conditions(), self.field_names), 'on_advfilter_save': lambda w: advfilter.save(self.db, self.widgets['advfilter']), 'on_advfilter_open': lambda w: advfilter.load(self.db, self.widgets['advfilter'], self.field_names), 'on_advfilter_delete': lambda w: advfilter.delete(self.db, self.widgets['advfilter']), })#}}}
def populate(self, movies=None, where=None, qf=True): # {{{ if self.initialized is False: # dont try to fill movie list if Griffith is not initialized yet return False if qf and movies is None or isinstance( movies, Select): # if ".execute().fetchall()" not invoked on movies yet if not where: # due to possible 'seen', 'loaned', 'collection_id' in where import advfilter # saved in advfilter name = self.widgets['filter']['advfilter'].get_active_text( )[:-3].decode('utf-8') # :-3 due to additional ' ' in the name if name: cond = self.db.session.query( db.Filter).filter_by(name=name).first() if not cond: cond = advfilter.get_def_conditions() else: cond = cond.data else: cond = advfilter.get_def_conditions() # add sorting from config sort_column_name = self.config.get('sortby', 'number', section='mainlist') sort_reverse = self.config.get('sortby_reverse', False, section='mainlist') if sort_reverse: cond['sort_by'] = set((sort_column_name + ' DESC', )) else: cond['sort_by'] = set((sort_column_name, )) # seen / loaned if self.widgets['menu']['loaned_movies'].get_active(): cond['loaned'] = True if self.widgets['menu']['not_seen_movies'].get_active(): cond["seen"] = False # collection pos = self.widgets['filter']['collection'].get_active() if pos >= 0: col_id = self.collection_combo_ids[pos] if col_id > 0: cond["collections"].add(col_id) movies = advfilter.create_select_query(self, None, cond, movies) else: # select sort column sort_column_name = self.config.get('sortby', 'number', section='mainlist') sort_reverse = self.config.get('sortby_reverse', False, section='mainlist') # explicit conditions, only empty dictionary needed to add the order by values cond = {} if sort_reverse: cond['sort_by'] = set((sort_column_name + ' DESC', )) else: cond['sort_by'] = set((sort_column_name, )) movies = sql.update_whereclause(movies, cond) # additional whereclause (volume_id, collection_id, ...) if where: for i in where: if i in db.Movie: movies.append_whereclause(db.Movie[i] == where[i]) movies = movies.execute().fetchall() self.total = len(movies) # disable refreshing while inserting self.widgets['treeview'].freeze_child_notify() self.widgets['treeview'].set_model(None) # save user sort column sort_column_id, order = self.treemodel.get_sort_column_id() # new treemodel (faster and prevents some problems) self.treemodel = gtk.TreeStore(str, gtk.gdk.Pixbuf, str, str, str, str, bool, str, str, int, str, str) # check preferences to hide or show columns if self.config.get('number', True, 'mainlist') == True: self.number_column.set_visible(True) else: self.number_column.set_visible(False) if self.config.get('otitle', True, 'mainlist') == True: self.otitle_column.set_visible(True) else: self.otitle_column.set_visible(False) if self.config.get('title', True, 'mainlist') == True: self.title_column.set_visible(True) else: self.title_column.set_visible(False) if self.config.get('director', True, 'mainlist') == True: self.director_column.set_visible(True) else: self.director_column.set_visible(False) if self.config.get('image', True, 'mainlist') == True: self.image_column.set_visible(True) else: self.image_column.set_visible(False) if self.config.get('genre', True, 'mainlist') == True: self.genre_column.set_visible(True) else: self.genre_column.set_visible(False) if self.config.get('seen', True, 'mainlist') == True: self.seen_column.set_visible(True) else: self.seen_column.set_visible(False) if self.config.get('year', True, 'mainlist') == True: self.year_column.set_visible(True) else: self.year_column.set_visible(False) if self.config.get('runtime', True, 'mainlist') == True: self.runtime_column.set_visible(True) else: self.runtime_column.set_visible(False) if self.config.get('rating', True, 'mainlist') == True: self.rating_column.set_visible(True) else: self.rating_column.set_visible(False) if self.config.get('created', True, 'mainlist') == True: self.created_column.set_visible(True) else: self.created_column.set_visible(False) if self.config.get('updated', True, 'mainlist') == True: self.updated_column.set_visible(True) else: self.updated_column.set_visible(False) for movie in movies: addmovie(self, movie) # restore user sort column if sort_column_id is not None: self.treemodel.set_sort_column_id(sort_column_id, order) # add new treemodel and allow refreshs again self.widgets['treeview'].set_model(self.treemodel) self.widgets['treeview'].thaw_child_notify() if self.total: self.widgets['treeview'].set_cursor_on_cell(0) self.count_statusbar()
def populate(self, movies=None, where=None, qf=True):#{{{ if self.initialized is False: # dont try to fill movie list if Griffith is not initialized yet return False if qf and not movies or isinstance(movies, Select): # if ".execute().fetchall()" not invoked on movies yet if not where: # due to possible 'seen', 'loaned', 'collection_id' in where import advfilter # saved in advfilter name = self.widgets['filter']['advfilter'].get_active_text()[:-3].decode('utf-8') # :-3 due to additional ' ' in the name if name: from sql import load_conditions cond = load_conditions(self.db, name) if not cond: cond = advfilter.get_def_conditions() else: cond = advfilter.get_def_conditions() # seen / loaned if self.widgets['menu']['loaned_movies'].get_active(): cond['loaned'] = True if self.widgets['menu']['not_seen_movies'].get_active(): cond["seen"] = False # collection pos = self.widgets['filter']['collection'].get_active() if pos >= 0: col_id = self.collection_combo_ids[pos] if col_id > 0: cond["collections"].add(col_id) movies = advfilter.create_select_query(self, None, cond, movies) # select sort column sort_column_name = self.config.get('sortby', 'number', section='mainlist') sort_reverse = self.config.get('sortby_reverse', False, section='mainlist') for i in sort_column_name.split(','): if db.movies_table.columns.has_key(i): if sort_reverse: movies.append_order_by(desc(db.movies_table.columns[i])) else: movies.append_order_by(db.movies_table.columns[i]) # additional whereclause (volume_id, collection_id, ...) if where: for i in where: if i in db.Movie: movies.append_whereclause(db.Movie[i]==where[i]) movies = movies.execute().fetchall() self.total = len(movies) # disable refreshing while inserting self.widgets['treeview'].freeze_child_notify() self.widgets['treeview'].set_model(None) # save user sort column sort_column_id, order = self.treemodel.get_sort_column_id() # new treemodel (faster and prevents some problems) self.treemodel = gtk.TreeStore(str, gtk.gdk.Pixbuf, str, str, str, str, bool, str, str, int) # check preferences to hide or show columns if self.config.get('number', True, 'mainlist') == True: self.number_column.set_visible(True) else: self.number_column.set_visible(False) if self.config.get('otitle', True, 'mainlist') == True: self.otitle_column.set_visible(True) else: self.otitle_column.set_visible(False) if self.config.get('title', True, 'mainlist') == True: self.title_column.set_visible(True) else: self.title_column.set_visible(False) if self.config.get('director', True, 'mainlist') == True: self.director_column.set_visible(True) else: self.director_column.set_visible(False) if self.config.get('image', True, 'mainlist') == True: self.image_column.set_visible(True) else: self.image_column.set_visible(False) if self.config.get('genre', True, 'mainlist') == True: self.genre_column.set_visible(True) else: self.genre_column.set_visible(False) if self.config.get('seen', True, 'mainlist') == True: self.seen_column.set_visible(True) else: self.seen_column.set_visible(False) if self.config.get('year', True, 'mainlist') == True: self.year_column.set_visible(True) else: self.year_column.set_visible(False) if self.config.get('runtime', True, 'mainlist') == True: self.runtime_column.set_visible(True) else: self.runtime_column.set_visible(False) if self.config.get('rating', True, 'mainlist') == True: self.rating_column.set_visible(True) else: self.rating_column.set_visible(False) for movie in movies: myiter = self.treemodel.append(None) self.treemodel.set_value(myiter,0,'%004d' % int(movie.number)) if self.config.get('image', True, section='mainlist') == True: filename = None if movie.poster_md5: filename = gutils.get_image_fname(movie.poster_md5, self.db, "s") if not filename: filename = os.path.join(self.locations['images'], 'default_thumbnail.png') self.Image.set_from_file(filename) pixbuf = self.Image.get_pixbuf() self.treemodel.set_value(myiter, 1, pixbuf) self.treemodel.set_value(myiter,2,movie.o_title) self.treemodel.set_value(myiter,3,movie.title) self.treemodel.set_value(myiter,4,movie.director) self.treemodel.set_value(myiter,5,movie.genre) self.treemodel.set_value(myiter,6,movie.seen) if movie.year is not None and (isinstance(movie.year, int) or isinstance(movie.year, long)): self.treemodel.set_value(myiter,7,movie.year) if movie.runtime is not None and (isinstance(movie.runtime, int) or isinstance(movie.runtime, long)): self.treemodel.set_value(myiter,8, '%003d' % movie.runtime + _(' min')) if movie.rating is not None and (isinstance(movie.rating, int) or isinstance(movie.rating, long)): self.treemodel.set_value(myiter,9,movie.rating) # restore user sort column if sort_column_id is not None: self.treemodel.set_sort_column_id(sort_column_id, gtk.SORT_ASCENDING) # add new treemodel and allow refreshs again self.widgets['treeview'].set_model(self.treemodel) self.widgets['treeview'].thaw_child_notify() self.widgets['treeview'].set_cursor_on_cell(0) self.count_statusbar()