| version 1.1, 2005/11/25 22:41:24 |
version 1.2, 2005/11/27 20:14:50 |
|
|
| // Copyright (c) 2005 Michal Sudolsky |
/* |
| // modified by Juraj Kolesár <koli@koli.sk> |
Name: lc_mouse.c |
| #include "cuchar.h" |
Author: Michal Sudolsky |
| |
Date: 22.09.2005 16:12 |
| long mousex;
|
*/ |
| long mousey;
|
// modified by Juraj Kolesar <koli@koli.sk> |
| bool aftermouseval;
|
|
| char mouseactive=MOUSE_NONE;
|
#include "cc.h" |
| char redrawmouse=2;
|
#define stat p->stat |
| TIMER *mouserepeattimer=NULL,*doubletimer1=NULL,*doubletimer2=NULL;
|
|
| bool doubleclickstate1=false,doubleclickstate2;
|
long mousex; |
| Gpm_Event gpmev;
|
long mousey; |
| bool eventq=false;
|
bool aftermouseval; |
| |
char mouseactive=MOUSE_NONE; |
| |
char redrawmouse=2; |
| |
TIMER *mouserepeattimer=NULL,*doubletimer1=NULL,*doubletimer2=NULL; |
| |
bool doubleclickstate1=false,doubleclickstate2; |
| |
Gpm_Event gpmev; |
| |
bool eventq=false; |
| pthread_t gpmthreadp; |
pthread_t gpmthreadp; |
| char stat=0; |
|
| WIN *lastfocused=NULL; |
WIN *lastfocused=NULL; |
| |
|
| void buttondoubletimer(TIMER *sender)
|
void buttondoubletimer(TIMER *sender) |
| {
|
{ |
| redraw();
|
redraw(); |
| redraw();
|
redraw(); |
| del_timer(sender);
|
del_timer(sender); |
| }
|
} |
| |
|
| bool inrect(long x1,long y1,long x2,long y2,long x,long y)
|
bool inrect(long x1,long y1,long x2,long y2,long x,long y) |
| {
|
{ |
| return (x>=x1)&&(x<x1+x2)&&(y>=y1)&&(y<y1+y2);
|
return (x>=x1)&&(x<x1+x2)&&(y>=y1)&&(y<y1+y2); |
| }
|
} |
| |
|
| bool sendmousemessage(long vx,long vy,unsigned short state)
|
bool sendmousemessage(long vx,long vy,unsigned short state) |
| {
|
{ |
| if((hlwin==NULL)||(!mouseactive))return false;
|
if((hlwin==NULL)||(!mouseactive))return false; |
| WIN *p=capturewin;
|
WIN *p=capturewin; |
| if(p==NULL)p=findwin(vx,vy);
|
if(p==NULL)p=findwin(vx,vy); |
| return runacel(p,vx,vy,state);
|
return runacel(p,vx,vy,state); |
| }
|
} |
|
|
|
| void doubleclickproc(TIMER *sender)
|
void doubleclickproc(TIMER *sender) |
| {
|
{ |
| if(sender==doubletimer1)
|
if(sender==doubletimer1) |
| {
|
{ |
| doubleclickstate1=false;
|
doubleclickstate1=false; |
| del_timer(sender);
|
del_timer(sender); |
| doubletimer1=NULL;
|
doubletimer1=NULL; |
| }
|
} |
| else if(sender==doubletimer2)
|
else if(sender==doubletimer2) |
| {
|
{ |
| doubleclickstate2=false;
|
doubleclickstate2=false; |
| del_timer(sender);
|
del_timer(sender); |
| doubletimer2=NULL;
|
doubletimer2=NULL; |
| }
|
} |
| }
|
} |
|
|
|
| void mouserepeatproc(TIMER *sender)
|
void mouserepeatproc(TIMER *sender) |
| {
|
{ |
| sendmousemessage(mousex,mousey,MM_LBUTTONDOWN);
|
sendmousemessage(gpmev.x,gpmev.y,MM_LBUTTONDOWN); |
| if(!aftermouseval)
|
if(!aftermouseval) |
| {
|
{ |
| del_timer(sender);
|
del_timer(sender); |
| mouserepeattimer=NULL;
|
mouserepeattimer=NULL; |
| }
|
} |
| }
|
} |
|
|
|
| void mousewaitproc(TIMER *sender)
|
void mousewaitproc(TIMER *sender) |
| {
|
{ |
| del_timer(sender);
|
del_timer(sender); |
| mouserepeattimer=set_timer(NULL,REPEATTICK,0,mouserepeatproc);
|
mouserepeattimer=set_timer(NULL,REPEATTICK,0,mouserepeatproc); |
| }
|
} |
|
|
|
| void *gpmthread(void *par)
|
void *gpmthread(void *par) |
| {
|
{ |
| while(apprun)
|
while(apprun) |
| {
|
{ |
| Gpm_DrawPointer(gpmev.x,gpmev.y,gpm_consolefd);
|
Gpm_DrawPointer(gpmev.x,gpmev.y,gpm_consolefd); |
| if(Gpm_GetEvent(&gpmev)!=-1)
|
if(Gpm_GetEvent(&gpmev)!=-1) |
| {
|
{ |
| eventq=true;
|
eventq=true; |
| if(gpmev.x>screenx-1)gpmev.x=screenx-1;
|
if(gpmev.x>screenx-1)gpmev.x=screenx-1; |
| if(gpmev.y>screeny-1)gpmev.y=screeny-1;
|
if(gpmev.y>screeny-1)gpmev.y=screeny-1; |
| if(gpmev.x<0)gpmev.x=0;
|
if(gpmev.x<0)gpmev.x=0; |
| if(gpmev.y<0)gpmev.y=0;
|
if(gpmev.y<0)gpmev.y=0; |
| }
|
} |
| if(((gpmev.type&GPM_MOVE)==0)&&((gpmev.type&GPM_DRAG)==0))while(eventq&&apprun);
|
if(((gpmev.type&GPM_MOVE)==0)&&((gpmev.type&GPM_DRAG)==0))while(eventq&&apprun); |
| }
|
} |
| }
|
} |
|
|
|
| bool gpmgetevent(Gpm_Event *event)
|
bool gpmgetevent(Gpm_Event *event) |
| {
|
{ |
| if(eventq)
|
if(eventq) |
| {
|
{ |
| memcpy(event,&gpmev,sizeof(gpmev));
|
memcpy(event,&gpmev,sizeof(gpmev)); |
| eventq=false;
|
eventq=false; |
| return true;
|
return true; |
| }
|
} |
| else return false;
|
else return false; |
| }
|
} |
|
|
|
| void domouseevent(MEVENT *event)
|
void domouseevent(MEVENT *event) |
| {
|
{ |
| unsigned short mod=0;
|
unsigned short mod=0; |
| if((event->bstate&BUTTON_SHIFT)==BUTTON_SHIFT)mod|=MD_SHIFT;
|
bool double1=true,double2=true; |
| if((event->bstate&BUTTON_ALT)==BUTTON_ALT)mod|=MD_ALT;
|
if((event->bstate&BUTTON_SHIFT)==BUTTON_SHIFT)mod|=MD_SHIFT; |
| if((event->bstate&BUTTON_CTRL)==BUTTON_CTRL)mod|=MD_CTRL;
|
if((event->bstate&BUTTON_ALT)==BUTTON_ALT)mod|=MD_ALT; |
| if((event->bstate&BUTTON1_PRESSED)==BUTTON1_PRESSED)
|
if((event->bstate&BUTTON_CTRL)==BUTTON_CTRL)mod|=MD_CTRL; |
| {
|
if((event->bstate&BUTTON1_PRESSED)==BUTTON1_PRESSED) |
| sendmousemessage(event->x,event->y,MM_LBUTTONDOWN|mod);
|
{ |
| if(aftermouseval)
|
sendmousemessage(event->x,event->y,MM_LBUTTONDOWN|mod); |
| {
|
if(aftermouseval) |
| mouserepeattimer=set_timer(NULL,WAITTICK,0,mousewaitproc);
|
{ |
| }
|
mouserepeattimer=set_timer(NULL,WAITTICK,0,mousewaitproc); |
| else
|
} |
| {
|
else |
| del_timer(mouserepeattimer);
|
{ |
| mouserepeattimer=NULL;
|
del_timer(mouserepeattimer); |
| }
|
mouserepeattimer=NULL; |
| if(doubleclickstate1)
|
} |
| {
|
if(doubleclickstate1) |
| sendmousemessage(event->x,event->y,MM_LBUTTONDBLCLK|mod);
|
{ |
| }
|
sendmousemessage(event->x,event->y,MM_LBUTTONDBLCLK|mod); |
| del_timer(doubletimer1);
|
} |
| doubleclickstate1=true;
|
del_timer(doubletimer1); |
| doubletimer1=set_timer(NULL,DOUBLECLICK,0,doubleclickproc);
|
doubletimer1=!doubleclickstate1?set_timer(NULL,DOUBLECLICK,0,doubleclickproc):NULL; |
| }
|
doubleclickstate1=!doubleclickstate1; |
| if((event->bstate&BUTTON1_RELEASED)==BUTTON1_RELEASED)
|
double1=false; |
| {
|
} |
| del_timer(mouserepeattimer);
|
if((event->bstate&BUTTON1_RELEASED)==BUTTON1_RELEASED) |
| mouserepeattimer=NULL;
|
{ |
| sendmousemessage(event->x,event->y,MM_LBUTTONUP|mod);
|
del_timer(mouserepeattimer); |
| }
|
mouserepeattimer=NULL; |
| if((event->bstate&BUTTON3_PRESSED)==BUTTON3_PRESSED)
|
sendmousemessage(event->x,event->y,MM_LBUTTONUP|mod); |
| {
|
double1=false; |
| sendmousemessage(event->x,event->y,MM_RBUTTONDOWN|mod);
|
} |
| if(doubleclickstate2)
|
if((event->bstate&BUTTON3_PRESSED)==BUTTON3_PRESSED) |
| {
|
{ |
| sendmousemessage(event->x,event->y,MM_RBUTTONDBLCLK|mod);
|
sendmousemessage(event->x,event->y,MM_RBUTTONDOWN|mod); |
| }
|
if(doubleclickstate2) |
| del_timer(doubletimer2);
|
{ |
| doubleclickstate2=true;
|
sendmousemessage(event->x,event->y,MM_RBUTTONDBLCLK|mod); |
| doubletimer2=set_timer(NULL,DOUBLECLICK,0,doubleclickproc);
|
} |
| }
|
del_timer(doubletimer2); |
| if((event->bstate&BUTTON3_RELEASED)==BUTTON3_RELEASED|mod)
|
doubletimer2=!doubleclickstate2?set_timer(NULL,DOUBLECLICK,0,doubleclickproc):NULL; |
| {
|
doubleclickstate2=!doubleclickstate2; |
| sendmousemessage(event->x,event->y,MM_RBUTTONUP|mod);
|
double2=false; |
| }
|
} |
| gpmev.x=mousex=event->x;
|
if((event->bstate&BUTTON3_RELEASED)==BUTTON3_RELEASED|mod) |
| gpmev.y=mousey=event->y;
|
{ |
| sendmousemessage(mousex,mousey,MM_MOUSEMOVE|mod);
|
sendmousemessage(event->x,event->y,MM_RBUTTONUP|mod); |
| }
|
double2=false; |
| |
} |
| |
if(double1) |
| |
{ |
| |
del_timer(doubletimer1); |
| |
doubleclickstate1=false; |
| |
doubletimer1=NULL; |
| |
} |
| |
if(double2) |
| |
{ |
| |
del_timer(doubletimer2); |
| |
doubleclickstate2=false; |
| |
doubletimer2=NULL; |
| |
} |
| |
gpmev.x=mousex=event->x; |
| |
gpmev.y=mousey=event->y; |
| |
sendmousemessage(mousex,mousey,MM_MOUSEMOVE|mod); |
| |
} |
| |
|
| bool dosendmousemessage(WIN *p,long vx,long vy,unsigned short state)
|
bool dosendmousemessage(WIN *p,long vx,long vy,unsigned short state) |
| {
|
{ |
| if(p==NULL)return false; |
if(p==NULL)return false; |
| bool result=true; |
bool result=true; |
| WIN *found=findwin(vx,vy); |
WIN *found=findwin(vx,vy); |
| EDIT *edit;
|
EDIT *edit; |
| BUTTON *button;
|
BUTTON *button; |
| SCROLL *scroll,*vscroll,*hscroll;
|
SCROLL *scroll,*vscroll,*hscroll; |
| LIST *list;
|
LIST *list; |
| COMBO *combo;
|
COMBO *combo; |
| MENU *menu;
|
MENU *menu; |
| DIALOG *dialog; |
DIALOG *dialog; |
| GList *lines; |
GList *lines; |
| long x=vx,y=vy,actline;
|
long x=vx,y=vy,actline; |
| unsigned short statemd=state&MDMASK;
|
unsigned short statemd=state&MDMASK; |
| bool chang=false;
|
bool chang=false; |
| static long stlen; |
static long stlen; |
| long len,height,old,maxpoz,minpoz,actpoz;
|
long i,len,height,old,maxpoz,minpoz,actpoz; |
| static long mx,my,nx,ny; |
static long mx,my,nx,ny,cecnt=0; |
| static bool freesendnext=true; |
static bool freesendnext=true; |
| bool sendnext=false; |
bool sendnext=false; |
| bool setfocus=true;
|
bool setfocus=true; |
| aftermouseval=false;
|
aftermouseval=false; |
| screen_to_client(p,&x,&y);
|
screen_to_client(p,&x,&y); |
| state&=KKMASK; |
state&=KKMASK; |
| if((focuswin==NULL)||(focuswin->extra->type!=TP_MENU))lastfocused=focuswin;
|
if((focuswin==NULL)||(focuswin->extra->type!=TP_MENU))lastfocused=focuswin; |
| if((state==MM_LBUTTONDOWN)&&p->hasmodal){set_focus(findchild(p));return true;} |
if((state==MM_LBUTTONDOWN)&&p->hasmodal){set_focus(findchild(p));return true;} |
| switch(p->extra->type)
|
switch(p->extra->type) |
| {
|
{ |
| case TP_EDIT:
|
case TP_EDIT: |
| switch(state)
|
edit=&p->extra->edit; |
| {
|
switch(state) |
| case MM_MOUSEMOVE:
|
{ |
| if(capturewin!=p)break;
|
case MM_MOUSEMOVE: |
| chang=true;
|
if(capturewin!=p)break; |
| case MM_LBUTTONDOWN:
|
if(cecnt>0) |
| capturewin=p;
|
{ |
| |
if(cecnt==2)edit->maskpos=mx; |
| |
cecnt++; |
| |
} |
| |
chang=true; |
| |
case MM_LBUTTONDOWN: |
| |
if(capturewin!=p) |
| |
{ |
| |
edit->maskpos=-1; |
| |
mx=x+edit->scroll; |
| |
cecnt=1; |
| |
} |
| |
capturewin=p; |
| usekeys=false; |
usekeys=false; |
| edit=&p->extra->edit;
|
if(cecnt>=0) |
| edit->curpos=x+edit->scroll;
|
{ |
| len=strlen(edit->text);
|
edit->curpos=x+edit->scroll; |
| if(edit->curpos<0)edit->curpos=0;
|
len=strlen(edit->text); |
| if(edit->curpos>len)edit->curpos=len;
|
if(edit->curpos<0)edit->curpos=0; |
| if(edit->curpos-edit->scroll<0)edit->scroll=edit->curpos;
|
if(edit->maskpos==-1) |
| if(edit->curpos-edit->scroll>p->vx-1)edit->scroll=edit->curpos-p->vx+1;
|
{ |
| break;
|
if(edit->curpos>len)edit->curpos=len; |
| case MM_LBUTTONUP:
|
} |
| |
else if(edit->curpos>len-1)edit->curpos=len-1; |
| |
if(edit->curpos-edit->scroll<0)edit->scroll=edit->curpos; |
| |
if(edit->curpos-edit->scroll>p->vx-1)edit->scroll=edit->curpos-p->vx+1; |
| |
} |
| |
break; |
| |
case MM_LBUTTONUP: |
| |
cecnt=0; |
| usekeys=true; |
usekeys=true; |
| capturewin=NULL;
|
capturewin=NULL; |
| }
|
break; |
| break;
|
case MM_LBUTTONDBLCLK: |
| case TP_BUTTON:
|
len=strlen(edit->text); |
| button=&p->extra->button;
|
actpoz=x+edit->scroll; |
| switch(state)
|
if(actpoz<0)actpoz=0; |
| {
|
if(actpoz>len-1)actpoz=len-1; |
| case MM_MOUSEMOVE:
|
if(edit->text[actpoz]!=' ') |
| if(stat==1)
|
{ |
| {
|
for(i=actpoz;i>=0;i--) |
| if(found==p)button->status=TS_HIGH;
|
{ |
| else {button->status=TS_UP;capturewin=NULL;stat=0;}
|
if(edit->text[i]==' ')break; |
| }
|
} |
| else if(stat==2)
|
edit->maskpos=i+1; |
| {
|
for(i=actpoz;i<len;i++) |
| if(found==p)button->status=TS_DOWN;
|
{ |
| else button->status=TS_UP;
|
if(edit->text[i]==' ')break; |
| }
|
} |
| else
|
edit->curpos=i-1; |
| {
|
cecnt=-1; |
| button->status=TS_HIGH;
|
} |
| capturewin=p;
|
break; |
| stat=1;
|
case MM_RBUTTONDOWN: |
| }
|
set_parent(clipboardmenu,p); |
| chang=true;
|
track_popup_menu(clipboardmenu,vx,vy); |
| break;
|
break; |
| case MM_LBUTTONDOWN:
|
} |
| if(found==p)
|
break; |
| {
|
case TP_BUTTON: |
| capturewin=p;
|
button=&p->extra->button; |
| |
switch(state) |
| |
{ |
| |
case MM_MOUSEMOVE: |
| |
if(stat==1) |
| |
{ |
| |
if(found==p)button->status=TS_HIGH; |
| |
else {button->status=TS_UP;capturewin=NULL;stat=0;sendnext=true;} |
| |
} |
| |
else if(stat==2) |
| |
{ |
| |
if(found==p)button->status=TS_DOWN; |
| |
else button->status=TS_UP; |
| |
} |
| |
else |
| |
{ |
| |
button->status=TS_HIGH; |
| |
capturewin=p; |
| |
stat=1; |
| |
} |
| |
chang=true; |
| |
break; |
| |
case MM_LBUTTONDOWN: |
| |
if(found==p) |
| |
{ |
| |
capturewin=p; |
| usekeys=false; |
usekeys=false; |
| button->status=TS_DOWN;
|
button->status=TS_DOWN; |
| stat=2;
|
stat=2; |
| }
|
} |
| else
|
else |
| {
|
{ |
| setfocus=false; |
setfocus=false; |
| sendmousemessage(vx,vy,MM_MOUSEMOVE); |
sendmousemessage(vx,vy,MM_MOUSEMOVE); |
| sendmousemessage(vx,vy,MM_LBUTTONDOWN); |
sendmousemessage(vx,vy,MM_LBUTTONDOWN); |
| }
|
} |
| if(!button->hasfocus)chang=true;
|
if(!button->hasfocus)chang=true; |
| break;
|
break; |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| usekeys=true; |
usekeys=true; |
| capturewin=NULL;
|
capturewin=NULL; |
| if(found==p)
|
if(found==p) |
| {
|
{ |
| capturewin=p;
|
capturewin=p; |
| if(stat==2)
|
if(stat==2) |
| {
|
{ |
| button->status=TS_EXPUSH;
|
button->status=TS_EXPUSH; |
| if(button->push!=NULL)button->push(p);
|
stat=1; |
| }
|
if(button->push!=NULL)button->push(p); |
| else button->status=TS_HIGH;
|
} |
| stat=1;
|
else |
| }
|
{ |
| else
|
button->status=TS_HIGH; |
| {
|
stat=1; |
| stat=0;
|
} |
| button->status=TS_UP;
|
} |
| }
|
else |
| chang=true;
|
{ |
| }
|
stat=0; |
| break;
|
button->status=TS_UP; |
| case TP_SCROLL:
|
} |
| scroll=&p->extra->scroll;
|
chang=true; |
| switch(state)
|
} |
| {
|
break; |
| case MM_MOUSEMOVE:
|
case TP_SCROLL: |
| if(scroll->vert)
|
scroll=&p->extra->scroll; |
| {
|
switch(state) |
| len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
{ |
| if(stat==1)scroll->sup=inrect(0,0,p->vx,1,x,y)?SC_DOWN:SC_UP;
|
case MM_MOUSEMOVE: |
| else if(stat==2)scroll->spageup=inrect(0,1,p->vx,len,x,y)?SC_DOWN:SC_UP;
|
if(scroll->vert) |
| else if(stat==3)
|
{ |
| {
|
len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| scroll->smooth=true;
|
if(stat==1)scroll->sup=inrect(0,0,p->vx,1,x,y)?SC_DOWN:SC_UP; |
| old=scroll->pos;
|
else if(stat==2)scroll->spageup=inrect(0,1,p->vx,len,x,y)?SC_DOWN:SC_UP; |
| height=(y+stlen-1)*(scroll->maxpos-scroll->minpos);
|
else if(stat==3) |
| scroll->pos=scroll->minpos+height/(p->vy-2-1)+((height%(p->vy-2-1)==0)?0:1);
|
{ |
| scroll->smoothpos=y+stlen-1;
|
scroll->smooth=true; |
| if(scroll->smoothpos<0)scroll->smoothpos=0;
|
old=scroll->pos; |
| if(scroll->smoothpos>p->vy-2-1)scroll->smoothpos=p->vy-2-1;
|
height=(y+stlen-1)*(scroll->maxpos-scroll->minpos); |
| if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos;
|
scroll->pos=scroll->minpos+height/(p->vy-2-1)+((height%(p->vy-2-1)==0)?0:1); |
| if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos;
|
scroll->smoothpos=y+stlen-1; |
| if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p);
|
if(scroll->smoothpos<0)scroll->smoothpos=0; |
| }
|
if(scroll->smoothpos>p->vy-2-1)scroll->smoothpos=p->vy-2-1; |
| else if(stat==4)scroll->spagedown=inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)?SC_DOWN:SC_UP;
|
if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos; |
| else if(stat==5)scroll->sdown=inrect(0,p->vy-1,p->vx,1,x,y)?SC_DOWN:SC_UP;
|
if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos; |
| }
|
if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p); |
| else
|
} |
| {
|
else if(stat==4)scroll->spagedown=inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)?SC_DOWN:SC_UP; |
| len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
else if(stat==5)scroll->sdown=inrect(0,p->vy-1,p->vx,1,x,y)?SC_DOWN:SC_UP; |
| if(stat==1)scroll->sup=inrect(0,0,1,p->vy,x,y)?SC_DOWN:SC_UP;
|
} |
| else if(stat==2)scroll->spageup=inrect(1,0,len,p->vy,x,y)?SC_DOWN:SC_UP;
|
else |
| else if(stat==3)
|
{ |
| {
|
len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| scroll->smooth=true;
|
if(stat==1)scroll->sup=inrect(0,0,1,p->vy,x,y)?SC_DOWN:SC_UP; |
| old=scroll->pos;
|
else if(stat==2)scroll->spageup=inrect(1,0,len,p->vy,x,y)?SC_DOWN:SC_UP; |
| height=(x+stlen-1)*(scroll->maxpos-scroll->minpos);
|
else if(stat==3) |
| scroll->pos=scroll->minpos+height/(p->vx-2-1)+((height%(p->vx-2-1)==0)?0:1);
|
{ |
| scroll->smoothpos=x+stlen-1;
|
scroll->smooth=true; |
| if(scroll->smoothpos<0)scroll->smoothpos=0;
|
old=scroll->pos; |
| if(scroll->smoothpos>p->vx-2-1)scroll->smoothpos=p->vx-2-1;
|
height=(x+stlen-1)*(scroll->maxpos-scroll->minpos); |
| if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos;
|
scroll->pos=scroll->minpos+height/(p->vx-2-1)+((height%(p->vx-2-1)==0)?0:1); |
| if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos;
|
scroll->smoothpos=x+stlen-1; |
| if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p);
|
if(scroll->smoothpos<0)scroll->smoothpos=0; |
| }
|
if(scroll->smoothpos>p->vx-2-1)scroll->smoothpos=p->vx-2-1; |
| else if(stat==4)scroll->spagedown=inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)?SC_DOWN:SC_UP;
|
if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos; |
| else if(stat==5)scroll->sdown=inrect(p->vx-1,0,1,p->vy,x,y)?SC_DOWN:SC_UP;
|
if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos; |
| }
|
if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p); |
| chang=true;
|
} |
| break;
|
else if(stat==4)scroll->spagedown=inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)?SC_DOWN:SC_UP; |
| case MM_LBUTTONDOWN:
|
else if(stat==5)scroll->sdown=inrect(p->vx-1,0,1,p->vy,x,y)?SC_DOWN:SC_UP; |
| capturewin=p;
|
} |
| |
chang=true; |
| |
break; |
| |
case MM_LBUTTONDOWN: |
| |
capturewin=p; |
| usekeys=false; |
usekeys=false; |
| scroll->sup=SC_UP;
|
scroll->sup=SC_UP; |
| scroll->spageup=SC_UP;
|
scroll->spageup=SC_UP; |
| scroll->sdown=SC_UP;
|
scroll->sdown=SC_UP; |
| scroll->spagedown=SC_UP;
|
scroll->spagedown=SC_UP; |
| if(scroll->vert)
|
if(scroll->vert) |
| {
|
{ |
| len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| if(inrect(0,0,p->vx,1,x,y)&&((stat==0)||(stat==1))){stat=1;scroll->sup=SC_DOWN;}
|
if(inrect(0,0,p->vx,1,x,y)&&((stat==0)||(stat==1))&&(p->vy>1)){stat=1;scroll->sup=SC_DOWN;} |
| else if(inrect(0,1,p->vx,len,x,y)&&((stat==0)||(stat==2))){stat=2;scroll->spageup=SC_DOWN;}
|
else if(inrect(0,1,p->vx,len,x,y)&&((stat==0)||(stat==2))){stat=2;scroll->spageup=SC_DOWN;} |
| else if(inrect(0,1+len,p->vx,1,x,y)&&((stat==0)||(stat==3))){stat=3;stlen=1+len-y;}
|
else if(inrect(0,1+len,p->vx,1,x,y)&&((stat==0)||(stat==3))&&(p->vy>3)){stat=3;stlen=1+len-y;} |
| else if(inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)&&((stat==0)||(stat==4))){stat=4;scroll->spagedown=SC_DOWN;}
|
else if(inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)&&((stat==0)||(stat==4))){stat=4;scroll->spagedown=SC_DOWN;} |
| else if(inrect(0,p->vy-1,p->vx,1,x,y)&&((stat==0)||(stat==5))){stat=5;scroll->sdown=SC_DOWN;}
|
else if(inrect(0,p->vy-1,p->vx,1,x,y)&&((stat==0)||(stat==5))){stat=5;scroll->sdown=SC_DOWN;} |
| }
|
} |
| else
|
else |
| {
|
{ |
| len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| if((y>=0)&&(y<p->vy))
|
if((y>=0)&&(y<p->vy)) |
| {
|
{ |
| if(inrect(0,0,1,p->vy,x,y)&&((stat==0)||(stat==1))){stat=1;scroll->sup=SC_DOWN;}
|
if(inrect(0,0,1,p->vy,x,y)&&((stat==0)||(stat==1))&&(p->vy>1)){stat=1;scroll->sup=SC_DOWN;} |
| else if(inrect(1,0,len,p->vy,x,y)&&((stat==0)||(stat==2))){stat=2;scroll->spageup=SC_DOWN;}
|
else if(inrect(1,0,len,p->vy,x,y)&&((stat==0)||(stat==2))){stat=2;scroll->spageup=SC_DOWN;} |
| else if(inrect(1+len,0,1,p->vy,x,y)&&((stat==0)||(stat==3))){stat=3;stlen=1+len-x;}
|
else if(inrect(1+len,0,1,p->vy,x,y)&&((stat==0)||(stat==3))&&(p->vx>3)){stat=3;stlen=1+len-x;} |
| else if(inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)&&((stat==0)||(stat==4))){stat=4;scroll->spagedown=SC_DOWN;}
|
else if(inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)&&((stat==0)||(stat==4))){stat=4;scroll->spagedown=SC_DOWN;} |
| else if(inrect(p->vx-1,0,1,p->vy,x,y)&&((stat==0)||(stat==5))){stat=5;scroll->sdown=SC_DOWN;}
|
else if(inrect(p->vx-1,0,1,p->vy,x,y)&&((stat==0)||(stat==5))){stat=5;scroll->sdown=SC_DOWN;} |
| }
|
} |
| }
|
} |
| old=scroll->pos;
|
old=scroll->pos; |
| if(scroll->sup!=SC_UP)scroll->pos-=scroll->cnt;
|
if(scroll->sup!=SC_UP)scroll->pos-=scroll->cnt; |
| if(scroll->spageup!=SC_UP)scroll->pos-=scroll->pagecnt;
|
if(scroll->spageup!=SC_UP)scroll->pos-=scroll->pagecnt; |
| if(scroll->sdown!=SC_UP)scroll->pos+=scroll->cnt;
|
if(scroll->sdown!=SC_UP)scroll->pos+=scroll->cnt; |
| if(scroll->spagedown!=SC_UP)scroll->pos+=scroll->pagecnt;
|
if(scroll->spagedown!=SC_UP)scroll->pos+=scroll->pagecnt; |
| if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos;
|
if(scroll->pos<scroll->minpos)scroll->pos=scroll->minpos; |
| if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos;
|
if(scroll->pos>scroll->maxpos)scroll->pos=scroll->maxpos; |
| if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p);
|
if((old!=scroll->pos)&&(scroll->change!=NULL))scroll->change(p); |
| if(stat!=3)aftermouseval=true;
|
if(stat!=3)aftermouseval=true; |
| chang=true;
|
chang=true; |
| break;
|
break; |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| if(scroll->vert)
|
if(scroll->vert) |
| {
|
{ |
| len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
len=(p->vy-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| if(stat==1)scroll->sup=inrect(0,0,p->vx,1,x,y)?SC_PUSH:SC_UP;
|
if(stat==1)scroll->sup=inrect(0,0,p->vx,1,x,y)?SC_PUSH:SC_UP; |
| else if(stat==2)scroll->spageup=inrect(0,1,p->vx,len,x,y)?SC_PUSH:SC_UP;
|
else if(stat==2)scroll->spageup=inrect(0,1,p->vx,len,x,y)?SC_PUSH:SC_UP; |
| else if(stat==3)scroll->smooth=false;
|
else if(stat==3)scroll->smooth=false; |
| else if(stat==4)scroll->spagedown=inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)?SC_PUSH:SC_UP;
|
else if(stat==4)scroll->spagedown=inrect(0,1+len+1,p->vx,p->vy-2-1-len,x,y)?SC_PUSH:SC_UP; |
| else if(stat==5)scroll->sdown=inrect(0,p->vy-1,p->vx,1,x,y)?SC_PUSH:SC_UP;
|
else if(stat==5)scroll->sdown=inrect(0,p->vy-1,p->vx,1,x,y)?SC_PUSH:SC_UP; |
| }
|
} |
| else
|
else |
| {
|
{ |
| len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos);
|
len=(p->vx-2-1)*(scroll->pos-scroll->minpos)/(scroll->maxpos-scroll->minpos); |
| if(stat==1)scroll->sup=inrect(0,0,1,p->vy,x,y)?SC_PUSH:SC_UP;
|
if(stat==1)scroll->sup=inrect(0,0,1,p->vy,x,y)?SC_PUSH:SC_UP; |
| else if(stat==2)scroll->spageup=inrect(1,0,len,p->vy,x,y)?SC_PUSH:SC_UP;
|
else if(stat==2)scroll->spageup=inrect(1,0,len,p->vy,x,y)?SC_PUSH:SC_UP; |
| else if(stat==3)scroll->smooth=false;
|
else if(stat==3)scroll->smooth=false; |
| else if(stat==4)scroll->spagedown=inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)?SC_PUSH:SC_UP;
|
else if(stat==4)scroll->spagedown=inrect(1+len+1,0,p->vx-2-1-len,p->vy,x,y)?SC_PUSH:SC_UP; |
| else if(stat==5)scroll->sdown=inrect(p->vx-1,0,1,p->vy,x,y)?SC_PUSH:SC_UP;
|
else if(stat==5)scroll->sdown=inrect(p->vx-1,0,1,p->vy,x,y)?SC_PUSH:SC_UP; |
| }
|
} |
| capturewin=NULL;
|
capturewin=NULL; |
| usekeys=true; |
usekeys=true; |
| stat=0;
|
stat=0; |
| chang=true;
|
chang=true; |
| set_timer(p,BUTTONCLICK,0,buttontimer);
|
set_timer(p,BUTTONCLICK,0,buttontimer); |
| }
|
} |
| break;
|
break; |
| case TP_LIST:
|
case TP_LIST: |
| list=&p->extra->list;
|
list=&p->extra->list; |
| vscroll=&list->vscroll->extra->scroll;
|
vscroll=&list->vscroll->extra->scroll; |
| minpoz=vscroll->pos;
|
minpoz=vscroll->pos; |
| maxpoz=p->vy-2+vscroll->pos-1;
|
maxpoz=p->vy-2+vscroll->pos-1; |
| switch(state)
|
switch(state) |
| {
|
{ |
| case MM_MOUSEMOVE:
|
case MM_MOUSEMOVE: |
| if(capturewin==p)
|
if(capturewin==p) |
| {
|
{ |
| long actline=list->activeline;
|
long actline=list->activeline; |
| if(!list->combotyp||(list->combotyp&&(stat==1)))list->activeline=y-1+vscroll->pos;
|
if((list->combotyp!=CT_COMBO)||((list->combotyp==CT_COMBO)&&(stat==1)))list->activeline=y-1+vscroll->pos; |
| list->exvscroll=EX_NONE;
|
list->exvscroll=EX_NONE; |
| list->exhscroll=EX_NONE;
|
list->exhscroll=EX_NONE; |
| if(!list->combotyp||(list->combotyp&&(stat==1)))
|
if((list->combotyp!=CT_COMBO)||((list->combotyp==CT_COMBO)&&(stat==1))) |
| {
|
{ |
| if(list->activeline<minpoz){list->activeline=minpoz;if(stat>=1)list->exvscroll=EX_UP;}
|
if(list->activeline<minpoz){list->activeline=minpoz;if(stat>=1)list->exvscroll=EX_UP;} |
| if(list->activeline>maxpoz){list->activeline=maxpoz;if(stat>=1)list->exvscroll=EX_DOWN;}
|
if(list->activeline>maxpoz){list->activeline=maxpoz;if(stat>=1)list->exvscroll=EX_DOWN;} |
| if(x<1)if(stat>=1)list->exhscroll=EX_UP;
|
if(x<1)if(stat>=1)list->exhscroll=EX_UP; |
| if(x>=p->vx-2)if(stat>=1)list->exhscroll=EX_DOWN;
|
if(x>=p->vx-2)if(stat>=1)list->exhscroll=EX_DOWN; |
| }
|
} |
| if((list->activeline!=actline)&&(list->change!=NULL))list->change(p);
|
if((list->activeline!=actline)&&(list->change!=NULL))list->change(p); |
| chang=true;
|
chang=true; |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONDOWN:
|
case MM_LBUTTONDOWN: |
| list->exvscroll=EX_NONE;
|
list->exvscroll=EX_NONE; |
| list->exhscroll=EX_NONE;
|
list->exhscroll=EX_NONE; |
| if(!list->combotyp)
|
if(list->combotyp!=CT_COMBO) |
| {
|
{ |
| capturewin=p;
|
if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y)) |
| usekeys=false; |
{ |
| stat=1;
|
capturewin=p; |
| if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y))
|
usekeys=false; |
| {
|
stat=1; |
| list->activeline=y-1+vscroll->pos;
|
list->activeline=y-1+vscroll->pos; |
| if(list->activeline<minpoz)list->activeline=minpoz;
|
if(list->activeline<minpoz)list->activeline=minpoz; |
| if(list->activeline>maxpoz)list->activeline=maxpoz;
|
if(list->activeline>maxpoz)list->activeline=maxpoz; |
| }
|
} |
| }
|
} |
| else
|
else |
| {
|
{ |
| if((found==p)||(found==list->vscroll)||(found==list->hscroll))
|
if((found==p)||(found==list->vscroll)||(found==list->hscroll)) |
| {
|
{ |
| if(!(inrect(p->vx-list->vscroll->vx,1,list->vscroll->vx,p->vy-2,x,y)||
|
if(!((inrect(p->vx-list->vscroll->vx,1,list->vscroll->vx,p->vy-2,x,y)&& |
| inrect(1,p->vy-list->hscroll->vy,p->vx-2,list->hscroll->vy,x,y)))
|
(list->vscroll->active))|| |
| {
|
inrect(1,p->vy-list->hscroll->vy,p->vx-2,list->hscroll->vy,x,y)&& |
| if(inrect(1,1,p->vx-2,p->vy-2,x,y))
|
(list->hscroll->active))) |
| {
|
{ |
| |
if(inrect(1,1,p->vx-2,p->vy-2,x,y)) |
| |
{ |
| stat=1; |
stat=1; |
| usekeys=false;
|
usekeys=false; |
| list->activeline=y-1+vscroll->pos;
|
list->activeline=y-1+vscroll->pos; |
| if(list->activeline<minpoz)list->activeline=minpoz;
|
if(list->activeline<minpoz)list->activeline=minpoz; |
| if(list->activeline>maxpoz)list->activeline=maxpoz;
|
if(list->activeline>maxpoz)list->activeline=maxpoz; |
| } |
} |
| }
|
} |
| else
|
else |
| {
|
{ |
| capturewin=NULL; |
capturewin=NULL; |
| usekeys=true;
|
usekeys=true; |
| aftermouseval=sendmousemessage(vx,vy,state);
|
aftermouseval=sendmousemessage(vx,vy,state); |
| }
|
} |
| }
|
} |
| else
|
else |
| {
|
{ |
| capturewin=NULL;
|
capturewin=NULL; |
| usekeys=true; |
usekeys=true; |
| set_focus(p->parent);
|
set_focus(p->parent); |
| show_win(p,false);
|
show_win(p,false); |
| }
|
} |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| if(list->combotyp)
|
if(list->combotyp==CT_COMBO) |
| {
|
{ |
| long act;
|
long act; |
| if(stat>=1) |
if(stat>=1) |
| if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y))
|
if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y)) |
| {
|
{ |
| act=y-1+vscroll->pos;
|
act=y-1+vscroll->pos; |
| if((act>=minpoz)&&(act<=maxpoz))list->activeline=act;
|
if((act>=minpoz)&&(act<=maxpoz))list->activeline=act; |
| } |
} |
| else |
else |
| { |
{ |
| stat=2; |
stat=2; |
| }
|
} |
| }
|
} |
| if(capturewin==p)
|
if(capturewin==p) |
| {
|
{ |
| if(stat>=1)
|
if(stat>=1) |
| {
|
{ |
| stat=0;
|
stat=0; |
| list->exvscroll=EX_NONE;
|
list->exvscroll=EX_NONE; |
| list->exhscroll=EX_NONE;
|
list->exhscroll=EX_NONE; |
| capturewin=NULL; |
capturewin=NULL; |
| usekeys=true;
|
usekeys=true; |
| void (*change)()=list->change;
|
void (*change)()=list->change; |
| if(list->combotyp)
|
if(list->combotyp==CT_COMBO) |
| {
|
{ |
| set_focus(p->parent);
|
set_focus(p->parent); |
| show_win(p,false);
|
show_win(p,false); |
| if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y))if(list->dblclk!=NULL)list->dblclk(p);
|
if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y)) |
| }
|
{ |
| if(change!=NULL)change(p);
|
if((list->combotyp==CT_COMBO)&&(p->parent!=NULL)&& |
| }
|
(p->parent->extra->type==TP_COMBO)) |
| }
|
{ |
| chang=true;
|
combo=&p->parent->extra->combo; |
| break;
|
char *data=g_list_nth_data(list->lines,list->activeline); |
| case MM_LBUTTONDBLCLK:
|
set_text(combo->edit,data); |
| if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y))
|
} |
| {
|
if(list->dblclk!=NULL)list->dblclk(p); |
| if(list->dblclk!=NULL)list->dblclk(p);
|
} |
| }
|
} |
| }
|
if(change!=NULL)change(p); |
| break;
|
} |
| case TP_COMBO:
|
} |
| combo=&p->extra->combo;
|
chang=true; |
| switch(state)
|
break; |
| {
|
case MM_LBUTTONDBLCLK: |
| case MM_MOUSEMOVE:
|
if((found==p)&&inrect(1,1,p->vx-2,p->vy-2,x,y)) |
| if(capturewin==p)
|
{ |
| if((!(found==p))||(!inrect(0,0,p->vx,p->vy,x,y)))
|
if((list->combotyp==CT_COMBO)&&(p->parent!=NULL)&& |
| {
|
(p->parent->extra->type==TP_COMBO)) |
| combo->pushed=SC_PUSH;
|
{ |
| capturewin=combo->list;
|
combo=&p->parent->extra->combo; |
| |
char *data=g_list_nth_data(list->lines,list->activeline); |
| |
set_text(combo->edit,data); |
| |
} |
| |
if(list->dblclk!=NULL)list->dblclk(p); |
| |
} |
| |
} |
| |
break; |
| |
case TP_COMBO: |
| |
combo=&p->extra->combo; |
| |
switch(state) |
| |
{ |
| |
case MM_MOUSEMOVE: |
| |
if(capturewin==p) |
| |
if((!(found==p))||(!inrect(0,0,p->vx,p->vy,x,y))) |
| |
{ |
| |
combo->pushed=SC_PUSH; |
| |
capturewin=combo->list; |
| usekeys=false; |
usekeys=false; |
| stat=1;
|
stat=1; |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONDOWN:
|
case MM_LBUTTONDOWN: |
| capturewin=p;
|
capturewin=p; |
| usekeys=false; |
usekeys=false; |
| combo->pushed=SC_DOWN;
|
combo->pushed=SC_DOWN; |
| list=&combo->list->extra->list;
|
list=&combo->list->extra->list; |
| vscroll=&list->vscroll->extra->scroll;
|
vscroll=&list->vscroll->extra->scroll; |
| list->activeline=combo->activeline;
|
list->activeline=combo->activeline; |
| if(list->activeline<vscroll->pos)vscroll->pos=list->activeline;
|
if(list->activeline<vscroll->pos)vscroll->pos=list->activeline; |
| if(list->activeline-combo->list->vy+3>vscroll->pos)vscroll->pos=list->activeline-combo->list->vy+3;
|
if(list->activeline-combo->list->vy+3>vscroll->pos)vscroll->pos=list->activeline-combo->list->vy+3; |
| show_win(combo->list,true);
|
show_win(combo->list,true); |
| break;
|
break; |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| if(capturewin==p)
|
if(capturewin==p) |
| {
|
{ |
| set_timer(p,BUTTONCLICK,0,buttondoubletimer);
|
set_timer(p,BUTTONCLICK,0,buttondoubletimer); |
| combo->pushed=SC_PUSH;
|
combo->pushed=SC_PUSH; |
| capturewin=combo->list; |
capturewin=combo->list; |
| usekeys=true;
|
usekeys=true; |
| }
|
} |
| }
|
} |
| break;
|
break; |
| case TP_MENU: |
case TP_MENU: |
| menu=&p->extra->menu;
|
menu=&p->extra->menu; |
| minpoz=0;
|
minpoz=0; |
| actline=menu->activeline; |
actline=menu->activeline; |
| if(menu->vert) |
if(menu->vert) |
| { |
{ |
| Line 551 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 640 bool dosendmousemessage(WIN *p,long vx,l |
|
| } |
} |
| if(old>0)actpoz=-1; |
if(old>0)actpoz=-1; |
| } |
} |
| }
|
} |
| if(actpoz!=-1) |
if(actpoz!=-1) |
| { |
{ |
| if(menu->lines!=NULL)lines=g_list_nth(menu->lines,actpoz);else lines=NULL; |
if(menu->lines!=NULL)lines=g_list_nth(menu->lines,actpoz);else lines=NULL; |
| if(lines!=NULL) |
if(lines!=NULL) |
| if(strcmp(((CMENU*)lines->data)->text,"-")==0)actpoz=-1; |
if(strcmp(((CMENU*)lines->data)->text,"-")==0)actpoz=-1; |
| } |
} |
| switch(state)
|
switch(state) |
| {
|
{ |
| case MM_MOUSEMOVE:
|
case MM_MOUSEMOVE: |
| if(((focuswin==p)&&(found==p)&&(capturewin==NULL))||(menu->vert&&(actpoz!=-1))) |
if(((focuswin==p)&&(found==p)&&(capturewin==NULL))||(menu->vert&&(actpoz!=-1))) |
| { |
{ |
| capturewin=p; |
capturewin=p; |
| Line 570 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 659 bool dosendmousemessage(WIN *p,long vx,l |
|
| (found==p)&&(inrect(0,0,p->vx,p->vy,x,y))) |
(found==p)&&(inrect(0,0,p->vx,p->vy,x,y))) |
| { |
{ |
| stat=3; |
stat=3; |
| menu->activeline=actpoz;
|
menu->activeline=actpoz; |
| if(menu->activeline<minpoz)menu->activeline=minpoz;
|
if(menu->activeline<minpoz)menu->activeline=minpoz; |
| if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
| WIN *submenu=((CMENU*)g_list_nth(menu->lines,actpoz)->data)->submenu; |
WIN *submenu=((CMENU*)g_list_nth(menu->lines,actpoz)->data)->submenu; |
| if(submenu!=NULL) |
if(submenu!=NULL) |
| Line 598 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 687 bool dosendmousemessage(WIN *p,long vx,l |
|
| } |
} |
| else focuswin=p; |
else focuswin=p; |
| } |
} |
| if((capturewin==p)&&(!menu->vert))
|
if((capturewin==p)&&(!menu->vert)) |
| if((found!=p)||(!inrect(0,0,p->vx,p->vy,x,y)))
|
if((found!=p)||(!inrect(0,0,p->vx,p->vy,x,y))) |
| {
|
{ |
| if((stat==3)&&(!menu->vert)) |
if((stat==3)&&(!menu->vert)) |
| { |
{ |
| GList *l=g_list_nth(menu->lines,menu->activeline); |
GList *l=g_list_nth(menu->lines,menu->activeline); |
| Line 610 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 699 bool dosendmousemessage(WIN *p,long vx,l |
|
| if(submenu!=NULL)capturewin=submenu; |
if(submenu!=NULL)capturewin=submenu; |
| usekeys=true; |
usekeys=true; |
| stat=1; |
stat=1; |
| }
|
} |
| } |
} |
| }
|
} |
| if(capturewin==p)
|
if(capturewin==p) |
| {
|
{ |
| if((!menu->vert&&(actpoz!=-1)&&inrect(0,0,p->vx,p->vy,x,y))|| |
if((!menu->vert&&(actpoz!=-1)&&inrect(0,0,p->vx,p->vy,x,y))|| |
| (menu->vert&&(stat==1)))
|
(menu->vert&&(stat==1))) |
| {
|
{ |
| menu->activeline=actpoz; |
menu->activeline=actpoz; |
| if(actpoz==-1)stat=2; |
if(actpoz==-1)stat=2; |
| if(!menu->vert) |
if(!menu->vert) |
| { |
{ |
| if(menu->activeline<minpoz)menu->activeline=minpoz;
|
if(menu->activeline<minpoz)menu->activeline=minpoz; |
| if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
| } |
} |
| }
|
} |
| chang=true;
|
chang=true; |
| }
|
} |
| if(nextcapturewin!=NULL)capturewin=nextcapturewin; |
if(nextcapturewin!=NULL)capturewin=nextcapturewin; |
| break;
|
break; |
| case MM_RBUTTONDOWN:
|
case MM_RBUTTONDOWN: |
| case MM_LBUTTONDOWN:
|
case MM_LBUTTONDOWN: |
| if(!menu->vert)
|
if(!menu->vert) |
| {
|
{ |
| if((actpoz!=-1)&&(stat==0)) |
if((actpoz!=-1)&&(stat==0)) |
| { |
{ |
| capturewin=p;
|
capturewin=p; |
| usekeys=false; |
usekeys=false; |
| }
|
} |
| if((stat==0)&&(found==p)&&inrect(0,0,p->vx,p->vy,x,y))
|
if((stat==0)&&(found==p)&&inrect(0,0,p->vx,p->vy,x,y)) |
| {
|
{ |
| if(actpoz!=-1) |
if(actpoz!=-1) |
| { |
{ |
| stat=3; |
stat=3; |
| menu->activeline=actpoz; |
menu->activeline=actpoz; |
| if(menu->activeline<minpoz)menu->activeline=minpoz;
|
if(menu->activeline<minpoz)menu->activeline=minpoz; |
| if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
if(menu->activeline>maxpoz)menu->activeline=maxpoz; |
| if(menu->select!=NULL)menu->select(p,getmenucellid(menu)); |
if(menu->select!=NULL)menu->select(p,getmenucellid(menu)); |
| WIN *submenu=((CMENU*)g_list_nth(menu->lines,actpoz)->data)->submenu; |
WIN *submenu=((CMENU*)g_list_nth(menu->lines,actpoz)->data)->submenu; |
| Line 656 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 745 bool dosendmousemessage(WIN *p,long vx,l |
|
| focuswin=submenu; |
focuswin=submenu; |
| } |
} |
| } |
} |
| else setfocus=false;
|
else setfocus=false; |
| } |
} |
| else if((menu->activeline==actpoz)||(actpoz==-1)) |
else if((menu->activeline==actpoz)||(actpoz==-1)) |
| { |
{ |
| Line 672 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 761 bool dosendmousemessage(WIN *p,long vx,l |
|
| if(freesendnext)sendnext=true; |
if(freesendnext)sendnext=true; |
| else freesendnext=true; |
else freesendnext=true; |
| } |
} |
| }
|
} |
| }
|
} |
| else
|
else |
| {
|
{ |
| if(actpoz!=-1) |
if(actpoz!=-1) |
| { |
{ |
| stat=1; |
stat=1; |
| usekeys=false;
|
usekeys=false; |
| menu->activeline=actpoz; |
menu->activeline=actpoz; |
| result=true; |
result=true; |
| freesendnext=false; |
freesendnext=false; |
| Line 695 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 784 bool dosendmousemessage(WIN *p,long vx,l |
|
| setfocus=false; |
setfocus=false; |
| sendnext=true; |
sendnext=true; |
| result=true; |
result=true; |
| }
|
} |
| }
|
} |
| break;
|
break; |
| case MM_RBUTTONUP:
|
case MM_RBUTTONUP: |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| if(menu->vert)
|
if(menu->vert) |
| {
|
{ |
| long act=-1; |
long act=-1; |
| if(stat>=1) |
if(stat>=1) |
| if((inrect(1,1,p->vx-2,p->vy-2,x,y))&&(actpoz!=-1))
|
if((inrect(1,1,p->vx-2,p->vy-2,x,y))&&(actpoz!=-1)) |
| {
|
{ |
| act=y-1; |
act=y-1; |
| maxpoz=g_list_length(menu->lines)-1; |
maxpoz=g_list_length(menu->lines)-1; |
| if(act<minpoz)act=minpoz; |
if(act<minpoz)act=minpoz; |
| Line 715 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 804 bool dosendmousemessage(WIN *p,long vx,l |
|
| else |
else |
| { |
{ |
| stat=2; |
stat=2; |
| }
|
} |
| if(stat>=1)
|
if(stat>=1) |
| {
|
{ |
| WIN *submenu=NULL; |
WIN *submenu=NULL; |
| if(act!=-1)submenu=((CMENU*)g_list_nth(menu->lines,act)->data)->submenu; |
if(act!=-1)submenu=((CMENU*)g_list_nth(menu->lines,act)->data)->submenu; |
| if(submenu!=NULL)result=true; |
if(submenu!=NULL)result=true; |
| Line 730 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 819 bool dosendmousemessage(WIN *p,long vx,l |
|
| usekeys=true; |
usekeys=true; |
| capturewin=NULL; |
capturewin=NULL; |
| show_win(p,false); |
show_win(p,false); |
| set_focus(((p->parent!=NULL)&&(p->parent->extra->type==TP_MENU))?lastfocused:p->parent);
|
set_focus(((p->parent!=NULL)&&(p->parent->extra->type==TP_MENU))?lastfocused:p->parent); |
| } |
} |
| if(menu->select!=NULL)menu->select(p,getmenucellid(menu)); |
if(menu->select!=NULL)menu->select(p,getmenucellid(menu)); |
| }
|
} |
| } |
} |
| if((found!=p)&&((p->parent==NULL)||(p->parent->extra->type!=TP_MENU))) |
if((found!=p)&&((p->parent==NULL)||(p->parent->extra->type!=TP_MENU))) |
| { |
{ |
| Line 745 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 834 bool dosendmousemessage(WIN *p,long vx,l |
|
| setfocus=false; |
setfocus=false; |
| sendnext=true; |
sendnext=true; |
| result=true; |
result=true; |
| }
|
} |
| if((actpoz==-1)&&(found==p))result=true; |
if((actpoz==-1)&&(found==p))result=true; |
| } |
} |
| else |
else |
| Line 756 bool dosendmousemessage(WIN *p,long vx,l |
|
| Line 845 bool dosendmousemessage(WIN *p,long vx,l |
|
| if((l!=NULL)&&(((CMENU*)l->data)->submenu!=NULL)) |
if((l!=NULL)&&(((CMENU*)l->data)->submenu!=NULL)) |
| { |
{ |
| WIN *submenu=((CMENU*)l->data)->submenu; |
WIN *submenu=((CMENU*)l->data)->submenu; |
| if(submenu!=NULL)capturewin=submenu;
|
if(submenu!=NULL)capturewin=submenu; |
| usekeys=true; |
usekeys=true; |
| stat=1; |
stat=1; |
| }
|
} |
| } |
} |
| if(capturewin==p)
|
if(capturewin==p) |
| {
|
{ |
| if(stat>=1)
|
if(stat>=1) |
| {
|
{ |
| usekeys=true; |
usekeys=true; |
| void (*change)()=menu->change;
|
void (*change)()=menu->change; |
| if(change!=NULL)change(p);
|
if(change!=NULL)change(p); |
| } |
} |
| }
|
} |
| if(!inrect(0,0,p->vx,p->vy,x,y))
|
if(!inrect(0,0,p->vx,p->vy,x,y)) |
| {
|
{ |
| stat=0; |
stat=0; |
| usekeys=true; |
usekeys=true; |
| capturewin=NULL; |
capturewin=NULL; |
| set_focus(lastfocused);
|
set_focus(lastfocused); |
| } |
} |
| }
|
} |
| chang=true;
|
chang=true; |
| break;
|
break; |
| }
|
} |
| if((menu->activeline!=actline)&&(menu->change!=NULL))menu->change(p);
|
if((menu->activeline!=actline)&&(menu->change!=NULL))menu->change(p); |
| break; |
break; |
| case TP_DIALOG:
|
case TP_DIALOG: |
| dialog=&p->extra->dialog;
|
dialog=&p->extra->dialog; |
| switch(state)
|
switch(state) |
| {
|
{ |
| case MM_MOUSEMOVE:
|
case MM_MOUSEMOVE: |
| if(capturewin!=p)break;
|
if(capturewin!=p)break; |
| switch(stat)
|
switch(stat) |
| {
|
{ |
| case 0:move_win(p,vx+mx,vy+my,NOCHANGE,NOCHANGE,NOCHANGE);break;
|
case 0:move_win(p,vx+mx,vy+my,NOCHANGE,NOCHANGE,NOCHANGE);break; |
| case 1:if(vy>ny-1-my)vy=ny-1-my;move_win(p,NOCHANGE,vy+my,NOCHANGE,ny-vy-my,NOCHANGE);break;
|
case 1:if(vy>ny-1-my)vy=ny-1-my;move_win(p,NOCHANGE,vy+my,NOCHANGE,ny-vy-my,NOCHANGE);break; |
| case 2:if(vy>ny-1-my)vy=ny-1-my;move_win(p,NOCHANGE,vy+my,nx-2*p->x+vx+mx,ny-vy-my,NOCHANGE);break;
|
case 2:if(vy>ny-1-my)vy=ny-1-my;move_win(p,NOCHANGE,vy+my,nx-2*p->x+vx+mx,ny-vy-my,NOCHANGE);break; |
| case 3:move_win(p,NOCHANGE,NOCHANGE,nx-2*p->x+vx+mx,NOCHANGE,NOCHANGE);break;
|
case 3:move_win(p,NOCHANGE,NOCHANGE,nx-2*p->x+vx+mx,NOCHANGE,NOCHANGE);break; |
| case 4:move_win(p,NOCHANGE,NOCHANGE,nx-2*p->x+vx+mx,ny-2*p->y+vy+my,NOCHANGE);break;
|
case 4:move_win(p,NOCHANGE,NOCHANGE,nx-2*p->x+vx+mx,ny-2*p->y+vy+my,NOCHANGE);break; |
| case 5:move_win(p,NOCHANGE,NOCHANGE,NOCHANGE,ny-2*p->y+vy+my,NOCHANGE);break;
|
case 5:move_win(p,NOCHANGE,NOCHANGE,NOCHANGE,ny-2*p->y+vy+my,NOCHANGE);break; |
| case 6:if(vx>nx-10-mx)vx=nx-10-mx;move_win(p,vx+mx,NOCHANGE,nx-vx-mx,ny-2*p->y+vy+my,NOCHANGE);break;
|
case 6:if(vx>nx-10-mx)vx=nx-10-mx;move_win(p,vx+mx,NOCHANGE,nx-vx-mx,ny-2*p->y+vy+my,NOCHANGE);break; |
| case 7:if(vx>nx-10-mx)vx=nx-10-mx;move_win(p,vx+mx,NOCHANGE,nx-vx-mx,NOCHANGE,NOCHANGE);break;
|
case 7:if(vx>nx-10-mx)vx=nx-10-mx;move_win(p,vx+mx,NOCHANGE,nx-vx-mx,NOCHANGE,NOCHANGE);break; |
| case 8:if(vx>nx-10-mx)vx=nx-10-mx;if(vy>ny-1-my)vy=ny-1-my;move_win(p,vx+mx,vy+my,nx-vx-mx,ny-vy-my,NOCHANGE);
|
case 8:if(vx>nx-10-mx)vx=nx-10-mx;if(vy>ny-1-my)vy=ny-1-my;move_win(p,vx+mx,vy+my,nx-vx-mx,ny-vy-my,NOCHANGE); |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONDBLCLK:
|
case MM_LBUTTONDBLCLK: |
| if(((dialog->style&ST_DI_HASMAXIMIZE)==ST_DI_HASMAXIMIZE)&&(inrect(0,0,p->vx,1,x,y)))
|
if(((dialog->style&ST_DI_HASMAXIMIZE)==ST_DI_HASMAXIMIZE)&&(inrect(0,0,p->vx,1,x,y))) |
| {
|
{ |
| capturewin=NULL; |
capturewin=NULL; |
| usekeys=true;
|
usekeys=true; |
| dialog->bmaximize->extra->button.push(dialog->bmaximize);
|
dialog->bmaximize->extra->button.push(dialog->bmaximize); |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONDOWN:
|
case MM_LBUTTONDOWN: |
| if(inrect(0,0,p->vx,p->vy,x,y)&&(!inrect(1,1,p->vx-2,p->vy-2,x,y)))
|
if(inrect(0,0,p->vx,p->vy,x,y)&&(!inrect(1,1,p->vx-2,p->vy-2,x,y))) |
| {
|
{ |
| if((statemd&MD_CTRL)!=MD_CTRL)
|
if((statemd&MD_CTRL)!=MD_CTRL) |
| {
|
{ |
| if(inrect(0,0,p->vx,1,x,y))stat=0;else stat=-1;
|
if(inrect(0,0,p->vx,1,x,y))stat=0;else stat=-1; |
| if(((dialog->style&ST_DI_SIZEABLE)==ST_DI_SIZEABLE)&&(dialog->state!=SV_MAXIMIZED))
|
if(((dialog->style&ST_DI_SIZEABLE)==ST_DI_SIZEABLE)&&(dialog->state!=SV_MAXIMIZED)) |
| {
|
{ |
| if((inrect(1,0,1,1,x,y)||(inrect(p->vx-2,0,1,1,x,y)&&(p->vx>4)))&&(dialog->state==SV_NORMAL))stat=1;
|
if((((inrect(1,0,1,1,x,y)||(inrect(p->vx-2,0,1,1,x,y)&&(p->vx>4)))&& |
| else if(inrect(p->vx-2,p->vy-2,2,2,x,y)&&(dialog->state==SV_NORMAL))stat=4;
|
(dialog->state==SV_NORMAL)))&&!(p->style&ST_AU_FIXED))stat=1; |
| else if(inrect(2,p->vy-1,p->vx-4,1,x,y)&&(p->vy>1)&&(dialog->state==SV_NORMAL))stat=5;
|
else if(inrect(p->vx-2,p->vy-2,2,2,x,y)&&(dialog->state==SV_NORMAL)&& |
| else if(inrect(0,p->vy-2,2,2,x,y)&&(dialog->state==SV_NORMAL))stat=6;
|
!(p->style&ST_AR_FIXED)&&!(p->style&ST_AD_FIXED))stat=4; |
| else if(inrect(p->vx-1,0,1,2,x,y)&&(dialog->state==SV_NORMAL))stat=2;
|
else if(inrect(2,p->vy-1,p->vx-4,1,x,y)&&(p->vy>1)&&(dialog->state==SV_NORMAL)&& |
| else if(inrect(0,0,1,2,x,y)&&(dialog->state==SV_NORMAL))stat=8;
|
!(p->style&ST_AD_FIXED))stat=5; |
| else if(inrect(p->vx-1,0,1,p->vy,x,y))stat=3;
|
else if(inrect(0,p->vy-2,2,2,x,y)&&(dialog->state==SV_NORMAL)&& |
| else if(inrect(0,0,1,p->vy,x,y))stat=7;
|
!(p->style&ST_AL_FIXED)&&!(p->style&ST_AD_FIXED))stat=6; |
| }
|
else if(inrect(p->vx-1,0,1,2,x,y)&&(dialog->state==SV_NORMAL)&& |
| if(stat==-1){stat=0;break;}
|
!(p->style&ST_AU_FIXED)&&!(p->style&ST_AR_FIXED))stat=2; |
| }
|
else if(inrect(0,0,1,2,x,y)&&(dialog->state==SV_NORMAL)&& |
| else stat=0;
|
!(p->style&ST_AU_FIXED)&&!(p->style&ST_AL_FIXED))stat=8; |
| |
else if(inrect(p->vx-1,0,1,p->vy,x,y)&&!(p->style&ST_AR_FIXED))stat=3; |
| |
else if(inrect(0,0,1,p->vy,x,y)&&!(p->style&ST_AL_FIXED))stat=7; |
| |
} |
| |
if(stat==-1){stat=0;break;} |
| |
} |
| |
else stat=0; |
| capturewin=p; |
capturewin=p; |
| usekeys=false;
|
usekeys=false; |
| mx=p->x-vx;
|
mx=p->x-vx; |
| my=p->y-vy;
|
my=p->y-vy; |
| nx=p->x+p->vx;
|
nx=p->x+p->vx; |
| ny=p->y+p->vy;
|
ny=p->y+p->vy; |
| }
|
} |
| break;
|
break; |
| case MM_LBUTTONUP:
|
case MM_LBUTTONUP: |
| if(capturewin!=p)break;
|
if(capturewin!=p)break; |
| sendmousemessage(vx,vy,MM_MOUSEMOVE);
|
sendmousemessage(vx,vy,MM_MOUSEMOVE); |
| stat=0;
|
stat=0; |
| capturewin=NULL; |
capturewin=NULL; |
| usekeys=true;
|
usekeys=true; |
| }
|
} |
| }
|
} |
| if((state==MM_LBUTTONDOWN)&&setfocus)set_focus(findchild(p));
|
if(((state==MM_LBUTTONDOWN)||(state==MM_RBUTTONDOWN))&&setfocus)set_focus(findchild(p)); |
| if(chang)redraw(); |
if(chang)redraw(); |
| if(sendnext)sendmousemessage(vx,vy,state); |
if(sendnext)sendmousemessage(vx,vy,state); |
| return result;
|
return result; |
| }
|
} |