#	Programmer:	Daniel Pozmanter
#	E-mail:		drpython@bluebottle.com
#	Note:		You must reply to the verification e-mail to get through.
#
#	Copyright 2003-2005 Daniel Pozmanter
#
#	Distributed under the terms of the GPL (GNU Public License)
#
#	DrPython 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.
#
#	This program 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
	
#Open Imported Module Dialog

import os, os.path, sys, keyword
import wx
from drSingleChoiceDialog import drSingleChoiceDialog

#*******************************************************************************************************
#Utility Functions for parsing import strings,
#and getting the path for each module.

def GetModulePath(filepath, selmodule, platformiswin):
	moduletext = selmodule
	#Special Cases:
	if selmodule == 'os.path':
		if platformiswin:
			selmodule = 'ntpath'
		elif os.name == 'mac':
			selmodule = 'macpath'
		else:
			selmodule = 'posixpath'
			
	selectedmodule = '/' + selmodule.replace('.', '/') + '.py'
	#Handle cases like 'import wx' == import 'wx.__init__'
	selectedinitmodule = '/' + selmodule.replace('.', '/') + '/__init__.py'
	
	if os.path.exists(filepath + selectedmodule):
		return moduletext, (filepath + selectedmodule)
	if os.path.exists(filepath + selectedinitmodule):
		return moduletext, (filepath + selectedinitmodule)
	
	#Search for the file:
	for somepath in sys.path:				
		modulefile = somepath.replace('\\', '/') + selectedmodule
		initfile = somepath.replace('\\', '/') + selectedinitmodule
		if os.path.exists(modulefile):
			return moduletext, modulefile
		elif os.path.exists(initfile):
			return moduletext, initfile
						
	return moduletext, None

def ParseImportStatement(matches):
	targetarray = map(lambda x: x.strip().split(), matches)
	results = []
	for item in targetarray:							
		x = 0
		isfrom = (item[0] == 'from')
		l = len(item)
		while x < l:
			if item[x].find(',') > -1:
				y = item.pop(x)
				ya = y.split(',')
				ly = len(ya)
				counter = 0
				while counter < ly:
					if len(ya[counter]) < 1:
						ya.pop(counter)
						ly -= 1
					else:
						counter += 1
				item.extend(ya)
				l = l + len(ya) - 1
			elif item[x] == 'as':
				item.pop(x)
				try:
					item.pop(x)
					l -= 2
				except:
					l -= 1
			elif item[x] == '*':
				item.pop(x)
				l -= 1
			elif item[x] in keyword.kwlist:
				item.pop(x)
				l -= 1
			else:
				if (x > 0) and isfrom:
					a = item.pop(x)
					item.insert(x, item[0] + '.' + a)
				x += 1
		results.append(item)
	return results


#*******************************************************************************************************

class drOpenImportedModuleDialog(drSingleChoiceDialog):
	def __init__(self, parent, modulelist, point=wx.DefaultPosition, size=(250, 300)):
		drSingleChoiceDialog.__init__(self, parent, "Open Imported Module", modulelist, point, size)
		
		#Why is this needed?  Who knows.  But it is.
		self.Move(point)
		
		self.Bind(wx.EVT_CLOSE, self.OnCloseW)
		
		self.parent.LoadDialogSizeAndPosition(self, 'openimportedmoduledialog.sizeandposition.dat')
	
	def GetSelectedModule(self):
		return self.GetStringSelection()

	def OnbtnCancel(self, event):
		self.OnCloseW(None)
		drSingleChoiceDialog.OnbtnCancel(self, event)
	
	def OnbtnOk(self, event):		
		self.OnCloseW(None)
		drSingleChoiceDialog.OnbtnOk(self, event)
	
	def OnCloseW(self, event):
		self.parent.SaveDialogSizeAndPosition(self, 'openimportedmoduledialog.sizeandposition.dat')
		if event is not None:
			event.Skip()


syntax highlighted by Code2HTML, v. 0.9.1