Esempio n. 1
0
    def createWidgetsFiltres(self):
        """Создание виджета панели фильтрации. Тип виджета для фильтрации по значению 
        поля определяется из анализа типа делегата установленного для соответсвующего
        столбца представления"""
        def clearLayout(layout):
            """Рекурсивная функция для очистки layout'а"""
            while layout.count():
                item = layout.takeAt(0)
                if item.layout():
                    clearLayout(item.layout())
                widget = item.widget()
                if widget is not None:
                    widget.deleteLater()

        clearLayout(self.filterlayout)
        if isinstance(self.model(), ModelAbonents):
            innerModel = self.model()
        elif isinstance(self.model(), QSortFilterProxyModel):
            innerModel = self.model().sourceModel()
        #count = 0
        for i in range(len(innerModel.namesColumn)):
            label = QLabel(innerModel.namesColumn[i])
            delegateForColumn = self.table.itemDelegateForColumn(i)
            if isinstance(delegateForColumn, defaultDelegate
                          ):  # Для делегата по умолчанию выбирается QLineEdit
                itemFilter = QLineEdit()
                if isinstance(self.model(), QSortFilterProxyModel):
                    itemFilter.textChanged.connect(
                        self.model().changeParametrsFiltrering)
            elif isinstance(delegateForColumn, comboDelegate):
                itemFilter = QComboBox()
                itemFilter.addItems(delegateForColumn.content.values())
            elif isinstance(delegateForColumn, comboBdDelegate):
                # Для delegateForColumn выбирается QComboBox, items которого заполняется из поля content делегата
                itemFilter = QComboBox()
                itemFilter.addItems(delegateForColumn.content.values())
                if isinstance(self.model(), QSortFilterProxyModel):
                    itemFilter.currentIndexChanged.connect(
                        self.model().changeIndexFiltrering)
            else:
                continue
            itemFilter.setObjectName(str(i))  #innerModel.savedFields[i])
            fieldlayout = QHBoxLayout()
            fieldlayout.addWidget(label, 1)
            fieldlayout.addWidget(itemFilter, 2)
            self.filterlayout.addLayout(fieldlayout)
        self.filterlayout.addStretch()
        self.hideFilterPanel(False)
Esempio n. 2
0
    def CreateForm(self):
        formGroupBox = QGroupBox("Form layout")

        layout = QFormLayout()

        self.LineEditArray = []

        keys = list(self.FeildDict.keys())

        for x in range(len(keys)):
            if self.FeildDict[keys[x]][0] == Feilds.Text:
                Box = QLineEdit(self)
                Box.textChanged.connect(self.NoteText)

            elif self.FeildDict[keys[x]][0] == Feilds.Date:
                Box = QDateEdit(self)
                Box.dateChanged.connect(self.NoteText)

            elif self.FeildDict[keys[x]][0] == Feilds.Integer:
                Box = QLineEdit(self)
                Box.setValidator(QIntValidator(0, 999999, self))
                Box.textChanged.connect(self.NoteText)

            elif self.FeildDict[keys[x]][0] == Feilds.Real:
                Box = QLineEdit(self)
                Box.setValidator(QDoubleValidator(0.0, 999999.0, 2, self))
                Box.textChanged.connect(self.NoteText)

            else:
                Box = QComboBox(self)
                RangeFeilds = self.FeildDict[keys[x]][2]
                Box.addItems(RangeFeilds)
                Box.activated.connect(self.NoteText)

            self.LineEditArray.append(Box)
            self.Responses.append("")

        for x in range(len(keys)):
            layout.addRow(QLabel(keys[x]), self.LineEditArray[x])

        formGroupBox.setLayout(layout)
        return formGroupBox
Esempio n. 3
0
 def __edit_widget_init(self):
     if self.field_widget_type == 'QLineEdit':
         edit_widget = QLineEdit()
         edit_widget.setText(self.field_widget_context['default'])  
     elif self.field_widget_type == 'QComboBox':
         edit_widget = QComboBox()
         edit_widget.addItems(self.field_widget_context['value_list'])
         edit_widget.setCurrentText(self.field_widget_context['default'])
     elif self.field_widget_type == 'QSpinBox':
         edit_widget = QSpinBox()
         edit_widget.setRange(self.field_widget_context['min_value'], self.field_widget_context['max_value'])                                                      
         edit_widget.setSingleStep(self.field_widget_context['single_step'])                                                       
         edit_widget.setValue(self.field_widget_context['default'])                 
     elif self.field_widget_type == 'QDoubleSpinBox':
         edit_widget = QDoubleSpinBox()
         edit_widget.setRange(self.field_widget_context['min_value'], self.field_widget_context['max_value'])                                                      
         edit_widget.setSingleStep(self.field_widget_context['single_step'])                                                       
         edit_widget.setValue(self.field_widget_context['default'])              
     elif self.field_widget_type == 'QCheckBox':
         edit_widget = QCheckBox()
         edit_widget.setChecked(self.field_widget_context['default'])
     elif self.field_widget_type == 'QDateTimeEdit':
         edit_widget = QDateTimeEdit(QDateTime.currentDateTime())
         edit_widget.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
         edit_widget.setCalendarPopup(True)
     elif self.field_widget_type == 'QDateEdit':
         edit_widget = QDateEdit(QDate.currentDate())
         edit_widget.setDisplayFormat('yyyy-MM-dd')
         edit_widget.setCalendarPopup(True)
     elif self.field_widget_type == 'QTimeEdit':
         edit_widget = QTimeEdit(QTime.currentTime())
         edit_widget.setDisplayFormat('HH:mm:ss')
     else:
         print('could not handle type edit type: %s' % self.field_widget_type) 
         edit_widget = QLineEdit()
     
     return edit_widget
