Public Member Functions | Public Attributes | Friends

NotifyInfo Struct Reference

structure for maintaining informations about one notification icon More...

#include <traynotify.h>

Inheritance diagram for NotifyInfo:
Inheritance graph
[legend]
Collaboration diagram for NotifyInfo:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 NotifyInfo ()
bool modify (NOTIFYICONDATA *pnid)

Public Attributes

int _idx
HICON _hIcon
DWORD _dwState
UINT _uCallbackMessage
UINT _version
DWORD _lastChange

Friends

bool operator< (const NotifyInfo &a, const NotifyInfo &b)

Detailed Description

structure for maintaining informations about one notification icon

Definition at line 93 of file traynotify.h.


Constructor & Destructor Documentation

NotifyInfo::NotifyInfo (  )

Definition at line 84 of file traynotify.cpp.

References _dwState, _hIcon, _idx, _lastChange, NotifyIconConfig::_mode, _uCallbackMessage, _version, and NIM_AUTO.

{
    _idx = -1;
    _hIcon = 0;
    _dwState = 0;
    _uCallbackMessage = 0;
    _version = 0;

    _mode = NIM_AUTO;
    _lastChange = GetTickCount();
}

Member Function Documentation

bool NotifyInfo::modify ( NOTIFYICONDATA *  pnid )

Todo:
compare icon

Definition at line 107 of file traynotify.cpp.

References _dwState, _hIcon, NotifyIconIndex::_hWnd, _lastChange, NotifyIconConfig::_tipText, _uCallbackMessage, NotifyIconIndex::_uID, NotifyIconConfig::_windowTitle, String::assign(), COUNTOF, NotifyIconConfig::create_name(), NID_SIZE_A3, NID_SIZE_A5, NID_SIZE_A6, NID_SIZE_W3, NID_SIZE_W5, NID_SIZE_W6, and NOTIFYICON_SIZE.

Referenced by NotifyArea::ProcessTrayNotification().

{
    bool changes = false;

    if (_hWnd!=pnid->hWnd || _uID!=pnid->uID) {
        _hWnd = pnid->hWnd;
        _uID = pnid->uID;

        changes = true;
    }

    if (pnid->uFlags & NIF_MESSAGE) {
        if (_uCallbackMessage != pnid->uCallbackMessage) {
            _uCallbackMessage = pnid->uCallbackMessage;
            changes = true;
        }
    }

    if (pnid->uFlags & NIF_ICON) {
         // Some applications destroy the icon immediatelly after completing the
         // NIM_ADD/MODIFY message, so we have to make a copy of it.
        if (_hIcon)
            DestroyIcon(_hIcon);

        _hIcon = (HICON) CopyImage(pnid->hIcon, IMAGE_ICON, NOTIFYICON_SIZE, NOTIFYICON_SIZE, 0);

        changes = true; ///@todo compare icon
    }

#ifdef NIF_STATE    // as of 21.08.2003 missing in MinGW headers
    if (pnid->uFlags & NIF_STATE) {
        DWORD new_state = (_dwState&~pnid->dwStateMask) | (pnid->dwState&pnid->dwStateMask);

        if (_dwState != new_state) {
            _dwState = new_state;
            changes = true;
        }
    }
#endif

     // store tool tip text
    if (pnid->uFlags & NIF_TIP) {
        String new_text;

        if (pnid->cbSize==NID_SIZE_W6 || pnid->cbSize==NID_SIZE_W5 || pnid->cbSize==NID_SIZE_W3) {
             // UNICODE version of NOTIFYICONDATA structure
            LPCWSTR txt = (LPCWSTR)pnid->szTip;
            int max_len = pnid->cbSize==NID_SIZE_W3? 64: 128;

             // get tooltip string length
            int l = 0;
            for(; l<max_len; ++l)
                if (!txt[l])
                    break;

            new_text.assign(txt, l);

            if (new_text != _tipText) {
                _tipText = new_text;
                changes = true;
            }
        } else if (pnid->cbSize==NID_SIZE_A6 || pnid->cbSize==NID_SIZE_A5 || pnid->cbSize==NID_SIZE_A3) {
            LPCSTR txt = (LPCSTR)pnid->szTip;
            int max_len = pnid->cbSize==NID_SIZE_A3? 64: 128;

            int l = 0;
            for(int l=0; l<max_len; ++l)
                if (!txt[l])
                    break;

            new_text.assign(txt, l);

            if (new_text != _tipText) {
                _tipText = new_text;
                changes = true;
            }
        }
    }

    TCHAR title[MAX_PATH];

    DWORD pid;
    GetWindowThreadProcessId(_hWnd, &pid);

     // avoid to send WM_GETTEXT messages to the own process
    if (pid != GetCurrentProcessId())
        if (GetWindowText(_hWnd, title, COUNTOF(title))) {
            if (_windowTitle != title) {
                _windowTitle = title;
                changes = true;
            }
        }

    if (changes) {
        create_name();
        _lastChange = GetTickCount();
    }

    return changes;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Friends And Related Function Documentation

bool operator< ( const NotifyInfo a,
const NotifyInfo b 
) [friend]

Definition at line 98 of file traynotify.h.

        {return a._idx < b._idx;}

Member Data Documentation

Definition at line 104 of file traynotify.h.

Referenced by TrayNotifyDlg::InsertItem(), modify(), and NotifyInfo().

Definition at line 103 of file traynotify.h.

Referenced by NotifyInfo(), and NotifyArea::ProcessTrayNotification().

Definition at line 109 of file traynotify.h.

Referenced by modify(), NotifyInfo(), and NotifyArea::Refresh().

Definition at line 106 of file traynotify.h.

Referenced by modify(), NotifyInfo(), and NotifyArea::WndProc().

Definition at line 107 of file traynotify.h.

Referenced by NotifyInfo().


The documentation for this struct was generated from the following files:

ROS Explorer Source Code Documentation
generated on 02.01.2013 by doxygen

ROS Explorer Homepage