class StringEditor(BaseEditor, object): attr_type = 'str' def __init__(self, parent=None, **kwargs): super(StringEditor, self).__init__(parent=parent, **kwargs) self._default_value = "" self._clean_value = kwargs.get('clean', True) self.value_line = QLineEdit(self) reg_exp = QRegExp('^([a-zA-Z0-9_]+)') self.main_layout.addWidget(self.value_line) self.value_line.textEdited.connect(self._validate_text) self.value_line.editingFinished.connect(self.OnValueUpdated) self.value_line.returnPressed.connect(self.OnValueUpdated) def get_value(self): return str(self.value_line.text()) value = property(get_value) def initialize_editor(self): editor_value = self.default_value node_values = self.values if node_values: if len(node_values) > 1: pass elif len(node_values) == 1: if node_values[0]: editor_value = node_values[0] self.value_line.blockSignals(True) self.value_line.setText(str(editor_value)) self.value_line.blockSignals(False) def set_connected(self, conn): if conn != self._connection: self._connection = conn self.value_line.setText(conn) self.value_line.setEnabled(False) self.value_line.setProperty('class', 'Connected') def _validate_text(self, text): """ Validates the given value and update the current text :param text: str, text to validate """ current_text = self.value if self._clean_value: cursor_pos = self.value_line.cursorPosition() cleaned = string_utils.clean_string(text=text) self.value_line.blockSignals(True) self.value_line.setText(cleaned) self.value_line.blockSignals(False) self.value_line.setCursorPosition(cursor_pos)
class NoneInputWidget(InputWidgetSingle): """ String data input widget """ def __init__(self, parent=None, **kwds): super(NoneInputWidget, self).__init__(parent=parent, **kwds) self.le = QLineEdit(self) self.le.setContextMenuPolicy(QtCore.Qt.NoContextMenu) self.setWidget(self.le) self.le.textChanged.connect(lambda val: self.dataSetCallback(val)) self.le.setEnabled(False) def setWidgetValue(self, val): self.le.setText(str(val))
def ui(self): self.setLayout(layouts.VerticalLayout(spacing=0, margins=(3, 1, 3, 3))) self.main_layout = layouts.VerticalLayout(spacing=5, margins=(2, 2, 2, 2)) main_widget = QWidget() if self._item_height: main_widget.setFixedHeight(self._item_height - self._height_offset) if self._item_width: main_widget.setFixedWidth(self._item_width - self._width_offset) main_widget.setLayout(self.main_layout) self.layout().addWidget(main_widget) # ===================================================== # This layout is used to add custom widgets before the title of the node self.buttons_layout = layouts.VerticalLayout(spacing=2, margins=(2, 2, 2, 2)) title_layout = layouts.HorizontalLayout() title_layout.addLayout(self.buttons_layout) title_line = QLineEdit('Untitled') if not self._editable_title: title_line.setEnabled(False) if self._has_title: title_layout.addWidget(title_line) self._close_btn = QPushButton('X') self._close_btn.setFixedHeight(20) self._close_btn.setFixedWidth(20) self._close_btn.clicked.connect(self.close_widget) if self._is_closable: title_layout.addWidget(self._close_btn) self.main_layout.addLayout(title_layout)