Esempio n. 4
0
class NotificationWidget(QWidget):
    """Widget for notification phone numbers"""

    def __init__(self, name, default, default_programs_dict, parent=None):
        """
        Initialise layout.

        Arguments:
        name - Name of the widget
        default - Default value for the widget
        parent - Parent widget

        Returns:
        None
        """
        super(NotificationWidget, self).__init__(parent)

        # Global content
        self.name = name
        self.default = default
        self.default_programs_dict = default_programs_dict
        if self.default == 'choose':
            self.edit = QComboBox(self)
            self.edit.currentTextChanged.connect(self.change_tooltip)
        else:
            self.edit = QLineEdit(self.default, self)
            self.edit.setReadOnly(True)
        self.check_box = QCheckBox(self.name, self)
        self.check_box.setToolTip('{0} : {1}'.format(self.check_box.isChecked(), self.name))

        # Event
        self.check_box.stateChanged.connect(self._change_state)

        # Layout
        layout = QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.check_box)
        layout.addWidget(self.edit)
        self.edit.setEnabled(False)

        # Default
        if self.default == 'choose':
            pass
        else:
            self.edit.setText(default)
            self.edit.setToolTip(default)

        # Object name
        self.edit.setObjectName('noti_edit')
        self.check_box.setObjectName('noti_check')
        self.exceptions = []

    @pyqtSlot(str)
    def change_tooltip(self, text):
        self.sender().setToolTip(text)

    @pyqtSlot()
    def _change_state(self):
        """
        Change enable state of the edit

        Arguments:
        None

        Returns:
        None
        """
        self.edit.setEnabled(self.check_box.isChecked())
        self.check_box.setToolTip('{0} : {1}'.format(self.check_box.isChecked(), self.name))

    def add_exceptions(self, name):
        """
        Add a person to the exception list and dont send notification anymore.

        Arguments:
        name - Name of the person

        Returns:
        None
        """
        self.exceptions.append(name)

    def update_combo(self, typ, users):
        """
        Update the combo boxes.

        Arguments:
        users - User dictionary

        Returns:
        None
        """
        if self.default == 'choose':
            prefix = self.default_programs_dict[typ]
            items = ['{0} {1}'.format(prefix, key) for key in users if '{0} {1}'.format(prefix, key) not in self.exceptions]
            self.edit.addItems(sorted(items))

    def clear_combo(self):
        """
        Remove all users from the combo box.

        Arguments:
        None

        Returns:
        None
        """
        if self.default == 'choose':
            self.edit.clear()

    def get_settings(self):
        """
        Get text of the currently selected combo item.

        Arguments:
        None

        Returns:
        Settings dictionary
        """
        settings = {}
        if self.default == 'choose':
            settings[self.name] = '{0}\t{1}'.format(
                self.edit.currentText(),
                self.check_box.isChecked()
                )
        else:
            settings[self.name] = '{0}\t{1}'.format(
                self.edit.text(),
                self.check_box.isChecked()
                )
        return settings

    def set_settings(self, name, state):
        """
        Set currently selected combo item in text.

        Arguments:
        name - Name of the person that should be currently selected.
        state - State of the person (True/False;Enables/Disables)

        Returns:
        None
        """
        self.check_box.setChecked(bool(state == 'True'))
        if self.default == 'choose':
            index = self.edit.findText(name)
            self.edit.setCurrentIndex(index)
        else:
            self.edit.setText(name)
Esempio n. 5
0
    def createEditor(self, parent, option, index):
        combo = QLineEdit(parent)

        combo.addItems(','.join(self.data))

        return combo
Esempio n. 6
0
class MetaBoxDelegate(QStyledItemDelegate):
    def __init__(self, owner):
        super(MetaBoxDelegate, self).__init__(owner)
        self.booleanItems=["True", "False"]
        self.hintSize = None
        
#    def eventFilter(self, editor, event):
#        if (event.type() == QEvent.KeyPress and
#            event.key() == Qt.Key_Tab):
#            print( "Tab captured in editor")
#            self.commitData.emit(editor) 
#            self.closeEditor.emit(editor, QAbstractItemDelegate.NoHint) 
#            return True
#        return QStyledItemDelegate.eventFilter(self,editor,event)   
        
    def createEditor(self, parent, option, index):
        # create the appropriate widget based on the datatype
        columnName = index.data(Qt.UserRole)
        self.hintSize = QSize(option.rect.width(), option.rect.height())
        if columnName == "Node Template":
            self.editor = QComboBox(parent)
            self.editor.addItems(self.loadNodeTemplateDropdown())
        elif columnName == "Relationship Template":
            self.editor = QComboBox(parent)
            self.editor.addItems(self.loadRelTemplateDropdown())
        elif columnName in ["Blank Template", "Optional"]:
            self.editor = QComboBox(parent)
            self.editor.addItems(self.booleanItems)
        else:
            self.editor = QLineEdit(parent)
            
        return self.editor
        
    def setEditorData(self, editor, index):
        '''
        this takes the string stored in the grid cell and populates the editor widget with that value.
        '''
        value = index.data(Qt.DisplayRole)
        columnName = index.data(Qt.UserRole)
        if columnName in [ "Node Template", "Relationship Template"]:
            index = editor.findText(value)
            if index >= 0:
                editor.setCurrentIndex(index)
        elif columnName in ["Blank Template", "Optional"]:
            try:
                num = self.booleanItems.index(value)
                editor.setCurrentIndex(num)
            except:
                editor.setCurrentIndex(0)            
        # default qlineedit
        elif isinstance(editor, QLineEdit):
            editor.setText(value)
        else:
            #shouldn't happen     
            editor.setText(value)       

    def setModelData(self, editor, model, index):
        '''
        this takes the current value of the editor widget, converts it back to a string and stores it back in the item model
        '''
        columnName = index.data(Qt.UserRole)
        if columnName in [ "Node Template", "Relationship Template"]:
            value=editor.currentText()
            model.setData(index, value, Qt.DisplayRole)
        # true/false properties
        elif columnName in ["Blank Template", "Optional"]:    
            value = editor.currentText()
            model.setData(index, value, Qt.DisplayRole)
        # default editor is a qlineedit
        elif isinstance(editor, QLineEdit):        
            value = editor.text()
            model.setData(index, value, Qt.DisplayRole)
        else:
            #shouldn't happen
            value = editor.text()
            model.setData(index, value, Qt.DisplayRole)            

        
    def updateEditorGeometry(self, editor, option, index):
        editor.setGeometry(option.rect)   

    def loadNodeTemplateDropdown(self, ):
        # load node template dropdown
        dropdownList = ["Anonymous Node"]
        dropdownList.extend(sorted(self.parent().parent.model.instanceList("Node Template")))
        return dropdownList

    def loadRelTemplateDropdown(self, ):
        # load node template dropdown
        dropdownList = ["Anonymous Relationship"]
        dropdownList.extend(sorted(self.parent().parent.model.instanceList("Relationship Template")))
        return dropdownList
