/*
* icons.c
* Copyright (C) 1998-2001 A.J. van Os; Released under GPL
*
* Description:
* Update window icons
*/
#include <string.h>
#include "DeskLib:Error.h"
#include "DeskLib:WimpSWIs.h"
#include "antiword.h"
void
vUpdateIcon(window_handle tWindow, icon_block *pIcon)
{
window_redrawblock tRedraw;
BOOL bMore;
tRedraw.window = tWindow;
tRedraw.rect = pIcon->workarearect;
Error_CheckFatal(Wimp_UpdateWindow(&tRedraw, &bMore));
while (bMore) {
Error_CheckFatal(Wimp_PlotIcon(pIcon));
Error_CheckFatal(Wimp_GetRectangle(&tRedraw, &bMore));
}
} /* end of vUpdateIcon */
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 */
/*
* 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 */
/*
* vUpdateWriteableNumber - update a writeable icon with a number
*/
void
vUpdateWriteableNumber(window_handle tWindow, icon_handle tIconNumber,
int iNumber)
{
char szTmp[1+3*sizeof(int)+1];
(void)sprintf(szTmp, "%d", iNumber);
vUpdateWriteable(tWindow, tIconNumber, szTmp);
} /* end of vUpdateWriteableNumber */
|