Preferences.py :  » Media-Sound-Audio » Christine-Media-Player » christine-0.6.1 » libchristine » gui » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Media Sound Audio » Christine Media Player 
Christine Media Player » christine 0.6.1 » libchristine » gui » Preferences.py
# -*- coding: utf-8 -*-
#
# This file is part of the Christine project
#
# Copyright (c) 2006-2007 Marco Antonio Islas Cruz
#
# Christine is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Christine is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#
# @category  GTK
# @package   Preferences
# @author    Marco Antonio Islas Cruz <markuz@islascruz.org>
# @author    Miguel Vazquez Gocobachi <demrit@gnu.org>
# @copyright 2006-2007 Christine Development Group
# @license   http://www.gnu.org/licenses/gpl.txt
#from libchristine.ChristineLibrary import *
from libchristine.gui.GtkMisc import GtkMisc
from libchristine.Translator import *
from libchristine.Share import Share
from libchristine.Validator import *
from libchristine.christineConf import christineConf
from libchristine.ui import interface
import gtk
#
# Preferences gtk dialog
#
class guiPreferences(GtkMisc):
  """
  Preferences gtk dialog
  """
  (
  PLUGIN_ACTIVE,
  PLUGIN_DESC,
  PLUGIN_INSTANCE
  ) = range(3)

  #
  # Constructor
  #
  def __init__(self):
    """
    Constructor
    """
    GtkMisc.__init__(self)
    self.interface = interface()
    self.__GConf = christineConf()
    self.__Share = Share()

    self.XML = self.__Share.getTemplate('Preferences')
    self.XML.signal_autoconnect(self)

    self.__AudioSink = self.XML['audiosink']
    self.__AudioSink.connect('changed', self.updateSink, 'audiosink')

    self.__VideoSink = self.XML['videosink']
    self.__VideoSink.connect('changed', self.updateSink, 'videosink')
    
    self.__font_desc = self.XML['font_desc']
    font_desc = self.__GConf.getString('backend/subtitle_font_desc')
    if not font_desc:
      font_desc = "Sans 18"
      self.__GConf.setValue('backend/subtitle_font_desc', font_desc)
    self.__font_desc.set_property('font-name', font_desc)
    self.__font_desc.connect('font-set', self.__change_subtitle_font)
    
    self.__font_encoding = self.XML['font_encoding']
    encoding = self.__GConf.getString('backend/subtitle_font_encoding')
    if not encoding:
      encoding = "latin-1"
      self.__GConf.setValue('backend/subtitle_font_encoding', encoding)
    self.__font_encoding.set_text(encoding)
    
    self.__font_encoding.connect('changed', lambda x: self.__GConf.setValue('backend/subtitle_font_encoding', x.get_text()))

    self.__FModel    = gtk.ListStore(str)
    self.__FTreeView = self.XML['ftreeview']
    self.__FTreeView.set_model(self.__FModel)

    self.__FAdd = self.XML['fadd']
    self.__FDel = self.XML['fdel']

    self.updateFModel()
    self.__setFColumns()
    self.__GConf.notify_add('/apps/christine/backend/allowed_files',
                lambda a,b,c,d:self.updateFModel())

    self.pluginstreeview = self.XML['pluginstreeview']
    self.pluginstreeview.connect('cursor-changed',
                  self.__set_plugin_configure_button_sensitive)
    model = gtk.ListStore(bool, str, object)
    self.pluginstreeview.set_model(model)
    self.__set_plugins_columns()
    self.fill_plugins_model()
    self.configure_button = self.XML['plugins_configure_button']
    self.configure_button.connect('clicked', self.__configure_plugin)



    self.selectSinks()

    dialog   = self.XML['WindowCore']
    dialog.set_icon(self.__Share.getImageFromPix('logo'))
    self.setCheckBoxes()
    dialog.run()
    dialog.destroy()

  #
  # Sets columns
  #
  def __setFColumns(self):
    """
    Sets columns
    """
    render = gtk.CellRendererText()
    render.set_property('editable', True)
    render.connect('edited', self.onCursorChanged)
    self.__FTreeView.append_column(gtk.TreeViewColumn('Extension', render, text = 0))

  #
  # Saves model
  #
  def __saveFModel(self):
    """
    Saves Model
    """
    exts = ','.join([self.__FModel.get_value(k.iter, 0) for k in self.__FModel])
    self.__GConf.setValue('backend/allowed_files', exts)

  #
  #  Callback when cursor change
  #
  def onCursorChanged(self, render, path, value):
    """
    Callback when cursor change
    """
    self.__FModel.set_value(self.__FModel.get_iter(path), 0, value)
    self.__saveFModel()

  #
  # Updates model
  #
  def updateFModel(self):
    """
    Update model
    """
    self.__FModel.clear()
    extensions = self.__GConf.getString('backend/allowed_files').split(',')
    extensions.sort()

    if (len(extensions) < 1):
      return True

    while (len(extensions) > 0):
      self.__FModel.set(self.__FModel.append(), 0, extensions.pop())

  #
  # Adds extension
  #
  # @param  widget widget
  # @return void
  def addExtension(self, widget):
    """
    Adds extension
    """
    self.__FModel.set(self.__FModel.append(), 0, translate('New extension'))
    self.__saveFModel()

  #
  # Removes extension
  #
  # @param  widget widget
  # @return void
  def removeExtension(self, widget):
    """
    Removes extension
    """
    selection     = self.__FTreeView.get_selection()
    (model, iter) = selection.get_selected()

    if (not isNull(iter)):
      model.remove(iter)
      self.__saveFModel()

  #
  # Selects sinks
  #
  def selectSinks(self):
    """
    Selects sinks
    """
    videosink = self.__GConf.getString('backend/videosink')
    audiosink = self.__GConf.getString('backend/audiosink')
    audio_m   = self.__AudioSink.get_model()
    video_m   = self.__VideoSink.get_model()

    a = 0
    for i in audio_m:
      if (i[0] == audiosink):
        self.__AudioSink.set_active(a)
        break

      a += 1

    a = 0
    for i in video_m:
      if (i[0] == videosink):
        self.__VideoSink.set_active(a)
        break

      a += 1

  #
  # Update sink
  #
  def updateSink(self, combobox, sink):
    """
    Updates sink
    """
    path     = combobox.get_active()
    model    = combobox.get_model()
    selected = model.get_value(model.get_iter(path), 0)
    self.__GConf.setValue('backend/%s' % sink, selected)

  #
  # Sets checkboxes
  #
  def setCheckBoxes(self):
    """
    Sets check boxes
    """
    self.__Artist = self.XML['artist']
    self.__Artist.set_active(self.__GConf.getBool('ui/show_artist'))
    self.__Artist.connect('toggled', self.__GConf.toggle,'ui/show_artist')

    self.__Album = self.XML['album']
    self.__Album.set_active(self.__GConf.getBool('ui/show_album'))
    self.__Album.connect('toggled',self.__GConf.toggle,'ui/show_album')

    self.__Type = self.XML['type']
    self.__Type.set_active(self.__GConf.getBool('ui/show_type'))
    self.__Type.connect('toggled',self.__GConf.toggle,'ui/show_type')

    self.__Length = self.XML['length']
    self.__Length.set_active(self.__GConf.getBool('ui/show_length'))
    self.__Length.connect('toggled',self.__GConf.toggle,'ui/show_length')

    self.__TrackNumber = self.XML['track_number']
    self.__TrackNumber.set_active(self.__GConf.getBool('ui/show_tn'))
    self.__TrackNumber.connect('toggled',self.__GConf.toggle,'ui/show_tn')

    self.__PlayCount = self.XML['play_count']
    self.__PlayCount.set_active(self.__GConf.getBool('ui/show_play_count'))
    self.__PlayCount.connect('toggled',self.__GConf.toggle,'ui/show_play_count')

    self.__Genre = self.XML['genre']
    self.__Genre.set_active(self.__GConf.getBool('ui/show_genre'))
    self.__Genre.connect('toggled',self.__GConf.toggle,'ui/show_genre')

  def __set_plugins_columns(self):
    textrender = gtk.CellRendererText()
    boolrender = gtk.CellRendererToggle()
    boolrender.connect('toggled', self.__plugin_active_toggled)
    enabled = gtk.TreeViewColumn('Enabled', boolrender, active = self.PLUGIN_ACTIVE)
    desc = gtk.TreeViewColumn('Name', textrender, text = self.PLUGIN_DESC)
    self.pluginstreeview.append_column(enabled)
    self.pluginstreeview.append_column(desc)

  def fill_plugins_model(self):
    model = self.pluginstreeview.get_model()
    for name, plugin in self.interface.plugins.plugins.iteritems():
      iter = model.append()
      model.set(iter,
          self.PLUGIN_ACTIVE, plugin.active,
          self.PLUGIN_DESC, plugin.name,
          self.PLUGIN_INSTANCE, plugin
          )

  def __set_plugin_configure_button_sensitive(self, treeview):
    '''
    Set the configure button on plugin tab active
    @param treeview:
    '''
    model, iter = treeview.get_selection().get_selected()
    if iter:
      enabled = model.get_value(iter, self.PLUGIN_ACTIVE)
      self.configure_button.set_sensitive(enabled)

  def __configure_plugin(self, button):
    model, iter = self.pluginstreeview.get_selection().get_selected()
    if iter:
      plugin = model.get_value(iter, self.PLUGIN_INSTANCE)
      plugin.configure()

  def __plugin_active_toggled(self, cellrender, path):
    model = self.pluginstreeview.get_model()
    model[path][self.PLUGIN_ACTIVE] = not model[path][self.PLUGIN_ACTIVE]
    model[path][self.PLUGIN_INSTANCE].active = model[path][self.PLUGIN_ACTIVE]

  
  def __change_subtitle_font(self,font_button):
    self.__GConf.setValue('backend/subtitle_font_desc', 
                      font_button.get_font_name())


















www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.