Vývoj Windows Sidebar Gadgets Jaroslav Klíma, MFF UK 12.4.2007
Vývoj Windows Sidebar Gadgets Co jsou to Microsoft Gadgets? Sidebar gadget overview Nástroje pro vývoj Hello World Lokalizace Manifest Windows Sidebar API Instalace COM interop
Co jsou to Microsoft Gadgets? Jednoduché jednoúčelové „miniaplikace“ Na desktopu, na webu, na jiném zařízení V budoucnu: Univerzální gadgety Nyní: Windows SideShow gadgets Web gadgets Windows Sidebar gadgets
Device gadgets Windows SideShow (přídavný display na telefonu, na dálkovém ovládání a podobně)
Web gadgets někdy též Live Gadgets Windows Live Spaces – Live.com
Desktop gadgets Windows Sidebar
Sidebar gadget - přehled Postranní panel Umístění vlevo/vpravo, na konkrétní monitor Matoucí „On top of other windows“ Galerie gadgetů Inteligentní umístění gadgetů
Instalace gadgetů Distribuce ve formě souboru *.gadget Jde o *.zip nebo *.cab archiv s novou koncovkou Po double kliknutí se automaticky nainstaluje Umístění souborů gadgetu C:\Program Files\Windows Sidebar\Gadgets\ nebo C:\Users\{profile}\AppData\Local\Microsoft\Windows Sidebar\Gadgets\
Přidání gadgetu do postranního panelu Galerie gadgetů Systémové i uživatelské gadgety Preview image Detaily výrobce Double-click / drag & drop
Stavy gadgetu Docked/undocked Flyout Settings Více instancí V postranním panelu, nebo volně Flyout Po kliknutí může gadget „expandovat“ Settings Panel nastavení gadgetu Více instancí Každá má vlastní nastavení
Gadget z pohledu programátora DHTML soubor se styly a manifestem Obsah v HTML Skripty v JavaScriptu nebo VBscriptu Styly CSS Popis gadgetu v manifestu – gadget.xml Jméno, verze, autor, popis HTML soubor s obsahem gadgetu
Nástroje pro vývoj Notepad, PSPad... Microsoft Visual Studio + IE Syntax highlighting IntelliSense (*) Validace (*) Debugging (*)
Hello world! Manifest Obsah Jméno Verze Jméno souboru s obsahem Platorma Obsah HTML soubor
Lokalizace Jazyk podle jazykového balíčku OS :-/ Podadresáře v kořenovém adresáři Všechny soubory s relativní cestou se hledají v pořadí: 1) \cs-CZ\path\file.ext 2) \cs\path\file.ext 3) \en-US\path\file.ext 4) \en\path\file.ext 5) \path\file.ext
Manifest Povinné elementy Kódování souboru a verze XML <?xml...?> Jméno gadgetu <name> Verze gadgetu <version> Hostitelská aplikace <host> Jméno a verze Typ a umístění souboru s obsahem Požadované oprávnění
Nepovinné elementy: Údaje o autorovi, www, logo <author> <info url=“…”/> <logo src=“…”/> (48x48) </author> Copyright <copyright> Popis gadgetu <description> Ikony <icon> Náhled <defaultImage>
Obsah gadgetu Používáme HTML, CSS a JavaScript Na renderování se použije Internet Explorer Rozdíly proti web stránce: Gadget API Nefunkční alert() Debugging debugger;
Gadget je interaktivní Vznikají události - events Specifikujeme skripty které se pustí při vzniku událostí, například: <body onLoad=“LoadHandler()” onMouseEnter=“MouseEnterHandler()” onMouseLeave=“MouseLeaveHandler()” onClick=“ClickHandler()” >
Windows Sidebar API System.Debug System.Diagnostics System.Environment Metoda outputString(string) System.Diagnostics Metoda EventLog.writeEntry(string [, type]) type 0 = Success 1 = Error 2 = Warning 3 = Information System.Environment Metoda getEnvironmentVariable(varName)
System.Machine Properties: availableMemory, processorArchitecture, totalMemory Kolekce CPUs – informace o procesorech jde o kolekci, nikoliv o pole – používáme .item(i) namísto indexeru vlastnosti “name” a “usagePercentage” PowerStatus.* properties batteryCapacityRemaining batteryCapacityTotal batteryPercentRemaining batteryStatus enumBatteryStatus isBatteryCharging isPowerLineConnected Událost PowerStatus.powerLineStatusChanged
System.Network.Wireless Properties: address ipv6Address primaryDNSAddress secureConnection signalStrength ssid Events: connectionChanged signalStrengthChanged
System.Shell Metody: chooseFile(…), chooseFolder(…) - vrací System.Shell.Item drive(driveLetter) - vrací System.ShellDrive execute(...) - jako ShellExecute z Win API itemFromPath(path) – vrací System.Shell.Item knownFolder(path) – vrací System.Shell.Folder knownFolderPath(name) – vrací System.Shell.Folder refreshDesktop() – znovu načte ikony na desktop saveFileDialog(...) – vrací string, vybranou cestu
metoda itemFromFileDrop(…) – podpora Drag & Drop: System.Shell metoda itemFromFileDrop(…) – podpora Drag & Drop: <BODY ondragenter=event.returnValue = false" ondragover=event.returnValue = false" ondrop="fileDragDropped"> function fileDragDropped(event) { var sFile; var i=0; try while(System.Shell.itemFromFileDrop(event.dataTransfer, i).path) { sFile = System.Shell.itemFromFileDrop(event.dataTransfer, i).path; i++; } } catch(err) {} }
System.Shell.Folder metody: properties: copyHere(…) moveHere(…) newFolder(…) parse(path) properties: Self – vrací System.Shell.Folder Parent – vrací string s cestou
System.Shell.Item metody: properties: invokeVerb(verb) – „open“, „edit“... metadata() – např. pro obrázky rozměry, dpi... properties: isFile isFileSystem isFolder isLink link modifyDate name path SHFolder size type
Ostatní objekty Windows Sidebar API: System.ContactManager System.MessageStore System.Shell.RecycleBin – event i metody System.Sound – beep() a playSound() System.Time – getLocalTime(), timeZones System.Gadget...
Gadget API – System.Gadget události: onDock, onUndock onShowSettings, onSettingsClosing, onSettingsClosed visibilityChanged
metody: beginTransition() endTransition(transitionType, seconds) System.Gadget.TransitionType.morph System.Gadget.TransitionType.none close()
properties: background – cesta k obrázku s pozadím docked - dock state (true nebo false) name – jméno gadgetu z manifestu opacity – průhlednost v procentech path – cesta k HTML s obsahem gadgetu platformVersion - verze OS settingsUI – cesta k HTML nastavení gadgetu version – verze gadgetu z manifestu visible – viditelnost gadgetu (true nebo false)
System.Gadget.Sidebar událost onDockSideChanged property dockSide
System.Gadget.Flyout události onHide a onShow properties: file – cesta k HTML s obsahem flyoutu document – vrací objekt HTML document show – indikuje jestli je flyout zobrazen
System.Gadget.Settings metody pro čtení a zápis persistentních nastavení nastavení jsou specifická pro každou instanci gadgetu write(name), writeString(name) read(name), readString(name)
System.Gadget.Settings.closingEvent při ošetření události onSettingsClosing: System.Gadget.onSettingsClosing = HandleSettingsClosing; function HandleSettingsClosing(e) { ... }
System.Gadget.Settings.closingEvent properties: e.closeAction System.Gadget.Settings.closeAction.commit System.Gadget.Settings.closeAction.cancel e.action - .commit nebo .cancel e.cancel – nastavíme na true nebo false e.cancellable – můžeme nastavit cancel na true?
Grafické objekty podobně jako v ASP.NET, existují nové objekty kterých vlastnosti můžeme nastavovat jak v skriptu, tak deklarativně nové elementy html: <g:background> = objekt gbackground <g:image> = objekt gimage objekt gText (?)
Grafické objekty - pozadí <g:background> document.body.g.background – nefunguje musíme přiřadit ID a pak najít podle něj properties: attributes: src, rotation, opacity blur, brightness, softEdge left, top, height, width metody: addGlow, addShadow addImageObject, addTextObject, removeObjects move
Grafické objekty – obrázky <g:image> var image = document.getElementById(id); properties: jako gbackground metody: addGlow(color, radius, alpha) addShadow(color, radius, alpha, deltaX, deltaY) addImageObject(path, offsetX, offsetY) addTextObject(text, font, size, color, offsetX, offsetY) removeObjects() – všechny objekty a efekty move(offsetX, offsetY)
Tipy Nastavit padding a margin u <body> na 0px Automatický refresh var timer = window.setInterval(method, interval); Knihovna Math zaokrouhlování a podobně
COM interop můžeme použít zaregistrované objekty ActiveX var axObject = new ActiveXObject(„Namespace.Class"); axObject.DoSomething()
Zdroje Galerie gadgetů: Windows Sidebar Reference http://microsoftgadgets.com/ http://gallery.live.com/ Windows Sidebar Reference http://msdn2.microsoft.com/en-us/library/aa965850.aspx Články pro začátečníky i pokročilé http://www.codeproject.com/gadgets