#!/usr/bin/env python

import commands
import gtk
import os
import sys

# Internationalization
import gtk.glade
gtk.glade.bindtextdomain("gtklocalesetup", "/usr/share/locale")
gtk.glade.textdomain("gtklocalesetup")

def availablelocales():
	locales=[]
	localeoutput = commands.getoutput('LANG=C locale -cva').splitlines()
	for i in localeoutput:
		newlocale = False
		if i.startswith('locale:'):
			if 'utf8' in i:
				localecode = i.replace('locale:','').lstrip().partition('directory:')[0].rstrip()
				utf8locale = True
			else:
				utf8locale = False
		elif 'title |' in i:
			if utf8locale == True:
				localedesc = i.lstrip().replace('title | ', '')
				newlocale = True
		if newlocale == True:
			locales.append([localedesc, localecode])
		locales.sort()
	return locales

def currentlocale():
	localeoutput = commands.getoutput("locale").splitlines()
	for i in localeoutput:
		if i.startswith('LANG='):
			locale = i.replace('LANG=', '')
	if 'utf8' not in locale:
		if locale == 'C':
			locale = 'en_US'
		locale = locale+'.utf8'
	return locale

def setlocale(locale):
	os.system('localesetup '+locale)

class GTKLocaleSetup:
	def on_button_ok_clicked(self, widget, data=None):
		selectedlocale = self.localelist.get_selection()
		self.localeliststore, iter = selectedlocale.get_selected()
		setlocale(self.localeliststore.get_value(iter, 1))
		gtk.main_quit()

	def on_button_cancel_clicked(self, widget, data=None):
		gtk.main_quit()
	
	def gtk_main_quit(self, widget, data=None):
		gtk.main_quit()
	
	def __init__(self):
		builder = gtk.Builder()
		if os.path.exists('gtklocalesetup.glade'):
			builder.add_from_file('gtklocalesetup.glade')
		elif os.path.exists('/usr/share/salixtools/gtklocalesetup/gtklocalesetup.glade'):
			builder.add_from_file('/usr/share/salixtools/gtklocalesetup/gtklocalesetup.glade')
		self.window = builder.get_object('gtklocalesetup')

		builder.connect_signals(self)
		self.localelist = builder.get_object('localelist')
		self.localeliststore = builder.get_object('localeliststore')
		self.localeliststore.clear()

		cursorpos = 0
		locale = currentlocale()
		for i in availablelocales():
			self.localeliststore.append(i)
			if i[1] == locale:
				self.localelist.set_cursor(cursorpos)
				if cursorpos > 5:
					self.localelist.scroll_to_cell(cursorpos-4)
			cursorpos += 1

if __name__ == "__main__":
	app = GTKLocaleSetup()
	app.window.show()
	gtk.main()
