void AppGroupView::MessageReceived(BMessage* msg) { switch (msg->what) { case kRemoveView: { NotificationView* view = NULL; if (msg->FindPointer("view", (void**)&view) != B_OK) return; infoview_t::iterator vIt = find(fInfo.begin(), fInfo.end(), view); if (vIt == fInfo.end()) break; fInfo.erase(vIt); view->RemoveSelf(); delete view; fParent->PostMessage(msg); if (!this->HasChildren()) { Hide(); BMessage removeSelfMessage(kRemoveGroupView); removeSelfMessage.AddPointer("view", this); fParent->PostMessage(&removeSelfMessage); } break; } default: BView::MessageReceived(msg); } }
void AppGroupView::AddInfo(NotificationView* view) { BString id = view->MessageID(); bool found = false; if (id.Length() > 0) { int32 children = fInfo.size(); for (int32 i = 0; i < children; i++) { if (id == fInfo[i]->MessageID()) { NotificationView* oldView = fInfo[i]; fParent->NotificationViewSwapped(oldView, view); oldView->RemoveSelf(); delete oldView; fInfo[i] = view; found = true; break; } } } // Invalidate all children to show or hide the close buttons in the // notification view int32 children = fInfo.size(); for (int32 i = 0; i < children; i++) { fInfo[i]->Invalidate(); } if (!found) { fInfo.push_back(view); } GetLayout()->AddView(view); if (IsHidden()) Show(); if (view->IsHidden(view) && !fCollapsed) view->Show(); }