def callback_unit_click(self, token, widget, unit): if type(widget) == shape_dos_switch: f = inp() f.load(self.file_name) if newton_solver_get_type() == "newton_simple": electrical_file = f.get_token("#shape_electrical") + ".inp" else: electrical_file = f.get_token("#shape_dos") + ".inp" from tab import tab_class self.window = tab_class(electrical_file) self.window.setWindowTitle( _("Electrical parameter editor for shape") + " " + f.get_token("#shape_name") + " (https://www.gpvdm.com)") self.window.show() if type(widget) == gpvdm_select_material: widget.callback_button_click() if type(widget) == gpvdm_select_emission: widget.callback_button_click() if token == "#dostype": from dos_editor import dos_editor self.dos_editor = dos_editor(self.file_name) self.dos_editor.show()
def update(self): self.notebook.clear() fulle_sim = True sim_type = newton_solver_get_type() if sim_type == "newton_simple": fulle_sim = False epi = get_epi() for l in epi.layers: if fulle_sim == True: if l.dos_file.startswith("dos") == True: name = "DoS of " + l.name print(l.dos_file) widget = tab_class(l.dos_file + ".inp") self.notebook.addTab(widget, name) for s in l.shapes: if s.shape_dos != "none": name = "DoS of " + s.name widget = tab_class(s.shape_dos + ".inp") self.notebook.addTab(widget, name) #tab.append(s.shape_dos+".inp") else: name = "Electrical " + l.name widget = tab_class(l.shape_electrical + ".inp") self.notebook.addTab(widget, name)
def check_curcuit_sim(self, epi): newton_solver = newton_solver_get_type() if newton_solver == "newton_simple" and self.direction == "y": for l in epi.layers: self.add_layer(l.dy, 1, 1.0, "left") self.circuit_model = True return True return False
def mouseReleaseEvent(self, QMouseEvent): epi=get_epi() if QMouseEvent.x()<160: if self.value== "none": if newton_solver_get_type()=="newton_simple": self.value=epi.add_new_electrical_to_shape(self.shape_file) else: self.value=epi.add_new_dos_to_shape(self.shape_file) else: if newton_solver_get_type()=="newton_simple": self.value=epi.del_electrical_shape(self.shape_file) self.value="none" else: self.value=epi.del_dos_shape(self.shape_file) self.value="none" self.repaint() self.changed.emit()
def show_hide_cols(self): schottky = False for i in range(0, self.tab.rowCount()): if self.tab.get_value(i, 11) == "schottky": schottky = True break if schottky == True: self.tab.setColumnHidden(9, False) self.tab.setColumnHidden(10, False) else: self.tab.setColumnHidden(9, True) self.tab.setColumnHidden(10, True) if newton_solver_get_type() == "newton_simple": self.tab.setColumnHidden(7, True) self.tab.setColumnHidden(8, True) self.tab.setColumnHidden(11, True) else: self.tab.setColumnHidden(7, False) self.tab.setColumnHidden(8, False) self.tab.setColumnHidden(11, False)
def update(self): self.clear_toolbar() lines = [] newton_solver = newton_solver_get_type() files = inp_lsdir("sim.gpvdm") if files != False: for i in range(0, len(files)): if files[i].endswith(".inp") and files[i].count("/") == 0: lines = inp_load_file(files[i]) value = inp_search_token_value(lines, "#sim_menu_name") if value != False: if value.count("@") == 1: value = value.rstrip() command, module = value.split("@") hide = False if newton_solver == "none": if module == "jv": hide = True if module == "pulse": hide = True if module == "suns_jsc": hide = True if module == "sun_voc": hide = True if module == "is": hide = True if command not in self.dont_show and hide == False: a = gQAction(self, files[i], command, module) a.setCheckable(True) a.selected.connect(self.callback_click) self.actions.append(a) #temp.append(value) #temp.sort() token = inp_get_token_value("sim.inp", "#simmode") if token == None: return #print(os.getcwd(),"!!!!!!!!!!!!!") #sys.exit(0) if token.count("@") != 0: command, module = token.split("@") else: command = token found = False self.build = [] added = 0 #This is to stop || appearing in the menu for o in self.order: if o == "|": if added != 0: self.build.append("|") added = 0 else: for i in range(0, len(self.actions)): if self.actions[i].command.lower().startswith( o.lower()) == True: if self.actions[i].done == False: self.build.append(self.actions[i]) self.actions[i].done = True added = added + 1 for i in range(0, len(self.actions)): if self.actions[i].done == False: #print(self.actions[i].command) self.build.append(self.actions[i]) self.actions = self.build self.blockSignals(True) for a in self.actions: #self.sim_mode.addItem(command) if type(a) == gQAction: self.addAction(a) if command.lower() == a.command.lower(): self.callback_click(a, disable_help=True) found = True else: self.addSeparator() #if there is no known mode, just set it to jv mode if found == False: for a in self.actions: if a.command == "jv": self.callback_click(a, disable_help=True) inp_update_token_value( os.path.join(get_sim_path(), "sim.inp"), "#simmode", "jv@jv") break self.blockSignals(False)
def populate(self, lines): self.f.lines = lines n = 0 pos = 0 my_token_lib = tokens() widget_number = 0 bib = bibtex() if self.file_name != None: bib.load(os.path.splitext(self.file_name)[0] + ".bib") while (1): draw_widget = True token, values = self.f.get_next_token_array() #print(token,values) if token == "#ver": break if token == "#end": break if token.startswith("#"): show = False units = "Units" value = values[0] result = my_token_lib.find(token) if result != False: #print(token,result.info) units = result.units text_info = result.info show = True if result.hidden == True: show = False if show == True: description = QLabel_click() description.setText(latex_to_html(text_info)) if self.file_name != None: if bib.get_ref(token) != False: description.setStyleSheet('color: green') description.clicked.connect( functools.partial(self.callback_ref, token, description)) #units widget if result.units_widget == "QLabel": unit = QLabel() unit.setText(latex_to_html(units)) elif result.units_widget == "QPushButton": unit = QPushButton() unit.setText(latex_to_html(units)) unit.setFixedSize(50, 25) #edit widget if result.widget == "gtkswitch": edit_box = gtkswitch() edit_box.setFixedSize(300, 25) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "leftright": edit_box = leftright() edit_box.setFixedSize(300, 25) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "gpvdm_select": edit_box = gpvdm_select(file_box=True) edit_box.setFixedSize(300, 25) edit_box.edit.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "gpvdm_select_material": edit_box = gpvdm_select_material(file_box=False) edit_box.setFixedSize(300, 25) edit_box.edit.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "gpvdm_select_emission": edit_box = gpvdm_select_emission(file_box=False) edit_box.setFixedSize(300, 25) edit_box.edit.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QLineEdit": edit_box = QLineEdit() edit_box.setFixedSize(300, 25) if self.editable == False: edit_box.setReadOnly(True) edit_box.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) #edit_box.show() elif result.widget == "QColorPicker": r = float(values[0]) g = float(values[1]) b = float(values[2]) edit_box = QColorPicker(r, g, b) edit_box.setFixedSize(300, 25) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QComboBoxLang": edit_box = QComboBoxLang() edit_box.setFixedSize(300, 25) for i in range(0, len(result.defaults)): edit_box.addItemLang(result.defaults[i][0], result.defaults[i][1]) edit_box.currentIndexChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QComboBoxNewtonSelect": edit_box = QComboBoxNewtonSelect() edit_box.setFixedSize(300, 25) for i in range(0, len(result.defaults)): edit_box.addItem(result.defaults[i]) edit_box.currentIndexChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QComboBoxShape": edit_box = QComboBoxShape() edit_box.setFixedSize(300, 25) edit_box.currentIndexChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QParasitic": edit_box = QParasitic() edit_box.setFixedSize(300, 25) edit_box.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "QChangeLog": edit_box = QChangeLog(self) edit_box.setMinimumHeight(100) if self.editable == False: edit_box.setReadOnly(True) edit_box.textChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "generic_switch": edit_box = generic_switch( state0=result.defaults[0][0], state1=result.defaults[1][0], state0_value=result.defaults[0][1], state1_value=result.defaults[1][1], ) edit_box.setFixedSize(300, 25) if value == "exponential": unit.setEnabled(False) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "mobility_widget": edit_box = mobility_widget( electrons=result.defaults[0]) edit_box.setFixedSize(400, 25) if token == "#symmetric_mobility_e": value = [ self.f.get_token(token), self.f.get_token("#mue_z"), self.f.get_token("#mue_x"), self.f.get_token("#mue_y") ] if token == "#symmetric_mobility_h": value = [ self.f.get_token(token), self.f.get_token("#muh_z"), self.f.get_token("#muh_x"), self.f.get_token("#muh_y") ] if token == "#electrical_symmetrical_resistance": value = [ self.f.get_token(token), self.f.get_token("#electrical_series_z"), self.f.get_token("#electrical_series_x"), self.f.get_token("#electrical_series_y") ] edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) elif result.widget == "shape_dos_switch": if token == "#shape_dos": if newton_solver_get_type() != "newton_simple": edit_box = shape_dos_switch() edit_box.shape_file = self.file_name edit_box.setFixedSize(300, 25) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) if value == "none": unit.setEnabled(False) else: draw_widget = False if token == "#shape_electrical": if newton_solver_get_type() == "newton_simple": edit_box = shape_dos_switch() edit_box.shape_file = self.file_name edit_box.setFixedSize(300, 25) edit_box.changed.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) if value == "none": unit.setEnabled(False) else: draw_widget = False else: edit_box = QComboBox() edit_box.setFixedSize(300, 25) for i in range(0, len(result.defaults)): edit_box.addItem(result.defaults[i]) edit_box.currentIndexChanged.connect( functools.partial(self.callback_edit, token, edit_box, unit, result)) widget_set_value(edit_box, value) if type(unit) == QPushButton: unit.clicked.connect( functools.partial(self.callback_unit_click, token, edit_box, unit)) if draw_widget == True: a = tab_line() a.token = token a.label = description a.edit_box = edit_box a.units = unit a.widget = result.widget a.hide_on_true_token = result.hide_on_true_token a.hide_on_false_token = result.hide_on_false_token a.hide_on_token_eq = result.hide_on_token_eq self.widget_list.append(a) self.tab.addWidget(description, widget_number, 0) self.tab.addWidget(edit_box, widget_number, 1) self.tab.addWidget(unit, widget_number, 2) widget_number = widget_number + 1 self.hide_show_widgets()