Dajbych.net


Programování gadgetů

, 9 minut čtení

Ač se může zdát, že Win­dows Side­bar je něco nového a složitého, je to jen starý Ac­tive Desk­top do­pl­něný o tři nové tagy a API, které se stará o uk­ládání nas­tavení, hlášení změny rozvržení a poskytování zák­ladních sys­té­mových in­for­mací. Gad­get je tedy HTML stránka na ploše zo­brazená já­drem In­ter­net Ex­ploreru běžícím v pro­cesu side­bar.exe.

Jak se liší we­bová stránka zo­brazená v In­ter­net Ex­ploreru od té, která je zo­brazená jako gad­get? V pří­padě Ac­tive Desk­top uve­deném ve Win­dows 95 byl rozdíl malý. Stránka na ploše měla šedý rámeček místo okna In­ter­net Ex­ploreru. Win­dows Side­bar nám místo rámečku zo­brazí něko­lik pod­půrných tlačítek. Všechny in­stalo­vané gad­gety v počí­tači jsou zo­brazeny v ga­lerii bez oh­ledu na to, zda gad­get je či není na ploše. Z této ga­lerie se na plochu přetáhne a tím i spustí.

Vzhled

Side­bar nám umožňuje využít dvou ve­likostí gad­getu. Ve Win­dows Vista se ve­likost přepí­nala po­dle toho, zda byl gad­get zadokován v pos­tran­ním pan­elu, nebo plaval na ploše. Ve Win­dows 7 volí mezi ve­likostmi uži­va­tel po­mocí pos­tran­ního tlačítka. Tyto pos­tranní tlačítka se zo­brazuje side­bar vpravo od gad­getu. Můžou tam být až tři – zavření, změna ve­likosti a nas­tavení gad­getu spolu s místem, za které lze gad­get přetáh­nout ji­nam. V ga­lerii má každý gad­get svůj obrázek, obrázek výrobce, číslo verze a ně­jaký ten popisek. Gad­get se in­staluje pře­tažením na plochu. Během pře­ta­hování se ve skutečnosti zo­brazuje jen obrázek. Samotná HTML stránka je zo­brazena až po umístění.

Gad­get může mít i své pos­tranní okno oz­načo­vané jako fly­out. Ne­jčastěji se používá pro zo­brazení po­drob­nějších in­for­mací. Může ale způ­sobo­vat omezení v pří­padě, pokud ho vyvoláme po kliknutí na ně­jaký prvek. Gad­get lze přetáh­nout i tažením za jeho ob­sah vyjma oblastí, na kterých zachytáváme javascrip­tovou událost On­MouseClick.

Jedn­oduché nas­tavení us­nadňuje side­bar tak, že stačí jen nas­tavit Sys­tem.Gad­get.set­t­ing­sUI na HTML stránku ob­sahu­jící for­mulář s nas­tavením. For­mulářová stránka musí po otevření ini­cializovat prvky na nas­tavené hod­noty a při uzavírání, při kterém nastane událost Set­t­ings.ClosingEvent, uložit hod­noty for­muláře do nas­tavení. V samot­ném gad­getu pak také nas­tane událost Set­t­ings.ClosingEvent, kterou je do­bré zpracovat a znovu načíst hod­noty z nas­tavení.

Struktura

Gad­get tvoří něko­lik souborů, které jsou za­baleny v ZIP archivu a příponou gad­get. Ste­jný přístup má i for­mát Of­fice Open XML. V kořen­ovém adresáři je umístěn sou­bor gad­get.xml, urču­jící který HTML sou­bor se má in­ter­pre­to­vat jako ob­sah okna gad­getu. Dále ob­sahuje verzi gad­getu, popis, in­for­mace o au­torovi a verzi API, pro kterou je gad­get navržený. Je možné vytvořit více jazykových verzí umístěním každého gad­get.xml manifestu do samostat­ného adresáře po­j­men­o­vaného po­dle přís­lušného kódu jazyka (cs-CZ, en-US, …).

<html> <head> <title>Můj gadget</title> <script src="script.js" type="text/javascript"></script> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body scroll="no" unselectable="on" id="body" onload="init();"> <g:background id="imgBackground"> <div id="DockedModeDisplayArea"></div> <div id="UnDockedModeDisplayArea"></div> </g:background> </body> </html>

