Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2010 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 CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
      6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
      7 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "views/controls/button/button.h"
     12 #include "views/controls/link.h"
     13 #include "views/view.h"
     14 
     15 class SkBitmap;
     16 
     17 namespace views {
     18 class ImageView;
     19 class TextButton;
     20 class Throbber;
     21 }  // namespace views
     22 
     23 namespace chromeos {
     24 
     25 class SignoutView;
     26 class PodImageView;
     27 
     28 class UserView : public views::View,
     29                  public views::LinkController,
     30                  public views::ButtonListener {
     31  public:
     32   class Delegate {
     33    public:
     34     virtual ~Delegate() {}
     35 
     36     // Notifies that user pressed signout button on screen locker.
     37     virtual void OnSignout() {}
     38 
     39     // Notifies that user would like to remove this user from login screen.
     40     virtual void OnRemoveUser() {}
     41 
     42     // Returns true if current user is selected.
     43     virtual bool IsUserSelected() const = 0;
     44 
     45     // Notifies about locale change.
     46     virtual void OnLocaleChanged() {}
     47   };
     48 
     49   // Creates UserView for login screen (|is_login| == true) or screen locker.
     50   // On login screen this will have remove button.
     51   // On screen locker it will have sign out button. |need_background| is needed
     52   // to show image with transparent areas.
     53   UserView(Delegate* delegate, bool is_login, bool need_background);
     54 
     55   // view::View overrides.
     56   virtual gfx::Size GetPreferredSize();
     57   virtual void OnLocaleChanged();
     58 
     59   // Sets the user's image. If image's size is less than
     60   // 75% of window size, image size is preserved to avoid blur. Otherwise,
     61   // the image is resized to fit window size precisely. Image view repaints
     62   // itself.
     63   void SetImage(const SkBitmap& image, const SkBitmap& image_hot);
     64 
     65   // Sets tooltip over the image.
     66   void SetTooltipText(const std::wstring& text);
     67 
     68   // Show/Hide remove button.
     69   void SetRemoveButtonVisible(bool flag);
     70 
     71   // Enable/Disable sign-out button.
     72   void SetSignoutEnabled(bool enabled);
     73 
     74   // Implements LinkController.
     75   // Called when a signout link is clicked.
     76   virtual void LinkActivated(views::Link* source, int event_flags);
     77 
     78   // Overridden from views::ButtonListener.
     79   virtual void ButtonPressed(views::Button* sender, const views::Event& event);
     80 
     81  private:
     82   void Init(bool need_background);
     83 
     84   Delegate* delegate_;
     85 
     86   SignoutView* signout_view_;
     87   PodImageView* image_view_;
     88 
     89   views::TextButton* remove_button_;
     90 
     91   DISALLOW_COPY_AND_ASSIGN(UserView);
     92 };
     93 
     94 }  // chromeos
     95 
     96 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
     97