예제 #1
0
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");
}
예제 #2
0
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];
  }
}
예제 #3
0
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));
    }
  }
}
예제 #4
0
/** 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;
}
예제 #5
0
SafeEntry::SafeEntry(const SafeEntry &item)
  : SafeItem((SafeGroup *)item.parent())
{
  copy(item);
}