/* ｔｍｅｎｕでマウスの座標から何がセレクトされているかを調べる */

#include <iocslib.h>
#include "defines.h"
#include "menu.h"

int tmenu_mouse(btn,sp,code,md,rcode)
int btn,*sp,code[15],rcode[2];
_MENU_DATA *md;
{
int x,y,i,lb,rb;
	/* ボタン状態 */
	rb=btn&0xffff;
	lb=btn>>16;
	
	/* 右ボタン */
	if (rb==-1) { /* 押されっぱなし */
		/* なおかつ、左は押されていないか押されっぱなし：無効 */
		if (lb!=1) return(0);
		/* 左が押された */
		rb=0; /* 右無効 */
	}
	if (rb==1) return(ESC); /* 押された */
	if ((md->mouse&BIT7) && !lb) return(0); /* 左ボタンが押されていなければ以後無効 */
	
	/* マウス座標取得 -> テキスト座標化 */
	x=MS_CURGT();
	y=(x&0xffff)/16;
	x>>=(16+3); /* >>16/8 */
	
	i=code[1]+1;
	if (md->ti_mode&BIT1) i++;
	if (y>=code[1] && y<i && x>=code[11] && x<=code[14]) {
		/* タイトル部：移動 */
		/* 項目選択有効範囲ではない */
		rcode[0]=rcode[1]=-1;
		if (lb==1 && md->title[0]!=0) {
			/* タイトルが無い時は無効 */
			return(-CheckMESXY());
		}
		return(0); /* 無効 */
	}
	
	if (x<code[7] || x>code[8] || y<code[9] || y>code[10]) { /* asx,aex,asy,aey判定 */
		/* ここはメニュー項目内ではない */
		rcode[0]=rcode[1]=-1;
		return(0); /* 無効 */
	}
	
	/* 相対座標 */
	x-=code[7]; /* x-asx */
	y-=code[9]; /* y-asy */
	
	/* 項目ｙ幅＋項目間空行 */
	i=1+md->wy;
	if (md->md_mes&BIT1) i++; /* 24dot mode */
	/* 計算上のsp */
	i=y/i+1;
	
	if (*sp!=i) { /* ポイントが動いた時のみ */
		/* キーによりポイントが移動したがマウスは動いていない時 */
		if (y==rcode[1]) return(0); /* 無効 */
		*sp=i;
		rcode[0]=x;
		rcode[1]=y;
		return(2); /* 2 = point move in active window */
	}
	
	/* ポイントは動いていない */
	rcode[0]=x;
	rcode[1]=y;
	/* 左ボタンが押されている：リターン */
	/* 左ボタンは押されていないか押されっぱなし：無効 */
	return(lb==1? CR:0);
}
