| Index: ash/system/locale/tray_locale.cc
|
| diff --git a/ash/system/locale/tray_locale.cc b/ash/system/locale/tray_locale.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61f80d7d87a108833effaf97a22d406b43e6b4d7
|
| --- /dev/null
|
| +++ b/ash/system/locale/tray_locale.cc
|
| @@ -0,0 +1,115 @@
|
| +// Copyright (c) 2012 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 "ash/system/locale/tray_locale.h"
|
| +
|
| +#include "ash/system/tray/tray_views.h"
|
| +#include "base/string16.h"
|
| +#include "grit/ash_strings.h"
|
| +#include "grit/ui_resources.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/views/view.h"
|
| +#include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/link.h"
|
| +#include "ui/views/controls/link_listener.h"
|
| +
|
| +namespace ash {
|
| +namespace internal {
|
| +
|
| +namespace tray {
|
| +
|
| +class LocaleNotificationView : public TrayNotificationView,
|
| + public views::LinkListener {
|
| + public:
|
| + LocaleNotificationView(TrayLocale* tray,
|
| + LocaleObserver::Delegate* delegate,
|
| + const std::string& cur_locale,
|
| + const std::string& from_locale,
|
| + const std::string& to_locale)
|
| + : tray_(tray),
|
| + delegate_(delegate) {
|
| + string16 from = l10n_util::GetDisplayNameForLocale(
|
| + from_locale, cur_locale, true);
|
| + string16 to = l10n_util::GetDisplayNameForLocale(
|
| + to_locale, cur_locale, true);
|
| +
|
| + views::View* container = new views::View;
|
| +
|
| + views::Label* message = new views::Label(
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_ASH_STATUS_TRAY_LOCALE_CHANGE_MESSAGE, from, to));
|
| + container->AddChildView(message);
|
| +
|
| + views::Link* revert = new views::Link(
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_ASH_STATUS_TRAY_LOCALE_REVERT_MESSAGE, from));
|
| + container->AddChildView(revert);
|
| +
|
| + InitView(container);
|
| + }
|
| +
|
| + // Overridden from views::LinkListener.
|
| + virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE {
|
| + if (delegate_)
|
| + delegate_->RevertLocaleChange();
|
| + }
|
| +
|
| + // Overridden from TrayNotificationView.
|
| + virtual void OnClose() OVERRIDE {
|
| + if (delegate_)
|
| + delegate_->AcceptLocaleChange();
|
| + tray_->HideNotificationView();
|
| + }
|
| +
|
| + private:
|
| + TrayLocale* tray_;
|
| + LocaleObserver::Delegate* delegate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(LocaleNotificationView);
|
| +};
|
| +
|
| +
|
| +} // namespace tray
|
| +
|
| +TrayLocale::TrayLocale()
|
| + : TrayImageItem(IDR_AURA_UBER_TRAY_LOCALE),
|
| + notification_(NULL),
|
| + delegate_(NULL) {
|
| +}
|
| +
|
| +TrayLocale::~TrayLocale() {
|
| +}
|
| +
|
| +bool TrayLocale::GetInitialVisibility() {
|
| + return notification_ != NULL;
|
| +}
|
| +
|
| +views::View* TrayLocale::CreateNotificationView(user::LoginStatus status) {
|
| + if (!delegate_)
|
| + return NULL;
|
| + CHECK(notification_ == NULL);
|
| + notification_ = new tray::LocaleNotificationView(
|
| + this, delegate_, cur_locale_, from_locale_, to_locale_);
|
| + return notification_;
|
| +}
|
| +
|
| +void TrayLocale::DestroyNotificationView() {
|
| + notification_ = NULL;
|
| +}
|
| +
|
| +void TrayLocale::OnLocaleChanged(LocaleObserver::Delegate* delegate,
|
| + const std::string& cur_locale,
|
| + const std::string& from_locale,
|
| + const std::string& to_locale) {
|
| + if (notification_)
|
| + HideNotificationView();
|
| + delegate_ = delegate;
|
| + cur_locale_ = cur_locale;
|
| + from_locale_ = from_locale;
|
| + to_locale_ = to_locale;
|
| + ShowNotificationView();
|
| +}
|
| +
|
| +} // namespace internal
|
| +} // namespace ash
|
|
|