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