1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file.
4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef UI_VIEWS_LINUX_UI_STATUS_ICON_LINUX_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define UI_VIEWS_LINUX_UI_STATUS_ICON_LINUX_H_
7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/strings/string16.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/views_export.h"
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace gfx {
12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass ImageSkia;
13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace ui {
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass MenuModel;
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}  // namespace ui
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace views {
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Since liblinux_ui cannot have dependencies on any chrome browser components
22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// we cannot inherit from StatusIcon. So we implement the necessary methods
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// and let a wrapper class implement the StatusIcon interface and defer the
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// callbacks to a delegate. For the same reason, do not use StatusIconMenuModel.
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class VIEWS_EXPORT StatusIconLinux {
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public:
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  class Delegate {
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch   public:
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    virtual void OnClick() = 0;
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    virtual bool HasClickAction() = 0;
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch   protected:
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    virtual ~Delegate();
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  };
35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  StatusIconLinux();
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual ~StatusIconLinux();
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void SetImage(const gfx::ImageSkia& image) = 0;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetToolTip(const base::string16& tool_tip) = 0;
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Invoked after a call to SetContextMenu() to let the platform-specific
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // subclass update the native context menu based on the new model. The
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // subclass should destroy the existing native context menu on this call.
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void UpdatePlatformContextMenu(ui::MenuModel* model) = 0;
46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Update all the enabled/checked states and the dynamic labels. Some status
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // icon implementations do not refresh the native menu before showing so we
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // need to manually refresh it when the menu model changes.
50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void RefreshPlatformContextMenu();
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  Delegate* delegate() { return delegate_; }
53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private:
56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  Delegate* delegate_;
57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace views
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
61ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // UI_LINUX_UI_STATUS_ICON_LINUX_H_
62