Esempio n. 7
0
class NeoEditDelegate(QStyledItemDelegate):
    def __init__(self, owner):
        super(NeoEditDelegate, self).__init__(owner)
        self.booleanItems = ["True", "False"]
        self.hintSize = None
        self.helper = Helper()

    def createEditor(self, parent, option, index):
        # create the appropriate widget based on the datatype
        dataType = index.data(Qt.UserRole + 1)
        self.hintSize = QSize(option.rect.width(), option.rect.height())
        if dataType == DataType.INT.value:
            self.editor = QLineEdit(parent)
            self.editor.setValidator(QIntValidator())
        elif dataType == DataType.FLOAT.value:
            self.editor = QLineEdit(parent)
            self.editor.setValidator(QDoubleValidator())
        elif dataType == DataType.STRING.value:
            self.editor = QLineEdit(parent)
        elif dataType == DataType.BOOLEAN.value:
            self.editor = QComboBox(parent)
            self.editor.addItems(self.booleanItems)
        elif dataType == DataType.POINTWGS84.value:
            self.editor = FrmGPoint(parent)
            self.editor.setAutoFillBackground(True)
            self.hintSize = QSize(300, 40)
        elif dataType == DataType.POINTCARTESIAN.value:
            self.editor = FrmPoint(parent)
            self.editor.setAutoFillBackground(True)
            self.hintSize = QSize(300, 40)
        elif dataType == DataType.TIME.value:
            #            self.editor = FrmTime(parent=parent, tz=True)
            self.editor = QLineEdit(parent)
        elif dataType == DataType.LOCALTIME.value:
            #            self.editor = FrmTime(parent=parent, tz=False)
            self.editor = QLineEdit(parent)
        elif dataType == DataType.DATE.value:
            self.editor = QDateTimeEdit(parent)
            self.editor.setCalendarPopup(True)
            self.editor.setDisplayFormat("yyyy/MM/dd")
        elif dataType == DataType.DATETIME.value:
            #            self.editor = QDateTimeEdit(parent)
            #            self.editor.setCalendarPopup(False)
            #            self.editor.setDisplayFormat("yyyy-MM-dd hh:mm:ss:zzz")
            self.editor = QLineEdit(parent)
        elif dataType == DataType.LOCALDATETIME.value:
            self.editor = QLineEdit(parent)
        elif dataType == DataType.DURATION.value:
            self.editor = QLineEdit(parent)
        else:
            self.editor = QLineEdit(parent)

        return self.editor

    def setEditorData(self, editor, index):
        '''
        this takes the string stored in the grid cell and populates the editor widget with that value.
        '''
        value = index.data(Qt.DisplayRole)
        dataType = index.data(Qt.UserRole + 1)
        if isinstance(editor, QLineEdit):
            if ((dataType == DataType.INT.value
                 or dataType == DataType.FLOAT.value) and value == "Null"):
                editor.setText("")
            else:
                editor.setText(value)
        # boolean datatype uses a listbox
        elif isinstance(editor, QComboBox):
            try:
                num = self.booleanItems.index(value)
                editor.setCurrentIndex(num)
            except:
                editor.setCurrentIndex(0)
        elif isinstance(editor, FrmPoint):
            self.editor.setText(value)
        elif isinstance(editor, FrmGPoint):
            self.editor.setText(value)
        elif isinstance(editor, QDateTimeEdit):
            try:
                aDate = None
                if dataType == DataType.DATE.value:
                    if value == "Null":
                        aDate = QDate.currentDate()
                        editor.setDate(aDate)
                    else:
                        aDate = QDate.fromString(value, format=Qt.ISODate)
                        editor.setDate(aDate)

            except:
                pass

    def setModelData(self, editor, model, index):
        '''
        this takes the current value of the editor widget, converts it back to a string and stores it back in the item model
        '''
        dataType = index.data(Qt.UserRole + 1)
        # string, integer, and float use a qlineedit
        if isinstance(editor, QLineEdit):
            if dataType == DataType.DATETIME.value:
                value = editor.text()
                try:
                    aNeoDateTime = DateTime.from_iso_format(value)
                    saveStr = aNeoDateTime.iso_format()
                    model.setData(index, saveStr, Qt.DisplayRole)
                except:
                    self.helper.displayErrMsg(
                        "Date Time",
                        "Entered text [{}] is not a valid ISO date time.".
                        format(value))
                    model.setData(index, value, Qt.DisplayRole)
            elif dataType == DataType.LOCALDATETIME.value:
                value = editor.text()
                try:
                    aNeoDateTime = DateTime.from_iso_format(value)
                    saveStr = aNeoDateTime.iso_format()
                    model.setData(index, saveStr, Qt.DisplayRole)
                except:
                    self.helper.displayErrMsg(
                        "Date Time",
                        "Entered text [{}] is not a valid ISO date time.".
                        format(value))
                    model.setData(index, value, Qt.DisplayRole)
            elif dataType in [DataType.LOCALTIME.value, DataType.TIME.value]:
                value = editor.text()
                try:
                    aNeoTime = Time.from_iso_format(value)
                    saveStr = aNeoTime.iso_format()
                    tz = ""
                    if aNeoTime.tzinfo is not None:
                        offset = aNeoTime.tzinfo.utcoffset(self)
                        tz = "%+03d:%02d" % divmod(
                            offset.total_seconds() // 60, 60)
                    returnStr = "{}{}".format(saveStr, tz)
                    model.setData(index, returnStr, Qt.DisplayRole)
                except:
                    self.helper.displayErrMsg(
                        "Time",
                        "Entered text [{}] is not a valid ISO time.".format(
                            value))
                    model.setData(index, value, Qt.DisplayRole)
            else:
                value = editor.text()
                model.setData(index, value, Qt.DisplayRole)
        # boolean datatype uses a listbox
        elif isinstance(editor, QComboBox):
            value = editor.currentText()
            model.setData(index, value, Qt.DisplayRole)
        elif isinstance(editor, FrmPoint):
            value = editor.getText()
            model.setData(index, value, Qt.DisplayRole)
        elif isinstance(editor, FrmGPoint):
            value = editor.getText()
            model.setData(index, value, Qt.DisplayRole)
#        elif isinstance(editor, FrmTime ):
#            value = editor.getText()
#            model.setData(index, value, Qt.DisplayRole)
#        elif isinstance(editor, FrmDateTime ):
#            value = editor.getText()
#            model.setData(index, value, Qt.DisplayRole)
        elif isinstance(editor, QDateTimeEdit):
            if dataType == DataType.DATE.value:
                value = editor.date().toString(Qt.ISODate)
                model.setData(index, value, Qt.DisplayRole)
#            if dataType == DataType.DATETIME.value:
#                value = editor.dateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")
##                print("editor datetime: {} editor string: {}".format(editor.dateTime(), value))
#                model.setData(index, value, Qt.DisplayRole)

    def updateEditorGeometry(self, editor, option, index):
        dataType = index.data(Qt.UserRole + 1)
        if isinstance(editor, FrmPoint):
            editor.setGeometry(
                QRect(option.rect.left(), option.rect.top(),
                      editor.frameGeometry().width(),
                      editor.frameGeometry().height()))
            self.editor.parent().parent().setRowHeight(
                index.row(),
                editor.frameGeometry().height())
            self.editor.parent().parent().setColumnWidth(
                index.column(),
                editor.frameGeometry().width())
        elif isinstance(editor, FrmGPoint):
            editor.setGeometry(
                QRect(option.rect.left(), option.rect.top(),
                      editor.frameGeometry().width(),
                      editor.frameGeometry().height()))
            self.editor.parent().parent().setRowHeight(
                index.row(),
                editor.frameGeometry().height())
            self.editor.parent().parent().setColumnWidth(
                index.column(),
                editor.frameGeometry().width())
        elif isinstance(editor, QDateTimeEdit):
            if dataType == DataType.DATETIME.value:
                # for some reason, the qdatetimeedit doesn't know it's width so we hard code it
                editor.setGeometry(
                    QRect(option.rect.left(), option.rect.top(), 180,
                          editor.frameGeometry().height()))
                self.editor.parent().parent().setRowHeight(
                    index.row(),
                    editor.frameGeometry().height())
                self.editor.parent().parent().setColumnWidth(
                    index.column(),
                    editor.frameGeometry().width())
            else:
                editor.setGeometry(
                    QRect(option.rect.left(), option.rect.top(), 100,
                          editor.frameGeometry().height()))
                self.editor.parent().parent().setRowHeight(
                    index.row(),
                    editor.frameGeometry().height())
                self.editor.parent().parent().setColumnWidth(
                    index.column(),
                    editor.frameGeometry().width())

        else:
            editor.setGeometry(option.rect)
Esempio n. 8
0
    def showEvent(self, *args, **kwargs):
        startup_config = self.cfg

        self.clear_layout(self.formSimple)
        self.clear_layout(self.formAdvance)
        self.configuration_inputs.clear()

        self.setWindowTitle("Create Plugin " + self.plugin_name)

        position = 0

        if 'uname' in startup_config.keys():
            value = startup_config['uname']['value']

            display_text = 'uname'

            if 'display_text' in startup_config['uname'].keys():
                display_text = startup_config['uname']['display_text']

            uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            uname = self.gui_api.change_uname_to_uniqe(uname)


            editable_field = QLineEdit(str(value))
            editable_field.setText(uname)
            editable_field.setObjectName('uname' + "_line_edit")

            self.formSimple.addRow(str(display_text) , editable_field)

            self.configuration_inputs['uname'] = editable_field

            #line_edit.selectAll()
            #line_edit.setFocus()

            position += 1

        if 'tab' in startup_config.keys():
            value = startup_config['tab']['value']

            display_text = 'Tab'

            if 'display_text' in startup_config['tab'].keys():
                display_text = startup_config['tab']['display_text']

            #uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            #uname = self.gui_api.change_uname_to_uniqe(uname)


            editable_field = QComboBox()
            tabs = list(self.TabManager.get_tabs_by_uname().keys())
            if len(tabs) == 0:
                tabs = [GUI_DEFAULT_TAB]
            tabs.sort(key=str.lower)
            editable_field.addItems(tabs)
            editable_field.setObjectName('Tab' + "_comboBox")

            self.formSimple.addRow(str(display_text) , editable_field)

            self.configuration_inputs['tab'] = editable_field


            #line_edit.selectAll()
            #line_edit.setFocus()

            position += 1

        startup_config_sorted = sorted(startup_config.items(), key=operator.itemgetter(0))

        for attr in startup_config_sorted:
            attr = attr[0]
            if attr != 'uname' and attr !='tab':
                value = startup_config[attr]['value']

                display_text = attr

                if 'display_text' in startup_config[attr].keys():
                    display_text = startup_config[attr]['display_text']


                # -------------------------------
                # Check for datatype
                # -------------------------------

                editable_field = None

                if 'type' in startup_config[attr]:
                    parameter_type = startup_config[attr]['type']

                    if parameter_type == 'bool':
                        editable_field = QCheckBox()

                        if value == '1':
                            editable_field.setChecked(True)
                        else:
                            editable_field.setChecked(False)

                    if parameter_type == 'file':
                        editable_field = FileLineEdit()
                        editable_field.setReadOnly(True)
                        editable_field.setText(value)

                    if parameter_type == 'color':
                        editable_field = ColorLineEdit()
                        editable_field.set_default_color(startup_config[attr]['value'])
                        #
                        #editable_field.setText(value)

                else:
                    editable_field = QLineEdit()

                    editable_field.setText(str(value))
                    editable_field.setObjectName(attr + "_line_edit")

                    # -------------------------------
                    # Check for regex description
                    # -------------------------------

                    if 'regex' in startup_config[attr]:
                        regex = startup_config[attr]['regex']
                        rx = QRegExp(regex)
                        validator = QRegExpValidator(rx, self)
                        editable_field.setValidator(validator)

                # -------------------------------
                # Divided in advanced or simple option
                # -------------------------------

                if 'advanced' in startup_config[attr]:
                    if startup_config[attr]['advanced'] == '1':
                        self.formAdvance.addRow(str(display_text), editable_field)
                    else:
                        self.formSimple.addRow(str(display_text), editable_field)
                else:
                    self.formSimple.addRow(str(display_text), editable_field)

                if 'tooltip' in startup_config[attr]:
                    editable_field.setToolTip(startup_config[attr]['tooltip'])



                self.configuration_inputs[attr] = editable_field

                position+=1
Esempio n. 9
0
    def showEvent(self, *args, **kwargs):
        startup_config = self.cfg

        self.clear_layout(self.formSimple)
        self.clear_layout(self.formAdvance)
        self.configuration_inputs.clear()

        self.setWindowTitle("Create Plugin " + self.plugin_name)

        position = 0

        if 'uname' in startup_config.keys():
            value = startup_config['uname']['value']

            display_text = 'uname'

            if 'display_text' in startup_config['uname'].keys():
                display_text = startup_config['uname']['display_text']

            uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            uname = self.gui_api.change_uname_to_uniqe(uname)

            editable_field = QLineEdit(str(value))
            editable_field.setText(uname)
            editable_field.setObjectName('uname' + "_line_edit")

            self.formSimple.addRow(str(display_text), editable_field)

            self.configuration_inputs['uname'] = editable_field

            #line_edit.selectAll()
            #line_edit.setFocus()

            position += 1

        if 'tab' in startup_config.keys():
            value = startup_config['tab']['value']

            display_text = 'Tab'

            if 'display_text' in startup_config['tab'].keys():
                display_text = startup_config['tab']['display_text']

            #uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            #uname = self.gui_api.change_uname_to_uniqe(uname)

            editable_field = QComboBox()
            tabs = list(self.TabManager.get_tabs_by_uname().keys())
            if len(tabs) == 0:
                tabs = [GUI_DEFAULT_TAB]
            tabs.sort(key=str.lower)
            editable_field.addItems(tabs)
            editable_field.setObjectName('Tab' + "_comboBox")

            self.formSimple.addRow(str(display_text), editable_field)

            self.configuration_inputs['tab'] = editable_field

            #line_edit.selectAll()
            #line_edit.setFocus()

            position += 1

        startup_config_sorted = sorted(startup_config.items(),
                                       key=operator.itemgetter(0))

        for attr in startup_config_sorted:
            attr = attr[0]
            if attr != 'uname' and attr != 'tab':
                value = startup_config[attr]['value']

                display_text = attr

                if 'display_text' in startup_config[attr].keys():
                    display_text = startup_config[attr]['display_text']

                # -------------------------------
                # Check for datatype
                # -------------------------------

                editable_field = None

                if 'type' in startup_config[attr]:
                    parameter_type = startup_config[attr]['type']

                    if parameter_type == 'bool':
                        editable_field = QCheckBox()

                        if value == '1':
                            editable_field.setChecked(True)
                        else:
                            editable_field.setChecked(False)

                    if parameter_type == 'file':
                        editable_field = FileLineEdit()
                        editable_field.setReadOnly(True)
                        editable_field.setText(value)

                    if parameter_type == 'color':
                        editable_field = ColorLineEdit()
                        editable_field.set_default_color(
                            startup_config[attr]['value'])
                        #
                        #editable_field.setText(value)

                else:
                    editable_field = QLineEdit()

                    editable_field.setText(str(value))
                    editable_field.setObjectName(attr + "_line_edit")

                    # -------------------------------
                    # Check for regex description
                    # -------------------------------

                    if 'regex' in startup_config[attr]:
                        regex = startup_config[attr]['regex']
                        rx = QRegExp(regex)
                        validator = QRegExpValidator(rx, self)
                        editable_field.setValidator(validator)

                # -------------------------------
                # Divided in advanced or simple option
                # -------------------------------

                if 'advanced' in startup_config[attr]:
                    if startup_config[attr]['advanced'] == '1':
                        self.formAdvance.addRow(str(display_text),
                                                editable_field)
                    else:
                        self.formSimple.addRow(str(display_text),
                                               editable_field)
                else:
                    self.formSimple.addRow(str(display_text), editable_field)

                if 'tooltip' in startup_config[attr]:
                    editable_field.setToolTip(startup_config[attr]['tooltip'])

                self.configuration_inputs[attr] = editable_field

                position += 1
Esempio n. 10
0
class QueryRowWgt(QWidget):

    valueTypeChanged = pyqtSignal(object)

    ontoMng = OntoManager()
    treeData = ontoMng.trees
    dicData = ontoMng.dics

    tagNames = np.array(list(dicData.values()))
    del dicData
    del treeData

    def __init__(self, searchType, parent=None):
        super().__init__(parent)

        self.searchType = searchType
        self.valueType = QComboBox(self)
        self.valueType.addItem("")

        if self.searchType == "Annotation":
            self.valueType.addItems(annotationKeys)
        elif self.searchType == "Parameter":
            self.valueType.addItems(parameterKeys)
        else:
            raise ValueError()

        self.valueType.currentIndexChanged.connect(self.valueTypeChangedEmit)

        self.value = QLineEdit(self)
        self.value.setEnabled(False)

        self.layout = QHBoxLayout(self)
        self.layout.addWidget(self.valueType)
        self.layout.addWidget(self.value)

    def valueTypeChangedEmit(self):
        self.value.setEnabled(self.valueType.currentText() != "")

        child = self.layout.takeAt(1)
        child.widget().deleteLater()
        if self.valueType.currentText() == "Has parameter":
            self.value = QComboBox(self)
            self.value.addItems(["False", "True"])
        elif self.valueType.currentText() == "Annotation type":
            self.value = QComboBox(self)
            self.value.addItems(
                ["text", "figure", "table", "equation", "position"])
        elif self.valueType.currentText() == "Parameter name":
            self.value = ParamTypeCbo(self)
        elif self.valueType.currentText() in ["Tag name", "Required tag name"]:
            self.value = AutoCompleteEdit(self)
            self.value.setModel(QueryRowWgt.tagNames)
        elif self.valueType.currentText() == "Result type":
            self.value = QComboBox(self)
            self.value.addItems(["pointValue", "function", "numericalTrace"])
        else:
            self.value = QLineEdit(self)

        self.layout.addWidget(self.value)
        self.valueTypeChanged.emit(self)

    def getQuery(self):
        if self.valueType.currentText() == "":
            return None

        if isinstance(self.value, QLineEdit):
            value = self.value.text()
        elif isinstance(self.value, QComboBox):
            value = self.value.currentText()
        else:
            raise TypeError

        return ConditionAtom(self.valueType.currentText(), value)
Esempio n. 11
0
    def showEvent(self, *args, **kwargs):
        """
        This function is called before the dialog is displayed.

        :param args:
        :param kwargs:
        :return:
        """
        startup_config = self.cfg

        for form in self.advancedForms:
            self.clear_layout(self.advancedForms[form])

        self.configuration_inputs.clear()

        self.setWindowTitle("Create Plugin " + self.plugin_name)

        position = 0

        if 'uname' in startup_config.keys():
            value = startup_config['uname']['value']

            display_text = 'Unique name'

            if 'display_text' in startup_config['uname'].keys():
                display_text = startup_config['uname']['display_text']

            uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            uname = self.gui_api.change_uname_to_uniqe(uname)

            editable_field = QLineEdit(str(value))
            editable_field.setText(uname)
            editable_field.setObjectName('uname' + "_line_edit")
            editable_field.setToolTip('Name as identifier in PaPI. Must be UNIQUE')

            form_name = 'PaPI -mandatory'
            if form_name not in self.advancedForms:
                self.advancedForms[form_name] = QFormLayout()
                tab_widget = QWidget()

                self.tabWidget.addTab(tab_widget, form_name)
                vlayout = QVBoxLayout(tab_widget)
                vlayout.addLayout(self.advancedForms[form_name])

            self.advancedForms[form_name].addRow(str(display_text), editable_field)

            self.configuration_inputs['uname'] = editable_field

            position += 1

        startup_config_sorted = startup_config.items()
        if not isinstance(startup_config, collections.OrderedDict):
            startup_config_sorted = sorted(startup_config.items(), key=operator.itemgetter(0))

        for attr in startup_config_sorted:
            attr = attr[0]
            if attr != 'uname':
                value = startup_config[attr]['value']

                display_text = attr

                if 'display_text' in startup_config[attr].keys():
                    display_text = startup_config[attr]['display_text']

                # -------------------------------
                # Check for datatype
                # -------------------------------

                editable_field = None

                if attr != 'tab':

                    if 'type' in startup_config[attr]:
                        parameter_type = startup_config[attr]['type']

                        if parameter_type == 'bool':
                            editable_field = QCheckBox()

                            if value == '1':
                                editable_field.setChecked(True)
                            else:
                                editable_field.setChecked(False)

                        if parameter_type == 'file':
                            editable_field = FileLineEdit()
                            editable_field.setReadOnly(True)
                            editable_field.setText(value)

                        if parameter_type == 'color':
                            editable_field = ColorLineEdit()
                            editable_field.set_default_color(startup_config[attr]['value'])
                            #
                            # editable_field.setText(value)

                    else:
                        editable_field = QLineEdit()

                        editable_field.setText(str(value))
                        editable_field.setObjectName(attr + "_line_edit")

                        # -------------------------------
                        # Check for regex description
                        # -------------------------------

                        if 'regex' in startup_config[attr]:
                            regex = startup_config[attr]['regex']
                            rx = QRegExp(regex)
                            validator = QRegExpValidator(rx, self)
                            editable_field.setValidator(validator)
                else:
                    editable_field = QComboBox()
                    tabs = list(self.tab_manager.get_tabs_by_uname().keys())
                    if len(tabs) == 0:
                        tabs = [GUI_DEFAULT_TAB]
                    tabs.sort(key=str.lower)
                    editable_field.addItems(tabs)
                    editable_field.setObjectName('Tab' + "_comboBox")
                # -------------------------------
                # Divided in advanced or simple option
                # -------------------------------

                if 'advanced' in startup_config[attr]:

                    form_name = startup_config[attr]['advanced']
                else:
                    form_name = 'PaPI -mandatory'

                if form_name in ['0', 0]:
                    form_name = 'PaPI -mandatory'

                if form_name == '1':
                    form_name = 'Advanced'

                if form_name not in self.advancedForms:
                    self.advancedForms[form_name] = QFormLayout()
                    tab_widget = QWidget()

                    self.tabWidget.addTab(tab_widget, form_name)
                    vlayout = QVBoxLayout(tab_widget)
                    vlayout.addLayout(self.advancedForms[form_name])

                self.advancedForms[form_name].addRow(str(display_text), editable_field)

                if 'tooltip' in startup_config[attr]:
                    editable_field.setToolTip(startup_config[attr]['tooltip'])

                self.configuration_inputs[attr] = editable_field

                position += 1
Esempio n. 12
0
    def __init__(self, title, controls, parent=None):
        """title => Dialog's title.
        controls is a list of 3-element-lists.

        The three 3-element lists consist of:
            description => Descriptive label for the control.
            control_type => One of TEXT, COMBO, CHECKBOX corresponding
                to a QLineEdit, QComboBox and QCheckBox being created
                respectively.
            default => Default arguments.
                Can be any string for TEXT,
                Must be a list of strings for COMBO as these will form the
                    items selectable by the combo box.
                Can be either True or False for CheckBox.

        A dialog will be created with vertical layout. Like so:
            <label>
            <control>
            <label>
            <control>

        When the user has finished editing an 'editingFinished' signal
        will be emitted containing a list with the new value.

        The list will consist of the value for each control in the order
        given. For TEXT it'll a string. COMBO an integer corresponding to
        the selected index. True or False for CHECK.
        """

        QDialog.__init__(self, parent)
        vbox = QVBoxLayout()
        self._controls = []
        winsettings(title, self)
        self.setWindowTitle(translate("WebDB", 'Configure: %s') % title)
        for desc, ctype, default in controls:
            if ctype == TEXT:
                control = QLineEdit(default)
                vbox.addLayout(create_buddy(desc, control))
            elif ctype == COMBO:
                control = QComboBox()
                control.addItems(default[0])
                control.setCurrentIndex(default[1])
                label = QLabel(desc)
                label.setBuddy(control)
                vbox.addWidget(label)
                vbox.addWidget(control)
            elif ctype == CHECKBOX:
                control = QCheckBox(desc)
                if default:
                    control.setCheckState(Qt.CheckState.Checked)
                else:
                    control.setCheckState(Qt.CheckState.Unchecked)
                vbox.addWidget(control)
            elif ctype == SPINBOX:
                control = QSpinBox()
                control.setMinimum(default[0])
                control.setMaximum(default[1])
                control.setValue(default[2])
                vbox.addLayout(create_buddy(desc, control))

            self._controls.append(control)
        okcancel = OKCancel()
        okcancel.ok.connect(self.okClicked)
        okcancel.cancel.connect(self.close)
        vbox.addLayout(okcancel)
        vbox.addStretch()
        self.setLayout(vbox)
Esempio n. 13
0
def add_property_to_form(label: str,
                         dtype: Union[Type, str],
                         default_value=None,
                         valid_values=None,
                         tooltip=None,
                         on_change=None,
                         form=None,
                         filters_view=None,
                         run_on_press=None,
                         single_step_size=None) -> Tuple[Union[QLabel, QLineEdit], Any]:
    """
    Adds a property to the algorithm dialog.

    Handles adding basic data options to the UI.

    :param label: Label that describes the option
    :param dtype: Option data type (any of: file, int, float, bool, list)
    :param default_value: Optionally select the default value
    :param valid_values: Optionally provide the range or selection of valid
                         values
    :param tooltip: Optional tooltip text to show on property
    :param on_change: Function to be called when the property changes
    :param form: Form layout to optionally add the new widgets to
    :param filters_view: The Filter window view - passed to connect Type.STACK to the stack change events
    :param run_on_press: Run this function on press, specialisation for button.
    :param single_step_size: Optionally provide a step size for a SpinBox widget.
    """
    # By default assume the left hand side widget will be a label
    left_widget = QLabel(label)
    right_widget = None

    # sanitize default value
    if isinstance(default_value, str) and default_value.lower() == "none":
        default_value = None

    def set_spin_box(box, cast_func):
        """
        Helper function to set default options on a spin box.
        """
        if valid_values:
            box.setMinimum(valid_values[0])
            box.setMaximum(valid_values[1])
        else:
            box.setMinimum(0)
            box.setMaximum(10000)

        if default_value:
            box.setValue(cast_func(default_value))

        if single_step_size is not None:
            box.setSingleStep(single_step_size)
        elif cast_func == float:
            # Override the default step size for QDoubleSpinBox
            box.setSingleStep(0.1)

    if dtype in ['str', Type.STR, 'tuple', Type.TUPLE, 'NoneType', Type.NONETYPE, 'list', Type.LIST]:
        # TODO for tuple with numbers add N combo boxes, N = number of tuple members
        right_widget = QLineEdit()
        right_widget.setToolTip(tooltip)
        right_widget.setText(default_value)

        if on_change is not None:
            right_widget.editingFinished.connect(lambda: on_change())

    elif dtype == 'int' or dtype == Type.INT:
        right_widget = QSpinBox()
        right_widget.setKeyboardTracking(False)
        set_spin_box(right_widget, int)
        if on_change is not None:
            right_widget.valueChanged.connect(lambda: on_change_and_disable(right_widget, on_change))

    elif dtype == 'float' or dtype == Type.FLOAT:
        right_widget = QDoubleSpinBox()
        set_spin_box(right_widget, float)
        right_widget.setKeyboardTracking(False)
        if on_change is not None:
            right_widget.valueChanged.connect(lambda: on_change_and_disable(right_widget, on_change))

    elif dtype == 'bool' or dtype == Type.BOOL:
        right_widget = QCheckBox()
        if isinstance(default_value, bool):
            right_widget.setChecked(default_value)
        elif isinstance(default_value, str):
            right_widget.setChecked("True" == default_value)
        elif default_value is None:
            # have to pick something
            right_widget.setChecked(False)
        else:
            raise ValueError(f"Cannot convert value {default_value} to a Boolean.")

        if on_change is not None:
            right_widget.stateChanged[int].connect(lambda: on_change())

    elif dtype == "choice" or dtype == Type.CHOICE:
        right_widget = QComboBox()
        right_widget.setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy.AdjustToContents)
        if valid_values:
            right_widget.addItems(valid_values)
        if on_change is not None:
            right_widget.currentIndexChanged[int].connect(lambda: on_change())

    elif dtype == 'stack' or dtype == Type.STACK:
        from mantidimaging.gui.widgets.stack_selector import StackSelectorWidgetView
        right_widget = StackSelectorWidgetView(filters_view)
        if on_change is not None:
            right_widget.currentIndexChanged[int].connect(lambda: on_change())

    elif dtype == 'button' or dtype == Type.BUTTON:
        left_widget = QPushButton(label)
        if run_on_press is not None:
            left_widget.clicked.connect(lambda: run_on_press())

    elif dtype == 'label' or dtype == Type.LABEL:
        # do nothing for label, just use the left widget
        pass

    else:
        raise ValueError("Unknown data type")

    if tooltip:
        if left_widget:
            left_widget.setToolTip(tooltip)

        if right_widget:
            right_widget.setToolTip(tooltip)

    # right widget check avoids printing debug msg for labels only
    if tooltip is None and right_widget is not None:
        log = getLogger(__name__)
        log.debug("Missing tooltip for %s", label)

    if left_widget:
        left_widget.setSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed)

    if right_widget:
        right_widget.setSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed)
    # Add to form layout
    if form is not None:
        form.addRow(left_widget, right_widget)

    return left_widget, right_widget
