static EVENT doget( bool update ) /*******************************/ { register EVENT ev; static short ReturnIdle = 1; SAREA screen; for( ;; ) { ev = forcedevent(); if( ev > EV_NO_EVENT ) break; ev = _uievent(); if( ev > EV_NO_EVENT ) break; if( ReturnIdle ) { --ReturnIdle; return( EV_IDLE ); } else { if( update ) uirefresh(); if( UIData->busy_wait ) { return( EV_SINK ); } } _armkeyboard(); Receive( UILocalProxy, 0, 0 ); /* wait for some input */ } ReturnIdle = 1; switch( ev ) { case EV_REDRAW_SCREEN: screen.row = 0; screen.col = 0; screen.height= UIData->height; screen.width= UIData->width; uidirty( screen ); UserForcedTermRefresh = true; physupdate( &screen ); break; case EV_MOUSE_HOLD: case EV_MOUSE_HOLD_R: case EV_MOUSE_HOLD_M: case EV_MOUSE_REPEAT: case EV_MOUSE_REPEAT_R: case EV_MOUSE_REPEAT_M: if( update ) uirefresh(); break; } return( ev ); }
EVENT UIAPI uieventsource( int update ) { EVENT ev; static int ReturnIdle = 1; unsigned long start; start = uiclock(); for( ; ; ) { ev = forcedevent(); if( ev > EV_NO_EVENT ) break; ev = getanyevent(); if( ev > EV_NO_EVENT ) break; if( ReturnIdle ) { ReturnIdle--; return( EV_IDLE ); } else { if( update ) uirefresh(); if( uiclock() - start >= UIData->tick_delay ) { return( EV_CLOCK_TICK ); } else if( UIData->busy_wait ) { return( EV_SINK ); } } waitforevent(); } ReturnIdle = 1; return( ev ); }
EVENT UIAPI uieventsource( bool update ) { EVENT ev; static int ReturnIdle = 1; unsigned long start; EVENT ( *proc )(); start = uiclock(); for( ; ; ) { ev = forcedevent(); if( ev > EV_NO_EVENT ) break; if( Callback && TimerPeriodMs ) { proc = RdosWaitTimeout( WaitHandle, TimerPeriodMs ); if( proc == 0) { (*Callback)(); } else { ev = (*proc)(); if( ev > EV_NO_EVENT ) { break; } } } else { proc = RdosWaitTimeout( WaitHandle, 25 ); if( proc != 0) { ev = (*proc)(); if( ev > EV_NO_EVENT ) { break; } } if( ReturnIdle ) { ReturnIdle--; return( EV_IDLE ); } else { if( update ) uirefresh(); if( uiclock() - start >= UIData->tick_delay ) { return( EV_CLOCK_TICK ); } else if( UIData->busy_wait ) { return( EV_SINK ); } } proc = RdosWaitTimeout( WaitHandle, 250 ); if( proc != 0) { ev = (*proc)(); if( ev > EV_NO_EVENT ) { break; } } } } ReturnIdle = 1; return( ev ); }
void uirestorebackground( void ) /******************************/ { ATTR hold; hold = UIData->attrs[ ATTR_NORMAL ]; UIData->attrs[ ATTR_NORMAL ] = 0x07; uidirty( UIData->blank.area ); uirefresh(); UIData->attrs[ ATTR_NORMAL ] = hold; }
void AsyncNotify( void ) { if( AsyncWnd ) { dlg.cond = PollAsync(); if( !( dlg.cond & COND_RUNNING ) ) { GUICloseDialog( AsyncWnd ); AsyncWnd = 0; #ifdef __RDOS__ uirefresh(); #endif } } }
/* * scrollHelp - refresh the displayed help after a scrolling operation */ static int scrollHelp( SAREA *use, int lastline, bool changecurr ) { int useline; int scroll; int start; int end; scroll = currLine - lastline; vscroll_fields( &helpTab, *use, scroll ); vvscroll( &helpScreen, *use, scroll ); currentAttr = AT( ATTR_NORMAL ); if( abs(scroll) >= use->height ) { start = currLine; end = start + use->height; } else if( scroll < 0 ) { start = currLine; end = start - scroll; } else { start = currLine + use->height - scroll; end = start + scroll; } seek_line( start ); for( ;; ++start ) { save_line( start, HelpTell( helpFileHdl ) ); if( !mygetline() || strncmp( helpInBuf, "::::", 4 ) == 0 ) { maxLine = start; break; } useline = start - currLine; if( useline >= use->height || start >= end ) { break; } /* if it is the first time in, then the old currfield is right */ processLine( helpInBuf, helpOutBuf, useline + use->row, changecurr ); putline( helpOutBuf, useline + use->row ); } end = currLine + use->height; if( maxLine != 0 && end > maxLine ) { end = maxLine; } display_fields(); hotSpots[1].startcol = ( helpScreen.area.width - hotSpots[1].length ) / 2; addSearchButton( helpSearchHdl != NULL ); uiposnhotspots( &helpScreen, hotSpotFields ); uiprinthotspots( &helpScreen, hotSpotFields ); set_slider( currLine ); uirefresh(); return( currLine ); }
EVENT UIAPI uieventsource( bool update ) /**************************************/ { register EVENT ev; static int ReturnIdle = 1; unsigned long start; start = uiclock(); for( ; ; ) { ThreadSwitch(); if( EnterForever ) foreverloop(); ev = forcedevent(); if( ev > EV_NO_EVENT ) break; /* There is no mouse support in NetWare. */ //ev = mouseevent(); //if( ev > EV_NO_EVENT ) // break; ev = keyboardevent(); if( ev > EV_NO_EVENT ) { //uihidemouse(); break; } if( ReturnIdle ) { ReturnIdle--; return( EV_IDLE ); } else { if( update ) uirefresh(); if( uiclock() - start >= UIData->tick_delay ) { return( EV_CLOCK_TICK ); } else if( UIData->busy_wait ) { return( EV_SINK ); } } waitforevent(); } ReturnIdle = 1; return( ev ); }
static EVENT doget( bool update ) /*******************************/ { register EVENT ev; static short ReturnIdle = 1; for( ;; ) { ev = forcedevent(); if( ev > EV_NO_EVENT ) break; ev = _uievent(); if( ev > EV_NO_EVENT ) break; if( ReturnIdle ) { --ReturnIdle; return( EV_IDLE ); } else { if( update ) uirefresh(); if( UIData->busy_wait ) { return( EV_SINK ); } } kb_wait( 60, 0 ); } ReturnIdle = 1; if( ev==EV_REDRAW_SCREEN ){ extern bool UserForcedTermRefresh; SAREA screen={ 0, 0, 0, 0 }; screen.height= UIData->height; screen.width= UIData->width; uidirty( screen ); UserForcedTermRefresh= TRUE; physupdate( &screen ); } return( ev ); }
void uidrawgadget( p_gadget g ) { drawgadget( g ); uirefresh(); }
void GUIRefresh( void ) { uirefresh(); }
ui_event UIAPI uieventsource( bool update ) { static int ReturnIdle = 1; ui_event ui_ev; MOUSETIME start; event_proc proc; start = uiclock(); for( ;; ) { if( HasEscape ) { HasEscape = false; ui_ev = EV_ESCAPE; break; } ui_ev = forcedevent(); if( ui_ev > EV_NO_EVENT ) break; if( Callback != NULL && TimerPeriodMs ) { proc = (event_proc)RdosWaitTimeout( WaitHandle, TimerPeriodMs ); if( proc == NULL ) { (*Callback)(); } else { ui_ev = (*proc)(); if( ui_ev > EV_NO_EVENT ) { break; } } } else { proc = (event_proc)RdosWaitTimeout( WaitHandle, 25 ); if( proc != NULL ) { ui_ev = (*proc)(); if( ui_ev > EV_NO_EVENT ) { break; } } if( ReturnIdle ) { ReturnIdle--; return( EV_IDLE ); } else { if( update ) uirefresh(); if( uiclock() - start >= UIData->tick_delay ) { return( EV_CLOCK_TICK ); } else if( UIData->busy_wait ) { return( EV_SINK ); } } proc = (event_proc)RdosWaitTimeout( WaitHandle, 250 ); if( proc != NULL ) { ui_ev = (*proc)(); if( ui_ev > EV_NO_EVENT ) { break; } } } } ReturnIdle = 1; return( ui_ev ); }
int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { EVENT ev; SAREA area; char buff[80]; an_event_string *ptr; ORD evrow = TOP_ROW; BOOL fixup = FALSE; int mrow, mcol; int diff; hInstance = hInstance; hPrevInstance = hPrevInstance; lpCmdLine = lpCmdLine; nShowCmd = nShowCmd; if( InitSwapper() ) return( 0 ); // Yes - well, I would make the swapper // return 1 on error, unlike everything // else, wouldn't I? if( !uistart() ) return( 0 ); ToCharacter(); initmouse( 2 ); uimenus( barmenu, pulldownuimenus, EV_FUNC( 1 ) ); UIData->mouse_clk_delay = uiclockdelay( 250 ); UIData->tick_delay = uiclockdelay( 3000 ); mainwin.area.height = UIData->height - 7; area.row = 0; area.col = 0; area.width = UIData->width; area.height = UIData->height; uidirty( area ); uirefresh(); if( uivopen( &mainwin ) ) { uirefresh(); sprintf( buff, "screen height : %d\0", UIData->height ); uivtextput( &mainwin, TOP_ROW - 1, 2, UIData->attrs[ ATTR_NORMAL ], buff, 30 ); for( ; ; ) { uipushlist( evlist ); ev = uivgetevent( NULL ); uipoplist(); if( ev == EV_QUIT ) break; if( ev == EV_ALT_R ) break; if( ev == EV_MOUSE_PRESS_R ) { uimousepos( NULL, &mrow, &mcol ); mrow++; mcol++; uipushlist( evlist ); ev = uicreatepopup( mrow, mcol, &filemenu, FALSE, TRUE, NULL ); uipoplist(); } switch ( ev ) { case EV_SAMPLE_DIALOG: sample_dialog(); break; case EV_OPEN: open(); break; case EV_FUNC(1): area.width = 10; area.height = 10; area.row = 1; area.col = 1; uivattribute( &mainwin, area, (ATTR) 1 ); break; case EV_CURSOR_RIGHT: mainwin.col++; if( mainwin.col >= mainwin.area.width ) mainwin.col--; fixup = TRUE; break; case EV_CURSOR_DOWN: mainwin.row++; if( mainwin.row >= mainwin.area.height ) mainwin.row--; fixup = TRUE; break; case EV_CURSOR_LEFT: if( mainwin.col > 0 ) { mainwin.col--; fixup = TRUE; } break; case EV_CURSOR_UP: if( mainwin.row > 0 ) { mainwin.row--; fixup = TRUE; } break; } if( fixup ) { fixup = FALSE; uivsetcursor( &mainwin ); } if( ev != EV_NO_EVENT ) { for( ptr=evstrs; ; ++ptr ){ if( ptr->ev == EV_NO_EVENT ) { sprintf( buff, "event 0x%4.4x", ev ); break; } else if( ptr->ev == ev ) { strcpy( buff, ptr->str ); break; } } uivtextput( &mainwin, evrow, 2, UIData->attrs[ ATTR_NORMAL ], buff, 30 ); if( ++evrow >= mainwin.area.height ){ evrow = TOP_ROW; } uivtextput( &mainwin, evrow, 2, UIData->attrs[ ATTR_NORMAL ], "", 30 ); switch( ev ) { case EV_MOUSE_PRESS: BandOn = 1; uimousepos( NULL, &mrow, &mcol ); BandArea.row = mrow; BandArea.col = mcol; BandArea.width = 0; BandArea.height = 0; uibandinit( BandArea, UIData->attrs[ ATTR_ACTIVE ] ); break; case EV_MOUSE_DRAG: if( BandOn ) { uimousepos( NULL, &mrow, &mcol ); diff = mcol - BandArea.col; if( diff < 0 ) diff = 0; BandArea.width = diff; diff = mrow - BandArea.row; if( diff < 0 ) diff = 0; BandArea.height = diff; uibandmove( BandArea ); } break; case EV_MOUSE_RELEASE: if( BandOn ) uibandfini(); BandOn = 0; break; } } } uivclose( &mainwin ); } uinomenus(); uiswap(); uirestorebackground(); /* must be after uiswap */ finimouse(); ToGraphical(); uistop(); FiniSwapper(); return( 0 ); }
static void print_field( VSCREEN *vs, VFIELD *field, bool current ) { SAREA *area; ATTR attr; ATTR hotattr; char ctrlbuf[CTRL_BUF_LEN + 1]; unsigned ctrlbuf_len = 0; a_check *check = NULL; a_radio *radio = NULL; a_list *list; a_combo_box *combo; an_edit_control *edit; VSCREEN *c_vs; SAREA c_area; bool use_hottext; char hotkey; UIPICKGETTEXT *fn_get; if( field == NULL ) return; area = &field->area; use_hottext = false; memset( ctrlbuf, '\0', CTRL_BUF_LEN + 1 ); attr = UIData->attrs[( current ) ? ATTR_CURR_EDIT : ATTR_EDIT]; switch( field->typ ) { case FLD_HOT : if( current ) { field->u.hs->flags |= HOT_CURRENT ; } else { field->u.hs->flags &= (~HOT_CURRENT); } uidisplayhotspot( vs, field ); return; case FLD_TEXT : attr = UIData->attrs[ATTR_NORMAL]; uivtextput( vs, area->row, area->col, attr, field->u.str, area->width ); uirefresh(); return; case FLD_LABEL : attr = UIData->attrs[ATTR_NORMAL]; strcpy( ctrlbuf, field->u.str ); strcat( ctrlbuf, ":" ); ctrlbuf_len = strlen( ctrlbuf ); break; case FLD_FRAME : uidrawbox( vs, area, UIData->attrs[ATTR_NORMAL], field->u.str ); return; case FLD_EDIT : case FLD_INVISIBLE_EDIT : edit = field->u.edit; if( edit->buffer != NULL ) { ctrlbuf_len = edit->length; if( ctrlbuf_len > CTRL_BUF_LEN ) ctrlbuf_len = CTRL_BUF_LEN; if( field->typ == FLD_INVISIBLE_EDIT ) { memset( ctrlbuf, '*', ctrlbuf_len ); } else { strncpy( ctrlbuf, edit->buffer, ctrlbuf_len ); } } else { ctrlbuf_len = 0; } break; case FLD_COMBOBOX : combo = field->u.combo; edit = &combo->edit; list = &combo->list; if( !combo->perm ) { ctrlbuf[0] = UiGChar[UI_ARROW_DOWN]; uivtextput( vs, area->row, area->col + area->width + 1, UIData->attrs[ATTR_SCROLL_ICON], ctrlbuf, 1 ); ctrlbuf[0] = '\0'; } if( edit->buffer != NULL ) { ctrlbuf_len = edit->length; if( ctrlbuf_len > CTRL_BUF_LEN ) ctrlbuf_len = CTRL_BUF_LEN; strncpy( ctrlbuf, edit->buffer, ctrlbuf_len ); } else { ctrlbuf_len = 0; } if( list->box == NULL && combo->perm ) { c_area = *area; c_area.row += vs->area.row + 2; c_area.col += vs->area.col + 1; c_vs = uiopen( &c_area, NULL, V_DIALOGUE | V_LISTBOX ); if( c_vs == NULL ) { break; } c_area.row = 0; c_area.col = 0; list->box = uibeglistbox( c_vs, &c_area, list ); } break; case FLD_PULLDOWN : list = field->u.list; ctrlbuf[0] = UiGChar[UI_ARROW_DOWN]; uivtextput( vs, area->row, area->col + area->width, UIData->attrs[ATTR_SCROLL_ICON], ctrlbuf, 1 ); ctrlbuf[0] = '\0'; fn_get = list->get; if( fn_get == NULL ) fn_get = uigetlistelement; (*fn_get)( list->data_handle, list->choice, ctrlbuf, CTRL_BUF_LEN ); /* ctrlbuf does not have to be null terminated */ /* terminate it at maximum length */ ctrlbuf[CTRL_BUF_LEN] = '\0'; ctrlbuf_len = strlen( ctrlbuf ); break; case FLD_LISTBOX: case FLD_EDIT_MLE: list = field->u.list; if( list->box == NULL ) { c_area = *area; c_area.row += ((VSCREEN *)vs)->area.row; c_area.col += ((VSCREEN *)vs)->area.col; c_vs = uiopen( &c_area, NULL, V_DIALOGUE | V_LISTBOX ); if( c_vs == NULL ) { break; } c_area.row = 0; c_area.col = 0; list->box = uibeglistbox( c_vs, &c_area, list ); } return; case FLD_CHECK: /* ctrlbuf must be null terminated for this case */ use_hottext = true; attr = UIData->attrs[( current ) ? ATTR_CURR_EDIT : ATTR_NORMAL]; check = field->u.check; ctrlbuf[0] = CHECKBOX_CHAR( LEFT ); if( _checked( check ) ) { ctrlbuf[1] = CHECKBOX_CHAR( FULL ); } else { ctrlbuf[1] = CHECKBOX_CHAR( EMPTY ); } ctrlbuf[2] = CHECKBOX_CHAR( RIGHT ); ctrlbuf[3] = ' '; strncat( ctrlbuf, check->str, CTRL_BUF_LEN - 4 ); break; case FLD_RADIO: /* ctrlbuf must be null terminated for this case */ use_hottext = true; attr = UIData->attrs[( current ) ? ATTR_CURR_EDIT : ATTR_NORMAL]; radio = field->u.radio; ctrlbuf[0] = RADIO_CHAR( LEFT ); if( radio->value == radio->group->value ) { ctrlbuf[1] = RADIO_CHAR( FULL ); } else { ctrlbuf[1] = RADIO_CHAR( EMPTY ); } ctrlbuf[2] = RADIO_CHAR( RIGHT ); ctrlbuf[3] = ' '; strncat( ctrlbuf, radio->str, CTRL_BUF_LEN - 4 ); break; } if( use_hottext ) { if( current ) { hotattr = attr; } else { hotattr = UIData->attrs[ATTR_RADIO_HOTSPOT]; } hotkey = uidrawhottext( vs, ctrlbuf, area, attr, hotattr, false, false, false ); if( field->typ == FLD_CHECK ) { check->hotkey = hotkey; } else if( field->typ == FLD_RADIO ) { radio->hotkey = hotkey; } } else { uitextfield( vs, area->row, area->col, area->width, attr, ctrlbuf, ctrlbuf_len ); } }