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

View File

@@ -47,6 +47,7 @@ namespace NCurses
public:
basic_buffer() : itsTempString(0) { }
basic_buffer(const basic_buffer &b);
std::basic_string<C> Str() const;
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;
}
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
{
return itsString.str();