File: cursesvscroll.H

package info (click to toggle)
cone 0.75-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 31,040 kB
  • ctags: 13,930
  • sloc: ansic: 90,648; cpp: 79,781; sh: 18,355; perl: 3,218; makefile: 1,611; yacc: 289; sed: 16
file content (71 lines) | stat: -rw-r--r-- 1,527 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* $Id: cursesvscroll.H,v 1.1 2003/05/27 14:09:07 mrsam Exp $
**
** Copyright 2002, Double Precision Inc.
**
** See COPYING for distribution information.
*/

#ifndef cursesvscroll_H
#define cursesvscroll_H

#include "mycurses.H"
#include "cursescontainer.H"

//
// A vertically-scrolling viewport.  The subclass must define getWidth()
// and getHeight().
//

class CursesVScroll : public CursesContainer {

	size_t firstRowShown;

public:
	CursesVScroll(CursesContainer *parent);
	~CursesVScroll();

	// When something is deleted from the viewport, jump the view port
	// to the top

	void deleteChild(Curses *child);

	// Automatically scroll the viewport to following keyboard input.
	// This is done by overriding getCursorPosition(), calling
	// scrollTo(), then simply subtracting the topmost row shown.

	int getCursorPosition(int &row, int &col);

	//
	// Adjust for vertical scroll position:
	//

	bool writeText(const char *text, int row, int col,
		       const CursesAttr &attr) const;
	bool writeText(const wchar_t *text, int row, int col,
		       const CursesAttr &attr) const;

	//
	// Make sure the following row is visible right now.
	//
	void scrollTo(size_t rowNum);

	// Intercept getVerticalViewport(), and return reality.

	void getVerticalViewport(size_t &first_row,
				 size_t &nrows);

	void erase();

	int getWidth() const;
	size_t getFirstRowShown() const { return firstRowShown; }
	void setFirstRowShown(size_t rowNum)
	{
		firstRowShown=rowNum;
		redraw();
	}

private:
	void redraw();
};

#endif