119 lines
3.6 KiB
C
119 lines
3.6 KiB
C
#include "general.h"
|
|
#include "ztext.h"
|
|
|
|
/* Prototype */
|
|
void win_progress_begin( char *string);
|
|
void win_progress( int16 new_bar_width);
|
|
void win_progress_end( void);
|
|
|
|
/* Local variable */
|
|
WINDOW *win_read = NULL;
|
|
|
|
|
|
/*==================================================================================*
|
|
* int16 win_read_progress_begin: *
|
|
* Open the read's progress bar dialog ( if needed). *
|
|
*----------------------------------------------------------------------------------*
|
|
* input: *
|
|
* string -> The text to show in the progress bar. *
|
|
*----------------------------------------------------------------------------------*
|
|
* returns: *
|
|
* -- *
|
|
*==================================================================================*/
|
|
|
|
void win_progress_begin( char *string)
|
|
{
|
|
W_FORM *form;
|
|
OBJECT *progress_bar = get_tree( SINGLE_PROGRESS);
|
|
|
|
// wind_update( BEG_MCTRL);
|
|
|
|
zstrncpy( progress_bar[SINGLE_PROGRESS_TXT].ob_spec.tedinfo->te_ptext, string, 25);
|
|
|
|
win_read = FormCreate( progress_bar, MOVER|NAME, NULL, "", NULL, 0, 0);
|
|
|
|
form = ( W_FORM *)DataSearch( win_read, WD_WFRM);
|
|
|
|
vsf_color( win_read->graf.handle, BLUE);
|
|
|
|
EvntRedraw( win_read);
|
|
}
|
|
|
|
|
|
/*==================================================================================*
|
|
* void win_read_progress: *
|
|
* redraw the bar with the news coordinates computed. *
|
|
*----------------------------------------------------------------------------------*
|
|
* input: *
|
|
* new_bar_width -> the size of the progress bar. *
|
|
*----------------------------------------------------------------------------------*
|
|
* returns: *
|
|
* -- *
|
|
*==================================================================================*/
|
|
|
|
void win_progress( int16 new_bar_width)
|
|
{
|
|
static int16 bar_width = 1;
|
|
int16 pxy[4];
|
|
GRECT rwin, raes;
|
|
W_FORM *form = ( W_FORM *)DataSearch( win_read, WD_WFRM);
|
|
|
|
if ( bar_width == new_bar_width)
|
|
return;
|
|
|
|
WindGet( win_read, WF_WORKXYWH, &rwin.g_x, &rwin.g_y, &rwin.g_w, &rwin.g_h);
|
|
|
|
bar_width = new_bar_width;
|
|
|
|
pxy[0] = rwin.g_x + form->root[SINGLE_PROGRESS_CONTAINER].ob_x;
|
|
pxy[1] = rwin.g_y + form->root[SINGLE_PROGRESS_CONTAINER].ob_y;
|
|
pxy[2] = pxy[0] + bar_width;
|
|
pxy[3] = pxy[1] + form->root[SINGLE_PROGRESS_CONTAINER].ob_height - 1;
|
|
|
|
while( !wind_update( BEG_UPDATE));
|
|
graf_mouse( M_OFF, 0L);
|
|
wind_get( win_read->handle, WF_FIRSTXYWH, &raes.g_x, &raes.g_y, &raes.g_w, &raes.g_h);
|
|
|
|
while ( raes.g_w && raes.g_h)
|
|
{
|
|
if( rc_intersect( &rwin, &raes))
|
|
{
|
|
rc_clip_on( win_read->graf.handle, &raes);
|
|
|
|
v_bar( win_read->graf.handle, pxy);
|
|
|
|
rc_clip_off( win_read->graf.handle);
|
|
}
|
|
|
|
wind_get( win_read->handle, WF_NEXTXYWH, &raes.g_x, &raes.g_y, &raes.g_w, &raes.g_h);
|
|
}
|
|
|
|
graf_mouse( M_ON, 0L);
|
|
|
|
wind_update( END_UPDATE);
|
|
}
|
|
|
|
|
|
/*==================================================================================*
|
|
* void win_read_progress_end: *
|
|
* Destroy the read's progress formular. *
|
|
*----------------------------------------------------------------------------------*
|
|
* input: *
|
|
* -- *
|
|
*----------------------------------------------------------------------------------*
|
|
* returns: *
|
|
* -- *
|
|
*==================================================================================*/
|
|
|
|
void win_progress_end( void)
|
|
{
|
|
if ( win_read == NULL)
|
|
return;
|
|
|
|
snd_msg( win_read, WM_DESTROY, 0, 0, 0, 0);
|
|
|
|
// wind_update( END_MCTRL);
|
|
|
|
win_read = NULL;
|
|
}
|