blob: 81d33837ebbe4e95049c0e079644f701fa927840 [file] [log] [blame]
/*
* Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef AWT_TRAY_ICON_H
#define AWT_TRAY_ICON_H
#include "awt_Object.h"
#include "awt_Component.h"
#include "java_awt_TrayIcon.h"
#include "sun_awt_windows_WTrayIconPeer.h"
#include "java_awt_event_ActionEvent.h"
#define TRAY_ICON_X_HOTSPOT 0
#define TRAY_ICON_Y_HOTSPOT 0
#define TRAY_ICON_TOOLTIP_MAX_SIZE 128
#define TRAY_ICON_BALLOON_TITLE_MAX_SIZE 64
#define TRAY_ICON_BALLOON_INFO_MAX_SIZE 256
/************************************************************************
* AwtTrayIcon class
*/
class AwtTrayIcon: public AwtObject {
public:
AwtTrayIcon();
virtual ~AwtTrayIcon();
virtual void Dispose();
BOOL SendTrayMessage(DWORD dwMessage);
void LinkObjects(JNIEnv *env, jobject peer);
void UnlinkObjects();
void InitNID(UINT uID);
void InitMessage(MSG* msg, UINT message, WPARAM wParam, LPARAM lParam,
int x = 0, int y = 0);
void SendMouseEvent(jint id, jlong when, jint x, jint y, jint modifiers, jint clickCount,
jboolean popupTrigger, jint button = 0, MSG *pMsg = NULL);
void SendActionEvent(jint id, jlong when, jint modifiers, MSG *pMsg = NULL);
virtual MsgRouting WmAwtTrayNotify(WPARAM wParam, LPARAM lParam);
virtual MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
virtual MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
virtual MsgRouting WmMouseMove(UINT flags, int x, int y);
virtual MsgRouting WmBalloonUserClick(UINT flags, int x, int y);
virtual MsgRouting WmKeySelect(UINT flags, int x, int y);
virtual MsgRouting WmSelect(UINT flags, int x, int y);
virtual MsgRouting WmContextMenu(UINT flags, int x, int y);
static MsgRouting WmTaskbarCreated();
INLINE void SetID(int ID) { m_nid.uID = ID; }
INLINE int GetID() { return m_nid.uID; }
void SetToolTip(LPCTSTR tooltip);
INLINE LPTSTR GetToolTip() { return m_nid.szTip; }
void SetIcon(HICON hIcon);
INLINE HICON GetIcon() { return m_nid.hIcon; }
void DisplayMessage(LPCTSTR caption, LPCTSTR text, LPCTSTR msgType);
// Adds to the head of the list
INLINE void AddTrayIconItem(UINT id) {
TrayIconListItem* item = new TrayIconListItem(id, this);
item->m_next = sm_trayIconList;
sm_trayIconList = item;
}
static AwtTrayIcon* SearchTrayIconItem(UINT id);
static void RemoveTrayIconItem(UINT id);
static LPCTSTR GetClassName();
static void FillClassInfo(WNDCLASS *lpwc);
static void RegisterClass();
static void UnregisterClass();
static LRESULT CALLBACK TrayWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static AwtTrayIcon* Create(jobject self, jobject parent);
static HWND CreateMessageWindow();
static void DestroyMessageWindow();
static HBITMAP CreateBMP(HWND hW,int* imageData,int nSS, int nW, int nH);
// methods called on Toolkit thread
static void _SetToolTip(void *param);
static void _SetIcon(void *param);
static void _UpdateIcon(void *param);
static void _DisplayMessage(void *param);
/*
* java.awt.TrayIcon fields
*/
static jfieldID idID;
static jfieldID actionCommandID;
// ************************
static HWND sm_msgWindow;
static int sm_instCount;
private:
NOTIFYICONDATA m_nid;
/* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON
* which are allowed to
* generate the CLICK event after the RELEASE has happened.
* There are conditions that must be true for that sending CLICK event:
* 1) button was initially PRESSED
* 2) no movement or drag has happened until RELEASE
*/
UINT m_mouseButtonClickAllowed;
class TrayIconListItem {
public:
TrayIconListItem(UINT id, AwtTrayIcon* trayIcon) {
m_ID = id;
m_trayIcon = trayIcon;
m_next = NULL;
}
UINT m_ID;
AwtTrayIcon* m_trayIcon;
TrayIconListItem* m_next;
};
public:
static TrayIconListItem* sm_trayIconList;
};
#endif /* AWT_TRAY_ICON_H */