summaryrefslogtreecommitdiff
path: root/OSCAD/forntEnd/newProject.py
diff options
context:
space:
mode:
authorJayaram Pai2014-05-19 11:02:57 +0530
committerJayaram Pai2014-05-19 11:02:57 +0530
commit8377256e7d90aa7ba1cb51f6164e99f81e2eb53c (patch)
tree5afcc8e82d7f7d4f6fbff900520bd8f05eb343ca /OSCAD/forntEnd/newProject.py
downloadFreeEDA-8377256e7d90aa7ba1cb51f6164e99f81e2eb53c.tar.gz
FreeEDA-8377256e7d90aa7ba1cb51f6164e99f81e2eb53c.tar.bz2
FreeEDA-8377256e7d90aa7ba1cb51f6164e99f81e2eb53c.zip
initial commit
Diffstat (limited to 'OSCAD/forntEnd/newProject.py')
-rw-r--r--OSCAD/forntEnd/newProject.py352
1 files changed, 352 insertions, 0 deletions
diff --git a/OSCAD/forntEnd/newProject.py b/OSCAD/forntEnd/newProject.py
new file mode 100644
index 0000000..0f24201
--- /dev/null
+++ b/OSCAD/forntEnd/newProject.py
@@ -0,0 +1,352 @@
+#!/usr/bin/python
+# newProject.py is a python script to create a new project. It is developed for OSCAD software. It is written by Yogesh Dilip Save (yogessave@gmail.com).
+# Copyright (C) 2012 Yogesh Dilip Save, FOSS Project, IIT Bombay.
+# This program 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.
+
+
+from setPath import OSCAD_HOME
+from Tkinter import *
+import thread
+import ttk
+import sys
+import subprocess, time
+import template
+import tkMessageBox
+import os.path
+import os
+import toolTip
+import selectOption
+from string import maketrans
+from PIL import Image, ImageTk
+
+
+
+class ProjectInfo(template.MyTemplate):
+ """ Class for accept model information from user """
+ def body(self, master):
+ # Ask for project name
+ try:
+ Label(master, text="Enter Project name:").grid(row=0)
+ self.e1 = Entry(master)
+ self.e1.grid(row=0, column=1,pady=10,columnspan=2)
+ except:
+ print "error"
+# Collect project information
+ def apply(self):
+ """ a method for writing project information to the file"""
+ self.text.insert(END, "Creating new project " + self.projectName+" ...... \n")
+ self.text.yview(END)
+ # Cerate directory for the project
+ try:
+ os.mkdir(self.projectName)
+ except:
+ tkMessageBox.showwarning("Error","Directory already exists")
+ self.text.insert(END, " The project directory "+self.projectName+"has been created.\n")
+ self.text.yview(END)
+ os.chdir(self.projectName)
+ self.text.insert(END, " Entered into the project directory "+self.projectName+"\n")
+ self.text.yview(END)
+ # Create model file for writing
+ try:
+ f = open(self.projectName+".proj","w")
+ except :
+ tkMessageBox.showwarning("Error","Project information file can not be wriiten. please check the file system permission")
+ return 0
+ f.write("schematicFile " + self.projectName+".sch\n")
+ f.close()
+ self.text.insert(END, "Successfully Created new project " + self.projectName+". \n")
+ self.text.yview(END)
+ return 1
+
+# Validate the model information
+ def validate(self):
+ # Remove trailing and leading spaces from modelName
+ self.projectName=self.e1.get().strip()
+ if len(self.projectName):
+ if os.path.exists(self.projectName+".proj"):
+ tkMessageBox.showwarning("Bad input","Project already exists, please try again")
+ return 0
+ return 1
+ else:
+ tkMessageBox.showwarning("Bad input","Project Name is not specified, please try again")
+ return 0
+
+class ProjectParam(template.MyTemplate):
+ """Class for specifying parameter of the model"""
+ def __init__(self,parent,text,name):
+ # Collect model information
+ self.projectName=name
+ try:
+ self.OSCAD_HOME=OSCAD_HOME
+ except NameError:
+ try:
+ self.OSCAD_HOME=os.environ["OSCAD_HOME"]
+ except KeyError:
+ tkMessageBox.showerror("Error OSCAD_HOME is not set","Please set OSCAD_HOME variable in .bashrc\n\nStep to set OSCAD_HOME variable:\n 1) Open ~/.bashrc using text editor (vi ~/.bash).\n 2) Add the line \"Export OSCAD_HOME=<path_of_oscad>\" to it.\n 3) source ~/.bashrc")
+ exit(0)
+
+ # Call base class MyTemplate
+ template.MyTemplate.__init__(self,parent,text,name, buttonbox=False)
+
+ def body(self, master):
+ w, h = master.winfo_screenwidth(), master.winfo_screenheight()
+ self.geometry("%dx%d" % (0.075*w, 0.6*h))
+ self.resizable(0,0)
+ self.attributes("-topmost",True)
+
+ # Create and configure a menu
+ """menu = Menu(self)
+ self.config(menu=menu)
+
+ # Create File menu
+ toolmenu= Menu(menu)
+ menu.add_cascade(label="Tool", menu=toolmenu)
+ toolmenu.add_command(label="Schematic Editor F2", command=self.openSchematic)
+ toolmenu.add_separator()
+ toolmenu.add_command(label="Footprint Editor F3", command=self.openFootprint)
+ toolmenu.add_command(label="Layout Editor F4", command=self.openLayout)
+ toolmenu.add_separator()
+ toolmenu.add_command(label="Analysis Insertor F5", command=self.openAnalysisInserter)
+ toolmenu.add_command(label="Model builder F6", command=self.openModelBuilder)
+ toolmenu.add_command(label="Subcircuit builder F7", command=self.openSubcircuitBuilder)
+ toolmenu.add_separator()
+ toolmenu.add_command(label="NetList Converter F8", command=self.openNetConverter)
+ toolmenu.add_separator()
+ toolmenu.add_command(label="Ngspice F9", command=self.openNgspice)
+ toolmenu.add_command(label="SMCSim F10", command=self.openSMCSim)
+ toolmenu.add_separator()
+ toolmenu.add_command(label="Exit F11", command=self.exitProject)
+
+ # Create help menu
+ helpmenu=Menu(menu)
+ menu.add_cascade(label="Help", menu=helpmenu)
+ helpmenu.add_command(label="Help F1",command=self.helpProject)
+ helpmenu.add_command(label="About...",command=self.aboutProjectManager)
+
+
+
+ self.mainWindow = LabelFrame(self, bd=4, relief=SUNKEN,text="Tool Window",bg="lightblue")
+ self.mainWindow.pack(side=TOP,fill="both", padx=5, pady=5, expand="Y")
+ self.mainWindow.place(relheight=0.85, relwidth=0.99)"""
+
+ # Set frame for command buttons
+ buttonWindow = Frame(self, bd=4, relief=SUNKEN)
+ buttonWindow.pack(side=LEFT,fill="both", padx=2, pady=2,expand="Y")
+ buttonWindow.place(relheight=0.95, relwidth=0.87, rely=0.02, relx=0.07)
+
+ """buttonWindow1 = Frame(self, bd=4, relief=SUNKEN)
+ buttonWindow1.pack(side=TOP,fill="both", padx=2, pady=2,expand="Y")
+ buttonWindow1.place(relheight=0.9, relwidth=0.25, rely=0.02, relx=0.37)
+
+ buttonWindow2 = Frame(self, bd=4, relief=SUNKEN)
+ buttonWindow2.pack(side=BOTTOM,fill="both", padx=2, pady=2,expand="Y")
+ buttonWindow2.place(relheight=0.9, relwidth=0.25, rely=0.02, relx=0.67)"""
+
+ def createToolboxWithScilab():
+ self.createButtonForCommandWithScilab(buttonWindow,self.openSchematic,self.OSCAD_HOME+"/images/se.png","Schematic Editor")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openAnalysisInserter,self.OSCAD_HOME+"/images/an.png","Analysis Insertor")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openNetConverter,self.OSCAD_HOME+"/images/kn.png","NetList Converter")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openNgspice,self.OSCAD_HOME+"/images/ng.png","Ngspice")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openFootprint,self.OSCAD_HOME+"/images/fp.png","Footprint Editor")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openLayout,self.OSCAD_HOME+"/images/lout.png","Layout Editor")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openSMCSim,self.OSCAD_HOME+"/images/sci.png","SMCSim")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openModelBuilder,self.OSCAD_HOME+"/images/mb.png","Model builder")
+ self.createButtonForCommandWithScilab(buttonWindow,self.openSubcircuitBuilder,self.OSCAD_HOME+"/images/sub.png","Subcircuit builder")
+
+ def createToolboxWithoutScilab():
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openSchematic,self.OSCAD_HOME+"/images/se.png","Schematic Editor")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openAnalysisInserter,self.OSCAD_HOME+"/images/an.png","Analysis Insertor")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openNetConverter,self.OSCAD_HOME+"/images/kn.png","NetList Converter")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openNgspice,self.OSCAD_HOME+"/images/ng.png","Ngspice")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openFootprint,self.OSCAD_HOME+"/images/fp.png","Footprint Editor")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openLayout,self.OSCAD_HOME+"/images/lout.png","Layout Editor")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openModelBuilder,self.OSCAD_HOME+"/images/mb.png","Model builder")
+ self.createButtonForCommandWithoutScilab(buttonWindow,self.openSubcircuitBuilder,self.OSCAD_HOME+"/images/sub.png","Subcircuit builder")
+
+ if os.path.isfile(OSCAD_HOME + "/bin/scilab54"):
+ createToolboxWithScilab()
+ else:
+ createToolboxWithoutScilab()
+
+ # Protocol for deletion of main window
+ self.protocol("WM_DELETE_WINDOW",self.exitProject)
+
+ # Create shortcut keys
+ """self.bind("<F2>", self.openSchematic)
+ self.bind("<F3>", self.openFootprint)
+ self.bind("<F4>", self.openLayout)
+ self.bind("<F5>", self.openAnalysisInserter)
+ self.bind("<F6>", self.openModelBuilder)
+ self.bind("<F7>", self.openSubcircuitBuilder)
+ self.bind("<F8>", self.openNetConverter)
+ self.bind("<F9>", self.openNgspice)
+ self.bind("<F10>",self.openSMCSim)
+ self.bind("<F11>",self.exitProject)
+ self.bind("<F1>", self.helpProject)
+ self.focus_set()"""
+
+ def createButtonForCommandWithScilab(self,frameName,commandName,imagePath,textlabel):
+ # Open images
+ im = Image.open(imagePath)
+ photo = ImageTk.PhotoImage(im)
+
+ # Create button and set label for tools
+ w = Button(frameName, image=photo, width=45, height=30, command=commandName, default=ACTIVE)
+ w.image=photo
+ w.pack(side=TOP, padx=1, pady=1)
+ toolTip.createToolTip(w,textlabel)
+
+ def createButtonForCommandWithoutScilab(self,frameName,commandName,imagePath,textlabel):
+ # Open images
+ im = Image.open(imagePath)
+ photo = ImageTk.PhotoImage(im)
+
+ # Create button and set label for tools
+ w = Button(frameName, image=photo, width=45, height=35, command=commandName, default=ACTIVE)
+ w.image=photo
+ w.pack(side=TOP, padx=1, pady=1)
+ toolTip.createToolTip(w,textlabel)
+
+ def call_system(self,command):
+ os.system(command)
+
+ def openSchematic(self,e=None):
+ self.text.insert(END, " Opening schematic editor .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="eeschema "+self.projectName+".sch "
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openFootprint(self,e=None):
+ self.text.insert(END, " Opening footprint editor .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="cvpcb "+self.projectName+".net "
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openLayout(self,e=None):
+ self.text.insert(END, " Opening layout editor .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="pcbnew "+self.projectName+".net "
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openNetConverter(self,e=None):
+ self.text.insert(END, " Running netlist converter .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="xterm -e \""+self.OSCAD_HOME+"/kicadtoNgspice/KicadtoNgspice.py "+self.projectName+".cir 1\""
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openAnalysisInserter(self,e=None):
+ self.text.insert(END, " Opening analysis inserter .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command=self.OSCAD_HOME+"/analysisInserter/convertgui.py"
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openModelBuilder(self,e=None):
+ self.text.insert(END, " Opening model editor .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="xterm -e \""+self.OSCAD_HOME+"/modelEditor/modelEditor.py " +self.projectName+".cir 1\""
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openSubcircuitBuilder(self,e=None):
+ self.text.insert(END, " Opening Sub-circuit editor ................\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command=self.OSCAD_HOME+"/subcktEditor/subcktEditor.py " +self.projectName+".cir "
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openNgspice(self,e=None):
+ self.text.insert(END, " Running ngspice circuit simulator .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ command="xterm -e \"ngspice "+self.projectName+".cir.out \""
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def openSMCSim(self,e=None):
+ self.text.insert(END, " Running scilab based circuit simulator .........\n")
+ self.text.yview(END)
+ # Call all pending idle tasks, without processing any other events.
+ self.update_idletasks()
+ Option=selectOption.SelectOption(self,self.text,"LPCSim")
+ command=self.OSCAD_HOME+"/bin/scilab54 -f " +self.OSCAD_HOME+"/LPCSim/LPCSim/Main.sci -args "+self.projectName+".cir.ckt "
+ try:
+ thread.start_new_thread(self.call_system,(command,))
+ except Exception,err:
+ print err
+ self.text.insert(END, "Select a tool from tool menu\n")
+ self.text.yview(END)
+
+ def helpProject(self,e=None):
+ pass
+
+# Display help content
+ def aboutProjectManager(self,e=None):
+ tkMessageBox.showinfo("About Project Manager","Created by Yogesh Dilip Save")
+
+# Exit an Project Manager
+ def exitProject(self):
+ if tkMessageBox.askokcancel("QUIT","Do you really wish to quit?"):
+ self.destroy()
+
+ def apply(self):
+ pass
+
+if __name__=='__main__':
+ root = Tk()
+ project= ProjectInfo(root)
+ projectParam = ProjectParam(root,project.modelName,project.modelType)
+ mainloop()