OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/views/options/fonts_languages_window_view.h" | |
6 | |
7 #include "base/utf_string_conversions.h" | |
8 #include "chrome/browser/profiles/profile.h" | |
9 #include "chrome/browser/ui/views/options/fonts_page_view.h" | |
10 #include "chrome/browser/ui/views/options/languages_page_view.h" | |
11 #include "chrome/common/chrome_constants.h" | |
12 #include "grit/chromium_strings.h" | |
13 #include "grit/generated_resources.h" | |
14 #include "grit/locale_settings.h" | |
15 #include "ui/base/l10n/l10n_util.h" | |
16 #include "views/controls/tabbed_pane/tabbed_pane.h" | |
17 #include "views/window/window.h" | |
18 | |
19 // static | |
20 static FontsLanguagesWindowView* instance_ = NULL; | |
21 static const int kDialogPadding = 7; | |
22 | |
23 /////////////////////////////////////////////////////////////////////////////// | |
24 // FontsLanguagesWindowView, public: | |
25 | |
26 FontsLanguagesWindowView::FontsLanguagesWindowView(Profile* profile) | |
27 // Always show preferences for the original profile. Most state when off | |
28 // the record comes from the original profile, but we explicitly use | |
29 // the original profile to avoid potential problems. | |
30 : profile_(profile->GetOriginalProfile()), | |
31 fonts_page_(NULL), | |
32 languages_page_(NULL) { | |
33 } | |
34 | |
35 FontsLanguagesWindowView::~FontsLanguagesWindowView() { | |
36 } | |
37 | |
38 /////////////////////////////////////////////////////////////////////////////// | |
39 // FontsLanguagesWindowView, views::DialogDelegate implementation: | |
40 | |
41 bool FontsLanguagesWindowView::Accept() { | |
42 fonts_page_->SaveChanges(); | |
43 languages_page_->SaveChanges(); | |
44 return true; | |
45 } | |
46 | |
47 /////////////////////////////////////////////////////////////////////////////// | |
48 // FontsLanguagesWindowView, views::WindowDelegate implementation: | |
49 | |
50 std::wstring FontsLanguagesWindowView::GetWindowTitle() const { | |
51 return UTF16ToWide( | |
52 l10n_util::GetStringUTF16(IDS_FONT_LANGUAGE_SETTING_WINDOWS_TITLE)); | |
53 } | |
54 | |
55 void FontsLanguagesWindowView::WindowClosing() { | |
56 // Clear the static instance so that the next time ShowOptionsWindow() is | |
57 // called a new window is opened. | |
58 instance_ = NULL; | |
59 } | |
60 | |
61 views::View* FontsLanguagesWindowView::GetContentsView() { | |
62 return this; | |
63 } | |
64 | |
65 /////////////////////////////////////////////////////////////////////////////// | |
66 // FontsLanguagesWindowView, views::View overrides: | |
67 | |
68 void FontsLanguagesWindowView::Layout() { | |
69 tabs_->SetBounds(kDialogPadding, kDialogPadding, | |
70 width() - (2 * kDialogPadding), | |
71 height() - (2 * kDialogPadding)); | |
72 } | |
73 | |
74 gfx::Size FontsLanguagesWindowView::GetPreferredSize() { | |
75 return gfx::Size(views::Window::GetLocalizedContentsSize( | |
76 IDS_FONTSLANG_DIALOG_WIDTH_CHARS, | |
77 IDS_FONTSLANG_DIALOG_HEIGHT_LINES)); | |
78 } | |
79 | |
80 void FontsLanguagesWindowView::ShowTabPage(FontsLanguagesPage page) { | |
81 // If the window is not yet visible, we need to show it (it will become | |
82 // active), otherwise just bring it to the front. | |
83 if (!window()->IsVisible()) { | |
84 window()->Show(); | |
85 } else { | |
86 window()->Activate(); | |
87 } | |
88 | |
89 // If the page is out of bounds, reset to the first tab. | |
90 if (page < 0 || page >= tabs_->GetTabCount()) | |
91 page = FONTS_ENCODING_PAGE; | |
92 | |
93 tabs_->SelectTabAt(page); | |
94 } | |
95 | |
96 void FontsLanguagesWindowView::ViewHierarchyChanged( | |
97 bool is_add, views::View* parent, views::View* child) { | |
98 // Can't init before we're inserted into a Container, because we require | |
99 // a HWND to parent native child controls to. | |
100 if (is_add && child == this) | |
101 Init(); | |
102 } | |
103 | |
104 /////////////////////////////////////////////////////////////////////////////// | |
105 // FontsLanguagesWindowView, private: | |
106 | |
107 void FontsLanguagesWindowView::Init() { | |
108 tabs_ = new views::TabbedPane; | |
109 AddChildView(tabs_); | |
110 | |
111 fonts_page_ = new FontsPageView(profile_); | |
112 tabs_->AddTab(UTF16ToWide(l10n_util::GetStringUTF16( | |
113 IDS_FONT_LANGUAGE_SETTING_FONT_TAB_TITLE)), fonts_page_); | |
114 | |
115 languages_page_ = new LanguagesPageView(profile_); | |
116 tabs_->AddTab(UTF16ToWide(l10n_util::GetStringUTF16( | |
117 IDS_FONT_LANGUAGE_SETTING_LANGUAGES_TAB_TITLE)), languages_page_); | |
118 } | |
119 | |
120 void ShowFontsLanguagesWindow(gfx::NativeWindow window, | |
121 FontsLanguagesPage page, | |
122 Profile* profile) { | |
123 DCHECK(profile); | |
124 | |
125 // If there's already an existing fonts and language window, activate it and | |
126 // switch to the specified page. | |
127 // TODO(beng): note this is not multi-simultaneous-profile-safe. When we care | |
128 // about this case this will have to be fixed. | |
129 if (!instance_) { | |
130 instance_ = new FontsLanguagesWindowView(profile); | |
131 views::Window::CreateChromeWindow(window, gfx::Rect(), instance_); | |
132 } | |
133 instance_->ShowTabPage(page); | |
134 } | |
OLD | NEW |