def reposition(self, parent): ''' Finds the best location for the screen. If the user is using one monitor, use the bottom right corner for the presentation screen_, otherwise, use the 2nd monitor. ''' geometry = None screen_ = parent.get_screen() num_monitors = screen_.get_n_monitors() if config.has_option('screen','monitor'): if config.get('screen', 'monitor') == '1h': scr_geom = screen_.get_monitor_geometry(0) geometry = (scr_geom.width/2, scr_geom.height/2, scr_geom.width/2, scr_geom.height/2) elif num_monitors >= config.getint('screen','monitor'): scr_geom = screen_.get_monitor_geometry( config.getint('screen','monitor')-1) geometry = (scr_geom.x, scr_geom.y, scr_geom.width, scr_geom.height) if geometry == None: if(num_monitors > 1): scr_geom = screen_.get_monitor_geometry(1) geometry = (scr_geom.x, scr_geom.y, scr_geom.width, scr_geom.height) else: # No 2nd monitor, so preview it small in the corner of the screen_ scr_geom = screen_.get_monitor_geometry(0) parent.move(0,0) geometry = (scr_geom.width/2, scr_geom.height/2, scr_geom.width/2, scr_geom.height/2) exposong.log.info('Setting presentation screen position to %s.', "x=%d, y=%d, w=%d, h=%d" % geometry) self.window.move(geometry[0], geometry[1]) self.window.resize(geometry[2], geometry[3]) self.aspect = float(geometry[2])/geometry[3] self.preview.set_size_request(int(PREV_HEIGHT*self.aspect), PREV_HEIGHT) self._size = geometry[2:4]
def to_logo(self, action=None): 'Set the screen to the ExpoSong logo or a user-defined one.' if action == None: action = self._actions.get_action('Logo') if not action.get_active(): self._secondary_button_toggle(action) return if config.has_option("screen", "logo") and \ os.path.isfile(config.get("screen", "logo")): # TODO should we resize the logo? If not, we need to add the # feature to theme.Image try: if self.__logo_fl != config.get("screen", "logo"): self.__logo_fl = config.get('screen', 'logo') self.__logo_img = exposong.theme.Image(self.__logo_fl, pos=[0.2, 0.2, 0.8, 0.8]) except AttributeError: self.__logo_fl = config.get('screen', 'logo') self.__logo_img = exposong.theme.Image(self.__logo_fl, pos=[0.2, 0.2, 0.8, 0.8]) self._secondary_button_toggle(action, True) else: self._secondary_button_toggle(None) msg = _('No Logo set. Do you want to choose a Logo now?') dialog = gtk.MessageDialog(exposong.main.main, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, msg) dialog.set_default_response(gtk.RESPONSE_YES) dialog.set_title( _("Set Logo?") ) resp = dialog.run() dialog.destroy() if resp == gtk.RESPONSE_YES: exposong.prefs.PrefsDialog(exposong.main.main) if os.path.isfile(config.get("screen", "logo")): self.to_logo() else: self.to_background()
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()