| // 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_STATUS_ICONS_STATUS_ICON_H_ |
| #define CHROME_BROWSER_STATUS_ICONS_STATUS_ICON_H_ |
| #pragma once |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/string16.h" |
| |
| class SkBitmap; |
| |
| namespace ui { |
| class MenuModel; |
| } |
| |
| class StatusIcon { |
| public: |
| StatusIcon(); |
| virtual ~StatusIcon(); |
| |
| // Sets the image associated with this status icon. |
| virtual void SetImage(const SkBitmap& image) = 0; |
| |
| // Sets the image associated with this status icon when pressed. |
| virtual void SetPressedImage(const SkBitmap& image) = 0; |
| |
| // Sets the hover text for this status icon. |
| virtual void SetToolTip(const string16& tool_tip) = 0; |
| |
| // Displays a notification balloon with the specified contents. |
| virtual void DisplayBalloon(const string16& title, |
| const string16& contents) = 0; |
| |
| // Set the context menu for this icon. The icon takes ownership of the passed |
| // context menu. Passing NULL results in no menu at all. |
| void SetContextMenu(ui::MenuModel* menu); |
| |
| class Observer { |
| public: |
| virtual ~Observer() {} |
| |
| // Called when the user clicks on the system tray icon. Clicks that result |
| // in the context menu being displayed will not be passed to this observer |
| // (i.e. if there's a context menu set on this status icon, and the user |
| // right clicks on the icon to display the context menu, OnClicked will not |
| // be called). |
| virtual void OnClicked() = 0; |
| }; |
| |
| // Adds/Removes an observer for clicks on the status icon. If an observer is |
| // registered, then left clicks on the status icon will result in the observer |
| // being called, otherwise, both left and right clicks will display the |
| // context menu (if any). |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| // Returns true if there are registered click observers. |
| bool HasObservers(); |
| |
| // Dispatches a click event to the observers. |
| void DispatchClickEvent(); |
| |
| protected: |
| // Invoked after a call to SetContextMenu() to let the platform-specific |
| // subclass update the native context menu based on the new model. If NULL is |
| // passed, subclass should destroy the native context menu. |
| virtual void UpdatePlatformContextMenu(ui::MenuModel* model) = 0; |
| |
| private: |
| ObserverList<Observer> observers_; |
| // Context menu, if any. |
| scoped_ptr<ui::MenuModel> context_menu_contents_; |
| DISALLOW_COPY_AND_ASSIGN(StatusIcon); |
| }; |
| |
| #endif // CHROME_BROWSER_STATUS_ICONS_STATUS_ICON_H_ |