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