mirror of
https://github.com/simon987/antiword.git
synced 2025-04-10 13:06:41 +00:00
97 lines
2.4 KiB
C
97 lines
2.4 KiB
C
/*
|
|
* 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 */
|