2008-10-06 03:48:37 +00:00
|
|
|
/* Copyright 1986, 1988, 1989, 1990, 1995 by Abacus Research and
|
|
|
|
* Development, Inc. All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#if !defined (OMIT_RCSID_STRINGS)
|
|
|
|
char ROMlib_rcsid_dialAlert[] =
|
|
|
|
"$Id: dialAlert.c 63 2004-12-24 18:19:43Z ctm $";
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Forward declarations in DialogMgr.h (DO NOT DELETE THIS LINE) */
|
|
|
|
|
|
|
|
#include "rsys/common.h"
|
|
|
|
#include "ResourceMgr.h"
|
|
|
|
#include "WindowMgr.h"
|
|
|
|
#include "DialogMgr.h"
|
|
|
|
#include "EventMgr.h"
|
|
|
|
#include "MemoryMgr.h"
|
|
|
|
|
|
|
|
#include "OSUtil.h"
|
|
|
|
#include "rsys/itm.h"
|
|
|
|
#include "rsys/resource.h"
|
|
|
|
#include "rsys/cquick.h"
|
|
|
|
#include "rsys/mman.h"
|
|
|
|
#include "rsys/options.h"
|
2009-06-16 20:55:37 +00:00
|
|
|
#include "rsys/dial.h"
|
2008-10-06 03:48:37 +00:00
|
|
|
|
|
|
|
int16 alert_extra_icon_id = -32768;
|
|
|
|
|
2009-06-16 20:55:37 +00:00
|
|
|
static icon_item_template_t icon_item_template =
|
2008-10-06 03:48:37 +00:00
|
|
|
{
|
|
|
|
/* item count - 1 */
|
|
|
|
CWC (0),
|
|
|
|
CLC_NULL,
|
|
|
|
{ CWC (10), CWC (20), CWC (42), CWC (52), },
|
|
|
|
CBC ((1 << 7) | (iconItem)),
|
|
|
|
CBC (2),
|
|
|
|
|
|
|
|
/* to be filled in later */ CWC (-1),
|
|
|
|
};
|
|
|
|
|
|
|
|
P2 (PUBLIC pascal trap, INTEGER, Alert, INTEGER, id, /* IMI-418 */
|
|
|
|
ProcPtr, fp)
|
|
|
|
{
|
|
|
|
alth ah;
|
|
|
|
HIDDEN_Handle h;
|
|
|
|
Handle ih;
|
|
|
|
INTEGER n, hit, defbut;
|
|
|
|
Handle alert_ctab_res_h;
|
|
|
|
Handle item_ctab_res_h;
|
|
|
|
|
|
|
|
if (id != Cx(ANumber))
|
|
|
|
{
|
|
|
|
ANumber = CW(id);
|
|
|
|
ACount = 0;
|
|
|
|
}
|
|
|
|
ah = (alth) GetResource(TICK("ALRT"), id);
|
|
|
|
if (!ah)
|
|
|
|
{
|
|
|
|
BEEP (1);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
LoadResource((Handle) ah);
|
|
|
|
n = (Hx(ah, altstag) >> (4 * CW(ACount))) & 0xF;
|
|
|
|
ACount = CW(CW(ACount) + 1);
|
|
|
|
if (CW(ACount) > 3)
|
|
|
|
ACount = CWC(3);
|
|
|
|
BEEP(n & 3);
|
|
|
|
if (! (n & 4))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
ih = GetResource (TICK ("DITL"), Hx (ah, altiid));
|
|
|
|
if (!ih)
|
|
|
|
return -1;
|
|
|
|
LoadResource (ih);
|
|
|
|
alert_ctab_res_h = ROMlib_getrestid (TICK ("actb"), Hx (ah, altiid));
|
|
|
|
item_ctab_res_h = ROMlib_getrestid (TICK ("ictb"), Hx (ah, altiid));
|
|
|
|
h.p = ih;
|
|
|
|
HandToHand (&h);
|
|
|
|
|
|
|
|
THEGDEVICE_SAVE_EXCURSION
|
|
|
|
(MR (MainDevice),
|
|
|
|
{
|
|
|
|
Rect adjusted_rect;
|
|
|
|
boolean_t color_p;
|
|
|
|
DialogPeek dp;
|
|
|
|
SignedByte flags;
|
|
|
|
itmp ip;
|
|
|
|
|
|
|
|
LOCK_HANDLE_EXCURSION_1
|
|
|
|
(ah,
|
|
|
|
{
|
|
|
|
dialog_compute_rect (&HxX (ah, altr),
|
|
|
|
&adjusted_rect,
|
|
|
|
(ALERT_RES_HAS_POSITION_P (ah)
|
|
|
|
? ALERT_RES_POSITION (ah)
|
|
|
|
: noAutoCenter));
|
|
|
|
});
|
|
|
|
|
|
|
|
color_p = ((alert_ctab_res_h
|
|
|
|
&& CTAB_SIZE ((CTabHandle) alert_ctab_res_h) != -1)
|
|
|
|
|| item_ctab_res_h);
|
|
|
|
if (color_p)
|
|
|
|
dp = ((DialogPeek)
|
|
|
|
NewCDialog (NULL, &adjusted_rect,
|
|
|
|
(StringPtr) "", FALSE, dBoxProc,
|
|
|
|
(WindowPtr) -1, FALSE, 0L, h.p));
|
|
|
|
else
|
|
|
|
dp = ((DialogPeek)
|
|
|
|
NewDialog (NULL, &adjusted_rect,
|
|
|
|
(StringPtr) "", FALSE, dBoxProc,
|
|
|
|
(WindowPtr) -1, FALSE, 0L, h.p));
|
|
|
|
|
|
|
|
if (color_p)
|
|
|
|
{
|
|
|
|
THEPORT_SAVE_EXCURSION
|
|
|
|
(thePort,
|
|
|
|
{
|
|
|
|
SetWinColor (DIALOG_WINDOW (dp),
|
|
|
|
(CTabHandle) alert_ctab_res_h);
|
|
|
|
});
|
|
|
|
|
|
|
|
if (item_ctab_res_h)
|
|
|
|
{
|
|
|
|
AuxWinHandle aux_win_h;
|
|
|
|
|
|
|
|
aux_win_h = MR (*lookup_aux_win (DIALOG_WINDOW (dp)));
|
|
|
|
gui_assert (aux_win_h);
|
|
|
|
|
|
|
|
HxX (aux_win_h, dialogCItem) = RM (item_ctab_res_h);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (alert_extra_icon_id != -32768)
|
|
|
|
{
|
|
|
|
Handle icon_item_h;
|
|
|
|
|
|
|
|
icon_item_h = NewHandle (sizeof icon_item_template);
|
|
|
|
icon_item_template.res_id = CW (alert_extra_icon_id);
|
|
|
|
memcpy (STARH (icon_item_h), &icon_item_template,
|
|
|
|
sizeof icon_item_template);
|
|
|
|
|
|
|
|
AppendDITL ((DialogPtr) dp, icon_item_h, overlayDITL);
|
|
|
|
|
|
|
|
alert_extra_icon_id = -32768;
|
|
|
|
|
|
|
|
DisposHandle (icon_item_h);
|
|
|
|
}
|
|
|
|
|
|
|
|
ShowWindow ((WindowPtr) dp);
|
|
|
|
|
|
|
|
THEPORT_SAVE_EXCURSION
|
|
|
|
(FrontWindow (),
|
|
|
|
{
|
|
|
|
defbut = 1 + ((n & 8) >> 3);
|
|
|
|
ip = ROMlib_dpnotoip(dp, defbut, &flags);
|
|
|
|
if (ip)
|
|
|
|
{
|
|
|
|
Rect r;
|
|
|
|
|
|
|
|
r = ip->itmr;
|
|
|
|
PenSize (3, 3);
|
|
|
|
InsetRect (&r, -4, -4);
|
|
|
|
if (!(ROMlib_options & ROMLIB_RECT_SCREEN_BIT))
|
|
|
|
FrameRoundRect(&r, 16, 16);
|
|
|
|
else
|
|
|
|
FrameRect(&r);
|
|
|
|
}
|
|
|
|
dp->aDefItem = CW(defbut);
|
|
|
|
ModalDialog (fp, &hit);
|
|
|
|
});
|
|
|
|
HSetState (DIALOG_ITEMS (dp), flags);
|
|
|
|
DisposDialog ((DialogPtr) dp);
|
|
|
|
});
|
|
|
|
return CW (hit);
|
|
|
|
}
|
|
|
|
|
|
|
|
P2 (PUBLIC pascal trap, INTEGER, StopAlert, INTEGER, id, /* IMI-419 */
|
|
|
|
ProcPtr, fp)
|
|
|
|
{
|
|
|
|
alert_extra_icon_id = stopIcon;
|
|
|
|
return Alert (id, fp);
|
|
|
|
}
|
|
|
|
|
|
|
|
P2(PUBLIC pascal trap, INTEGER, NoteAlert, INTEGER, id, /* IMI-420 */
|
|
|
|
ProcPtr, fp)
|
|
|
|
{
|
|
|
|
alert_extra_icon_id = noteIcon;
|
|
|
|
return Alert (id, fp);
|
|
|
|
}
|
|
|
|
|
|
|
|
P2(PUBLIC pascal trap, INTEGER, CautionAlert, INTEGER, id, /* IMI-420 */
|
|
|
|
ProcPtr, fp)
|
|
|
|
{
|
|
|
|
alert_extra_icon_id = cautionIcon;
|
|
|
|
return Alert (id, fp);
|
|
|
|
}
|
|
|
|
|
|
|
|
A3(PRIVATE, Handle, lockres, ResType, rt, INTEGER, id, BOOLEAN, flag)
|
|
|
|
{
|
|
|
|
Handle retval;
|
|
|
|
|
|
|
|
SetResLoad(TRUE);
|
|
|
|
if ((retval = GetResource(rt, id))) {
|
|
|
|
if (flag)
|
|
|
|
HNoPurge(retval);
|
|
|
|
else
|
|
|
|
HPurge(retval);
|
|
|
|
}
|
|
|
|
return retval;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define RESCTL (ctrlItem|resCtrl)
|
|
|
|
|
|
|
|
A2(PRIVATE, void, lockditl, INTEGER, id, BOOLEAN, flag)
|
|
|
|
{
|
|
|
|
Handle ih, h;
|
|
|
|
INTEGER nitem, procid;
|
|
|
|
itmp ip;
|
|
|
|
|
|
|
|
if((ih = lockres(TICK("DITL"), id, flag))) {
|
|
|
|
nitem = CW(*MR(*(INTEGER **)ih));
|
|
|
|
ip = (itmp)((INTEGER *) STARH(ih) + 1);
|
|
|
|
while (nitem-- >= 0) {
|
|
|
|
if ((CB(ip->itmtype) & RESCTL) == RESCTL) {
|
|
|
|
h = lockres(TICK("CNTL"), CW(*(INTEGER *)(&(ip->itmlen)+1)),
|
|
|
|
flag);
|
|
|
|
procid = CW(*MR(*(INTEGER **)h)) + 8;
|
|
|
|
lockres(TICK("CDEF"), procid >> 4, flag);
|
|
|
|
} else if (CB(ip->itmtype) & iconItem)
|
|
|
|
lockres(TICK("ICON"), CW(*(INTEGER *)(&(ip->itmlen)+1)), flag);
|
|
|
|
else if (CB(ip->itmtype) & picItem)
|
|
|
|
lockres(TICK("PICT"), CW(*(INTEGER *)(&(ip->itmlen)+1)), flag);
|
|
|
|
BUMPIP(ip);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
A2(PRIVATE, void, lockalert, INTEGER, id, BOOLEAN, flag)
|
|
|
|
{
|
|
|
|
alth ah;
|
|
|
|
|
|
|
|
if ((ah = (alth) lockres(TICK("ALRT"), id, flag))) {
|
|
|
|
lockditl(Hx(ah, altiid), flag);
|
|
|
|
lockres(TICK("WDEF"), dBoxProc >> 4, flag);
|
|
|
|
lockres(TICK("ICON"), stopIcon, flag);
|
|
|
|
lockres(TICK("ICON"), noteIcon, flag);
|
|
|
|
lockres(TICK("ICON"), cautionIcon, flag);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
P1(PUBLIC pascal trap, void, CouldAlert, INTEGER, id) /* IMI-420 */
|
|
|
|
{
|
|
|
|
lockalert(id, TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
P1(PUBLIC pascal trap, void, FreeAlert, INTEGER, id) /* IMI-420 */
|
|
|
|
{
|
|
|
|
lockalert(id, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
A2(PRIVATE, void, lockdialog, INTEGER, id, BOOLEAN, flag)
|
|
|
|
{
|
|
|
|
dlogh dh;
|
|
|
|
|
|
|
|
if ((dh = (dlogh) lockres(TICK("DLOG"), id, flag))) {
|
|
|
|
lockditl(Hx(dh, dlgditl), flag);
|
|
|
|
lockres(TICK("WDEF"), Hx(dh, dlgprocid) >> 4, flag);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
P1(PUBLIC pascal trap, void, CouldDialog, INTEGER, id) /* IMI-415 */
|
|
|
|
{
|
|
|
|
lockdialog(id, TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
P1(PUBLIC pascal trap, void, FreeDialog, INTEGER, id) /* IMI-415 */
|
|
|
|
{
|
|
|
|
lockdialog(id, FALSE);
|
|
|
|
}
|