X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBranchList.cpp;h=fc61065a4b767bf34099498466883204a2e55245;hb=67ff56c63af67b5897c18f22aeb206d8387b086a;hp=86cb6021d1b582917be1c7e1bfea22680530cd17;hpb=bbb52a1c9d5fa297fb6ed20ba9a5678541cb8cfc;p=lyx.git diff --git a/src/BranchList.cpp b/src/BranchList.cpp index 86cb6021d1..fc61065a4b 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. */ @@ -12,25 +13,21 @@ #include "BranchList.h" #include "Color.h" +#include "ColorSet.h" #include "frontends/Application.h" -#include - -using std::string; +#include "support/convert.h" +#include "support/lstrings.h" -namespace lyx { +#include +using namespace std; -Branch::Branch() : selected_(false) -{ - // no theApp() with command line export - if (theApp()) - theApp()->getRgbColor(Color::background, color_); -} +namespace lyx { -docstring const & Branch::getBranch() const +docstring const & Branch::branch() const { return branch_; } @@ -42,7 +39,7 @@ void Branch::setBranch(docstring const & s) } -bool Branch::getSelected() const +bool Branch::isSelected() const { return selected_; } @@ -57,65 +54,122 @@ bool Branch::setSelected(bool b) } -RGBColor const & Branch::getColor() const +bool Branch::hasFileNameSuffix() const +{ + return filenameSuffix_; +} + + +void Branch::setFileNameSuffix(bool b) { - return color_; + filenameSuffix_ = b; } -void Branch::setColor(RGBColor const & c) +string const & Branch::color() const { - color_ = c; + return (theApp() && theApp()->isInDarkMode()) + ? dmcolor_ : lmcolor_; } -void Branch::setColor(string const & c) +string const & Branch::lightModeColor() const { - if (c.size() == 7 && c[0] == '#') - color_ = RGBColor(c); + return lmcolor_; +} + + +string const & Branch::darkModeColor() const +{ + return dmcolor_; +} + + +void Branch::setColor(string const & col) +{ + if (theApp() && theApp()->isInDarkMode()) + setColors(string(), col); else - // no color set or invalid color - use normal background - theApp()->getRgbColor(Color::background, color_); + setColors(col); } +void Branch::setColors(string const & lmcol, string const & dmcol) +{ + if (lmcol.empty() && lmcolor_ == "background" && support::prefixIs(dmcol, "#")) + lmcolor_ = X11hexname(inverseRGBColor(rgbFromHexName(dmcol))); + else if (!lmcol.empty()) + lmcolor_ = lmcol; + if (dmcol.empty() && dmcolor_ == "background" && support::prefixIs(lmcol, "#")) + dmcolor_ = X11hexname(inverseRGBColor(rgbFromHexName(lmcol))); + else if (!dmcol.empty()) + dmcolor_ = dmcol; + + // Update the Color table + string lmcolor = lmcolor_; + string dmcolor = dmcolor_; + if (lmcolor == "none") + lmcolor = lcolor.getX11HexName(Color_background); + else if (lmcolor.size() != 7 || lmcolor[0] != '#') + lmcolor = lcolor.getX11HexName(lcolor.getFromLyXName(lmcolor)); + if (dmcolor == "none") + dmcolor = lcolor.getX11HexName(Color_background, true); + else if (dmcolor.size() != 7 || dmcolor[0] != '#') + dmcolor = lcolor.getX11HexName(lcolor.getFromLyXName(dmcolor), true); + + // FIXME UNICODE + lcolor.setColor("branch" + convert(branch_list_id_) + + to_utf8(branch_), lmcolor, dmcolor); +} + + +namespace { + +std::function BranchNameIs(docstring const & d) +{ + return [d](Branch const & b){ return b.branch() == d; }; +} + +} // namespace + + Branch * BranchList::find(docstring const & name) { List::iterator it = - std::find_if(list.begin(), list.end(), BranchNamesEqual(name)); - return it == list.end() ? 0 : &*it; + find_if(list_.begin(), list_.end(), BranchNameIs(name)); + return it == list_.end() ? nullptr : &*it; } Branch const * BranchList::find(docstring const & name) const { List::const_iterator it = - std::find_if(list.begin(), list.end(), BranchNamesEqual(name)); - return it == list.end() ? 0 : &*it; + find_if(list_.begin(), list_.end(), BranchNameIs(name)); + return it == list_.end() ? nullptr : &*it; } 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); else name = s.substr(i, j - i); // Is this name already in the list? - bool const already = - std::find_if(list.begin(), list.end(), - BranchNamesEqual(name)) != list.end(); + bool const already = find(name); if (!already) { added = true; Branch br; br.setBranch(name); br.setSelected(false); - list.push_back(br); + br.setFileNameSuffix(false); + br.setListID(id_); + list_.push_back(br); } if (j == docstring::npos) break; @@ -127,10 +181,40 @@ bool BranchList::add(docstring const & s) bool BranchList::remove(docstring const & s) { - size_t const size = list.size(); - list.remove_if(BranchNamesEqual(s)); - return size != list.size(); + size_t const size = list_.size(); + list_.remove_if(BranchNameIs(s)); + return size != list_.size(); } +bool BranchList::rename(docstring const & oldname, + docstring const & newname, bool const merge) +{ + if (newname.empty()) + return false; + if (find(newname)) { + // 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; + for (auto const & br : list_) { + if (br.isSelected() && br.hasFileNameSuffix()) + result += "-" + br.branch(); + } + return support::subst(result, from_ascii("/"), from_ascii("_")); +} + } // namespace lyx