V hlavní části gad­getu se vzá­jemně mění viditel­nost dvou hlavních částí po­dle uži­vatelem zv­olené ve­likosti. Atribut un­s­e­lectable vypíná oz­načování textu myší. Pokud se od­kazům nas­taví atribut hide­fo­cus, ne­zo­brazí se jeho tečko­vané rá­mování, když mají fo­cus.

API

Win­dows Side­bar posky­tuje služby, které jsou přís­tupné přes ob­jekt Sys­tem. Přes tento ob­jekt může gad­get reago­vat na změnu ve­likosti, na připo­jení či od­po­jení od sítě, uložit nas­tavení a tak podobně.

Zajímavé objekty

System.ContactManager

Ob­sahuje kolekci kon­taktů ap­likace Win­dows Mail.

System.Machine

Posky­tuje údaje o paměti počí­tače a jed­notlivých já­drech pro­ce­soru.

System.Machine.PowerStatus

Posky­tuje údaje o stavu ba­terie.

System.MessageStore

Ob­sahuje názvy složek pošty ap­likace Win­dows Mail. Pro kaž­dou složku posky­tuje počet zpráv a počet nepřečtených zpráv.

System.Network.Wireless

Ob­sahuje in­for­mace o SSID, síle signálu a DNS serverech bez­drá­tového připo­jení.

System.Shell.RecycleBin

Ob­sahuje údaje o stavu od­pad­kového koše a me­tody k jeho vyprázd­nění.

Zajímavé vlastnosti

window.navigator.onLine

Vrací true, pokud je počí­tač připo­jen k síti, ji­nak false.

System.Gadget.Flyout.document

Vrací DOM pos­tran­ního okna gad­getu.

System.Gadget.Flyout.file

Určuje cestu k HTML souboru před­s­tavu­jící ob­sah pos­tran­ního okna gad­getu.

System.Gadget.Flyout.show

Určuje či vrací, je-li pos­tranní okno gad­getu zo­brazeno.

System.System.Gadget.settingsUI

Určuje stránku, která před­s­tavuje okno s nas­tavením.

Zajímavé metody

System.Gadget.Settings.readString

Čte řetězec uložený v nas­tavení.

System.Gadget.Settings.writeString

Uloží do nas­tavení řetězec pod daným klíčem. Klíč může být dlouhý až 1024 znaků, hod­nota pak až 2048 znaků.

System.Debug.outputString

Vypíše řetězec na chy­bový výstup, který si pak můžeme přečíst ve Vi­sual Studiu, pokud ladíme připo­jeni k pro­cesu sidebar.exe.

System.Diagnostics.EventLog.writeEntry

Zapíše událost do sys­té­mového logu přís­lušné úrovně. Jako zdroj je uve­den Win­dows Side­bar.

System.Environment. getEnvirenmentVariable

Po­mocí této me­tody lze zjis­tit hod­notu proměnné prostředí op­er­ačního sys­tému.

System.Shell.execute

Spustí ap­likaci či provede skript.

Zajímavé události

document.body.online

Nas­tane, pokud se počí­tač připojí k síti.

document.body.offline

Nas­tane, pokus se počí­tač od­pojí od sítě.

System.Settings.ClosingEvent

Nas­tane, pokud uži­va­tel zavřel okno s nas­tavením gad­getu. Vhodná chvíle pro pro­jevení změn.

System.Gadget.Flyout.onHide

Nas­tane, pokud uži­va­tel scho­val pos­tranní okno gad­getu.

System.Gadget.Flyout.onShow

Nas­tane, pokud uži­va­tel zo­brazil pos­tranní okno gad­getu.

System.Machine.PowerStatus.powerLineStatusChanged

Nas­tane, pokud do­jde ke změně způ­sobu napá­jení počí­tače.

Rozšiřující tagy

Kromě javascrip­tového ob­jektu Sys­tem máme k dis­pozici i tři rozšiřu­jící XHTML tagy. Je­den pro pozadí, druhý pro obrázek a třetí pro text. Všechny tagy mají nako­lik za­jí­mavých atributů – blur, opac­ity a ro­ta­tion určující roz­mazání, průh­led­nost a na­točení. Přes JavaScript lze ještě po­mocí me­tod ad­d­Glow a add­Shadow nas­tavit barev­nou zář re­spek­tive stín.

