Premium

Získejte všechny články
jen za 89 Kč/měsíc

Vyhledávání v adresáři Palm Pilota 1/2

V databázi aplikace AddressBook na počítači Palm Pilot má uživatel většinou uložen svůj osobní adresář: adresy, telefony, čísla pagerů a podobná data. Od ostatních aplikací pak zcela samozřejmě očekává, že budou schopny v osobním adresáři vyhledat například e-mailovou adresu nebo číslo mobilního telefonu.

Příkladem tohoto propojení je tlačítko Lookup ve formuláři pro výběr adresy elektronické pošty. Po stisknutí tlačítka Lookup se na displeji zobrazí seznam všech e-mailových adres v adresáři a uživatel může jednu nebo více těchto adres vložit do seznamu adresátů.

Pokud píšete vlastní aplikaci, která potřebuje pracovat s daty z centrálního adresáře aplikace AddressBook, je možné použít funkci PhoneNumberLookup(). Parametrem této funkce je ukazatel na datovou strukturu políčka pro vstup textu FieldPtr. Po zavolání se funkce phoneNumberLookup() pokusí vyhledat text, který byl zapsán v tomto políčku, v databázi aplikace AddressBook.

Pokud je vyhledán pouze jeden záznam, je do tohoto políčka zkopírováno jméno a telefonní číslo nalezeného kontaktu z adresáře. Pokud zadání odpovídá více záznamů, je zobrazen formulář se seznamem kontaktů, ze kterého může uživatel jeden vybrat. Jméno a telefonní číslo vybraného kontaktu z adresáře je poté obdobně vloženo do políčka.

Tato funkce nevyžaduje žádné další parametry a její chování není možné modifikovat. Pokud potřebujete, aby vaše aplikace prohledávala adresář jiným způsobem, musíte databázi aplikace AddressBook otevřít, nalézt odpovídající záznamy a vložit je do seznamu voleb nebo do tabulky.

V jednom svém programu jsem tento úkol řešil a podělím se s vámi o své zkušenosti s títo přístupem. Nejprve musíme nalézt a otevřít databázi aplikace AddressBook pomocí standardní funkce PalmOS pro otevření databáze a konstant, označujících tvůrce a typ databáze. Tvůrcem databáze je aplikace AddressBook (kód 'addr') a typ databáze je 'DATA'.

#define addrDBType     'DATA'
#define addrDBCreator  'addr'

gDB = DmOpenDatabaseByTypeCreator(addrDBType, addrDBCreator, dmModeReadOnly);

Konstanty addrDBCreator a addrDBType obsahují jednoznačnou identifikaci aplikace AddressBook a typ její databáze, ve které jsou obsažena data o kontaktech. Každý kontakt je uložen v jednom záznamu databáze a databáze je již setříděná tím způsobem, který uživatel preferuje.

Data jsou v jednotlivých záznamech aplikace AddressBook uložena velmi úsporně. Na začátku kždého záznamu o kontaktu (odpovídá jedné položce adresáře) je hlavička, která nese zejména informaci o tom, které položky záznamu (jméno, adresa, telefon) jsou vyplněné.

Po této hlavičce následují ve stanoveném pořadí jednotlivé vyplněné položky záznamu (ale jen ty, které byly uvedeny v hlavičce) ukončené znakem '\0'. Tento způsob komprimovaného uložení záznamů má za cíl maximální možnou úsporu paměti zabrané záznamem. Hlavička každého záznamu má následující formát:

typedef struct AddrPackedDBRecord
{
	AddrOptionsType options;
	AddrDBRecordFlags flags;
	UInt8 companyFieldOffset;
} AddrPackedDBRecord;

V jednom záznamu v adresáři je uvedeno pět volitelných políček, která mohou obsahovat telefon, adresu elektronické pošty, číslo pageru a podobně. Co bude zobrazeno v těchto políčkách, závisí zcela na uživateli. Podobně může uživatel určit, které z těchto políček bude zobrazeno v seznamu. V proměnné options jsou uloženy kódy jednotlivých zobrazených políček:

#define workLabel	0
#define homeLabel	1
#define faxLabel	2
#define otherLabel	3
#define emailLabel	4
#define mainLabel	5
#define pagerLabel	6
#define mobileLabel     7

typedef union {
	struct {
		unsigned reserved:8;
		unsigned displayPhoneForList:4; 
		unsigned phone5:4;			   
		unsigned phone4:4;
		unsigned phone3:4;
		unsigned phone2:4;
		unsigned phone1:4;
	} phones;
	UInt32 phoneBits;
} AddrOptionsType;

V bitovém poli flags je uložena informace o tom, která políčka záznamu jsou vyplněna:

typedef union { 					 
	struct {
			unsigned reserved	 :13;
			unsigned note		:1; // poznámka
			unsigned custom4 	:1; // volitelné 4
			unsigned custom3 	:1; // volitelné 3
			unsigned custom2 	:1; // volitelné 2
			unsigned custom1 	:1; // volitelné 1
			unsigned title		:1; // titul
			unsigned country 	:1; // země
			unsigned zipCode 	:1; // kód města
			unsigned state		:1; // stát
			unsigned city		:1; // město
			unsigned address 	:1; // adresa
			unsigned phone5		:1; // pozice 5
			unsigned phone4		:1; // pozice 4
			unsigned phone3		:1; // pozice 3
			unsigned phone2		:1; // pozice 2
			unsigned phone1		:1; // pozice 1
			unsigned company 	:1; // společnost
			unsigned firstName	:1; // jméno
			unsigned name		:1; // příjmení: bit 0 
	} bits; 						 
	UInt32 allBits; 				 
} AddrDBRecordFlags; 				  

Má-li příslušný bit pole flags logickou hodnotu 1, je v datech následujících po hlavičce přítomen příslušný řetězec. Každý řetězec je ukončen znakem '\0'. Prvním řetězcem, který za hlavičkou může následovat, je příjmení (je-li nastaven prvek name), po něm jméno (je-li nastaven prvek firstName) a tak dále až k poznámce.


Příště si uvedeme příklad, jak prakticky použít databázi aplikace AddressBook v našem programu. Na příkladu ukážeme základní algoritmy potřebné pro zacházení s daty v seznamu kontaktů.

  • Nejčtenější

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

Toto mohl být nevídaný smartphone. Myšlenku však nakonec poslali k vodě

25. dubna 2024

S takovým smartphonem bychom už nikdy nemuseli řešit, že se zpomaluje, nemá dostatek paměti či je...

Samsung má povedenou stylovku. Zkusí to s ní na trhu, kde se mu nedaří

24. dubna 2024

Samsung po velmi dlouhé době oprášil modelovou řadu Galaxy C a představil stylový smartphone se...

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Manželé Babišovi se rozcházejí, přejí si zachovat rodinnou harmonii

Podnikatel, předseda ANO a bývalý premiér Andrej Babiš (69) s manželkou Monikou (49) v pátek oznámili, že se...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...