[Scummvm-cvs-logs] CVS: scummvm/backends/PalmOS/Src/forms forminfo.cpp,NONE,1.1

Chris Apers chrilith at users.sourceforge.net
Tue Nov 9 03:31:01 CET 2004


Update of /cvsroot/scummvm/scummvm/backends/PalmOS/Src/forms
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11727

Added Files:
	forminfo.cpp 
Log Message:
New info panel (formsystem is now part of it)

--- NEW FILE: forminfo.cpp ---
#include <PalmOS.h>

#include "start.h"
#include "formTabs.h"
#include "forms.h"

#include "version.h"

/***********************************************************************
 *
 * FUNCTION:    MiscOptionsFormSave
 * FUNCTION:    MiscOptionsFormInit
 * FUNCTION:    MiscOptionsFormHandleEvent
 *
 * DESCRIPTION: Misc. Options form functions
 *
 * REVISION HISTORY:
 *
 *
 ***********************************************************************/
static TabType *myTabP;
static UInt16 lastTab = 0;

static UInt32 GetStackSize() {
	MemPtr startPP, endPP;
	SysGetStackInfo(&startPP, &endPP);

	return ((Char *)endPP - (Char *)startPP) / 1024L;
}

void GetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP) {
	UInt32		free, max;

	Int16		i;
	Int16		nCards;
	UInt16		cardNo;
	UInt16		heapID;

	UInt32		storageMemory = 0;
	UInt32		dynamicMemory = 0;
	UInt32		storageFree = 0;
	UInt32		dynamicFree = 0;

	// Iterate through each card to support devices with multiple cards.
	nCards = MemNumCards();		

	for (cardNo = 0; cardNo < nCards; cardNo++) {
		// Iterate through the RAM heaps on a card (excludes ROM).
		for (i=0; i< MemNumRAMHeaps(cardNo); i++) {
			// Obtain the ID of the heap.
			heapID = MemHeapID(cardNo, i);
			// Calculate the total memory and free memory of the heap.
			MemHeapFreeBytes(heapID, &free, &max);
			
			// If the heap is dynamic, increment the dynamic memory total.
			if (MemHeapDynamic(heapID)) {
				dynamicMemory += MemHeapSize(heapID);
				dynamicFree += free;

			// The heap is nondynamic (storage ?).
			} else {
				storageMemory += MemHeapSize(heapID);
				storageFree += free;
			}
		}
	}
	// Reduce the stats to KB.  Round the results.
	dynamicMemory = dynamicMemory / 1024L;
	storageMemory = storageMemory / 1024L;

	dynamicFree = dynamicFree / 1024L;
	storageFree = storageFree / 1024L;

	if (dynamicMemoryP) *dynamicMemoryP = dynamicMemory;
	if (storageMemoryP) *storageMemoryP = storageMemory;
	if (dynamicFreeP) *dynamicFreeP = dynamicFree;
	if (storageFreeP) *storageFreeP = storageFree;
}

static void VersionTabPreInit(FormType *frmP) {
	FrmNewLabel(&frmP, 4210, gScummVMVersion, 49, 12, stdFont);
	FrmNewLabel(&frmP, 4211, gScummVMBuildDate, 49, 24, stdFont);
}

static void SystemTabPreInit(FormType *frmP) {
	Coord x;
	UInt32 dm, sm, df, sf, stack;
	Char num[10];

	GetMemory(&sm, &dm, &sf, &df);
	stack = GetStackSize();
	
	WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground));
	FntSetFont(stdFont);
	
	StrIToA(num, dm);
	x = 149 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4308, num, x, 12, stdFont);

	StrIToA(num, sm);
	x = 149 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4309, num, x, 24, stdFont);

	StrIToA(num, stack);
	x = 149 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4310, num, x, 36, stdFont);

	StrIToA(num, df);
	x = 109 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4311, num, x, 12, stdFont);

	StrIToA(num, sf);
	x = 109 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4312, num, x, 24, stdFont);

	StrCopy(num,"-");
	x = 109 - FntCharsWidth(num, StrLen(num)) + 5;
	FrmNewLabel(&frmP, 4313, num, x, 36, stdFont);
}

static void InfoFormSave() {
	TabDeleteTabs(myTabP);
	FrmReturnToMain();
}

static void AboutTabInit(Boolean draw) {
	if (!draw) {
		RectangleType r = {2, 40, 154, 45};
		WinSetBackColor(UIColorGetTableEntryIndex(UIFormFill));
		WinEraseRectangle(&r, 0);
		
	} else {
		MemHandle hTemp;
		BitmapPtr bmpTemp;

		hTemp = DmGetResource (bitmapRsc, 1200);
		if (hTemp) {
			bmpTemp = (BitmapType *)MemHandleLock(hTemp);
			WinDrawBitmap(bmpTemp,3,44);
			MemPtrUnlock(bmpTemp);
			DmReleaseResource(hTemp);
		}
	}
}

static void InfoFormInit() {
	TabType *tabP;
	FormType *frmP = FrmGetActiveForm();

	tabP = TabNewTabs(3);
	TabAddContent(&frmP, tabP, "About", TabInfoAboutForm);
	TabAddContent(&frmP, tabP, "Version", TabInfoVersionForm, VersionTabPreInit);
	TabAddContent(&frmP, tabP, "Memory", TabInfoSystemForm, SystemTabPreInit);

	FrmDrawForm(frmP);
	TabSetActive(frmP, tabP, 0);

	AboutTabInit(true);

	myTabP = tabP;
}

Boolean InfoFormHandleEvent(EventPtr eventP) {
	FormPtr frmP = FrmGetActiveForm();
	Boolean handled = false;

	switch (eventP->eType) {
		case frmOpenEvent:
			InfoFormInit();
			handled = true;
			break;

		case ctlSelectEvent:
			switch (eventP->data.ctlSelect.controlID)
			{
				case (InfoForm + 1) :
				case (InfoForm + 2) :
				case (InfoForm + 3) :
					if (lastTab == 0) AboutTabInit(false);

					lastTab = (eventP->data.ctlSelect.controlID - InfoForm - 1);
					TabSetActive(frmP, myTabP, lastTab);
				
					if (lastTab == 0) AboutTabInit(true);
					break;

				case InfoOKButton:
					InfoFormSave();
					break;
			}
			handled = true;
			break;

		default:
			break;
	}
	
	return handled;
}





More information about the Scummvm-git-logs mailing list