def flagChanged(self): """ Executed whenever one of the property fields changes. """ node = self.node scene = node.scene() sender = self.sender() checked = sender.isChecked() attribute = sender.property('attribute') prop = RE_CAMEL_SPACE.sub('\g<1> \g<2>', attribute).lower() name = '{}set {} {} property'.format('un' if checked else '', node.shortname, prop) data = {'attribute': attribute, 'undo': getattr(node, attribute), 'redo': checked} scene.undostack.push(CommandSetProperty(scene, node, data, name))
def flagChanged(self): """ Executed whenever one of the property fields changes. """ node = self.node scene = node.scene() sender = self.sender() checked = sender.isChecked() attribute = sender.property('attribute') prop = RE_CAMEL_SPACE.sub('\g<1> \g<2>', attribute).lower() name = '{}set {} {} property'.format('un' if checked else '', node.shortname, prop) data = { 'attribute': attribute, 'undo': getattr(node, attribute), 'redo': checked } scene.undostack.push(CommandSetProperty(scene, node, data, name))
def realName(self): """ Returns the item readable name, i.e: attribute node, concept node. :rtype: str """ return RE_CAMEL_SPACE.sub('\g<1> \g<2>', self.name).lower()
def __init__(self, collection, parent=None): """ Initialize the project dialog. :type collection: T <= list | tuple :type parent: QWidget """ super().__init__(parent) self.collection = sorted(collection, key=itemgetter(K_ITEM, K_NAME)) ############################################# # CHECKBOX WIDGETS ################################# self.marks = {K_CURRENT: {}, K_IMPORTING: {}, K_FINAL: {}} for e in self.collection: ## CREATE CURRENT CHECKBOX mark = CheckBox(self) mark.setEnabled(False) mark.setChecked(e[K_CURRENT]) if e[K_ITEM] not in self.marks[K_CURRENT]: self.marks[K_CURRENT][e[K_ITEM]] = {} if e[K_NAME] not in self.marks[K_CURRENT][e[K_ITEM]]: self.marks[K_CURRENT][e[K_ITEM]][e[K_NAME]] = {} self.marks[K_CURRENT][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]] = mark ## CREATE IMPORTING CHECKBOX mark = CheckBox(self) mark.setEnabled(False) mark.setChecked(e[K_IMPORTING]) if e[K_ITEM] not in self.marks[K_IMPORTING]: self.marks[K_IMPORTING][e[K_ITEM]] = {} if e[K_NAME] not in self.marks[K_IMPORTING][e[K_ITEM]]: self.marks[K_IMPORTING][e[K_ITEM]][e[K_NAME]] = {} self.marks[K_IMPORTING][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]] = mark ## CREATE FINAL CHECKBOX mark = CheckBox(self) mark.setEnabled(True) mark.setTristate(True) mark.setCheckState(QtCore.Qt.PartiallyChecked) connect(mark.stateChanged, self.onMarkStateChanged) if e[K_ITEM] not in self.marks[K_FINAL]: self.marks[K_FINAL][e[K_ITEM]] = {} if e[K_NAME] not in self.marks[K_FINAL][e[K_ITEM]]: self.marks[K_FINAL][e[K_ITEM]][e[K_NAME]] = {} self.marks[K_FINAL][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]] = mark ############################################# # BUTTONS & PLACEHOLDERS ################################# # widget = QtWidgets.QLabel(self) # widget.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) # widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) # widget.setObjectName('title_type') # widget.setText('Type') # self.addWidget(widget) # widget = QtWidgets.QLabel(self) # widget.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) # widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) # widget.setObjectName('title_name') # widget.setText('Name') # self.addWidget(widget) # widget = QtWidgets.QLabel(self) # widget.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) # widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) # widget.setObjectName('title_property') # widget.setText('Property') # self.addWidget(widget) widget = QtWidgets.QLabel(self) widget.setAlignment(QtCore.Qt.AlignCenter) widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) widget.setObjectName('title_current') widget.setText('Current') self.addWidget(widget) widget = QtWidgets.QLabel(self) widget.setAlignment(QtCore.Qt.AlignCenter) widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) widget.setObjectName('title_final') widget.setText('Final') self.addWidget(widget) widget = QtWidgets.QLabel(self) widget.setAlignment(QtCore.Qt.AlignCenter) widget.setFont(Font('Roboto', 14, bold=True, capitalization=Font.AllUppercase)) widget.setObjectName('title_importing') widget.setText('Importing') self.addWidget(widget) # widget = QtWidgets.QLabel(self) # widget.setFixedSize(QtCore.QSize(24, 24)) # widget.setPixmap(QtGui.QIcon(':/icons/24/ic_compare_arrows_black').pixmap(24)) # widget.setObjectName('compare_arrows_current_icon') # self.addWidget(widget) # widget = QtWidgets.QLabel(self) # widget.setFixedSize(QtCore.QSize(24, 24)) # widget.setPixmap(QtGui.QIcon(':/icons/24/ic_compare_arrows_black').pixmap(24)) # widget.setObjectName('compare_arrows_importing_icon') # self.addWidget(widget) widget = PHCQPushButton(self) widget.setAutoDefault(False) widget.setDefault(False) widget.setProperty('class', 'flat blue') widget.setFixedWidth(32) widget.setIcon(QtGui.QIcon(':/icons/24/ic_keyboard_arrow_right_black')) widget.setIconSize(QtCore.QSize(24, 24)) widget.setObjectName('pick_current_button') widget.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) connect(widget.clicked, self.doPickBooleanSet) self.addWidget(widget) widget = PHCQPushButton(self) widget.setAutoDefault(False) widget.setDefault(False) widget.setProperty('class', 'flat blue') widget.setFixedWidth(32) widget.setIcon(QtGui.QIcon(':/icons/24/ic_keyboard_arrow_left_black')) widget.setIconSize(QtCore.QSize(24, 24)) widget.setObjectName('pick_importing_button') widget.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) connect(widget.clicked, self.doPickBooleanSet) self.addWidget(widget) ############################################# # CONFIRMATION AREA ################################# widget = QtWidgets.QDialogButtonBox(QtCore.Qt.Horizontal, self) widget.addButton(QtWidgets.QDialogButtonBox.Ok) widget.addButton(QtWidgets.QDialogButtonBox.Abort) widget.setContentsMargins(0, 4, 0, 0) widget.setFont(Font('Roboto', 12)) widget.setObjectName('confirmation_box') widget.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(False) connect(widget.accepted, self.accept) connect(widget.rejected, self.reject) self.addWidget(widget) ############################################# # SETUP DIALOG LAYOUT ################################# gridWidget = QtWidgets.QWidget(self) gridLayout = QtWidgets.QGridLayout(gridWidget) gridLayout.setContentsMargins(0, 0, 0, 0) #gridLayout.addWidget(self.widget('title_type'), 0, 0) #gridLayout.addWidget(self.widget('title_name'), 0, 1) #gridLayout.addWidget(self.widget('title_property'), 0, 2) gridLayout.addWidget(self.widget('title_current'), 0, 3) gridLayout.addWidget(self.widget('title_final'), 0, 5) gridLayout.addWidget(self.widget('title_importing'), 0, 7) #gridLayout.addWidget(self.widget('compare_arrows_current_icon'), 0, 4, QtCore.Qt.AlignCenter) #gridLayout.addWidget(self.widget('compare_arrows_importing_icon'), 0, 6, QtCore.Qt.AlignCenter) for row, e in enumerate(self.collection, start=1): w_type = QtWidgets.QLabel(self) w_type.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) w_type.setFont(Font('Roboto', 12)) w_type.setText(e[K_ITEM].shortName.title()) w_name = QtWidgets.QLabel(self) w_name.setContentsMargins(40, 0, 40, 0) w_name.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) w_name.setFont(Font('Roboto', 12, italic=True)) w_name.setText(e[K_NAME]) w_prop = QtWidgets.QLabel(self) w_prop.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) w_prop.setFont(Font('Roboto', 14, bold=True, capitalization=Font.SmallCaps)) w_prop.setText(RE_CAMEL_SPACE.sub('\g<1> \g<2>', e[K_PROPERTY]).lower()) gridLayout.addWidget(w_type, row, 0) gridLayout.addWidget(w_name, row, 1) gridLayout.addWidget(w_prop, row, 2) gridLayout.addWidget(self.marks[K_CURRENT][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]], row, 3, QtCore.Qt.AlignCenter) gridLayout.addWidget(self.marks[K_FINAL][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]], row, 5, QtCore.Qt.AlignCenter) gridLayout.addWidget(self.marks[K_IMPORTING][e[K_ITEM]][e[K_NAME]][e[K_PROPERTY]], row, 7, QtCore.Qt.AlignCenter) gridLayout.addWidget(self.widget('pick_current_button'), 1, 4, len(self.collection), 1) gridLayout.addWidget(self.widget('pick_importing_button'), 1, 6, len(self.collection), 1) mainLayout = QtWidgets.QVBoxLayout() mainLayout.addWidget(gridWidget) mainLayout.addWidget(self.widget('confirmation_box')) mainLayout.setContentsMargins(10, 10, 10, 10) self.setLayout(mainLayout) self.setFixedSize(self.sizeHint()) self.setFont(Font('Roboto', 12)) self.setWindowIcon(QtGui.QIcon(':/icons/128/ic_eddy')) self.setWindowTitle("Resolve conflicts...")