1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/button.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/link.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ImageView;
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TextButton;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Throbber;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace views
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SignoutView;
26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass PodImageView;
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass UserView : public views::View,
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                 public views::LinkController,
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                 public views::ButtonListener {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  class Delegate {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   public:
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual ~Delegate() {}
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Notifies that user pressed signout button on screen locker.
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void OnSignout() {}
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Notifies that user would like to remove this user from login screen.
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void OnRemoveUser() {}
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Returns true if current user is selected.
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    virtual bool IsUserSelected() const = 0;
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Notifies about locale change.
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    virtual void OnLocaleChanged() {}
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates UserView for login screen (|is_login| == true) or screen locker.
50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // On login screen this will have remove button.
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // On screen locker it will have sign out button. |need_background| is needed
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // to show image with transparent areas.
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  UserView(Delegate* delegate, bool is_login, bool need_background);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // view::View overrides.
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual gfx::Size GetPreferredSize();
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnLocaleChanged();
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Sets the user's image. If image's size is less than
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // 75% of window size, image size is preserved to avoid blur. Otherwise,
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // the image is resized to fit window size precisely. Image view repaints
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // itself.
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void SetImage(const SkBitmap& image, const SkBitmap& image_hot);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets tooltip over the image.
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetTooltipText(const std::wstring& text);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Show/Hide remove button.
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void SetRemoveButtonVisible(bool flag);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Enable/Disable sign-out button.
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetSignoutEnabled(bool enabled);
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Implements LinkController.
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Called when a signout link is clicked.
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void LinkActivated(views::Link* source, int event_flags);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Overridden from views::ButtonListener.
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void ButtonPressed(views::Button* sender, const views::Event& event);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void Init(bool need_background);
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Delegate* delegate_;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SignoutView* signout_view_;
87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  PodImageView* image_view_;
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::TextButton* remove_button_;
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(UserView);
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // chromeos
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
97