// Copyright (c) 2009 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/browser/views/options/passwords_exceptions_window_view.h" #include "app/l10n_util.h" #include "chrome/browser/views/options/passwords_page_view.h" #include "chrome/browser/views/options/exceptions_page_view.h" #include "grit/generated_resources.h" #include "grit/locale_settings.h" #include "views/controls/tabbed_pane/tabbed_pane.h" #include "views/window/window.h" // static PasswordsExceptionsWindowView* PasswordsExceptionsWindowView::instance_ = NULL; static const int kDialogPadding = 7; namespace browser { // Declared in browser_dialogs.h so others don't have to depend on our header. void ShowPasswordsExceptionsWindowView(Profile* profile) { PasswordsExceptionsWindowView::Show(profile); } } // namespace browser /////////////////////////////////////////////////////////////////////////////// // PasswordsExceptionsWindowView, public PasswordsExceptionsWindowView::PasswordsExceptionsWindowView(Profile* profile) : tabs_(NULL), passwords_page_view_(NULL), exceptions_page_view_(NULL), profile_(profile) { } // static void PasswordsExceptionsWindowView::Show(Profile* profile) { DCHECK(profile); if (!instance_) { instance_ = new PasswordsExceptionsWindowView(profile); // |instance_| will get deleted once Close() is called. views::Window::CreateChromeWindow(NULL, gfx::Rect(), instance_); } if (!instance_->window()->IsVisible()) { instance_->window()->Show(); } else { instance_->window()->Activate(); } } ///////////////////////////////////////////////////////////////////////////// // PasswordsExceptionsWindowView, views::View implementations void PasswordsExceptionsWindowView::Layout() { tabs_->SetBounds(kDialogPadding, kDialogPadding, width() - (2 * kDialogPadding), height() - (2 * kDialogPadding)); } gfx::Size PasswordsExceptionsWindowView::GetPreferredSize() { return gfx::Size(views::Window::GetLocalizedContentsSize( IDS_PASSWORDS_DIALOG_WIDTH_CHARS, IDS_PASSWORDS_DIALOG_HEIGHT_LINES)); } void PasswordsExceptionsWindowView::ViewHierarchyChanged( bool is_add, views::View* parent, views::View* child) { if (is_add && child == this) Init(); } ///////////////////////////////////////////////////////////////////////////// // PasswordsExceptionsWindowView, views::DisloagDelegate implementations int PasswordsExceptionsWindowView::GetDialogButtons() const { return MessageBoxFlags::DIALOGBUTTON_CANCEL; } std::wstring PasswordsExceptionsWindowView::GetWindowTitle() const { return l10n_util::GetString(IDS_PASSWORDS_EXCEPTIONS_WINDOW_TITLE); } void PasswordsExceptionsWindowView::WindowClosing() { // |instance_| is deleted once the window is closed, so we just have to set // it to NULL. instance_ = NULL; } views::View* PasswordsExceptionsWindowView::GetContentsView() { return this; } ///////////////////////////////////////////////////////////////////////////// // PasswordsExceptionsWindowView, private void PasswordsExceptionsWindowView::Init() { tabs_ = new views::TabbedPane(); AddChildView(tabs_); passwords_page_view_ = new PasswordsPageView(profile_); tabs_->AddTab(l10n_util::GetString( IDS_PASSWORDS_SHOW_PASSWORDS_TAB_TITLE), passwords_page_view_); exceptions_page_view_ = new ExceptionsPageView(profile_); tabs_->AddTab(l10n_util::GetString( IDS_PASSWORDS_EXCEPTIONS_TAB_TITLE), exceptions_page_view_); }