fix Menu copy constructor

it has to make deep copy of itsOptions.
This commit is contained in:
Andrzej Rybczak
2009-03-13 13:26:29 +01:00
parent a20469b403
commit d03c4a88b6
2 changed files with 40 additions and 26 deletions

View File

@@ -211,36 +211,43 @@ namespace NCurses
} }
template <typename T> NCurses::Menu<T>::Menu(size_t startx, template <typename T> NCurses::Menu<T>::Menu(size_t startx,
size_t starty, size_t starty,
size_t width, size_t width,
size_t height, size_t height,
const std::string &title, const std::string &title,
Color color, Color color,
Border border) Border border)
: Window(startx, starty, width, height, title, color, border), : Window(startx, starty, width, height, title, color, border),
itsItemDisplayer(0), itsItemDisplayer(0),
itsItemDisplayerUserdata(0), itsItemDisplayerUserdata(0),
itsGetStringFunction(0), itsGetStringFunction(0),
itsGetStringFunctionUserData(0), itsGetStringFunctionUserData(0),
itsOptionsPtr(&itsOptions), itsOptionsPtr(&itsOptions),
itsBeginning(0), itsBeginning(0),
itsHighlight(0), itsHighlight(0),
itsHighlightColor(itsBaseColor), itsHighlightColor(itsBaseColor),
highlightEnabled(1), highlightEnabled(1),
itsSelectedPrefix(0), itsSelectedPrefix(0),
itsSelectedSuffix(0) itsSelectedSuffix(0)
{ {
} }
template <typename T> NCurses::Menu<T>::Menu(const Menu &m) : Window(m) template <typename T> NCurses::Menu<T>::Menu(const Menu &m) : Window(m),
itsItemDisplayer(m.itsItemDisplayer),
itsItemDisplayerUserdata(m.itsItemDisplayerUserdata),
itsGetStringFunction(m.itsGetStringFunction),
itsGetStringFunctionUserData(m.itsGetStringFunctionUserData),
itsOptionsPtr(m.itsOptionsPtr),
itsBeginning(m.itsBeginning),
itsHighlight(m.itsHighlight),
itsHighlightColor(m.itsHighlightColor),
highlightEnabled(m.highlightEnabled),
itsSelectedPrefix(m.itsSelectedPrefix),
itsSelectedSuffix(m.itsSelectedSuffix)
{ {
itsOptions = m.itsOptions; itsOptions.reserve(m.itsOptions.size());
itsItemDisplayer = m.itsItemDisplayer; for (option_const_iterator it = m.itsOptions.begin(); it != m.itsOptions.end(); it++)
itsItemDisplayerUserdata = m.itsItemDisplayerUserdata; itsOptions.push_back(new Option(**it));
itsBeginning = m.itsBeginning;
itsHighlight = m.itsHighlight;
itsHighlightColor = m.itsHighlightColor;
highlightEnabled = m.highlightEnabled;
} }
template <typename T> NCurses::Menu<T>::~Menu() template <typename T> NCurses::Menu<T>::~Menu()

View File

@@ -47,6 +47,7 @@ namespace NCurses
public: public:
basic_buffer() : itsTempString(0) { } basic_buffer() : itsTempString(0) { }
basic_buffer(const basic_buffer &b);
std::basic_string<C> Str() const; std::basic_string<C> Str() const;
void SetFormatting(short vb, const std::basic_string<C> &s, short ve, bool for_each = 1); void SetFormatting(short vb, const std::basic_string<C> &s, short ve, bool for_each = 1);
@@ -71,6 +72,12 @@ namespace NCurses
typedef basic_buffer<wchar_t> WBuffer; typedef basic_buffer<wchar_t> WBuffer;
} }
template <typename C> NCurses::basic_buffer<C>::basic_buffer(const basic_buffer &b) : itsFormat(b.itsFormat),
itsTempString(b.itsTempString)
{
itsString << b.itsString.str();
}
template <typename C> std::basic_string<C> NCurses::basic_buffer<C>::Str() const template <typename C> std::basic_string<C> NCurses::basic_buffer<C>::Str() const
{ {
return itsString.str(); return itsString.str();