summaryrefslogtreecommitdiffstats
path: root/curses/cursescontainer.H
blob: 11f45f3f30e5982aa32260885f15fea593aa3b3f (plain)
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
72
73
74
75
76
/*
** Copyright 2002, Double Precision Inc.
**
** See COPYING for distribution information.
*/

#ifndef cursescontainer_H
#define cursescontainer_H

#include "../curses/curses_config.h"
#include "mycurses.H"

#include <wchar.h>
#include <vector>

////////////////////////////////////////////////////////////////////////
//
// CursesContainer is a superclass for all Curses objects that contain
// other Curses object.

class CursesContainer : public Curses {

	class Child {
	public:
		Curses *child;

		Child(Curses *childArg) : child(childArg)
		{
		}
	};

	std::vector<Child> children;

	std::vector<Child>::iterator drawIndex;

public:
	friend class Curses;

	CursesContainer(CursesContainer *parent=0);
	~CursesContainer();

	// getWidth()/getHeight() computes the largest rectangle that
	// contains all current children.

	virtual int getWidth() const;
	virtual int getHeight() const;

	virtual Curses *getDialogChild() const;

	// draw/erase recursively invoke draw/erase methods of all children,
	// unless a child CursesObject's isDialog() method returns true, in
	// which case only that child's draw/erase method is called.

	virtual void draw();
	virtual void erase();

	// The default resized() method recursively invokes the resized()
	// method of all children.

	virtual void resized();

	// The constructor and the destructor of a Curses object automatically
	// calls addChild/deleteChild to register the new child process.

	virtual void addChild(Curses *child);
	virtual void deleteChild(Curses *child);

	// The default implementation of getNextFocus()/getPrevFocus()
	// return the pointer to the first or the last child.

	virtual Curses *getNextFocus();
	virtual Curses *getPrevFocus();
};


#endif