commit e1bc3fe8e22d370aed9691f36a463e922faa9969 Author: Wade Wegner Date: Sat Jan 21 22:35:41 2012 -0800 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78b1481 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +bin/ +obj/ +*.suo +#ignore thumbnails created by windows +Thumbs.db +#Ignore files build by Visual Studio +*.build.csdef +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +*.resharper.user +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +App_Data/ diff --git a/Microsoft Permissive License.rtf b/Microsoft Permissive License.rtf new file mode 100644 index 0000000..b5430bc --- /dev/null +++ b/Microsoft Permissive License.rtf @@ -0,0 +1,230 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f36\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} +{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f51\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f52\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\f54\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f55\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f56\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f57\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} +{\f58\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f59\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f401\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f402\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\f404\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f405\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f408\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f421\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;} +{\f422\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f424\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f425\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f426\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);} +{\f427\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f428\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f429\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f430\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);} +{\f441\fbidi \fswiss\fcharset238\fprq2 Verdana CE;}{\f442\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr;}{\f444\fbidi \fswiss\fcharset161\fprq2 Verdana Greek;}{\f445\fbidi \fswiss\fcharset162\fprq2 Verdana Tur;} +{\f448\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic;}{\f449\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; +\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; +\red192\green192\blue192;}{\*\defchp }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 +\ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 +\f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat \spriority9 heading 1;}{\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 +\f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink16 \sqformat \spriority9 heading 2;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 +\additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\f36\fs32\kerning32 \sbasedon10 \slink1 \slocked \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0 \b\i\f36\fs28 \sbasedon10 \slink2 \slocked \spriority9 +Heading 2 Char;}{\s17\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0 \f38\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused \styrsid7424395 Balloon Text;}{\*\cs18 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \f38\fs16 \sbasedon10 \slink17 \slocked \ssemihidden \styrsid7424395 Balloon Text Char;}{\*\cs19 \additive +\rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid4538388 annotation reference;}{\s20\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs20\alang1025 \ltrch\fcs0 +\f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 \slink21 \ssemihidden \sunhideused \styrsid4538388 annotation text;}{\*\cs21 \additive \rtlch\fcs1 \af1 \ltrch\fcs0 \f1 +\sbasedon10 \slink20 \slocked \ssemihidden \styrsid4538388 Comment Text Char;}{\s22\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs20\alang1025 \ltrch\fcs0 \b\f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon20 \snext20 \slink23 \ssemihidden \sunhideused \styrsid4538388 annotation subject;}{\*\cs23 \additive \rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f1 \sbasedon21 \slink22 \slocked \ssemihidden \styrsid4538388 Comment Subject Char;}}{\*\rsidtbl \rsid213160 +\rsid284417\rsid417145\rsid481196\rsid551334\rsid723397\rsid786968\rsid1382437\rsid1390003\rsid1521043\rsid1530955\rsid1708989\rsid1783212\rsid1903779\rsid2431884\rsid3165084\rsid3416120\rsid3419781\rsid3754103\rsid3768194\rsid3831520\rsid4538130 +\rsid4538388\rsid4552277\rsid4680449\rsid4729674\rsid4865270\rsid4987534\rsid5128131\rsid5186068\rsid5864350\rsid6186044\rsid6311778\rsid6384507\rsid6434687\rsid6561471\rsid6910344\rsid6947552\rsid7033180\rsid7424395\rsid7682010\rsid7690850\rsid7744081 +\rsid8151618\rsid8196281\rsid8198206\rsid8342723\rsid8350925\rsid8722561\rsid8852349\rsid8934457\rsid8944153\rsid9573035\rsid9635349\rsid9638545\rsid9724918\rsid10044820\rsid10095979\rsid10228618\rsid10449644\rsid10494075\rsid11166278\rsid11166751 +\rsid11285353\rsid11366513\rsid11494815\rsid11932529\rsid12061202\rsid12533699\rsid12536400\rsid12916885\rsid13264736\rsid13322831\rsid13440556\rsid13455614\rsid13597357\rsid13768671\rsid14097590\rsid14157399\rsid14229900\rsid14305025\rsid14314735 +\rsid14436896\rsid14565916\rsid14572556\rsid14688892\rsid14752433\rsid14904394\rsid15086147\rsid15749945\rsid15814398\rsid15927751\rsid16071312\rsid16126175\rsid16279402\rsid16391569\rsid16404661\rsid16452939\rsid16537688\rsid16606866\rsid16674896} +{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\title Microsoft Permissive License (Ms-PL)}{\author Jonr}{\operator Dean Johnson}{\creatim\yr2007\mo2\dy23\hr15\min10} +{\revtim\yr2007\mo2\dy23\hr15\min10}{\printim\yr2006\mo9\dy28\hr8\min46}{\version2}{\edmins1}{\nofpages1}{\nofwords404}{\nofchars2221}{\*\company Microsoft}{\nofcharsws2620}{\vern32859}{\*\saveprevpict}}{\*\userprops {\propname _NewReviewCycle}\proptype30 +{\staticval }}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}{\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\hyphcaps0\horzdoc\dghspace120\dgvspace120 +\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\splytwnine\ftnlytwnine\htmautsp\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot10494075 +\newtblstyruls\nogrowautofit\utinl \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (} +{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar +\s1\ql \li0\ri0\sb180\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 +\fs31\cf1\kerning36\insrsid10494075\charrsid14688892 Microsoft}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 Permissive}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid14688892 }{\rtlch\fcs1 \af1\afs31 +\ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 License (Ms-PL}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid4552277 )}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 +\par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs17 \ltrch\fcs0 +\b\f40\fs17\insrsid10494075 +\par This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. +\par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6910344 +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 +\b\f40\fs23\insrsid10494075 1. Definitions +\par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 The terms \'93reproduce,\'94 \'93reproduction}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7744081 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 \'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid551334 \'93derivative works,\'94}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7744081\charrsid7744081 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 and \'93distribution\'94 have the same meaning here as under +{\*\xmlopen\xmlns2{\factoidname country-region}}{\*\xmlopen\xmlns2{\factoidname place}}U.S.{\*\xmlclose}{\*\xmlclose} copyright law. +\par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 A \'93contribution\'94 is the original software}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid4865270 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 }{\rtlch\fcs1 +\af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid11932529 or}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 any additions or changes to the software. +\par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334 A \'93c}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334\charrsid551334 ontributor\'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 is}{\rtlch\fcs1 \af40\afs17 +\ltrch\fcs0 \f40\fs17\insrsid12536400\charrsid551334 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334\charrsid551334 any person that }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 +distributes its contribution under this license.}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14229900 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid4729674\delrsid4729674 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 \'93Licensed patents +\'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 are }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 a contributor\rquote s }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 patent claims }{\rtlch\fcs1 +\af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 that }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 read directly on }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 its contribution.}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\insrsid14229900\charrsid14229900 +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 +\b\f40\fs23\insrsid5186068 +\par }{\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid10494075 2. Grant of Rights +\par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 each contributor }{\rtlch\fcs1 \af40\afs17 +\ltrch\fcs0 \f40\fs17\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 , prepare derivative works of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 and distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 or any derivative works that you create. +\par (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid9724918 each contributor }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free license under }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15814398 its }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 licensed patents + to make, have made, use, sell, offer for sale, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1390003 import, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 and/or otherwise dispose of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid8944153 its contribution in }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software or derivative works of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid8944153 the contribution in }{\rtlch\fcs1 \af40\afs17 +\ltrch\fcs0 \f40\fs17\insrsid10494075 the software. +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 +\b\f40\fs23\insrsid5186068 +\par }{\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid10494075 3. Conditions and Limitations +\par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid1530955 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 (A) No Trademark License- This license does not grant you rights to use }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1708989 any contributors\rquote }{ +\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 name, logo, or trademarks. +\par (B) If you }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid8934457 bring a patent claim against }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10095979 any contributor}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 + over patents that you }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6947552 claim }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 are }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6947552 infringe}{\rtlch\fcs1 +\af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 d by}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software, your }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 patent }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075 license}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 from such contributor}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 to the software ends automatically. +\par (C) If you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3165084 any portion of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 +the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +\par (D) If you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15749945 any portion of the }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 software in source code form}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid14904394 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 you may do so only under this license}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid14904394 by including }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 a complete copy of this license with your distribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 .}{\rtlch\fcs1 \af40\afs17 +\ltrch\fcs0 \f40\fs17\insrsid10494075 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 I}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 f you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15749945 +any portion of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software in compiled or object code form}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid16452939 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 + you may only do so under a license that complies with this license. +\par }\pard \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14572556 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 (E) The software is licensed \'93as-is.\'94 You bear the risk of using it. }{ +\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid284417 The contributors }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 +give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid1783212 the contributors }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 +\f40\fs17\insrsid10494075\charrsid14572556 +\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 +72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 +2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b +44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 +065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 +00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 +84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc +52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 +bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 +656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c +070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 +29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65 +312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8 +a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04 +98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c +94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471 +7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671 +9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1 +e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5 +193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1 +17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2 +8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6 +6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a +668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847 +bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e +16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b +5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0 +8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2 +c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966 +0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b +7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb +9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0 +088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf +8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26 +ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0 +28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6 +345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93 +b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30 +254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74 +68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24 +51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198 +720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528 +a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000 +000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000 +002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468 +656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000 +00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000 +00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 1;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 2;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 3;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 5;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 6;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 7;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 8;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 9; +\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid; +\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography; +\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000d070 +a7c59f57c701feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..093dd92 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +

