X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBranchList.cpp;h=4624f19f4da4c2091b0375112bf57d1343d64b77;hb=16fcce1f71a3effc9b0185063a8b6cfc877fa877;hp=86cb6021d1b582917be1c7e1bfea22680530cd17;hpb=bbb52a1c9d5fa297fb6ed20ba9a5678541cb8cfc;p=lyx.git diff --git a/src/BranchList.cpp b/src/BranchList.cpp index 86cb6021d1..4624f19f4d 100644 --- a/src/BranchList.cpp +++ b/src/BranchList.cpp @@ -4,6 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Martin Vermeer + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -15,22 +16,47 @@ #include "frontends/Application.h" +#include "support/lstrings.h" + #include -using std::string; +using namespace std; + namespace lyx { +namespace { -Branch::Branch() : selected_(false) +class BranchNamesEqual : public std::unary_function +{ +public: + BranchNamesEqual(docstring const & name) + : name_(name) + {} + + bool operator()(Branch const & branch) const + { + return branch.branch() == name_; + } +private: + docstring name_; +}; + +} + + +Branch::Branch() + : selected_(false), filenameSuffix_(false) { // no theApp() with command line export if (theApp()) - theApp()->getRgbColor(Color::background, color_); + theApp()->getRgbColor(Color_background, color_); + else + frontend::Application::getRgbColorUncached(Color_background, color_); } -docstring const & Branch::getBranch() const +docstring const & Branch::branch() const { return branch_; } @@ -42,7 +68,7 @@ void Branch::setBranch(docstring const & s) } -bool Branch::getSelected() const +bool Branch::isSelected() const { return selected_; } @@ -57,7 +83,19 @@ bool Branch::setSelected(bool b) } -RGBColor const & Branch::getColor() const +bool Branch::hasFileNameSuffix() const +{ + return filenameSuffix_; +} + + +void Branch::setFileNameSuffix(bool b) +{ + filenameSuffix_ = b; +} + + +RGBColor const & Branch::color() const { return color_; } @@ -69,20 +107,25 @@ void Branch::setColor(RGBColor const & c) } -void Branch::setColor(string const & c) +void Branch::setColor(string const & str) { - if (c.size() == 7 && c[0] == '#') - color_ = RGBColor(c); - else + if (str.size() == 7 && str[0] == '#') + color_ = rgbFromHexName(str); + else { // no color set or invalid color - use normal background - theApp()->getRgbColor(Color::background, color_); + // no theApp() with command line export + if (theApp()) + theApp()->getRgbColor(Color_background, color_); + else + frontend::Application::getRgbColorUncached(Color_background, color_); + } } Branch * BranchList::find(docstring const & name) { List::iterator it = - std::find_if(list.begin(), list.end(), BranchNamesEqual(name)); + find_if(list.begin(), list.end(), BranchNamesEqual(name)); return it == list.end() ? 0 : &*it; } @@ -90,7 +133,7 @@ Branch * BranchList::find(docstring const & name) Branch const * BranchList::find(docstring const & name) const { List::const_iterator it = - std::find_if(list.begin(), list.end(), BranchNamesEqual(name)); + find_if(list.begin(), list.end(), BranchNamesEqual(name)); return it == list.end() ? 0 : &*it; } @@ -98,9 +141,9 @@ Branch const * BranchList::find(docstring const & name) const bool BranchList::add(docstring const & s) { bool added = false; - docstring::size_type i = 0; + size_t i = 0; while (true) { - docstring::size_type const j = s.find_first_of(separator_, i); + size_t const j = s.find_first_of(separator_, i); docstring name; if (j == docstring::npos) name = s.substr(i); @@ -108,13 +151,14 @@ bool BranchList::add(docstring const & s) name = s.substr(i, j - i); // Is this name already in the list? bool const already = - std::find_if(list.begin(), list.end(), + find_if(list.begin(), list.end(), BranchNamesEqual(name)) != list.end(); if (!already) { added = true; Branch br; br.setBranch(name); br.setSelected(false); + br.setFileNameSuffix(false); list.push_back(br); } if (j == docstring::npos) @@ -133,4 +177,36 @@ bool BranchList::remove(docstring const & s) } +bool BranchList::rename(docstring const & oldname, + docstring const & newname, bool const merge) +{ + if (newname.empty()) + return false; + if (find_if(list.begin(), list.end(), + BranchNamesEqual(newname)) != list.end()) { + // new name already taken + if (merge) + return remove(oldname); + return false; + } + + Branch * branch = find(oldname); + if (!branch) + return false; + branch->setBranch(newname); + return true; +} + + +docstring BranchList::getFileNameSuffix() const +{ + docstring result; + List::const_iterator it = list.begin(); + for (; it != list.end(); ++it) { + if (it->isSelected() && it->hasFileNameSuffix()) + result += "-" + it->branch(); + } + return support::subst(result, from_ascii("/"), from_ascii("_")); +} + } // namespace lyx