/*************************************************************************** copyright : (C) 2004-2006 by Robby Stephenson email : robby@periapsis.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of version 2 of the GNU General Public License as * * published by the Free Software Foundation; * * * ***************************************************************************/ #include "dcopinterface.h" #include "../latin1literal.h" #include "../controller.h" #include "../tellico_kernel.h" #include "../document.h" #include "../collection.h" #include "../translators/bibtexhandler.h" using Tellico::ApplicationInterface; using Tellico::CollectionInterface; Tellico::Import::Action ApplicationInterface::actionType(const TQString& actionName) { TQString name = actionName.lower(); if(name == Latin1Literal("append")) { return Import::Append; } else if(name == Latin1Literal("merge")) { return Import::Merge; } return Import::Replace; } TQValueList ApplicationInterface::selectedEntries() const { TQValueList ids; Data::EntryVec entries = Controller::self()->selectedEntries(); for(Data::EntryVecIt entry = entries.begin(); entry != entries.end(); ++entry) { ids << entry->id(); } return ids; } TQValueList ApplicationInterface::filteredEntries() const { TQValueList ids; Data::EntryVec entries = Controller::self()->visibleEntries(); for(Data::EntryVecIt entry = entries.begin(); entry != entries.end(); ++entry) { ids << entry->id(); } return ids; } long CollectionInterface::addEntry() { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return -1; } Data::EntryPtr entry = new Data::Entry(coll); Kernel::self()->addEntries(entry, false); return entry->id(); } bool CollectionInterface::removeEntry(long id_) { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return false; } Data::EntryPtr entry = coll->entryById(id_); if(!entry) { return false; } Kernel::self()->removeEntries(entry); return coll->entryById(id_) == 0; } TQStringList CollectionInterface::values(const TQString& fieldName_) const { TQStringList results; Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return results; } Data::FieldPtr field = coll->fieldByName(fieldName_); if(!field) { field = coll->fieldByTitle(fieldName_); } if(!field) { return results; } Data::EntryVec entries = Controller::self()->selectedEntries(); for(Data::EntryVecIt entry = entries.begin(); entry != entries.end(); ++entry) { results += entry->fields(field, false); } return results; } TQStringList CollectionInterface::values(long id_, const TQString& fieldName_) const { TQStringList results; Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return results; } Data::FieldPtr field = coll->fieldByName(fieldName_); if(!field) { field = coll->fieldByTitle(fieldName_); } if(!field) { return results; } Data::EntryPtr entry = coll->entryById(id_); if(entry) { results += entry->fields(field, false); } return results; } TQStringList CollectionInterface::bibtexKeys() const { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll || coll->type() != Data::Collection::Bibtex) { return TQStringList(); } return BibtexHandler::bibtexKeys(Controller::self()->selectedEntries()); } TQString CollectionInterface::bibtexKey(long id_) const { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll || coll->type() != Data::Collection::Bibtex) { return TQString(); } Data::EntryPtr entry = coll->entryById(id_); if(!entry) { return TQString(); } return BibtexHandler::bibtexKeys(entry).first(); } bool CollectionInterface::setFieldValue(long id_, const TQString& fieldName_, const TQString& value_) { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return false; } Data::EntryPtr entry = coll->entryById(id_); if(!entry) { return false; } Data::EntryPtr oldEntry = new Data::Entry(*entry); if(!entry->setField(fieldName_, value_)) { return false; } Kernel::self()->modifyEntries(oldEntry, entry); return true; } bool CollectionInterface::addFieldValue(long id_, const TQString& fieldName_, const TQString& value_) { Data::CollPtr coll = Data::Document::self()->collection(); if(!coll) { return false; } Data::EntryPtr entry = coll->entryById(id_); if(!entry) { return false; } Data::EntryPtr oldEntry = new Data::Entry(*entry); TQStringList values = entry->fields(fieldName_, false); TQStringList newValues = values; newValues << value_; if(!entry->setField(fieldName_, newValues.join(TQString::fromLatin1("; ")))) { return false; } Kernel::self()->modifyEntries(oldEntry, entry); return true; }