From 50d8cab7684c2a2919d9aac654e60bd148825914 Mon Sep 17 00:00:00 2001 From: Nathanael Schneider Date: Mon, 27 Sep 2021 14:49:39 +0200 Subject: [PATCH] PelcoD-Plugin done & Bugfixes - Fixed some translation issues - Implemented the PelcoD-Protocol --- Assets/PelcoConfig.jpg | Bin 0 -> 33660 bytes Assets/PelcoSlot.jpg | Bin 0 -> 3753 bytes BetterMultiview/Plugins/KNX/KnxPlugin.cs | 2 +- .../Plugins/Keyboard/GlobalSettings.xaml | 2 +- .../Plugins/ObsMultiview.Plugins.csproj | 9 ++ .../Plugins/PelcoD/GlobalSettings.xaml | 42 ++++++ .../Plugins/PelcoD/GlobalSettings.xaml.cs | 35 +++++ BetterMultiview/Plugins/PelcoD/PelcoPlugin.cs | 33 +++-- .../Plugins/PelcoD/PelcoSettings.cs | 13 +- .../Plugins/PelcoD/SlotSettings.xaml | 25 ++++ .../Plugins/PelcoD/SlotSettings.xaml.cs | 45 ++++++ .../Plugins/Strings/PelcoD.Designer.cs | 117 +++++++++++++++ .../Plugins/Strings/PelcoD.de-DE.resx | 138 ++++++++++++++++++ BetterMultiview/Plugins/Strings/PelcoD.resx | 118 +++++++++++++++ .../Plugins/qlc/GlobalSettings.xaml | 2 +- Readme.md | 5 +- 16 files changed, 567 insertions(+), 19 deletions(-) create mode 100644 Assets/PelcoConfig.jpg create mode 100644 Assets/PelcoSlot.jpg create mode 100644 BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml create mode 100644 BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml.cs create mode 100644 BetterMultiview/Plugins/PelcoD/SlotSettings.xaml create mode 100644 BetterMultiview/Plugins/PelcoD/SlotSettings.xaml.cs create mode 100644 BetterMultiview/Plugins/Strings/PelcoD.Designer.cs create mode 100644 BetterMultiview/Plugins/Strings/PelcoD.de-DE.resx create mode 100644 BetterMultiview/Plugins/Strings/PelcoD.resx diff --git a/Assets/PelcoConfig.jpg b/Assets/PelcoConfig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a9dc2597632689a8265a1fcaaec12265fbf878e GIT binary patch literal 33660 zcmeIb2Ut_vwl=&F5CjqFO^8ZUs!~J&iH#;Af+8qFR73;>q=S^DC`F1W2q*{<=`|uH z^oTTRB3)|ey(H8C$;!7pUETNWeeQqmckg$9Bf;k(Yt1$1m}89jjxpXjL;Xq}0(PI( z(AEHGXlQ`z@IQds2b>0Iw{83O1Hb6tA9_Z5dOA9KCI*J>j60cj?qp_SW@g#NzMEwi z+b(A2-Q2s`I5@euxOTGg@N#qVvU75Aertq=7QTm$eg{4M4o((k7S4b9Mg0Jl^QJBR)ahW!qlau1&;Fbbc_t>iLjC5Xu1boAZ9#LdIY$1f@-e&C>l zg5nXSqsNp_pHbJ))Y3kC@sigMio|IuSV|A4?JLE#ZE zBBP>TzKVI9n3SB7nwFmNJ}{KM(6~Bl}@oZ1A|Y(b3V;F?<^r%{DjqP0L0{zwhvN_LKSy zHyk+j%ROY|JoP*ww{nNDya9phreiA;w}`^9DDm6S{xq^bHZb4+)X4reu)mM17uZQl z15X|;8-N7JT_jB^AZk(xuJOO80*u}iq7hHk3_qJDd!yB~Li z$;RvUp&hl6XP?)k)_ZPYz_Ja2-*{jQaiQ3Im?_b=o){-? zNwJ0QklUVauh<`)&F~gy>a2|=VUWVDKCQCk6>w{+b?pf_nMeij8pTs&rvzC8YrEfO_{X#+k?XLb*R8`1hlExWJLvb zudrOa!f#qI7Utfrdp9B5!noHsc!w}MC*u{@+}>UHxqA18Nl zuXF3{wc{ImWf5+`x|whMW$1c%pHmd?HDcR&hykQuejg_eTF+^IYwl+fVEb+A|WlaH?`-48!ke-CZ6( zu-4Z!`?Gkb#Rv#UnXrVn$C{rRLq?(>78$mUp~{9_nk~G~X!tG~XT6Le#6Cm#tFv zDcI+~WHW!H%_hN0G_v}XgAmQv2~|1&TlC%cF7$=%X>$rPDvng;mdi@yy%;gkr->o6 zTrL$%?G>d0@nKZJn_ulOTGcHQuhwq9W!Txd-ZOtQ4_k61&sdME`lhxZ=d&s)(+KM~ zCwc_erIq!bmM(DSmRBb61|9LDO&KLIlTR*5J->fJuB#8FE>(}AT z6!A3Oa1E&Y~-yT|=joDM*fnX|oq--l}gMQGtct_TEE0h$&nz-4B(|HZgU5_saCnRnEX+{@OQZhf>uzNI`R zVg%e|L4kN49N9W-4$VOYzF2QTq;e`SYS<1|sa}KsU?)pvK#~m+-?w>f@MEg^0u|^g zi-3IJ-cznkz}&$~()E@v%kOpAsvjK{alV&|O_7}O+%aY%a8KmAYQcgxy*rjHU(-U_ zK0*aPI8lKbqkNOv8`z*DV;O!&*SLE8QV(b^3oi{G|9p=xivRH;!xy~~<>kzOb-aH! zRQ*=7CnT)=g7$Cdwjd|NuMfVt?!SA~|4<|~q|BO&UdSS}QRn1xnXK5CB`Nc!+z1*? zCV3G%pRBBb4suKdU&Q6|r{1S8?eCE(jP+J@#r7of)lMSrYkZP^lz*N6GqVEh+83g@ zvkqjP4j=PWS=g-csKcnIRIJ!DRBt5N`>P$^Ij6ZMy-tVTSieukV_FxV;Fr#kZ%~2j zCW{pDaNJRw##*u#rMpUFkeLmfKt1pB5~c#-*+aN3mMh@Y3Z~VXJpJQ3o(2-q%3P?x zDWgCf!4OFW*sfmh)pt`xvk_J^N8UjVyDkU!D0P2Yh#kQ`$Wi>Hn2Ba}e^_v4=}Npx z8lAWXW85RG`{OXUr4L#pDsGZ2jVfnxUJW zQCTGVe6NSIDhI@MX07C`i8cRZuR=3Yqogf6F|YmQ`R7`~Rj*ZEiRkYhI?xXW@O1wv$F@Sm7Ju+w`7jmi?!X#UB22ooU=!Yy^xUVm@{(kO6(pP$*Hj46NrQ@bEQK z48`5q>Yubc8P9>XZS3H>(eoox*YK1 zTVgk5huMBAP0n$FumM zrSbVb81{s#s?82NA0kZBok(TOcjss~)hP@g}!lHGcQ@`n#@^0vd!t z%xLf;n#>c8tms^ypB&_nqNFv>REnu(Z$IMU=Hl-3u?2)BW~Y3rT(g5 zse_OAp|5~Q{LA&M2!he)vaS^LC9HW`52{BXaD{+9hn3=0Xy*~T$SZK^#)&bdd zefL@DF@_Bs$^fDLKdDi2qwe(PhRKrLQ{iL56CtcIg}z5vrzNr2@Yv8Hw`7K?qEbNRK^Qv~;#b?@^+*$#8GIRbh1hGLD%9 zLTu$~BYiDfnsJ^k9;LVYJ=)7k9U|I&OyH>97!kkl%Oqsrx!>+D$4j*@PqT zK$@cJF1R0U@kh_4-y$@;x)Vj-h=#UNflp&;IoKb(>w%vidu+5{Ede$$v>c2gP#b$9 zx&Da2HB~(WIu3)&6DSfh6%Y=8TY~>RH8?OCc5l;P7V>I@ffP9Ac*)4*XG#5J;(Le- zh+i}GYlb-gdu(XgLsbr2v0phQ0oiB3R#@8_!PaMSZ!sip>4>r2(T{O&cIH~TyH()` zq24LIy<>&pHCMapBcS8T3+i{NK<0FT!_pE>Ux868?tAP0$zP|JDHXR%91BU98#w0J zBk5RbRgmAhn9(_acLQZeaa2I0r53S9UqJ=hJS3O>aeB~U@-gD=M})9iY%khhF;2Nb zntQpaxU_vDNTF$0qErJ=zt>v})5Nqy3_T`^D0X+yNZup1U-9P1M%2u}uDl6P?_Y62ioQIE_&01_LJzb^Q{C5LQp zOGkpa7=yq$3xxHc4cpG#8_}jZIvD!zTfbmsGD?o5r zm$dcITrC)nj7xbXmgwf>IIZwi%huNIQ=fTAMDC%C;-h;yJzJjOcS$?z?XrG18v|kN zM|jmbQ%)xoW~ZB8I|U5L_RK#H&$7N^8260sw&6|QhZ-xwqWd<9#)zv<#S zNOlb)ot{HZR={iSBTpQpazfz6WdwQO8e$m_Bi_n#JQWa3gm!PSZY*YiLxYP{;OUp` z<6Hq$fYCdEyxxf<*u!wQ?hX}rtX2hi&Y($3rEq|sPgAT8tNcd<{OkCt9$8=jMy$Qa zVb*tW-exluVu2AKX&$iq|3`PM1=+t?RUGJ)-XA}s<6vnck=)#oH-FpnK{X#=;3xIz z=@UYlTV7P4K9+oi3cQm-Z?bnUXQEn-=9j5}m_5-F`tTl{(m{RBM!tUvgO+kV@?r9X z3!0G%jAgpZLRFVho5v+Ly)YB3Kl!m2-Y?jwzmm%Jl)g1Cw2EXbJzB6Wk-%t@XW7`ER)Hu#LlEB{^rg_KMYw$ z^^PiwSTIXjov{b^P_ICQ)1=4E)B9r|*{}KRJGLy}?9E>ygBHpa%PQn<%&6biTTbvh zv&fVuSBnw|+U~l~>49}IdyBlij z1Ea~hNT&iPQ zdMik-RKN1}z8Bk+5LbIzS4@#rCAaupBW~EFSgnoTJrZ><>#)WSai$=ERwSO`em1+6 z8(FI4#cCuOcbN)Yd`)z+C7urfr$57^JB`KA5xE}?w>&}TYorgOg^Z17du_u4<`(mH z8H`UJf8DfvO}g_F_8IS3!?K&Kfje>{4)WtVBahlhi()_MuY48{(-Yd*^M zoq%Uto#Fi33=Nw|(}x_$&1P#C{gS8=DSWQMzGj(Wyxi<|fzU)2nU9o99I z?+#9voKJR8SoaYqDv7tzco(Iee=IJk&^*fTN$|`1nSe*rh5|LUI?0gFTqHiz4OH9Y zKiVKWZ!(@`79Z6<{*{ESHakEROLid|)kH<3ZWa@tqKAvGTTO)1<+V+AOcn-vCfcdn zT+bOl`|NfEy`Jzix~Hz;i*1?Z@KI-bW-Ifml27@bVGLHto+uu>wRh)C=C;OqBsLNR z)yUUS8fCjomX^ZX<(sO_HhrHX7ytq^M&GaGe!^T!IoLyfui=u3ElTK=AiwrsH9_`(cT!@#<^zQP>F079n+dyN6 zEh*00f<|$RnsJL)ki7wrmm-SH)ermA5@Z1@nPiP4Ny6EIQD=V}kHHm>!PN*#8aP>H z2zzhS7Ahc+xOD-J==?L`z^W7tDV^XSbSoEfE5AhrtPvZ8PLN>aL` z8Fe)VrrJ)!&1RojmFclIwi@ijkCpXGj7H&G#-Rb@wwVn>lV_?FpN75d?KiCl9ay^1 zd!h{<2;DXbeCSI1K$~y$sTKaa`3SOkf=PYnFO4)9SlcoZ(^Yo9kg0mNI&Uuk>=;{n z!)kzetaj{9?#ZoFUZ;uPEdkCR(yA(+!z$_I3-2H1Os7vQbNTWX;$Gi-x^wDC9!q#Q zCk1~kDwPoSp`<&+w#+2WUA77fNfaFTVuQVUi5+$3;sRIPvy%DwM|IW?Z4S}5(F18v zb>e{W2DTbs&>iB8;hzuf<+w9%-Lo? z+;{dcon;!aZvJ@A)MkX$rh*S5-Uh?!?z7gmF!#wedtp^&t$_XWCs^qg9+~?I=r|85 zZ99(EBOMzO6tCg&5zQqa{pZRw-IuhTvP`DAi33fad9_*&>CPF;Z_}Q1Xt|pCmdr@9 z8ZMW=)b1P>5YO4RGJhG7H^UuuRW$#wnR?5@g!%~)GrgUR6Di6E(rs)|pZmK}D%ozA zzg}FAb!a!*sO|L-=`3`ca*wVYaH_d)U$^*#`zkI_Rlp-%Z$w(A&LD;}s>!rk!Q+%paMdZ+A|UuD(d;ULC}? zy?cjLaFJ7?h9GaZiII3S$w%AgR?oK-)*?i+JXzDMY{HCScCXUySY?r~=HFhNDgCN| z00$yZ_Pw(73>`j`rBCs3V<8$RSM}e+)ae~deJ8Rg>*vlp1P1x?Rt#Y{ub%|~{ zxo3@hbX?cnkI!mC9L%g6!!Q(k3$GlZmmEv+n^zT6Ewd>Gu7jISR`z<8shDWZfg_lL zinBOESn#SXt0C!zTY~lM2t}vvg8P$Il5>?qDPgOb_&P45&-QIuaen&|~tn_QtT_;QaD!V0#>;~4{2I!XPXz#^|MjF&< z@Z${_Y1xFuAbX}6NNg*fwVLa>`jDr+4$zt4y<*IL3SRKZ~ z{BKzPAMDP%IT$Fqc7k&VODd2kllFtG40kLAn;87VSmtP zLt)Obw)b$}R=z}GTWq3Ai)!^{p@R{B#xpsc~%f)A$Udo+p)0Na7KEL-@QvK`?kG2^3LHR$G|-jky1wY?N(%!k&8^N zTRESR=#6LP^T`|F^Jef4sT=a6Fi-&oSb|G}h+Z{CxD*7QgjEfmFLHpXEE=(1!AW0yGl^s`ldQX191lgd!}az(w=m&QoU=&(>m4rr>$oQ)gl}R;`ZvecN|%d*A`XR z>O4R4fi|4pwM6J$Z$+4ex5EvW#1;pphD~o`NQ<3T{Zl>Z0i|65HiueH-7(NLRX3R& z$f2||aHA!oaI)fk&Ae3LM+MRRerVk~-zMW4YjsPAzL#>B>aoN=66zY!6@yXyke~ad zxA_|5Zq<-^7l&;${=8M}-UlXh<{)rFksInBhcsHgZ|p~vM?NU?O!CqqxJHcF@?R0q z?RdjcEhBumA?}r+-hjpROJNsmJU@qReN3+~vgG=v4B_@>mZU$X=5dI1zk3m0_XxPY zd}bT%92eI4ILGCxRvkJ~1A)>@MOIz92gV%8*E$CFrDU}wRsi8<5I6LS1Vw3 z!R?0L`#)*7p&8zCnF<{Gvl{#ni~TkfA!l%qvp9O`PhF$}O5>2G?5=FsEp@3AAYYo* zZt-u12!1c`&OY?+t5a%RWu10P<>irOSUIWdJQ5FIKG;EfRPa*{q7uvxdtBx@gxpTb zJ8OC}OI0sTESkRTOUAXU*WNvQQKU;UNIAk_W%nj$eD9Z}q`9}4RG$)=a^s^#nZ;HZ zyP(BX_4H0E@cTaJZzFJ$9Y=+21V}>mjpU~`Tbi}F71=2y={Q`bem3=kSDE(ulmA#w zgb0bRKnXI~bPTl&8=n*E_h#l#I;;8Zp?@~H8x2(8PmU|*he!NRa9laj-&Fih&f?g2 z^Q-tf9>Tfen@)KA$zwL*B7Kk(doUX~*`;HcA6#SN_i~<1{*y?*J@u&tIg|LG)5Tvi zx$DOz=zs7`9?`v6`@HtE7xK-ph8|h(PpkGc`I~)7NR|fHWYyi<3MHrg<5G=KhI%$9 z$s+i7V6~w6r!A$m0DtbqdOWUina&>Ty4~Tm^&rz3KJzR!21=1>yFVTrlihfNPC~Avb4x1K6e{u8Jy@lvwIP)kWJ*R$b#S7&!K^30Qoa}8hZG)|muQ7dRUD)H=| zr=odV$ZL@#tY&SA{fDq1HF^qqp@M5F#-gSx!qeO$BfGO;JjCt7HIH2FbgPRB$>E?1 z2jiG?_z`yA6j8wZ)a3B-#Y!C0)cvr>3NQOnsqlxdZ5A@!F=@P8>2Ard&mOEOEaR2%ccuikO?vpA605=Nk7-7Z(>XF#=E5xQXhi1kv!Tdvzx~! zeeLr>7VF+66ohlyNHdv8CI=lTtT4wek85lx1GI;2AB=T(;;(nW#r#kVM5pvE zM>WTfCKC(b#4g;{sI%1~963@j(*pOE`UQKjtNGE;0C?#Y0rUqgP@E>@qeQb!Q7rZKB!qM`NF!%;e@g zbiV1S1i`2bf^W`(#2P@eb5QR%y|4A`vK`NzjYU)0{o>NU-H24`At zXpM%*KcKO#-g&c}_IpuzKZ1kT_#-&dZamrUZCrX?q^r#sULNILv1n2}Xt!7nxnjq3 zCJc4bks~)?d!>a8mA+Gk*;gF})3!b$?%>BZ6WO(>gcNK3EIFy9kNXS5+YWNY+MVVu z4@_e^$+RI%D|K1bX|%2qOx4!P0i48aO10+pb8B6- zV1M}Xt3S*0f+Ew4L-tS9guR^MsI#=Tf`fS91aCTxjq#jrcXxDdP0&ibGM6KYcIkK6 zcyiD=?|EXRxSf*9qcy~L-JDU$7Ft{DHSrAA;hUd0z2~`(yqxlL-y~kb$vxLQYFo9X zZN13@`01&r*wSLpd2FZXx(E(qG;SZR#zR&qB68k`!6n9f1usP+PZ%WZb+o+ICGKL?<@-i!(R~GRdwODn9i$io z6JYnG<;d7jt5xe*Zqx3}%7F1x@H7=a)4CFeIGe90GgzlbsotIARKT{MDN%&La38nE zq6fM6!tu{(kXTZh>A1LwE!`-^#TBxbM8wRJq{BBPWg}an$~3nQ*6+fM>XFo))9%{Y zda>FhkWQPHmarU8o>HoC4i;|~aeS`enc7#h5$fysu_#Vu?T!u7za%an#aiaJ_R2+4 zV0buAqrGxzI`7))owF0#7Pivm`2_SKsnQ-X?{{1h<~z~0lz&v3uy@wra&0#i*d_pH zlsc}im*UC&xFc%#ZgoVxj})mAv_x~yBDoYyooXPyuIo!9t)lG~1j#%5>#8Og-(H!& zG?>~aop2@5_2BI}%%0?X=jR6yRV@$PAZFs_0PaY_Om|gOuVq+)>CM?o?@btQl(kPj zx?plypELdjTX5jbuT#lxH%?yA+RXbWn*BOkWV97ew1NVkno3jdj&5j^TVDDIxFhQ} z@l`lKB&!R0o0+?g9wBqOJEk@-6V-DruRKEJxw@rbc6CvGj) z8c4twtf%j;ANLn;@bf=mjymOaxceJDzMqV@CveXW~!8NKij>I#QFYq;JLdC}R6*>X$S>ukp` zaV2!<3i-I(h&^+QZF+A{9EaY!;*RDO_BRFG=S1&x$vYI+MdEeqqbDM zlAAZ6ZPDe;K3K8=DqKyU5(m-DRxpx^#RJRqQ%UdK!<9O?XR9T}9y@1WK4u|ySR{A< z%tfyX6NzhfZ11n{p+RSn8-o9d&IE7ehFRQbSbCAPSsK3a!XuLBJC8E;-KxGVSN4_W zEB)_8`MqU);r?Ac*j8O(A@tAG>x6N1Q({xvKUr9&nAv}?t28%Ja$$0Bzw18YyXEwa zl+J|y#3j^sfBa#MrGMhpp!!ec_u&66ktCEwPsorPX} zW1tH&JcMELVR0ySQF0^er_^S2$V)NYkZ<(?=xam-oJ8Gf*oVb$Fp#TT+7O$ULgP+T zEQha62J@io{qhhyt-E4`-o@N6GwLqfzPg`==H`BO&8QD5+M*{bC5E_ENuvcC8oB9??*U^!z7Mp={cK@x zW=w{IiMRD|`t%#u5do=~8eX$7IIm**_2Z5-QRx=Lw`G|Sf89_3gMoL!j@ykI=7?KUb7qN0h4e^ctYyM{%ihnL?A3SXl!&Cs`;zp8P zAN*HcT9#Q2E;-{_k#pyWN>KD21@PzbnOR|=c90>3l2pc=UPnZISWM}2*Qq|zJ}4VF z*K}A%bRwv=wq@eRl`g)s>Bsgf2`{_`?(@4ps^vx&&=)@R#`K!HYhEBUFCp`U-?&}kaqej!FUm>m95q{#vq4#5K`Dsa}7EOpH0NLR1VSr`xe;VDTG z?!1GMpaMV1KkVmOqWy2bv{{vQlm%6Zf3G*!E)(Xqrr9A)7ES3#OCy@FF@s#s)vh}{ zuhn3jQ+I)DKHy!w0Q@#DQ`P`4P3H;NqFVX^ZM5GOP zopXiOeZ30(1WoT{yCqKMCv+7MtEzlp{22=uCwiNr@qFACW$F-qONiL_Gg#qe16BqHKVU^}9OBdZrc*6W&X86Q44^)Cq7o z^5$03xoX2j3sB}#G;|J)PZ^EGq8jbd^0*-?z;dn;(`!B=^PDJLeNlZ_mVH(kNfzgh z=ge>xliQ6sdv|L*Aux7MbEO!8RkBpukk7vVdaKC zZ;n@B#>gPy^K&rGJsiO$mS{0jE}D{G9>kk~I%vVlr~B-|2 zF|3kxQwj~2f(U83aHN?38zy(+*QLKC@GnWg%y0`{XX>-aFefHg9%kUR@umHSBP(lP zi=m`ItTy;O`xS_GIq+QtTjRTvxC}IA>h+ zJfGGlkv;cpusInShtow_a^`O6V(G?<^wqhZ!<=iFZvB_Hnc)a>L)kt6y(Z=!O9gcD z`B$$lVZO<(-Anb`OjhGJP2YUk{)lYp+cF{==2w7Zb`Q`BFer_xI@gWakKJOSR68hS z@3D?hm|fC5$SQImbo}+<{@8NvGI5x~^f=Fq^tBfq3<;59bZq6IiN31tFN0R7ubbYv zm&4}$=qGz`#oYRQB|%KlJ23c_nVxI1;PqIj942xOm(Y^NqF1NKsQ_!FxLBp@8mM)>z&Vs2ltTd)4cR4 zA)uwMSS@qephn#2u>!`BZY$5!25GyL>ySsWwgsE^K7*##Cytd*MO98YdS>>GC2S0u_DvH? z`+^)FU&MptSaLMJYt#EUQMj%I{0OI-W(E&--Y70=U-|U7UGsKE+dCIJnj zD@2H{5yQ+XD%obUbN5UK;dZc5izOo-mk(TI+NGqDRzGAZ^03*9%ZXrT>QpTxO8_5L z?5-!w>Vy8op8jcO@aFq#{pBmhui|^%!kn_?9;!ZlUq60i=*U5}P$KP`o`0_%PtP6n zPK9Pv<#dj_{k8Tom7T8YGVwdM&1f8$bP2U^H#BSt@ilX7(*7KNEkpWl?^ba?Y6t^< z2%L4v)1d;kx;`@a(3ae(j7?`NZnX9DUT|@Y@H{1TzcUk5dypTm)A=OiXo3~*iK$5&sMt7u77jnr4$p=HrE^x))8d$>j zMnL*4Bj_y-X)3UC%@8KC8m-W78GsGP$Z!VmrUecP4#J^ldUF;#i z`oy<+HiL|eeF9rI&mEBuBSpi$#PnbBCBZR~+4$I+g`;rR@l?@KH4ajufxk*A7y=z_ zn_uA65e!X^fBdCSa%bR|`V^JO3$DHk%@5?N$GVgLeAWJo{qLMHlJ!#nbI!`7r@btPm$Y7&lewbplRh zAXverj4;wgA2?0?cAiK}1pu$(RG=ZFcnePK*B6sv8ReS5bJ(Ue+h+4N>GiN5BnPYifP4OaELVkw_&JBK8WK1TU|+Tu=YSrhzg7w-p}TGWf=*6j3v5J zcU|>&5J2*T2?d5T`4<@eKeXtPf+L`7 z*q}Bu`h0s>*x@6n9q#^@Dr}B3fA%w2R%hXVm_jEp-ud!9cawI(3m(>0dJm&OxNCo4E-)nKj-!4WJWR&= zUXn%`ttW*3;7oAR{P(qpkcFCXJIMO!KFv5LnR!T_G^&FwB1A<Yi8u4~1F?X`lX}dVa+1J^?b*+sI=E0sr6j*7^li+J{KZ{mj>0?T-p7fW`sV7~D%w6pXEACDRbrsenZ0r-H>Ww19KDylK?pNdnei5#~c4R5i@9>dj&| z)m44#*>Pw8k@ee0ql~k;PYm9w(6>#}iEDh7MZQZ4Cal+>xeMGe(yBTZN3d_Llx2eM zzS0fBzB37YttI$j}t*N^iE%w?g(X8eB1p>9N*$vNYdKFaRB`aHcYz z0e{HWCVN?H!a}i-FhSO@pq$|(!9Opn-#XjPCFARpkSNzoJ7ObOK~921_2Q(e1^+m~ z$j4zTZ>2!x4jP=@oKg9sK7!N#|Bmhd`@PAp7XLk7`H#xcD8{E91^bZ{s2Rt#u%HI} zkxN)C963luDY@QfuX4<^Jb1V`?3^ak2U}4=6T0Dtm6$Zi2AmCILlGSU16&*A=4nO1 z!+st{_Xj44dXy(oRA5s^0s=EPX?`PPX=~&*)1nqe9EW&)9Dkx>ijkJ4rCh@3&(8{H z%(7eDJT>3!H#D?M7d(PugqMte*iv+!*iH5?oVmfI_O zx8>KSxQmfoJWYesD_AQ8Y8pq-UkuokiM2_crUJ}mPB(7YuvgmK*xDv(avn}&N(;gc zNjw06oq$9OS+%YbwQ}BPFNn{Ugjo(;gk-KYDlnsVZPi75y$;^Ct|m)yZ^BLXt4)JT zngbwV89@)W9{Yv|eDX1nF}&`x9wr!3IM9KJ^;tM8Hty$jP+fLa0EQXph^#{6-FL^F zKinw7G$^*f?D$Zcin$)xBDgR+XT(umXkOOu}4K{<=^U0W}=IiAvx3P?!~pOpmRX(=dAf?y8fk{Dw4vxVo@QSUZbtHVm*xNJg=35JYL zL|TYqg(AO8goMn8Fq`7Y-N?nRNGj0CL^23McHG56K6;CAqIv(f2H?#s!|O1Z3|E__ z0s${clF*ZuYSyjQWN_)@Z}#B;9BRMEZ)_kdkmNuRb1a&?6)+$RX>DPCdK~h{9%1|r zBvLdQ!O5{djbI;CHi24RKse(zgcoo>4H$mX4;`xDd>i(UiW#uE{0eL-`gcj-5lJ5A z%1e<i zon4%*tGs81;POijjJ*ANlzYY00DN>j#Ge1=p`wf;_g39g1|}7unCi_~JvjOB)N4nZ z^Q-()#Dfae_w8cu_^(A>hIYMs%9BU`sqhvL@8R25^rAHIgGj{Tru(U6PMsm4V(&Dw z86+HbJym3G*7#%?29^0l;uXbLYhghHL zfe^c1`PWRazZ#xL?gFP?dcj$zk3M~{W@V0^JxB%8irmUQyg#942ls)Eft0x|SxBgz zFbO>gs0kyB&*L^E!bqNaRp?DI1UHg^hD9`%L23&^&4>v=VB-RuvM?hemq(DEYK^d7 zK_#Cf4OetFpsX2xj2Rw zLw&Y;og(xjSs_uYXywU(#g#N!#pB$Al6R7euppC( zdO1{}kClQDbTD_9W%c{mS*?+0$7XNQdTqYaAw`%gC^;aK^Tk-yVx|`5^lxCZ->N2K z8o!m3H+BD`#LW*l3>S;|VRwzNm$tu3@Z$D5DH|!=sRLc@4W;G}Z zG6ts&q^;4jxFN+2O`;@pRyGJXCkZ2s#2DNqIA5Z$xIrj@S5irc>!UR)&*-C|`Gpc3 zj$||xJ3E_x)iXE~y{o5Qs_n4U=Q(rHm*Lvt;kw@EbDbgmLF6#)=D(>7q9} z*AAhCt*e->0X&t z;K$+V;Zb!(x~RpsxwAKmWLbl%FIAt-J8xSaZRE6+2XXWG;ifEFVdGPigNtLvP1Y~2<3>BME)QTc|rFFM0pclRskezx3pPpq^v~k~&AFX$?shS-m|rF}C9!@#jC; zE{wX})#W>S!O@)#;@W~UNk0OvOW==)%IRiNJ6ljyM^(wegDF^V!>3uY^uvUrAosv7 z+sf4UQwxrNkj=0`f$0otUH?(`QG^Ufs?X4mkaLINApfKrsu}wOc{1E*ADlYUt36!_1{T3B_?%i?c1_0@s@j<-9*zb6O#OA6l(1^6X}UsCw%0TI7+ z;g>G_(uIFKGUb;={IZB&7V*m>emqL)mtXkh7yjxOoBs!05f!d79?GOcK{JL zk;9j#P|MvgJ>esqPon~1-KOeDE98WwQC@)gb2#y4k^r`t+QWQEI3)-n;gk2jyL~n- zu~%>7rRP!CV+fLA2@m<(w-ylI;NU#}3ivVm3vMz83pWC%@2LPHrzGe&Oo)FK@T=)x z0{NvO{{<$K*)s2=Oww5El??W9c``q7QpB-lm~!%YM~FY&Nnggv{b8_a-4fE;#Z5 zxIRImAPAYxvKzD6aOvVC2yfM#i6+amFoPYi6WK8U7al_3)_!Q(Qybpk#%j5%2LHQG zBm+e#Rh5RT1vs*}3j#W<`D5er;^d~|uT^-!A3Ymf1YyF$b;tM;Jj4lC7|A~AKMV=+ zL(}=_~C9jng4WpVh69xSi?xIrSd0lE&c!9=}(*rc_gGxz2>6n6 za@XY(`35(ZCzN{}%!j%xm9OxsX}9b6Or6ZzBfbb1MopKOyl>}+=N(EFKajEx@5@R0 zQcVS7E)tLsd}j7ai<8MMKe~AOn_%-n5?orf12-*;bL>aU>jI62?O+nV$`u(e%?t@E zS6%*!KDQ#5z|V6Tee9yH&x#Fz^8pF3jzq;m$?9TrYtnb%z1C%XBdpu|NSWumMoYiQ z$R@U%mp$e4C<-68ZDq3UmzPYd=dIfQxjkk|v4zXZN1&uldQ||E*PLm_%q+SzP}b9A zzxQ04ijQ&s_`9RC;gVw@pSxylJolF})Nndkz%AK|-wz+KT1rn)!15OrY)Oy5<~b>1 zV;t19&zH|oweWMjfH>U_RsF=7-p7|YPTLas!GNd=g}mataAOzkf+A^LUaAfjrFeB? z-?H(6n{*HIHg4UPHx$rmoAxU2peWj-WQA4AJ$oSCUO+D@xChuJ5E`&_baz|Y~Qtt_9sCEoJJHH_R=xV_- zC!W%`A;l^IZelHe9l^u**SJ41*qZn**5kg@l8@up+^N8u6d2O`y1`}kYgz5H&RaV0My%)!gjFkw`^UCn_Tl1|D){9h3O?Re z1$Gg8vedA8`8dK3@cCLC7t!*kCXvGnR3NX8Lazuf${aXSYeUtqNBk1h-?a6YM*TP0 zMfU^u)0#xL0J8X7D>otfE}@ayT4pPL$#T_%TcMYp>3%u-X@TAY^)DH;P$&FV!g>_O zt9Xds3QvyIBpV`E_St|Wu2lFGad*tG#(th`q0w}A&1!Ds&I+EMs<$m^)>nCYdlk@Q?YS0w1Dy+h0+NCLgNy8uUKYKKYWWkx^xVgz9w>=}i8W8h@Y4m|nJ z_>I*PZy3Wr&>@Fe!_2Bw=&>{$r)|q${6-`H-``e7cL_4cC4D6pB%M~&5z#f$D~=kO zn5nMY<6v4NnY-g&)4jBQdXet1e`S@M!C_m-uW&W!t!?!%*-jc%F4&^kf@wFEIu(pw z*C}yi@1X(OORymn7KF;^c&eAQjXgaQvDZ)fvwVnUiq>ZaMR-q(?o{~x5K6K~v$&1A dbOa@->m%0`_BK>ed@n+Ju9{6{{UesR8If^ literal 0 HcmV?d00001 diff --git a/Assets/PelcoSlot.jpg b/Assets/PelcoSlot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..243902df4992e7982d928cde0d10cffe19efc1d7 GIT binary patch literal 3753 zcmeH|XH-*Z8pm%)LJOTxhUNewARrPFV5lNZU^Rl&ks>05o}o!#fJko&B0Vf6(i{*X zU5Z4SU_nKibODJSgJM8|+zq>XW)FVaopbi=ewgRJ&xilH?|tt7_uS{a7km!B00gYe zEzJQ41Ol96T>v->m;g{Vw!Os)7;C{f;cyrX&dtHW&dI~g!-L>PAb9zN1bF!b`49*J zQ2{|=q=<+J55JhWC{kPqDT3T90)eugfx)@pa4sY-f*1K82Y43{^t8R>PQG z*v5lHE*Oc5%O-QmA8+gxu^pu!)I1*&&&4e&CjNtj!XZT^<-=%lYdpelda&8I_Qjl$?^9mVPZKH!r`Su!wZMqOz*G=EiTe zP0cN>ZSA)^I{W$u2Ja0G-+%CIYiP7{((=m7Robi9Z{Dtd`n>UlvAOm2+a4DL zfc^vPce3xe1X)~cFc=iZvBw2ri(n;G5C)gkU>7pB;qV9+mP5sHB9CX28+*CrHEro4 z=R-!hMGvBv6xR39{!aGqfyMtJvfsh}#We%)Kq0J;2NeX2fL)78OolrD8*Nf)Rj71+ z84fY$;_{d0Cn`=`YZzXFy1=PvJ#vKJ*x7QQpB+L7W z9Q}1B#&9>jK%)*-H>hOq{b@du+p2k~anbP-p>9Z`V8CeFaUk~Kl)h%n5J z#$DDiNQ1%4gv!pfP7oZRlKaw=PR&fe6FjA-4pe&lHBfka^1O-3J?TreA!{^3Pw z7{O)J=8gsKgDdg!$DjbT=(T4{^*H|wpTyzXN90#mBq4D>%naSYq^!QBZlL^(Hfd8J zaQP`amZ6@?RQ4mq45gtdTjtTq9w7y3$n8fZm-=8#&nPz^Zqz_;>T@0rFqq}ZFLu;d0ws!4cz$-(stqO&FCk|4)k}E zq{+s5zXhdnRbx^0+7=aQvTOp%3}z!6A}KlTd`TR}LsS2*zx!oeSmT_Hi%~%>2t2)i z0|XX}-I;z2W*P>16o4t&g zdRmgl@)d_){dY~Ug(kl|?Z=^M3(6KF!d9NpN5>m#DXn?ww;0$|)}J9sA>YDj#k$TM z=Xt5zWx!JL76rB5R`#MSwNvR?w{fsXj8Be5sIb~*4yJoJB*#QGsL4#OH1qOJ)Gxl6 z;0CJE@DlUKXtOMae~Jm67FWHMa4#zJ4rXMes;w@j*00Pv9houmX#MQMeBRt^J7hR~ zmS)DS!u^@ixz3{%m03yU2?`9W=RYwPUJ|i=_Kd&Etj=1=#EP|dyV}9*)RMN2%P5Nd zLFIQxVuhlQbdLqpdvz8*!9^%+NHlF-{}OImv?8b%)9n&dnSA-M2ui?SBsl3bI!K>` zzVO+4^8Jz3WCkxD+dhU-?3%15`PUJksd=lB*7-7?tD8ZA)8|jxZ@=BxY1`>pD~1J5 z;U~9urw z&Z1K(O<(J=lfOR*AbP~MNFdkHPP!uYI92}Y zQKxvb00ObUhs8#&_7m;Q?idf7wa$?ApU1kDGQ*R7ZJli@OL4e|gE9yqJ0z#5C}myvT@^P{?BS^PhgBf(WT(YIain78CjXW-8vhOP90Xoi5w9Ge=ld*fh&6)1 z-CPimIEVk*64@FD0$ko#K*0Fd13O&U^$MoYh$J(fVYDSwwsK6887LEYj@aj1L44{q z1OjYlc31~;VzW62l;6o>!fLjjvV%aeMX}R&wT+fkN2#yXJwYH&nTdu_X`{4BjvWP( z_AdNAk*;8LFKeGO;7=?6+pc7+_!~){Y?vkXVQ$RySGyZC^qND;+e+^?$JEO11lZ+1 zCk$WS;B|GQ9D4oUV%Ic)x>0@j@%~X5*OrkTQ?D5-Zyyg-ENYcBXdKdQmU1ya1sKL( QG6-TFX>9+6!T /// A plugin to talk to a KNX/IP Interface /// - class KnxPlugin : PluginBase { + public class KnxPlugin : PluginBase { public override string Name => "KNX"; public override string Author => "Nathanael Schneider"; public override string Version => "1.0"; diff --git a/BetterMultiview/Plugins/Keyboard/GlobalSettings.xaml b/BetterMultiview/Plugins/Keyboard/GlobalSettings.xaml index 3efa67e..e94d55e 100644 --- a/BetterMultiview/Plugins/Keyboard/GlobalSettings.xaml +++ b/BetterMultiview/Plugins/Keyboard/GlobalSettings.xaml @@ -9,7 +9,7 @@ xmlns:converters="clr-namespace:ObsMultiview.Plugins.Converters" mc:Ignorable="d" lex:LocalizeDictionary.DesignCulture="en" - lex:ResxLocalizationProvider.DefaultAssembly="StreamDeck.Plugins" + lex:ResxLocalizationProvider.DefaultAssembly="ObsMultiview.Plugins" lex:ResxLocalizationProvider.DefaultDictionary="Keyboard" Background="White" DataContext="{Binding RelativeSource={RelativeSource Self}}" diff --git a/BetterMultiview/Plugins/ObsMultiview.Plugins.csproj b/BetterMultiview/Plugins/ObsMultiview.Plugins.csproj index 8288b30..e8a7268 100644 --- a/BetterMultiview/Plugins/ObsMultiview.Plugins.csproj +++ b/BetterMultiview/Plugins/ObsMultiview.Plugins.csproj @@ -36,6 +36,11 @@ True True + + True + True + PelcoD.resx + True True @@ -52,6 +57,10 @@ KNX.Designer.cs ResXFileCodeGenerator + + ResXFileCodeGenerator + PelcoD.Designer.cs + ResXFileCodeGenerator Qlc.Designer.cs diff --git a/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml b/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml new file mode 100644 index 0000000..c70661b --- /dev/null +++ b/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml.cs b/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml.cs new file mode 100644 index 0000000..af0261b --- /dev/null +++ b/BetterMultiview/Plugins/PelcoD/GlobalSettings.xaml.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.IO.Ports; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace ObsMultiview.Plugins.PelcoD { + /// + /// Interaktionslogik für GlobalSettings.xaml + /// + public partial class GlobalSettings : SettingsControl { + public static readonly DependencyProperty AvailablePortsProperty = DependencyProperty.Register( + nameof(AvailablePorts), typeof(List), typeof(GlobalSettings), new PropertyMetadata(default(List))); + + public List AvailablePorts { + get { return (List) GetValue(AvailablePortsProperty); } + set { SetValue(AvailablePortsProperty, value); } + } + + public GlobalSettings(CommandFacade management) : base(management) { + AvailablePorts = SerialPort.GetPortNames().ToList(); + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/BetterMultiview/Plugins/PelcoD/PelcoPlugin.cs b/BetterMultiview/Plugins/PelcoD/PelcoPlugin.cs index 284ee3b..ad4ff26 100644 --- a/BetterMultiview/Plugins/PelcoD/PelcoPlugin.cs +++ b/BetterMultiview/Plugins/PelcoD/PelcoPlugin.cs @@ -7,11 +7,14 @@ using Microsoft.Extensions.Logging; namespace ObsMultiview.Plugins.PelcoD { - class PelcoPlugin : PluginBase { + public class PelcoPlugin : PluginBase { public override string Name => "Pelco-D"; public override string Author => "Nathanael Schneider"; public override string Version => "1.0"; + public override bool HasSettings => true; + public override bool HasSlotSettings => true; + private SerialPort _port; public override void OnEnabled() { @@ -21,8 +24,10 @@ class PelcoPlugin : PluginBase { try { _port.Open(); + State = PluginState.Active; } catch (Exception ex) { Logger.LogError(ex, "Failed to open port"); + State = PluginState.Faulted; } } @@ -32,29 +37,33 @@ class PelcoPlugin : PluginBase { _port.Close(); } catch { } + + State = PluginState.Disabled; } public override void ApplySlot(Guid slot) { var settings = CommandFacade.RequestSlotSetting(slot); - byte[] message = new byte[7]; - message[0] = 0xFF; - message[1] = settings.CameraID; - message[2] = 0x00; - message[3] = 0x07; - message[4] = 0x00; - message[5] = settings.PresetID; - message[6] = message.Skip(1).Take(5).Aggregate((byte) 0, (s, x) => (byte) (s + x)); + if (settings.Preset != null && settings.Preset.CameraID > 0) { + byte[] message = new byte[7]; + message[0] = 0xFF; + message[1] = settings.Preset.CameraID; + message[2] = 0x00; + message[3] = 0x07; + message[4] = 0x00; + message[5] = settings.Preset.PresetID; + message[6] = message.Skip(1).Take(5).Aggregate((byte) 0, (s, x) => (byte) (s + x)); - _port.Write(message, 0, 7); + _port.Write(message, 0, 7); + } } public override SettingsControl GetGlobalSettings() { - throw new NotImplementedException(); + return new GlobalSettings(CommandFacade); } public override SettingsControl GetSlotSettings(Guid slot) { - throw new NotImplementedException(); + return new SlotSettings(CommandFacade, slot); } } } \ No newline at end of file diff --git a/BetterMultiview/Plugins/PelcoD/PelcoSettings.cs b/BetterMultiview/Plugins/PelcoD/PelcoSettings.cs index 845d128..c7bf04f 100644 --- a/BetterMultiview/Plugins/PelcoD/PelcoSettings.cs +++ b/BetterMultiview/Plugins/PelcoD/PelcoSettings.cs @@ -5,13 +5,22 @@ using System.Threading.Tasks; namespace ObsMultiview.Plugins.PelcoD { + public class Preset { + public byte CameraID { get; set; } + + public byte PresetID { get; set; } + + public string Name { get; set; } + } + public class PelcoSettings { public string ComPort { get; set; } public int BaudRate { get; set; } = 9600; + + public List Presets { get; set; } = new(); } public class PelcoSlotSettings { - public byte CameraID { get; set; } - public byte PresetID { get; set; } + public Preset Preset { get; set; } } } \ No newline at end of file diff --git a/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml b/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml new file mode 100644 index 0000000..d4e6600 --- /dev/null +++ b/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml.cs b/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml.cs new file mode 100644 index 0000000..848b492 --- /dev/null +++ b/BetterMultiview/Plugins/PelcoD/SlotSettings.xaml.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using ObsMultiview.Plugins.Extensions; + +namespace ObsMultiview.Plugins.PelcoD { + /// + /// Interaktionslogik für SlotSettings.xaml + /// + public partial class SlotSettings : SlotSettingsControl { + public static readonly DependencyProperty PresetsProperty = DependencyProperty.Register( + nameof(Presets), typeof(List), typeof(SlotSettings), new PropertyMetadata(default(List))); + + public List Presets { + get { return (List) GetValue(PresetsProperty); } + set { SetValue(PresetsProperty, value); } + } + + public SlotSettings(CommandFacade commandFacade, Guid slotID) : base(commandFacade, slotID) { + var settings = commandFacade.RequestSettings(); + Presets = settings.Presets; + Presets.Insert(0, + new Preset {CameraID = 0, PresetID = 0, Name = Localizer.Localize("PelcoD", "NoCamera")}); + InitializeComponent(); + } + + public override void WriteSettings() { + if (Settings.Preset.CameraID == 0) { + Settings.Preset = null; + } + base.WriteSettings(); + } + } +} \ No newline at end of file diff --git a/BetterMultiview/Plugins/Strings/PelcoD.Designer.cs b/BetterMultiview/Plugins/Strings/PelcoD.Designer.cs new file mode 100644 index 0000000..0949173 --- /dev/null +++ b/BetterMultiview/Plugins/Strings/PelcoD.Designer.cs @@ -0,0 +1,117 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace ObsMultiview.Plugins.Strings { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class PelcoD { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal PelcoD() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ObsMultiview.Plugins.Strings.PelcoD", typeof(PelcoD).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Baud: ähnelt. + /// + internal static string Baudrate { + get { + return ResourceManager.GetString("Baudrate", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Camera ID ähnelt. + /// + internal static string CameraId { + get { + return ResourceManager.GetString("CameraId", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Name ähnelt. + /// + internal static string Name { + get { + return ResourceManager.GetString("Name", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die No Camera ähnelt. + /// + internal static string NoCamera { + get { + return ResourceManager.GetString("NoCamera", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Port: ähnelt. + /// + internal static string Port { + get { + return ResourceManager.GetString("Port", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Preset ID ähnelt. + /// + internal static string PresetId { + get { + return ResourceManager.GetString("PresetId", resourceCulture); + } + } + } +} diff --git a/BetterMultiview/Plugins/Strings/PelcoD.de-DE.resx b/BetterMultiview/Plugins/Strings/PelcoD.de-DE.resx new file mode 100644 index 0000000..733b0c8 --- /dev/null +++ b/BetterMultiview/Plugins/Strings/PelcoD.de-DE.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Port: + + + Name + + + Kamera ID + + + Baud: + + + Preset ID + + + Keine Kamera + + \ No newline at end of file diff --git a/BetterMultiview/Plugins/Strings/PelcoD.resx b/BetterMultiview/Plugins/Strings/PelcoD.resx new file mode 100644 index 0000000..71a14a5 --- /dev/null +++ b/BetterMultiview/Plugins/Strings/PelcoD.resx @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Port: + + + Baud: + + + Camera ID + + + Preset ID + + + Name + + + No Camera + + \ No newline at end of file diff --git a/BetterMultiview/Plugins/qlc/GlobalSettings.xaml b/BetterMultiview/Plugins/qlc/GlobalSettings.xaml index 24d0686..ecc85e3 100644 --- a/BetterMultiview/Plugins/qlc/GlobalSettings.xaml +++ b/BetterMultiview/Plugins/qlc/GlobalSettings.xaml @@ -7,7 +7,7 @@ xmlns:plugins="clr-namespace:ObsMultiview.Plugins" xmlns:local="clr-namespace:ObsMultiview.Plugins.qlc" lex:LocalizeDictionary.DesignCulture="en" - lex:ResxLocalizationProvider.DefaultAssembly="StreamDeck.Plugins" + lex:ResxLocalizationProvider.DefaultAssembly="ObsMultiview.Plugins" lex:ResxLocalizationProvider.DefaultDictionary="Qlc" mc:Ignorable="d" DataContext="{Binding RelativeSource={RelativeSource Self}, Path=Settings}" diff --git a/Readme.md b/Readme.md index 1b178d8..05f25ea 100644 --- a/Readme.md +++ b/Readme.md @@ -34,6 +34,7 @@ Supports sending messages to a KNX/IP interface. Requires a KNX/IP interface in This Plugin allows you to send arbitrary messages to a device on the KNX bus system. You have to configure available groups and their datapoint types by hand before using them, currently Datapoint 1.* (boolean) and 5.* (relative) are supported. You can then define actions for the entry and exit of a scene slot. -## Planned Plugins ### PELCO-D -A popular PTZ-protocol for cameras via RS485. Requires a RS485 dongle. \ No newline at end of file +A popular PTZ-protocol for cameras via RS485. Requires a RS485 dongle. + +This plugin allows you to recall presets programmed in cameras that support the PelcoD-Protocol. Usually requires a PelcoD-Capable camera console to program the presets first as well as an RS485-dongle. \ No newline at end of file