#!/usr/bin/python
# -*- coding: iso-8859-1 -*

"""
convert_drkeys.py
Convert key codes of DrPython Shortcuts
Antonio Barbosa 29 Dec 2006

I must be run twice:
In first run, creates a file with �old� keycodes
In the second run, creates another file with �new� keycodes.
And then prompts for conversion of each shortcuts file of DrPython.

It should be wise to make backups of those files :)

"""


import os
import wxversion
import re
fname1="keys_2.6.txt"
fname2="keys_2.8.txt"
Dict1={}
Dict2={}

drFiles=["shortcuts.dat","stcshortcuts.dat","drscript.shortcuts.dat"]
userpreferencesdirectory = os.environ["APPDATA"].replace("\\", "/") +'/drpython/'


def convert(filename):
	print 'Converting: ',filename
	text='#version=%s\n' %wx.VERSION_STRING
	f = open(userpreferencesdirectory +filename, 'rb')
	line = f.readline()
	if line.find("version")>0:
		print '------> allready converted!'
		f.close()
		return
	while len(line) > 0:
		p0 = line.find("<keycode>")
		p1 = line.find("</keycode>")
		if p0>=0 and p1>p0:
			s0=line[:p0+len("<keycode>")]
			s1=line[p1:]
			key=line[p0+len("<keycode>"):p1]
			if len(key):
				#a=int(key)
				if Dict1.has_key(key):
					a=Dict1[key]
					key=Dict2[a]
			text+=s0+key+s1
		else:
			text+=line
		line = f.readline()
	f.close()
	f = open(userpreferencesdirectory +filename, 'w')
	f.write(text)
	f.close()
	print 'ok'
	
	
def save_key_codes(fname):
	print 'saving ',fname
	fragment = "WXK_"
	f=open (fname,'w')
	for elem in dir(wx):
		if elem.isupper() and fragment in elem:
			#print elem,eval('wx.'+elem)
			f.write( '%s\t%s\n' %(elem,eval('wx.'+elem)))
	f.close()



#---------------------------------

if os.path.exists(fname1)==False: #first run
	wxversion.select("2.6")
	import wx
	save_key_codes(fname1)
	print "please run this script again..."
else:                              #second run
	wxversion.select("2.8")
	import wx
	save_key_codes(fname2)
	#Creating dicts:
	f1 = open(fname1, 'r')
	for line in f1:
		s=line.strip().split('\t')
		Dict1[s[1]]=s[0] #Value:Name
	f1.close()
	f2 = open(fname2, 'r')
	for line in f2:
		s=line.strip().split('\t')
		Dict2[s[0]]=s[1] #Name:Value
	f2.close()
	#And finally, converting shortcuts files
	for file in drFiles:
		print "Process %s? (y/n)" %file,
		s=raw_input()
		if s=='y':
			convert(file)