Esempio n. 14
0
    def showEvent(self, *args, **kwargs):
        """
        This function is called before the dialog is displayed.

        :param args:
        :param kwargs:
        :return:
        """
        startup_config = self.cfg

        for form in self.advancedForms:
            self.clear_layout(self.advancedForms[form])

        self.configuration_inputs.clear()

        self.setWindowTitle("Create Plugin " + self.plugin_name)

        position = 0

        if 'uname' in startup_config.keys():
            value = startup_config['uname']['value']

            display_text = 'Unique name'

            if 'display_text' in startup_config['uname'].keys():
                display_text = startup_config['uname']['display_text']

            uname = self.gui_api.do_change_string_to_be_uname(self.plugin_name)
            uname = self.gui_api.change_uname_to_uniqe(uname)

            editable_field = QLineEdit(str(value))
            editable_field.setText(uname)
            editable_field.setObjectName('uname' + "_line_edit")
            editable_field.setToolTip(
                'Name as identifier in PaPI. Must be UNIQUE')

            form_name = 'PaPI -mandatory'
            if form_name not in self.advancedForms:
                self.advancedForms[form_name] = QFormLayout()
                tab_widget = QWidget()

                self.tabWidget.addTab(tab_widget, form_name)
                vlayout = QVBoxLayout(tab_widget)
                vlayout.addLayout(self.advancedForms[form_name])

            self.advancedForms[form_name].addRow(str(display_text),
                                                 editable_field)

            self.configuration_inputs['uname'] = editable_field

            position += 1

        startup_config_sorted = startup_config.items()
        if not isinstance(startup_config, collections.OrderedDict):
            startup_config_sorted = sorted(startup_config.items(),
                                           key=operator.itemgetter(0))

        for attr in startup_config_sorted:
            attr = attr[0]
            if attr != 'uname':
                value = startup_config[attr]['value']

                display_text = attr

                if 'display_text' in startup_config[attr].keys():
                    display_text = startup_config[attr]['display_text']

                # -------------------------------
                # Check for datatype
                # -------------------------------

                editable_field = None

                if attr != 'tab':

                    if 'type' in startup_config[attr]:
                        parameter_type = startup_config[attr]['type']

                        if parameter_type == 'bool':
                            editable_field = QCheckBox()

                            if value == '1':
                                editable_field.setChecked(True)
                            else:
                                editable_field.setChecked(False)

                        if parameter_type == 'file':
                            editable_field = FileLineEdit()
                            editable_field.setReadOnly(True)
                            editable_field.setText(value)

                        if parameter_type == 'color':
                            editable_field = ColorLineEdit()
                            editable_field.set_default_color(
                                startup_config[attr]['value'])
                            #
                            # editable_field.setText(value)

                    else:
                        editable_field = QLineEdit()

                        editable_field.setText(str(value))
                        editable_field.setObjectName(attr + "_line_edit")

                        # -------------------------------
                        # Check for regex description
                        # -------------------------------

                        if 'regex' in startup_config[attr]:
                            regex = startup_config[attr]['regex']
                            rx = QRegExp(regex)
                            validator = QRegExpValidator(rx, self)
                            editable_field.setValidator(validator)
                else:
                    editable_field = QComboBox()
                    tabs = list(self.tab_manager.get_tabs_by_uname().keys())
                    if len(tabs) == 0:
                        tabs = [GUI_DEFAULT_TAB]
                    tabs.sort(key=str.lower)
                    editable_field.addItems(tabs)
                    editable_field.setObjectName('Tab' + "_comboBox")
                # -------------------------------
                # Divided in advanced or simple option
                # -------------------------------

                if 'advanced' in startup_config[attr]:

                    form_name = startup_config[attr]['advanced']
                else:
                    form_name = 'PaPI -mandatory'

                if form_name in ['0', 0]:
                    form_name = 'PaPI -mandatory'

                if form_name == '1':
                    form_name = 'Advanced'

                if form_name not in self.advancedForms:
                    self.advancedForms[form_name] = QFormLayout()
                    tab_widget = QWidget()

                    self.tabWidget.addTab(tab_widget, form_name)
                    vlayout = QVBoxLayout(tab_widget)
                    vlayout.addLayout(self.advancedForms[form_name])

                self.advancedForms[form_name].addRow(str(display_text),
                                                     editable_field)

                if 'tooltip' in startup_config[attr]:
                    editable_field.setToolTip(startup_config[attr]['tooltip'])

                self.configuration_inputs[attr] = editable_field

                position += 1
