scummvm/backends/PalmOS/Src/forms/formSkins.cpp
Eugene Sandulenko 6b4484472b Remove trailing whitespaces.
svn-id: r18604
2005-07-30 21:11:48 +00:00

267 lines
6.2 KiB
C++

#include <PalmOS.h>
#include "palmdefs.h"
#include "start.h"
#include "forms.h"
#include "skin.h"
#include "globals.h"
static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) {
return StrCompare(a->nameP, b->nameP);
}
static void SkinsFormInit(Boolean bDraw) {
MemHandle skins = NULL;
SkinInfoType *skinsInfo;
UInt16 numSkins = 0;
FormPtr frmP;
ListType *listP;
MemHandle items = NULL;
ControlType *cck1P;
DmSearchStateType stateInfo;
UInt16 cardNo;
LocalID dbID;
Err errInfo;
Char nameP[32];
itemsText = NULL;
// parse and save skins
Err err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
while (!err && dbID) {
errInfo = DmDatabaseInfo (cardNo, dbID, nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (!errInfo)
{
if (!skins)
skins = MemHandleNew(sizeof(SkinInfoType));
else
MemHandleResize(skins, MemHandleSize(skins) + sizeof(SkinInfoType));
skinsInfo = (SkinInfoType *)MemHandleLock(skins);
StrCopy(skinsInfo[numSkins].nameP, nameP);
skinsInfo[numSkins].cardNo = cardNo;
skinsInfo[numSkins].dbID = dbID;
MemHandleUnlock(skins);
numSkins++;
}
err = DmGetNextDatabaseByTypeCreator(false, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
}
Int16 selected = -1;
cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
CtlSetValue(cck1P, gPrefs->soundClick);
listP = (ListType *)GetObjectPtr(SkinsSkinList);
skinsInfo = (SkinInfoType *)MemHandleLock(skins);
SysQSort(skinsInfo, numSkins, sizeof(SkinInfoType), (CmpFuncPtr)SkinsFormCompare, 0);
// create itemsText (TODO: create a custom draw function)
for (UInt16 index=0; index < numSkins; index++)
{
if (!items)
items = MemHandleNew(sizeof(Char *));
else
MemHandleResize(items, MemHandleSize(items) + sizeof(Char *));
itemsText = (Char **)MemHandleLock(items);
itemsText[index] = skinsInfo[index].nameP;
MemHandleUnlock(items);
if ( gPrefs->skin.cardNo == skinsInfo[index].cardNo &&
gPrefs->skin.dbID == skinsInfo[index].dbID &&
StrCompare(gPrefs->skin.nameP, skinsInfo[index].nameP) == 0)
selected = index;
}
// save globals and set list
itemsText = (Char **)MemHandleLock(items);
itemsList = (void *)skinsInfo;
itemsType = ITEM_TYPE_SKIN;
LstSetListChoices (listP, itemsText, numSkins);
LstSetSelection(listP, selected);
// bDraw = true -> draw whole from
// bDraw = false -> redraw list
if (bDraw) {
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
} else {
WinScreenLock(winLockCopy);
LstDrawList(listP);
WinScreenUnlock();
// LstSetSelection(listP, 0);
}
}
static void SkinsFormExit(Boolean bSave) {
MemHandle skins;
MemHandle items;
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (bSave && selected == -1) { // may never occured...
FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
skins = MemPtrRecoverHandle(skinsInfo);
items = MemPtrRecoverHandle(itemsText);
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
if (bSave) {
ControlType *cck1P;
StrCopy(gPrefs->skin.nameP, skinsInfo[selected].nameP);
gPrefs->skin.cardNo = skinsInfo[selected].cardNo;
gPrefs->skin.dbID = skinsInfo[selected].dbID;
/* DmOpenRef skinDB = SknOpenSkin();
UInt32 depth = SknGetDepth(skinDB);
SknCloseSkin(skinDB);
if (depth != 8 && depth != 16) depth = 8;
if (depth == 16 && !OPTIONS_TST(kOptMode16Bit)) {
FrmCustomAlert(FrmInfoAlert, "You can only use 8bit skin on your device.", 0, 0);
gPrefs->skin.cardNo = cardNo;
gPrefs->skin.dbID = dbID;
}
*/
cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
gPrefs->soundClick = CtlGetValue(cck1P);
}
FrmReturnToMain();
MemHandleUnlock(items);
MemHandleUnlock(skins);
MemHandleFree(items);
MemHandleFree(skins);
if (bSave)
SknApplySkin();
}
static void SkinsFormBeam() {
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
Err err;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (selected == -1) { // may never occured...
FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
err = SendDatabase(0, skinsInfo[selected].dbID, "skin.pdb", "\nScummVM Skin");
// if (err)
// FrmCustomAlert(FrmErrorAlert, "Unable to beam this skin.",0,0);
}
static void SkinsFormDelete() {
MemHandle skins;
MemHandle items;
SkinInfoType *skinsInfo;
ListType *listP;
Int16 selected;
listP = (ListType *)GetObjectPtr(SkinsSkinList);
selected = LstGetSelection(listP);
if (selected == -1) { // may never occured...
FrmCustomAlert(FrmInfoAlert, "You didn't select a skin.", 0, 0);
return;
}
skinsInfo = (SkinInfoType *)itemsList;
skins = MemPtrRecoverHandle(skinsInfo);
items = MemPtrRecoverHandle(itemsText);
if ( gPrefs->skin.cardNo == skinsInfo[selected].cardNo &&
gPrefs->skin.dbID == skinsInfo[selected].dbID &&
StrCompare(gPrefs->skin.nameP, skinsInfo[selected].nameP) == 0) {
FrmCustomAlert(FrmInfoAlert, "You cannot delete the active skin.",0,0);
return;
} else {
Err err = DmDeleteDatabase(0, skinsInfo[selected].dbID);
if (!err) {
itemsText = NULL;
itemsList = NULL;
itemsType = ITEM_TYPE_UNKNOWN;
MemHandleUnlock(items);
MemHandleUnlock(skins);
MemHandleFree(items);
MemHandleFree(skins);
SkinsFormInit(false);
} else {
FrmCustomAlert(FrmErrorAlert, "Skin deletion failed.",0,0);
}
}
}
Boolean SkinsFormHandleEvent(EventPtr eventP) {
Boolean handled = false;
switch (eventP->eType) {
case frmOpenEvent:
SkinsFormInit(true);
handled = true;
break;
case frmCloseEvent:
SkinsFormExit(false);
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case SkinsOKButton:
SkinsFormExit(true);
break;
case SkinsCancelButton:
SkinsFormExit(false);
break;
case SkinsBeamButton:
SkinsFormBeam();
break;
case SkinsDeleteButton:
SkinsFormDelete();
break;
}
handled = true;
break;
default:
break;
}
return handled;
}