Atributg:back­groundg:im­ageg:textPopis
alignXzarovnání textu
blurXXXzáře textu
brig­nessXXXjas textu
colorXbarva textu
fontXfont textu
font­sizeXve­likost textu
heightXXvýška bloku v pix­elech
leftXXod­sazení bloku zl­eva v pix­elech
opac­ityXXXprůh­led­nost bloku
ro­ta­tionXXXotočení bloku ve stup­ních
soft­EdgeXXzaoblení rohů
srcXXcesta k souboru obrázku
topXXod­sazení bloku zhora v pix­elech
valueXzo­brazený text
widthXXšířka bloku v pix­elech

g:background

g:back­ground tag se vk­ládá ihned do el­e­mentu body. Přes JavaScript lze nas­tavit obrázek přes vlast­nost Sys­tem.Gad­get.back­ground. Pod­porovány jsou for­máty JPEG, BMP, GIF a PNG. Pouze PNG pod­poruje polo­průh­led­nost (al­pha chan­nel trans­parency).

g:image

g:im­age před­s­tavuje obrázek. Měl by být od­sazen ale­spoň o je­den pixel od okraje gad­getu, ji­nak může na­s­tat chyba v jeho vykreslení. Atribut src určuje cestu k obrázku. Ste­jně jako u pozadí jsou pod­porovány for­máty JPEG, BMP, GIF a polo­průh­led­nost pod­poru­jící PNG.

g:text

g:text je rozšířením dobře známého tagu p. Text lze obo­hatit ro­zličnými efekty. Od Win­dows 7 je možné ex­plic­itně určit ve­likost textu přes el­e­ment au­toscaleDPI v man­i­festu.

GIMAGE protokol

Pro efek­tivnější načítání obrázků využí­va­jící Win­dows cache slouží pro­tokol GIM­AGE. Jeho použití vy­padá násle­dovně:

var src = "gimage:///" + System.Gadget.path + "\\images\\mujobrazek.png"; var img = System.Gadget.background.addImageObject(src 2, 2); img.id = "mujobrazek";

Ne­jprve se ses­taví cesta k obrázku, který je umístěn v archivu gad­getu. Poté se do el­e­mentu g:back­ground vloží nový el­e­ment g:im­age od­sazený o 2 pix­ely od okrajů. Me­toda vrátí ukaza­tel na něj. Nakonec se nas­taví jeho iden­ti­fiká­tor.

Silverlight

Do gad­getu lze vložit také Sil­verlight ob­jekt a využít vešk­eré tamní po­hodlí. Pro­tokol x-gad­get od­kazuje přímo do kořen­ové složky archivu.

<object width="100%" height="100%" data="data:application/x-silverlight-2," type="application/x-silverlight-2"> <param name="source" value="x-gadget:///ClientBin/SilverlightGadget.xap" /> </object>

Ladění

Během vývoje gad­getu do­poručuji udržo­vat jeho funkčnost jak v prostředí side­baru, tak i v In­ter­net Ex­ploreru. Vytvoření archivu, od­s­tranění staré a in­sta­lace nové verze s následným připo­jením k pro­cesu side­bar.exe je pro první fázi vývoje velice zd­louhavé. Tato me­toda je vhodná až pro kon­trolní mon­i­tor­ing čin­nosti, avšak pro kla­sický vývoj slouží lépe Nástroje pro vývo­jáře dos­tupné v IE pod klávesou F12. Pokud doje k chybě v JavaScriptu, zvýrazní se řádek, na kterém chyba nastala. V pravé části okna pak můžeme vidět místní hod­noty, zá­sob­ník volání nebo spouštět javascrip­tové příkazy. Kamko­liv do javascrip­tového kódu lze umístit break­point.

Ve Vi­sual Studiu se po připo­jení k pro­cesu side­bar.exe zo­brazí výstup, který gad­get posílá po­mocí me­tody Sys­tem.De­bug.out­put­String. Lo­go­vat lze do sys­té­mového logu přes me­todu Sys­tem.Di­ag­nos­tics.Event­Log.wri­teEn­try.