#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
import logging

from PySide2 import QtGui, QtCore, QtWidgets

from ptable import ptable

class PTable(QtWidgets.QWidget):
	
	def __init__(self):
		super(PTable, self).__init__()
		self.ptable = ptable
		self.initUI()
		#logging
		self.logger = logging.getLogger()
		
	def initUI(self):
		grid = QtWidgets.QGridLayout()
		#Create actions dictionary and group dictionary
		self.atomActionGroup = QtWidgets.QActionGroup(self, exclusive=True)
		self.atomActions = {}								   
		#for atomname in self.editor.atomtypes.keys(): Gives unsorted list
		for key in self.ptable.keys():
			atomname = self.ptable[key]["Symbol"]
			action = QtWidgets.QAction( '%s'%atomname,
								   self, 
								   statusTip="Set atomtype to %s"%atomname,
								   triggered=self.atomtypePush, objectName=atomname,
								   checkable=True)
			self.atomActionGroup.addAction(action)
			self.atomActions[atomname] = action
			if action.objectName() == "C":
				action.setChecked(True)		
		
			button = QtWidgets.QToolButton()
			button.setDefaultAction(action)
			button.setFocusPolicy(QtCore.Qt.NoFocus)
			button.setMaximumWidth(40)
			
			if self.ptable[key]["Group"] != None:
				grid.addWidget(button, self.ptable[key]["Period"], self.ptable[key]["Group"])
			else:
				if key <72:
					grid.addWidget(button, 9, key-54)
				else:
					grid.addWidget(button, 10, key-86)
		#Ensure spacing between main table and actinides/lathanides			
		grid.addWidget(QtWidgets.QLabel(''), 8,1)

		self.setLayout(grid)   
		
		self.move(300, 150)
		self.setWindowTitle('Periodic Table')
		
	atomtypeChanged = QtCore.Signal( str, name="atomtypeChanged")
	def atomtypePush(self):
		sender = self.sender()
		self.atomtypeChanged.emit(sender.objectName())

	#For setting the new atomtype		
	def selectAtomtype(self, atomname):
		if atomname in self.atomActions.keys():
			self.atomActions[atomname].setChecked(True)
		else:
			self.debug.error("Unknown atomtype or key error: %s"%atomname)
				
		
def main():
	app = QtWidgets.QApplication(sys.argv)
	pt = PTable()
	pt.selectAtomtype("N")
	pt.show()
	sys.exit(app.exec_())


if __name__ == '__main__':
	main()