#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import pygtk
if not sys.platform == 'win32':
	pygtk.require('2.0')
import gtk
import gobject
import ConfigParser
import notebookimg

class Preferences():
	def __init__(self, config, main):	
		self.config = config
		self.main = main
		self.fenetre = gtk.Window()
		self.fenetre.set_title("Préférences")
		self.fenetre.set_icon(gtk.gdk.pixbuf_new_from_file("img/synapps/SynApps.ico"))
		self.fenetre.set_border_width(5)
		self.fenetre.set_default_size(400, 300)
		
		self.VBoxPrinc = gtk.VBox()
		
		#Création des onglets
		self.Tabs = notebookimg.NoteBookImg()
		self.VBoxPrinc.pack_start(self.Tabs)
		
		#Création de l'onglet Général
		self.General = gtk.Table(3, 2)
		self.General.set_border_width(5)
		
		self.DisplayInstalled = gtk.CheckButton("Afficher les applications déjà installées")
		self.DisplayInstalled.set_active(self.config.get('Display', 'DisplayInstalled'))
		self.DisplayUninstalled = gtk.CheckButton("Afficher les applications non-installées")
		self.DisplayUninstalled.set_active(self.config.get('Display', 'DisplayUninstalled'))
		
		self.AppsPathLabel = gtk.Label("Dossier apps: ")
		self.AppsPathEntry = gtk.Entry()
		self.AppsPathEntry.set_text(self.config.get('SynApps', 'AppsPath'))
		
		self.General.attach(self.DisplayInstalled, 0, 2, 0, 1, gtk.FILL, gtk.FILL)
		self.General.attach(self.DisplayUninstalled, 0, 2, 1, 2, gtk.FILL, gtk.FILL)
		self.General.attach(self.AppsPathLabel, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
		self.General.attach(self.AppsPathEntry, 1, 2, 2, 3, gtk.FILL|gtk.EXPAND, gtk.FILL)
		
		self.Tabs.append_page(self.General, "Général", "img/synapps/General.png")
				
		#Création de l'onglet Sources
		self.Sources = gtk.VBox()
		self.Sources.set_border_width(5)
		self.SourcesBorder = gtk.Frame()
		self.Sources.pack_start(self.SourcesBorder)
		self.DefilSources = gtk.ScrolledWindow()
		self.DefilSources.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
		self.SourcesBorder.add(self.DefilSources)
		self.ListStoreSources = gtk.ListStore(gobject.TYPE_BOOLEAN, str, str)
		
		self.import_src_list()
		self.SourcesList = gtk.TreeView(self.ListStoreSources)
		self.SourcesList.set_headers_visible(False)
		self.DefilSources.add(self.SourcesList)
		
		self.CellSrcBut = gtk.CellRendererToggle()
		self.CellSrcBut.set_property('activatable', True)
		self.CellSrcBut.connect("toggled", self.on_CellSrcBut_toggled)
		self.CellSrc = gtk.CellRendererText()
		self.CellSrc.set_property('editable', True)
		self.CellSrc.connect('edited', self.CellRendererEdit, (self.ListStoreSources, 1))
		self.CellSrcUrl = gtk.CellRendererText()
		self.CellSrcUrl.set_property('editable', True)
		self.CellSrcUrl.connect('edited', self.CellRendererEdit, (self.ListStoreSources, 2))
				
		self.ColonneSrcBut = gtk.TreeViewColumn('')
		self.ColonneSrcBut.pack_start(self.CellSrcBut, True)
		self.ColonneSrcBut.add_attribute(self.CellSrcBut, 'active', 0)
		self.SourcesList.append_column(self.ColonneSrcBut)
		self.ColonneSrc = gtk.TreeViewColumn('')
		self.ColonneSrc.pack_start(self.CellSrc, True)
		self.ColonneSrc.add_attribute(self.CellSrc, 'text', 1)
		self.SourcesList.append_column(self.ColonneSrc)
		self.ColonneSrcUrl = gtk.TreeViewColumn('')
		self.ColonneSrcUrl.pack_start(self.CellSrcUrl, True)
		self.ColonneSrcUrl.add_attribute(self.CellSrcUrl, 'text', 2)
		self.SourcesList.append_column(self.ColonneSrcUrl)
		
		self.HBBoxSrc = gtk.HButtonBox()
		self.HBBoxSrc.set_layout(gtk.BUTTONBOX_END)
		
		self.BoutonSupprimer = gtk.Button(stock = gtk.STOCK_REMOVE)
		self.BoutonSupprimer.connect("clicked", self.on_BoutonSupprimer_clicked)
		self.HBBoxSrc.pack_start(self.BoutonSupprimer, False, False)
		self.HBBoxSrc.set_child_secondary(self.BoutonSupprimer, True)
		self.BoutonAjouter = gtk.Button(stock = gtk.STOCK_ADD)
		self.BoutonAjouter.connect("clicked", self.on_BoutonAjouter_clicked)
		self.HBBoxSrc.pack_start(self.BoutonAjouter, False, False)
		
		self.Sources.pack_start(self.HBBoxSrc, False, False)
		
		self.Tabs.append_page(self.Sources, "Sources", "img/synapps/Sources.png")
		
		#Création des boutons
		self.HBBoxBas = gtk.HButtonBox()
		self.HBBoxBas.set_layout(gtk.BUTTONBOX_END)
		
		self.BoutonAnnuler = gtk.Button(stock = gtk.STOCK_CANCEL)
		self.BoutonAnnuler.connect("clicked", self.on_BoutonAnnuler_clicked)
		self.HBBoxBas.pack_start(self.BoutonAnnuler, False, False)
		self.HBBoxBas.set_child_secondary(self.BoutonAnnuler, True)
		self.BoutonAppliquer = gtk.Button(stock = gtk.STOCK_APPLY)
		self.BoutonAppliquer.connect("clicked", self.on_BoutonAppliquer_clicked)
		self.HBBoxBas.pack_start(self.BoutonAppliquer, False, False)
		self.HBBoxBas.set_border_width(5)
		
		self.VBoxPrinc.pack_start(self.HBBoxBas, False, False)
		
		self.fenetre.add(self.VBoxPrinc)
		self.fenetre.show_all()
		
	def import_src_list(self):
		config = ConfigParser.ConfigParser()
		config.read('list/sources.list')
		for section in config.sections():
			if config.get(section, 'display') == "False" or config.get(section, 'display') == "false" or config.get(section, 'display') == "0" or config.get(section, 'display') == 0:
				active = False
			else:
				active = True
			self.ListStoreSources.append([active, section, config.get(section, 'link')])

	def on_CellSrcBut_toggled(self, widget, path):
		self.ListStoreSources[path][0] = not self.ListStoreSources[path][0]
	
	def CellRendererEdit(self, celltext, chemin, nouveau_texte, donnees_utilisateur):
		liststore, colonne = donnees_utilisateur
		liststore[chemin][colonne] = nouveau_texte
		
	def on_BoutonAjouter_clicked(self, widget):
		self.ListStoreSources.append([False, "Nouvelle source", ""])
		
	def on_BoutonSupprimer_clicked(self, widget):
		(modele, iter) = self.SourcesList.get_selection().get_selected()
		modele.remove(iter)
		
	def on_BoutonAppliquer_clicked(self, widget):
		self.config.set('Display', 'DisplayInstalled', self.DisplayInstalled.get_active())
		self.config.set('Display', 'DisplayUninstalled', self.DisplayUninstalled.get_active())
		self.config.set('SynApps', 'AppsPath', self.AppsPathEntry.get_text())
		
		childiter = self.ListStoreSources.get_iter_first()
		config = ConfigParser.RawConfigParser()
		while childiter != None:
			config.add_section(self.ListStoreSources[self.ListStoreSources.get_path(childiter)][1])
			config.set(self.ListStoreSources[self.ListStoreSources.get_path(childiter)][1], 'link', self.ListStoreSources[self.ListStoreSources.get_path(childiter)][2])
			config.set(self.ListStoreSources[self.ListStoreSources.get_path(childiter)][1], 'display', self.ListStoreSources[self.ListStoreSources.get_path(childiter)][0])
			childiter = self.ListStoreSources.iter_next(childiter)
		config.write(open('list/sources.list', 'wb'))
		self.main.on_BoutonActualiser_clicked()
		self.fenetre.destroy()
		
	def on_BoutonAnnuler_clicked(self, widget):
		self.fenetre.destroy()
