C++程序  |  107行  |  3.83 KB

// Copyright (c) 2011 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_VIEWS_LOGIN_DISPLAY_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_LOGIN_DISPLAY_H_
#pragma once

#include <string>
#include <vector>

#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "chrome/browser/chromeos/login/login_display.h"
#include "chrome/browser/chromeos/login/message_bubble.h"
#include "chrome/browser/chromeos/login/user_controller.h"
#include "ui/gfx/rect.h"

namespace chromeos {

class HelpAppLauncher;
class MessageBubble;

// Views-based login UI implementation.
// Uses UserController for each user pod / guest pod / new user pod and
// ExistingUserView / GuestUserView / NewUserView as their views.
// When Init is invoked, a UserController is created for each of the Users's
// in the UserManager (including one for new user and one for Guest login),
// and the window manager is then told to show the windows.
class ViewsLoginDisplay : public LoginDisplay,
                          public UserController::Delegate,
                          public MessageBubbleDelegate {
 public:
  ViewsLoginDisplay(LoginDisplay::Delegate* delegate,
                    const gfx::Rect& background_bounds);
  virtual ~ViewsLoginDisplay();

  // LoginDisplay implementation:
  virtual void Init(const std::vector<UserManager::User>& users,
                    bool show_guest,
                    bool show_new_user);
  virtual void OnBeforeUserRemoved(const std::string& username);
  virtual void OnUserImageChanged(UserManager::User* user);
  virtual void OnUserRemoved(const std::string& username);
  virtual void OnFadeOut();
  virtual void SetUIEnabled(bool is_enabled);
  virtual void ShowError(int error_msg_id,
                         int login_attempts,
                         HelpAppLauncher::HelpTopic help_topic_id);

  // UserController::Delegate implementation:
  virtual void CreateAccount() OVERRIDE;
  virtual void Login(UserController* source, const string16& password) OVERRIDE;
  virtual void LoginAsGuest() OVERRIDE;
  virtual void ClearErrors() OVERRIDE;
  virtual void OnUserSelected(UserController* source) OVERRIDE;
  virtual void RemoveUser(UserController* source) OVERRIDE;
  virtual void SelectUser(int index) OVERRIDE;
  virtual void StartEnterpriseEnrollment() OVERRIDE;

  // Overridden from views::MessageBubbleDelegate:
  virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape) {
    bubble_ = NULL;
  }
  virtual bool CloseOnEscape() { return true; }
  virtual bool FadeInOnShow() { return false; }
  virtual void OnHelpLinkActivated();

 private:
  // Returns existing UserController instance by |email|.
  // NULL is returned if relevant instance is not found.
  UserController* GetUserControllerByEmail(const std::string& email);

  // Pointer to shown message bubble. We don't need to delete it because
  // it will be deleted on bubble closing.
  MessageBubble* bubble_;

  // UserController that corresponds user that's in process of being removed.
  // Has meaningful value only between OnBeforeUserRemoved()
  // and OnUserRemoved() calls.
  UserController* controller_for_removal_;

  // The set of visible UserControllers.
  std::vector<UserController*> controllers_;

  // Last error message ID.
  int error_msg_id_;

  // Help application used for help dialogs.
  scoped_refptr<HelpAppLauncher> help_app_;

  // Last error help topic ID.
  HelpAppLauncher::HelpTopic help_topic_id_;

  // The set of invisible UserControllers.
  std::vector<UserController*> invisible_controllers_;

  // Index of selected user (from the set of visible users).
  size_t selected_view_index_;

  DISALLOW_COPY_AND_ASSIGN(ViewsLoginDisplay);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_VIEWS_LOGIN_DISPLAY_H_