/* * 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 */
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 */
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 ); }
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; } } }