2003-08-17 11:28:23 +00:00
|
|
|
/**
|
|
|
|
* \file BranchList.C
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
2003-08-23 00:17:00 +00:00
|
|
|
*
|
2003-08-17 11:28:23 +00:00
|
|
|
* \author Martin Vermeer
|
|
|
|
*
|
2003-08-23 00:17:00 +00:00
|
|
|
* Full author contact details are available in file CREDITS.
|
2003-08-17 11:28:23 +00:00
|
|
|
*/
|
|
|
|
|
2003-08-23 00:17:00 +00:00
|
|
|
#include <config.h>
|
|
|
|
|
2003-08-17 11:28:23 +00:00
|
|
|
#include "BranchList.h"
|
|
|
|
#include "support/LAssert.h"
|
|
|
|
|
2003-09-05 22:17:02 +00:00
|
|
|
#include <functional>
|
2003-08-17 11:28:23 +00:00
|
|
|
|
|
|
|
using std::bind2nd;
|
|
|
|
using std::binary_function;
|
|
|
|
using namespace lyx::support;
|
|
|
|
|
|
|
|
|
|
|
|
string const Branch::getBranch() const
|
|
|
|
{
|
|
|
|
return branch_;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Branch::setBranch(string const & s)
|
|
|
|
{
|
|
|
|
branch_ = s;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Branch::getSelected() const
|
|
|
|
{
|
|
|
|
return selected_;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Branch::setSelected(bool b)
|
|
|
|
{
|
|
|
|
selected_ = b;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string const Branch::getColor() const
|
|
|
|
{
|
|
|
|
return color_;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Branch::setColor(string const & c)
|
|
|
|
{
|
|
|
|
color_ = c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BranchList::clear()
|
|
|
|
{
|
|
|
|
list.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string BranchList::getColor(string const & s) const
|
|
|
|
{
|
|
|
|
List::const_iterator it = list.begin();
|
|
|
|
List::const_iterator end = list.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (s == it->getBranch()) {
|
|
|
|
return it->getColor();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Assert(false); // Always
|
|
|
|
return string(); // never gets here
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void BranchList::setColor(string const & s, string const & val)
|
|
|
|
{
|
|
|
|
List::iterator it = list.begin();
|
|
|
|
List::iterator end = list.end();
|
|
|
|
for (; it != end; ++it) {
|
2003-09-03 09:33:36 +00:00
|
|
|
if (s == it->getBranch()) {
|
2003-08-17 11:28:23 +00:00
|
|
|
it->setColor(val);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Assert(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BranchList::setSelected(string const & s, bool val)
|
|
|
|
{
|
|
|
|
List::iterator it = list.begin();
|
|
|
|
List::iterator end = list.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (s.find(it->getBranch(), 0) != string::npos)
|
|
|
|
it->setSelected(val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BranchList::add(string const & s)
|
|
|
|
{
|
|
|
|
string::size_type i = 0;
|
|
|
|
while (true) {
|
|
|
|
string::size_type const j = s.find_first_of(separator(), i);
|
|
|
|
string name;
|
|
|
|
if (j == string::npos)
|
|
|
|
name = s.substr(i);
|
|
|
|
else
|
|
|
|
name = s.substr(i, j - i);
|
|
|
|
// Is this name already in the list?
|
|
|
|
List::const_iterator it = list.begin();
|
|
|
|
List::const_iterator end = list.end();
|
|
|
|
bool already = false;
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (it->getBranch() == name) {
|
|
|
|
already = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!already) {
|
|
|
|
Branch br;
|
|
|
|
br.setBranch(name);
|
|
|
|
br.setSelected(false);
|
|
|
|
br.setColor("none");
|
|
|
|
list.push_back(br);
|
|
|
|
}
|
|
|
|
if (j == string::npos)
|
|
|
|
break;
|
|
|
|
i = j + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
|
|
struct match : public binary_function<Branch, string, bool> {
|
|
|
|
bool operator()(Branch const & br, string const & s) const {
|
|
|
|
return (br.getBranch() == s);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace anon.
|
|
|
|
|
|
|
|
|
|
|
|
void BranchList::remove(string const & s)
|
|
|
|
{
|
|
|
|
list.remove_if(bind2nd(match(), s));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool BranchList::selected(string const & s) const
|
|
|
|
{
|
|
|
|
List::const_iterator it = list.begin();
|
|
|
|
List::const_iterator end = list.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (s == it->getBranch())
|
|
|
|
return it->getSelected();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string BranchList::allBranches() const
|
|
|
|
{
|
|
|
|
List::const_iterator it = list.begin();
|
|
|
|
List::const_iterator end = list.end();
|
|
|
|
string ret;
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
ret += it->getBranch() + separator();
|
|
|
|
}
|
|
|
|
// remove final '|':
|
|
|
|
string::size_type i = ret.find_last_of(separator());
|
|
|
|
if (i != string::npos)
|
|
|
|
ret.erase(i);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string BranchList::allSelected() const
|
|
|
|
{
|
|
|
|
List::const_iterator it = list.begin();
|
|
|
|
List::const_iterator end = list.end();
|
|
|
|
string ret;
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (it->getSelected())
|
|
|
|
ret += it->getBranch() + separator();
|
|
|
|
}
|
|
|
|
// remove final '|':
|
|
|
|
string::size_type i = ret.find_last_of(separator());
|
|
|
|
if (i != string::npos)
|
|
|
|
ret.erase(i);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string const BranchList::separator() const
|
|
|
|
{
|
|
|
|
return separator_;
|
|
|
|
}
|