1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "SubWindowManager.h" 7 8#include <new> 9 10#include <Message.h> 11 12#include <AutoLocker.h> 13 14 15SubWindowManager::SubWindowManager(BLooper* parent) 16 : 17 fParent(parent), 18 fSubWindows() 19{ 20} 21 22 23SubWindowManager::~SubWindowManager() 24{ 25} 26 27 28status_t 29SubWindowManager::Init() 30{ 31 return fSubWindows.Init(); 32} 33 34 35bool 36SubWindowManager::AddSubWindow(SubWindow* window) 37{ 38 AutoLocker<SubWindowManager> locker(this); 39 40 if (fSubWindows.Lookup(*window->GetSubWindowKey()) != NULL) 41 return false; 42 43 fSubWindows.Insert(window); 44 45 return true; 46} 47 48 49bool 50SubWindowManager::RemoveSubWindow(SubWindow* window) 51{ 52 AutoLocker<SubWindowManager> locker(this); 53 54 return fSubWindows.Remove(window); 55} 56 57 58SubWindow* 59SubWindowManager::LookupSubWindow(const SubWindowKey& key) const 60{ 61 return fSubWindows.Lookup(key); 62} 63 64 65void 66SubWindowManager::Broadcast(uint32 messageCode) 67{ 68 BMessage message(messageCode); 69 Broadcast(&message); 70} 71 72 73void 74SubWindowManager::Broadcast(BMessage* message) 75{ 76 AutoLocker<SubWindowManager> locker(this); 77 78 SubWindowTable::Iterator it = fSubWindows.GetIterator(); 79 while (SubWindow* window = it.Next()) 80 window->PostMessage(message); 81} 82