From f718e85deb1139fd7e2eaeaaacb8d7d3aa7501f8 Mon Sep 17 00:00:00 2001 From: Martin Yankov Date: Wed, 6 Nov 2013 10:32:29 +0200 Subject: [PATCH] Added an example of a text editing RadRadialMenu --- RadialMenu/RadialMenu.sln | 26 +++ .../TextEditingWithRadialMenu/ReadMe.html | 4 + .../TextEditingWithRadialMenu.jsproj | 84 +++++++++ ...TextEditingWithRadialMenu_TemporaryKey.pfx | Bin 0 -> 2512 bytes .../TextEditingWithRadialMenu/css/default.css | 8 + .../TextEditingWithRadialMenu/default.html | 170 ++++++++++++++++++ .../TextEditingWithRadialMenu/images/logo.png | Bin 0 -> 801 bytes .../images/orderedList.png | Bin 0 -> 455 bytes .../images/smalllogo.png | Bin 0 -> 329 bytes .../images/splashscreen.png | Bin 0 -> 2146 bytes .../images/storelogo.png | Bin 0 -> 429 bytes .../images/unorderedList.png | Bin 0 -> 335 bytes .../TextEditingWithRadialMenu/js/default.js | 95 ++++++++++ .../package.appxmanifest | 48 +++++ 14 files changed, 435 insertions(+) create mode 100644 RadialMenu/TextEditingWithRadialMenu/ReadMe.html create mode 100644 RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu.jsproj create mode 100644 RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu_TemporaryKey.pfx create mode 100644 RadialMenu/TextEditingWithRadialMenu/css/default.css create mode 100644 RadialMenu/TextEditingWithRadialMenu/default.html create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/logo.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/orderedList.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/smalllogo.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/splashscreen.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/storelogo.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/images/unorderedList.png create mode 100644 RadialMenu/TextEditingWithRadialMenu/js/default.js create mode 100644 RadialMenu/TextEditingWithRadialMenu/package.appxmanifest diff --git a/RadialMenu/RadialMenu.sln b/RadialMenu/RadialMenu.sln index 21046a2..e551f13 100644 --- a/RadialMenu/RadialMenu.sln +++ b/RadialMenu/RadialMenu.sln @@ -5,6 +5,8 @@ Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "GettingStarted", "GettingSt EndProject Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "AddingColorPickerInsideRadialMenu", "AddingColorPickerInsideRadialMenu\AddingColorPickerInsideRadialMenu.jsproj", "{B68FF94B-8846-4095-82EC-6BE123B12D6A}" EndProject +Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "TextEditingWithRadialMenu", "TextEditingWithRadialMenu\TextEditingWithRadialMenu.jsproj", "{A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -65,6 +67,30 @@ Global {B68FF94B-8846-4095-82EC-6BE123B12D6A}.Release|x86.ActiveCfg = Release|x86 {B68FF94B-8846-4095-82EC-6BE123B12D6A}.Release|x86.Build.0 = Release|x86 {B68FF94B-8846-4095-82EC-6BE123B12D6A}.Release|x86.Deploy.0 = Release|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|ARM.ActiveCfg = Debug|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|ARM.Build.0 = Debug|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|ARM.Deploy.0 = Debug|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x64.ActiveCfg = Debug|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x64.Build.0 = Debug|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x64.Deploy.0 = Debug|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x86.ActiveCfg = Debug|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x86.Build.0 = Debug|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Debug|x86.Deploy.0 = Debug|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|Any CPU.Build.0 = Release|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|ARM.ActiveCfg = Release|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|ARM.Build.0 = Release|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|ARM.Deploy.0 = Release|ARM + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x64.ActiveCfg = Release|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x64.Build.0 = Release|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x64.Deploy.0 = Release|x64 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x86.ActiveCfg = Release|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x86.Build.0 = Release|x86 + {A4D560E4-937F-40CE-AFAB-80EF2EB27DD6}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RadialMenu/TextEditingWithRadialMenu/ReadMe.html b/RadialMenu/TextEditingWithRadialMenu/ReadMe.html new file mode 100644 index 0000000..aca2fe8 --- /dev/null +++ b/RadialMenu/TextEditingWithRadialMenu/ReadMe.html @@ -0,0 +1,4 @@ +

+ In this example you can see a functional RadRadialMenu configured to work as a text editing context menu. You can change the font style, font name, font color and font size. + You can also align the text, group it in lists and copy/paste it. To do these things, you have to select a portion of the text and choose the action from the radial menu. +

\ No newline at end of file diff --git a/RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu.jsproj b/RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu.jsproj new file mode 100644 index 0000000..ca13ff3 --- /dev/null +++ b/RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu.jsproj @@ -0,0 +1,84 @@ + + + + + Debug + AnyCPU + + + Debug + ARM + + + Debug + x64 + + + Debug + x86 + + + Release + AnyCPU + + + Release + ARM + + + Release + x64 + + + Release + x86 + + + + a4d560e4-937f-40ce-afab-80ef2eb27dd6 + + + 11.0 + + + + + + Windows + 8.0 + en-US + TextEditingWithRadialMenu_TemporaryKey.pfx + + + + Designer + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu_TemporaryKey.pfx b/RadialMenu/TextEditingWithRadialMenu/TextEditingWithRadialMenu_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..7fec6f42d65c0d84ec8a1cd5d1f024d94ea5e3cc GIT binary patch literal 2512 zcmY*ZXH-+!7QP8dAV?7igF}}N;*ii03>X1{&_s$z4IM=35CT#{2}+S72I&@x3W^j# zq)G3_0>b#{NR5=Ch-4)1I_tfeH9z**UpafP^XGhMGIAISVL_9TDF~!OvQhFkP6#Wc zl#Gmok&$7b9E2vr5C3Js*I{J%GAJ*AHG??zzbOuO2(*+8J3^CThiG90`~PKdITwsA zYEV7LH$cQ23T36i$gqi~-Q3JiLqSpBU-IxFRfe)pzhElOPpBpOTmtH`gTvFLYG0fN zLCluHIO2B8Os%8IP@c;OQ;1{fghWO(Z}WF_9l190ux|S;{rheJp>rdoOoW_0wKma`+T_e`VOO1J;L^L2 z0klrKDNE}tGT%Lseu-T&GqFt&#gts&^=*#Rl)Ha7^mUR;T!J5GxmRsxO^oBkY-eLO-S(t*`N(?!tYpY(undRnT_F^7s(+^ zUm`|5yn84YQfM`s8(y{FoOvKN9QD(G43ey6=a*39Qn$NU&AjCW)H|@aww1BjLIFf2{ab z-=-F@=JYmyrcZV7TOo{dcj1vzKR9wKW#_i4JOexrquaA+@tUy;mx<3}M=dO+haF#O z$R#y}fBlu=ZkB3on28hE_xjljU10E;_rUlI+u`7sDfO5vRhP8o#^Z$j5jx zt^Ue*vC@4-BcVpvgfn9EMz6#6!#k7*>}Hb-oLQuw*v|SQKElaA)uHgBg|9lJxEd~%AlHf>6M2L#Sq7IWd{YjxB|9iCjAwvJ%68%L6kU)tBVFruNXm&xC-=pp|V= zv27b}bklR{af|cA9fhCyG^w?el}?}YR}O}IYBaOb=*2a813J6hydzp^jXBK{3WN5) zWgJVz*huHpf_*m9~J4()E2U*&co6mtughx1dJ;h& zrAAK><_b=(rXtUq)2 zZc5p_Fk0dk>@l+I(736Y5l}hw2$zYx^>CJ*#*Hmng^jM3zb|Z=&EfUyt?4UehnG&I zyr;<4SxKGA$a3Atw_?T$?rfeE9iP-SJ2L0+_*273`dVsE8nrTTECb4AA2s+RlYgr> z(M1N?T!e`qLG%3`mq>mL0tSNs0D!jpM?_&vM2!G1Km||(Gyr8l74QTIz-f>v16qJO zh*Uw01~ftB26ivN9Yh|WqX8l>uoFPv9h~w6+|f=5x0o`mVm!s z&Wb1{v$%qiBNPIF&E_8m@~_B8{EU40Et^fDs;34&BR`JJA_v(~RPK0tbM#R|o3Hl;4tBy-{EckUNEL~6{7*cO^pEy+Y}-paMqPuXqsUyC1qSW(>LrRBMfi3>N3~?^?k{dik6>ikAHXg?xNL26;uAH#e%BW!4XINuSHWjSwQ`HFX z?0(!@&bQl4v_wgqY|ODJXlk{1Nxy!#l66wvdAHA&dSb*vK_Tj3sfjLVShT92@&%Ed z-Cgo*4{g!bK3@ckF#`qzde|$I`tSMbV(2-lA5pjngtq3ZPdTMrRFkpQR&#H0k$tqKdOp9~&d@b_;TH<+IGL`x2Y`<>^9X_XC!9Z5I@JN4fTnGG;bdJgRGq}k?i zky+itp6}TWaywn5Eq)z}slGlf!ZzioIZeqp%jL|;`+fWMm9o!5f@f6Mhd$Veh3+*t z7U+Fh36qAZ)>e*BmO!(5+&}NnxPO~CKra2^%pM8^)hE+NAD{fS$AI#FE$QrC+C+c# zw=!sCuRH$^CRkv{$6T!!Wg|3@-WVnb6lTpyEIT|M!|fN_=<n)NE4kJW2ew-{bawZzinI zpe&LN(g)d{sj_uligQYLU7t4XtYY2nov780fV+Du8J9`1K52nVVwEDwQ7sK=s?eFd zdNP~#xg+&8Jt>~jboS^@1LF>}H^$DVQ>6X;BksBS%&Hzwu^MO#wol73h?*-ud&l#> z{Kta&)JsI1Y0zrCh%j}eGDN&{J3THe6r*(`qV0&0;oWt=m)_`VBc#j2>)D(*HO{Lz zhfR|R80oB-o~TkL*N0}8qqWguXjTOL6c-Cr5Qf^{m=naub3%#~TdEMOT15P^>oN>Q b)QdS-j4Ak% + + + + GettingStarted + + + + + + + + + + + + + + + + + +
+
+ Telerik is a market-leading provider of end-to-end solutions for application development, software testing, agile project management, + reporting, and content management across all major development platforms. Telerik's award-winning software development products enable + enterprises and organizations of every size to generate tangible productivity gains, reduce time-to-market, and stay on time and under + budget. With tens of thousands of users in more than 90 countries around the world, Telerik’s customers include numerous Fortune 2000 + companies, academic institutions, governments, and non-profit organizations. +
+
+
+
+
+ + diff --git a/RadialMenu/TextEditingWithRadialMenu/images/logo.png b/RadialMenu/TextEditingWithRadialMenu/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e26771cb33a49bbef824aa333737181b0a5b09a3 GIT binary patch literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=1foIEGZ*dUJQLud<^=L*gE#63Ho!PGzwUb%GPK6&5iF zt!p@aGNX}6(PVh|N)M-?0RNcTbjaWgEU8noxUax-n>&3Ay)#!y&O11y2sKEF zt72@XC1)RvT6Xw=y_`Ce)`nGULLL^lI$kwi^E+dQT7YeXY4GvlRR%kj1x$VZi%Bdd zz}2Giy=-_$h+v#(S+};)DuE4EM?_^qB_eDeo@&q%StD1F>L|*0ZC2sb-}llSMTM?O z6{b3iid~yk@VE7q7Wb+P8?H5IYp?pSVcLE~18m#ygK20HL@6W5woI~Fjlw$fX1U{xQA5a+t0 zH$WNIb=fNpWHo}M9#;K6eszDZKty_|-?j4iocj5#zotrWc;@;w`H@=mjsvS2wXX0_ zY}l$4@^sE?UcC)ji*L=Z&}P!xaL&2((OQlj2dv~pV-ifAS;ZsH1{`D!GY%yys5WH)f>ZLo5m%6XjuXdbKMR7MEHSyb{m!_{Afji&MT$_sz7 z>1{~MlIFe28FRN(GC_~;#Jp4ADipP+9hh|P#-&`vO-Upt3jE0@YLh(^55uYWl9g)Z RA3>Rb!PC{xWt~$(69A&hN*MqE literal 0 HcmV?d00001 diff --git a/RadialMenu/TextEditingWithRadialMenu/images/orderedList.png b/RadialMenu/TextEditingWithRadialMenu/images/orderedList.png new file mode 100644 index 0000000000000000000000000000000000000000..1e82a7265a16cbd553fec7731d8b4643c2c5138b GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^DnP8q!3HE9X7Bz7q!^2X+?^QKos)S9a~60+7BevL9R^{>76Oem^K@|xiEuwVB{27}gMf>(qKFp=MK~$W@meSXM0aFg=HxDWf7niS zR?ioe-;q-5Yo1%{p8gcJz^BQG^OTClWH7@k=}GfETj41#Pgk$-uKTAGAoR=1F5szB z`Gn~A1pz|Jr9U6s%UiJW3m?0x;inBN(=S`gOsSs9Te^0^ozpohvRRiJFWT=j`^Mjg zU-H36R7%=>jNhhK2do!!s7MEw7%H5Ic}f6L^gU(Bi6 z-dv==dEq)ysBtB3TVm2Q%4ud;Oj?@gp#t89ZJ6 KT-G@yGywp|bg(}F literal 0 HcmV?d00001 diff --git a/RadialMenu/TextEditingWithRadialMenu/images/smalllogo.png b/RadialMenu/TextEditingWithRadialMenu/images/smalllogo.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb0d9d528c42f132872e8af4dc563081b0b9aff GIT binary patch literal 329 zcmV-P0k-~$P)q$gGRCwC#*X;?zAP@%N+|i#I!$mrh zlQ>KU$Rdu>|JH&931_?y6Djl{gb>4nCV5pzDJ?S!mq|4ZejKj%i@j$H{#ML~2Y{DF z$=}bKPaz+UGt{v(4CTQQXym}&iW8{s!ew~XIE7NLjQpy#I2S$rous$~?f%DHT#B*+ zq=#!zc5=0FEqWFpB%UE(L807on!pidHPLgYO}XEgorrg;PB=8ipgQ5u5`&g_MQaRd zaU7Ao8XQMuuN21-s0PPTs1%38x_Yl3Fs-|Y4!C-;M-8g@n*v@1|s#GQ665=9@Rxy?u0YW0&WN+~=RXpPbVXXL4m7Aq=E6I0%{06TwRn=U9d8>exk> zD-Z%M3DNQ`bTLSEF=%NFyoHcAkD*CiXqljo*0E?o$GiDC4q}}|%*0WghLlK#npw?hecrM}Mw?`E(z5C8< z8&*b^!{>5?4aT89vdrgBgSc-x6JZD3F^l#*G(@OO*^1D%Eu7?HAy<3kTLqW9N{^#6vso zVQwY48q7)m{~xQ64RV7{E7Y=&T~?^05Ky`5oNQ8bLgFCPq9co^R09BVRS1OAmH;hU zC#q(N!gNqm!zU#%sv{r5mm-Uv8b-~a1F-;p^>)pnXfKge4s9?;;MFIr*fixPG}NBA z6_G5BEmeO6XXh(emkciB{7tA;iwC2^s^VzyU_h0@ae84ACMY`cIDEju=<`q|2QAEv zW_)W|i|9aknqdmS=#w73eW_csQ$8IhT^vY1^1;X3&J0{%*tcQq!gJpr3w?TJc~@5= zKV5sM{$3k>b#S$@CTkhIF*{v*u(F&$&Yq1naHxt8Mz2N%7aQ3(^VNRZahk1||7?Bl z*idzO_u)FhRj4cPzDO>YA>>lxAGaciEiX8Xzp1SVPv91};$OG3cC&8!v3{Jq^kH@8 UTIccK;hzT5*3#}uZuEx!0OwrBv;Y7A literal 0 HcmV?d00001 diff --git a/RadialMenu/TextEditingWithRadialMenu/images/storelogo.png b/RadialMenu/TextEditingWithRadialMenu/images/storelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb672712c6823a0c91548ded70a8acb85536b4d GIT binary patch literal 429 zcmV;e0aE^nP)NtYJa1l)bQ5qwGXpZbs7%2oRMd4y35$s&66(fxhNg8W02!vSn zdlrL2h^Fx+3=$z;kK{0D#MyeJ8WRWZcLSf(PcQ_mLOhrmC}O-tX^0c>5`YvCUZVsc zG-6#78ubjJ5nA;OX&^K(q=i6ZNE3m?kTwE^AqxZoLskfB3|S&1F=UO9!cY$g2@Lgu z;9{sJ1P9|X2L`r1#Gs8R{E^$PRrMaC86q|a~60+7BevL9R^{>76Mi6^K@|xiEw{=;Ln2+|tc(`BpCf zS!&|j la*yQ6XjWkpm{)4UaGP~QwL)t1B%n_iJYD@<);T3K0RUY6eMkTR literal 0 HcmV?d00001 diff --git a/RadialMenu/TextEditingWithRadialMenu/js/default.js b/RadialMenu/TextEditingWithRadialMenu/js/default.js new file mode 100644 index 0000000..f9a820c --- /dev/null +++ b/RadialMenu/TextEditingWithRadialMenu/js/default.js @@ -0,0 +1,95 @@ +// For an introduction to the Blank template, see the following documentation: +// http://go.microsoft.com/fwlink/?LinkId=232509 +(function () { + "use strict"; + + WinJS.Binding.optimizeBindingReferences = true; + + var app = WinJS.Application; + var activation = Windows.ApplicationModel.Activation; + + WinJS.Namespace.define("Events", { + action: WinJS.Utilities.markSupportedForProcessing(function (e) { + var item = e.item; + var action = e.item.id; + if (item.parent) { + // handle nested commands based on the parent item id. The value for the commands + // is represented by the item id. + switch (item.parent.id) { + case "FontName": + document.execCommand("fontName", false, action); + break; + case "FontSize": + var size = parseInt(action); + document.execCommand("fontSize", false, size); + break; + case "FontColor": + document.execCommand("foreColor", false, action); + break; + case "BackColor": + document.execCommand("backColor", false, action); + break; + case "Justify": + document.execCommand(action, false); + break; + case "FontStyle": + document.execCommand(action, false); + break; + case "CopyTools": + document.execCommand(action, false); + break; + case "Lists": + document.execCommand(action, false); + break; + } + } + else { + switch (action) { + // handle root level commands. In this case if the user clicks on the 'Copy' button + // without expanding it, the text will be copied. + case "CopyTools": + document.execCommand("copy", false); + break; + } + } + + }) + , + expand: WinJS.Utilities.markSupportedForProcessing(function (e) { + var menu = e.menu; + // persist the selected state of items based on the current text selection when the menu expands + menu.getItem("Bold").selected = document.queryCommandState("bold"); + menu.getItem("Italic").selected = document.queryCommandState("italic"); + menu.getItem("Underline").selected = document.queryCommandState("underline"); + menu.getItem("JustifyLeft").selected = document.queryCommandState("JustifyLeft"); + menu.getItem("JustifyRight").selected = document.queryCommandState("JustifyRight"); + menu.getItem("JustifyCenter").selected = document.queryCommandState("JustifyCenter"); + menu.getItem("InsertOrderedList").selected = document.queryCommandState("InsertOrderedList"); + menu.getItem("InsertUnorderedList").selected = document.queryCommandState("InsertUnorderedList"); + }) + }); + + app.onactivated = function (args) { + if (args.detail.kind === activation.ActivationKind.launch) { + if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { + // TODO: This application has been newly launched. Initialize + // your application here. + } else { + // TODO: This application has been reactivated from suspension. + // Restore application state here. + } + args.setPromise(WinJS.UI.processAll()); + } + }; + + app.oncheckpoint = function (args) { + // TODO: This application is about to be suspended. Save any state + // that needs to persist across suspensions here. You might use the + // WinJS.Application.sessionState object, which is automatically + // saved and restored across suspension. If you need to complete an + // asynchronous operation before your application is suspended, call + // args.setPromise(). + }; + + app.start(); +})(); diff --git a/RadialMenu/TextEditingWithRadialMenu/package.appxmanifest b/RadialMenu/TextEditingWithRadialMenu/package.appxmanifest new file mode 100644 index 0000000..fd20a3a --- /dev/null +++ b/RadialMenu/TextEditingWithRadialMenu/package.appxmanifest @@ -0,0 +1,48 @@ + + + + + + + TextEditingWithRadialMenu + myankov + images\storelogo.png + + + + 6.2.1 + 6.2.1 + + + + + + + + + + + + + + + + + + + + + + +