1 // Copyright 2013 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 #ifndef ASH_SYSTEM_TRAY_HOVER_HIGHLIGHT_VIEW_H_ 6 #define ASH_SYSTEM_TRAY_HOVER_HIGHLIGHT_VIEW_H_ 7 8 #include "ash/system/tray/actionable_view.h" 9 #include "base/basictypes.h" 10 #include "base/compiler_specific.h" 11 #include "ui/gfx/font.h" 12 #include "ui/gfx/text_constants.h" 13 14 namespace views { 15 class Label; 16 } 17 18 namespace ash { 19 class ViewClickListener; 20 21 // A view that changes background color on hover, and triggers a callback in the 22 // associated ViewClickListener on click. The view can also be forced to 23 // maintain a fixed height. 24 class HoverHighlightView : public ActionableView { 25 public: 26 explicit HoverHighlightView(ViewClickListener* listener); 27 virtual ~HoverHighlightView(); 28 29 // Convenience function for adding an icon and a label. This also sets the 30 // accessible name. 31 void AddIconAndLabel(const gfx::ImageSkia& image, 32 const base::string16& text, 33 gfx::Font::FontStyle style); 34 35 // Convenience function for adding a label with padding on the left for a 36 // blank icon. This also sets the accessible name. 37 // Returns label after parenting it. 38 views::Label* AddLabel(const base::string16& text, 39 gfx::HorizontalAlignment alignment, 40 gfx::Font::FontStyle style); 41 42 // Convenience function for adding an optional check and a label. In the 43 // absence of a check, padding is added to align with checked items. 44 // Returns label after parenting it. 45 views::Label* AddCheckableLabel(const base::string16& text, 46 gfx::Font::FontStyle style, 47 bool checked); 48 49 // Allows view to expand its height. 50 // Size of unexapandable view is fixed and equals to kTrayPopupItemHeight. 51 void SetExpandable(bool expandable); 52 set_highlight_color(SkColor color)53 void set_highlight_color(SkColor color) { highlight_color_ = color; } set_default_color(SkColor color)54 void set_default_color(SkColor color) { default_color_ = color; } set_text_highlight_color(SkColor c)55 void set_text_highlight_color(SkColor c) { text_highlight_color_ = c; } set_text_default_color(SkColor color)56 void set_text_default_color(SkColor color) { text_default_color_ = color; } 57 text_label()58 views::Label* text_label() { return text_label_; } 59 hover()60 bool hover() const { return hover_; } 61 62 protected: 63 // Overridden from views::View. 64 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 65 66 private: 67 // Overridden from ActionableView: 68 virtual bool PerformAction(const ui::Event& event) OVERRIDE; 69 70 // Overridden from views::View. 71 virtual gfx::Size GetPreferredSize() const OVERRIDE; 72 virtual int GetHeightForWidth(int width) const OVERRIDE; 73 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; 74 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; 75 virtual void OnEnabledChanged() OVERRIDE; 76 virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE; 77 virtual void OnFocus() OVERRIDE; 78 79 ViewClickListener* listener_; 80 views::Label* text_label_; 81 SkColor highlight_color_; 82 SkColor default_color_; 83 SkColor text_highlight_color_; 84 SkColor text_default_color_; 85 bool hover_; 86 bool expandable_; 87 bool checkable_; 88 bool checked_; 89 90 DISALLOW_COPY_AND_ASSIGN(HoverHighlightView); 91 }; 92 93 } // namespace ash 94 95 #endif // ASH_SYSTEM_TRAY_HOVER_HIGHLIGHT_VIEW_H_ 96