// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_
#pragma once
#include <string>
#include "views/controls/button/button.h"
#include "views/controls/link.h"
#include "views/view.h"
class SkBitmap;
namespace views {
class ImageView;
class TextButton;
class Throbber;
} // namespace views
namespace chromeos {
class SignoutView;
class PodImageView;
class UserView : public views::View,
public views::LinkController,
public views::ButtonListener {
public:
class Delegate {
public:
virtual ~Delegate() {}
// Notifies that user pressed signout button on screen locker.
virtual void OnSignout() {}
// Notifies that user would like to remove this user from login screen.
virtual void OnRemoveUser() {}
// Returns true if current user is selected.
virtual bool IsUserSelected() const = 0;
// Notifies about locale change.
virtual void OnLocaleChanged() {}
};
// Creates UserView for login screen (|is_login| == true) or screen locker.
// On login screen this will have remove button.
// On screen locker it will have sign out button. |need_background| is needed
// to show image with transparent areas.
UserView(Delegate* delegate, bool is_login, bool need_background);
// view::View overrides.
virtual gfx::Size GetPreferredSize();
virtual void OnLocaleChanged();
// Sets the user's image. If image's size is less than
// 75% of window size, image size is preserved to avoid blur. Otherwise,
// the image is resized to fit window size precisely. Image view repaints
// itself.
void SetImage(const SkBitmap& image, const SkBitmap& image_hot);
// Sets tooltip over the image.
void SetTooltipText(const std::wstring& text);
// Show/Hide remove button.
void SetRemoveButtonVisible(bool flag);
// Enable/Disable sign-out button.
void SetSignoutEnabled(bool enabled);
// Implements LinkController.
// Called when a signout link is clicked.
virtual void LinkActivated(views::Link* source, int event_flags);
// Overridden from views::ButtonListener.
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
private:
void Init(bool need_background);
Delegate* delegate_;
SignoutView* signout_view_;
PodImageView* image_view_;
views::TextButton* remove_button_;
DISALLOW_COPY_AND_ASSIGN(UserView);
};
} // chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_USER_VIEW_H_