Index: chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
diff --git a/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f32d9363b65295361878c6e1d4f8ab97813fa9f1 |
--- /dev/null |
+++ b/chrome/browser/ui/views/location_bar/zoom_bubble_view.cc |
@@ -0,0 +1,100 @@ |
+// 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 "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" |
+ |
+#include "base/bind.h" |
+#include "base/message_loop.h" |
+#include "grit/generated_resources.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/views/layout/fill_layout.h" |
+ |
+namespace { |
+ |
+// The number of milliseconds the bubble should stay on the screen for if it |
+// will autoclose. |
+const int kBubbleCloseDelay = 400; |
+ |
+} |
+ |
+// Singleton instance. |
+ZoomBubbleView* ZoomBubbleView::zoom_bubble_ = NULL; |
+ |
+// Declared in browser_dialogs.h.. |
+namespace browser { |
+ |
+void ShowZoomBubbleView(views::View* anchor_view, |
+ int zoom_percent, |
+ bool autoclose) { |
+ ZoomBubbleView::ShowBubble(anchor_view, zoom_percent, autoclose); |
+} |
+ |
+void HideZoomBubbleView() { |
+ ZoomBubbleView::CloseBubble(); |
+} |
+ |
+bool IsZoomBubbleViewShowing() { |
+ return ZoomBubbleView::IsShowing(); |
+} |
+ |
+} |
+ |
+// static |
+void ZoomBubbleView::ShowBubble(views::View* anchor_view, |
+ int zoom_percent, |
+ bool autoclose) { |
+ if (IsShowing()) |
+ CloseBubble(); |
+ |
+ zoom_bubble_ = new ZoomBubbleView(anchor_view, zoom_percent, autoclose); |
+ views::BubbleDelegateView::CreateBubble(zoom_bubble_); |
+ zoom_bubble_->Show(); |
+} |
+ |
+// static |
+void ZoomBubbleView::CloseBubble() { |
+ if (IsShowing()) |
+ zoom_bubble_->Close(); |
+} |
+ |
+// static |
+bool ZoomBubbleView::IsShowing() { |
+ return zoom_bubble_ != NULL; |
+} |
+ |
+void ZoomBubbleView::WindowClosing() { |
+ DCHECK(zoom_bubble_ == this); |
+ zoom_bubble_ = NULL; |
+} |
+ |
+void ZoomBubbleView::Init() { |
+ SetLayoutManager(new views::FillLayout()); |
+ zoom_percent_label_ = new views::Label( |
+ l10n_util::GetStringFUTF16Int(IDS_ZOOM_PERCENT, zoom_percent_)); |
+ AddChildView(zoom_percent_label_); |
+ |
+ if (autoclose_) |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&ZoomBubbleView::Close, factory_.GetWeakPtr()), |
+ kBubbleCloseDelay); |
+} |
+ |
+ZoomBubbleView::ZoomBubbleView(views::View* anchor_view, |
+ int zoom_percent, |
+ bool autoclose) |
+ : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), |
+ ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)), |
+ zoom_percent_(zoom_percent), |
+ autoclose_(autoclose), |
+ zoom_percent_label_(NULL) { |
+ set_use_focusless(autoclose); |
+} |
+ |
+ZoomBubbleView::~ZoomBubbleView() { |
+} |
+ |
+void ZoomBubbleView::Close() { |
+ GetWidget()->Close(); |
+} |