Entry::Entry() : m_attributes(new EntryAttributes(this)) , m_attachments(new EntryAttachments(this)) , m_autoTypeAssociations(new AutoTypeAssociations(this)) , m_tmpHistoryItem(Q_NULLPTR) , m_updateTimeinfo(true) { m_data.iconNumber = DefaultIconNumber; m_data.autoTypeEnabled = true; m_data.autoTypeObfuscation = 0; connect(m_attributes, SIGNAL(modified()), this, SIGNAL(modified())); connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged())); connect(m_attachments, SIGNAL(modified()), this, SIGNAL(modified())); connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(modified())); connect(this, SIGNAL(modified()), SLOT(updateTimeinfo())); connect(this, SIGNAL(modified()), SLOT(updateModifiedSinceBegin())); }
void EntryAttributes::set(const QString& key, const QString& value, bool protect) { bool emitModified = false; bool addAttribute = !m_attributes.contains(key); bool changeValue = !addAttribute && (m_attributes.value(key) != value); bool defaultAttribute = isDefaultAttribute(key); if (addAttribute && !defaultAttribute) { Q_EMIT aboutToBeAdded(key); } if (addAttribute || changeValue) { m_attributes.insert(key, value); emitModified = true; } if (protect) { if (!m_protectedAttributes.contains(key)) { emitModified = true; } m_protectedAttributes.insert(key); } else if (m_protectedAttributes.remove(key)) { emitModified = true; } if (emitModified) { Q_EMIT modified(); } if (defaultAttribute && changeValue) { Q_EMIT defaultKeyModified(); } else if (addAttribute) { Q_EMIT added(key); } else if (emitModified) { Q_EMIT customKeyModified(key); } }