def export_sched(cls, *args): 'Export a single schedule with belonging presentations to file.' sched = exposong.schedlist.schedlist.get_active_item() if not sched: return False dlg = gtk.FileChooserDialog(_("Export Current Schedule"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.add_filter(_FILTER) dlg.set_do_overwrite_confirmation(True) dlg.set_current_folder(config.get("open-save-dialogs", "export-sched")) dlg.set_current_name(os.path.basename(title_to_filename(sched.title))+".expo") if dlg.run() == gtk.RESPONSE_ACCEPT: os.chdir(DATA_PATH) fname = dlg.get_filename() if not fname.endswith(".expo"): fname += ".expo" exposong.log.info('Exporting schedule "%s" to "%s".', sched.title, fname) tar = tarfile.open(fname, "w:gz") for item in cls._get_sched_list(): tar.add(item[0], item[1]) tar.close() config.set("open-save-dialogs", "export-sched", os.path.dirname(fname)) dlg.destroy()
def export_theme(cls, *args): 'Export the active theme to tar-compressed file' cur_theme = exposong.themeselect.themeselect.get_active() dlg = gtk.FileChooserDialog(_("Export Theme"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.add_filter(_FILTER) dlg.set_do_overwrite_confirmation(True) dlg.set_current_folder(config.get("open-save-dialogs", "export-theme")) dlg.set_current_name(_("theme_%s.expo")%title_to_filename( os.path.basename(cur_theme.get_title()))) if dlg.run() == gtk.RESPONSE_ACCEPT: fname = dlg.get_filename() if not fname.endswith(".expo"): fname += ".expo" exposong.log.info('Exporting theme "%s" to "%s".', cur_theme.get_title(), fname) tar = tarfile.open(fname, "w:gz") tar.add(os.path.join(DATA_PATH, 'theme', cur_theme.filename), os.path.join('theme', cur_theme.filename)) for bg in cur_theme.backgrounds: if isinstance(bg, exposong.theme.ImageBackground): tar.add(os.path.join(DATA_PATH, 'theme', 'res', bg.src), os.path.join('theme', 'res', bg.src)) tar.close() config.set("open-save-dialogs", "export-theme", os.path.dirname(fname)) dlg.destroy()
def import_song_dialog(cls, *args): 'Import OpenLyrics Song(s)' dlg = gtk.FileChooserDialog(_("Import Song(s) (OpenLyrics Format)"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) _FILTER = gtk.FileFilter() _FILTER.set_name("OpenLyrics Song") _FILTER.add_pattern("*.xml") dlg.add_filter(_FILTER) dlg.set_select_multiple(True) dlg.set_current_folder(config.get("open-save-dialogs", "import-song")) if dlg.run() == gtk.RESPONSE_ACCEPT: dlg.hide() files = dlg.get_filenames() for f in files: newpath = os.path.join(DATA_PATH, "pres", os.path.basename(f)) if os.path.exists(newpath): if filecmp.cmp(f, newpath): pass #Skip if they are the same. else: cls.check_import_song(f) else: cls.check_import_song(f) config.set("open-save-dialogs", "import-song", os.path.dirname(f)) dlg.destroy()
def _theme_changed(self, combo): "A new theme was selected." itr = combo.get_active_iter() if itr: mod = combo.get_model() config.set("screen", "theme", mod.get_value(itr, 0)) t = mod.get_value(itr, 1).get_title() exposong.log.info('Changing theme to "%s".',t) self.set_tooltip_text(t) exposong.screen.screen.draw() self._set_menu_items_disabled()
def import_dialog(cls, *args): 'Import a schedule, backgrounds or library.' dlg = gtk.FileChooserDialog(_("Import"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.add_filter(_FILTER) dlg.set_current_folder(config.get("open-save-dialogs", "import-expo")) if dlg.run() == gtk.RESPONSE_ACCEPT: dlg.hide() cls.import_file(dlg.get_filename()) config.set("open-save-dialogs", "import-expo", os.path.dirname(dlg.get_filename())) dlg.destroy()
def import_dialog(cls, action): 'Show the file dialog for importing OpenSong files' dlg = gtk.FileChooserDialog(_("Import OpenSong File(s)"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.set_select_multiple(True) dlg.set_current_folder(config.get("open-save-dialogs", "opensong-import-dir")) if dlg.run() == gtk.RESPONSE_ACCEPT: dlg.hide() files = dlg.get_filenames() for f in files: filename = cls.convert(unicode(f)) exposong.main.main.load_pres(filename) config.set("open-save-dialogs", "opensong-import-dir", os.path.dirname(f)) dlg.destroy()
def export_lib(cls, *args): 'Export the full library to tar-compressed file.' dlg = gtk.FileChooserDialog(_("Export Library"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.add_filter(_FILTER) dlg.set_do_overwrite_confirmation(True) dlg.set_current_name(_("exposong_library.expo")) dlg.set_current_folder(config.get("open-save-dialogs", "export-lib")) if dlg.run() == gtk.RESPONSE_ACCEPT: fname = dlg.get_filename() if not fname.endswith(".expo"): fname += ".expo" exposong.log.info('Exporting library to "%s".', fname) tar = tarfile.open(fname, "w:gz") for item in cls._get_library_list(): tar.add(item[0], item[1]) tar.close() config.set("open-save-dialogs", "export-lib", os.path.dirname(fname)) dlg.destroy()
def import_dialog(cls, action): "Show the file dialog for importing SongSelect Lyrics" dlg = gtk.FileChooserDialog(_("Import SongSelect Lyrics"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.set_select_multiple(True) filter_ = gtk.FileFilter() filter_.set_name(_("SongSelect File (%s)") % ".usr") filter_.add_pattern("*.usr") dlg.add_filter(filter_) dlg.set_current_folder(config.get("open-save-dialogs", "songselect-import-dir")) if dlg.run() == gtk.RESPONSE_ACCEPT: dlg.hide() files = dlg.get_filenames() for f in files: filename = cls.convert(unicode(f), True) exposong.main.main.load_pres(filename) config.set("open-save-dialogs", "songselect-import-dir", os.path.dirname(f)) dlg.destroy()
def export_song(cls, *args): 'Export a Song' pres = exposong.preslist.preslist.get_active_item() dlg = gtk.FileChooserDialog(_("Export Current Song"), exposong.main.main, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) dlg.set_do_overwrite_confirmation(True) dlg.set_current_folder(config.get("open-save-dialogs", "export-song")) dlg.set_current_name(os.path.basename(pres.filename)) if dlg.run() == gtk.RESPONSE_ACCEPT: os.chdir(DATA_PATH) fname = dlg.get_filename() if not fname.endswith(".xml"): fname += ".xml" exposong.log.info('Exporting presentation "%s" to "%s".', pres.get_title(), fname) shutil.copy(pres.filename, fname) config.set("open-save-dialogs", "export-song", os.path.dirname(fname)) dlg.destroy()
def _on_bg_image_new(self, widget=None): 'Add a new background image' self._set_changed() fchooser = gtk.FileChooserDialog( _("Add Images"), self, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_ADD, gtk.RESPONSE_ACCEPT) ) fchooser.set_current_folder(config.get("open-save-dialogs", "themeeditor-add-bg-image")) filt = gtk.FileFilter() filt.set_name( _("Image Types") ) filt.add_pixbuf_formats() fchooser.add_filter(filt) if fchooser.run() == gtk.RESPONSE_ACCEPT: fchooser.hide() img = fchooser.get_filename() newpath = os.path.join(DATA_PATH, 'theme', 'res', os.path.basename(img)) if newpath != img: shutil.copy(img, newpath) itr = self._bg_model.append( (exposong.theme.ImageBackground(src=os.path.basename(img)),)) self._activate_bg(itr) config.set("open-save-dialogs", "themeeditor-add-bg-image", os.path.dirname(img)) fchooser.destroy() self.draw()
def __init__(self, parent): """ Create the preferences GUI dialog. parent: the primary window that the dialog will be centered on. """ gtk.Dialog.__init__(self, _("Preferences"), parent, 0, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) self.set_default_size(350, 410) notebook = gtk.Notebook() self.vbox.pack_start(notebook, True, True, 5) #General Page table = gui.ESTable(10, auto_inc_y=True) if config.has_option("general", "data-path"): folder = config.get("general", "data-path") else: folder = DATA_PATH g_data = table.attach_folderchooser(folder, label=_("Data folder")) msg = _("The place where all your presentations, schedules and \ themes are stored.") g_data.set_tooltip_text(msg) table.attach_section_title(_("Updates")) g_update = table.attach_checkbutton( _("Automatically check for a new version")) if config.get("updates", "check_for_updates") == "True": g_update.set_active(True) table.attach_section_title(_("Songs")) g_title = table.attach_checkbutton(_("Insert title slide")) if config.get("songs", "title_slide") == "True": g_title.set_active(True) g_ccli = table.attach_entry(config.get("songs","ccli"), label=_("CCLI License #")) notebook.append_page(table, gtk.Label( _("General") )) #Screen Page table = gui.ESTable(9, auto_inc_y=True) table.attach_section_title(_("Logo")) p_logo = table.attach_filechooser(config.get("screen","logo"), label=_("Image")) p_logo_bg = table.attach_color(config.getcolor("screen","logo_bg"), label=_("Background")) table.attach_section_title(_("Notify")) p_notify_color = table.attach_color(config.getcolor("screen","notify_color"), label=_("Font Color")) p_notify_bg = table.attach_color(config.getcolor("screen","notify_bg"), label=_("Background")) # Monitor Selection monitor_name = tuple() sel = 0 screen = parent.get_screen() num_monitors = screen.get_n_monitors() monitor_name = (_("Primary"), _("Primary (Bottom-Right)"), _("Secondary"), _("Tertiary"), _("Monitor 4") )[0:num_monitors+1] monitor_value = ('1', '1h', '2', '3', '4')[0:num_monitors+1] if num_monitors == 1: sel = monitor_name[1] else: sel = monitor_name[2] try: if config.get('screen', 'monitor') == '1': sel = monitor_name[0] if config.get('screen', 'monitor') == '1h': sel = monitor_name[1] else: sel = monitor_name[config.getint('screen', 'monitor')] except config.NoOptionError: pass except IndexError: pass table.attach_section_title(_("Position")) p_monitor = table.attach_combo(monitor_name, sel, label=_("Monitor")) notebook.append_page(table, gtk.Label(_("Screen"))) self.show_all() if self.run() == gtk.RESPONSE_ACCEPT: if config.has_option("general", "data-path"): curpath = config.get("general", "data-path") else: curpath = DATA_PATH if g_data.get_current_folder() != curpath: config.set("general", "data-path", g_data.get_current_folder()) msg = _("You will have to restart ExpoSong so that the new data folder will be used.") dlg = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, msg) dlg.run() dlg.destroy() if config.get("songs", "title_slide") != str(g_title.get_active()): config.set("songs", "title_slide", str(g_title.get_active())) exposong.slidelist.slidelist.update() config.set("songs", "ccli", g_ccli.get_text()) config.set("updates", "check_for_updates", str(g_update.get_active())) if p_logo.get_filename() != None: config.set("screen", "logo", p_logo.get_filename()) logoc = p_logo_bg.get_color() config.setcolor("screen", "logo_bg", (logoc.red, logoc.green, logoc.blue)) ntfc = p_notify_color.get_color() config.setcolor("screen", "notify_color", (ntfc.red, ntfc.green, ntfc.blue)) ntfb = p_notify_bg.get_color() config.setcolor("screen", "notify_bg", (ntfb.red, ntfb.green, ntfb.blue)) config.set('screen','monitor', monitor_value[p_monitor.get_active()]) exposong.screen.screen.reposition(parent) if hasattr(exposong.screen.screen,"_logo_pbuf"): del exposong.screen.screen._logo_pbuf exposong.screen.screen.draw() self.hide()