Chromium Code Reviews| Index: chrome_frame/infobars/manager.cc |
| =================================================================== |
| --- chrome_frame/infobars/manager.cc (revision 0) |
| +++ chrome_frame/infobars/manager.cc (revision 0) |
| @@ -0,0 +1,103 @@ |
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome_frame/infobars/manager.h" |
| + |
| +#include "base/logging.h" |
| +#include "base/scoped_ptr.h" |
| + |
| +#include "chrome_frame/infobars/internal/host_window.h" |
| +#include "chrome_frame/infobars/internal/infobar_window.h" |
| + |
| +// Connects InfobarWindow to HostWindowManager, and exposes the result as an |
| +// InfobarManager |
|
grt (UTC plus 2)
2010/12/02 16:27:52
nit: end the sentence w/ '.'
|
| +class InfobarManagerImpl |
| + : public InfobarManager, |
| + public InfobarWindow::Host, |
| + public HostWindowManager::Delegate { |
| + public: |
| + explicit InfobarManagerImpl(HostWindowManager* manager); |
| + |
| + // Implementation of InfobarManager |
| + virtual bool Show(InfobarContent* content, InfobarType type); |
| + virtual void Hide(InfobarType type); |
| + virtual void HideAll(); |
| + |
| + // Implementation of HostWindowManager::Delegate |
| + virtual void AdjustDisplacedWindowDimensions(RECT* rect); |
| + |
| + // Implementation of InfobarWindow::Host |
| + virtual HWND GetContainerWindow(); |
| + virtual void UpdateLayout(); |
| + |
| + private: |
| + // Not owned by this instance. |
| + HostWindowManager* manager_; |
| + // Infobar windows. |
| + scoped_ptr<InfobarWindow> infobars_[END_OF_INFOBAR_TYPE]; |
| + DISALLOW_COPY_AND_ASSIGN(InfobarManagerImpl); |
| +}; // class InfobarManagerImpl |
| + |
| +InfobarManagerImpl::InfobarManagerImpl(HostWindowManager* manager) |
| + : manager_(manager) { |
| + for (int index = 0; index < END_OF_INFOBAR_TYPE; ++index) { |
| + infobars_[index].reset( |
| + new InfobarWindow(static_cast<InfobarType>(index))); |
| + infobars_[index]->SetHost(this); |
| + } |
| +} |
| + |
| +bool InfobarManagerImpl::Show(InfobarContent* content, InfobarType type) { |
| + DCHECK(type >= FIRST_INFOBAR_TYPE && type < END_OF_INFOBAR_TYPE); |
| + return infobars_[type]->Show(content); |
| +} |
| + |
| +void InfobarManagerImpl::Hide(InfobarType type) { |
| + DCHECK(type >= FIRST_INFOBAR_TYPE && type < END_OF_INFOBAR_TYPE); |
| + infobars_[type]->Hide(); |
| +} |
| + |
| +void InfobarManagerImpl::HideAll() { |
| + for (int index = 0; index < END_OF_INFOBAR_TYPE; ++index) |
| + Hide(static_cast<InfobarType>(index)); |
| +} |
| + |
| +void InfobarManagerImpl::AdjustDisplacedWindowDimensions(RECT* rect) { |
| + for (int index = 0; index < END_OF_INFOBAR_TYPE; ++index) { |
| + if (infobars_[index] != NULL) |
| + infobars_[index]->ReserveSpace(rect); |
| + } |
| +} |
| + |
| +HWND InfobarManagerImpl::GetContainerWindow() { |
| + return *manager_; |
| +} |
| + |
| +void InfobarManagerImpl::UpdateLayout() { |
| + manager_->UpdateLayout(); |
| +} |
| + |
| +InfobarManager::~InfobarManager() { |
| +} |
| + |
| +InfobarManager* InfobarManager::Get(HWND tab_window) { |
| + HostWindowManager::Delegate* delegate = |
| + HostWindowManager::GetDelegateForHwnd(tab_window); |
| + |
| + if (delegate != NULL) |
| + return static_cast<InfobarManagerImpl*>(delegate); |
| + |
| + scoped_ptr<HostWindowManager> host_manager(new HostWindowManager()); |
| + |
| + // Transferred to host_manager in call to Initialize |
|
grt (UTC plus 2)
2010/12/02 16:27:52
nit: end the sentence w/ '.'
|
| + InfobarManagerImpl* infobar_manager = new InfobarManagerImpl( |
| + host_manager.get()); |
| + |
| + if (host_manager->Initialize(tab_window, infobar_manager)) { |
| + host_manager.release(); // takes ownership of itself |
| + return infobar_manager; |
| + } |
| + |
| + return NULL; |
| +} |
| Property changes on: chrome_frame\infobars\manager.cc |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |