mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-28 09:38:53 +00:00
96 lines
1.9 KiB
C++
96 lines
1.9 KiB
C++
/*
|
|
* \brief Scout GUI parent element
|
|
* \author Norman Feske
|
|
* \date 2006-08-30
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2006-2017 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU Affero General Public License version 3.
|
|
*/
|
|
|
|
#ifndef _INCLUDE__SCOUT__PARENT_ELEMENT_H_
|
|
#define _INCLUDE__SCOUT__PARENT_ELEMENT_H_
|
|
|
|
#include <scout/element.h>
|
|
|
|
namespace Scout {
|
|
class Element;
|
|
class Parent_element;
|
|
}
|
|
|
|
class Scout::Parent_element : public Element
|
|
{
|
|
protected:
|
|
|
|
Element *_first;
|
|
Element *_last;
|
|
|
|
/**
|
|
* Format child element by a given width an horizontal offset
|
|
*/
|
|
int _format_children(int x, int w);
|
|
|
|
public:
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
Parent_element() { _first = _last = 0; }
|
|
|
|
/**
|
|
* Adopt a child element
|
|
*/
|
|
void append(Element *e);
|
|
|
|
/**
|
|
* Release child element from parent element
|
|
*/
|
|
void remove(Element const *e);
|
|
|
|
/**
|
|
* Dispose references to the specified element
|
|
*
|
|
* The element is not necessarily an immediate child but some element
|
|
* of the element-subtree. This function gets propagated to the root
|
|
* parent (e.g., user state manager), which can reset the mouse focus
|
|
* of the focused element vanishes.
|
|
*/
|
|
virtual void forget(Element const *e);
|
|
|
|
/**
|
|
* Element interface
|
|
*/
|
|
void draw(Canvas_base &, Point);
|
|
Element *find(Point);
|
|
Element *find_by_y(int);
|
|
void fill_cache(Canvas_base &);
|
|
void flush_cache(Canvas_base &);
|
|
void geometry(Rect);
|
|
|
|
/**
|
|
* Execute function on each child
|
|
*
|
|
* The functor FUNC takes a reference to the element as argument.
|
|
*/
|
|
template <typename FUNC>
|
|
void for_each_child(FUNC func)
|
|
{
|
|
for (Element *e = _first; e; e = e->next)
|
|
func(*e);
|
|
}
|
|
};
|
|
|
|
|
|
template <typename FUNC>
|
|
void Scout::Element::for_each_sibling(FUNC func)
|
|
{
|
|
if (parent())
|
|
parent()->for_each_child(func);
|
|
}
|
|
|
|
|
|
#endif /* _INCLUDE__SCOUT__PARENT_ELEMENT_H_ */
|