- using namespace std;
- '''
-
- extern_var = []
- for i, item in enumerate(self.input_port + self.output_port):
- extern_var.append('''
- extern "C" int temp_''' + item.split(':')[0] + '''[1024];
- extern "C" int port_''' + item.split(':')[0] + ''';''')
-
- extern_var.append('''
- extern "C" int foo''' + self.fname.split('.')[0] + '''(int,int);
- ''')
- convert_func = '''
- void int2arr''' + self.fname.split('.')[0] + '''(int num, int array[], int n)
- {
- for (int i = 0; i < n && num>=0; i++)
- {
- array[n-i-1] = num % 2;
- num /= 2;
- }
- }
- int arr2int''' + self.fname.split('.')[0] + '''(int array[],int n)
- {
- int i,k=0;
- for (i = 0; i < n; i++)
- k = 2 * k + array[i];
- return k;
- }
- '''
- foo_func = '''
- int foo''' + self.fname.split('.')[0] + '''(int init,int count)
- {
- static VerilatedContext* contextp = new VerilatedContext;
- static V''' + self.fname.split('.')[0] + "* " + self.fname.split('.')[0] + '''[1024];
- count--;
- if (init==0)
- {
- ''' + self.fname.split('.')[0] + '''[count]=new V''' + self.fname.split('.')[0] + '''{contextp};
- contextp->traceEverOn(true);
- }
- else
- {
- contextp->timeInc(1);
- printf("=============''' + self.fname.split('.')[0] + ''' : New Iteration===========");
- printf("\\nInstance : %d\\n",count);
- printf("\\nInside foo before eval.....\\n");
-'''
-
- before_eval = []
- after_eval = []
- for i, item in enumerate(self.input_port + self.output_port):
- before_eval.append(
- '''\t\t\t\tprintf("''' +
- item.split(':')[0] +
- '''=%d\\n", ''' +
- self.fname.split('.')[0] +
- '''[count] ->''' +
- item.split(':')[0] +
- ''');\n''')
- for i, item in enumerate(self.input_port):
-
- before_eval.append(
- '''\t\t\t\t''' +
- self.fname.split('.')[0] +
- '''[count]->''' +
- item.split(':')[0] +
- ''' = arr2int''' +
- self.fname.split('.')[0] +
- '''(temp_''' +
- item.split(':')[0] +
- ", port_" +
- item.split(':')[0] +
- ''');\n''')
- before_eval.append(
- "\t\t\t\t" +
- self.fname.split('.')[0] +
- "[count]->eval();\n")
-
- after_eval.append('''
- printf("\\nInside foo after eval.....\\n");\n''')
- for i, item in enumerate(self.input_port + self.output_port):
- after_eval.append(
- '''\t\t\t\tprintf("''' +
- item.split(':')[0] +
- '''=%d\\n", ''' +
- self.fname.split('.')[0] +
- '''[count] ->''' +
- item.split(':')[0] +
- ''');\n''')
-
- for i, item in enumerate(self.output_port):
- after_eval.append(
- "\t\t\t\tint2arr" +
- self.fname.split('.')[0] +
- "(" +
- self.fname.split('.')[0] +
- '''[count] -> ''' +
- item.split(':')[0] +
- ''', temp_''' +
- item.split(':')[0] +
- ''', port_''' +
- item.split(':')[0] +
- ''');\n''')
- after_eval.append('''
- }
- return 0;
- }''')
-
- csim.write(comment)
- csim.write(header)
- for item in extern_var:
- csim.write(item)
- csim.write(convert_func)
- csim.write(foo_func)
-
- for item in before_eval:
- csim.write(item)
- for item in after_eval:
- csim.write(item)
- csim.close()
-
- # This function creates modpathlst in Ngspice folder
- def modpathlst(self):
- print("Editing modpath.lst file")
- mod = open(self.digital_home + '/modpath.lst', 'r')
- text = mod.read()
- mod.close()
- mod = open(self.digital_home + '/modpath.lst', 'a+')
- if not self.fname.split('.')[0] in text:
- mod.write(self.fname.split('.')[0] + "\n")
- mod.close()
-
- # This function is used to run the Verilator using the verilator commands
- def run_verilator(self):
- self.cur_dir = os.getcwd()
- file = open("../maker/lint_off.txt").readlines()
- wno = " "
- for item in file:
- wno += " -Wno-" + item.strip("\n")
- print("Running Verilator.............")
- os.chdir(self.modelpath)
- self.release_home = self.parser.get('NGSPICE', 'RELEASE')
- # print(self.modelpath)
-
- self.cmd = "verilator -Wall " + wno + "\
- --cc --exe --no-MMD --Mdir . -CFLAGS -fPIC sim_main_" + \
- self.fname.split('.')[0] + ".cpp " + self.fname
- self.process = QtCore.QProcess(self)
- self.process.readyReadStandardOutput.connect(self.readAllStandard)
- self.process.start('sh', ['-c', self.cmd])
- self.termtitle("RUN VERILATOR")
- self.termtext("Current Directory: " + self.modelpath)
- self.termtext("Command: " + self.cmd)
- # self.process.setProcessChannelMode(QtCore.QProcess.MergedChannels)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process \
- .readyReadStandardError.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
- print("Verilator Executed")
- os.chdir(self.cur_dir)
-
- # Running make verilator using this function
- def make_verilator(self):
- self.cur_dir = os.getcwd()
- print("Make Verilator.............")
- os.chdir(self.modelpath)
- self.cmd = "make -f V" + self.fname.split('.')[0]\
- + ".mk V" + self.fname.split(
- '.')[0] + "__ALL.a sim_main_" \
- + self.fname.split('.')[0] + ".o verilated.o"
- self.process = QtCore.QProcess(self)
- self.process.readyReadStandardOutput.connect(self.readAllStandard)
- self.process.start('sh', ['-c', self.cmd])
- self.termtitle("MAKE VERILATOR")
- self.termtext("Current Directory: " + self.modelpath)
- self.termtext("Command: " + self.cmd)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process \
- .readyReadStandardError.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
-
- print("Make Verilator Executed")
- os.chdir(self.cur_dir)
-
- # This function copies the verilator files/object files from
- # src/xspice/icm/Ngveri/ to release/src/xspice/icm/Ngveri/
- def copy_verilator(self):
- self.cur_dir = os.getcwd()
- print("Copying the required files to Release Folder.............")
- os.chdir(self.modelpath)
- self.release_home = self.parser.get('NGSPICE', 'RELEASE')
- path_icm = os.path.join(self.release_home, "src/xspice/icm/Ngveri/")
- if not os.path.isdir(path_icm + self.fname.split('.')[0]):
- os.mkdir(path_icm + self.fname.split('.')[0])
- path_icm = path_icm + self.fname.split('.')[0]
- if os.path.exists(
- path_icm +
- "sim_main_" +
- self.fname.split('.')[0] +
- ".o"):
- os.remove(path_icm + "sim_main_" + self.fname.split('.')[0] + ".o")
- if os.path.exists(
- self.release_home +
- "src/xspice/icm/" +
- "verilated.o"):
- os.remove(self.release_home + "src/xspice/icm/" + "verilated.o")
- if os.path.exists(
- path_icm +
- "V" +
- self.fname.split('.')[0] +
- "__ALL.o"):
- os.remove(path_icm + "V" + self.fname.split('.')[0] + "__ALL.o")
- # print(self.modelpath)
- try:
- self.cmd = "cp sim_main_" + \
- self.fname.split('.')[0] + ".o V" + \
- self.fname.split('.')[0] + "__ALL.o " + path_icm
- self.process = QtCore.QProcess(self)
- self.args = ['-c', self.cmd]
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process \
- .readyReadStandardError.connect(self.readAllStandard)
- self.process.start('sh', self.args)
- self.termtitle("COPYING FILES")
- self.termtext("Current Directory: " + self.modelpath)
- self.termtext("Command: " + self.cmd)
- self.process.waitForFinished(50000)
- self.cmd = "cp verilated.o " + self.release_home \
- + "/src/xspice/icm/"
- self.process.start('sh', ['-c', self.cmd])
- self.termtext("Command: " + self.cmd)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
- print("Copied the files")
- os.chdir(self.cur_dir)
- except BaseException:
- print("There is error in Copying Files ")
-
- # Running the make command for Ngspice
- def runMake(self):
- print("run Make Called")
- self.release_home = self.parser.get('NGSPICE', 'RELEASE')
- path_icm = os.path.join(self.release_home, "src/xspice/icm")
- os.chdir(path_icm)
-
- try:
- if os.name == 'nt':
- # path to msys bin directory where make is located
- self.msys_bin = self.parser.get('COMPILER', 'MSYS_HOME')
- self.cmd = self.msys_bin + "\\make.exe"
- else:
- self.cmd = "make"
-
- print("Running Make command in " + path_icm)
- path = os.getcwd() # noqa
- self.process = QtCore.QProcess(self)
- self.process.start('sh', ['-c', self.cmd])
- print("make command process pid ---------- >", self.process.pid())
-
- self.termtitle("MAKE COMMAND")
- self.termtext("Current Directory: " + path_icm)
- self.termtext("Command: " + self.cmd)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process \
- .readyReadStandardError.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
- os.chdir(self.cur_dir)
- except BaseException:
- print("There is error in 'make' ")
- # sys.exit()
-
- # Running the make install command for Ngspice
- def runMakeInstall(self):
- self.cur_dir = os.getcwd()
- print("run Make Install Called")
- self.release_home = self.parser.get('NGSPICE', 'RELEASE')
- path_icm = os.path.join(self.release_home, "src/xspice/icm")
- os.chdir(path_icm)
-
- try:
- if os.name == 'nt':
- self.msys_bin = self.parser.get('COMPILER', 'MSYS_HOME')
- self.cmd = self.msys_bin + "\\make.exe install"
+ if reply == QtWidgets.QMessageBox.Ok:
+ self.obj_Appconfig.print_error(
+ 'No VerilogFile. Please add a File in Makerchip Tab')
+ return
+
+ self.fname = Maker.verilogFile[self.filecount]
+ model = ModelGeneration.ModelGeneration(self.fname, self.entry_var[0])
+ file = (os.path.basename(self.fname)).split('.')[0]
+ if self.entry_var[1].findText(file) == -1:
+ self.entry_var[1].addItem(file)
+ model.verilogfile()
+ error = model.verilogParse()
+ if error != "Error":
+ model.getPortInfo()
+ model.cfuncmod()
+ model.ifspecwrite()
+ model.sim_main_header()
+ model.sim_main()
+ model.modpathlst()
+ model.run_verilator()
+ model.make_verilator()
+ model.copy_verilator()
+ model.runMake()
+ model.runMakeInstall()
+ txt = self.entry_var[0].toPlainText()
+ if not "error" in txt.lower():
+ self.entry_var[0].append('''
+
+ Model Created Successfully !
+
+ ''')
else:
- self.cmd = "make install"
- print("Running Make Install")
- path = os.getcwd() # noqa
- try:
- self.process.close()
- except BaseException:
- pass
-
- self.process = QtCore.QProcess(self)
- self.process.start('sh', ['-c', self.cmd])
- # text=""
- self.termtitle("MAKE INSTALL COMMAND")
- self.termtext("Current Directory: " + path_icm)
- self.termtext("Command: " + self.cmd)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process \
- .readyReadStandardError.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
- os.chdir(self.cur_dir)
-
- except BaseException as e:
- print(e)
- print("There is error in 'make install' ")
- # sys.exit()
+ self.entry_var[0].append('''
+
+ There was an error during model creation,
+
+ Please rectify the error and try again !
+
+ ''')
# This function is used to add additional files required by the verilog
# top module
- def addfile(self):
- print("Adding the files required by the top level module file")
- init_path = '../../../'
- if os.name == 'nt':
- init_path = ''
- includefile = QtCore.QDir.toNativeSeparators(
- QtWidgets.QFileDialog.getOpenFileName(
- self,
- "Open adding other necessary files to be included",
- init_path + "home")[0])
- if includefile == "":
+ def addfile(self):
+ if len(Maker.verilogFile) < (self.filecount + 1):
reply = QtWidgets.QMessageBox.critical(
- None, "Error Message",
- "Error: No File Chosen. Please chose a file",
- QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel
- )
+ None,
+ "Error Message",
+ "Error: No Verilog File Chosen. \
+ Please chose a Verilog file in Makerchip Tab",
+ QtWidgets.QMessageBox.Ok)
if reply == QtWidgets.QMessageBox.Ok:
- self.addfile()
- self.obj_Appconfig.print_info('Add Other Files Called')
-
- elif reply == QtWidgets.QMessageBox.Cancel:
- self.obj_Appconfig.print_info('No File Chosen')
- filename = os.path.basename(includefile)
- self.modelpath = self.digital_home + \
- "/" + self.fname.split('.')[0] + "/"
-
- if not os.path.isdir(self.modelpath):
- os.mkdir(self.modelpath)
- text = open(includefile).read()
- text = text + '\n'
- f = open(self.modelpath + filename, 'w')
- for item in text:
- f.write(item)
- f.write("\n")
- f.close()
- print("Added the File:" + filename)
- self.termtitle("Added the File:" + filename)
+ self.obj_Appconfig.print_error(
+ 'No VerilogFile. Please chose\
+ a Verilog File in Makerchip Tab')
+ return
+ self.fname = Maker.verilogFile[self.filecount]
+ model = ModelGeneration.ModelGeneration(self.fname, self.entry_var[0])
+ # model.verilogfile()
+ model.addfile()
# This function is used to add additional folder required by the verilog
# top module
-
def addfolder(self):
- # self.cur_dir = os.getcwd()
- print("Adding the folder required by the top level module file")
-
- init_path = '../../../'
- if os.name == 'nt':
- init_path = '' # noqa:F841
- includefolder = QtCore.QDir.toNativeSeparators(
- QtWidgets.QFileDialog.getExistingDirectory(
- self, "open", "home"
- )
- )
- if includefolder == "":
+ if len(Maker.verilogFile) < (self.filecount + 1):
reply = QtWidgets.QMessageBox.critical(
- None, "Error Message",
- "Error: No Folder Chosen. Please chose a folder",
- QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel
- )
+ None,
+ "Error Message",
+ "Error: No Verilog File Chosen. \
+ Please chose a Verilog file in Makerchip Tab",
+ QtWidgets.QMessageBox.Ok)
if reply == QtWidgets.QMessageBox.Ok:
- self.addfolder()
- self.obj_Appconfig.print_info('Add Folder Called')
-
- elif reply == QtWidgets.QMessageBox.Cancel:
- self.obj_Appconfig.print_info('No File Chosen')
-
- self.modelpath = self.digital_home + \
- "/" + self.fname.split('.')[0] + "/"
-
- reply = QtWidgets.QMessageBox.question(
- None, "Message",
- '''If you want only the contents\
- of the folder to be added press "Yes".\
- If you want complete folder \
- to be added, press "No". ''',
- QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+ self.obj_Appconfig.print_error(
+ 'No VerilogFile. Please chose \
+ a Verilog File in Makerchip Tab')
+ return
+ self.fname = Maker.verilogFile[self.filecount]
+ model = ModelGeneration.ModelGeneration(self.fname, self.entry_var[0])
+ # model.verilogfile()
+ model.addfolder()
+
+ # This function is used to clear the terminal
+
+ def clearTerminal(self):
+ self.entry_var[0].setText("")
+
+ # This function is used to create buttons/options
+ def createoptionsBox(self):
+
+ self.optionsbox = QtWidgets.QGroupBox()
+ self.optionsbox.setTitle("Select Options")
+ self.optionsgrid = QtWidgets.QGridLayout()
+
+ self.optionsgroupbtn = QtWidgets.QButtonGroup()
+
+ self.addverilogbutton = QtWidgets.QPushButton(
+ "Run Verilog to NgSpice Converter")
+ self.optionsgroupbtn.addButton(self.addverilogbutton)
+ self.addverilogbutton.clicked.connect(self.addverilog)
+ self.optionsgrid.addWidget(self.addverilogbutton, 0, 1)
+ #self.optionsbox.setLayout(self.optionsgrid)
+ #self.grid.addWidget(self.creategroup(), 1, 0, 5, 0)
+
+ self.addfilebutton = QtWidgets.QPushButton("Add Other file")
+ self.optionsgroupbtn.addButton(self.addfilebutton)
+ self.addfilebutton.clicked.connect(self.addfile)
+ self.optionsgrid.addWidget(self.addfilebutton, 0, 2)
+ #self.optionsbox.setLayout(self.optionsgrid)
+ #self.grid.addWidget(self.creategroup(), 1, 0, 5, 0)
+
+ self.addfolderbutton = QtWidgets.QPushButton("Add Folder")
+ self.optionsgroupbtn.addButton(self.addfolderbutton)
+ self.addfolderbutton.clicked.connect(self.addfolder)
+ self.optionsgrid.addWidget(self.addfolderbutton, 0, 3)
+ #self.optionsbox.setLayout(self.optionsgrid)
+ #self.grid.addWidget(self.creategroup(), 1, 0, 5, 0)
+
+ self.clearTerminalBtn = QtWidgets.QPushButton("Clear Terminal")
+ self.optionsgroupbtn.addButton(self.clearTerminalBtn)
+ self.clearTerminalBtn.clicked.connect(self.clearTerminal)
+ self.optionsgrid.addWidget(self.clearTerminalBtn, 0, 4)
+ self.optionsbox.setLayout(self.optionsgrid)
+ #self.grid.addWidget(self.creategroup(), 1, 0, 5, 0)
+
+ return self.optionsbox
+
+ # This function is used to remove models in modlst of Ngspice folder if
+ # the user wants to remove a model.Note: files do not get removed
+ def edit_modlst(self, text):
+ if text == "Edit modlst":
+ return
+ index = self.entry_var[1].findText(text)
+ self.entry_var[1].removeItem(index)
+ self.entry_var[1].setCurrentIndex(0)
+ ret = QtWidgets.QMessageBox.warning(
+ None, "Warning", '''Do you want to remove model:''' +
+ text,
+ QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Cancel
)
- if reply == QtWidgets.QMessageBox.Yes:
- self.cmd = "cp -a " + includefolder + "/. " + self.modelpath
- self.obj_Appconfig.print_info('Adding Contents of the Folder')
- elif reply == QtWidgets.QMessageBox.No:
- self.cmd = "cp -R " + includefolder + " " + self.modelpath
- self.obj_Appconfig.print_info('Adding the Folder')
-
- print("Adding the Folder:" + includefolder.split('/')[-1])
- self.termtitle("Adding the Folder:" + includefolder.split('/')[-1])
-
- self.process = QtCore.QProcess(self)
- self.process.start('sh', ['-c', self.cmd])
- self.termtext("Command: " + self.cmd)
- self.process \
- .readyReadStandardOutput.connect(self.readAllStandard)
- self.process.waitForFinished(50000)
- print("Added the folder")
- # os.chdir(self.cur_dir)
-
- # This function is used to print the titles in the terminal of Ngveri tab
-
- def termtitle(self, textin):
-
- Text = ""
- Text += "
================================
"
- Text += textin
- Text += "
================================
"
- Text += ""
- self.termedit.append(Text)
-
- # This function is used to print the text/commands in the terminal of
- # Ngveri tab
- def termtext(self, textin):
-
- Text = ""
- Text += textin
- Text += ""
- self.termedit.append(Text)
-
- # This function reads all the Standard output data and the errors from the
- # process that aree being run
- @QtCore.pyqtSlot()
- def readAllStandard(self):
- # self.termedit = termedit
- # self.termedit.append(str(self.process.readAll().data(),\
- # encoding='utf-8'))
- stdoutput = self.process.readAll()
- TextStdOut = ""
- for line in str(stdoutput.data(), encoding='utf-8').split("\n"):
- TextStdOut += "
" + line
- TextStdOut += ""
- self.termedit.append(TextStdOut)
- # print(str(self.process.readAll().data(), encoding='utf-8'))
-
- stderror = self.process.readAllStandardError()
- if stderror.toUpper().contains(b"ERROR"):
- self.errorFlag = True
- TextErr = ""
- for line in str(stderror.data(), encoding='utf-8').split("\n"):
- TextErr += "
" + line
- TextErr += ""
- self.termedit.append(TextErr)
- # @QtCore.pyqtSlot()
- # def readAllStandard(self):
- # #self.termedit = termedit
- # self.termedit.append(str(self.process.\
- # readAll().data(), encoding='utf-8'))
-
- # print(str(self.process.readAll().data(), encoding='utf-8'))
- # stderror = self.process.readAllStandardError()
- # if stderror.toUpper().contains(b"ERROR"):
- # self.errorFlag = True
- # Text = ""
- # for line in str(stderror.data(), encoding='utf-8').split("\n"):
- # Text += "
"+line+"
"
- # Text += ""
- # self.termedit.append(Text+"\n")
-
- # init_path = '../../../'
- # if os.name == 'nt':
- # init_path = ''
- # includefile = QtCore.QDir.toNativeSeparators(\
- # QtWidgets.QFileDialog.getOpenFileName(
- # self, "Open adding other necessary files to be included",
- # init_path + "home"
- # )[0]
- # )
- # if includefile=="":
- # reply=QtWidgets.QMessageBox.critical(
- # None, "Error Message",
- # "Error: No File Chosen. Please chose a file",
- # QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel
- # )
- # if reply == QtWidgets.QMessageBox.Ok:
- # self.addfile()
- # self.obj_Appconfig.print_info('Add Other Files Called')
-
- # elif reply == QtWidgets.QMessageBox.Cancel:
- # self.obj_Appconfig.print_info('No File Chosen')
- # filename = os.path.basename(includefile)
- # self.modelpath=self.digital_home+"/"+self.fname.split('.')[0]+"/"
-
- # if not os.path.isdir(self.modelpath):
- # os.mkdir(self.modelpath)
- # text = open(includefile).read()
- # open(self.modelpath+filename,'w').write(text)
- # includefile.close()
+ if ret == QtWidgets.QMessageBox.Ok:
+ mod = open(self.digital_home + '/modpath.lst', 'r')
+ data = mod.readlines()
+ mod.close()
+
+ data.remove(text + "\n")
+ mod = open(self.digital_home + '/modpath.lst', 'w')
+ for item in data:
+ mod.write(item)
+ self.fname = Maker.verilogFile[self.filecount]
+ model = ModelGeneration.ModelGeneration(
+ self.fname, self.entry_var[0])
+ model.runMake()
+ model.runMakeInstall()
+ return
+
+ #else:
+ # return
+
+ # This is to remove lint_off comments needed by the verilator warnings
+ # This function writes to the lint_off.txt here in the same folder
+ def lint_off_edit(self, text):
+ if text == "Edit lint_off":
+ return
+ index = self.entry_var[2].findText(text)
+ self.entry_var[2].removeItem(index)
+ self.entry_var[2].setCurrentIndex(0)
+ ret = QtWidgets.QMessageBox.warning(
+ None,
+ "Warning",
+ '''Do you want to remove the lint off error:''' +
+ text,
+ QtWidgets.QMessageBox.Ok,
+ QtWidgets.QMessageBox.Cancel)
+ if ret == QtWidgets.QMessageBox.Ok:
+ file = open("../maker/lint_off.txt", 'r')
+ data = file.readlines()
+ file.close()
+
+ data.remove(text + "\n")
+ file = open("../maker/lint_off.txt", 'w')
+ for item in data:
+ file.write(item)
+ return
+
+ #else:
+ # return
+
+ # This is to add lint_off comments needed by the verilator warnings
+ # This function writes to the lint_off.txt here in the same folder
+ def add_lint_off(self):
+ text = self.entry_var[3].text()
+
+ if self.entry_var[2].findText(text) == -1:
+ self.entry_var[2].addItem(text)
+ file = open("../maker/lint_off.txt", 'a+')
+ file.write(text + "\n")
+ file.close()
+ self.entry_var[3].setText("")
+
+ # creating various other groups like terminal, edit modlst, edit lint_off
+ # and add lint_off
+
+ def creategroup(self):
+
+ self.trbox = QtWidgets.QGroupBox()
+ self.trbox.setTitle("Terminal")
+ # self.trbox.setDisabled(True)
+ # self.trbox.setVisible(False)
+ self.trgrid = QtWidgets.QGridLayout()
+ self.trbox.setLayout(self.trgrid)
+ self.count = 0
+
+ self.start = QtWidgets.QLabel("Terminal")
+ # self.trgrid.addWidget(self.start, 2,0)
+ self.entry_var[self.count] = QtWidgets.QTextEdit()
+ self.entry_var[self.count].setReadOnly(1)
+ self.trgrid.addWidget(self.entry_var[self.count], 1, 1, 5, 3)
+ self.entry_var[self.count].setMaximumWidth(1000)
+ self.entry_var[self.count].setMaximumHeight(1000)
+ self.count += 1
+
+ self.entry_var[self.count] = QtWidgets.QComboBox()
+ self.entry_var[self.count].addItem("Edit modlst")
+ self.modlst = open(self.digital_home + '/modpath.lst', 'r')
+ self.data = self.modlst.readlines()
+ self.modlst.close()
+ for item in self.data:
+ if item != "\n":
+ self.entry_var[self.count].addItem(item.strip())
+ self.entry_var[self.count].activated[str].connect(self.edit_modlst)
+ self.trgrid.addWidget(self.entry_var[self.count], 1, 4, 1, 2)
+ self.count += 1
+ self.entry_var[self.count] = QtWidgets.QComboBox()
+ self.entry_var[self.count].addItem("Edit lint_off")
+ self.lint_off = open("../maker/lint_off.txt", 'r')
+ self.data = self.lint_off.readlines()
+ self.lint_off.close()
+ for item in self.data:
+ if item != "\n":
+ self.entry_var[self.count].addItem(item.strip())
+ self.entry_var[self.count].activated[str].connect(self.lint_off_edit)
+ self.trgrid.addWidget(self.entry_var[self.count], 2, 4, 1, 2)
+ self.count += 1
+ self.entry_var[self.count] = QtWidgets.QLineEdit(self)
+ self.trgrid.addWidget(self.entry_var[self.count], 3, 4)
+ self.entry_var[self.count].setMaximumWidth(100)
+ self.count += 1
+ self.entry_var[self.count] = QtWidgets.QPushButton("Add Lint_Off")
+ self.entry_var[self.count].setMaximumWidth(100)
+ self.trgrid.addWidget(self.entry_var[self.count], 3, 5)
+ self.entry_var[self.count].clicked.connect(self.add_lint_off)
+
+ self.count += 1
+
+ # CSS
+ self.trbox.setStyleSheet(" \
+ QGroupBox { border: 1px solid gray; border-radius: \
+ 9px; margin-top: 0.5em; } \
+ QGroupBox::title { subcontrol-origin: margin; left: \
+ 10px; padding: 0 3px 0 3px; } \
+ ")
+
+ return self.trbox
--
cgit