1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_ 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <windows.h> 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <shellapi.h> 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/win/scoped_gdi_object.h" 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/status_icons/status_icon.h" 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views { 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Menu2; 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass StatusIconWin : public StatusIcon { 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Constructor which provides this icon's unique ID and messaging window. 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch StatusIconWin(UINT id, HWND window, UINT message); 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~StatusIconWin(); 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from StatusIcon: 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void SetImage(const SkBitmap& image); 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void SetPressedImage(const SkBitmap& image); 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void SetToolTip(const string16& tool_tip); 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void DisplayBalloon(const string16& title, const string16& contents); 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UINT icon_id() const { return icon_id_; } 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UINT message_id() const { return message_id_; } 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Handles a click event from the user - if |left_button_click| is true and 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // there is a registered observer, passes the click event to the observer, 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // otherwise displays the context menu if there is one. 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void HandleClickEvent(int x, int y, bool left_button_click); 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Re-creates the status tray icon now after the taskbar has been created. 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void ResetIcon(); 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected: 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from StatusIcon. 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void UpdatePlatformContextMenu(ui::MenuModel* menu); 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void InitIconData(NOTIFYICONDATA* icon_data); 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The unique ID corresponding to this icon. 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UINT icon_id_; 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Window used for processing messages from this icon. 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch HWND window_; 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The message identifier used for status icon messages. 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch UINT message_id_; 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The currently-displayed icon for the window. 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen base::win::ScopedHICON icon_; 624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Context menu associated with this icon (if any). 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch scoped_ptr<views::Menu2> context_menu_; 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(StatusIconWin); 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_ 70