lyx_mirror/src/BranchList.h
Georg Baum 49070b4c00 Fix problem with non-ascii branch names by converting more stuff to
docstring.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15713 a592a061-630c-0410-9148-cb99ea01b6c8
2006-11-03 15:16:45 +00:00

134 lines
2.8 KiB
C++

// -*- C++ -*-
/**
* \file BranchList.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
* \author Martin Vermeer
*
* Full author contact details are available in file CREDITS.
*
*
* \class Branch
*
* A class describing a 'branch', i.e., a named alternative for
* selectively outputting some parts of a document while suppressing
* other parts.
*
* A branch has a name, can either be selected or not, and uses a
* user-specifyable background colour. All these can be set and
* queried.
*
* \class BranchList
*
* A class containing a vector of all defined branches within a
* document. Has methods for selecting or deselecting branches by
* name, for outputting a '|'-separated string of all elements or only
* the selected ones, and for adding and removing elements.
*/
#ifndef BRANCHES_H
#define BRANCHES_H
#include "Color.h"
#include "support/docstring.h"
#include <list>
namespace lyx {
class Branch {
public:
///
Branch();
///
docstring const & getBranch() const;
///
void setBranch(docstring const &);
///
bool getSelected() const;
/** Select/deselect the branch.
* \return true if the selection status changes.
*/
bool setSelected(bool);
///
RGBColor const & getColor() const;
///
void setColor(RGBColor const &);
/**
* Set color from a string "#rrggbb".
* Use LColor:background if the string is no valid color.
* This ensures compatibility with LyX 1.4.0 that had the symbolic
* color "none" that was displayed as LColor:background.
*/
void setColor(std::string const &);
private:
///
docstring branch_;
///
bool selected_;
///
RGBColor color_;
};
class BranchList {
///
typedef std::list<Branch> List;
public:
typedef List::const_iterator const_iterator;
///
BranchList() : separator_(from_ascii("|")) {}
///
bool empty() const { return list.empty(); }
///
void clear() { list.clear(); }
///
const_iterator begin() const { return list.begin(); }
const_iterator end() const { return list.end(); }
/** \returns the Branch with \c name. If not found, returns 0.
*/
Branch * find(docstring const & name);
Branch const * find(docstring const & name) const;
/** Add (possibly multiple (separated by separator())) branches to list
* \returns true if a branch is added.
*/
bool add(docstring const &);
/** remove a branch from list by name
* \returns true if a branch is removed.
*/
bool remove(docstring const &);
private:
///
List list;
///
docstring separator_;
};
class BranchNamesEqual : public std::unary_function<Branch, bool> {
public:
BranchNamesEqual(docstring const & name)
: name_(name) {}
bool operator()(Branch const & branch) const
{
return branch.getBranch() == name_;
}
private:
docstring name_;
};
} // namespace lyx
#endif