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
+93 -14
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 // #pragma mark - Header
@@ -142,7 +166,7 @@ Header::SetWidth(float width)
{ {
if (width != fWidth) { if (width != fWidth) {
fWidth = width; fWidth = width;
NotifyPropertiesChanged(true, true); NotifyWidthChanged();
} }
} }
@@ -152,7 +176,7 @@ Header::SetMinWidth(float width)
{ {
if (width != fMinWidth) { if (width != fMinWidth) {
fMinWidth = width; fMinWidth = width;
NotifyPropertiesChanged(false, false); NotifyWidthRestrictionsChanged();
} }
} }
@@ -162,7 +186,7 @@ Header::SetMaxWidth(float width)
{ {
if (width != fMaxWidth) { if (width != fMaxWidth) {
fMaxWidth = width; fMaxWidth = width;
NotifyPropertiesChanged(false, false); NotifyWidthRestrictionsChanged();
} }
} }
@@ -172,7 +196,7 @@ Header::SetPreferredWidth(float width)
{ {
if (width != fPreferredWidth) { if (width != fPreferredWidth) {
fPreferredWidth = width; fPreferredWidth = width;
NotifyPropertiesChanged(false, false); NotifyWidthRestrictionsChanged();
} }
} }
@@ -189,7 +213,7 @@ Header::SetResizable(bool resizable)
{ {
if (resizable != fResizable) { if (resizable != fResizable) {
fResizable = resizable; fResizable = resizable;
NotifyPropertiesChanged(false, false); NotifyWidthRestrictionsChanged();
} }
} }
@@ -206,7 +230,7 @@ void
Header::SetValue(const BVariant& value) Header::SetValue(const BVariant& value)
{ {
fValue = value; fValue = value;
NotifyPropertiesChanged(true, false); NotifyValueChanged();
} }
@@ -220,10 +244,7 @@ Header::ModelIndex() const
void void
Header::SetModelIndex(int32 index) Header::SetModelIndex(int32 index)
{ {
if (index != fModelIndex) { fModelIndex = index;
fModelIndex = index;
NotifyPropertiesChanged(true, false);
}
} }
@@ -239,7 +260,7 @@ Header::SetHeaderRenderer(HeaderRenderer* renderer)
{ {
if (renderer != fRenderer) { if (renderer != fRenderer) {
fRenderer = renderer; fRenderer = renderer;
NotifyPropertiesChanged(true, false); NotifyRendererChanged();
} }
} }
@@ -259,11 +280,41 @@ Header::RemoveListener(HeaderListener* listener)
void void
Header::NotifyPropertiesChanged(bool redrawNeeded, bool relayoutNeeded) Header::NotifyWidthChanged()
{ {
for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) { for (int32 i = fListeners.CountItems() - 1; i >= 0; i--) {
HeaderListener* listener = fListeners.ItemAt(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 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) bool relayoutNeeded)
{ {
if (!redrawNeeded && !relayoutNeeded) if (!redrawNeeded && !relayoutNeeded)
+14 -6
View File
@@ -47,8 +47,10 @@ class HeaderListener {
public: public:
virtual ~HeaderListener(); virtual ~HeaderListener();
virtual void HeaderPropertiesChanged(Header* header, virtual void HeaderWidthChanged(Header* header);
bool redrawNeeded, bool relayoutNeeded) = 0; virtual void HeaderWidthRestrictionsChanged(Header* header);
virtual void HeaderValueChanged(Header* header);
virtual void HeaderRendererChanged(Header* header);
}; };
@@ -85,8 +87,10 @@ public:
void RemoveListener(HeaderListener* listener); void RemoveListener(HeaderListener* listener);
protected: protected:
void NotifyPropertiesChanged(bool redrawNeeded, void NotifyWidthChanged();
bool relayoutNeeded); void NotifyWidthRestrictionsChanged();
void NotifyValueChanged();
void NotifyRendererChanged();
private: private:
typedef BObjectList<HeaderListener> ListenerList; typedef BObjectList<HeaderListener> ListenerList;
@@ -180,9 +184,13 @@ private:
int32 fromIndex, int32 toIndex); int32 fromIndex, int32 toIndex);
// HeaderListener // HeaderListener
virtual void HeaderPropertiesChanged(Header* header, virtual void HeaderWidthChanged(Header* header);
bool redrawNeeded, bool relayoutNeeded); 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 _InvalidateHeadersLayout(int32 firstIndex);
void _InvalidateHeaders(int32 firstIndex, void _InvalidateHeaders(int32 firstIndex,
int32 endIndex); int32 endIndex);