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#ifndef UI_VIEWS_CONTROLS_LINK_H_
6#define UI_VIEWS_CONTROLS_LINK_H_
7
8#include <string>
9
10#include "third_party/skia/include/core/SkColor.h"
11#include "ui/views/controls/label.h"
12
13namespace views {
14
15class LinkListener;
16
17////////////////////////////////////////////////////////////////////////////////
18//
19// Link class
20//
21// A Link is a label subclass that looks like an HTML link. It has a
22// controller which is notified when a click occurs.
23//
24////////////////////////////////////////////////////////////////////////////////
25class VIEWS_EXPORT Link : public Label {
26 public:
27  Link();
28  explicit Link(const string16& title);
29  virtual ~Link();
30
31  static SkColor GetDefaultEnabledColor();
32
33  const LinkListener* listener() { return listener_; }
34  void set_listener(LinkListener* listener) { listener_ = listener; }
35
36  // Overridden from View:
37  virtual void OnEnabledChanged() OVERRIDE;
38  virtual const char* GetClassName() const OVERRIDE;
39  virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE;
40  virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
41  virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
42  virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
43  virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
44  virtual void OnMouseCaptureLost() OVERRIDE;
45  virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
46  virtual bool SkipDefaultKeyEventProcessing(
47      const ui::KeyEvent& event) OVERRIDE;
48  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
49
50  // Overridden from ui::EventHandler:
51  virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
52
53  // Overridden from Label:
54  virtual void SetFont(const gfx::Font& font) OVERRIDE;
55
56  virtual void SetEnabledColor(SkColor color) OVERRIDE;
57  void SetPressedColor(SkColor color);
58  void SetUnderline(bool underline);
59
60  static const char kViewClassName[];
61
62 private:
63  void Init();
64
65  void SetPressed(bool pressed);
66
67  void RecalculateFont();
68
69  LinkListener* listener_;
70
71  // Whether the link should be underlined when enabled.
72  bool underline_;
73
74  // Whether the link is currently pressed.
75  bool pressed_;
76
77  // The color when the link is neither pressed nor disabled.
78  SkColor requested_enabled_color_;
79
80  // The color when the link is pressed.
81  SkColor requested_pressed_color_;
82
83  DISALLOW_COPY_AND_ASSIGN(Link);
84};
85
86}  // namespace views
87
88#endif  // UI_VIEWS_CONTROLS_LINK_H_
89