HeaderListener: Replaced the generic hook by more detailed ones.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31884 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-07-29 01:01:20 +00:00
parent d37f15ebee
commit e558530ebb
2 changed files with 107 additions and 20 deletions

View File

@ -77,6 +77,30 @@ HeaderListener::~HeaderListener()
}
void
HeaderListener::HeaderWidthChanged(Header* header)
{
}
void
HeaderListener::HeaderWidthRestrictionsChanged(Header* header)
{
}
void
HeaderListener::HeaderValueChanged(Header* header)
{
}
void
HeaderListener::HeaderRendererChanged(Header* header)
{
}
// #pragma mark - Header
@ -142,7 +166,7 @@ Header::SetWidth(float width)
{
if (width != fWidth) {
fWidth = width;
NotifyPropertiesChanged(true, true);
NotifyWidthChanged();
}
}
@ -152,7 +176,7 @@ Header::SetMinWidth(float width)
{
if (width != fMinWidth) {
fMinWidth = width;
NotifyPropertiesChanged(false, false);
NotifyWidthRestrictionsChanged();
}
}
@ -162,7 +186,7 @@ Header::SetMaxWidth(float width)
{
if (width != fMaxWidth) {
fMaxWidth = width;
NotifyPropertiesChanged(false, false);
NotifyWidthRestrictionsChanged();
}
}
@ -172,7 +196,7 @@ Header::SetPreferredWidth(float width)
{
if (width != fPreferredWidth) {
fPreferredWidth = width;
NotifyPropertiesChanged(false, false);
NotifyWidthRestrictionsChanged();
}
}
@ -189,7 +213,7 @@ Header::SetResizable(bool resizable)
{
if (resizable != fResizable) {
fResizable = resizable;
NotifyPropertiesChanged(false, false);
NotifyWidthRestrictionsChanged();
}
}
@ -206,7 +230,7 @@ void
Header::SetValue(const BVariant& value)
{
fValue = value;
NotifyPropertiesChanged(true, false);
NotifyValueChanged();
}
@ -220,10 +244,7 @@ Header::ModelIndex() const
void
Header::SetModelIndex(int32 index)
{
if (index != fModelIndex) {
fModelIndex = index;
NotifyPropertiesChanged(true, false);
}
fModelIndex = index;
}
@ -239,7 +260,7 @@ Header::SetHeaderRenderer(HeaderRenderer* renderer)
{
if (renderer != fRenderer) {
fRenderer = renderer;
NotifyPropertiesChanged(true, false);
NotifyRendererChanged();
}
}
@ -259,11 +280,41 @@ Header::RemoveListener(HeaderListener* listener)
void
Header::NotifyPropertiesChanged(bool redrawNeeded, bool relayoutNeeded)
Header::NotifyWidthChanged()
{
for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) {
HeaderListener* listener = fListeners.ItemAt(i);
listener->HeaderPropertiesChanged(this, redrawNeeded, relayoutNeeded);
listener->HeaderWidthChanged(this);
}
}
void
Header::NotifyWidthRestrictionsChanged()
{
for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) {
HeaderListener* listener = fListeners.ItemAt(i);
listener->HeaderWidthRestrictionsChanged(this);
}
}
void
Header::NotifyValueChanged()
{
for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) {
HeaderListener* listener = fListeners.ItemAt(i);
listener->HeaderValueChanged(this);
}
}
void
Header::NotifyRendererChanged()
{
for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) {
HeaderListener* listener = fListeners.ItemAt(i);
listener->HeaderRendererChanged(this);
}
}
@ -625,7 +676,35 @@ HeaderView::HeaderMoved(HeaderModel* model, int32 fromIndex, int32 toIndex)
void
HeaderView::HeaderPropertiesChanged(Header* header, bool redrawNeeded,
HeaderView::HeaderWidthChanged(Header* header)
{
_HeaderPropertiesChanged(header, true, true);
}
void
HeaderView::HeaderWidthRestrictionsChanged(Header* header)
{
// TODO:...
}
void
HeaderView::HeaderValueChanged(Header* header)
{
_HeaderPropertiesChanged(header, true, false);
}
void
HeaderView::HeaderRendererChanged(Header* header)
{
_HeaderPropertiesChanged(header, true, true);
}
void
HeaderView::_HeaderPropertiesChanged(Header* header, bool redrawNeeded,
bool relayoutNeeded)
{
if (!redrawNeeded && !relayoutNeeded)

View File

@ -47,8 +47,10 @@ class HeaderListener {
public:
virtual ~HeaderListener();
virtual void HeaderPropertiesChanged(Header* header,
bool redrawNeeded, bool relayoutNeeded) = 0;
virtual void HeaderWidthChanged(Header* header);
virtual void HeaderWidthRestrictionsChanged(Header* header);
virtual void HeaderValueChanged(Header* header);
virtual void HeaderRendererChanged(Header* header);
};
@ -85,8 +87,10 @@ public:
void RemoveListener(HeaderListener* listener);
protected:
void NotifyPropertiesChanged(bool redrawNeeded,
bool relayoutNeeded);
void NotifyWidthChanged();
void NotifyWidthRestrictionsChanged();
void NotifyValueChanged();
void NotifyRendererChanged();
private:
typedef BObjectList<HeaderListener> ListenerList;
@ -180,9 +184,13 @@ private:
int32 fromIndex, int32 toIndex);
// HeaderListener
virtual void HeaderPropertiesChanged(Header* header,
bool redrawNeeded, bool relayoutNeeded);
virtual void HeaderWidthChanged(Header* header);
virtual void HeaderWidthRestrictionsChanged(Header* header);
virtual void HeaderValueChanged(Header* header);
virtual void HeaderRendererChanged(Header* header);
void _HeaderPropertiesChanged(Header* header,
bool redrawNeeded, bool relayoutNeeded);
void _InvalidateHeadersLayout(int32 firstIndex);
void _InvalidateHeaders(int32 firstIndex,
int32 endIndex);