File: cursesvscroll.H

package info (click to toggle)
cone 0.89-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 25,628 kB
  • ctags: 14,171
  • sloc: ansic: 85,400; cpp: 82,903; sh: 11,713; makefile: 1,732; perl: 832; yacc: 291; sed: 16
file content (71 lines) | stat: -rw-r--r-- 1,500 bytes parent folder | download
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
/*
** 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 std::vector<unicode_char> &text,
		       int row, int col,
		       const Curses::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