| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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_UI_GTK_AVATAR_MENU_ITEM_GTK_H_ | |
| 6 #define CHROME_BROWSER_UI_GTK_AVATAR_MENU_ITEM_GTK_H_ | |
| 7 | |
| 8 #include <gtk/gtk.h> | |
| 9 | |
| 10 #include "chrome/browser/profiles/avatar_menu.h" | |
| 11 #include "content/public/browser/notification_observer.h" | |
| 12 #include "content/public/browser/notification_registrar.h" | |
| 13 #include "ui/base/gtk/gtk_signal.h" | |
| 14 #include "ui/base/gtk/owned_widget_gtk.h" | |
| 15 | |
| 16 class GtkThemeService; | |
| 17 | |
| 18 // This widget contains the profile icon, user name, and synchronization status | |
| 19 // to be displayed in the AvatarMenuBubble. Clicking the profile will open a new | |
| 20 // browser window, and when the user hovers over an active profile item, a link | |
| 21 // is displayed that will allow editing the profile. | |
| 22 class AvatarMenuItemGtk : public content::NotificationObserver { | |
| 23 public: | |
| 24 // Delegates opening or editing a profile. | |
| 25 class Delegate { | |
| 26 public: | |
| 27 // Open a new browser window using the profile at |profile_index|. | |
| 28 virtual void OpenProfile(size_t profile_index) = 0; | |
| 29 | |
| 30 // Edit the profile given by |profile_index|. | |
| 31 virtual void EditProfile(size_t profile_index) = 0; | |
| 32 }; | |
| 33 | |
| 34 AvatarMenuItemGtk(Delegate* delegate, | |
| 35 const AvatarMenu::Item& item, | |
| 36 size_t item_index, | |
| 37 GtkThemeService* theme_service); | |
| 38 virtual ~AvatarMenuItemGtk(); | |
| 39 | |
| 40 // Returns the root widget for this menu item. | |
| 41 GtkWidget* widget() { return widget_.get(); } | |
| 42 | |
| 43 // content::NotificationObserver implementation. | |
| 44 virtual void Observe(int type, | |
| 45 const content::NotificationSource& source, | |
| 46 const content::NotificationDetails& details) OVERRIDE; | |
| 47 | |
| 48 private: | |
| 49 | |
| 50 void ShowStatusLabel(); | |
| 51 void ShowEditLink(); | |
| 52 | |
| 53 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileClick, | |
| 54 GdkEventButton*); | |
| 55 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileEnter, | |
| 56 GdkEventCrossing*); | |
| 57 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileLeave, | |
| 58 GdkEventCrossing*); | |
| 59 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileFocusIn, | |
| 60 GdkEventFocus*); | |
| 61 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileFocusOut, | |
| 62 GdkEventFocus*); | |
| 63 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnProfileKeyPress, | |
| 64 GdkEventKey*); | |
| 65 CHROMEGTK_CALLBACK_1(AvatarMenuItemGtk, gboolean, OnEventBoxExpose, | |
| 66 GdkEventExpose*); | |
| 67 CHROMEGTK_CALLBACK_0(AvatarMenuItemGtk, void, OnEditProfileLinkClicked); | |
| 68 | |
| 69 // Create all widgets in this menu item, using |theme_service|. | |
| 70 void Init(GtkThemeService* theme_service); | |
| 71 | |
| 72 // A weak pointer to the item's delegate. | |
| 73 Delegate* delegate_; | |
| 74 | |
| 75 // Profile information to display for this item, e.g. user name, sync status. | |
| 76 AvatarMenu::Item item_; | |
| 77 | |
| 78 // The index of this profile. The delegate uses this value to distinguish | |
| 79 // which profile should be switched to. | |
| 80 size_t item_index_; | |
| 81 | |
| 82 // The root widget for this menu item. | |
| 83 ui::OwnedWidgetGtk widget_; | |
| 84 | |
| 85 // Provides colors. | |
| 86 GtkThemeService* theme_service_; | |
| 87 | |
| 88 // A weak pointer to a label that displays the sync status. It is not shown | |
| 89 // when the user is hovering over the item if the profile is the active | |
| 90 // profile. | |
| 91 GtkWidget* status_label_; | |
| 92 | |
| 93 // A weak pointer to a link button to edit the given profile. It is shown only | |
| 94 // when the user is hovering over the active profile. | |
| 95 GtkWidget* link_alignment_; | |
| 96 | |
| 97 // A weak pointer to a GtkChromeLinkButton so we can keep the use_gtk_theme | |
| 98 // property up to date. | |
| 99 GtkWidget* edit_profile_link_; | |
| 100 | |
| 101 // The highlighted color. Depending on the theme, this is either |widget|'s | |
| 102 // bg[GTK_STATE_SELECTED] or a static highlight. | |
| 103 GdkColor highlighted_color_; | |
| 104 | |
| 105 // The unhighlighted color. Depending on the theme, this is either NULL or a | |
| 106 // pointer to static data. | |
| 107 const GdkColor* unhighlighted_color_; | |
| 108 | |
| 109 content::NotificationRegistrar registrar_; | |
| 110 | |
| 111 DISALLOW_COPY_AND_ASSIGN(AvatarMenuItemGtk); | |
| 112 }; | |
| 113 | |
| 114 #endif // CHROME_BROWSER_UI_GTK_AVATAR_MENU_ITEM_GTK_H_ | |
| OLD | NEW |