status_icon_linux_wrapper.h revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_LINUX_WRAPPER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_LINUX_WRAPPER_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/status_icons/desktop_notification_balloon.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/status_icons/status_icon.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/linux_ui/linux_ui.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Wrapper class for StatusIconLinux that implements the standard StatusIcon
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// interface. Also handles callbacks from StatusIconLinux.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusIconLinuxWrapper : public StatusIcon,
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               public StatusIconLinux::Delegate,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               public StatusIconMenuModel::Observer {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~StatusIconLinuxWrapper();
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // StatusIcon overrides:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetToolTip(const string16& tool_tip) OVERRIDE;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DisplayBalloon(const gfx::ImageSkia& icon,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const string16& title,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const string16& contents) OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // StatusIconLinux::Delegate overrides:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnClick() OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasClickAction() OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // StatusIconMenuModel::Observer overrides:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnMenuStateChanged() OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static StatusIconLinuxWrapper* CreateWrappedStatusIcon(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::ImageSkia& image,
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const string16& tool_tip);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // StatusIcon overrides:
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Invoked after a call to SetContextMenu() to let the platform-specific
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // subclass update the native context menu based on the new model. If NULL is
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // passed, subclass should destroy the native context menu.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdatePlatformContextMenu(
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      StatusIconMenuModel* model) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A status icon wrapper should only be created by calling
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CreateWrappedStatusIcon().
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit StatusIconLinuxWrapper(StatusIconLinux* status_icon);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notification balloon.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DesktopNotificationBalloon notification_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<StatusIconLinux> status_icon_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StatusIconMenuModel* menu_model_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(StatusIconLinuxWrapper);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_LINUX_WRAPPER_H_
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)