home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 48
/
Amiga_Dream_48.iso
/
Atari
/
c
/
libs
/
xaes_new.lzh
/
CONTROL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-12-27
|
24KB
|
668 lines
/********************************************************************
* 1.10*
* XAES: Control station *
* Code by Ken Hollis, GNU C Extensions by Sascha Blank *
* *
* Copyright (c) 1994, Bitgate Software. All Rights Reserved. *
* *
* This code was originally taken from the original version of *
* XAES (WinLIB PRO) and was greatly optimized and modified to *
* work with XAES's custom windows and window routines. This is *
* not the prettiest piece of code, but it works. Code *
* beautification comes in a later release... Maybe I can 'borrow'*
* some of Christian Grunenberg's routines. *
* *
********************************************************************/
#include <stdio.h>
#include <stddef.h>
#include <time.h>
#include "xaes.h"
#include "nkcc.h"
#ifdef __TURBOC__
#pragma warn -pia
#pragma warn -sus
#endif
/*
* This routine returns the WINDOW structure of the window if the
* given handle is indeed an XAES window.
*/
GLOBAL WINDOW *WFindHandle(int handle)
{
WINDOW *ptr = WindowChain;
while (ptr)
if (ptr->handle == handle)
return ptr;
else
ptr = ptr->next;
return (WINDOW *) FALSE;
}
/*
* This routine returns the window state of a window.
*/
GLOBAL int WFindState(int window)
{
WINDOW *ptr = WindowChain;
while(ptr)
if (ptr->handle == window)
return(ptr->state);
else
ptr = ptr->next;
return 0;
}
/*
* This is various cruft. The heart-and-soul of XAES's internal
* window and dialog handler. I could optimize it, but then, why
* should I? It's fast enough as it is. :-)
*/
GLOBAL int WDoDial(void)
{
EVENT event;
Life = TRUE;
Return = 0;
event.ev_mbclicks = 0x0102;
event.ev_bmask = 3;
event.ev_mbstate = 0;
while (Life) {
WINDOW *win;
int message, hand;
GRECT old_rect;
BOOL owner;
old_rect.g_x = old_rect.g_y = old_rect.g_w = old_rect.g_h = 0;
event.ev_mflags = MU_MESAG | MU_TIMER | MU_BUTTON | MU_KEYBD;
if ((win!=NULL) && (win->timer.status != T_NOTEXIST)) {
long tcount;
tcount = win->timer.clock - (clock() * 1000 / CLK_TCK);
if (tcount > 0) {
event.ev_mtlocount = (int) (tcount & 0xffffL);
event.ev_mthicount = (int) (tcount >> 16);
} else
event.ev_mtlocount = event.ev_mthicount = 0;
} else
event.ev_mtlocount = event.ev_mthicount = 0;
message = EvntMulti(&event);
hand = wind_find(event.ev_mmox, event.ev_mmoy);
owner = WFindOwner(hand);
if (owner) {
win = WFindHandle(hand);
WMoveWindow(win, -1, -1, -1, -1);
}
if ((win->handle != 0) && (message & MU_BUTTON))
if ((win->state & W_ICONIFIED) && (win->iconify))
if (objc_find(win->iconify, 0, 99, event.ev_mmox, event.ev_mmoy) == win->icon_num) {
if (event.ev_mbreturn == 1)
WDoIconHandle(win);
if (event.ev_mbreturn == 2)
WWindSet(win, WF_UNICONIFIED, 1);
}
if (win)
if ((event.ev_mmobutton == 2) && ((win->style & W_CUSTOMWINDOW) || (win->handle == 0))) {
WDoRightHandle();
goto exit_kbd;
}
else {
if (message & MU_MESAG)
switch (event.ev_mmgpbuf[0]) {
case WM_TOPPED:
if ((win = WFindHandle(event.ev_mmgpbuf[3])) && (win->state & W_OPEN)) {
if (win->state & W_BEVENT) {
int dummy;
long applrecord[] = {
1, 0x010000L,
0, 16,
1, 0x100001L
};
GRECT rect;
graf_mkstate(&event.ev_mmox, &event.ev_mmoy, &event.ev_mmobutton, &event.ev_mmokstate);
if (!event.ev_mmobutton) {
WMsgWindow(win, event.ev_mmgpbuf);
break;
}
if (event.ev_mmobutton & 1) {
if (AES_VERSION > 0x0100)
appl_tplay(applrecord, 3, 100);
WMoveWindow(win, -1, -1, -1, -1);
if (win) {
WWindGet(win, WF_WORKXYWH, &rect.g_x, &rect.g_y, &rect.g_w, &rect.g_h);
if (rc_inside(event.ev_mmox, event.ev_mmoy, &rect) && (!win->tree) || (!win->iconify))
goto button;
wind_get(win->handle, WF_WORKXYWH, &rect.g_x, &rect.g_y, &rect.g_w, &rect.g_h);
if (rc_inside(event.ev_mmox, event.ev_mmoy, &rect) && (
((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify : win->tree) && (dummy = objc_find(((win->state & W_ICONIFIED) ? win->iconify : win->tree), 0, 99, event.ev_mmox, event.ev_mmoy)) != -1 &&
(((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_flags & (SELECTABLE | EXIT) : win->tree[dummy].ob_flags & (SELECTABLE | EXIT)))))
{
button: message |= MU_BUTTON;
event.ev_mbreturn = 1;
}
if (win->style & W_CUSTOMWINDOW) {
dummy = objc_find(win->wind, 0, 99, event.ev_mmox, event.ev_mmoy);
if (win->wind && dummy != -1 && dummy != 25 && ((event.ev_mbreturn == 1) || (event.ev_mmobutton)))
WForm_window(win, dummy, event.ev_mbreturn);
}
dummy = objc_find((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify : win->tree), 0, 99, event.ev_mmox, event.ev_mmoy);
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_flags & TOUCHEXIT : win->tree[dummy].ob_flags & TOUCHEXIT)) {
int type;
graf_mkstate(&event.ev_mmox, &event.ev_mmoy, &type, &type);
dummy = objc_find((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify : win->tree), 0, 99, event.ev_mmox, event.ev_mmoy);
if (dummy!=-1) {
int d, button;
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_flags & SELECTABLE : win->tree[dummy].ob_flags & SELECTABLE))
Objc_Change(win, dummy, 0, (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_state | SELECTED : win->tree[dummy].ob_state | SELECTABLE), 1);
do {
switch((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_type >> 8 : win->tree[dummy].ob_type >> 8)) {
case SLIDERLEFT:
case SLIDERRIGHT:
case SLIDERUP:
case SLIDERDOWN:
case SLIDERTRACK:
WHandleSlider(win, dummy);
break;
case SLIDERSLIDE:
if (xaes.config1 & X_MOUSESLIDERS) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_spec.userblk->ub_parm : win->tree[dummy].ob_spec.userblk->ub_parm));
if (ex->te_slider.slide_type == SLIDER_HOR)
WGrafMouse(LRSLIDE_MOUSE);
if (ex->te_slider.slide_type == SLIDER_VER)
WGrafMouse(UDSLIDE_MOUSE);
}
WHandleSlider(win, dummy);
break;
}
graf_mkstate(&d, &d, &button, &d);
/* WCallDlgDispatcher(win, dummy); */
} while (button);
WGrafMouse(ARROW);
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_flags & SELECTABLE : win->tree[dummy].ob_flags & SELECTABLE))
Objc_Change(win, dummy, 0, (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[dummy].ob_state & ~SELECTED : win->tree[dummy].ob_state & ~SELECTED), 1);
}
}
}
}
break;
}
WMsgWindow(win, event.ev_mmgpbuf);
}
break;
case WM_CLOSED:
if (win = WFindHandle(event.ev_mmgpbuf[3]))
WCloseWindow(win, WC_OBJECTABLE, K_ASK);
break;
case WM_REDRAW: /* Handle window messages */
case WM_NEWTOP:
case WM_ARROWED:
case WM_VSLID:
case WM_SIZED:
case WM_FULLED:
case WM_HSLID:
case WM_MOVED:
case WM_CREATED:
if (win = WFindHandle(event.ev_mmgpbuf[3]))
WMsgWindow(win, event.ev_mmgpbuf);
break;
case AP_DRAGDROP:
if (win = WFindHandle(event.ev_mmgpbuf[3]))
WMsgWindow(win, event.ev_mmgpbuf);
else
WCallEtcDispatcher(event.ev_mmgpbuf);
break;
case AC_OPEN: /* Program/environmental messages */
case AC_CLOSE:
switch(event.ev_mmgpbuf[0]) {
case AC_CLOSE: if (WCallEtcDispatcher(event.ev_mmgpbuf))
WKillAllWindows(K_ACC);
break;
case AC_OPEN: WCallEtcDispatcher(event.ev_mmgpbuf);
break;
}
break;
case MN_SELECTED: /* Menu messages */
if (WCallEtcDispatcher(event.ev_mmgpbuf))
menu_tnormal(wl_menubar, event.ev_mmgpbuf[3], 1);
break;
}
if ((owner) || (message & MU_TIMER)) {
if (win)
if (win->timer.status != T_NOTEXIST) {
WStartTimer(win);
WCallTmrDispatcher(win);
} else {
int mx, my, co, tophandle;
graf_mkstate(&mx,&my,&co,&co);
if ((xaes.config1 & X_AUTOCHANGE) && (!(win->state & W_ICONIFIED)) && (win->style & W_CUSTOMWINDOW)) {
co = objc_find(win->wind, 0, 99, mx, my);
WChangeMouseElement(win, co);
} else
if (xaes.config1 & X_AUTOCHANGE) {
int ts;
co = wind_find(mx, my);
ts = WFindState(co);
if (((ts & W_ICONIFIED) && (!(ts & W_DESKTOP))) ||
((!(win->style & W_CUSTOMWINDOW)) && (!(ts & W_DESKTOP)) &&
(cur_mouse_form != TEXT_CRSR)))
WGrafMouse(ARROW);
else if (co == -1)
WChangeMouseElement(win, co);
if (ts & W_DESKTOP)
WGrafMouse(NOWINDOW_MOUSE);
}
if (win) {
WWindGet(win, WF_TOP, &tophandle);
if ((win->state & W_OPEN) && (win->handle == tophandle) && (win->handle != 0) && (win->edobject) && !rc_inside(mx,my,&old_rect)) {
co = objc_find((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify : win->tree), 0, 99, mx, my);
if (co != -1) {
if (win->style & W_CUSTOMWINDOW)
if ((win->wind_type == WC_WINDOW) || (win->wind_type == WC_SWINDOW)) {
old_rect.g_x = win->size.g_x + win->wind[25].ob_x + ((co) ? win->tree[co].ob_x - 1 : 0);
old_rect.g_y = win->size.g_y + win->wind[25].ob_y + ((co) ? win->tree[co].ob_y - 1 : 0);
}
else
old_rect.g_x = (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify->ob_x : win->tree->ob_x) + ((co) ? ((win->state & W_ICONIFIED) ? win->iconify[co].ob_x - 1 : win->tree[co].ob_x - 1) : 0);
old_rect.g_y = (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify->ob_y : win->tree->ob_y) + ((co) ? ((win->state & W_ICONIFIED) ? win->iconify[co].ob_y - 1 : win->tree[co].ob_y - 1) : 0);
old_rect.g_w = (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[co].ob_width + 1 : win->tree[co].ob_width + 1);
old_rect.g_h = (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[co].ob_height + 1 : win->tree[co].ob_height + 1);
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[co].ob_flags & EDITABLE : win->tree[co].ob_flags & EDITABLE))
WGrafMouse((helpmode) ? IBARHELP_MOUSE : TEXT_CRSR);
else
WGrafMouse((helpmode) ? HELP_MOUSE : ARROW);
}
}
}
}
if (message & MU_KEYBD) {
int n_key, nxtobj, nxtchr;
win = WindowChain;
if (win)
if (!(win->state & W_MINIMIZED)) {
n_key = nkc_tconv((event.ev_mkreturn & 0xff) | (((long) event.ev_mkreturn & 0xff00) << 8) | ((long) event.ev_mmokstate << 24));
WMoveWindow(win, -1, -1, -1, -1);
if ((n_key & NKF_ALT) && (n_key & NKF_CTRL)) {
switch(n_key & 0xFF) {
case NK_UP:
case '8': if ((((n_key & 0xFF) == '8') && (n_key & NKF_NUM)) || ((n_key & 0xFF) == NK_UP)) {
int m[8];
m[0] = WM_ARROWED;
m[4] = ((n_key & NKF_RSH) || (n_key & NKF_LSH)) ? WA_UPPAGE : WA_UPLINE;
WMsgWindow(win, m);
}
goto exit_kbd;
case NK_DOWN:
case '2': if ((((n_key & 0xFF) == '2') && (n_key & NKF_NUM)) || ((n_key & 0xFF) == NK_DOWN)) {
int m[8];
m[0] = WM_ARROWED;
m[4] = ((n_key & NKF_RSH) || (n_key & NKF_LSH)) ? WA_DNPAGE : WA_DNLINE;
WMsgWindow(win, m);
}
goto exit_kbd;
case '*': if ((n_key & NKF_NUM) && (win->handle!=0) && (win->kind & FULLER)) {
int m[8];
m[0] = WM_FULLED;
m[3] = win->handle;
WMsgWindow(win, m);
}
goto exit_kbd;
case NK_F5: /*Change3DType(L_MULTITOS);*/
WRedrawAllWindows();
goto exit_kbd;
case NK_F6: /*Change3DType(L_CUSTOM);*/
WRedrawAllWindows();
goto exit_kbd;
case NK_F7: if (num_colors>4) {
/* Change3DType(L_MOTIF); */
WRedrawAllWindows();
} /*else
WFormCustAlert(3,
" Motif look ",
"Sorry, the Motif 3D style look",
"is only available in a color",
"mode with more than 4 colors.",
"Please change mode or resolut-",
"ions to see the mode.",
" ", "Okay", " "); */
goto exit_kbd;
case NK_F8: /*Change3DType(L_GENEVA);*/
WRedrawAllWindows();
goto exit_kbd;
case NK_F9: /*Change3DType(L_WINLIB);*/
WRedrawAllWindows();
goto exit_kbd;
case NK_F10: /*Change3DType(L_STANDARD);*/
WRedrawAllWindows();
goto exit_kbd;
case ' ': WRedrawAllWindows();
goto exit_kbd;
case 'Q':
case 'q': WDie(FORCE_EXIT);
goto exit_kbd;
case NK_ESC: WCloseWindow(win, WC_OBJECTABLE, K_ASK);
goto exit_kbd;
case NK_TAB: WTopWindow(NULL);
goto exit_kbd;
case NK_BS: WKillAllWindows(K_ASK);
goto exit_kbd;
/* case NK_HELP: CallInternalHelp();
goto exit_kbd; */
case NK_ENTER: {
int x, y, w, h;
if (win->handle != 0) {
WWindGet(win, WF_WORKXYWH, &x, &y, &w, &h);
WRedrawWindow(win, x, y, w, h);
}
}
goto exit_kbd;
}
}
if (win->state & W_OPEN) {
nxtobj = 0;
if (WCallWKeyDispatcher(win, n_key))
if (WCallKeyDispatcher(n_key))
if (win->tree)
if (WForm_keybd(win, event.ev_mkreturn, event.ev_mmokstate, &nxtobj, &nxtchr)) {
if ((nxtchr) && (win->edobject))
WObjc_Edit(win, ED_CHAR, event.ev_mkreturn, event.ev_mmokstate);
if ((nxtobj != win->edobject) && (win->edobject != 0) && (nxtobj != 0)) {
register char *t;
register int pos;
win->edobject = nxtobj;
t = win->tree[win->edobject].ob_spec.tedinfo->te_ptext;
t += pos = find_position(win->tree, win->edobject, event.ev_mmox);
edit_pos(win, pos);
win->edobject = nxtobj;
}
} else {
if (!(win->tree[nxtobj].ob_flags & RBUTTON)) {
if (nxtobj != 0)
Objc_Change(win->tree, nxtobj, 0, win->tree[nxtobj].ob_state ^ SELECTED, 1);
} else {
int act = nxtobj, lst, new;
OBJECT *obptr = win->tree + nxtobj;
if (!(win->tree[nxtobj].ob_state & SELECTED))
Objc_Change(win->tree, nxtobj, 0, win->tree[nxtobj].ob_state | SELECTED, 1);
for(;;) {
lst = act;
new = obptr->ob_next;
for(;;) {
act = new;
obptr = win->tree + act;
if (obptr->ob_tail == lst) {
new = obptr->ob_head;
lst = act;
} else {
if (act == nxtobj)
goto rb_exit;
if ((obptr->ob_state & SELECTED) && (obptr->ob_flags & RBUTTON)) {
Objc_Change(win->tree, act, 0, obptr->ob_state ^ SELECTED, 1);
goto rb_exit;
} else break;
}
}
}
}
if (!(win->tree[nxtobj].ob_flags & RBUTTON || win->tree[nxtobj].ob_type & 0x8000)) {
int st = win->tree[nxtobj].ob_state;
st &= ~SELECTED;
Objc_Change(win->tree, nxtobj, 0, st, 1);
}
rb_exit: WCallDlgDispatcher(win, nxtobj);
}
} else
WCallKeyDispatcher(n_key);
}
}
exit_kbd:
if (message & MU_BUTTON) {
int nxtobj, tophandle;
if (wind_find(event.ev_mmox, event.ev_mmoy) == 0) {
int endx, endy;
WGraf_Rubberbox(event.ev_mmox, event.ev_mmoy, &endx, &endy);
}
if (win)
if (!(win->state & W_MINIMIZED)) {
if (!(win = WFindHandle(wind_find(event.ev_mmox, event.ev_mmoy))))
win = WindowChain;
if (win->style & W_CUSTOMWINDOW)
nxtobj = objc_find(win->wind, 0, 99, event.ev_mmox, event.ev_mmoy);
WMoveWindow(win, -1, -1, -1, -1);
if (win->wind && win->handle != 0 && nxtobj != -1 && nxtobj != 25 && ((event.ev_mbreturn == 1) || (event.ev_mmobutton)) && (win->style & W_CUSTOMWINDOW)) {
EXTINFO *ex = (EXTINFO *)(win->wind[nxtobj].ob_spec.userblk->ub_parm);
if (ex->te_routines.mouse_down)
ex->te_routines.mouse_down(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, nxtobj);
WForm_window(win, nxtobj, event.ev_mbreturn);
if (ex->te_routines.mouse_up)
ex->te_routines.mouse_up(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, nxtobj);
} else if (win->handle != 0) {
WWindGet(win, WF_TOP, &tophandle);
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify : win->tree) && (nxtobj = objc_find(((win->state & W_ICONIFIED) ? win->iconify : win->tree), 0, 99, event.ev_mmox, event.ev_mmoy)) != -1 && event.ev_mbreturn==1)
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_flags & (SELECTABLE | EDITABLE) : win->tree[nxtobj].ob_flags & (SELECTABLE | EDITABLE))) {
int oldobj;
if (((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_type & 0xFF : win->tree[nxtobj].ob_type & 0xFF)) == G_USERDEF) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_spec.userblk->ub_parm : win->tree[nxtobj].ob_spec.userblk->ub_parm));
if (ex->te_routines.mouse_down)
ex->te_routines.mouse_down(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, nxtobj);
}
oldobj = nxtobj;
WForm_button(win, nxtobj, event.ev_mbreturn, &nxtobj);
if (((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[oldobj].ob_type & 0xFF : win->tree[oldobj].ob_type & 0xFF)) == G_USERDEF) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[oldobj].ob_spec.userblk->ub_parm : win->tree[oldobj].ob_spec.userblk->ub_parm));
if (ex->te_routines.mouse_up)
ex->te_routines.mouse_up(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, oldobj);
}
if ((win->tree[nxtobj].ob_flags & EDITABLE) && nxtobj != win->edobject)
if (win->handle == tophandle) {
register char *t;
register int pos;
WObjc_Edit(win, ED_END, 0, 0);
win->edobject = nxtobj;
t = win->tree[win->edobject].ob_spec.tedinfo->te_ptext;
t += pos = find_position(win->tree, win->edobject, event.ev_mmox);
edit_pos(win, pos);
win->edobject = nxtobj;
} else
win->edobject = nxtobj;
if (win->tree[nxtobj].ob_flags & EDITABLE)
if (win->handle == tophandle) {
register char *t = win->tree[win->edobject].ob_spec.tedinfo->te_ptext;
register int pos;
t += pos = find_position(win->tree, win->edobject, event.ev_mmox);
edit_pos(win, pos);
win->edobject = nxtobj;
} else win->edobject = nxtobj;
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_flags & SELECTABLE : win->tree[nxtobj].ob_flags & SELECTABLE)
&& !((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_flags & RBUTTON : win->tree[nxtobj].ob_flags & RBUTTON) ||
(((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_type & 0x8000 : win->tree[nxtobj].ob_type & 0x8000))) {
int st = (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_state : win->tree[nxtobj].ob_state);
st &= ~SELECTED;
Objc_Change(win, nxtobj, 0, st, 1);
}
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_flags & EXIT : win->tree[nxtobj].ob_flags & EXIT))
WCallDlgDispatcher(win, nxtobj);
} else
if ((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_flags & TOUCHEXIT : win->tree[nxtobj].ob_flags & TOUCHEXIT)) {
int dummy, button;
if (((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_type & 0xFF : win->tree[nxtobj].ob_type & 0xFF)) == G_USERDEF) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_spec.userblk->ub_parm : win->tree[nxtobj].ob_spec.userblk->ub_parm));
if (ex->te_routines.mouse_down)
ex->te_routines.mouse_down(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, nxtobj);
}
Objc_Change(win, nxtobj, 0, (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_state | SELECTED : win->tree[nxtobj].ob_state | SELECTED), 1);
do {
switch((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_type >> 8 : win->tree[nxtobj].ob_type >> 8)) {
case SLIDERLEFT:
case SLIDERRIGHT:
case SLIDERUP:
case SLIDERDOWN:
case SLIDERTRACK:
WHandleSlider(win, nxtobj);
break;
case SLIDERSLIDE:
if (xaes.config1 & X_MOUSESLIDERS) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_spec.userblk->ub_parm : win->tree[nxtobj].ob_spec.userblk->ub_parm));
if (ex->te_slider.slide_type == SLIDER_HOR)
WGrafMouse(LRSLIDE_MOUSE);
if (ex->te_slider.slide_type == SLIDER_VER)
WGrafMouse(UDSLIDE_MOUSE);
}
WHandleSlider(win, nxtobj);
break;
}
graf_mkstate(&dummy, &dummy, &button, &dummy);
WCallDlgDispatcher(win, nxtobj);
} while (button == 1);
WGrafMouse(ARROW);
Objc_Change(win, nxtobj, 0, (((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_state & ~SELECTED : win->tree[nxtobj].ob_state & ~SELECTED), 1);
if (((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_type & 0xFF : win->tree[nxtobj].ob_type & 0xFF)) == G_USERDEF) {
EXTINFO *ex = (EXTINFO *)((((win->state & W_ICONIFIED) && (win->iconify)) ? win->iconify[nxtobj].ob_spec.userblk->ub_parm : win->tree[nxtobj].ob_spec.userblk->ub_parm));
if (ex->te_routines.mouse_up)
ex->te_routines.mouse_up(event.ev_mmox, event.ev_mmoy, event.ev_mbreturn, event.ev_mmokstate, nxtobj);
}
}
else
WCallBtnDispatcher(win, event.ev_mmox, event.ev_mmoy, event.ev_mmobutton, event.ev_mmokstate, event.ev_mbreturn);
}
}
}
}
}
}
return Return;
}