void SafeListView::startDrag() { DBGOUT("Drag started (is targe child: " << m_target_is_child << ")"); SafeDragObject *d = new SafeDragObject(viewport()); Q3ListViewItemIterator it(this, Q3ListViewItemIterator::Selected | Q3ListViewItemIterator::DragEnabled); for(; it.current(); ++it) { SafeListViewItem *item = (SafeListViewItem *)it.current(); d->addItem(item->item()); // copy the user name to the clipboard if(item->rtti() == SafeListViewEntry::RTTI) { SafeEntry *ent = ((SafeListViewEntry *)item)->entry(); copyToClipboard(ent->user()); } } m_drop_target = NULL; m_target_is_child = false; bool drag_ret = d->drag(); DBGOUT("\tdrag() returned " << drag_ret); DBGOUT("\tsrc: " << d->source() << "\ttarget: " << d->target()); // drag was a move if(drag_ret) { DBGOUT("\tMove"); // prevent drops from doing anything when they occur on a child // of the dragged object if(m_target_is_child) { QMessageBox::information(this, "Sorry", "Sorry, but items can't be dragged into their children"); } // delete the item if it's dropped onto this else if(d->source() == d->target()) { // remove the item from the list SafeListViewItem *item = (SafeListViewItem *)selectedItem(); emit deleteItem(item->item()); } } // drag was a copy onto a child else { DBGOUT("\tCopy"); if(m_target_is_child) emit dragObjectDropped(d, m_drop_target); } DBGOUT("\t" << name() << ": Drag ended"); }
void SafeEntry::copy(const SafeEntry &item) { setName(item.name()); setUser(item.user()); setPassword(item.password()); setNotes(item.notes()); setUUID(item.uuid()); setCreationTime(item.creationTime()); setModifiedTime(item.modifiedTime()); setAccessTime(item.accessTime()); setLifetime(item.lifetime()); for(int i = 0; i < 4; i++) { m_policy[i] = item.m_policy[i]; } }
void SafeDragObject::addItem(SafeItem *item) { if(item != NULL) { if(m_state == Nothing && item->rtti() == SafeEntry::RTTI) { SafeEntry *ent = (SafeEntry *)item; m_text = ent->password().get().get(); m_state = Single; } else if(m_state == Single) { m_state = Multiple; } if(item->rtti() == SafeGroup::RTTI) { m_xml.appendChild(XmlSerializer::safeGroupToXml(m_xml, *(SafeGroup *)item)); } else if(item->rtti() == SafeEntry::RTTI) { m_xml.appendChild(XmlSerializer::safeEntryToXml(m_xml, *(SafeEntry *)item)); } } }
/** Loads a plaintext file that was created by MyPasswordSafe. */ Safe::Error PlainTextLizer::load(Safe &safe, const QString &path, const EncryptedString &passphrase, const QString &) { QFile file(path); if(file.open(QIODevice::ReadOnly)) { QTextStream stream(&file); stream.setEncoding(QTextStream::UnicodeUTF8); QString line; line = stream.readLine(); if(EncryptedString(line.utf8()) != passphrase) return Safe::Failed; // passphrase was invalid while(!stream.atEnd()) { line = stream.readLine(); QStringList items = QStringList::split('\t', line, true); DBGOUT("items.count = " << items.count()); if(items.count() == 9) { SafeGroup *group = findOrCreateGroup(&safe, field(items, 3)); if(group == NULL) group = &safe; SafeEntry *item = new SafeEntry(group); item->setName(field(items, 0)); item->setUser(field(items, 1)); item->setPassword(field(items, 2).utf8()); item->setCreationTime(QDateTime::fromString(field(items, 4), Qt::ISODate)); item->setModifiedTime(QDateTime::fromString(field(items, 5), Qt::ISODate)); item->setAccessTime(QDateTime::fromString(field(items, 6), Qt::ISODate)); item->setLifetime(QTime::fromString(field(items, 7), Qt::ISODate)); UUID uuid; uuid.fromString(field(items, 8)); item->setUUID(uuid); line = stream.readLine(); line.replace("\\n", "\n"); item->setNotes(line); } else { file.close(); return Safe::BadFile; } } file.close(); return Safe::Success; } return Safe::BadFile; #if 0 ifstream file(path); if(file.is_open()) { string line; getline(file, line, '\n'); while(!file.eof()) { getline(file, line, '\n'); //if(items.size() == 4) // safe_item.setGroup(items[3]); } file.close(); return Safe::Success; } #endif return Safe::Failed; }
SafeEntry::SafeEntry(const SafeEntry &item) : SafeItem((SafeGroup *)item.parent()) { copy(item); }