From 39fecda9f1be8b1007552437d53c06bdc02f4b47 Mon Sep 17 00:00:00 2001 From: Tanay Mathur Date: Tue, 23 Jun 2015 11:50:52 +0530 Subject: Added subcircuit functionality --- src/subcircuit/Subcircuit.py | 62 ++++++++++++++++++++++++++++++++++++++++++ src/subcircuit/__init__.py | 0 src/subcircuit/convertSub.py | 45 ++++++++++++++++++++++++++++++ src/subcircuit/newSub.py | 65 ++++++++++++++++++++++++++++++++++++++++++++ src/subcircuit/openSub.py | 24 ++++++++++++++++ 5 files changed, 196 insertions(+) create mode 100644 src/subcircuit/Subcircuit.py create mode 100644 src/subcircuit/__init__.py create mode 100644 src/subcircuit/convertSub.py create mode 100644 src/subcircuit/newSub.py create mode 100644 src/subcircuit/openSub.py (limited to 'src/subcircuit') diff --git a/src/subcircuit/Subcircuit.py b/src/subcircuit/Subcircuit.py new file mode 100644 index 00000000..94ca37e4 --- /dev/null +++ b/src/subcircuit/Subcircuit.py @@ -0,0 +1,62 @@ +from PyQt4 import QtCore, QtGui +from configuration.Appconfig import Appconfig +from projManagement.Validation import Validation +from subcircuit.newSub import NewSub +from subcircuit.openSub import openSub +from subcircuit.convertSub import convertSub + +class Subcircuit(QtGui.QWidget): + """ + This class creates Subcircuit GUI. + """ + def __init__(self,parent=None): + super(Subcircuit, self).__init__() + QtGui.QWidget.__init__(self) + self.obj_appconfig=Appconfig() + self.obj_validation=Validation() + + self.layout = QtGui.QVBoxLayout() + self.splitter= QtGui.QSplitter() + self.splitter.setOrientation(QtCore.Qt.Vertical) + + self.newbtn = QtGui.QPushButton('New Subcircuit Schematic') + self.newbtn.setFixedSize(200,40) + self.newbtn.clicked.connect(self.newsch) + self.editbtn = QtGui.QPushButton('Edit Subcircuit Schematic') + self.editbtn.setFixedSize(200,40) + self.editbtn.clicked.connect(self.editsch) + self.convertbtn = QtGui.QPushButton('Convert Kicad to Ngspice') + self.convertbtn.setFixedSize(200,40) + self.convertbtn.clicked.connect(self.convertsch) + + self.hbox = QtGui.QHBoxLayout() + self.hbox.addWidget(self.newbtn) + self.hbox.addWidget(self.editbtn) + self.hbox.addWidget(self.convertbtn) + self.hbox.addStretch(1) + + self.vbox = QtGui.QVBoxLayout() + self.vbox.addLayout(self.hbox) + self.vbox.addStretch(1) + + self.setLayout(self.vbox) + self.show() + + def newsch(self): + text,ok = QtGui.QInputDialog.getText(self, 'New Schematic','Enter Schematic Name:') + if ok: + self.schematic_name = (str(text)) + self.subcircuit = NewSub() + self.subcircuit.createSubcircuit(self.schematic_name) + + else: + print "No subcircuit created" + + + def editsch(self): + self.obj_opensubcircuit = openSub() + self.obj_opensubcircuit.body() + + def convertsch(self): + self.obj_convertsubcircuit = convertSub() + self.obj_convertsubcircuit.createSub() \ No newline at end of file diff --git a/src/subcircuit/__init__.py b/src/subcircuit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/subcircuit/convertSub.py b/src/subcircuit/convertSub.py new file mode 100644 index 00000000..bb045e3b --- /dev/null +++ b/src/subcircuit/convertSub.py @@ -0,0 +1,45 @@ +from PyQt4 import QtGui,QtCore +from projManagement.Validation import Validation +from projManagement import Worker +from configuration.Appconfig import Appconfig +import os + +class convertSub(QtGui.QWidget): + """ + This class is called when User create new Project. + """ + + def __init__(self): + super(convertSub, self).__init__() + self.obj_validation = Validation() + self.obj_appconfig=Appconfig() + + def createSub(self): + """ + This function create command to call kicad to Ngspice converter. + """ + print "Open Kicad to Ngspice Conversion" + self.projDir = self.obj_appconfig.current_subcircuit["SubcircuitName"] + #Validating if current project is available or not + if self.obj_validation.validateKicad(self.projDir): + #print "Project is present" + #Checking if project has .cir file or not + if self.obj_validation.validateCir(self.projDir): + #print "CIR file present" + self.projName = os.path.basename(self.projDir) + self.project = os.path.join(self.projDir,self.projName) + + #Creating a command to run + self.cmd = "python ../kicadtoNgspice/KicadtoNgspice.py "+self.project+".cir "+"sub" + os.system(self.cmd) +# self.obj_workThread = Worker.WorkerThread(self.cmd) +# self.obj_workThread.start() + else: + self.msg = QtGui.QErrorMessage(None) + self.msg.showMessage('The subcircuit does not contain any Kicad netlist file for conversion.') + self.msg.setWindowTitle("Error Message") + + else: + self.msg = QtGui.QErrorMessage(None) + self.msg.showMessage('Please select the subcircuit first. You can either create new subcircuit or open existing subcircuit') + self.msg.setWindowTitle("Error Message") \ No newline at end of file diff --git a/src/subcircuit/newSub.py b/src/subcircuit/newSub.py new file mode 100644 index 00000000..7ea247ab --- /dev/null +++ b/src/subcircuit/newSub.py @@ -0,0 +1,65 @@ +from PyQt4 import QtGui,QtCore +from projManagement.Validation import Validation +from configuration.Appconfig import Appconfig +from projManagement import Worker +import os + +class NewSub(QtGui.QWidget): + """ + This class is called when User create new Project. + """ + + def __init__(self): + super(NewSub, self).__init__() + self.obj_validation = Validation() + self.obj_appconfig = Appconfig() + + + def createSubcircuit(self,subName): + """ + This function create Subcircuit related directories and files + """ + self.create_schematic = subName + #Checking if Workspace already exist or not + self.schematic_path = (os.path.join(os.path.abspath('..'),'SubcircuitLibrary',self.create_schematic)) + + #Validation for new subcircuit + if self.schematic_path == "": + self.reply = "NONE" + else: + self.reply = self.obj_validation.validateNewproj(str(self.schematic_path)) + + #Checking Validations Response + if self.reply == "VALID": + print "Validated : Creating subcircuit directory" + try: + os.mkdir(self.schematic_path) + self.schematic = os.path.join(self.schematic_path,self.create_schematic) + self.cmd = "eeschema "+self.schematic+".sch" + self.obj_workThread = Worker.WorkerThread(self.cmd) + self.obj_workThread.start() + self.close() + except: + #print "Some Thing Went Wrong" + self.msg = QtGui.QErrorMessage(self) + self.msg.showMessage('Unable to create subcircuit. Please make sure you have write permission on '+self.schematic_path) + self.msg.setWindowTitle("Error Message") + + self.obj_appconfig.current_subcircuit['SubcircuitName'] = self.schematic_path + + elif self.reply == "CHECKEXIST": + #print "Project already exist" + self.msg = QtGui.QErrorMessage(self) + self.msg.showMessage('The subcircuit "'+self.create_schematic+'" already exist.Please select the different name or delete existing subcircuit') + self.msg.setWindowTitle("Error Message") + + elif self.reply == "CHECKNAME": + #print "Name is not proper" + self.msg = QtGui.QErrorMessage(self) + self.msg.showMessage('The subcircuit name should not contain space between them') + self.msg.setWindowTitle("Error Message") + + elif self.reply == "NONE": + self.msg = QtGui.QErrorMessage(self) + self.msg.showMessage('The subcircuit name cannot be empty') + self.msg.setWindowTitle("Error Message") \ No newline at end of file diff --git a/src/subcircuit/openSub.py b/src/subcircuit/openSub.py new file mode 100644 index 00000000..fb349f0a --- /dev/null +++ b/src/subcircuit/openSub.py @@ -0,0 +1,24 @@ +from PyQt4 import QtGui +from configuration.Appconfig import Appconfig +from projManagement.Worker import WorkerThread +import os + + +class openSub(QtGui.QWidget): + """ + This class is called when User click on Open Project Button + """ + def __init__(self): + super(openSub, self).__init__() + self.obj_appconfig = Appconfig() + + def body(self): + self.editfile = str(QtGui.QFileDialog.getExistingDirectory(None,"Open File","../SubcircuitLibrary")) + if self.editfile: + self.obj_Appconfig = Appconfig() + self.obj_Appconfig.current_subcircuit['SubcircuitName'] = self.editfile + self.schname = os.path.basename(self.editfile) + self.editfile = os.path.join(self.editfile,self.schname) + self.cmd = "eeschema "+self.editfile+".sch " + self.obj_workThread = WorkerThread(self.cmd) + self.obj_workThread.start() \ No newline at end of file -- cgit