Ejemplo n.º 1
0
 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]
Ejemplo n.º 2
0
 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()
Ejemplo n.º 3
0
    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()