#include <config.h>
#include "BranchList.h"
+#include "LColor.h"
-#include <boost/assert.hpp>
+#include "frontends/Application.h"
-#include <functional>
+#include <algorithm>
+namespace lyx {
+
using std::string;
-using std::bind2nd;
-using std::binary_function;
-string const Branch::getBranch() const
+Branch::Branch()
+{
+ theApp->getRgbColor(LColor::background, color_);
+}
+
+
+string const & Branch::getBranch() const
{
return branch_;
}
}
-void Branch::setSelected(bool b)
+bool Branch::setSelected(bool b)
{
+ if (b == selected_)
+ return false;
selected_ = b;
+ return true;
}
-string const Branch::getColor() const
+RGBColor const & Branch::getColor() const
{
return color_;
}
-void Branch::setColor(string const & c)
+void Branch::setColor(RGBColor const & c)
{
color_ = c;
}
-void BranchList::clear()
+void Branch::setColor(string const & c)
{
- list.clear();
+ if (c.size() == 7 && c[0] == '#')
+ color_ = RGBColor(c);
+ else
+ // no color set or invalid color - use normal background
+ theApp->getRgbColor(LColor::background, color_);
}
-string BranchList::getColor(string const & s) const
+Branch * BranchList::find(std::string const & name)
{
- List::const_iterator it = list.begin();
- List::const_iterator end = list.end();
- for (; it != end; ++it) {
- if (s == it->getBranch()) {
- return it->getColor();
- }
- }
- BOOST_ASSERT(false); // Always
- return string(); // never gets here
+ List::iterator it =
+ std::find_if(list.begin(), list.end(), BranchNamesEqual(name));
+ return it == list.end() ? 0 : &*it;
}
-
-void BranchList::setColor(string const & s, string const & val)
+Branch const * BranchList::find(std::string const & name) const
{
- List::iterator it = list.begin();
- List::iterator end = list.end();
- for (; it != end; ++it) {
- if (s == it->getBranch()) {
- it->setColor(val);
- return;
- }
- }
- BOOST_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 == it->getBranch()) {
- it->setSelected(val);
- return;
- }
- }
- BOOST_ASSERT(false);
+ List::const_iterator it =
+ std::find_if(list.begin(), list.end(), BranchNamesEqual(name));
+ return it == list.end() ? 0 : &*it;
}
-void BranchList::add(string const & s)
+bool BranchList::add(string const & s)
{
+ bool added = false;
string::size_type i = 0;
while (true) {
- string::size_type const j = s.find_first_of(separator(), i);
+ 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;
- }
- }
+ bool const already =
+ std::find_if(list.begin(), list.end(),
+ BranchNamesEqual(name)) != list.end();
if (!already) {
+ added = true;
Branch br;
br.setBranch(name);
br.setSelected(false);
- br.setColor("none");
list.push_back(br);
}
if (j == string::npos)
break;
i = j + 1;
}
+ return added;
}
-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
+bool BranchList::remove(string const & s)
{
- 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;
+ size_t const size = list.size();
+ list.remove_if(BranchNamesEqual(s));
+ return size != list.size();
}
-string const BranchList::separator() const
-{
- return separator_;
-}
+} // namespace lyx