Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(741)

Unified Diff: chrome/browser/profiles/avatar_menu_model.h

Issue 7544031: Create AvatarMenuModel for the new avatar menu interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ready for review Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/profiles/avatar_menu_model.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/avatar_menu_model.h
diff --git a/chrome/browser/profiles/avatar_menu_model.h b/chrome/browser/profiles/avatar_menu_model.h
new file mode 100644
index 0000000000000000000000000000000000000000..7de63799106e661d9527f14279c47f451963ada9
--- /dev/null
+++ b/chrome/browser/profiles/avatar_menu_model.h
@@ -0,0 +1,105 @@
+// 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_PROFILES_AVATAR_MENU_MODEL_H_
+#define CHROME_BROWSER_PROFILES_AVATAR_MENU_MODEL_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/string16.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
+
+class AvatarMenuModelObserver;
+class Browser;
+class ProfileInfoInterface;
+
+namespace gfx {
+class Image;
+}
+
+// This class is the model for the menu-like interface that appears when the
+// avatar icon is clicked in the browser window frame. This class will notify
+// its observer when the backend data changes, and the controller/view for this
+// model should forward actions back to it in response to user events.
+class AvatarMenuModel : public NotificationObserver {
+ public:
+ // Represents an item in the menu.
+ struct Item {
+ Item(size_t model_index, const gfx::Image& icon);
+ ~Item();
+
+ // The icon to be displayed next to the item.
+ const gfx::Image& icon;
+
+ // Whether or not the current browser is using this profile.
+ bool active;
+
+ // The name of this profile.
+ string16 name;
+
+ // A string representing the sync state of the profile.
+ string16 sync_state;
+
+ // The index in the |profile_cache| that this Item represents.
+ size_t model_index;
+ };
+
+ // Constructor. No parameters can be NULL in practice. |browser| can be NULL
+ // for unit tests, but no actions should be executed.
+ AvatarMenuModel(ProfileInfoInterface* profile_cache,
+ AvatarMenuModelObserver* observer,
+ Browser* browser);
+ virtual ~AvatarMenuModel();
+
+ // Actions performed by the view that the controller forwards back to the
+ // model:
+ // Opens a Browser with the specified profile in response to the user
+ // selecting an item.
+ void SwichToProfile(size_t index);
+ // Opens the profile settings in response to clicking the edit button next to
+ // an item.
+ void EditProfile(size_t index);
+ // Creates a new profile.
+ void AddNewProfile();
+
+ // Gets the number of profiles.
+ size_t GetNumberOfItems();
+
+ // Gets the an Item at a specified index.
+ const Item& GetItemAt(size_t index);
+
+ // NotificationObserver:
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
+ private:
+ // Rebuilds the menu from the cache and notifies the |observer_|.
+ void RebuildMenu();
+
+ // Clears the list of items, deleting each.
+ void ClearMenu();
+
+ // The cache that provides the profile information. Weak.
+ ProfileInfoInterface* profile_info_;
+
+ // The observer of this model, which is notified of changes. Weak.
+ AvatarMenuModelObserver* observer_;
+
+ // Browser in which this avatar menu resides. Weak.
+ Browser* browser_;
+
+ // List of built "menu items."
+ std::vector<Item*> items_;
+
+ // Listens for notifications from the ProfileInfoCache.
+ NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(AvatarMenuModel);
+};
+
+#endif // CHROME_BROWSER_PROFILES_AVATAR_MENU_MODEL_H_
« no previous file with comments | « no previous file | chrome/browser/profiles/avatar_menu_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698