fix Menu copy constructor
it has to make deep copy of itsOptions.
This commit is contained in:
59
src/menu.h
59
src/menu.h
@@ -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()
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user