sdkLocalDatabaseCS_WithAzureTables

+

This repository contains a sample that shows how to modify the Windows Phone sdkLocalDatabaseCS sample to use Windows Azure tables instead of the local database. +

+

Getting Started

+

Dependencies

+ +

Running the sample

+

By default this sample uses the local storage emulator that ships with the SDK. Before running be sure to start the storage emulator. +

    +
  1. Click Start, point to All Programs, and then click Windows Azure Emulators - November 2011.
  2. +
  3. Click Storage Emulator.
  4. +
\ No newline at end of file diff --git a/packages/Phone.Storage.1.0.1/Phone.Storage.1.0.1.nupkg b/packages/Phone.Storage.1.0.1/Phone.Storage.1.0.1.nupkg new file mode 100644 index 0000000..0b164a7 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/Phone.Storage.1.0.1.nupkg differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudBlobInterfaces.png b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudBlobInterfaces.png new file mode 100644 index 0000000..1d19eb1 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudBlobInterfaces.png differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudQueueInterfaces.png b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudQueueInterfaces.png new file mode 100644 index 0000000..f07bd09 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudQueueInterfaces.png differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudStorageClientResolver.png b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudStorageClientResolver.png new file mode 100644 index 0000000..c658297 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudStorageClientResolver.png differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudTableInterfaces.png b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudTableInterfaces.png new file mode 100644 index 0000000..c6f3b16 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/CloudTableInterfaces.png differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/Site.css b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/Site.css new file mode 100644 index 0000000..75495ba --- /dev/null +++ b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/Site.css @@ -0,0 +1,329 @@ +/*---------------------------------------------------------- +The base color for this template is #5c87b2. If you'd like +to use a different color start by replacing all instances of +#5c87b2 with your new color. +----------------------------------------------------------*/ +body +{ + background-color: #ffffff; + font-weight: normal; + font-size: 15px; + font-family: "Segoe UI" , "Helvetica" , "Tahoma" , "Arial"; + margin: 0; + padding: 0; + color: #696969; +} + +a +{ + color: #3387dd; +} + +a:link +{ + color: #3387dd; + text-decoration: none; +} + +a:visited +{ + color: #3387dd; + text-decoration: none; +} + +a:hover +{ + color: #1d60ff; + text-decoration: none; +} + +p, ul +{ + margin-bottom: 20px; + line-height: 1.6em; +} + +/* HEADINGS +----------------------------------------------------------*/ +h1, h2, h3, h4, h5, h6 +{ + font-size: 1.5em; + color: #000; +} + +h1 +{ + font-size: 2em; + padding-bottom: 0; + margin-bottom: 0; +} + +h2 +{ + padding: 0 0 10px 0; + font-size: 2.8em; + font-weight: lighter; + color: #6cbd45; + margin-top: 0px; + margin-bottom: 0px; + padding-bottom: 0px; +} + +h3 +{ + font-size: 22px; + font-weight: normal; + color: #939896; + margin-bottom: 4px; +} + +h4 +{ + font-size: 1.1em; +} + +h5, h6 +{ + font-size: 1em; +} + +/* this rule styles

tags that are the +first child of the left and right table columns */ +.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2 +{ + margin-top: 0; +} + +/* PRIMARY LAYOUT ELEMENTS +----------------------------------------------------------*/ + +/* you can specify a greater or lesser percentage for the +page width. Or, you can specify an exact pixel width. */ +.page +{ + width: 90%; + margin-left: auto; + margin-right: auto; +} + +#header +{ + position: relative; + margin-bottom: 0px; + color: #000; + padding: 0; +} + +#header h1 +{ + font-weight: normal; + padding: 5px 0px 0px 47px; + margin: 0; + color: #000; + border: none; + line-height: 2em; + font-size: 24px !important; +} + +#main +{ + padding: 0px 0px 0px 0px; + background-color: #fff; + margin-top: 0px; + margin-bottom: 10px; +} + +#footer +{ + color: #999; + padding: 10px 0; + text-align: center; + line-height: normal; + margin: 0; + font-size: .9em; +} + +/* TAB MENU +----------------------------------------------------------*/ +ul#menu +{ + padding: 0 0 2px; + position: relative; + margin: 0; + text-align: left; +} + +ul#menu li +{ + display: inline; + list-style: none; +} + +ul#menu li a +{ + font-weight: normal; + font-size: 19px; + text-decoration: none; + color: #939896; + margin-right: 15px; +} + +ul#menu li a:hover +{ + color: #202020; + text-decoration: none; +} + +ul#menu li.selected a +{ + color: #202020; + color: #000; +} + +/* FORM LAYOUT ELEMENTS +----------------------------------------------------------*/ + +fieldset +{ + padding: 1em; + border: none; + background-color: #eeeeee; +} + +fieldset.group:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +fieldset p +{ + margin: 2px 12px 10px 10px; +} + +fieldset div.user +{ + float: left; + width: 200px; + margin: 5px; +} + +label +{ + color: #202020; + font-size: 15px; +} + +input[type="text"] +{ + width: 200px; + height: 20px; + border: none; +} + +/* TABLE +----------------------------------------------------------*/ + +table +{ + border: none; + border-collapse: collapse; +} + +table td +{ + padding: 10px 12px; + border: none; + border-right: 2px solid white; + text-align: center; + min-width: 100px; +} + +table th +{ + padding: 10px 5px; + text-align: center; + background-color: #fff; + color: #939896; + font-size: 22px; + font-weight: normal; + border: none; + min-width: 100px; +} + +table tr +{ + min-height: 32px; +} + +table tr.d0 +{ + background-color: #eeeeee; +} + +table tr.d1 +{ + background-color: #e0e1e1; +} + +table tr td +{ + color: #202020; +} + +table td p +{ + margin: 0px; + font-size: 15px; + font-weight: normal; +} + +.left-aligned +{ + text-align: left; + min-width: 150px; +} + +/* MISC +----------------------------------------------------------*/ +.clear +{ + clear: both; +} + +#menucontainer +{ + margin-top: 10px; +} + +div#title +{ + display: block; + float: left; + text-align: left; +} + +.hidden +{ + display: none; +} + +.code +{ + background-color: #F7F7F7; + padding: 10px; + margin: 10px 10px 10px 0px; + border: #696969 2px solid; + max-width: 1000px; + min-width: 1000px; + color:#383838; + font-size: 90%; +} + +.note +{ + font-size: 85%; +} \ No newline at end of file diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Content/StorageInitializer.png b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/StorageInitializer.png new file mode 100644 index 0000000..7fb6005 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/content/App_Readme/Content/StorageInitializer.png differ diff --git a/packages/Phone.Storage.1.0.1/content/App_Readme/Phone.Storage.Readme.htm b/packages/Phone.Storage.1.0.1/content/App_Readme/Phone.Storage.Readme.htm new file mode 100644 index 0000000..fd1c4e5 --- /dev/null +++ b/packages/Phone.Storage.1.0.1/content/App_Readme/Phone.Storage.Readme.htm @@ -0,0 +1,223 @@ + + + + + Windows Azure Storage Client Library for Windows Phone + + + + +
+
+ +
+
+

Introduction

+

+ The Windows Azure Storage Client library for Windows Phone + contains a set of classes to provide client access for Windows + Azure storage services such as Blobs, Tables and Queues.

+

Prerequisites

+ + +

Configuration

+

Configuring your Windows Azure Storage settings

+
    +
  1. The Windows Azure Storage Client library for Windows Phone works against any of the following + services: + +
  2. + +
  3. By default, this package is configured to access the Windows Azure Storage Emulator + directly. If you wish to change this, modify the App_Start\StorageInitializer.cs file, and set + the account type you desire for your application.

  4. +
    +
+ + +

How to use it

+

Storage Context Resolver

+

+ This library provides an ICloudStorageClientResolver + interface to create the clients for Blobs, Tables and Queues according to the Windows Azure + storage settings configured. There are two implementations for this interface: +

+
    +
  • CloudStorageClientResolverAccountAndKey: Lets you configure + your Windows Azure storage account settings (account name, account key, blob + service endpoint, queue service endpoint and table service endpoint) so your + phone application can + access them directly.
  • +
  • CloudStorageClientResolverProxies: Lets you configure your + Windows Azure storage proxy cloud services' settings (custom authorization + header, shared access signature service endpoint, queue proxy service endpoint + and table proxy service endpoint) so your phone application can access the + Queues and Tables services indirectly through the proxies, and using shared + access signatures for Blobs.
  • +
+
+ + +

Cloud Queues

+

+ After creating a + cloud queue client using the resolver, you can get a queue reference and operate with it using the following interface. +

+

+

Queues Sample

+

+ The following sample code shows how to create a new queue and immediately add a message + to it. +

+
+var queueClient = CloudStorageContext.Current.Resolver.CreateCloudQueueClient();
+var queue = queueClient.GetQueueReference("queuename");
+queue.Create(
+   r => queue.AddMessage(
+            new CloudQueueMessage { AsBytes = Encoding.UTF8.GetBytes("Message content") },
+            c =>
+            {
+                // Some logic here.
+            }));
+
+ + + +

Cloud Tables

+

+ After creating a + cloud table client using the resolver, you can create and delete tables or get the + TableServiceContext (which inherits from + DataServiceContext) to work with rows within a single table. +

+

+

Tables Sample

+

In order to operate with rows on a table, you need to first create a class that + inherits from TableServiceEntity to define the table structure. + Make sure to add the DataServiceEntity and EntitySet + attributes to the class definition, passing the table name as constructor + parameter for the latter.

+
+using System;
+using System.Globalization;
+using Microsoft.WindowsAzure.Samples.Data.Services.Client;
+using Microsoft.WindowsAzure.Samples.Phone.Storage;
+
+[DataServiceEntity]
+[EntitySet("SampleData")]
+public class SampleData : TableServiceEntity
+{
+    private string name;
+
+    public SampleData()
+        : base(
+              "PartitionKey",
+              string.Format(
+                  CultureInfo.InvariantCulture,
+                  "{0:10}_{1}",
+                  DateTime.MaxValue.Ticks - DateTime.Now.Ticks,
+                  Guid.NewGuid()))
+    {
+    }
+
+    public SampleData(string partitionKey, string rowKey)
+        : base(partitionKey, rowKey)
+    {
+    }
+
+    public string Name
+    {
+        get
+        {
+            return this.name;
+        }
+
+        set
+        {
+            this.name = value;
+            this.OnPropertyChanged("Name");
+        }
+    }
+}
+
+

+ Now + that we have the SampleData class, + you can use the following code to create a new SampleData table and immediately add a row + to it using the TableServiceContext. +

+
+var tableClient = CloudStorageContext.Current.Resolver.CreateCloudTableClient();
+var tableName = "SampleData";
+
+tableClient.CreateTableIfNotExist(
+    tableName,
+    p =>
+    {
+        var context = CloudStorageContext.Current.Resolver.CreateTableServiceContext();
+        var sampleData = new SampleData { Name = "John Doe" };
+
+        context.AddObject(tableName, sampleData);
+        context.BeginSaveChanges(
+            asyncResult =>
+            {
+                var response = context.EndSaveChanges(asyncResult);
+
+                // Some logic here.
+            },
+            null);
+    });
+
+ + + +

Cloud Blobs

+

+ After creating a + cloud blob client using the resolver, you can get a container reference and operate with it and + its contained blobs using the following interfaces. +

+

+

Blobs Sample

+

+ The following sample shows how to create a new public container with sample metadata and immediately add a blob + to it. +

+
+var blobClient = CloudStorageContext.Current.Resolver.CreateCloudBlobClient();
+var container = blobClient.GetContainerReference("sample-container");
+container.Metadata.Add("samplekey", "samplevalue");
+
+container.CreateIfNotExist(
+    BlobContainerPublicAccessType.Container,
+    response =>
+    {
+        var blob = container.GetBlobReference("sample-blob");
+        var sampleStream = new MemoryStream(Encoding.UTF8.GetBytes("sample content"));
+
+        blob.UploadFromStream(
+            sampleStream,
+            response2 =>
+            {
+                // Some logic here.
+            });
+    });
+
+ + +
+
+ + diff --git a/packages/Phone.Storage.1.0.1/content/App_Start/StorageInitializer.cs.pp b/packages/Phone.Storage.1.0.1/content/App_Start/StorageInitializer.cs.pp new file mode 100644 index 0000000..73cd9b4 --- /dev/null +++ b/packages/Phone.Storage.1.0.1/content/App_Start/StorageInitializer.cs.pp @@ -0,0 +1,39 @@ +[assembly: SilverlightActivator.ApplicationStartupMethod(typeof($rootnamespace$.App_Start.StorageInitializer), "ApplicationStartup", Order = 10)] + +namespace $rootnamespace$.App_Start +{ + using System; + using System.Windows; + using Microsoft.WindowsAzure.Samples.Phone.Storage; + + public class StorageInitializer + { + public static void ApplicationStartup() + { + // By using CloudStorageClientResolverAccountAndKey.DevelopmentStorageAccountResolver you can connect directly + // against the Windows Azure Storage Emulator. + var resolver = CloudStorageClientResolverAccountAndKey.DevelopmentStorageAccountResolver; + + // By using CloudStorageClientResolverProxies you can connect to a Windows Azure Web Role that contains the + // Windows Azure Storage Proxies. + // Create a new Cloud project with an MVC 3 Web Role and install the WindowsAzure.Storage NuGet package. + // var resolver = new CloudStorageClientResolverProxies( + // new StorageCredentialsAnonymous() /* By default, the proxy services are anonymous */, + // new Uri("http://localhost:81/sas"), + // new Uri("http://localhost:81/queues"), + // new Uri("http://localhost:81/tables"), + // Deployment.Current.Dispatcher); + + // By using CloudStorageClientResolverAccountAndKey you can connect to your Windows Azure Storage Services account directly. + // Just replace your Windows Azure Storage account credentials and endpoints. + // var resolver = new CloudStorageClientResolverAccountAndKey( + // new StorageCredentialsAccountAndKey("[your account name]", "[your account key]"), + // new Uri("http://[your account name].blob.core.windows.net"), + // new Uri("http://[your account name].queue.core.windows.net"), + // new Uri("http://[your account name].table.core.windows.net"), + // Deployment.Current.Dispatcher); + + CloudStorageContext.Current.Resolver = resolver; + } + } +} \ No newline at end of file diff --git a/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Data.Services.Client.dll b/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Data.Services.Client.dll new file mode 100644 index 0000000..4e72105 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Data.Services.Client.dll differ diff --git a/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Phone.Storage.dll b/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Phone.Storage.dll new file mode 100644 index 0000000..0c78027 Binary files /dev/null and b/packages/Phone.Storage.1.0.1/lib/sl40-wp71/Phone.Storage.dll differ diff --git a/packages/Phone.Storage.1.0.1/tools/Install.ps1 b/packages/Phone.Storage.1.0.1/tools/Install.ps1 new file mode 100644 index 0000000..cb8beaf --- /dev/null +++ b/packages/Phone.Storage.1.0.1/tools/Install.ps1 @@ -0,0 +1,5 @@ +param($installPath, $toolsPath, $package, $project) + +$path = [System.IO.Path] +$readmeFile = $path::Combine($path::GetDirectoryName($project.FileName), "App_Readme\Phone.Storage.Readme.htm") +$DTE.ItemOperations.Navigate($readmeFile, [EnvDTE.vsNavigateOptions]::vsNavigateOptionsNewWindow) diff --git a/packages/SilverlightActivator.1.0.4/SilverlightActivator.1.0.4.nupkg b/packages/SilverlightActivator.1.0.4/SilverlightActivator.1.0.4.nupkg new file mode 100644 index 0000000..0fc6b1b Binary files /dev/null and b/packages/SilverlightActivator.1.0.4/SilverlightActivator.1.0.4.nupkg differ diff --git a/packages/SilverlightActivator.1.0.4/content/App.xaml.transform b/packages/SilverlightActivator.1.0.4/content/App.xaml.transform new file mode 100644 index 0000000..7a6ff57 --- /dev/null +++ b/packages/SilverlightActivator.1.0.4/content/App.xaml.transform @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SilverlightActivator.1.0.4/lib/sl4-wp71/SilverlightActivator.dll b/packages/SilverlightActivator.1.0.4/lib/sl4-wp71/SilverlightActivator.dll new file mode 100644 index 0000000..0dcb340 Binary files /dev/null and b/packages/SilverlightActivator.1.0.4/lib/sl4-wp71/SilverlightActivator.dll differ diff --git a/packages/repositories.config b/packages/repositories.config new file mode 100644 index 0000000..8849338 --- /dev/null +++ b/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/sdkLocalDatabaseCS_WithAzureTables.sln b/sdkLocalDatabaseCS_WithAzureTables.sln new file mode 100644 index 0000000..3815794 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sdkLocalDatabaseCS_WithAzureTables", "sdkLocalDatabaseCS_WithAzureTables\sdkLocalDatabaseCS_WithAzureTables.csproj", "{80368326-8FD8-4893-937F-D75ED34A9019}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {80368326-8FD8-4893-937F-D75ED34A9019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80368326-8FD8-4893-937F-D75ED34A9019}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80368326-8FD8-4893-937F-D75ED34A9019}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {80368326-8FD8-4893-937F-D75ED34A9019}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80368326-8FD8-4893-937F-D75ED34A9019}.Release|Any CPU.Build.0 = Release|Any CPU + {80368326-8FD8-4893-937F-D75ED34A9019}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/sdkLocalDatabaseCS_WithAzureTables/App.xaml b/sdkLocalDatabaseCS_WithAzureTables/App.xaml new file mode 100644 index 0000000..6e1322f --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/App.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sdkLocalDatabaseCS_WithAzureTables/App.xaml.cs b/sdkLocalDatabaseCS_WithAzureTables/App.xaml.cs new file mode 100644 index 0000000..30fcf29 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/App.xaml.cs @@ -0,0 +1,193 @@ +/* + Copyright (c) 2011 Microsoft Corporation. All rights reserved. + Use of this sample source code is subject to the terms of the Microsoft license + agreement under which you licensed this sample source code and is provided AS-IS. + If you did not accept the terms of the license agreement, you are not authorized + to use this sample source code. For the terms of the license, please see the + license agreement between you and Microsoft. + + To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 + +*/ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Microsoft.Phone.Controls; +using Microsoft.Phone.Shell; + +// Directives +//using LocalDatabaseSample.Model; +using LocalDatabaseSample.ViewModel; + +namespace sdkLocalDatabaseCS +{ + public partial class App : Application + { + // The static ViewModel, to be used across the application. + private static ToDoViewModel viewModel; + public static ToDoViewModel ViewModel + { + get { return viewModel; } + } + + /// + /// Provides easy access to the root frame of the Phone Application. + /// + /// The root frame of the Phone Application. + public PhoneApplicationFrame RootFrame { get; private set; } + + /// + /// Constructor for the Application object. + /// + public App() + { + // Global handler for uncaught exceptions. + UnhandledException += Application_UnhandledException; + + // Standard Silverlight initialization + InitializeComponent(); + + // Phone-specific initialization + InitializePhoneApplication(); + + // Show graphics profiling information while debugging. + if (System.Diagnostics.Debugger.IsAttached) + { + // Display the current frame rate counters. + Application.Current.Host.Settings.EnableFrameRateCounter = true; + + // Show the areas of the app that are being redrawn in each frame. + //Application.Current.Host.Settings.EnableRedrawRegions = true; + + // Enable non-production analysis visualization mode, + // which shows areas of a page that are handed off to GPU with a colored overlay. + //Application.Current.Host.Settings.EnableCacheVisualization = true; + + // Disable the application idle detection by setting the UserIdleDetectionMode property of the + // application's PhoneApplicationService object to Disabled. + // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run + // and consume battery power when the user is not using the phone. + PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; + } + + //// Specify the local database connection string. + //string DBConnectionString = "Data Source=isostore:/ToDo.sdf"; + + //// Create the database if it does not exist. + //using (ToDoDataContext db = new ToDoDataContext(DBConnectionString)) + //{ + // if (db.DatabaseExists() == false) + // { + // // Create the local database. + // db.CreateDatabase(); + + // // Prepopulate the categories. + // db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Home" }); + // db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Work" }); + // db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Hobbies" }); + + // // Save categories to the database. + // db.SubmitChanges(); + // } + //} + + // Create the ViewModel object. + viewModel = new ToDoViewModel(); + + // Query the local database and load observable collections. + + + } + + // Code to execute when the application is launching (eg, from Start) + // This code will not execute when the application is reactivated + private void Application_Launching(object sender, LaunchingEventArgs e) + { + viewModel.LoadCollectionsFromDatabase(); + } + + // Code to execute when the application is activated (brought to foreground) + // This code will not execute when the application is first launched + private void Application_Activated(object sender, ActivatedEventArgs e) + { + + } + + // Code to execute when the application is deactivated (sent to background) + // This code will not execute when the application is closing + private void Application_Deactivated(object sender, DeactivatedEventArgs e) + { + } + + // Code to execute when the application is closing (eg, user hit Back) + // This code will not execute when the application is deactivated + private void Application_Closing(object sender, ClosingEventArgs e) + { + } + + // Code to execute if a navigation fails + private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) + { + if (System.Diagnostics.Debugger.IsAttached) + { + // A navigation has failed; break into the debugger + System.Diagnostics.Debugger.Break(); + } + } + + // Code to execute on Unhandled Exceptions + private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) + { + if (System.Diagnostics.Debugger.IsAttached) + { + // An unhandled exception has occurred; break into the debugger + System.Diagnostics.Debugger.Break(); + } + } + + #region Phone application initialization + + // Avoid double-initialization + private bool phoneApplicationInitialized = false; + + // Do not add any additional code to this method + private void InitializePhoneApplication() + { + if (phoneApplicationInitialized) + return; + + // Create the frame but don't set it as RootVisual yet; this allows the splash + // screen to remain active until the application is ready to render. + RootFrame = new PhoneApplicationFrame(); + RootFrame.Navigated += CompleteInitializePhoneApplication; + + // Handle navigation failures + RootFrame.NavigationFailed += RootFrame_NavigationFailed; + + // Ensure we don't initialize again + phoneApplicationInitialized = true; + } + + // Do not add any additional code to this method + private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) + { + // Set the root visual to allow the application to render + if (RootVisual != RootFrame) + RootVisual = RootFrame; + + // Remove this handler since it is no longer needed + RootFrame.Navigated -= CompleteInitializePhoneApplication; + } + + #endregion + } +} diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudBlobInterfaces.png b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudBlobInterfaces.png new file mode 100644 index 0000000..1d19eb1 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudBlobInterfaces.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudQueueInterfaces.png b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudQueueInterfaces.png new file mode 100644 index 0000000..f07bd09 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudQueueInterfaces.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudStorageClientResolver.png b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudStorageClientResolver.png new file mode 100644 index 0000000..c658297 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudStorageClientResolver.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudTableInterfaces.png b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudTableInterfaces.png new file mode 100644 index 0000000..c6f3b16 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/CloudTableInterfaces.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/Site.css b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/Site.css new file mode 100644 index 0000000..75495ba --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/Site.css @@ -0,0 +1,329 @@ +/*---------------------------------------------------------- +The base color for this template is #5c87b2. If you'd like +to use a different color start by replacing all instances of +#5c87b2 with your new color. +----------------------------------------------------------*/ +body +{ + background-color: #ffffff; + font-weight: normal; + font-size: 15px; + font-family: "Segoe UI" , "Helvetica" , "Tahoma" , "Arial"; + margin: 0; + padding: 0; + color: #696969; +} + +a +{ + color: #3387dd; +} + +a:link +{ + color: #3387dd; + text-decoration: none; +} + +a:visited +{ + color: #3387dd; + text-decoration: none; +} + +a:hover +{ + color: #1d60ff; + text-decoration: none; +} + +p, ul +{ + margin-bottom: 20px; + line-height: 1.6em; +} + +/* HEADINGS +----------------------------------------------------------*/ +h1, h2, h3, h4, h5, h6 +{ + font-size: 1.5em; + color: #000; +} + +h1 +{ + font-size: 2em; + padding-bottom: 0; + margin-bottom: 0; +} + +h2 +{ + padding: 0 0 10px 0; + font-size: 2.8em; + font-weight: lighter; + color: #6cbd45; + margin-top: 0px; + margin-bottom: 0px; + padding-bottom: 0px; +} + +h3 +{ + font-size: 22px; + font-weight: normal; + color: #939896; + margin-bottom: 4px; +} + +h4 +{ + font-size: 1.1em; +} + +h5, h6 +{ + font-size: 1em; +} + +/* this rule styles

tags that are the +first child of the left and right table columns */ +.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2 +{ + margin-top: 0; +} + +/* PRIMARY LAYOUT ELEMENTS +----------------------------------------------------------*/ + +/* you can specify a greater or lesser percentage for the +page width. Or, you can specify an exact pixel width. */ +.page +{ + width: 90%; + margin-left: auto; + margin-right: auto; +} + +#header +{ + position: relative; + margin-bottom: 0px; + color: #000; + padding: 0; +} + +#header h1 +{ + font-weight: normal; + padding: 5px 0px 0px 47px; + margin: 0; + color: #000; + border: none; + line-height: 2em; + font-size: 24px !important; +} + +#main +{ + padding: 0px 0px 0px 0px; + background-color: #fff; + margin-top: 0px; + margin-bottom: 10px; +} + +#footer +{ + color: #999; + padding: 10px 0; + text-align: center; + line-height: normal; + margin: 0; + font-size: .9em; +} + +/* TAB MENU +----------------------------------------------------------*/ +ul#menu +{ + padding: 0 0 2px; + position: relative; + margin: 0; + text-align: left; +} + +ul#menu li +{ + display: inline; + list-style: none; +} + +ul#menu li a +{ + font-weight: normal; + font-size: 19px; + text-decoration: none; + color: #939896; + margin-right: 15px; +} + +ul#menu li a:hover +{ + color: #202020; + text-decoration: none; +} + +ul#menu li.selected a +{ + color: #202020; + color: #000; +} + +/* FORM LAYOUT ELEMENTS +----------------------------------------------------------*/ + +fieldset +{ + padding: 1em; + border: none; + background-color: #eeeeee; +} + +fieldset.group:after +{ + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +fieldset p +{ + margin: 2px 12px 10px 10px; +} + +fieldset div.user +{ + float: left; + width: 200px; + margin: 5px; +} + +label +{ + color: #202020; + font-size: 15px; +} + +input[type="text"] +{ + width: 200px; + height: 20px; + border: none; +} + +/* TABLE +----------------------------------------------------------*/ + +table +{ + border: none; + border-collapse: collapse; +} + +table td +{ + padding: 10px 12px; + border: none; + border-right: 2px solid white; + text-align: center; + min-width: 100px; +} + +table th +{ + padding: 10px 5px; + text-align: center; + background-color: #fff; + color: #939896; + font-size: 22px; + font-weight: normal; + border: none; + min-width: 100px; +} + +table tr +{ + min-height: 32px; +} + +table tr.d0 +{ + background-color: #eeeeee; +} + +table tr.d1 +{ + background-color: #e0e1e1; +} + +table tr td +{ + color: #202020; +} + +table td p +{ + margin: 0px; + font-size: 15px; + font-weight: normal; +} + +.left-aligned +{ + text-align: left; + min-width: 150px; +} + +/* MISC +----------------------------------------------------------*/ +.clear +{ + clear: both; +} + +#menucontainer +{ + margin-top: 10px; +} + +div#title +{ + display: block; + float: left; + text-align: left; +} + +.hidden +{ + display: none; +} + +.code +{ + background-color: #F7F7F7; + padding: 10px; + margin: 10px 10px 10px 0px; + border: #696969 2px solid; + max-width: 1000px; + min-width: 1000px; + color:#383838; + font-size: 90%; +} + +.note +{ + font-size: 85%; +} \ No newline at end of file diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/StorageInitializer.png b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/StorageInitializer.png new file mode 100644 index 0000000..7fb6005 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Content/StorageInitializer.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Phone.Storage.Readme.htm b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Phone.Storage.Readme.htm new file mode 100644 index 0000000..fd1c4e5 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/App_Readme/Phone.Storage.Readme.htm @@ -0,0 +1,223 @@ + + + + + Windows Azure Storage Client Library for Windows Phone + + + + +
+
+ +
+
+

Introduction

+

+ The Windows Azure Storage Client library for Windows Phone + contains a set of classes to provide client access for Windows + Azure storage services such as Blobs, Tables and Queues.

+

Prerequisites

+ + +

Configuration

+

Configuring your Windows Azure Storage settings

+
    +
  1. The Windows Azure Storage Client library for Windows Phone works against any of the following + services: + +
  2. + +
  3. By default, this package is configured to access the Windows Azure Storage Emulator + directly. If you wish to change this, modify the App_Start\StorageInitializer.cs file, and set + the account type you desire for your application.

  4. +
    +
+ + +

How to use it

+

Storage Context Resolver

+

+ This library provides an ICloudStorageClientResolver + interface to create the clients for Blobs, Tables and Queues according to the Windows Azure + storage settings configured. There are two implementations for this interface: +

+
    +
  • CloudStorageClientResolverAccountAndKey: Lets you configure + your Windows Azure storage account settings (account name, account key, blob + service endpoint, queue service endpoint and table service endpoint) so your + phone application can + access them directly.
  • +
  • CloudStorageClientResolverProxies: Lets you configure your + Windows Azure storage proxy cloud services' settings (custom authorization + header, shared access signature service endpoint, queue proxy service endpoint + and table proxy service endpoint) so your phone application can access the + Queues and Tables services indirectly through the proxies, and using shared + access signatures for Blobs.
  • +
+
+ + +

Cloud Queues

+

+ After creating a + cloud queue client using the resolver, you can get a queue reference and operate with it using the following interface. +

+

+

Queues Sample

+

+ The following sample code shows how to create a new queue and immediately add a message + to it. +

+
+var queueClient = CloudStorageContext.Current.Resolver.CreateCloudQueueClient();
+var queue = queueClient.GetQueueReference("queuename");
+queue.Create(
+   r => queue.AddMessage(
+            new CloudQueueMessage { AsBytes = Encoding.UTF8.GetBytes("Message content") },
+            c =>
+            {
+                // Some logic here.
+            }));
+
+ + + +

Cloud Tables

+

+ After creating a + cloud table client using the resolver, you can create and delete tables or get the + TableServiceContext (which inherits from + DataServiceContext) to work with rows within a single table. +

+

+

Tables Sample

+

In order to operate with rows on a table, you need to first create a class that + inherits from TableServiceEntity to define the table structure. + Make sure to add the DataServiceEntity and EntitySet + attributes to the class definition, passing the table name as constructor + parameter for the latter.

+
+using System;
+using System.Globalization;
+using Microsoft.WindowsAzure.Samples.Data.Services.Client;
+using Microsoft.WindowsAzure.Samples.Phone.Storage;
+
+[DataServiceEntity]
+[EntitySet("SampleData")]
+public class SampleData : TableServiceEntity
+{
+    private string name;
+
+    public SampleData()
+        : base(
+              "PartitionKey",
+              string.Format(
+                  CultureInfo.InvariantCulture,
+                  "{0:10}_{1}",
+                  DateTime.MaxValue.Ticks - DateTime.Now.Ticks,
+                  Guid.NewGuid()))
+    {
+    }
+
+    public SampleData(string partitionKey, string rowKey)
+        : base(partitionKey, rowKey)
+    {
+    }
+
+    public string Name
+    {
+        get
+        {
+            return this.name;
+        }
+
+        set
+        {
+            this.name = value;
+            this.OnPropertyChanged("Name");
+        }
+    }
+}
+
+

+ Now + that we have the SampleData class, + you can use the following code to create a new SampleData table and immediately add a row + to it using the TableServiceContext. +

+
+var tableClient = CloudStorageContext.Current.Resolver.CreateCloudTableClient();
+var tableName = "SampleData";
+
+tableClient.CreateTableIfNotExist(
+    tableName,
+    p =>
+    {
+        var context = CloudStorageContext.Current.Resolver.CreateTableServiceContext();
+        var sampleData = new SampleData { Name = "John Doe" };
+
+        context.AddObject(tableName, sampleData);
+        context.BeginSaveChanges(
+            asyncResult =>
+            {
+                var response = context.EndSaveChanges(asyncResult);
+
+                // Some logic here.
+            },
+            null);
+    });
+
+ + + +

Cloud Blobs

+

+ After creating a + cloud blob client using the resolver, you can get a container reference and operate with it and + its contained blobs using the following interfaces. +

+

+

Blobs Sample

+

+ The following sample shows how to create a new public container with sample metadata and immediately add a blob + to it. +

+
+var blobClient = CloudStorageContext.Current.Resolver.CreateCloudBlobClient();
+var container = blobClient.GetContainerReference("sample-container");
+container.Metadata.Add("samplekey", "samplevalue");
+
+container.CreateIfNotExist(
+    BlobContainerPublicAccessType.Container,
+    response =>
+    {
+        var blob = container.GetBlobReference("sample-blob");
+        var sampleStream = new MemoryStream(Encoding.UTF8.GetBytes("sample content"));
+
+        blob.UploadFromStream(
+            sampleStream,
+            response2 =>
+            {
+                // Some logic here.
+            });
+    });
+
+ + +
+
+ + diff --git a/sdkLocalDatabaseCS_WithAzureTables/App_Start/StorageInitializer.cs b/sdkLocalDatabaseCS_WithAzureTables/App_Start/StorageInitializer.cs new file mode 100644 index 0000000..009cf10 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/App_Start/StorageInitializer.cs @@ -0,0 +1,39 @@ +[assembly: SilverlightActivator.ApplicationStartupMethod(typeof(sdkLocalDatabaseCS.App_Start.StorageInitializer), "ApplicationStartup", Order = 10)] + +namespace sdkLocalDatabaseCS.App_Start +{ + using System; + using System.Windows; + using Microsoft.WindowsAzure.Samples.Phone.Storage; + + public class StorageInitializer + { + public static void ApplicationStartup() + { + // By using CloudStorageClientResolverAccountAndKey.DevelopmentStorageAccountResolver you can connect directly + // against the Windows Azure Storage Emulator. + var resolver = CloudStorageClientResolverAccountAndKey.DevelopmentStorageAccountResolver; + + // By using CloudStorageClientResolverProxies you can connect to a Windows Azure Web Role that contains the + // Windows Azure Storage Proxies. + // Create a new Cloud project with an MVC 3 Web Role and install the WindowsAzure.Storage NuGet package. + // var resolver = new CloudStorageClientResolverProxies( + // new StorageCredentialsAnonymous() /* By default, the proxy services are anonymous */, + // new Uri("http://localhost:81/sas"), + // new Uri("http://localhost:81/queues"), + // new Uri("http://localhost:81/tables"), + // Deployment.Current.Dispatcher); + + // By using CloudStorageClientResolverAccountAndKey you can connect to your Windows Azure Storage Services account directly. + // Just replace your Windows Azure Storage account credentials and endpoints. + // var resolver = new CloudStorageClientResolverAccountAndKey( + // new StorageCredentialsAccountAndKey("[your account name]", "[your account key]"), + // new Uri("http://[your account name].blob.core.windows.net"), + // new Uri("http://[your account name].queue.core.windows.net"), + // new Uri("http://[your account name].table.core.windows.net"), + // Deployment.Current.Dispatcher); + + CloudStorageContext.Current.Resolver = resolver; + } + } +} \ No newline at end of file diff --git a/sdkLocalDatabaseCS_WithAzureTables/ApplicationIcon.png b/sdkLocalDatabaseCS_WithAzureTables/ApplicationIcon.png new file mode 100644 index 0000000..304c796 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/ApplicationIcon.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Background.png b/sdkLocalDatabaseCS_WithAzureTables/Background.png new file mode 100644 index 0000000..f89e6ff Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Background.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.add.rest.png b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.add.rest.png new file mode 100644 index 0000000..a90137f Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.add.rest.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.cancel.rest.png b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.cancel.rest.png new file mode 100644 index 0000000..4dd724f Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.cancel.rest.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.check.rest.png b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.check.rest.png new file mode 100644 index 0000000..7a07466 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.check.rest.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.delete.rest.png b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.delete.rest.png new file mode 100644 index 0000000..95bb16d Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Images/appbar.delete.rest.png differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/Library/Microsoft.Phone.Controls.Toolkit.dll b/sdkLocalDatabaseCS_WithAzureTables/Library/Microsoft.Phone.Controls.Toolkit.dll new file mode 100644 index 0000000..573b246 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/Library/Microsoft.Phone.Controls.Toolkit.dll differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml b/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml new file mode 100644 index 0000000..8fa31c5 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml.cs b/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml.cs new file mode 100644 index 0000000..54c3e02 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/MainPage.xaml.cs @@ -0,0 +1,72 @@ +/* + Copyright (c) 2011 Microsoft Corporation. All rights reserved. + Use of this sample source code is subject to the terms of the Microsoft license + agreement under which you licensed this sample source code and is provided AS-IS. + If you did not accept the terms of the license agreement, you are not authorized + to use this sample source code. For the terms of the license, please see the + license agreement between you and Microsoft. + + To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 + +*/ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using Microsoft.Phone.Controls; +using sdkLocalDatabaseCS.Model; +using LocalDatabaseSample.ViewModel; + +// Directive for the ViewModel. +//using LocalDatabaseSample.Model; + +namespace sdkLocalDatabaseCS +{ + public partial class MainPage : PhoneApplicationPage + { + // Constructor + public MainPage() + { + InitializeComponent(); + + // Set the page DataContext property to the ViewModel. + this.DataContext = App.ViewModel; + } + + private void newTaskAppBarButton_Click(object sender, EventArgs e) + { + NavigationService.Navigate(new Uri("/NewTaskPage.xaml", UriKind.Relative)); + } + + + private void deleteTaskButton_Click(object sender, RoutedEventArgs e) + { + // Cast the parameter as a button. + var button = sender as Button; + + if (button != null) + { + // Get a handle for the to-do item bound to the button. + ToDoEntity toDoForDelete = button.DataContext as ToDoEntity; + + App.ViewModel.DeleteToDoItem(toDoForDelete); + } + + // Put the focus back to the main page. + this.Focus(); + } + + protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) + { + // Save changes to the database. + //waw App.ViewModel.SaveChangesToDB(); + } + } +} diff --git a/sdkLocalDatabaseCS_WithAzureTables/Model/ToDoEntity.cs b/sdkLocalDatabaseCS_WithAzureTables/Model/ToDoEntity.cs new file mode 100644 index 0000000..e7faece --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/Model/ToDoEntity.cs @@ -0,0 +1,45 @@ +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using Microsoft.WindowsAzure.Samples.Data.Services.Client; +using Microsoft.WindowsAzure.Samples.Phone.Storage; +using System.Globalization; + +namespace sdkLocalDatabaseCS.Model +{ + [DataServiceEntity] + [EntitySet("ToDo")] + public class ToDoEntity : TableServiceEntity + { + public ToDoEntity() + : base( + "PartitionKey", + string.Format( + CultureInfo.InvariantCulture, + "{0:10}_{1}", + DateTime.MaxValue.Ticks - DateTime.Now.Ticks, + Guid.NewGuid())) + { + } + + public ToDoEntity(string partitionKey, string rowKey) + : base(partitionKey, rowKey) + { + } + + public int ToDoItemId { get; set; } + + public string ItemName { get; set; } + + public bool IsComplete { get; set; } + + public string Category { get; set; } + } +} diff --git a/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml b/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml new file mode 100644 index 0000000..cf5dd61 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml.cs b/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml.cs new file mode 100644 index 0000000..4a52313 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/NewTaskPage.xaml.cs @@ -0,0 +1,73 @@ +/* + Copyright (c) 2011 Microsoft Corporation. All rights reserved. + Use of this sample source code is subject to the terms of the Microsoft license + agreement under which you licensed this sample source code and is provided AS-IS. + If you did not accept the terms of the license agreement, you are not authorized + to use this sample source code. For the terms of the license, please see the + license agreement between you and Microsoft. + + To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 + +*/ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using Microsoft.Phone.Controls; +using sdkLocalDatabaseCS.Model; + +// Directive for the data model. +//using LocalDatabaseSample.Model; + +namespace sdkLocalDatabaseCS +{ + public partial class NewTaskPage : PhoneApplicationPage + { + public NewTaskPage() + { + InitializeComponent(); + + // Set the page DataContext property to the ViewModel. + this.DataContext = App.ViewModel; + } + + private void appBarOkButton_Click(object sender, EventArgs e) + { + // Confirm there is some text in the text box. + if (newTaskNameTextBox.Text.Length > 0) + { + // Create a new to-do item. + ToDoEntity newToDoItem = new ToDoEntity + { + ItemName = newTaskNameTextBox.Text, + Category = categoriesListPicker.SelectedItem.ToString() + }; + + // Add the item to the ViewModel. + App.ViewModel.AddToDoItem(newToDoItem); + + // Return to the main page. + if (NavigationService.CanGoBack) + { + NavigationService.GoBack(); + } + } + } + + private void appBarCancelButton_Click(object sender, EventArgs e) + { + // Return to the main page. + if (NavigationService.CanGoBack) + { + NavigationService.GoBack(); + } + } + } +} diff --git a/sdkLocalDatabaseCS_WithAzureTables/Properties/AppManifest.xml b/sdkLocalDatabaseCS_WithAzureTables/Properties/AppManifest.xml new file mode 100644 index 0000000..a955232 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/Properties/AppManifest.xml @@ -0,0 +1,6 @@ + + + + diff --git a/sdkLocalDatabaseCS_WithAzureTables/Properties/AssemblyInfo.cs b/sdkLocalDatabaseCS_WithAzureTables/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0f97aa0 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/Properties/AssemblyInfo.cs @@ -0,0 +1,48 @@ +/* + Copyright (c) 2011 Microsoft Corporation. All rights reserved. + Use of this sample source code is subject to the terms of the Microsoft license + agreement under which you licensed this sample source code and is provided AS-IS. + If you did not accept the terms of the license agreement, you are not authorized + to use this sample source code. For the terms of the license, please see the + license agreement between you and Microsoft. + + To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 + +*/ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Resources; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("sdkLocalDatabaseCS")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("sdkLocalDatabaseCS")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f3059a74-9324-489b-8620-a15bbe49d9a0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: NeutralResourcesLanguageAttribute("en-US")] diff --git a/sdkLocalDatabaseCS_WithAzureTables/Properties/WMAppManifest.xml b/sdkLocalDatabaseCS_WithAzureTables/Properties/WMAppManifest.xml new file mode 100644 index 0000000..5b2414a --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/Properties/WMAppManifest.xml @@ -0,0 +1,35 @@ + + + + + ApplicationIcon.png + + + + + + + + + + + + + + + + + + + + + + + Background.png + 0 + sdkLocalDatabaseCS + + + + + diff --git a/sdkLocalDatabaseCS_WithAzureTables/SplashScreenImage.jpg b/sdkLocalDatabaseCS_WithAzureTables/SplashScreenImage.jpg new file mode 100644 index 0000000..353b192 Binary files /dev/null and b/sdkLocalDatabaseCS_WithAzureTables/SplashScreenImage.jpg differ diff --git a/sdkLocalDatabaseCS_WithAzureTables/ViewModel/ToDoViewModel.cs b/sdkLocalDatabaseCS_WithAzureTables/ViewModel/ToDoViewModel.cs new file mode 100644 index 0000000..aeabec7 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/ViewModel/ToDoViewModel.cs @@ -0,0 +1,213 @@ +/* + Copyright (c) 2011 Microsoft Corporation. All rights reserved. + Use of this sample source code is subject to the terms of the Microsoft license + agreement under which you licensed this sample source code and is provided AS-IS. + If you did not accept the terms of the license agreement, you are not authorized + to use this sample source code. For the terms of the license, please see the + license agreement between you and Microsoft. + + To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 + +*/ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using Microsoft.WindowsAzure.Samples.Phone.Storage; +using Microsoft.WindowsAzure.Samples.Data.Services.Client; +using sdkLocalDatabaseCS.Model; +using System; +using System.Globalization; +using System.Collections; + + +namespace LocalDatabaseSample.ViewModel +{ + public class ToDoViewModel : INotifyPropertyChanged + { + private string tableName = "ToDo"; + + // Class constructor, create the data context object. + public ToDoViewModel() + { + } + + // All to-do items. + public void GetAllToDoItems() + { + var context = CloudStorageContext.Current.Resolver.CreateTableServiceContext(); + DataServiceCollection toDoEntityCollection = new DataServiceCollection(context); + + toDoEntityCollection.LoadCompleted += (s, e) => + { + AllToDoItems = toDoEntityCollection; + + // Query the database and load all associated items to their respective collections. + foreach (var category in CategoriesList) + { + switch (category) + { + case "Home": + HomeToDoItems = Convert(AllToDoItems.Where(w => w.Category == category)); + break; + case "Work": + WorkToDoItems = Convert(AllToDoItems.Where(w => w.Category == category)); + break; + case "Hobbies": + HobbiesToDoItems = Convert(AllToDoItems.Where(w => w.Category == category)); + break; + default: + break; + } + } + }; + + var tableUri = new Uri( + string.Format( + CultureInfo.InvariantCulture, + "{0}/{1}()", + context.BaseUri, + tableName, + DateTime.UtcNow.Ticks), + UriKind.Absolute); + + toDoEntityCollection.Clear(); + toDoEntityCollection.LoadAsync(tableUri); + } + + private ObservableCollection _allToDoItems; + public ObservableCollection AllToDoItems + { + get { return _allToDoItems; } + set + { + _allToDoItems = value; + NotifyPropertyChanged("AllToDoItems"); + } + } + + // To-do items associated with the home category. + private ObservableCollection _homeToDoItems; + public ObservableCollection HomeToDoItems + { + get { return _homeToDoItems; } + set + { + _homeToDoItems = value; + NotifyPropertyChanged("HomeToDoItems"); + } + } + + // To-do items associated with the work category. + private ObservableCollection _workToDoItems; + public ObservableCollection WorkToDoItems + { + get { return _workToDoItems; } + set + { + _workToDoItems = value; + NotifyPropertyChanged("WorkToDoItems"); + } + } + + // To-do items associated with the hobbies category. + private ObservableCollection _hobbiesToDoItems; + public ObservableCollection HobbiesToDoItems + { + get { return _hobbiesToDoItems; } + set + { + _hobbiesToDoItems = value; + NotifyPropertyChanged("HobbiesToDoItems"); + } + } + + // A list of all categories, used by the add task page. + private List _categoriesList; + public List CategoriesList + { + get { return _categoriesList; } + set + { + _categoriesList = value; + NotifyPropertyChanged("CategoriesList"); + } + } + + // Query the table services and load the collections and list used by the pivot pages. + public void LoadCollectionsFromDatabase() + { + List categories = new List(); + categories.Add("Home"); + categories.Add("Work"); + categories.Add("Hobbies"); + + // Load a list of all categories. + CategoriesList = categories; + + // Load a list of all items. + GetAllToDoItems(); + } + + public ObservableCollection Convert(IEnumerable original) + { + return new ObservableCollection(original.Cast()); + } + + // Add a to-do item to the database and collections. + public void AddToDoItem(ToDoEntity newToDoItem) + { + + var tableClient = CloudStorageContext.Current.Resolver.CreateCloudTableClient(); + + tableClient.CreateTableIfNotExist( + tableName, + p => + { + var context = CloudStorageContext.Current.Resolver.CreateTableServiceContext(); + + context.AddObject(tableName, newToDoItem); + context.BeginSaveChanges( + asyncResult => + { + var response2 = context.EndSaveChanges(asyncResult); + + // reload list + GetAllToDoItems(); + }, + null); + }); + } + + // Remove a to-do task item from the database and collections. + public void DeleteToDoItem(ToDoEntity toDoForDelete) + { + var context = CloudStorageContext.Current.Resolver.CreateTableServiceContext(); + + context.AttachTo("ToDo", toDoForDelete, "*"); + context.DeleteObject(toDoForDelete); + context.BeginSaveChanges( + asyncResult => + { + var response = context.EndSaveChanges(asyncResult); + + GetAllToDoItems(); + }, + null); + } + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + // Used to notify Silverlight that a property has changed. + private void NotifyPropertyChanged(string propertyName) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + #endregion + } +} diff --git a/sdkLocalDatabaseCS_WithAzureTables/packages.config b/sdkLocalDatabaseCS_WithAzureTables/packages.config new file mode 100644 index 0000000..a45351a --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sdkLocalDatabaseCS_WithAzureTables/sdkLocalDatabaseCS_WithAzureTables.csproj b/sdkLocalDatabaseCS_WithAzureTables/sdkLocalDatabaseCS_WithAzureTables.csproj new file mode 100644 index 0000000..b16ff57 --- /dev/null +++ b/sdkLocalDatabaseCS_WithAzureTables/sdkLocalDatabaseCS_WithAzureTables.csproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {80368326-8FD8-4893-937F-D75ED34A9019} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + sdkLocalDatabaseCS + sdkLocalDatabaseCS + v4.0 + $(TargetFrameworkVersion) + WindowsPhone71 + Silverlight + true + + + true + true + sdkLocalDatabaseCS.xap + Properties\AppManifest.xml + sdkLocalDatabaseCS.App + true + true + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + ..\packages\Phone.Storage.1.0.1\lib\sl40-wp71\Data.Services.Client.dll + + + + + + + ..\packages\Phone.Storage.1.0.1\lib\sl40-wp71\Phone.Storage.dll + + + ..\packages\SilverlightActivator.1.0.4\lib\sl4-wp71\SilverlightActivator.dll + + + + + + + + + + + + App.xaml + + + + MainPage.xaml + + + + NewTaskPage.xaml + + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + + + PreserveNewest + + + + + + + + + + PreserveNewest + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + + + + + \ No newline at end of file