You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tellico/src/core/dcopinterface.cpp

172 lines
5.2 KiB

/***************************************************************************
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<long> ApplicationInterface::selectedEntries() const {
TQValueList<long> ids;
Data::EntryVec entries = Controller::self()->selectedEntries();
for(Data::EntryVecIt entry = entries.begin(); entry != entries.end(); ++entry) {
ids << entry->id();
}
return ids;
}
TQValueList<long> ApplicationInterface::filteredEntries() const {
TQValueList<long> 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;
}