open_pdf_in_reader_view.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 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/location_bar/open_pdf_in_reader_view.h" 6 7#include "chrome/browser/ui/pdf/pdf_tab_helper.h" 8#include "chrome/browser/ui/views/open_pdf_in_reader_bubble_view.h" 9#include "grit/generated_resources.h" 10#include "grit/theme_resources.h" 11#include "ui/base/accessibility/accessible_view_state.h" 12#include "ui/base/l10n/l10n_util.h" 13#include "ui/base/resource/resource_bundle.h" 14#include "ui/views/widget/widget.h" 15 16OpenPDFInReaderView::OpenPDFInReaderView(LocationBarView* location_bar_view) 17 : location_bar_view_(location_bar_view), 18 bubble_(NULL), 19 model_(NULL) { 20 set_accessibility_focusable(true); 21 SetImage( 22 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 23 IDR_OMNIBOX_PDF_ICON)); 24 SetTooltipText( 25 l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_OPEN_IN_READER_LINK)); 26 TouchableLocationBarView::Init(this); 27} 28 29OpenPDFInReaderView::~OpenPDFInReaderView() { 30 if (bubble_) 31 bubble_->GetWidget()->RemoveObserver(this); 32} 33 34void OpenPDFInReaderView::Update(content::WebContents* web_contents) { 35 model_ = NULL; 36 if (web_contents) { 37 PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents); 38 model_ = pdf_tab_helper->open_in_reader_prompt(); 39 } 40 41 SetVisible(!!model_); 42} 43 44int OpenPDFInReaderView::GetBuiltInHorizontalPadding() const { 45 return GetBuiltInHorizontalPaddingImpl(); 46} 47 48void OpenPDFInReaderView::ShowBubble() { 49 if (bubble_) 50 return; 51 52 DCHECK(model_); 53 bubble_ = new OpenPDFInReaderBubbleView(this, model_); 54 views::BubbleDelegateView::CreateBubble(bubble_); 55 bubble_->GetWidget()->AddObserver(this); 56 bubble_->GetWidget()->Show(); 57} 58 59void OpenPDFInReaderView::GetAccessibleState(ui::AccessibleViewState* state) { 60 state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_OPEN_PDF_IN_READER); 61 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; 62} 63 64bool OpenPDFInReaderView::OnMousePressed(const ui::MouseEvent& event) { 65 // Show the bubble on mouse release; that is standard button behavior. 66 return true; 67} 68 69void OpenPDFInReaderView::OnMouseReleased(const ui::MouseEvent& event) { 70 if (event.IsOnlyLeftMouseButton() && HitTestPoint(event.location())) 71 ShowBubble(); 72} 73 74bool OpenPDFInReaderView::OnKeyPressed(const ui::KeyEvent& event) { 75 if (event.key_code() != ui::VKEY_SPACE && 76 event.key_code() != ui::VKEY_RETURN) { 77 return false; 78 } 79 80 ShowBubble(); 81 return true; 82} 83 84void OpenPDFInReaderView::OnWidgetDestroying(views::Widget* widget) { 85 if (!bubble_) 86 return; 87 88 bubble_->GetWidget()->RemoveObserver(this); 89 bubble_ = NULL; 90} 91