diff options
| author | Chris Apers | 2004-05-25 13:53:59 +0000 | 
|---|---|---|
| committer | Chris Apers | 2004-05-25 13:53:59 +0000 | 
| commit | 9f40696ff337dff36e2d36ffe8c5258be3e6b47f (patch) | |
| tree | 0fd755d4c13fcc80e81998a067d1babec94db9dc /backends/PalmOS/Src | |
| parent | fc2eedaa37ca61172e6f5132599826deefe24817 (diff) | |
| download | scummvm-rg350-9f40696ff337dff36e2d36ffe8c5258be3e6b47f.tar.gz scummvm-rg350-9f40696ff337dff36e2d36ffe8c5258be3e6b47f.tar.bz2 scummvm-rg350-9f40696ff337dff36e2d36ffe8c5258be3e6b47f.zip  | |
Tabs manager
svn-id: r13873
Diffstat (limited to 'backends/PalmOS/Src')
| -rw-r--r-- | backends/PalmOS/Src/forms/formtabs.cpp | 194 | ||||
| -rw-r--r-- | backends/PalmOS/Src/forms/formtabs.h | 21 | 
2 files changed, 215 insertions, 0 deletions
diff --git a/backends/PalmOS/Src/forms/formtabs.cpp b/backends/PalmOS/Src/forms/formtabs.cpp new file mode 100644 index 0000000000..dcf2419bf4 --- /dev/null +++ b/backends/PalmOS/Src/forms/formtabs.cpp @@ -0,0 +1,194 @@ +#include <PalmOS.h> +#include <CtlGlue.h> +#include <FrmGlue.h> +#include <LstGlue.h> + +#include "formTabs.h" + +TabType *TabNewTabs(UInt16 cnt) { +	TabType *newP = new TabType; + +	newP->count = 0; +	newP->width = 0; +	newP->tabs = new TabDataType[cnt]; +	 +	return newP; +} + +void TabDeleteTabs(TabType *tabP) { +	UInt16 cnt, num; +	num = MemPtrSize(tabP->tabs) / sizeof(TabDataType); +	 +	for (cnt = 0; cnt < num; cnt++)	 +		FrmDeleteForm(tabP->tabs[cnt].srcP); + +	delete tabP->tabs; +	delete tabP; +} + +Err TabAddContent(FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID) { +	FormType *srcP; +	UInt16 cnt; +	void *objP, **dstP; +	UInt16 objNum; +	Coord x, y, w, h; +	UInt16 id; +	RectangleType r; +	 +	dstP = (void **)frmP; +	srcP = FrmInitForm(rscID); +	objNum = FrmGetNumberOfObjects(srcP); + +	// save tab data +	 +	// it's required to keep to source forms active +	// while the tab form is not close for list data ptr (items text) +	// TODO : fix this ! +	tabP->tabs[tabP->count].srcP	= srcP; +	tabP->tabs[tabP->count].first	= FrmGetObjectId(srcP, 0); +	tabP->tabs[tabP->count].last	= FrmGetObjectId(srcP, objNum - 1); +	tabP->count++; +	tabP->active = tabP->count; +	 +	// create tab +	FntSetFont(stdFont); +	x = 4 + tabP->width; +	y = 16; +	w = FntCharsWidth(nameP, StrLen(nameP)) + 6; +	h = 12; +	ControlType *addP = CtlNewControl(dstP, (FrmGetFormId(*frmP) + tabP->count), buttonCtl, nameP, x, y, w, h, stdFont, 0, true); +	CtlGlueSetFrameStyle(addP, noButtonFrame); +	tabP->width += w + 1; +	 +	// create tab content +	for (cnt = 0; cnt < objNum; cnt++) { +		objP = FrmGetObjectPtr(srcP, cnt); +		id = FrmGetObjectId(srcP, cnt); +		FrmGetObjectBounds(srcP, cnt, &r); +		x = r.topLeft.x - 2; +		y = r.topLeft.y + 30; +		w = r.extent.x; +		h = r.extent.y; + +		FrmSetObjectPosition(srcP, cnt, x, y); + +		switch (FrmGetObjectType(srcP, cnt)) { +			case frmListObj: { +				// HOWTO : to auto link the list to a popup trigger the listID must be popupID + 1 if popup id +				// desn't exist the triggerID will be 0 and the list will be shown, but take care to not define +				// ListID - 1 object if you want to show the list. +				ListType *newP; +				Char **itemsP = LstGlueGetItemsText((ListType *)objP); +				FontID font = LstGlueGetFont((ListType *)objP); +				UInt16 visible = LstGetVisibleItems((ListType *)objP); +				UInt16 items = LstGetNumberOfItems((ListType *)objP); +				UInt16 trigger = id - 1; +				trigger = (FrmGetObjectIndex((FormType *)*dstP, trigger) != frmInvalidObjectId) ? trigger : 0; +				 +				LstNewList(dstP, id, x, y, w, h, font, visible, trigger); +				newP = (ListType *)FrmGetObjectPtr((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +				LstSetListChoices(newP, itemsP, items); +				FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +				break; +			} +			case frmFieldObj: { +				FieldAttrType attr; +				FontID font = FldGetFont((FieldType *)objP); +				UInt16 maxChars = FldGetMaxChars((FieldType *)objP); +				FldGetAttributes((FieldType *)objP, &attr); +				FldNewField(dstP, id, x, y, w, h, font, maxChars, attr.editable, attr.underlined, attr.singleLine, attr.dynamicSize, (JustificationType)attr.justification, attr.autoShift, attr.hasScrollBar, attr.numeric); +				FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +				break; +			} +			case frmControlObj: { +				const Char *textP = CtlGetLabel((ControlType *)objP); +				ControlStyleType style = CtlGlueGetControlStyle((ControlType *)objP); +				FontID font = CtlGlueGetFont((ControlType *)objP); +				ControlType *newP = CtlNewControl(dstP, id, style, textP, x, y, w, h, font, 0, true); +				FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +				switch (style) { +					case sliderCtl: +					{ +							UInt16 min, max, page, val; +							CtlGetSliderValues((ControlType *)objP, &min, &max, &page, &val); +							CtlSetSliderValues(newP, &min, &max, &page, &val); +							break; +					} +				} +				break; +			} +			case frmLabelObj: { +				const Char *textP = FrmGetLabel(srcP, id); +				FontID font = FrmGlueGetLabelFont(srcP, id); +				FrmNewLabel((FormType **)dstP, id, textP, x, y, font); +				FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id)); +				break; +			} +		} +	} + +	frmP = (FormType **)dstP;	// save new form ptr +	return errNone; +} + +void TabSetActive(FormType *frmP, TabType *tabP, UInt16 num) { +	UInt16 cnt, idx; +	RectangleType r; +	TabDataPtr dataP; + +	if (tabP->active == num) +		return; + +	dataP = &tabP->tabs[tabP->active]; + +	// hide active tab objects +	if (tabP->active != tabP->count) { +		for (cnt = dataP->first; cnt <= dataP->last; cnt++) { +			if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) +				FrmHideObject(frmP, idx); +		} +	} + +	// save active tab +	tabP->active = num; +	dataP = &tabP->tabs[num]; + +	// draw tab limit +	WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill)); +	WinDrawLine(1, 14, 154,14); +	WinDrawLine(1, 15, 154,15); +	WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); +	WinDrawLine(1, 28, 154,28); + +	// set tabs size +	for (cnt = 0; cnt < tabP->count; cnt++) { +		idx = FrmGetObjectIndex (frmP, (FrmGetFormId(frmP) + cnt + 1)); +		 +		if (idx != frmInvalidObjectId) { +			FrmGetObjectBounds(frmP, idx, &r); +			r.topLeft.y	= (num == cnt) ? 17 : 17; +			r.extent.y	= (num == cnt) ? 12 : 11; +			FrmSetObjectBounds(frmP, idx, &r); +			 +			if (num == cnt) { +				RGBColorType yellow = {0,255,192,0}; +				 +				r.topLeft.y	-= 1; +				WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); +				WinDrawRectangleFrame(simpleFrame, &r);  +				WinSetForeColor(WinRGBToIndex(&yellow)); +				WinDrawLine(r.topLeft.x, r.topLeft.y, r.topLeft.x + r.extent.x - 1, r.topLeft.y); +				FrmShowObject(frmP, idx); +			} else { +				WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame)); +				WinDrawRectangleFrame(simpleFrame, &r);  +			} +		} +	} + +	// show objects +	for (cnt = dataP->first; cnt <= dataP->last; cnt++) { +		if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId) +			FrmShowObject(frmP, idx); +	} +} diff --git a/backends/PalmOS/Src/forms/formtabs.h b/backends/PalmOS/Src/forms/formtabs.h new file mode 100644 index 0000000000..8109034463 --- /dev/null +++ b/backends/PalmOS/Src/forms/formtabs.h @@ -0,0 +1,21 @@ +#ifndef __FORMTABS_H__ +#define __FORMTABS_H__ + +typedef struct { +	FormPtr srcP; +	UInt16 first; +	UInt16 last; +} TabDataType, *TabDataPtr; + +typedef struct { +	UInt16 count, active; +	Coord width; +	TabDataPtr tabs; +} TabType, *TabPtr; + +TabType	*TabNewTabs		(UInt16 cnt); +void 	 TabDeleteTabs	(TabType *tabP); +Err 	 TabAddContent	(FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID); +void 	 TabSetActive	(FormType *frmP, TabType *tabP, UInt16 num); + +#endif
\ No newline at end of file  | 