class MaterialFrame:
    def __init__(self, parent, box_type='select'):
        super().__init__()
        self.parent = parent
        self.box_type = box_type
        self.material = MaterialProperties()
        self.material_name = ''

        self.boxGroup = QGroupBox('Material Settings', self.parent)
        self.gridLayout = QGridLayout(self.boxGroup)

        self.materialBoxGroup = QGroupBox('', self.boxGroup)
        self.miniLayout = QHBoxLayout(self.materialBoxGroup)
        self.label_mat_name = QLabel(self.materialBoxGroup)
        self.label_mat_name.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.material_name_widget = QComboBox()

        self.miniLayout.addWidget(self.label_mat_name)
        # self.miniLayout.addWidget(self.material_name_wid)
        self.materialBoxGroup.setLayout(self.miniLayout)

        self.label_Density = QLabel('Density (kg/m^3)', self.boxGroup)
        self.label_Density.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_Density = QLineEdit(self.boxGroup)

        self.label_spHeat = QLabel('Specific Heat (J/kg.K)', self.boxGroup)
        self.label_spHeat.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_spHeat = QLineEdit(self.boxGroup)

        self.label_Conductivity = QLabel('Thermal Conductivity (W/m.K)',
                                         self.boxGroup)
        self.label_Conductivity.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_Conductivity = QLineEdit(self.boxGroup)

        self.label_meltPt = QLabel('Melting Temperature (K)', self.boxGroup)
        self.label_meltPt.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_meltPt = QLineEdit(self.boxGroup)

        self.label_Emissivity = QLabel('Emissivity (0-1)', self.boxGroup)
        self.label_Emissivity.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_Emissivity = QLineEdit(self.boxGroup)

        self.label_Reflect = QLabel('Reflectivity (0-1)', self.boxGroup)
        self.label_Reflect.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.entry_Reflect = QLineEdit(self.boxGroup)

        self.label_blank = QLabel(' ', self.boxGroup)
        self.label_blank.setFixedWidth(60)

        self.gridLayout.addWidget(self.materialBoxGroup, 0, 0, 1, 3)

        self.gridLayout.addWidget(self.label_Density, 1, 0)
        self.gridLayout.addWidget(self.entry_Density, 1, 1)
        self.gridLayout.addWidget(self.label_blank, 1, 2)
        self.gridLayout.addWidget(self.label_spHeat, 1, 3)
        self.gridLayout.addWidget(self.entry_spHeat, 1, 4)

        self.gridLayout.addWidget(self.label_Conductivity, 2, 0)
        self.gridLayout.addWidget(self.entry_Conductivity, 2, 1)
        self.gridLayout.addWidget(self.label_meltPt, 2, 3)
        self.gridLayout.addWidget(self.entry_meltPt, 2, 4)

        self.gridLayout.addWidget(self.label_Emissivity, 3, 0)
        self.gridLayout.addWidget(self.entry_Emissivity, 3, 1)
        self.gridLayout.addWidget(self.label_Reflect, 3, 3)
        self.gridLayout.addWidget(self.entry_Reflect, 3, 4)

        self.boxGroup.setLayout(self.gridLayout)
        if self.box_type == 'entry':
            self.new_material_entry()
        else:
            self.material_select_box()
            self.material_name_widget.activated[str].connect(
                self.on_material_select)

    def material_select_box(self):
        self.label_mat_name.setText('Select Material')
        self.material_name_widget = QComboBox(self.materialBoxGroup)
        self.miniLayout.addWidget(self.material_name_widget)
        self.update_material_combobox()

    def new_material_entry(self):
        self.label_mat_name.setText('Enter Material Name')
        self.material_name_widget = QLineEdit(self.materialBoxGroup)
        self.miniLayout.addWidget(self.material_name_widget)

    def update_material_combobox(self):
        self.material_name_widget.clear()
        self.material.get_material_list()
        self.material_name_widget.addItems(self.material.material_list)

    def on_material_select(self, text):
        self.material_name = text
        self.material.read_from_json(self.material_name)
        self.entry_Density.setText(str(self.material.density))
        self.entry_spHeat.setText(str(self.material.specific_heat))
        self.entry_Conductivity.setText(str(self.material.conductivity))
        self.entry_meltPt.setText(str(self.material.melting_point))
        self.entry_Emissivity.setText(str(self.material.emissivity))
        self.entry_Reflect.setText(str(self.material.reflectivity))

        print(self.material_name, self.entry_Density.text())