Kapitel 12 - Sammanfattning
När ska man använda en tabell och när ska man använda en lista?
Tabell - passar bättre för att ändra data på plats. Om man vill att
användaren ska kunna data i tabellform, så som Kalendern och Att Göra Listan är
uppbyggda, ska man använda tabeller.
|
|
|
| To Do listan i Palm OS | Kalendern i Palm OS |
Lista - Listor passar bättre om man vill att användaren ska kunna välja en sak. Om man vill ge användaren en lista med alternativ ska man använda listor.
Tabeller kan ses som behållare för andra element, som till exempel popup listor, text fält och check boxar. Tabellen tas om hand om Palm OS hanteraren. Tabellhanteraren har koll på alla element i tabellen med TableItemType strukten som beskrivs i bilden nedan.
itemType fältet bestämmer hur systemet ska rita ut varje element. Den bestämmer också vilken av de tre nästa fälten som ska användas med ett speciellt tabellelement. Olika tabellelement sparar nämligen olika sorters värden i fontID, intValue och ptr fälten. Vissa tabellelement typer tillåter att man ändrar värdet i tabellcellen medan andra bara är tillåtet att titta på.
Det finns många funktioner för att hämta och ändra värdena på en
tabellelementtyp (TableItemType).
tblSetItemStyle - Sätter värdet på itemType fältet för ett tabellelement
tblSetItemFont - Sätter värdet på fontID fältet för ett tabellelement
tblSetItemInt - Sätter värdet på intValue fältet för ett tabellelement
tblSetItemPtr - Sätter värdet på ptr fältet för ett tabellelement
tblGetItemFont - Hämtar värdet på fontID fältet för ett tabellelement
tblGetItemInt - Hämtar värdet på intValue fältet för ett tabellelement
tblGetItemPtr - Hämtarvärdet på ptr fältet för ett tabellelement
Funktionerna tar alla
Nedanstående tabell visar vilka värden som är möjliga för itemType och visar vilka som går att ändra och vilka av dem tre TableItemType fälten (fontID, intValue och ptr) som varje typ använder.
Här följer en liten beskrivning av ovanstående datatyper. Mer utförlig beskrivning finns på sidan 398-399
checkboxTableItem - är en enkel checkbox utan etikett. Användaren kan checka/avchecka checkboxen genom att trycka på rutan. Värdet sparas i intValue, 1 för checkad box och 0 för ocheckad box.
customTableItem - är till för om man vill ha egendefinierade objekt (gadgets) i tabellen.
dateTableItem - är en "display-only" typ som visar datum på formen månad/dag. Datumet sparas i intValue.
labelTableItem - är en textetikett som användaren inte kan ändra på. Om man väljer denna etikett eller ett textfält på samma rad som etiketten så "highlightas" etiketten. De flesta fälten i Adressboken tillhör denna typ av tabelltyp.
numericTableItem - visar värdet som är lagrat i intValue fältet. Värdet kan inte direkt ändras av användaren.
popupTriggerTableItem - tillåter användaren att välja ett val från listan som kommer upp när man trycker på popuplistan. Valet sparas som ett index i intValue. Denna tabelltyp innehåller en pekare till popuptriggerns associerade lista i ptr fältet.
textTableItem - är ett textfält inuti en tabellcell som går att ändra. Tabelltypens fontID fält sparar fonten och ptr fältet innehåller en pekare till den sträng som innehåller fältets text. Man måste tillhandahålla en call back funktion som laddar och sparar text i varje textTableItem cell.
textWithNoteTableItem - samma som textTableItem men den har också en "note" ikon vid högra sidan av cellen.
narrowTextTableItem - Ungefär samma som textTableItem men den har en viss mängd rum reserverat på höger sida i cellen. intValue innehåller antalet pixlar som reserveras. Denna plats kan vara bra om man vill visa en ikon eller liknande som till exempel "repeat" ikonen och alarm ikonen i Klendern. Förrutom en call back funktion för att ladda och spara text så ska narrowTestTableItem ha en call back funktion som ritar ut ikoner.
Initiera en tabell
Innan man kan implementera någon användarinteraktion med en tabell, eller ens använda tabellen för att visa data så måste man förbereda tabellen för användning. Att initiera en tabell innebär bland annat att berätta för tabellhanteraren vilken typ av data som ska finnas i varje cell och att sätta upp call back funktioner för att utföra rita ut vissa saker eller spara och hämta text från fält i tabellen. Man måste initiera en tabell innan systemet kan rita ut den på skärmen. Detta gör man smartast när man tar hand om formulärets frmOpenEvent. I nedanstående kod ges ett exempel på hur det kan gå till.
static Boolean MainFormHandleEvent(EventType *event)
{
Boolean handled = false;
FormType *form;
switch (event->eType) {
case frmOpenEvent:
form =
FrmGetActiveForm();
MainFormInit(form);
FrmDrawForm(form);
handled =
true;
// Other event handling omitted.
default:
break;
}
return handled;
}
I exemplet ovan är det funktionen MainFormInit som tar hand om att initiera tabellen. Koden för MainFormInit finns på sidorna 400-401.