{
  Miranda IM: the free IM client for Microsoft  Windows

  Copyright 2000-2003 Miranda ICQ/IM project,
  all portions of this codebase are copyrighted to the people
  listed in contributors.txt.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program 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 for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}
{$IFNDEF M_MESSAGE}
{$DEFINE M_MESSAGE}
const
  {brings up the send message dialog for a contact
   wParam=(WPARAM)(HANDLE)hContact
   lParam=(LPARAM)(AnsiChar*)szText
   returns 0 on success or nonzero on failure
   returns immediately, just after the dialog is shown
   szText is the text to put in the edit box of the window (but not send)
   szText=NULL will not use any text
   szText!=NULL is only supported on v0.1.2.0+
   NB: Current versions of the convers plugin use the name
   "SRMsg/LaunchMessageWindow" instead. For compatibility you should call
   both names and the correct one will work. }
   MS_MSG_SENDMESSAGE :PAnsiChar = 'SRMsg/SendCommand';
   MS_MSG_SENDMESSAGEW:PAnsiChar = 'SRMsg/SendCommandW';

   ME_MSG_WINDOWEVENT:PAnsiChar = 'MessageAPI/WindowEvent';

   MS_MSG_CONVERS:PAnsiChar = 'SRMsg/LaunchMessageWindow';

  {wparam=0 }
  {lparam=(WPARAM)(MessageWindowEventData*)hWindowEvent; }
  {Event types }
  MSG_WINDOW_EVT_OPENING = 1; // window is about to be opened
  MSG_WINDOW_EVT_OPEN    = 2; // window has been opened
  MSG_WINDOW_EVT_CLOSING = 3; // window is about to be closed
  MSG_WINDOW_EVT_CLOSE   = 4; // window has been closed

const
  { wparam=0
    lparam=0
    Returns a dword with the current message api version
    Current version is 0,0,0,4
  }
  MS_MSG_GETWINDOWAPI:PAnsiChar = 'MessageAPI/WindowAPI';

  { wparam=(AnsiChar*)szBuf
    lparam=(int)cbSize size of buffer
    Sets the window class name in wParam (ex. "SRMM" for srmm.dll)
  }
  MS_MSG_GETWINDOWCLASS:PAnsiChar = 'MessageAPI/WindowClass';

const
  MSG_WINDOW_STATE_EXISTS  = $00000001; // Window exists should always be true if hwndWindow exists
  MSG_WINDOW_STATE_VISIBLE = $00000002;
  MSG_WINDOW_STATE_FOCUS   = $00000004;
  MSG_WINDOW_STATE_ICONIC  = $00000008;

type
  PMessageWindowData = ^TMessageWindowData;
  TMessageWindowData = record
    hwndWindow: HWND;    // top level window for the contact or NULL if no window exists
    uState    : int;     // see window states
    local     : pointer; // used to store pointer to custom data
  end;

function Srmm_GetWindowData(hContact:TMCONTACT; pResult:PMessageWindowData) : int; stdcall; external AppDll;

{ wparam=0(unused)
  lparam=(pMessageWindowEvent) event written
  fired before SRMM writes an entered message into the database
}

type
  pMessageWindowEvent = ^tMessageWindowEvent;
  tMessageWindowEvent = record
    seq      :int;          // number returned by PSS_MESSAGE
    hContact :TMCONTACT;
    dbei     :PDBEVENTINFO; // database event written on the basis of message sent
  end;

const
  ME_MSG_PRECREATEEVENT:PAnsiChar = 'MessageAPI/PreCreateEvent';

{ wParam = 0
 lParam = (MessageWindowPopupData *)&MessageWindowPopupData;
 Fired to allow plugins to add itens to the msg window popup menu
 Always fired twice: once with MSG_WINDOWPOPUP_SHOWING and once with MSG_WINDOWPOPUP_SELECTED.
 This is done to allow cleaning of resources.
}
  ME_MSG_WINDOWPOPUP:PAnsiChar = 'MessageAPI/WindowPopupRequested';

  MSG_WINDOWPOPUP_SHOWING  = 1;
  MSG_WINDOWPOPUP_SELECTED = 2;

  MSG_WINDOWPOPUP_INPUT = 1;
  MSG_WINDOWPOPUP_LOG   = 2;

type
  tMessageWindowPopupData = record
    uType    :uint;     // see popup types above
    uFlags   :uint;     // used to indicate in which window the popup was requested
    hContact :TMCONTACT;
    hwnd     :HWND;     // window where the popup was requested
    hMenu    :HMENU;    // The handle to the menu
    pt       :TPOINT;   // The point, in screen coords
    selection:int;      // The menu control id or 0 if no one was selected
  end;

// status icons
const
  MBF_DISABLED = 1;
  MBF_HIDDEN   = 2;
  MBF_UNICODE  = 4;

type
  pStatusIconData = ^tStatusIconData;
  tStatusIconData = record
    szModule     :PAnsiChar; // used in combo with the dwId below to create a unique identifier
    dwId         :dword;     // uniquely defines a button inside a module
    hIcon,
    hIconDisabled:HICON;     // hIconDisabled is optional - if null, will use hIcon in the disabled state
    flags        :int;       // one of MBF_* above
    szTooltip    :TChar;     // controlled by MBF_UNICODE
  end;

const
  MBCF_RIGHTBUTTON = 1; // if this flag is specified, the click was a right button -
                        // otherwize it was a left click

type
  pStatusIconClickData = ^tStatusIconClickData;
  tStatusIconClickData = record
    clickLocation:TPOINT;    // click location, in screen coordinates
    szModule     :PAnsiChar;
    dwId         :dword;
    flags        :int;       // one of MBCF_* above
  end;

const
{
 wParam = (HANDLE)hContact;
 lParam = (StatusIconClickData *)&StatusIconClickData;
 catch to show a popup menu, etc.
}
  ME_MSG_ICONPRESSED:PAnsiChar = 'MessageAPI/IconPressed';

{
  wParam = (HANDLE)hContact;
  lParam = (StatusIconkData*)pIcon
  catch to be notified about the icon list's change.
}
  ME_MSG_ICONSCHANGED:PAnsiChar = 'MessageAPI/IconsChanged';

{$ENDIF}