15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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_WIN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <shellapi.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/scoped_gdi_object.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/status_icons/status_icon.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuRunner; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass StatusTrayWin; 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusIconWin : public StatusIcon { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructor which provides this icon's unique ID and messaging window. 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StatusIconWin(StatusTrayWin* tray, UINT id, HWND window, UINT message); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~StatusIconWin(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles a click event from the user - if |left_button_click| is true and 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there is a registered observer, passes the click event to the observer, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // otherwise displays the context menu if there is one. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleClickEvent(const gfx::Point& cursor_pos, bool left_button_click); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Handles a click on the balloon from the user. 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void HandleBalloonClickEvent(); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-creates the status tray icon now after the taskbar has been created. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetIcon(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT icon_id() const { return icon_id_; } 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu HWND window() const { return window_; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT message_id() const { return message_id_; } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from StatusIcon: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE; 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetToolTip(const base::string16& tool_tip) OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DisplayBalloon(const gfx::ImageSkia& icon, 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& contents) OVERRIDE; 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void ForceVisible() OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from StatusIcon: 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void UpdatePlatformContextMenu(StatusIconMenuModel* menu) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitIconData(NOTIFYICONDATA* icon_data); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The tray that owns us. Weak. 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StatusTrayWin* tray_; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unique ID corresponding to this icon. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT icon_id_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Window used for processing messages from this icon. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HWND window_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The message identifier used for status icon messages. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT message_id_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The currently-displayed icon for the window. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedHICON icon_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The currently-displayed icon for the notification balloon. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedHICON balloon_icon_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not owned. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::MenuModel* menu_model_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Context menu associated with this icon (if any). 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<views::MenuRunner> menu_runner_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StatusIconWin); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_ 92