示例#1
0
文件: icons.c 项目: 99years/plan9
/*
 * vUpdateWriteable - update a writeable icon with a string
 */
void
vUpdateWriteable(window_handle tWindow, icon_handle tIconNumber,
	const char *szString)
{
	icon_block	tIcon;
	caret_block	tCaret;
	int		iLen;

	fail(szString == NULL);

	NO_DBG_DEC(tIconNumber);
	NO_DBG_MSG(szString);

	Error_CheckFatal(Wimp_GetIconState(tWindow, tIconNumber, &tIcon));
	NO_DBG_HEX(tIcon.flags);
	if (!tIcon.flags.data.text || !tIcon.flags.data.indirected) {
		werr(1, "Icon %d must be indirected text", (int)tIconNumber);
		return;
	}
	strncpy(tIcon.data.indirecttext.buffer,
		szString,
		tIcon.data.indirecttext.bufflen - 1);
	/* Ensure the caret is behind the last character of the text */
	Error_CheckFatal(Wimp_GetCaretPosition(&tCaret));
	if (tCaret.window == tWindow && tCaret.icon == tIconNumber) {
		iLen = strlen(tIcon.data.indirecttext.buffer);
		if (tCaret.index != iLen) {
			tCaret.index = iLen;
			Error_CheckFatal(Wimp_SetCaretPosition(&tCaret));
		}
	}
	Error_CheckFatal(Wimp_SetIconState(tWindow, tIconNumber, 0, 0));
	vUpdateIcon(tWindow, &tIcon);
} /* end of vUpdateWriteable */
示例#2
0
文件: icons.c 项目: 99years/plan9
void
vUpdateRadioButton(window_handle tWindow, icon_handle tIconNumber,
	BOOL bSelected)
{
	icon_block	tIcon;

	Error_CheckFatal(Wimp_GetIconState(tWindow, tIconNumber, &tIcon));
	DBG_DEC(tIconNumber);
	DBG_HEX(tIcon.flags.data.selected);
	if (bSelected == (tIcon.flags.data.selected == 1)) {
		/* No update needed */
		return;
	}
	Error_CheckFatal(Wimp_SetIconState(tWindow, tIconNumber,
			bSelected ? 0x00200000 : 0, 0x00200000));
	vUpdateIcon(tWindow, &tIcon);
} /* end of vUpdateRadioButton */
示例#3
0
文件: window.c 项目: pdh11/intergif
static void LoadFile( const char *name, int type )
{
    caret_block cb;

    strcpy( loadname, name );
    InventSaveFilename( name, savename, type );

    if ( Icon_GetShade( wh, igicon_SAVENAME ) )
    {
        Icon_Unshade( wh, igicon_SAVENAME );
        Icon_Unshade( wh, igicon_SAVE );
        Icon_Unshade( wh, igicon_DRAGGABLE );
    }
    else
        Wimp_SetIconState( wh, igicon_SAVENAME, 0, 0 );/* just redraw it */

    cb.window = wh;
    cb.icon = igicon_SAVENAME;
    cb.offset.x = -1;
    cb.offset.y = -1;
    cb.height = -1;
    cb.index = strlen( savename );
    Wimp_SetCaretPosition( &cb );
}
示例#4
0
文件: window.c 项目: pdh11/intergif
static void WimpButton( void )
{
    if ( iconbar && (e.data.mouse.window < 0) )
    {
        if ( e.data.mouse.button.data.menu )
            Menu_Show( &Menu_iconbar, e.data.mouse.pos.x, -1 );
        else if ( e.data.mouse.button.data.select )
            OpenMainWindow();
    }
    else if ( e.data.mouse.window == palh && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case palicon_KEEP:
        case palicon_256:
        case palicon_216:
        case palicon_FILE:
        case palicon_OPTIMISE:
            DoPaletteRadio();
            break;
        case palicon_OK:
            GetPaletteData();
            /* fall through */
        case palicon_CANCEL:
            Wimp_CloseWindow( palh );
            palette_open = FALSE;
            break;
        }
        return;
    }
    else if ( e.data.mouse.window == spropth && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case spropticon_FORCENEW:
            DoSprOptRadio();
            break;
        case spropticon_OK:
            GetSprOptData();
            /* fall through */
        case spropticon_CANCEL:
            Wimp_CloseWindow( spropth );
            spropt_open = FALSE;
            break;
        }
        return;
    }
    else if ( e.data.mouse.window == wCFSI && e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case cfsiicon_CFSI:
            Icon_SetShade( wCFSI, cfsiicon_OPTIONS,
                           !Icon_GetSelect( wCFSI, cfsiicon_CFSI ) );
            break;
        case cfsiicon_OK:
            GetCFSIData();
            /* fall through */
        case cfsiicon_CANCEL:
            Wimp_CloseWindow( wCFSI );
            cfsi_open = FALSE;
            break;
        }
        return;
    }

    if ( e.data.mouse.window != wh )
        return;

    if ( e.data.mouse.button.data.select )
    {
        switch ( e.data.mouse.icon )
        {
        case igicon_TRANS_FORCE:
        case igicon_TRANS_USE:
        case igicon_TRANS_NONE:
            Icon_SetShade( wh, igicon_TRANS_VALUE,
                           !Icon_GetSelect( wh, igicon_TRANS_FORCE ) );
            break;
#if 0
            /* fall through */
        case igicon_INTERLACED:
            if ( !Icon_GetSelect( wh, igicon_TRANS_NONE )
                 && Icon_GetSelect( wh, igicon_INTERLACED ) )
                Icon_SetSelect( wh, igicon_TRIM, TRUE );
            break;
#endif
        case igicon_DELAY_USE:
            Icon_SetShade( wh, igicon_DELAY,
                           !Icon_GetSelect( wh, igicon_DELAY_USE ) );
            break;
        case igicon_HELP_FILE:
            _kernel_oscli( "Filer_Run <InterGif$Dir>.!Help" );
            break;
        case igicon_HELP_WEB:
            Internet_OpenURL( "http://utter.chaos.org.uk/~pdh/software/intergif.htm" );
            break;
        case igicon_OUT_GIF:
        case igicon_OUT_SPRITE:
            {
                BOOL bSprite = Icon_GetSelect( wh, igicon_OUT_SPRITE );

                strcpy( saveicon, bSprite ? "Sfile_ff9" : "Sfile_695" );
                Wimp_SetIconState( wh, igicon_DRAGGABLE, 0, 0 );
                Icon_SetShade( wh, igicon_INTERLACED, bSprite );
                Icon_SetShade( wh, igicon_LOOP,       bSprite );
                Icon_SetShade( wh, igicon_DELAY,
                               bSprite
                                || !Icon_GetSelect( wh, igicon_DELAY_USE ) );
                Icon_SetShade( wh, igicon_DELAY_USE,  bSprite );
                Icon_SetShade( wh, igicon_SPROPTIONS,  !bSprite );
            }
            break;
        case igicon_SAVE:
            SaveFile( savename );
            break;
        case igicon_PALETTE:
            OpenPaletteWindow();
            break;
        case igicon_SPROPTIONS:
            OpenSprOptWindow();
            break;
        case igicon_CFSI:
            OpenCFSIWindow();
            break;
        }
    }
    else if ( e.data.mouse.button.data.adjust )
    {
        if ( e.data.mouse.icon == igicon_TRANS_FORCE )
            Icon_SetShade( wh, igicon_TRANS_VALUE,
                           !Icon_GetSelect( wh, igicon_TRANS_FORCE ) );
    }
    else if ( e.data.mouse.button.data.dragselect )
    {
        if ( e.data.mouse.icon == igicon_DRAGGABLE && *loadname )
        {
            icon_block *pib = (icon_block*) ((&Template_intergif)+1);
            window_state ws;

            Wimp_GetWindowState( wh, &ws );
            pib += igicon_DRAGGABLE;
            ws.openblock.screenrect.min.x += pib->workarearect.min.x;
            ws.openblock.screenrect.max.x = ws.openblock.screenrect.min.x + 68;
            ws.openblock.screenrect.max.y += pib->workarearect.max.y;
            ws.openblock.screenrect.min.y = ws.openblock.screenrect.max.y - 68;
            DragASprite_Start( 0xC5, (void*)1, saveicon+1,
                               &ws.openblock.screenrect, NULL );
            draggingfile = TRUE;
        }
    }

}