215 lines
5.1 KiB
C
215 lines
5.1 KiB
C
#define INCL_WIN
|
|
#define INCL_DOS
|
|
#define INCL_PM
|
|
|
|
#include <os2.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "capitel.h"
|
|
#include "toolbar.h"
|
|
#include "statbar.h"
|
|
|
|
#define tBarClass "pmToolbar"
|
|
|
|
PFNWP oldButProc;
|
|
char useBubbles = 0;
|
|
|
|
short queryDimensions( HWND, char *, ULONG *, ULONG * );
|
|
|
|
MRESULT EXPENTRY tBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
|
|
|
|
void registerToolbar( HAB hab )
|
|
{
|
|
WinRegisterClass( hab, tBarClass, tBarProc, 0, sizeof( ULONG ) );
|
|
}
|
|
|
|
MRESULT EXPENTRY tButProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
|
|
{
|
|
HWND hwndFly = WinQueryWindowULong( hwnd, QWL_USER );
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_MOUSEMOVE:
|
|
{
|
|
if( !hwndFly && useBubbles )
|
|
WinStartTimer( 0, hwnd, 1 /* unused id */, 500 );
|
|
return ( *oldButProc )( hwnd, msg, mp1, mp2 );
|
|
}
|
|
break;
|
|
|
|
case WM_TIMER:
|
|
{
|
|
RGB rgb;
|
|
HPS hps;
|
|
HAB hab;
|
|
RECTL rectl;
|
|
ULONG breite, hoehe;
|
|
POINTL p;
|
|
char str[200];
|
|
|
|
if( hwndFly )
|
|
break;
|
|
|
|
hab = WinQueryAnchorBlock( hwnd );
|
|
|
|
WinLoadString( hab, NULLHANDLE, WinQueryWindowUShort( hwnd, QWS_ID ),
|
|
sizeof( str ), str );
|
|
|
|
hwndFly = WinCreateWindow( HWND_DESKTOP, WC_STATIC, str,
|
|
SS_TEXT | DT_VCENTER | DT_CENTER,
|
|
0, 0, 0, 0, hwnd, HWND_TOP, 0, 0, NULL );
|
|
|
|
rgb.bBlue = 0;
|
|
rgb.bGreen = 254;
|
|
rgb.bRed = 254;
|
|
WinSetPresParam( hwndFly, PP_BACKGROUNDCOLOR, sizeof( RGB ), &rgb );
|
|
|
|
rgb.bBlue = 0;
|
|
rgb.bGreen = 0;
|
|
rgb.bRed = 0;
|
|
WinSetPresParam( hwndFly, PP_FOREGROUNDCOLOR, sizeof( RGB ), &rgb );
|
|
|
|
WinSetPresParam( hwndFly, PP_FONTNAMESIZE, sizeof( DefCntrFont ),
|
|
DefCntrFont );
|
|
|
|
queryDimensions( hwndFly, str, &breite, &hoehe );
|
|
|
|
WinQueryPointerPos( HWND_DESKTOP, &p );
|
|
p.y -= WinQuerySysValue( HWND_DESKTOP, SV_CYTITLEBAR );
|
|
p.y -= hoehe/2;
|
|
p.x += 5;
|
|
|
|
WinSetWindowPos( hwndFly, HWND_TOP, p.x, p.y, breite+4, hoehe+2,
|
|
SWP_SHOW | SWP_MOVE | SWP_SIZE );
|
|
|
|
WinSetWindowULong( hwnd, QWL_USER, (ULONG) hwndFly );
|
|
}
|
|
break;
|
|
|
|
case UM_FLYOVER_BEGIN:
|
|
useBubbles = 1;
|
|
break;
|
|
|
|
case UM_FLYOVER_END:
|
|
WinStopTimer( 0, hwnd, 1 /* unused id */ );
|
|
if( hwndFly )
|
|
WinDestroyWindow( hwndFly );
|
|
WinSetWindowULong( hwnd, QWL_USER, 0 );
|
|
break;
|
|
|
|
default:
|
|
return ( *oldButProc )( hwnd, msg, mp1, mp2 );
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
MRESULT EXPENTRY tBarProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
|
|
{
|
|
HENUM henum;
|
|
RECTL rect;
|
|
short height, i=0;
|
|
HWND hwndHelp;
|
|
char str[50];
|
|
HPS hps;
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_CREATE:
|
|
case WM_DESTROY:
|
|
case WM_SIZE:
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
WinSendMsg( WinQueryWindow( hwnd, QW_OWNER ), msg, mp1, mp2 );
|
|
break;
|
|
|
|
case TB_REDRAW:
|
|
henum = WinBeginEnumWindows( hwnd );
|
|
|
|
while( (hwndHelp = WinGetNextWindow( henum )) != 0 )
|
|
{
|
|
WinSetWindowPos( hwndHelp, 0, i+2, 3, 0, 0, SWP_MOVE );
|
|
WinQueryWindowRect( hwndHelp, &rect );
|
|
i += rect.xRight;
|
|
}
|
|
|
|
break;
|
|
|
|
case TB_ADDBUTTON:
|
|
WinQueryWindowRect( hwnd, &rect );
|
|
height = rect.yTop - rect.yBottom;
|
|
|
|
sprintf( str, "#%ld", (ULONG)mp1 );
|
|
|
|
hwndHelp = WinCreateWindow( hwnd, WC_BUTTON, str, WS_VISIBLE |
|
|
BS_PUSHBUTTON | BS_BITMAP | BS_NOPOINTERFOCUS,
|
|
0, 0, height-4, height-4,
|
|
hwnd, HWND_BOTTOM, (ULONG)mp1, 0, NULL );
|
|
|
|
oldButProc = WinSubclassWindow( hwndHelp, tButProc );
|
|
|
|
WinPostMsg( hwnd, TB_REDRAW, 0, 0 );
|
|
|
|
break;
|
|
|
|
case TB_ADDSPACE:
|
|
hwndHelp = WinCreateWindow( hwnd, WC_STATIC, NULL, !WS_VISIBLE,
|
|
0, 0, (ULONG)mp1, 0,
|
|
hwnd, HWND_BOTTOM, 0, 0, NULL );
|
|
|
|
WinPostMsg( hwnd, TB_REDRAW, 0, 0 );
|
|
|
|
break;
|
|
|
|
case TB_SETBITMAP:
|
|
sprintf( str, "#%ld", (ULONG)mp2 );
|
|
hwndHelp = WinWindowFromID( hwnd, (USHORT)mp1 );
|
|
WinSetWindowText( hwndHelp, (PSZ)str );
|
|
WinPostMsg( hwnd, TB_REDRAW, 0, 0 );
|
|
break;
|
|
|
|
case TB_REMOVEBUTTONID:
|
|
hwndHelp = WinWindowFromID( hwnd, (USHORT) mp1 );
|
|
if( hwndHelp )
|
|
WinDestroyWindow( hwndHelp );
|
|
break;
|
|
|
|
case TB_HWNDFROMID:
|
|
return (MPARAM) WinWindowFromID( hwnd, (USHORT) mp1 );
|
|
|
|
case WM_PAINT: {
|
|
RECTL rcl;
|
|
POINTL pt;
|
|
|
|
HPS hps = WinBeginPaint( hwnd, 0, 0 );
|
|
|
|
WinQueryWindowRect(hwnd,&rcl);
|
|
WinFillRect( hps, &rcl, SYSCLR_BUTTONMIDDLE );
|
|
|
|
pt.x = rcl.xLeft;
|
|
pt.y = rcl.yBottom;
|
|
GpiSetColor( hps, SYSCLR_BUTTONLIGHT );
|
|
GpiMove( hps, &pt );
|
|
pt.x = rcl.xRight - 1;
|
|
GpiLine( hps, &pt );
|
|
pt.x = rcl.xLeft;
|
|
pt.y = rcl.yBottom + 1;
|
|
GpiSetColor( hps, SYSCLR_BUTTONDARK );
|
|
GpiMove( hps, &pt );
|
|
pt.x = rcl.xRight - 1;
|
|
GpiLine( hps, &pt );
|
|
rcl.yBottom += 2;
|
|
WinEndPaint( hps );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return WinDefWindowProc( hwnd, msg, mp1, mp2 );
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|