Files
Mozilla/mozilla/xpinstall/wizard/mac/src/TerminalWin.c
gerv%gerv.net f4294ea0f8 Bug 236613: change to MPL/LGPL/GPL tri-license.
git-svn-id: svn://10.0.0.236/trunk@155026 18797224-902f-48f8-a5cc-f745e15eee43
2004-04-17 14:37:35 +00:00

806 lines
24 KiB
C
Raw Blame History

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1999
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Samir Gehani <sgehani@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "MacInstallWizard.h"
/*-----------------------------------------------------------*
* Terminal Window
*-----------------------------------------------------------*/
static Boolean bDownloadedRedirect = false;
void
ShowTerminalWin(void)
{
Str255 next, back;
Handle rectH;
Rect viewRect;
short reserr;
MenuHandle popupMenu;
PopupPrivateData ** pvtDataHdl;
unsigned char * currMenuItem;
short i, vRefNum;
long cwdDirID, dirID;
Boolean isDir = false;
Str255 pModulesDir;
OSErr err = noErr;
GrafPtr oldPort;
GetPort(&oldPort);
if (gWPtr != NULL)
{
SetPort(gWPtr);
gCurrWin = kTerminalID;
/* gControls->tw = (TermWin*) NewPtrClear(sizeof(TermWin)); */
GetResourcedString(next, rInstList, sInstallBtn);
GetResourcedString(back, rInstList, sBackBtn);
// malloc and get control
rectH = Get1Resource('RECT', rStartMsgBox);
reserr = ResError();
if (reserr == noErr && rectH != NULL)
{
viewRect = (Rect) **((Rect **)rectH);
ReleaseResource(rectH);
}
else
{
ErrorHandler(reserr, nil);
return;
}
gControls->tw->siteSelector = NULL;
gControls->tw->saveBitsCheckbox = NULL;
gControls->tw->startMsgBox = viewRect;
gControls->tw->startMsg = TENew(&viewRect, &viewRect);
if (gControls->tw->startMsg == NULL)
{
ErrorHandler(eMem, nil);
return;
}
// save bits after download and install
/* get the "Installer Modules" relative subdir */
ERR_CHECK(GetCWD(&cwdDirID, &vRefNum));
GetIndString(pModulesDir, rStringList, sInstModules);
GetDirectoryID(vRefNum, cwdDirID, pModulesDir, &dirID, &isDir);
if (isDir)
{
if (!ExistArchives(vRefNum, dirID)) // going to download
{
if (gControls->cfg->numSites > 0)
{
// download settings groupbox
Str255 dlSettingsGBTitle;
gControls->tw->dlSettingsGB = GetNewControl(rDLSettingsGB, gWPtr);
if (gControls->tw->dlSettingsGB)
{
GetResourcedString(dlSettingsGBTitle, rInstList, sDLSettings);
SetControlTitle(gControls->tw->dlSettingsGB, dlSettingsGBTitle);
ShowControl(gControls->tw->dlSettingsGB);
}
// site selector label
Str255 siteSelMsgStr;
gControls->tw->siteSelMsg = GetNewControl(rSiteSelMsg, gWPtr);
if (gControls->tw->siteSelMsg)
{
GetResourcedString(siteSelMsgStr, rInstList, sSiteSelMsg);
SetControlData(gControls->tw->siteSelMsg, kControlNoPart,
kControlStaticTextTextTag, siteSelMsgStr[0], (Ptr)&siteSelMsgStr[1]);
ShowControl(gControls->tw->siteSelMsg);
}
// site selector
gControls->tw->siteSelector = GetNewControl( rSiteSelector, gWPtr );
if (!gControls->tw->siteSelector)
{
ErrorHandler(eMem, nil);
return;
}
// populate popup button menus
HLock((Handle)gControls->tw->siteSelector);
pvtDataHdl = (PopupPrivateData **) (*(gControls->tw->siteSelector))->contrlData;
HLock((Handle)pvtDataHdl);
popupMenu = (MenuHandle) (**pvtDataHdl).mHandle;
for (i=0; i<gControls->cfg->numSites; i++)
{
HLock(gControls->cfg->site[i].desc);
currMenuItem = CToPascal(*gControls->cfg->site[i].desc);
HUnlock(gControls->cfg->site[i].desc);
InsertMenuItem( popupMenu, currMenuItem, i );
}
HUnlock((Handle)pvtDataHdl);
HUnlock((Handle)gControls->tw->siteSelector);
SetControlMaximum(gControls->tw->siteSelector, gControls->cfg->numSites);
SetControlValue(gControls->tw->siteSelector, gControls->opt->siteChoice);
ShowControl(gControls->tw->siteSelector);
}
// show check box and message
gControls->tw->saveBitsCheckbox = GetNewControl( rSaveCheckbox, gWPtr );
if (!gControls->tw->saveBitsCheckbox)
{
ErrorHandler(eMem, nil);
return;
}
if (gControls->opt->saveBits)
SetControlValue(gControls->tw->saveBitsCheckbox, 1);
ShowControl(gControls->tw->saveBitsCheckbox);
// get rect for save bits message
rectH = Get1Resource('RECT', rSaveBitsMsgBox);
reserr = ResError();
if (reserr == noErr && rectH != NULL)
{
gControls->tw->saveBitsMsgBox = (Rect) **((Rect **)rectH);
DisposeHandle(rectH);
}
else
{
ErrorHandler(reserr, nil);
return;
}
// get text edit record for save bits message
gControls->tw->saveBitsMsg = TENew(&gControls->tw->saveBitsMsgBox,
&gControls->tw->saveBitsMsgBox );
if (gControls->tw->saveBitsMsg == NULL)
{
ErrorHandler(eMem, nil);
return;
}
HLock(gControls->cfg->saveBitsMsg);
TESetText(*gControls->cfg->saveBitsMsg, strlen(*gControls->cfg->saveBitsMsg),
gControls->tw->saveBitsMsg);
HUnlock(gControls->cfg->saveBitsMsg);
// show save bits msg
TEUpdate(&gControls->tw->saveBitsMsgBox, gControls->tw->saveBitsMsg);
// proxy settings button
gControls->tw->proxySettingsBtn = GetNewControl(rProxySettgBtn, gWPtr);
if (!gControls->tw->proxySettingsBtn)
{
ErrorHandler(eMem, nil);
return;
}
Str255 proxySettingsTitle;
GetResourcedString(proxySettingsTitle, rInstList, sProxySettings);
SetControlTitle(gControls->tw->proxySettingsBtn, proxySettingsTitle);
ShowControl(gControls->tw->proxySettingsBtn);
}
}
// populate control
HLock(gControls->cfg->startMsg);
TESetText(*gControls->cfg->startMsg, strlen(*gControls->cfg->startMsg),
gControls->tw->startMsg);
HUnlock(gControls->cfg->startMsg);
// show controls
TEUpdate(&viewRect, gControls->tw->startMsg);
ShowNavButtons( back, next );
}
SetPort(oldPort);
}
short
GetRectFromRes(Rect *outRect, short inResID)
{
Handle rectH;
short reserr;
if (!outRect)
return eParam;
// get rect for save bits message
rectH = Get1Resource('RECT', inResID);
reserr = ResError();
if (reserr == noErr && rectH != NULL)
{
*outRect = (Rect) **((Rect **)rectH);
DisposeHandle(rectH);
}
else
{
ErrorHandler(reserr, nil);
return reserr;
}
return 0;
}
void
UpdateTerminalWin(void)
{
GrafPtr oldPort;
int i;
Rect instMsgRect;
GetPort(&oldPort);
SetPort(gWPtr);
if (!gInstallStarted)
TEUpdate(&gControls->tw->startMsgBox, gControls->tw->startMsg);
if (gControls->tw->dlProgressBar)
{
for (i = 0; i < kNumDLFields; ++i)
{
if (gControls->tw->dlLabels[i])
{
ShowControl(gControls->tw->dlLabels[i]);
}
}
// XXX TO DO
// update the dl TEs
}
else if (gControls->tw->allProgressMsg)
{
HLock((Handle)gControls->tw->allProgressMsg);
SetRect(&instMsgRect, (*gControls->tw->allProgressMsg)->viewRect.left,
(*gControls->tw->allProgressMsg)->viewRect.top,
(*gControls->tw->allProgressMsg)->viewRect.right,
(*gControls->tw->allProgressMsg)->viewRect.bottom );
HUnlock((Handle)gControls->tw->allProgressMsg);
TEUpdate(&instMsgRect, gControls->tw->allProgressMsg);
}
else
{
if (gControls->tw->saveBitsMsg)
{
TEUpdate(&gControls->tw->saveBitsMsgBox, gControls->tw->saveBitsMsg);
}
}
SetPort(oldPort);
}
void
InTerminalContent(EventRecord* evt, WindowPtr wCurrPtr)
{
Point localPt;
Rect r;
ControlPartCode part;
ControlHandle currCntl;
short checkboxVal;
GrafPtr oldPort;
GetPort(&oldPort);
SetPort(wCurrPtr);
localPt = evt->where;
GlobalToLocal( &localPt);
if (gControls->tw->siteSelector)
{
HLock((Handle)gControls->tw->siteSelector);
r = (**(gControls->tw->siteSelector)).contrlRect;
HUnlock((Handle)gControls->tw->siteSelector);
if (PtInRect(localPt, &r))
{
part = FindControl(localPt, gWPtr, &currCntl);
part = TrackControl(currCntl, localPt, (ControlActionUPP) -1);
gControls->opt->siteChoice = GetControlValue(currCntl);
return;
}
}
if (gControls->tw->saveBitsCheckbox)
{
HLock((Handle)gControls->tw->saveBitsCheckbox);
r = (**(gControls->tw->saveBitsCheckbox)).contrlRect;
HUnlock((Handle)gControls->tw->saveBitsCheckbox);
if (PtInRect(localPt, &r))
{
part = FindControl(localPt, gWPtr, &currCntl);
part = TrackControl(currCntl, localPt, (ControlActionUPP) -1);
checkboxVal = GetControlValue(currCntl);
SetControlValue(currCntl, 1 - checkboxVal);
if (checkboxVal) // was selected so now toggling off
gControls->opt->saveBits = false;
else // was not selected so now toggling on
gControls->opt->saveBits = true;
return;
}
}
if (gControls->tw->proxySettingsBtn)
{
HLock((Handle)gControls->tw->proxySettingsBtn);
r = (**(gControls->tw->proxySettingsBtn)).contrlRect;
HUnlock((Handle)gControls->tw->proxySettingsBtn);
if (PtInRect(localPt, &r))
{
part = TrackControl(gControls->tw->proxySettingsBtn, evt->where, NULL);
if (part != 0)
OpenProxySettings();
return;
}
}
HLock((Handle)gControls->backB);
SetRect(&r, (**(gControls->backB)).contrlRect.left,
(**(gControls->backB)).contrlRect.top,
(**(gControls->backB)).contrlRect.right,
(**(gControls->backB)).contrlRect.bottom);
HUnlock((Handle)gControls->backB);
if (PtInRect( localPt, &r))
{
part = TrackControl(gControls->backB, evt->where, NULL);
if (part)
{
/* before install has started */
if (gControls->state == eInstallNotStarted)
{
KillControls(gWPtr);
if (&gControls->tw->startMsgBox)
{
EraseRect(&gControls->tw->startMsgBox);
InvalRect(&gControls->tw->startMsgBox);
}
else
{
ErrorHandler(eParam, nil);
return;
}
ClearSaveBitsMsg();
/* treat last setup type selection as custom */
if (gControls->opt->instChoice == gControls->cfg->numSetupTypes)
{
if (gControls->cfg->bAdditionsExist)
ShowAdditionsWin();
else
ShowComponentsWin();
}
else
ShowSetupTypeWin();
return;
}
/* pause button pressed */
else if (gControls->state == eDownloading || gControls->state == eResuming)
{
SetPausedState();
}
}
}
HLock((Handle)gControls->nextB);
SetRect(&r, (**(gControls->nextB)).contrlRect.left,
(**(gControls->nextB)).contrlRect.top,
(**(gControls->nextB)).contrlRect.right,
(**(gControls->nextB)).contrlRect.bottom);
HUnlock((Handle)gControls->nextB);
if (PtInRect( localPt, &r))
{
part = TrackControl(gControls->nextB, evt->where, NULL);
if (part)
{
BeginInstall();
}
}
SetPort(oldPort);
}
void
BeginInstall(void)
{
ThreadID tid;
/* starting download first time or resume download */
if (gControls->state == eInstallNotStarted || gControls->state == ePaused)
{
if (gControls->state == eInstallNotStarted)
{
SetupPauseResumeButtons();
ClearDownloadSettings();
gInstallStarted = true;
}
else if (gControls->state == ePaused)
SetResumedState();
SpawnSDThread(Install, &tid);
}
}
void
my_c2pstrcpy(const char *aCStr, Str255 aPStr)
{
if (!aCStr)
return;
memcpy(&aPStr[1], aCStr, strlen(aCStr) > 255 ? 255 : strlen(aCStr));
aPStr[0] = strlen(aCStr);
}
#define rProxyHostItem 3
#define rProxyPortItem 4
#define rProxyUserItem 5
#define rProxyPswdItem 6
#define rProxyStrOK 1
#define rProxyStrCancel 2
#define rProxyStrHostLab 7
#define rProxyStrPortLab 8
#define rProxyStrUserLab 9
#define rProxyStrPswdLab 10
void
OpenProxySettings(void)
{
short itemHit = 999;
short itemType;
Handle item;
Rect itemBox;
Str255 itemText, pswdBuf, blindPswdText;
DialogPtr psDlg;
Boolean bDefault = true;
/* show dialog */
psDlg = GetNewDialog(rDlgProxySettg, NULL, (WindowPtr) -1);
/* show dialog title, button and lable from install.ini */
GetResourcedString(itemText, rInstList, sProxyDlg);
SetWTitle(psDlg, itemText);
GetDialogItem(psDlg, rProxyStrOK, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sOKBtn);
SetControlTitle((ControlRecord **)item, itemText);
SetControlData((ControlRecord **)item, kControlNoPart,
kControlPushButtonDefaultTag, sizeof(bDefault),(Ptr) &bDefault);
GetDialogItem(psDlg, rProxyStrCancel, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sCancel);
SetControlTitle((ControlRecord **)item, itemText);
GetDialogItem(psDlg, rProxyStrHostLab, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sProxyHost);
SetDialogItemText(item, itemText);
GetDialogItem(psDlg, rProxyStrPortLab, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sProxyPort);
SetDialogItemText(item, itemText);
GetDialogItem(psDlg, rProxyStrUserLab, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sProxyUsername);
SetDialogItemText(item, itemText);
GetDialogItem(psDlg, rProxyStrPswdLab, &itemType, &item, &itemBox);
GetResourcedString(itemText, rInstList, sProxyPassword);
SetDialogItemText(item, itemText);
/* pre-populate text fields */
if (gControls->opt->proxyHost)
{
my_c2pstrcpy(gControls->opt->proxyHost, itemText);
GetDialogItem(psDlg, rProxyHostItem, &itemType, &item, &itemBox);
SetDialogItemText(item, itemText);
}
if (gControls->opt->proxyPort)
{
my_c2pstrcpy(gControls->opt->proxyPort, itemText);
GetDialogItem(psDlg, rProxyPortItem, &itemType, &item, &itemBox);
SetDialogItemText(item, itemText);
}
if (gControls->opt->proxyUsername)
{
my_c2pstrcpy(gControls->opt->proxyUsername, itemText);
GetDialogItem(psDlg, rProxyUserItem, &itemType, &item, &itemBox);
SetDialogItemText(item, itemText);
}
if (gControls->opt->proxyPassword)
{
int pswdLen = strlen(gControls->opt->proxyPassword);
memset(&blindPswdText[1], '<EFBFBD>', pswdLen);
blindPswdText[0] = pswdLen;
GetDialogItem(psDlg, rProxyPswdItem, &itemType, &item, &itemBox);
SetDialogItemText(item, blindPswdText);
}
if (gControls->opt->proxyPassword)
my_c2pstrcpy(gControls->opt->proxyPassword, pswdBuf);
else
pswdBuf[0] = 0;
do
{
ModalDialog(NULL, &itemHit);
/* special handling for "blind" password field */
if (itemHit == rProxyPswdItem)
{
GetDialogItem(psDlg, rProxyPswdItem, &itemType, &item, &itemBox);
GetDialogItemText(item, itemText);
/* char deleted ? */
if (itemText[0] < pswdBuf[0])
{
/* truncate password buffer */
pswdBuf[0] = itemText[0];
}
else
{
/* store new char in password buffer */
pswdBuf[itemText[0]] = itemText[itemText[0]];
pswdBuf[0] = itemText[0];
}
memset(&blindPswdText[1], '<EFBFBD>', pswdBuf[0]);
blindPswdText[0] = itemText[0];
SetDialogItemText(item, blindPswdText);
}
} while(itemHit != 1 && itemHit != 2);
/* if OK was hit then take changed settings */
if (itemHit == 1)
{
GetDialogItem(psDlg, rProxyHostItem, &itemType, &item, &itemBox);
GetDialogItemText(item, itemText);
if (itemText[0] > 0)
{
if (gControls->opt->proxyHost)
free(gControls->opt->proxyHost);
gControls->opt->proxyHost = (char *) malloc(itemText[0] + 1);
strncpy(gControls->opt->proxyHost, (const char *)&itemText[1], itemText[0]);
*(gControls->opt->proxyHost + itemText[0]) = 0;
}
GetDialogItem(psDlg, rProxyPortItem, &itemType, &item, &itemBox);
GetDialogItemText(item, itemText);
if (itemText[0] > 0)
{
if (gControls->opt->proxyPort)
free(gControls->opt->proxyPort);
gControls->opt->proxyPort = (char *) malloc(itemText[0] + 1);
strncpy(gControls->opt->proxyPort, (const char *)&itemText[1], itemText[0]);
*(gControls->opt->proxyPort + itemText[0]) = 0;
}
GetDialogItem(psDlg, rProxyUserItem, &itemType, &item, &itemBox);
GetDialogItemText(item, itemText);
if (itemText[0] > 0)
{
if (gControls->opt->proxyUsername)
free(gControls->opt->proxyUsername);
gControls->opt->proxyUsername = (char *) malloc(itemText[0] + 1);
strncpy(gControls->opt->proxyUsername, (const char *)&itemText[1], itemText[0]);
*(gControls->opt->proxyUsername + itemText[0]) = 0;
}
if (pswdBuf[0] > 0)
{
if (gControls->opt->proxyPassword)
free(gControls->opt->proxyPassword);
gControls->opt->proxyPassword = (char *) malloc(pswdBuf[0] + 1);
strncpy(gControls->opt->proxyPassword, (const char *)&pswdBuf[1], pswdBuf[0]);
*(gControls->opt->proxyPassword + pswdBuf[0]) = 0;
}
}
DisposeDialog(psDlg);
}
Boolean
SpawnSDThread(ThreadEntryProcPtr threadProc, ThreadID *tid)
{
OSErr err;
err = NewThread(kCooperativeThread, (ThreadEntryProcPtr)threadProc, (void*) nil,
0, kCreateIfNeeded, (void**)nil, tid);
// ^---- 0 means gimme the default stack size from Thread Manager
if (err == noErr)
YieldToThread(*tid); /* force ctx switch */
else
{
return false;
}
return true;
}
void
ClearDownloadSettings(void)
{
GrafPtr oldPort;
GetPort(&oldPort);
if (gWPtr)
{
SetPort(gWPtr);
if (gControls->tw->dlSettingsGB)
DisposeControl(gControls->tw->dlSettingsGB);
if (gControls->tw->startMsg)
EraseRect(&gControls->tw->startMsgBox);
if (gControls->tw->siteSelector)
DisposeControl(gControls->tw->siteSelector);
if (gControls->tw->siteSelMsg)
DisposeControl(gControls->tw->siteSelMsg);
if (gControls->tw->saveBitsMsg)
EraseRect(&gControls->tw->saveBitsMsgBox);
if (gControls->tw->saveBitsCheckbox)
DisposeControl(gControls->tw->saveBitsCheckbox);
if (gControls->tw->proxySettingsBtn)
DisposeControl(gControls->tw->proxySettingsBtn);
}
SetPort(oldPort);
}
void
ClearSaveBitsMsg(void)
{
if (gControls->tw->saveBitsMsg)
EraseRect(&gControls->tw->saveBitsMsgBox);
}
void
EnableTerminalWin(void)
{
if (gControls->state == eInstallNotStarted)
{
EnableNavButtons();
if (gControls->tw->siteSelector)
HiliteControl(gControls->tw->siteSelector, kEnableControl);
if (gControls->tw->saveBitsCheckbox)
HiliteControl(gControls->tw->saveBitsCheckbox, kEnableControl);
if (gControls->tw->proxySettingsBtn)
HiliteControl(gControls->tw->proxySettingsBtn, kEnableControl);
}
else if (gControls->state == eDownloading || gControls->state == eResuming)
{
if (gControls->nextB)
HiliteControl(gControls->nextB, kDisableControl);
if (gControls->backB)
HiliteControl(gControls->backB, kEnableControl);
if (gControls->cancelB)
HiliteControl(gControls->cancelB, kDisableControl);
}
else if (gControls->state == ePaused)
{
if (gControls->nextB)
HiliteControl(gControls->nextB, kEnableControl);
if (gControls->backB)
HiliteControl(gControls->backB, kDisableControl);
if (gControls->cancelB)
HiliteControl(gControls->cancelB, kDisableControl);
}
}
void
DisableTerminalWin(void)
{
DisableNavButtons();
if (gControls->tw->siteSelector)
HiliteControl(gControls->tw->siteSelector, kDisableControl);
if (gControls->tw->saveBitsCheckbox)
HiliteControl(gControls->tw->saveBitsCheckbox, kDisableControl);
if (gControls->tw->proxySettingsBtn)
HiliteControl(gControls->tw->proxySettingsBtn, kDisableControl);
}
void
SetupPauseResumeButtons(void)
{
Str255 pPauseLabel, pResumeLabel;
/* rename labels to pause/resume */
if (gControls->backB)
{
GetResourcedString(pPauseLabel, rInstList, sPauseBtn);
SetControlTitle(gControls->backB, pPauseLabel);
ShowControl(gControls->backB);
}
if (gControls->nextB)
{
GetResourcedString(pResumeLabel, rInstList, sResumeBtn);
SetControlTitle(gControls->nextB, pResumeLabel);
ShowControl(gControls->nextB);
}
/* disable cancel button */
if (gControls->cancelB)
HiliteControl(gControls->cancelB, kDisableControl);
/* disable pause button */
if (gControls->nextB)
HiliteControl(gControls->nextB, kDisableControl);
/* enable resume button */
if (gControls->backB)
HiliteControl(gControls->backB, kEnableControl);
gControls->state = eDownloading;
}
void
SetPausedState(void)
{
/* disable resume button */
if (gControls->backB)
HiliteControl(gControls->backB, kDisableControl);
/* enable pause button */
if (gControls->nextB)
HiliteControl(gControls->nextB, kEnableControl);
gControls->state = ePaused;
}
void
SetResumedState(void)
{
/* disable pause button */
if (gControls->nextB)
HiliteControl(gControls->nextB, kDisableControl);
/* enable resume button */
if (gControls->backB)
HiliteControl(gControls->backB, kEnableControl);
gControls->state = eResuming;
}
void
DisablePauseAndResume()
{
/* disable pause button */
if (gControls->nextB)
HiliteControl(gControls->nextB, kDisableControl);
/* disable resume button */
if (gControls->backB)
HiliteControl(gControls->backB, kDisableControl);
}