def build_new_schematic():
    DT.clear()

    initialDirectory = root.initialDirectory
    if mainSchematicFile.components and csvFile.components:
        print(root.lastSchematicFileName)
        savePath = filedialog.asksaveasfilename(
            initialfile=root.lastSchematicFileName,
            filetypes=(("KiCAD Schematic File", ".sch"), ("All Files", ".*")))

        if savePath:
            if mainSchematicFile.ModifyNewSCHFile(0, csvFile, savePath):
                messagebox.showerror("File IO Error", ".SCH cannot be edited")
            else:
                statusLabel['text'] = str(
                    savePath) + " updated with new field values"
    else:
        if mainSchematicFile.components:
            messagebox.showerror("Processing Error", "No CSV File Loaded")
        elif csvFile.components:
            messagebox.showerror("Processing Error", "No SCH File Loaded")
        else:
            messagebox.showerror("Processing Error", "No Files Loaded")

    print("Summary for writing to schematic files: ")
    DT.summary()
def generate_csv():
	DT.clear()
	initialDirectory = root.initialDirectory
	if len(mainSchematicFile.components) > 0:
		root.path_to_save = filedialog.asksaveasfilename(initialdir = initialDirectory, filetypes = (("Comma seperated values", ".csv"),("All Files",".*")))
		root.initialDirectory = set_initial_directory(root.path_to_save)
		sort_parts()
		if mainSchematicFile.exportCsvFile(root.path_to_save):
			messagebox.showerror("File IOerror", "The file might still be opened")
		else:
			statusLabel['text'] = "Saved: " + str(root.path_to_save)
	else:
		messagebox.showerror("Cannot generate .CSV", "No SCH File loaded")
	DT.summary()
def load_csv():
	DT.clear()

	config = ConfigParser()
	config.read('config.ini')

	initialDirectory = config.get('main', 'lastDirectory', fallback="")

	#mainSchematicFile.printprops()
	if initialDirectory == "":
		root.filename = filedialog.askopenfilename(
			filetypes=(("KiCAD Partslist-editor files", ".csv"), ("All Files", ".*")))
	else:
		root.filename = filedialog.askopenfilename(initialdir=initialDirectory, filetypes=(
		("KiCAD Partslist-editor files", ".csv"), ("All Files", ".*")))

	filename = root.filename

	config.read('config.ini')
	if config.has_section('main') == FALSE:
		config.add_section('main')
	config.set('main', 'lastDirectory', os.path.dirname(filename))
	with open('config.ini', 'w') as f:
		config.write(f)

	
	if filename[-4:] == ".csv" or filename[-4:] == ".CSV":
		error = csvFile.extractCsvComponents(filename)
		if error:
			messagebox.showerror("Incorrect Fileformat", error)
		else:
			statusLabel['text'] = "Import: " + str(root.filename) + " complete" + "\n" +  str(len(csvFile.components)) + " components were imported"

		f.close()

	else:
		if filename:
			messagebox.showerror("FileParseError", "This is not a valid CSV document (*.csv or *.CSV)")

	print("Summary for importing from CSV: ")
	DT.summary()

	DT.info(str(len(csvFile.components)) + ' components were imported from CSV')
def load_schematic():
	DT.clear()
	globals.ParsedSchematicFiles = [] # clear this list.

	config = ConfigParser()
	config.read('config.ini')
    
	initialDirectory = config.get('main', 'lastDirectory', fallback="")

	if initialDirectory == "": 
		root.filename = filedialog.askopenfilename(filetypes = (("KiCAD Schematic Files",".sch"),("All Files", ".*")))
	else:
		root.filename = filedialog.askopenfilename(initialdir = initialDirectory, filetypes = (("KiCAD Schematic Files",".sch"),("All Files", ".*")))
	filename = root.filename
	root.lastSchematicFileName = filename


	config.read('config.ini')
	if config.has_section('main') == FALSE:
		config.add_section('main')
	config.set('main', 'lastDirectory', os.path.dirname(filename))
	with open('config.ini', 'w') as f:
		config.write(f)
		f.close()

	
	if filename[-4:] == ".sch" or filename[-4:] == ".SCH":
		try:
			f = open(filename)
		except IOError:
			DT.error("can\'t find file or read data")
		else:
			mainSchematicFile.setPath(filename)
			dataTestDump = f.readlines()[0]
			f.close()

		if dataTestDump[:-1] == "EESchema Schematic File Version 2" or dataTestDump[:-1] == "EESchema Schematic File Version 4": # support for KiCad4 and KiCad5
			# TODO 2: move the laoding of a schematic file into the Schematic class!
			# --> make use of recursive loading of schematics

			#verify it conforms to KiCAD specs
			if mainSchematicFile.components:
				mainSchematicFile.deleteContents()
			try:
				f = open(filename)
			except IOError:
				DT.error("can\'t find file or read data")
			else:
				mainSchematicFile.SetContents(f.readlines())
				mainSchematicFile.fieldList = fieldList;

				mainSchematicFile.schematicName = os.path.basename(filename)

				f.close()
				if mainSchematicFile.ParseComponents():
					if(len(mainSchematicFile.getSubCircuits()) != len(mainSchematicFile.getSubCircuitName())):
						messagebox.showerror("FileParseError", "Hierarchical schematics could not be found")
					else:
						messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document.")

		else:
			messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document.")

	else:
		if filename:
			messagebox.showerror("FileParseError", "This is not a valid KiCAD schematic document (*.sch or *.SCH)")


	for i in range (len(mainSchematicFile.components)):
		if "?" in mainSchematicFile.components[i].getReference():
			if messagebox.askyesno("Annotation Incomplete",
                    "The program is unable to process unanotated components. Do you want to clear imported data?"):
				mainSchematicFile.deleteContents()
			break
	root.initialDirectory = set_initial_directory(filename)

	if mainSchematicFile.schematicName:
		unlistedCount = 0
		for c in mainSchematicFile.components:
			if c.unlisted:
				unlistedCount += 1


		statusLabel['text'] = "Loaded schematic: " + mainSchematicFile.schematicName + "\n" +\
							  str(len(mainSchematicFile.components) - unlistedCount ) +\
							  " + " + str(unlistedCount) + " hidden components were found"
	else:
		statusLabel['text'] = "Start by loading a KiCad schematic file..."

	print("Summary of loading schematic: ")
	DT.summary()