diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /curses/cursesmultilinelabel.C | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'curses/cursesmultilinelabel.C')
| -rw-r--r-- | curses/cursesmultilinelabel.C | 126 | 
1 files changed, 126 insertions, 0 deletions
| diff --git a/curses/cursesmultilinelabel.C b/curses/cursesmultilinelabel.C new file mode 100644 index 0000000..5075914 --- /dev/null +++ b/curses/cursesmultilinelabel.C @@ -0,0 +1,126 @@ +/* +** Copyright 2004, Double Precision Inc. +** +** See COPYING for distribution information. +*/ + +#include "curses_config.h" +#include "cursesmultilinelabel.H" + +CursesMultilineLabel::CursesMultilineLabel(CursesContainer *parent, +					   std::string textArg, +					   Curses::CursesAttr attributeArg) +	: Curses(parent), width(0), attribute(attributeArg) +{ +	mail::iconvert::convert(textArg, unicode_default_chset(), text); +} + +void CursesMultilineLabel::init() +{ +	int w=getWidth(); + +	if (w < 10) +		w=10; + +	lines.clear(); + +	std::back_insert_iterator< std::vector< std::vector<unicode_char> > > +		insert_iter(lines); + +	unicodewordwrap(text.begin(), text.end(), +			unicoderewrapnone(), insert_iter, w, true); +} + +CursesMultilineLabel::~CursesMultilineLabel() +{ +} + +void CursesMultilineLabel::setRow(int row) +{ +	erase(); +	Curses::setRow(row); +	draw(); +} + +void CursesMultilineLabel::setCol(int col) +{ +	erase(); +	Curses::setCol(col); +	draw(); +} + +void CursesMultilineLabel::setText(std::string newText) +{ +	erase(); +	text.clear(); +	mail::iconvert::convert(newText, unicode_default_chset(), text); +	init(); +	draw(); +} + +void CursesMultilineLabel::setAlignment(Alignment newAlignment) +{ +	erase(); +	Curses::setAlignment(newAlignment); +	draw(); +} + +void CursesMultilineLabel::setAttribute(Curses::CursesAttr attr) +{ +	attribute=attr; +	draw(); +} + +int CursesMultilineLabel::getWidth() const +{ +	return width; +} + +void CursesMultilineLabel::setWidth(int w) +{ +	erase(); +	width=w; +	init(); +	draw(); +} + +int CursesMultilineLabel::getHeight() const +{ +	int n=(int)lines.size(); + +	if (n <= 0) +		n=1; +	return n; +} + +void CursesMultilineLabel::resized() +{ +	erase(); +	init(); +	draw(); +} + +void CursesMultilineLabel::draw() +{ +	erase(); + +	size_t row=0; + +	for ( std::vector< std::vector<unicode_char> >::iterator +		      b(lines.begin()), e(lines.end()); b != e; ++b, ++row) +	{ +		writeText(*b, row, 0, attribute); +	} +} + +void CursesMultilineLabel::erase() +{ +	std::vector<unicode_char> uc; + +	uc.insert(uc.end(), getWidth(), ' '); + +	size_t i, n=getHeight(); +	for (i=0; i<n; i++) +		writeText(uc, i, 0, attribute); +} + | 
