From cdb91ae2ca71c04f4a8e8d695d0a861d18659ef5 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Mon, 1 Dec 2025 16:03:13 -0700 Subject: [PATCH 1/9] Add dark mode to winforms - Add dark theme icon variants - Change all light theme icon fill colors to match Chardonnay Also fixed #1460 by chaing the directory select control to DirectoryOrCustomSelectControl --- Images/Plus Minus.psd | Bin 37850 -> 34614 bytes Images/Stoplight with pdf.psd | Bin 211655 -> 335536 bytes Images/Stoplight.psd | Bin 95186 -> 134236 bytes Source/LibationAvalonia/App.axaml.cs | 6 +- .../Controls/Settings/Important.axaml.cs | 3 +- .../LibationAvalonia/Dialogs/DialogWindow.cs | 6 +- .../Themes/ChardonnayTheme.cs | 16 +- .../Settings/ImportantSettingsVM.cs | 14 +- .../Configuration.PersistentSettings.cs | 11 + .../AccessibleDataGridViewButtonCell.cs | 8 +- .../AccessibleDataGridViewComboBoxCell.cs | 45 + .../LibationWinForms/Dialogs/AboutDialog.cs | 7 +- .../Dialogs/AccountsDialog.Designer.cs | 12 +- .../Dialogs/AccountsDialog.cs | 52 +- .../Dialogs/BookDetailsDialog.cs | 3 + .../Dialogs/BookRecordsDialog.cs | 2 +- .../Dialogs/EditQuickFilters.cs | 2 +- .../Dialogs/SettingsDialog.Designer.cs | 133 +- .../Dialogs/SettingsDialog.Important.cs | 19 + .../Form1.ScanNotification.cs | 1 + Source/LibationWinForms/Form1._NonUI.cs | 9 +- .../EditTagsDataGridViewImageButtonColumn.cs | 2 +- .../LiberateDataGridViewImageButtonColumn.cs | 4 +- .../LibationWinForms/GridView/ProductsGrid.cs | 1 + .../ProcessBookControl.Designer.cs | 277 ++-- .../ProcessQueue/ProcessBookControl.cs | 10 +- .../ProcessQueue/ProcessBookControl.resx | 1460 ++++++++--------- .../ProcessQueue/ProcessQueueControl.cs | 4 + Source/LibationWinForms/Program.cs | 19 +- .../Properties/Resources.Designer.cs | 316 +++- .../Properties/Resources.resx | 103 +- .../Dolby_Atmos_Vertical_80_dark.png | Bin 0 -> 1645 bytes .../Resources/cheers_dark.png | Bin 0 -> 10919 bytes .../Resources/edit-tags-25x25.png | Bin 314 -> 0 bytes .../Resources/edit-tags-50x50.png | Bin 573 -> 0 bytes .../LibationWinForms/Resources/edit_25x25.png | Bin 747 -> 588 bytes .../Resources/edit_25x25_dark.png | Bin 0 -> 582 bytes Source/LibationWinForms/Resources/error.png | Bin 1578 -> 1618 bytes .../LibationWinForms/Resources/error_dark.png | Bin 0 -> 1619 bytes .../Resources/import_16x16_dark.png | Bin 0 -> 381 bytes .../Resources/liberate_green.png | Bin 1360 -> 1284 bytes .../Resources/liberate_green_dark.png | Bin 0 -> 1294 bytes .../Resources/liberate_green_pdf_no.png | Bin 3826 -> 2295 bytes .../Resources/liberate_green_pdf_no_dark.png | Bin 0 -> 2298 bytes .../Resources/liberate_green_pdf_yes.png | Bin 3511 -> 2092 bytes .../Resources/liberate_green_pdf_yes_dark.png | Bin 0 -> 2096 bytes .../Resources/liberate_red.png | Bin 1400 -> 1285 bytes .../Resources/liberate_red_dark.png | Bin 0 -> 1297 bytes .../Resources/liberate_red_pdf_no.png | Bin 3802 -> 2306 bytes .../Resources/liberate_red_pdf_no_dark.png | Bin 0 -> 2328 bytes .../Resources/liberate_red_pdf_yes.png | Bin 3505 -> 2103 bytes .../Resources/liberate_red_pdf_yes_dark.png | Bin 0 -> 2121 bytes .../Resources/liberate_yellow.png | Bin 1400 -> 1313 bytes .../Resources/liberate_yellow_dark.png | Bin 0 -> 1304 bytes .../Resources/liberate_yellow_pdf_no.png | Bin 3842 -> 2340 bytes .../Resources/liberate_yellow_pdf_no_dark.png | Bin 0 -> 2335 bytes .../Resources/liberate_yellow_pdf_yes.png | Bin 3547 -> 2146 bytes .../liberate_yellow_pdf_yes_dark.png | Bin 0 -> 2144 bytes Source/LibationWinForms/Resources/minus.png | Bin 412 -> 433 bytes .../LibationWinForms/Resources/minus_dark.png | Bin 0 -> 433 bytes .../LibationWinForms/Resources/move_down.png | Bin 0 -> 1253 bytes .../Resources/move_down_dark.png | Bin 0 -> 1256 bytes .../LibationWinForms/Resources/move_first.png | Bin 0 -> 1192 bytes .../Resources/move_first_dark.png | Bin 0 -> 1195 bytes .../LibationWinForms/Resources/move_last.png | Bin 0 -> 1262 bytes .../Resources/move_last_dark.png | Bin 0 -> 1266 bytes Source/LibationWinForms/Resources/move_up.png | Bin 0 -> 1152 bytes .../Resources/move_up_dark.png | Bin 0 -> 1154 bytes Source/LibationWinForms/Resources/plus.png | Bin 470 -> 484 bytes .../LibationWinForms/Resources/plus_dark.png | Bin 0 -> 484 bytes .../Resources/queue_completed.png | Bin 0 -> 10313 bytes .../Resources/queue_completed_dark.png | Bin 0 -> 10314 bytes .../Resources/queue_error.png | Bin 0 -> 5428 bytes .../Resources/queue_error_dark.png | Bin 0 -> 5429 bytes .../Resources/queue_queued.png | Bin 0 -> 4768 bytes .../Resources/queue_queued_dark.png | Bin 0 -> 4771 bytes .../SeriesView/SeriesViewDialog.cs | 3 + Source/LibationWinForms/ThemeExtensions.cs | 22 + 78 files changed, 1540 insertions(+), 1030 deletions(-) create mode 100644 Source/LibationWinForms/AccessibleDataGridViewComboBoxCell.cs create mode 100644 Source/LibationWinForms/Resources/Dolby_Atmos_Vertical_80_dark.png create mode 100644 Source/LibationWinForms/Resources/cheers_dark.png delete mode 100644 Source/LibationWinForms/Resources/edit-tags-25x25.png delete mode 100644 Source/LibationWinForms/Resources/edit-tags-50x50.png create mode 100644 Source/LibationWinForms/Resources/edit_25x25_dark.png create mode 100644 Source/LibationWinForms/Resources/error_dark.png create mode 100644 Source/LibationWinForms/Resources/import_16x16_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_green_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_green_pdf_no_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_green_pdf_yes_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_red_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_red_pdf_no_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_red_pdf_yes_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_yellow_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_yellow_pdf_no_dark.png create mode 100644 Source/LibationWinForms/Resources/liberate_yellow_pdf_yes_dark.png create mode 100644 Source/LibationWinForms/Resources/minus_dark.png create mode 100644 Source/LibationWinForms/Resources/move_down.png create mode 100644 Source/LibationWinForms/Resources/move_down_dark.png create mode 100644 Source/LibationWinForms/Resources/move_first.png create mode 100644 Source/LibationWinForms/Resources/move_first_dark.png create mode 100644 Source/LibationWinForms/Resources/move_last.png create mode 100644 Source/LibationWinForms/Resources/move_last_dark.png create mode 100644 Source/LibationWinForms/Resources/move_up.png create mode 100644 Source/LibationWinForms/Resources/move_up_dark.png create mode 100644 Source/LibationWinForms/Resources/plus_dark.png create mode 100644 Source/LibationWinForms/Resources/queue_completed.png create mode 100644 Source/LibationWinForms/Resources/queue_completed_dark.png create mode 100644 Source/LibationWinForms/Resources/queue_error.png create mode 100644 Source/LibationWinForms/Resources/queue_error_dark.png create mode 100644 Source/LibationWinForms/Resources/queue_queued.png create mode 100644 Source/LibationWinForms/Resources/queue_queued_dark.png create mode 100644 Source/LibationWinForms/ThemeExtensions.cs diff --git a/Images/Plus Minus.psd b/Images/Plus Minus.psd index ae3fff21b23e3f393ad5e173fcd8d30a3d8495b9..187f6a4be4e7f832d5c1ec0e82415bf0363f14d6 100644 GIT binary patch literal 34614 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 Vjr2=@)C%>{U;B?KMjVd5{|E08j8^~v diff --git a/Images/Stoplight with pdf.psd b/Images/Stoplight with pdf.psd index 80542c2c63b46a0c859ebe27a575ffa8a4ff2a6b..75fe906927ce99bc43afb325abcc6c18734c0233 100644 GIT binary patch delta 73319 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 literal 211655 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 nqONb5E(Jto;#R_>C*$}-H#^#A_{e-noJ diff --git a/Images/Stoplight.psd b/Images/Stoplight.psd index 9b5f8105c6439377e919bd99f32001d8433cec89..4a11a81ea9e7b31fb7611133a43a792cf5861708 100644 GIT binary patch literal 134236 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 literal 95186 zcmeHw2V7Lg^Z4E!?dV0MSr9RxBE4IXs)&jr0-`i2f&xbXTTC>GDaKf$MvX>ejOn%z zHI_ut#1iZkRFtAf6%M2$@cy&=?sy046-d6{pWpv+AMWkGotfR8Z8N*GbFN;~W*`=# z{}d2nje+16q=Go~t5~+Hm;V$6NP$1)0c?cWE9wz>H;lZ~es|{AoB#aK#Ad_$m92)8 zXTC$y%yHV3En_^Eq{YN8h|e^g8$T~8b*vfx_iQuMq`0wWp-xk5r=)quCnimND?NV3 zTT_E$-&zps7H8%$PIb%@_a!N5De;*xrb|+iQ#0I`j5UjiIHRsVLCsRqx-v@5 zuqL&%j^(A;EQv|8v9q?d>7opXV}L8}-s$l%nY{F19xr(uUH55;yi8t3A}`IqcG4FLtJ`BzJFKGA|ukD1My77@L>9{-+BKU31Emmls&r?^9B2 zUN&AbGJO}pP!bHyZdDaxW&|%yi?<1i&)_XgkB#?T1dYdxPr)dfGR56LH6t@7H8$Sg zXB-sAIw>j6-OJYA(bdP>)y>h@)7RV1&dtlg$J5Ez*V)zA!O7Lhj|_+IsNFj=r1|h- z7vlaRAR7l{on0MWT|AwgUF-y89i3fWoxGj=9GzV4oqZgIWJOS4ARCyT1oLN1vIq<= zwJhXcLgIyNCMIRT+_F?Sgy_kN45S(HZ+3qx9AU{xWMHMmq-Vrq&W|+{vR-uRqA6h< z(t_?Wv3RhIi^Y>!eB2nDZf}`l^+Zd0vC$-Rm!>U(`fB=%6XR2ROoy;u*t!U(GMW^D zdNq*@UP9*LnDlthdC(8U&(So!?g%{z(-T~B(!areUh1OwbXghznmGnm;P~{6aS7?X z6w{=Xn0fIwX{qx}GkK;Gr$M^9A~gPkbOVU%{I9i_@4wt$F7CEi%q4QIyuJE7 zAG-Pd>+NO#UtM_r$HtePi=UIPtBbFT+rKd%+QYDNw|A3|FQI7L=kaCd`meW_qpiHX z{;~FQ^K-DZb9MG~6RLSHXpeo7Hyqua?A-0`ymNK5 za&oYRe>(`ndshc5dpBn*n4hd1>|EjB&C1Ch{vGV$9nf*Hg@1r`!Eq-@hkpl02m8@Z zc5qMy+rysrJ}zEz$pppz$9h8ilB8Gk1f23>Prz^8 zrzI_kPY&}*g01chype0?1a11#6cH{n>9ZJ22Rmm`Op%nHnBM&_$DxJP7rpn$M0RB$H6!BOGi65SNz_M;JUeDTsKz?|s+?Ut7$QC@XP0>X^hlMns|Q2GN9F7i&z~Nta(4A#i1?_SUE=xEBUR3> z9t;s5m9tAce|n_K+0}y~;-hkQiRVv`R5`nPFhqP*&Mxu%>5(dDR}Y4WkILC4oRt{w~#ACyNQc8TXtk5oCkdN4$MRL(B({OOS@XIBq~h>yzI zC7wS$QswOG!4UCLIlIL3r$?%sT|F2gJ}PIIc>eTAm9wh{L&Qhr>=MtP9;tG6^>iZW0dJkwD;gk#ZC0S!KZ1nLw;LI}mN zXc|r=t^?oTk?w`mfh3i9q9di$=!y>_aii{WPCbcp$v1q_d01$ZxGK(p{1N|loJJC! zh-?xPASD^TmB<^G;LYxB+q>S_LkbIp!?zFymz#w~F>eTmTOf{r15lHf{c*~1^2<^v zsxN7T7nn4->O&k71FwDXr$WBri@dWXF$EUQsXiL=gyC1(t~0% zan_{h!QfjjnU^{b;^c2~d_tyZ+$)opLdS{wL=-eHQJ4-zLrNLo9WFj2BzbZM#8}<( zQ6y>bS{MG6NyOhrgtqd$bl$?WZm*Ph#2Hw8>cSMjQTLsJsng!QAg&R!Fq1bSJ~cia zd)9&%2z%uc0ISl#_zh0+Pnl;5kAJ)V9B`)>>>CygS&1;e`0)C=#`pxG09f|HSIiHRX~_-A|6k}y5S@k|Ol7tF5xNDO!Aegq4{ zL-&C%%*4s?|26!VAhhmXct0E&A{KR*DnisHv*y=xeE~Yv~*6>FMj~8S1E$Kf!~J^!#RNsHtga zYG`X}YWLIB)a-}9H2cvgI?@oJP9q%^sLo^#%M7t~SR5S|^$^CgB6XJK0i{&L(;o1J z{^LO96cm+|Rk*5ZuoQMrWFa<3n5d0d3M>v=fvu>lq@u`CcYs74j=~UKJ4MgwF?wci zzGtu0Z^P~^uc7ApL1*SVIHtdU!&`aS#u>H6b+H*v{lEEj_~SaC7FP z_-BVc`0Lif$Mt>|pMU$|;mv1nmo$8LCc-`h&={zzB8RO;~#Yu;ngLuV2VK9N9r7srw;N!jV>oQXXSGJbmu1c<(B2*rwlhymPC%pwvA-yUL^JY1Yyalir$5q4N{+7Cb!O5p=#a z=CgO3=7Ht<0r)-Fxiu4>Mzi8?Uk-XMAEs zOVK+S6uPvavx!0_K@_^csoK>!JF598h0H#rkV9Kun{!9`qK@DyCvL;y6~Pw=yxCFo z_tH6!qf(5og}FI%NO^|7?D{mk#<3FX&*-Zkf~3At;cLb>Pv*nZm0aLa@r z|2j*dKW{zXa_IT;oxAqTzEnEy+|-7toOFmdUMOM zpMJT#@~`X13-zAtv6^S8@5<{){9|>)uHW)0wC0EJ@~a1ZKp~6j!ATVQIWqaAGKDT* z>-=~{;hn8I)Qv~k=aoCH+K#p_rO;3F&;5Dm=B4kiJzV0k8oGet;Fd#`g>_|}-|gMy zZ+b&H>u7FO+B+#}w_VvgGqPvCRlU@;`p=U$-kED0Sf+SmM9?RneACd9e!<$#b?5n0 zivH#s7np4w)mT$xSN_BCH`6Q9)0579mls)->*zmhY4)7Tb(Kr6{=WLcZ&@YZ{iPfK z4rjunS$oti2Dbg06m=&f?`sORZlln3{`0o_C*>ZU2`d^#cXsY~wV`fyFLPO*XQ!=4 z-Ml;5kFRwEgpS*|^}vPP+9uZ{S8nTEEVo^LVxjsXRes_hn%wILmN*{!=&=77bYk4* zM&&B4pnc&N-!ZQedBEY>*7|e5EGOEsGcrsZRpCN^v}PYoMT@X)G!zZj7Qr* z3ayBIn`xjM;S{27iK}gh$J9O5MlB5)m0`IT&VD_Gy=-_xRNb;h`z_b6X5BVA$(9Ow_Am+^lln^kkgbsgMJQk{_QuVcgMVMR_0K;W!AQdty&L1oo|PNHu?|K4Idl3 zC%SRXghx+)adll5Wqi2h{XZsDY58P-vv9QS{yX~}X8#esB(mj?`u3FK!#6(JZtTJi zD_c5}LYmhspBUyeT>Bx(?#bFupSEs)MV)eQaj4tft8}3vuVa_Tpw6+QjVoI8v${3r zd;L{veklKA!R+N@Lv3qP)@Uj${lK>@`%!b%PV3z}2mk01d+)pcuH_SIY`nC6)_N9w zcy-=iRx|8Ad**Sn|Lr)HBjy_?ng6u3tR??);vPK}*HrV9SDr;246AY-J6NZ67EeQC zQ0~+N>#0 zuI!{x;?ve^`zbW-*sy}P)L|Z7e4GD#!tGWH*-cg+BWEfN<~a(d$$q z22X11X#Dv5+!65wM`Ay^x9{z|u`@#=q7Qt(_2hZu8$XTQSF!8SN98Pgb9=S- z)C1EKn&$snyP+d~(-rmbi*rVu>2!YU?1~9{>pcIaknzs9&YzokXL=obCck~bNdEQ} zSG=>^L&8m5Ti^Zt%$b=wCA=r=?}kz6rs4Y5z%!5E+8S0lHt6x9g;$R}e9v8L`wN#1@4B9c;!EbKtszIi2{q&X=g|_YL(4d9&Ko{(k+^_cdc(j@+spxvV|* zX63lw7y6B^-xqt~Ok-Xmh4#+5@9PuxLqY8`qfMVoY20}w>)n;ld?Vj%G^tvvUUA?pw)(7nVDg%MYxZg!@9&=X)ttwc0l=X1 z&j~JtCIIr06M-#z+U|Y1z%PDb!+l5VU-ORC+zL_?P+ThM7lPPrItu4zp@XUXp z?$P?j5F$^{#Ciaht+kLRiUW0iE^GjqqG_Pc^N4z%K|-)Gg7hRnm?Cf35^%%>=^V@; zh*;KBrl1iJP(jKpUGhr>cn1ryjFBP%MQAR|q$@n1WhsCG6^3O;RQ>?~m(H>$VXPOe z`#6cH`ncHN!vA&D{|nFxVYf)|6ys_iVgLE=;8@ho-V_|)6W{kh0&%`((fQ(?tgqQ! z^tXJ?5r*mQ0)SOwaRgYe(#y;gEu9L;Qz(V5%L=lo_;e#bynn;?w|V7tqdfxrGlZzHiq)K zZ!Cc}#3uj?7tS3&4#(&}ApG)85g{e4t0KRQZo41I(=T1H*&?8l;g>Ef58gNt<~Z3q zRixawu0cGq<)cF5(feRpyGd+7N&Z<-aNp? z14g850&e3Ti@cN5O}lL?p`Zy~-jG0AFeuK{l<CRHz7The#i4DIxTqTmE0W; z=e;N;V*w;%5JF3I-%fxge01?u_(J5V0K6e36?un)Z1lY|8=0Azz3`+{@{7z#is+M# z>gMwie$(?wr(kM0Mf6Gfdh)_l+{SpkE5o#s2z%3MWNNaf`vUybNIIk`WB}`N-IJFl z#o;){!SUGSxyd+=D}v)msR>I2=_I}&bpdWC3{U5mk(SUc9-EBmckv0+$Vg1Vc}#?V zvSS*%Fazct^5+QOOna-~A3ni9lmTyX0l3LAOXJgn!2=U+TF<*beV#uf?+VE`VM)5M zuMk2aU$}g@{#W6DrJ(oj!|7ssFQ$h7r0%^+vtXl+x0saXAM3p-)FZkW2zB+|WK+&* z!OO1R8%mYqSD3s1dhea>=ZwtT0#VN=o4k2AdGrfUHu|o%2;r2TPdWut!zrRqx;N3i z7xxGyGzJgOw3n(w zRXHdKdMV6qJ$k6_YtTcl2Y*XR>Y;c&gnyPBJU7#GsrAngM(VIzPQF1BQ1`>Nr6mCs zNb8dLr0$^tNx+V9@l`7r995C@SFd2?Oz;2pys+8)otkChxy}NKLHV`)us0wIZNAL< z5kDx_P5DF4g8yDG*nkB|_UruFkoG!%UVHAhZFr48uRZr)|GuvRs_^UiVQ+-)W4Jz+~$-I6K<(+Di$WYG3CMnJHi6y_`+auk%OF z{r_g`0r!o;Btx5gG~xQ0I(#&cX4ePDHQ~P>91B__XXK8?pmE3x`NGE=xxpJpWRGki z4S%e_w8#>@0UvYnF@tY2!N(NQ9~>8kg-_9ULU@cxQ^E8s$!7%69|5^oLyq>4^Efmf z{>LC!QVwf?F@@49b^B<-J6v{0fN>?I$2h`L;}YW!O}}>~AA;!5P(*)*!E+e-SRe~D zoP0*2k^cuvF3Nw*_nthbd5v3^=C?DnxHoBgFW})g=nc-0W(mE6?j`tJ_+k1I-Me&= z;UlE1>y@zWe@ zArPrUtm(CIW>hQzGrDlksO{=Lk z3Ta6OZI&-OJ3I(*G z4lp*$zX>m?4#oE8ZLKZM{3dR5OKaQn_KuFu&IbU-%2$65a47vYrP0~Z{=Buhsqq>A zX+>FS-4l({vWlntXN^tGt$@&3NWl$`^ydifsw$P_0aeZRw&sS~rxm4-3-8^!dhzeN z3)+8Qyn5?i;p5VZr?m~uZS9?%j{u2Prqm8tDCsVx2YIwM)>b^uzjZa|?5U&szu*1U z&iWmCJHOif{r;n;&gNXbmH)V+wy_oRE1?=GlteJ|?^FFSW79eM-L*qn6ye^vBQJKV8O~ z7abln(Q}MjovXgv7|)48;nDMW%Rb%y^B=r~ z&GAbQDxS5pcUA%oRxKA_4Gt)vj5<4>H`P44b?WHL-B^k6yYZ>+k%^2B=ImCb0#R$S=Yz*j8VboBi!43#PeS zn&_x0DX>|ENDnSVDXHn0Sh`PJ@X5E?xn=c$Sc4Jsq2=|9C|$sNR(kW;_O~LuM-9?d zQ{u2$`AC<=<|wJ@4jSbh@z(ZZH%p%Z7N2@Xv9a07#9~SZV?DWXWOI6u+pzu`%8*wc z(t*5`HTn;83rgR7Q;TsX0?v|0l(qn8Q|c7^!Ma>UHtQDBX0a8yx`XYfq;3*m z)L{&4I=166rA1>L-k1_#W1^+ZVO>L7ERM34iA_Mt#=~?D&oKNBfIs<|(gYTi-Z%o_ z*2Wr2Y}OT|$zm&M7+VAQksGB@bpm}7pl_B?nw`%Z%5EOnM4+KGmoT&>@!j_9(cj;`6=ZLM37?~3P3(i-`u6Wf&)Pa0sXDNU z#Bl9R6*sd!iEtaN1(o{?!zpPEc8mBV>t+Sy-z0!j?`Y*eIJISg_b^>$HtP&hXR(!a zhj}m9a_RxUwS$H#qtrXw8=hSHe(AJP{ka@gHb8N>{YOn(`u(LR4eg!HgjN})*3nvX z@A$fC_dyzptdmHMrKmB;J$l{odo`^cG)y_A29!#2zRC2r)Kg~vj?~!7dY1l~-{h14 zofbj|!vLLQYa*RZ)D&0%!%|Q)agJPb4Cr*hsJ1sgxwI#9qJ@qU`#4f%E9qEF%-nP7 zNn<-rr2?q5)js%ReUyud8i#cpsBqLwT%y+h@u0S?vz6pjL8*2$S6u&j>Ez+MO6;SU zitg~qOMkvz(cIAm(cbXr-1fw=gVYsR0KrmFA2c>``?*IA?KDIsr3(4vpZGM)&On8I z1Zb!j*oA$1A|G;TBe`IR)~B})EDNyEQDgxGOHs!nVA+9NPg}bnxKNHO-|@VLXeb;) zTm_9GUcB$FKq-V2xE)QUIbY2iJwTNM=^WJoqvw5LgM`$dei5tj|=Y_5@W z%ok@LH@0`-KYvzu>a%crC?ZZ*F|ZH+>{Q{i=X81%t^@zxZyyC&=_#=eK?#-gtb#uJ z?H<3a^Es&lhJZTkU+VvcwjzO0)PBQ%>3&=XAq2OhrQ+&$JWr@Y7O8_L@4KrNEgejH zbJ@kOlg12G<3Kt`ZQz)suP>H0i=;P|{{2p2o{yxN*QA>vODSn)TWRNRSU03v3reI|U+|iN*Eq?m7KVhiQ;O9P zLq3vfm8Bu2TfZ@EvDDH5hAxsp{=o2sGD$fYqd-P^3gcjTvUg$}#(vNTNfP7V@3l0G zvG4U#n#Q>Kv|M9$C}NRyc5Gp)R3gkv3Q!2^*I5M z_zfmjiiYGljuo#i&2-5M<4QC4viuaKo61>E3ev3&EOVB0iw(;_YQ2u7CbeS6QjlS# zm1X^wO)`*G?vP!w>5cr)%d#@aH9PtFocw(5RXT_Ke69*~Ci(fCB&Ci*l5{!(A@NjPem*DJwnBPq4Vi2} zie<7ck4h2A|WVccRzhb>Miuy+kviRY z*r?tG8`bXitJt=+gxI#0jA$TsuXl;v>s_#W#U`;i*d#UwOk%-SmP>49xpmlvHn<*a zXzPP%xpR;ClHT(H{Z3aoay*lHJB_3k28 zy}O82FSh%gy7ms({oYwSmDv40LQ49+Nnj&~E$4>#=@`?X2qim{@g!0izs)~djpx>#dJwgxBarg}kjLU=y&{6m$ z4E&A>6`~^)o@fxogo@B1s+PQyJyeXcs5*lC&xB+z0fWKRhzT(@XF?2zn9$33%5a=% z1*T<~)?!+aX;r4Bnbv1|1k+2Hp2PGeriU@Tj_Ha2_s0%XR;K(+otSzub!Yg&@QC3X z!%K$049}T%VA_UhFQyG&*1~lA^O5jL_Ypo4KIwkMN5UuF*ZAO>7>^jqPkK!7QE#8p z<|Bj?mQ(l?)HVTdBR7+C(SKBqWQ;1G)MV}<}n}9T<0UY9r%cD89t)hijU~l z<0HB~`QWh{&x?HU?22bfKKLodb0;6s{eq9^p2A1(!Mncy<5{hDqvLh!vGRGo=Nd-$ z@a}6J-OIc4>SeP4Ge(U6MNT_ z|65pcE#eh=kX(y+wKgK7?!f4&|E*r$yL_23&5Uzq>@)KLGeQ^b)4$FujTCVN9=MdSdT-@_!PGDJxTcrcO*f znYuIlV0gsvjo~H3Uxw#QJ1}j-v=`HcFKc0;G%b7zrETGp?niPhg66SYi}=6NW4lYn zFPr0-8ITDvGo|byW`_P}Lb8{D!C-2{gkHu2`8<#N$$w_%munGnE#eg%kZTe0vj_>A z#XqyAFjSbeLiP}|rZ6G->hhmiMMQIvYY}wc?fn@9Jsu>VbqMnjKIwkXXgxx0Nca?L zOTs6uS;@~LUbh}A*COO+5&t<2L3D0^RTwN6>0ch37L!SSw-Wyfnco!ho1yRm)#>FV6DC)42&Qq3>GbI+5SJbsAO`mpT%DB9grsV4IQ?=$$He7aR za59RWq`C?mqtYd29E=M2EOfVtIcwU*XH$`|kmsWBXh_;oXLkpwOzDNrI>!LdG1sxv zR_yT95)A@JuP?gl#Jz`h*QrGu!Gf#KZU$e{^*e2FC5t)W2>IdG^MRbl05^oLR&kHR zpBEj((!H$jJm}t*bPLihU$LW7XDAzX^opI8c0caY2JVl55rG}V{$K5P)=)w-Xq^{J zZb^FGzg2Q!A7n-j9&gN8r=9WQ83jA!r8(#WGmanhJfVwN+~zNH5&QppzoXqMk09-b z=WE)PG3`$IpP4m;twzrj!daeaKTGIU!jI6cvNR(`KHmvfTYB9U#_+S}N43Y8?LLD4 zH)F5f2J4>k`qf_bh4!V}n~}e8h>3~1#D3*`_a0S63I7Wz%_D5UrwEhlhL#*9i_+QPtood+Js&-Y=-8YADtLtu5g6SnEIyRZFp2lRwAa zqLW)|!6_N5+HDi|NbOdQUGK7rM{I-}3*a6588`_BU)dY*{e(ex>#@`05|hv1eggQ) zZU8sVtjbaAv3KlIm5tb!bgT0^>^a-HwF$eUPF@R_5>Rpzc6gn&2Hb6t`$$NEeO4x2rvK0uYkc`{Xk8452Lq z)BHZ_hcQ*P4To5{cuo!uk4a2lzH04;x=sBytX;J{JuxOcc(SL9)eu8%Rg7DKafdty z@8jt7eWcIAs7B^?9@C;y-d?qS%a?oh9XfWR?sxqY#}4h=^W~QHtKLqDn&x3=ZiLZU zm2i&(oo>h2u@8^|_#9TzGBkJa4ozCVe&^4Jj-5Pn;mXZBd3ARU^6uQca^cL$V~2j; zxqf+4sJDZ;p_U4GAAX7{#I|E!=uKJ=ks-KSR@Wb5=M|Q`a_f&r|Gab~_ilbcaY<=e zUAbXdX-RQG{@vUgm;OBZF}TKlXjGa(?jG;U?ND;8B_=w1)|m zq(UePTT!*2nWKN~@-2H$Udk(cQVs-aYWV!BT8dBA^aDcWPYUxco!q-+d91&qSwB^% z4>2fDA~ej4a4RaR8CZ-7;eGnu@r!vyrIk->_=UB4{FU=+D@U$BJ2=bQQdHachoyyWSzfVSXx^J}Wg3vZqIaaDo46nyX6PN*+0K&PuC6zV&E47;Zn#z*9=Kuk+045N4 zF9JWR1RP!~s2Ys$OCa!2rb`&UiohrMjWAGEU}4Ap$b!HRc>?epm3|i9ajP(WfY0fI zUlr$V(NBfLYR2&T1YY+E(qJoVn~jP3@W-l$pJrVttf=9isa5CKR1{vx`ZRXz5OBFIge$|&vQ-W3f|q}H zKEJ%0pAB%;<@x8oTOMp@sLElr3Fwu9FKi`kbFcYZj^8e+;-9Ql<5!j3KE7qXm$|kQ zTL@K-{aC9SIfSj;d$FLR=J#5)nu>ypdsl`z7y+&40$LafXn7}paWb#;DIcKtPfPPo zev#}Av_zm(Ib1`#(3Sfx6;;+8uT`z7EV{IBWvHDYmm{Q90hAOqhj=7y{UfimntvQ9 zRhQ=du{FtKh^8W|U65Y|c6+UFHEsEiIfa!qM=_66<>*MWO(RgMs*5%v|;BjgqH_YPnBKZv47xrVW&ap#l(w4zt%E%Pp%0 zi0ZQ3W9w%-7%+is*~$wnCI%$E1E|yvzq2Y^Uka}p0LYd?%8mB-; zX^zIiB5m*FNE-h^AEa5D!u?(g)inOSUdr_}c3v-Z3K}z4W=)31yDg*cL}OvaPdYV? zhQB6J2c+S!micmpl1@Jl>9iI~$3GCP>9Rh1(vg&}wB?tTFTLY_Z`-=}y{m7%y02rZ z@1we}^Gfe#v);^`vd_-4&i{|3)J5qLCd;}d%X%owIxGF^Exkk_y_6xX+#;X?KQw zt_`3h>7eYxEi{za9V7O)O$17k9?IVO4B#YbqU_J=2$ZB|QjoYgytuCH=r-zC|;%F=z4FlqHW zNqS;Wy;4@aR0t2|z3_{zbX_i@PSA-dPPGEXq1c_Qhl2N4K^KO@%T5K3lCp|wwHiki z4qzb$$CRvM0nBySp<*j2Lb{r|rjA~J1H(EaO+$nJdODiwY5=bY=Xj3=u(ya#ub`}| z4nM4GXgtu=++sL?r1o$NbJKywhVa9?>Z-~LaP(R#fWHIqIvho1H7$LkLFN`CM%g)y z_VDtl^VRe5@)+%8H)@21`5+^GEj49)U|TN0%7y&~KvLH+7&y$z!QI2#Z{p->GeY>G zdLc8WO`hoI?cwfVHEf`PjyguG5MbR!{qe8Ys_7UGwzM1V?H@QJBrH54dTwl7U3~wz z*tyXW;b9>&0{y*5+gT1a)KSB~cv~gFy$85(POD`wc(}t@zrdN{QFG(s6B3i=FW@Kl zUobx@F(E!~ZdCZpK)npuzbn-&%om$)D~HMNshmevW# z+Q|zNlOcdNnu)ZkZX z>jdzHSO*07AvWVChejvN2l{u?w1EEngy_)8<7|cy=w|}xBHW7z^!Taaa}$$Oc{kED zd8x^XbHk^O7r@pFV2fc-mcZJM51bvBl)}4`rol@|iklrc-j=4?Ab@;?Ar+wv068aq zehTjrhMXTihlYgOHFiO&6F?gRn99pZQ|F};K%6-~2c`M;7~3iYzh5kbdIBeQ3i#-ILg-wm?-_tfNtzov0UvQIh@5l6j=QqfKx@w#(TOR%Yz&nc zJ;T#_ApYfK;n`&=KEHw^@X=G|BqZ}rrm6Ch6Xr}AjgP#$V9Ef7qpUO7-Y+zEe(LXO zs;Tp1L;dUr>i`|$sU?PigYDsCr$s_$00WstP8&NM4zopIxR{K?gs`{;smIf}sSD!5 zCOBX+LMkBT!7l+DSdN_*1r`ol&C;<6m2%Mv(xm_Bevcn(>CxbWM>Mpj-kV;7_z!DWe^>1AaEziKQ3 z0q4(y9Q?z9F#rLK3HNsx1n15SgbGJR&)hvQDk=3)no4R?RG_=Lo{Gp>Cl|`m-_m2o z-1z{&O`Sh?hKFT;D24F!5HtX&ui;4Vkho+XK=6{|LcHOmy$6K4@hIQ0cmYIwnC~cK z_^DzM8f+!afp!ydISGw~@QHQL`n*<9dt+ zrl&$W)MMIcTn}LmRZvQfupU`VJvgGLm$=O*SU9l~g&Zz$B1K*Wdojx>6KhGYoCk&<$eR8sM^twf~VU&${>m%wkX#1?~o zA*t1+={dqydui{hpzHC<{tIJ7;s}sDiX@Lk$s<~td7%u>amCLr(#=tl=Q?TT%u;N{ zA#wJVZYD=c04K$|fWT%((mDh7HMGUdAiO4tU%R?&aYn&9Ct*G8vhx8uBFU>PKzm@h z1I3ax8L#wWR&Ri&ZInJPmP#%Fc-ji;aFLW!2Vfi~<*6)`TCM?{GH~@wA@f2Rq$jwN z1U6)Vl~f?JtOmHW<=SB)uPG>N$SNfQ1!6x3wtNqIC8UBKpE}s_fjwb#ey=2CuqKQq z_J}9%$taft=1GjnY9De>Mn&Kmn83ET6U$B7+*2BzLuj+fYBjtgl~RN4Lz|ux3skJx zyjoMDtxvH%tI72jR4uS$H32(Tuz>yUBGJjf`t`e3Y#r-MtYdw#r7WvJU^iRPf-P$I z5{ufs&D|_*yW8Mm`&No+d)2WSvHIQ`VqY8p_Qe5UUkrA~S%bjtcu*E?lDt+QOp^82Vv}UB zSZ)$nEH`0`Wo*$LO)Q$DiA6KEdCp270XEMg(zA%ob0MWvd14FLN86r6O15Afz2yYd zfU%zz+EELia(n8R+f#S-CZR1g?t7i=Do!U+@kQ*Xaqq?YzY?~xR^f8%R4Fc2^}*Jf z7+V*M+E3rX(>)kl10dG;b^G!4HTvmdZJ!G$*xdTDsO2;ne{8VLR>QFU4NV4{4doBh z9%?q&#IQfcQv(}q*iR@Gv6&{r9dNiBy8Vp@nSthSZSU;rUN>6L-PPIN8nk}1LB{=c zHMj(`T*P7;&oO|gs@c!T^bIR}XSXrqJbfqn^8@t!C;EDh8{_6|Z}o<$Q9n&pj9MXL zEu9Z`5!g;!v!BV(5%z8#J`*QRo)Q=oJd+=yKQlNeaLVLK6Ma0~>_-eW!PrpEDp5;m zY-|lio zETicajjLs7X65QNX?jTboXE(ihtWDwk&$!4L#9via=T~^Rodf{T~K7k>#Bcm<>bmZ)iKmv_RFKPpg z^-Mo(7&S9a1o|>+MDUaPKD^60Y^n=pw-xb;PA+( zGZ-p7IAE;RKpn`Nv5i)Py%gAhaGek|DiaK4_*5KSpLQP5B6SxVG&U$ zqgA6K!UDbQ$?k)2UjfV7pyU{j95ZR=?8x7vRU>E5oHS;nF{q^?`vHW`P)FbCkQu;0 zX48EghvHof;f?@E^+3jCh;E?T4^x4P9S16r;X*3H z9RaLiC}|jt7!wdOC+cW4H)>8uz?cz6u%{w~zXRz?HW0m>L=p1rSjYp;JAqaHSattQ!up_kqG5 zidKQ5`q&QwU0j%scLYEgH*=m4JR1NYkKhT;W}u9V>iaAXx8E?gNi*j}0YucCnUmax z_2YJjfO1-lo(!eH5D}r1M_b@>3N?DjgC?=$~baefq_uLe7E)toE4b`<(w7h zX^puqnvS=Ge1pPCdU%j8-Vo|aCwm4ex@OK3p&nVJ9uu9-FgHc@eW-`It3T8OAfO)p zuI9KN-68acxle*tBM>2z+=uD+gupvJ0U;3tA|fOJ@ALGaAsK=zF&D`t6PMMH8ebZnj)R_L}QS18<}J^8ZWXx=m0bpIbj4W$=U`De_aY?hK9svq2hHU8V;YOGD;TxPV}r* zc>XHuv*)=leNL>%QNTJIUxkacHR07*I@fD--QZ}J3%Zw{e*ZcHjsE&@E{hd4e2o_F z#nO=YEL(#Edn6igfNM0s%wnVs-%iVBq=nf4BRI&_pigC=2%zcnaz(C&o{_1=NLxp@ z@e|>&G^9S13elMnIB~q2qwPowQzJbMt|H`7CcvUk=M`18`r|`V&=zLTU9f1y2dnB< z_gnSBibV_N&c+%89FO+bQpI?}b6H{!0BHDxGhkLi=8BKjY}~f{$9)Iue$hX;@5kNS zHm><-MP|aR0DQ)YQQ;0OT`OXT0AtL+%+_Oi?4pl0ef{J9tRp8*pSzG#chMl{!nxBY zj%4ls@#{?=EsCA)VQXeUv?AfTEU|)6Qqvo3JuWDI+1ju6{+50A?@L#&-^$IqTX)a! zZeH%K>sK%ReKz~Iym8>|VbtF3`=wSc}%nXbQv^**Q0I z?*npSVNp?4F;zqr_5&jKb8qBiXYF3ID8kpyR8JMOTIR$Sk2^JebJuB!E4Lpwm2)%i z!NbC$!eYIm!iNv?Zswdiuzh9XG*@$dHNaxdZQ-UX2$Pl`vlg!Z{`iF(c@GK-i}H(g ziwX-KQ zHds@!$4yoP>%c|Zk6*o4P?QaD1^2EV-@Yi&+MvfxRz)qdadB%7T*!S`bh22j=wa@K z18d^OnQ1ACXlD4%m!WOYvfZby=NJB7tX7zR{nYMdLALl-tWfj9cE>==BYs_0PTs>J zfGT>Jmy@+F-UDcfK*3Ek1MBI_c4yywPg0_Fg-0=^8z;Y76fj(m(ZYy@qp`!R5BK8g z0SvC*-VbLv7Lj`WK_O}iBX#d}L3jm_v z?%(@A3bF0q<0h+-~CtJ(m!xf_o_VKK!0D@QiYbsM0j zAj}0@zA9*%jbE_s#PtV7hoGzvuAkVpV7!^8=qWC#&%{N$vu`~lFb{8K?_M+!*GEKa zV=L*63|#Re)F+G7=f@R+BlVQJ-9lB?w+a4W--WyafGEhju z5FiTg<{VfRVh1%A%|*q)E_C%T7w-{>dl!FM9ctI}Hmqa_iMdEFsifLU!!yae2c2Ev z)h#GuQT)n&AYxJc%HG6S6u-JpG8V<+`Zi-xEN+yDSQLvHZ;VB;xRJ|P6pNn)L@bKM z%qWbdu=v@DffGO1F&4$*XHHRzV(~LEV^J(=ZWpyEmb6|l7R8cRA;zLu^4cb9Q7n1Q z6tyUpyc#nW#nP_x#G+Vg34&M@%OIZ+i(&#Vtpr3Yie;3uh()o?5?x>A$i7RmeU+vA zCdv0+gXpc!BGi!ZDU|dYl5AR-^xBpxlB%U9aN0z} z3v9YU+cX(E($>j+{Df(tbE2Z_WAvh<=7dh0Fy7tCcH~eK&^2j)O*EFkf?Q3<$jsW! zConWJK4tOBwVSrqZR@vn)7q7bQ{p2-1AW}A&5Y>Nw{AMBlA4b3FbA(0vFY!v-Mr(Q zpAVhL{@-mZ5HUKIoEPQ zzo{!W0R1NSS`O%`S>JA6nHuirG|Y%t@pjWul{NaCIrz?gbJfm+r!L;UUszmHR$0xj zt*bMvT4_A2~pW3wj)5M~rXNtLYDQo;+{mj$hB+ zE-J5i2FNWft*uqqsG+4F5P4QpUUd81uRB)Go9sLkA5wMKQNfH9w9U*7`_9}ds^B*? zwX_zt>9w{rHSjBnZk^e;ArtgX;v=b>j*5*r{bJwWb?oZHa(+W|OKX0cZfi?(1Hb&? z)nmKfkM+aGojr6^z!~MAxccWmb4#l0A)mZ99muD?x+M3{pI0aPk0Kb|bX0;df8D{H z2jz8*Ev>iOv|C#m>&hSG99%bF0N+hV#qg6BtpDY5QB{3&>$Ntm*5>-EqRYRmUoeTL zF4Q~8Z5VYZ4gg;%u5M^)z0#)H+R{*6d^Dg*FXB_VU5iu^vO= zbVmqD?i*4D!0GYYLsvi8g zD|50{f5=@_M^(}`8$WNuvE1_dmewa8vH<+;Z;%o}e8{*i=m{1# z+?ow=&2=SL!L5;lk(#JQGT6-N4D;pfIPz16m?b;G4zB zA$--L+Z7Eh$J(}lIo0MT4qczSb`lMz=G0zB8a$A5XQ zxUK~tTI!0=eHrf#zM({DfZ#qp<(nKREQWaYIOm&`@u0j5A&9pn?O_ua|9q{iq4f}y zwV~|V&xYm${JL@)u8*kpsNCN+Z0!lCPZp`qiM3(2 z{d;&@GIWgClwH7Y28d>ULH4GIp1zd0M$S=N&lJ_R07Oe|(V4AL&QN2~T)0LqG28xv z8e@pM;=i`Vxby--QZ6bIODd_h((nxWk_6sk9aVe_0)*sVAh{<=?2V*868f~{v4Qu2 zB#klY#wyw4k}&Gw#8Tq?LA)(VF%wBMtC8ES5@$$h=UZ~KRf_qW+-sF;ML@JyKdIIk zZ2JuU0wt_oV0R?2ekR@sC9aDAPg~^B-VP5aVMAP0brIoJ$uZ*^fru}P5FU>Kw(X@BZ-pG-R zjWq3Nw0F|1h@CW6mpQ!>szq$2Y2T}|%k_-4H0}FUHl0GmVp`yKRt8l@#AaIH?N(~- zNyKtm=v`N`q9$TJ-Q~acm0F;P1vOR$DK;E@zC@`Mv8BekXO}l&xjnVqp1RNespa<6 za(imIJ+<7PT5eB`ZFlAN)Yu)o+@2clbYTm2xji-Us{y+m60G^<_S7%C^C7pVrcY$# z_SB4b8o51n&-;eLQ%bo#HRHQVc=jyoQ`9E=Wj5Q=+IvfHK`yIpdhaaYduMImd+Ywb z-74tIeTLrNp^*KyhOGBNWV>x5%RLt9Z^zKLU`4K~zT{r3Y-vF7R=&rv7Rlo8whCdy-)+E!WeJWtyxOI|gEHp-GbD%2p_LRp%1jkZpfMmrN)Cd==; z(%wRZmWKFNnJm6ZXuQ72hkcVwdoL09P6F?pv@g^t@C{G#-gRhxO0TU*tN*-AcM{dD zWYx=r@S-&2{)sy&xqo80e`0W^EcZ_gUL>)OCihP)_fJgxEX(~9!>_o={S(vjjWk}q zu?8gGSGe3iv3O7Oa{t6an_RhnV&dCa?w?q;A1V>CwUzrP{-5+ujH=Lkg8xFKtm~Dq z?d0Xl?b(!a`{m0gwNZG|^a5Zhx%?N1cDc8AAvh?gU_ zQbNHVid~SP)CuuQ#O5ZK?4md&JT645u>0jN!8>$76{-fG*I8S^5%Uo2f`~P}b_=+x zs-2EK#Ilq&eGXzXYm-tfb~vkheiJw(XPwur1JAjvL3cJ{C);-hJ;QE$M-*=Wx7n;> zi+Y5OsY^Zs_tvZulLpj?So$~D!;MbXP5nmH1T=HjVaL=tN=*<$o7Q5#)SH@6GeT3> zV87H;n^6l;uf-8o?VuKjp~Ih2jTAcEf?5#@SPfpOQ9vtd0~h1@IKs+TZ-W?0|AeZi zP OpenAndApplyTheme(e.NewValue as string); + => OpenAndApplyTheme(e.NewValue as Configuration.Theme? ?? Configuration.Theme.System); private static void OnActualThemeVariantChanged(object? sender, EventArgs e) - => OpenAndApplyTheme(Configuration.Instance.GetString(propertyName: nameof(ThemeVariant))); + => OpenAndApplyTheme(Configuration.Instance.ThemeVariant); - private static void OpenAndApplyTheme(string? themeVariant) + private static void OpenAndApplyTheme(Configuration.Theme themeVariant) { using ChardonnayThemePersister? themePersister = ChardonnayThemePersister.Create(); themePersister?.Target.ApplyTheme(themeVariant); diff --git a/Source/LibationAvalonia/Controls/Settings/Important.axaml.cs b/Source/LibationAvalonia/Controls/Settings/Important.axaml.cs index 66148fc8..e00c97b0 100644 --- a/Source/LibationAvalonia/Controls/Settings/Important.axaml.cs +++ b/Source/LibationAvalonia/Controls/Settings/Important.axaml.cs @@ -52,7 +52,8 @@ namespace LibationAvalonia.Controls.Settings var parent = ThemeComboBox.Parent as Panel; if (parent?.Children.Remove(ThemeComboBox) ?? false) { - Configuration.Instance.SetString(ViewModel?.ThemeVariant, nameof(ViewModel.ThemeVariant)); + + Configuration.Instance.ThemeVariant = ViewModel?.ThemeVariant.Value ?? Configuration.Theme.System; parent.Children.Add(ThemeComboBox); } ThemeComboBox.SelectionChanged += ThemeComboBox_SelectionChanged; diff --git a/Source/LibationAvalonia/Dialogs/DialogWindow.cs b/Source/LibationAvalonia/Dialogs/DialogWindow.cs index 1bb07286..7489cebe 100644 --- a/Source/LibationAvalonia/Dialogs/DialogWindow.cs +++ b/Source/LibationAvalonia/Dialogs/DialogWindow.cs @@ -29,11 +29,11 @@ namespace LibationAvalonia.Dialogs if (Design.IsDesignMode) { - var themeVariant = Configuration.CreateMockInstance().GetString(propertyName: nameof(ThemeVariant)); + var themeVariant = Configuration.CreateMockInstance().ThemeVariant; RequestedThemeVariant = themeVariant switch { - nameof(ThemeVariant.Dark) => ThemeVariant.Dark, - nameof(ThemeVariant.Light) => ThemeVariant.Light, + Configuration.Theme.Dark => ThemeVariant.Dark, + Configuration.Theme.Light => ThemeVariant.Light, _ => ThemeVariant.Default, }; } diff --git a/Source/LibationAvalonia/Themes/ChardonnayTheme.cs b/Source/LibationAvalonia/Themes/ChardonnayTheme.cs index ba13cd17..177fa1b5 100644 --- a/Source/LibationAvalonia/Themes/ChardonnayTheme.cs +++ b/Source/LibationAvalonia/Themes/ChardonnayTheme.cs @@ -37,7 +37,7 @@ public class ChardonnayTheme : IUpdatable, ICloneable /// Invoke public void Save() => Updated?.Invoke(this, EventArgs.Empty); - public Color GetColor(string? themeVariant, string itemName) + public Color GetColor(LibationFileManager.Configuration.Theme themeVariant, string itemName) => GetColor(FromVariantName(themeVariant), itemName); public Color GetColor(ThemeVariant themeVariant, string itemName) @@ -46,7 +46,7 @@ public class ChardonnayTheme : IUpdatable, ICloneable return ThemeColors[themeVariant].TryGetValue(itemName, out var color) ? color : default; } - public ChardonnayTheme SetColor(string? themeVariant, Expression> colorSelector, Color color) + public ChardonnayTheme SetColor(LibationFileManager.Configuration.Theme themeVariant, Expression> colorSelector, Color color) => SetColor(FromVariantName(themeVariant), colorSelector, color); public ChardonnayTheme SetColor(ThemeVariant themeVariant, Expression> colorSelector, Color color) @@ -59,7 +59,7 @@ public class ChardonnayTheme : IUpdatable, ICloneable return this; } - public ChardonnayTheme SetColor(string? themeVariant, string itemName, Color itemColor) + public ChardonnayTheme SetColor(LibationFileManager.Configuration.Theme themeVariant, string itemName, Color itemColor) => SetColor(FromVariantName(themeVariant), itemName, itemColor); public ChardonnayTheme SetColor(ThemeVariant themeVariant, string itemName, Color itemColor) @@ -69,7 +69,7 @@ public class ChardonnayTheme : IUpdatable, ICloneable return this; } - public FrozenDictionary GetThemeColors(string? themeVariant) + public FrozenDictionary GetThemeColors(LibationFileManager.Configuration.Theme themeVariant) => GetThemeColors(FromVariantName(themeVariant)); public FrozenDictionary GetThemeColors(ThemeVariant themeVariant) @@ -78,7 +78,7 @@ public class ChardonnayTheme : IUpdatable, ICloneable return ThemeColors[themeVariant].ToFrozenDictionary(); } - public void ApplyTheme(string? themeVariant) + public void ApplyTheme(LibationFileManager.Configuration.Theme themeVariant) => ApplyTheme(FromVariantName(themeVariant)); public void ApplyTheme(ThemeVariant themeVariant) @@ -195,11 +195,11 @@ public class ChardonnayTheme : IUpdatable, ICloneable throw new InvalidOperationException("FluentTheme.Palettes only supports Light and Dark variants."); } - private static ThemeVariant FromVariantName(string? variantName) + private static ThemeVariant FromVariantName(LibationFileManager.Configuration.Theme variantName) => variantName switch { - nameof(ThemeVariant.Dark) => ThemeVariant.Dark, - nameof(ThemeVariant.Light) => ThemeVariant.Light, + LibationFileManager.Configuration.Theme.Dark => ThemeVariant.Dark, + LibationFileManager.Configuration.Theme.Light => ThemeVariant.Light, // "System" _ => ThemeVariant.Default }; diff --git a/Source/LibationAvalonia/ViewModels/Settings/ImportantSettingsVM.cs b/Source/LibationAvalonia/ViewModels/Settings/ImportantSettingsVM.cs index eaf5e5fc..d0d71550 100644 --- a/Source/LibationAvalonia/ViewModels/Settings/ImportantSettingsVM.cs +++ b/Source/LibationAvalonia/ViewModels/Settings/ImportantSettingsVM.cs @@ -12,8 +12,7 @@ namespace LibationAvalonia.ViewModels.Settings { public class ImportantSettingsVM : ViewModelBase { - private string themeVariant; - private string initialThemeVariant; + private EnumDisplay themeVariant; private readonly Configuration config; public ImportantSettingsVM(Configuration config) @@ -30,9 +29,7 @@ namespace LibationAvalonia.ViewModels.Settings GridScaleFactor = scaleFactorToLinearRange(config.GridScaleFactor); GridFontScaleFactor = scaleFactorToLinearRange(config.GridFontScaleFactor); - themeVariant = initialThemeVariant = config.GetString(propertyName: nameof(ThemeVariant)) ?? ""; - if (string.IsNullOrWhiteSpace(initialThemeVariant)) - themeVariant = initialThemeVariant = "System"; + themeVariant = Themes.Single(v => v.Value == config.ThemeVariant); } public void SaveSettings(Configuration config) @@ -91,7 +88,10 @@ namespace LibationAvalonia.ViewModels.Settings public string GridScaleFactorText { get; } = Configuration.GetDescription(nameof(Configuration.GridScaleFactor)); public string GridFontScaleFactorText { get; } = Configuration.GetDescription(nameof(Configuration.GridFontScaleFactor)); public string BetaOptInText { get; } = Configuration.GetDescription(nameof(Configuration.BetaOptIn)); - public string[] Themes { get; } = { "System", nameof(Avalonia.Styling.ThemeVariant.Light), nameof(Avalonia.Styling.ThemeVariant.Dark) }; + public EnumDisplay[] Themes { get; } + = Enum.GetValues() + .Select(v => new EnumDisplay(v)) + .ToArray(); public string BooksDirectory { get; set; } public bool SavePodcastsToParentFolder { get; set; } @@ -103,7 +103,7 @@ namespace LibationAvalonia.ViewModels.Settings public bool UseWebView { get; set; } public Serilog.Events.LogEventLevel LoggingLevel { get; set; } - public string ThemeVariant + public EnumDisplay ThemeVariant { get => themeVariant; set => this.RaiseAndSetIfChanged(ref themeVariant, value); diff --git a/Source/LibationFileManager/Configuration.PersistentSettings.cs b/Source/LibationFileManager/Configuration.PersistentSettings.cs index 39f38391..30c8dbc2 100644 --- a/Source/LibationFileManager/Configuration.PersistentSettings.cs +++ b/Source/LibationFileManager/Configuration.PersistentSettings.cs @@ -154,6 +154,9 @@ namespace LibationFileManager set => SetString(value); } + [Description("Libation's display color theme")] + public Theme ThemeVariant { get => GetNonString(defaultValue: Theme.System); set => SetNonString(value); } + [Description("Allow Libation to fix up audiobook metadata")] public bool AllowLibationFixup { get => GetNonString(defaultValue: true); set => SetNonString(value); } @@ -261,6 +264,14 @@ namespace LibationFileManager Ignore = 3 } + [JsonConverter(typeof(StringEnumConverter))] + public enum Theme + { + System = 0, + Light = 1, + Dark = 2 + } + [JsonConverter(typeof(StringEnumConverter))] public enum DateTimeSource { diff --git a/Source/LibationWinForms/AccessibleDataGridViewButtonCell.cs b/Source/LibationWinForms/AccessibleDataGridViewButtonCell.cs index 2a384d9e..cc879e76 100644 --- a/Source/LibationWinForms/AccessibleDataGridViewButtonCell.cs +++ b/Source/LibationWinForms/AccessibleDataGridViewButtonCell.cs @@ -1,8 +1,9 @@ -using System.Windows.Forms; +using LibationWinForms.GridView; +using System.Windows.Forms; namespace LibationWinForms { - public class AccessibleDataGridViewButtonCell : DataGridViewButtonCell + public class AccessibleDataGridViewButtonCell : DataGridViewButtonCell { protected string AccessibilityName { get; } @@ -24,7 +25,8 @@ namespace LibationWinForms public AccessibleDataGridViewButtonCell(string accessibilityName) : base() { AccessibilityName = accessibilityName; - } + FlatStyle = Application.IsDarkModeEnabled ? FlatStyle.Flat : FlatStyle.System; + } protected class ButtonCellAccessibilityObject : DataGridViewButtonCellAccessibleObject { diff --git a/Source/LibationWinForms/AccessibleDataGridViewComboBoxCell.cs b/Source/LibationWinForms/AccessibleDataGridViewComboBoxCell.cs new file mode 100644 index 00000000..769af451 --- /dev/null +++ b/Source/LibationWinForms/AccessibleDataGridViewComboBoxCell.cs @@ -0,0 +1,45 @@ +using System.Windows.Forms; + +namespace LibationWinForms +{ + public class AccessibleDataGridViewComboBoxCell : DataGridViewComboBoxCell + { + protected string AccessibilityName { get; } + + /// + /// Get or set description for accessibility. eg: screen readers. Also sets the ToolTipText + /// + protected string AccessibilityDescription + { + get => field; + set + { + field = value; + ToolTipText = value; + } + } + + protected override AccessibleObject CreateAccessibilityInstance() => new ComboBoxCellAccessibilityObject(this, name: AccessibilityName, description: AccessibilityDescription); + + public AccessibleDataGridViewComboBoxCell(string accessibilityName) : base() + { + FlatStyle = Application.IsDarkModeEnabled ? FlatStyle.Flat : FlatStyle.Standard; + AccessibilityName = accessibilityName; + } + + protected class ComboBoxCellAccessibilityObject : DataGridViewComboBoxCellAccessibleObject + { + private string _name; + public override string Name => _name; + + private string _description; + public override string Description => _description; + + public ComboBoxCellAccessibilityObject(DataGridViewCell owner, string name, string description) : base(owner) + { + _name = name; + _description = description; + } + } + } +} diff --git a/Source/LibationWinForms/Dialogs/AboutDialog.cs b/Source/LibationWinForms/Dialogs/AboutDialog.cs index e9f2cf51..eafc6cff 100644 --- a/Source/LibationWinForms/Dialogs/AboutDialog.cs +++ b/Source/LibationWinForms/Dialogs/AboutDialog.cs @@ -14,7 +14,7 @@ namespace LibationWinForms.Dialogs InitializeComponent(); this.SetLibationIcon(); releaseNotesLbl.Text = $"Libation {AppScaffolding.LibationScaffolding.Variety} v{AppScaffolding.LibationScaffolding.BuildVersion}"; - + pictureBox1.Image = Application.IsDarkModeEnabled ? Properties.Resources.cheers_dark : Properties.Resources.cheers; rmcrackanLbl.Tag = LibationContributor.PrimaryContributors.Single(c => c.Name == rmcrackanLbl.Text); MBucariLbl.Tag = LibationContributor.PrimaryContributors.Single(c => c.Name == MBucariLbl.Text); @@ -22,8 +22,13 @@ namespace LibationWinForms.Dialogs { var label = new LinkLabel { Tag = contributor, Text = contributor.Name, AutoSize = true }; label.LinkClicked += ContributorLabel_LinkClicked; + label.SetLinkLabelColors(); flowLayoutPanel1.Controls.Add(label); } + rmcrackanLbl.SetLinkLabelColors(); + MBucariLbl.SetLinkLabelColors(); + releaseNotesLbl.SetLinkLabelColors(); + getLibationLbl.SetLinkLabelColors(); var toolTip = new ToolTip(); toolTip.SetToolTip(releaseNotesLbl, "View Release Notes"); diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs index dcbfa698..7a77bebd 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.Designer.cs @@ -31,11 +31,11 @@ this.cancelBtn = new System.Windows.Forms.Button(); this.saveBtn = new System.Windows.Forms.Button(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.DeleteAccount = new System.Windows.Forms.DataGridViewButtonColumn(); - this.ExportAccount = new System.Windows.Forms.DataGridViewButtonColumn(); + this.DeleteAccount = new DeleteColumn(); + this.ExportAccount = new ExportColumn(); this.LibraryScan = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.AccountId = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Locale = new System.Windows.Forms.DataGridViewComboBoxColumn(); + this.Locale = new LocaleColumn(); this.AccountName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.importBtn = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); @@ -165,11 +165,11 @@ private System.Windows.Forms.Button saveBtn; private System.Windows.Forms.DataGridView dataGridView1; private System.Windows.Forms.Button importBtn; - private System.Windows.Forms.DataGridViewButtonColumn DeleteAccount; - private System.Windows.Forms.DataGridViewButtonColumn ExportAccount; + private DeleteColumn DeleteAccount; + private ExportColumn ExportAccount; private System.Windows.Forms.DataGridViewCheckBoxColumn LibraryScan; private System.Windows.Forms.DataGridViewTextBoxColumn AccountId; - private System.Windows.Forms.DataGridViewComboBoxColumn Locale; + private LocaleColumn Locale; private System.Windows.Forms.DataGridViewTextBoxColumn AccountName; } } \ No newline at end of file diff --git a/Source/LibationWinForms/Dialogs/AccountsDialog.cs b/Source/LibationWinForms/Dialogs/AccountsDialog.cs index 4ee571bf..9d39bda8 100644 --- a/Source/LibationWinForms/Dialogs/AccountsDialog.cs +++ b/Source/LibationWinForms/Dialogs/AccountsDialog.cs @@ -20,7 +20,7 @@ namespace LibationWinForms.Dialogs public AccountsDialog() { InitializeComponent(); - + dataGridView1.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; dataGridView1.Columns[COL_AccountName].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; populateDropDown(); @@ -299,5 +299,55 @@ namespace LibationWinForms.Dialogs ex); } } + #region Accessable Columns + + public class DeleteColumn : DataGridViewButtonColumn + { + public DeleteColumn() : base() + { + this.CellTemplate = new DeleteColumnCell(); + } + } + + public class ExportColumn : DataGridViewButtonColumn + { + public ExportColumn() : base() + { + this.CellTemplate = new ExportColumnCell(); + } + } + + public class LocaleColumn : DataGridViewComboBoxColumn + { + public LocaleColumn() : base() + { + this.CellTemplate = new LocaleColumnCell(); + } + } + + public class DeleteColumnCell : AccessibleDataGridViewButtonCell + { + public DeleteColumnCell() : base("Delete account from Libation") + { + ToolTipText = AccessibilityName; + } + } + + public class LocaleColumnCell : AccessibleDataGridViewComboBoxCell + { + public LocaleColumnCell() : base("Select Audible account region") + { + ToolTipText = AccessibilityName; + } + } + + public class ExportColumnCell : AccessibleDataGridViewButtonCell + { + public ExportColumnCell() : base("Export account to mkb79/audible-cli format") + { + ToolTipText = AccessibilityName; + } + } + #endregion } } diff --git a/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs b/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs index d7f7a5b8..58dbb32d 100644 --- a/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs +++ b/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs @@ -27,6 +27,7 @@ namespace LibationWinForms.Dialogs { InitializeComponent(); this.SetLibationIcon(); + audibleLink.SetLinkLabelColors(); } public BookDetailsDialog(LibraryBook libraryBook) : this() { @@ -40,6 +41,7 @@ namespace LibationWinForms.Dialogs { this.Text = Book.TitleWithSubtitle; dolbyAtmosPb.Visible = Book.IsSpatial; + dolbyAtmosPb.Image = Application.IsDarkModeEnabled ? Properties.Resources.Dolby_Atmos_Vertical_80_dark : Properties.Resources.Dolby_Atmos_Vertical_80; (_, var picture) = PictureStorage.GetPicture(new PictureDefinition(Book.PictureId, PictureSize._80x80)); this.coverPb.Image = WinFormsUtil.TryLoadImageOrDefault(picture, PictureSize._80x80); @@ -138,6 +140,7 @@ namespace LibationWinForms.Dialogs var locale = AudibleApi.Localization.Get(_libraryBook.Book.Locale); var link = $"https://www.audible.{locale.TopDomain}/pd/{Book.AudibleProductId}"; Go.To.Url(link); + e.Link.Visited = true; } } } diff --git a/Source/LibationWinForms/Dialogs/BookRecordsDialog.cs b/Source/LibationWinForms/Dialogs/BookRecordsDialog.cs index c705d074..d9edb711 100644 --- a/Source/LibationWinForms/Dialogs/BookRecordsDialog.cs +++ b/Source/LibationWinForms/Dialogs/BookRecordsDialog.cs @@ -21,7 +21,7 @@ namespace LibationWinForms.Dialogs public BookRecordsDialog() { InitializeComponent(); - + dataGridView1.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; if (!DesignMode) { //Prevent the designer from auto-generating columns diff --git a/Source/LibationWinForms/Dialogs/EditQuickFilters.cs b/Source/LibationWinForms/Dialogs/EditQuickFilters.cs index 5669633b..99f3ac5a 100644 --- a/Source/LibationWinForms/Dialogs/EditQuickFilters.cs +++ b/Source/LibationWinForms/Dialogs/EditQuickFilters.cs @@ -55,7 +55,7 @@ namespace LibationWinForms.Dialogs public EditQuickFilters() { InitializeComponent(); - + dataGridView1.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; dataGridView1.Columns[COL_Filter].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; populateGridValues(); diff --git a/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs b/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs index 53dafff0..d00ceaef 100644 --- a/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs +++ b/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs @@ -44,13 +44,13 @@ allowLibationFixupCbox = new System.Windows.Forms.CheckBox(); convertLossyRb = new System.Windows.Forms.RadioButton(); convertLosslessRb = new System.Windows.Forms.RadioButton(); - inProgressSelectControl = new DirectorySelectControl(); logsBtn = new System.Windows.Forms.Button(); - booksSelectControl = new DirectoryOrCustomSelectControl(); loggingLevelLbl = new System.Windows.Forms.Label(); loggingLevelCb = new System.Windows.Forms.ComboBox(); tabControl = new System.Windows.Forms.TabControl(); tab1ImportantSettings = new System.Windows.Forms.TabPage(); + themeCb = new System.Windows.Forms.ComboBox(); + label22 = new System.Windows.Forms.Label(); groupBox1 = new System.Windows.Forms.GroupBox(); applyDisplaySettingsBtn = new System.Windows.Forms.Button(); gridScaleFactorLbl = new System.Windows.Forms.Label(); @@ -58,6 +58,7 @@ gridFontScaleFactorLbl = new System.Windows.Forms.Label(); gridFontScaleFactorTbar = new System.Windows.Forms.TrackBar(); booksGb = new System.Windows.Forms.GroupBox(); + booksSelectControl = new DirectoryOrCustomSelectControl(); lastWriteTimeCb = new System.Windows.Forms.ComboBox(); creationTimeCb = new System.Windows.Forms.ComboBox(); lastWriteTimeLbl = new System.Windows.Forms.Label(); @@ -72,6 +73,7 @@ saveMetadataToFileCbox = new System.Windows.Forms.CheckBox(); useCoverAsFolderIconCb = new System.Windows.Forms.CheckBox(); inProgressFilesGb = new System.Windows.Forms.GroupBox(); + inProgressSelectControl = new DirectoryOrCustomSelectControl(); customFileNamingGb = new System.Windows.Forms.GroupBox(); editCharreplacementBtn = new System.Windows.Forms.Button(); chapterFileTemplateBtn = new System.Windows.Forms.Button(); @@ -137,6 +139,7 @@ retainAaxFileCbox = new System.Windows.Forms.CheckBox(); downloadCoverArtCbox = new System.Windows.Forms.CheckBox(); createCueSheetCbox = new System.Windows.Forms.CheckBox(); + themeLbl = new System.Windows.Forms.Label(); badBookGb.SuspendLayout(); tabControl.SuspendLayout(); tab1ImportantSettings.SuspendLayout(); @@ -172,7 +175,7 @@ // inProgressDescLbl // inProgressDescLbl.AutoSize = true; - inProgressDescLbl.Location = new System.Drawing.Point(7, 19); + inProgressDescLbl.Location = new System.Drawing.Point(7, 17); inProgressDescLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); inProgressDescLbl.Name = "inProgressDescLbl"; inProgressDescLbl.Size = new System.Drawing.Size(100, 45); @@ -182,8 +185,8 @@ // saveBtn // saveBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; - saveBtn.Location = new System.Drawing.Point(668, 499); - saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + saveBtn.Location = new System.Drawing.Point(668, 501); + saveBtn.Margin = new System.Windows.Forms.Padding(4, 1, 4, 1); saveBtn.Name = "saveBtn"; saveBtn.Size = new System.Drawing.Size(88, 27); saveBtn.TabIndex = 98; @@ -195,8 +198,8 @@ // cancelBtn.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - cancelBtn.Location = new System.Drawing.Point(786, 499); - cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cancelBtn.Location = new System.Drawing.Point(785, 501); + cancelBtn.Margin = new System.Windows.Forms.Padding(1); cancelBtn.Name = "cancelBtn"; cancelBtn.Size = new System.Drawing.Size(88, 27); cancelBtn.TabIndex = 99; @@ -341,15 +344,6 @@ convertLosslessRb.UseVisualStyleBackColor = true; convertLosslessRb.CheckedChanged += convertFormatRb_CheckedChanged; // - // inProgressSelectControl - // - inProgressSelectControl.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; - inProgressSelectControl.Location = new System.Drawing.Point(6, 85); - inProgressSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - inProgressSelectControl.Name = "inProgressSelectControl"; - inProgressSelectControl.Size = new System.Drawing.Size(830, 49); - inProgressSelectControl.TabIndex = 19; - // // logsBtn // logsBtn.Location = new System.Drawing.Point(256, 424); @@ -360,15 +354,6 @@ logsBtn.UseVisualStyleBackColor = true; logsBtn.Click += logsBtn_Click; // - // booksSelectControl - // - booksSelectControl.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; - booksSelectControl.Location = new System.Drawing.Point(6, 37); - booksSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - booksSelectControl.Name = "booksSelectControl"; - booksSelectControl.Size = new System.Drawing.Size(832, 102); - booksSelectControl.TabIndex = 2; - // // loggingLevelLbl // loggingLevelLbl.AutoSize = true; @@ -397,12 +382,16 @@ tabControl.Location = new System.Drawing.Point(12, 12); tabControl.Name = "tabControl"; tabControl.SelectedIndex = 0; - tabControl.Size = new System.Drawing.Size(864, 481); + tabControl.Size = new System.Drawing.Size(864, 485); tabControl.TabIndex = 100; // // tab1ImportantSettings // tab1ImportantSettings.AutoScroll = true; + tab1ImportantSettings.BackColor = System.Drawing.SystemColors.Window; + tab1ImportantSettings.Controls.Add(themeLbl); + tab1ImportantSettings.Controls.Add(themeCb); + tab1ImportantSettings.Controls.Add(label22); tab1ImportantSettings.Controls.Add(groupBox1); tab1ImportantSettings.Controls.Add(booksGb); tab1ImportantSettings.Controls.Add(logsBtn); @@ -411,10 +400,28 @@ tab1ImportantSettings.Location = new System.Drawing.Point(4, 24); tab1ImportantSettings.Name = "tab1ImportantSettings"; tab1ImportantSettings.Padding = new System.Windows.Forms.Padding(3); - tab1ImportantSettings.Size = new System.Drawing.Size(856, 453); + tab1ImportantSettings.Size = new System.Drawing.Size(856, 457); tab1ImportantSettings.TabIndex = 0; tab1ImportantSettings.Text = "Important settings"; - tab1ImportantSettings.UseVisualStyleBackColor = true; + // + // themeCb + // + themeCb.FormattingEnabled = true; + themeCb.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + themeCb.Location = new System.Drawing.Point(63, 390); + themeCb.Name = "themeCb"; + themeCb.Size = new System.Drawing.Size(121, 23); + themeCb.TabIndex = 11; + themeCb.SelectedIndexChanged += themeCb_SelectedIndexChanged; + // + // label22 + // + label22.AutoSize = true; + label22.Location = new System.Drawing.Point(4, 393); + label22.Name = "label22"; + label22.Size = new System.Drawing.Size(44, 15); + label22.TabIndex = 10; + label22.Text = "Theme"; // // groupBox1 // @@ -434,7 +441,7 @@ // applyDisplaySettingsBtn // applyDisplaySettingsBtn.Anchor = System.Windows.Forms.AnchorStyles.Right; - applyDisplaySettingsBtn.Location = new System.Drawing.Point(689, 26); + applyDisplaySettingsBtn.Location = new System.Drawing.Point(672, 26); applyDisplaySettingsBtn.Name = "applyDisplaySettingsBtn"; applyDisplaySettingsBtn.Size = new System.Drawing.Size(148, 34); applyDisplaySettingsBtn.TabIndex = 9; @@ -487,13 +494,13 @@ // booksGb // booksGb.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + booksGb.Controls.Add(booksSelectControl); booksGb.Controls.Add(lastWriteTimeCb); booksGb.Controls.Add(creationTimeCb); booksGb.Controls.Add(lastWriteTimeLbl); booksGb.Controls.Add(creationTimeLbl); booksGb.Controls.Add(overwriteExistingCbox); booksGb.Controls.Add(saveEpisodesToSeriesFolderCbox); - booksGb.Controls.Add(booksSelectControl); booksGb.Controls.Add(booksLocationDescLbl); booksGb.Location = new System.Drawing.Point(6, 6); booksGb.Name = "booksGb"; @@ -502,6 +509,14 @@ booksGb.TabStop = false; booksGb.Text = "Books location"; // + // booksSelectControl + // + booksSelectControl.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + booksSelectControl.Location = new System.Drawing.Point(8, 37); + booksSelectControl.Name = "booksSelectControl"; + booksSelectControl.Size = new System.Drawing.Size(830, 80); + booksSelectControl.TabIndex = 6; + // // lastWriteTimeCb // lastWriteTimeCb.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -563,6 +578,7 @@ // tab2ImportLibrary // tab2ImportLibrary.AutoScroll = true; + tab2ImportLibrary.BackColor = System.Drawing.SystemColors.Window; tab2ImportLibrary.Controls.Add(autoDownloadEpisodesCb); tab2ImportLibrary.Controls.Add(autoScanCb); tab2ImportLibrary.Controls.Add(showImportedStatsCb); @@ -571,10 +587,9 @@ tab2ImportLibrary.Location = new System.Drawing.Point(4, 24); tab2ImportLibrary.Name = "tab2ImportLibrary"; tab2ImportLibrary.Padding = new System.Windows.Forms.Padding(3); - tab2ImportLibrary.Size = new System.Drawing.Size(856, 453); + tab2ImportLibrary.Size = new System.Drawing.Size(856, 457); tab2ImportLibrary.TabIndex = 1; tab2ImportLibrary.Text = "Import library"; - tab2ImportLibrary.UseVisualStyleBackColor = true; // // autoDownloadEpisodesCb // @@ -609,6 +624,7 @@ // tab3DownloadDecrypt // tab3DownloadDecrypt.AutoScroll = true; + tab3DownloadDecrypt.BackColor = System.Drawing.SystemColors.Window; tab3DownloadDecrypt.Controls.Add(saveMetadataToFileCbox); tab3DownloadDecrypt.Controls.Add(useCoverAsFolderIconCb); tab3DownloadDecrypt.Controls.Add(inProgressFilesGb); @@ -617,15 +633,15 @@ tab3DownloadDecrypt.Location = new System.Drawing.Point(4, 24); tab3DownloadDecrypt.Name = "tab3DownloadDecrypt"; tab3DownloadDecrypt.Padding = new System.Windows.Forms.Padding(3); - tab3DownloadDecrypt.Size = new System.Drawing.Size(856, 453); + tab3DownloadDecrypt.Size = new System.Drawing.Size(856, 457); tab3DownloadDecrypt.TabIndex = 2; tab3DownloadDecrypt.Text = "Download/Decrypt"; - tab3DownloadDecrypt.UseVisualStyleBackColor = true; // // saveMetadataToFileCbox // + saveMetadataToFileCbox.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; saveMetadataToFileCbox.AutoSize = true; - saveMetadataToFileCbox.Location = new System.Drawing.Point(482, 428); + saveMetadataToFileCbox.Location = new System.Drawing.Point(481, 435); saveMetadataToFileCbox.Name = "saveMetadataToFileCbox"; saveMetadataToFileCbox.Size = new System.Drawing.Size(166, 19); saveMetadataToFileCbox.TabIndex = 22; @@ -634,8 +650,9 @@ // // useCoverAsFolderIconCb // + useCoverAsFolderIconCb.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; useCoverAsFolderIconCb.AutoSize = true; - useCoverAsFolderIconCb.Location = new System.Drawing.Point(7, 428); + useCoverAsFolderIconCb.Location = new System.Drawing.Point(6, 435); useCoverAsFolderIconCb.Name = "useCoverAsFolderIconCb"; useCoverAsFolderIconCb.Size = new System.Drawing.Size(180, 19); useCoverAsFolderIconCb.TabIndex = 22; @@ -644,16 +661,24 @@ // // inProgressFilesGb // - inProgressFilesGb.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; - inProgressFilesGb.Controls.Add(inProgressDescLbl); + inProgressFilesGb.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; inProgressFilesGb.Controls.Add(inProgressSelectControl); + inProgressFilesGb.Controls.Add(inProgressDescLbl); inProgressFilesGb.Location = new System.Drawing.Point(6, 281); inProgressFilesGb.Name = "inProgressFilesGb"; - inProgressFilesGb.Size = new System.Drawing.Size(842, 141); + inProgressFilesGb.Size = new System.Drawing.Size(842, 148); inProgressFilesGb.TabIndex = 21; inProgressFilesGb.TabStop = false; inProgressFilesGb.Text = "In progress files"; // + // inProgressSelectControl + // + inProgressSelectControl.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + inProgressSelectControl.Location = new System.Drawing.Point(6, 65); + inProgressSelectControl.Name = "inProgressSelectControl"; + inProgressSelectControl.Size = new System.Drawing.Size(830, 80); + inProgressSelectControl.TabIndex = 19; + // // customFileNamingGb // customFileNamingGb.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; @@ -775,6 +800,7 @@ // tab4AudioFileOptions // tab4AudioFileOptions.AutoScroll = true; + tab4AudioFileOptions.BackColor = System.Drawing.SystemColors.Window; tab4AudioFileOptions.Controls.Add(request_xHE_AAC_Cbox); tab4AudioFileOptions.Controls.Add(requestSpatialCbox); tab4AudioFileOptions.Controls.Add(useWidevineCbox); @@ -798,10 +824,9 @@ tab4AudioFileOptions.Location = new System.Drawing.Point(4, 24); tab4AudioFileOptions.Name = "tab4AudioFileOptions"; tab4AudioFileOptions.Padding = new System.Windows.Forms.Padding(3); - tab4AudioFileOptions.Size = new System.Drawing.Size(856, 453); + tab4AudioFileOptions.Size = new System.Drawing.Size(856, 457); tab4AudioFileOptions.TabIndex = 3; tab4AudioFileOptions.Text = "Audio File Options"; - tab4AudioFileOptions.UseVisualStyleBackColor = true; // // request_xHE_AAC_Cbox // @@ -1183,6 +1208,7 @@ // label19.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label19.AutoSize = true; + label19.BackColor = System.Drawing.SystemColors.ControlLightLight; label19.Location = new System.Drawing.Point(332, 47); label19.Name = "label19"; label19.Size = new System.Drawing.Size(20, 15); @@ -1193,6 +1219,7 @@ // label18.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label18.AutoSize = true; + label18.BackColor = System.Drawing.SystemColors.ControlLightLight; label18.Location = new System.Drawing.Point(291, 47); label18.Name = "label18"; label18.Size = new System.Drawing.Size(20, 15); @@ -1203,6 +1230,7 @@ // label17.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label17.AutoSize = true; + label17.BackColor = System.Drawing.SystemColors.ControlLightLight; label17.Location = new System.Drawing.Point(251, 47); label17.Name = "label17"; label17.Size = new System.Drawing.Size(20, 15); @@ -1213,6 +1241,7 @@ // label16.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label16.AutoSize = true; + label16.BackColor = System.Drawing.SystemColors.ControlLightLight; label16.Location = new System.Drawing.Point(212, 47); label16.Name = "label16"; label16.Size = new System.Drawing.Size(20, 15); @@ -1223,6 +1252,7 @@ // label12.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label12.AutoSize = true; + label12.BackColor = System.Drawing.SystemColors.ControlLightLight; label12.Location = new System.Drawing.Point(170, 47); label12.Name = "label12"; label12.Size = new System.Drawing.Size(20, 15); @@ -1233,6 +1263,7 @@ // label15.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label15.AutoSize = true; + label15.BackColor = System.Drawing.SystemColors.ControlLightLight; label15.Location = new System.Drawing.Point(130, 47); label15.Name = "label15"; label15.Size = new System.Drawing.Size(20, 15); @@ -1243,6 +1274,7 @@ // label9.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label9.AutoSize = true; + label9.BackColor = System.Drawing.SystemColors.ControlLightLight; label9.Location = new System.Drawing.Point(89, 47); label9.Name = "label9"; label9.Size = new System.Drawing.Size(20, 15); @@ -1253,6 +1285,7 @@ // label8.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label8.AutoSize = true; + label8.BackColor = System.Drawing.SystemColors.ControlLightLight; label8.Location = new System.Drawing.Point(371, 47); label8.Name = "label8"; label8.Size = new System.Drawing.Size(20, 15); @@ -1281,6 +1314,7 @@ // label14.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label14.AutoSize = true; + label14.BackColor = System.Drawing.SystemColors.ControlLightLight; label14.Location = new System.Drawing.Point(50, 47); label14.Name = "label14"; label14.Size = new System.Drawing.Size(20, 15); @@ -1291,6 +1325,7 @@ // label2.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; label2.AutoSize = true; + label2.BackColor = System.Drawing.SystemColors.ControlLightLight; label2.Location = new System.Drawing.Point(10, 47); label2.Name = "label2"; label2.Size = new System.Drawing.Size(20, 15); @@ -1403,6 +1438,15 @@ createCueSheetCbox.UseVisualStyleBackColor = true; createCueSheetCbox.CheckedChanged += allowLibationFixupCbox_CheckedChanged; // + // themeLbl + // + themeLbl.AutoSize = true; + themeLbl.Location = new System.Drawing.Point(190, 393); + themeLbl.Name = "themeLbl"; + themeLbl.Size = new System.Drawing.Size(296, 15); + themeLbl.TabIndex = 12; + themeLbl.Text = "You must restart Libation for this change to take effect."; + // // SettingsDialog // AcceptButton = saveBtn; @@ -1464,8 +1508,6 @@ public System.Windows.Forms.Button saveBtn; public System.Windows.Forms.Button cancelBtn; private System.Windows.Forms.CheckBox allowLibationFixupCbox; - private DirectoryOrCustomSelectControl booksSelectControl; - private DirectorySelectControl inProgressSelectControl; private System.Windows.Forms.RadioButton convertLossyRb; private System.Windows.Forms.RadioButton convertLosslessRb; private System.Windows.Forms.Button logsBtn; @@ -1568,5 +1610,10 @@ private System.Windows.Forms.CheckBox useWidevineCbox; private System.Windows.Forms.CheckBox requestSpatialCbox; private System.Windows.Forms.CheckBox request_xHE_AAC_Cbox; + private DirectoryOrCustomSelectControl inProgressSelectControl; + private DirectoryOrCustomSelectControl booksSelectControl; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.ComboBox themeCb; + private System.Windows.Forms.Label themeLbl; } } \ No newline at end of file diff --git a/Source/LibationWinForms/Dialogs/SettingsDialog.Important.cs b/Source/LibationWinForms/Dialogs/SettingsDialog.Important.cs index d0295e9c..22bb44fb 100644 --- a/Source/LibationWinForms/Dialogs/SettingsDialog.Important.cs +++ b/Source/LibationWinForms/Dialogs/SettingsDialog.Important.cs @@ -1,4 +1,6 @@ using Dinah.Core; +using DocumentFormat.OpenXml.Drawing; +using DocumentFormat.OpenXml.Office2013.Theme; using FileManager; using LibationFileManager; using LibationUiBase; @@ -19,6 +21,8 @@ namespace LibationWinForms.Dialogs else Go.To.Folder(Configuration.Instance.LibationFiles.Location.ShortPathName); } + private Configuration.Theme themeVariant; + private Configuration.Theme initialThemeVariant; private void Load_Important(Configuration config) { @@ -44,6 +48,10 @@ namespace LibationWinForms.Dialogs creationTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.CreationTime) ?? dateTimeSources[0]; lastWriteTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.LastWriteTime) ?? dateTimeSources[0]; + themeVariant = initialThemeVariant = config.ThemeVariant; + var themes = Enum.GetValues().Select(v => new EnumDisplay(v)).ToArray(); + themeCb.Items.AddRange(themes); + themeCb.SelectedItem = themes.SingleOrDefault(v => v.Value == themeVariant) ?? themes[0]; booksSelectControl.SetSearchTitle("books location"); booksSelectControl.SetDirectoryItems( @@ -110,6 +118,7 @@ namespace LibationWinForms.Dialogs config.CreationTime = (creationTimeCb.SelectedItem as EnumDisplay)?.Value ?? Configuration.DateTimeSource.File; config.LastWriteTime = (lastWriteTimeCb.SelectedItem as EnumDisplay)?.Value ?? Configuration.DateTimeSource.File; + config.ThemeVariant = (themeCb.SelectedItem as EnumDisplay)?.Value ?? Configuration.Theme.System; return true; } @@ -123,5 +132,15 @@ namespace LibationWinForms.Dialogs config.GridFontScaleFactor = linearRangeToScaleFactor(gridFontScaleFactorTbar.Value); config.GridScaleFactor = linearRangeToScaleFactor(gridScaleFactorTbar.Value); } + + private void themeCb_SelectedIndexChanged(object? sender, EventArgs e) + { + var selected = themeCb.SelectedItem as EnumDisplay; + if (selected != null) + { + themeVariant = selected.Value; + themeLbl.Visible = themeVariant != initialThemeVariant; + } + } } } diff --git a/Source/LibationWinForms/Form1.ScanNotification.cs b/Source/LibationWinForms/Form1.ScanNotification.cs index e0e8226c..e7c82255 100644 --- a/Source/LibationWinForms/Form1.ScanNotification.cs +++ b/Source/LibationWinForms/Form1.ScanNotification.cs @@ -21,6 +21,7 @@ namespace LibationWinForms scanLibraryOfAllAccountsToolStripMenuItem.Enabled = false; scanLibraryOfSomeAccountsToolStripMenuItem.Enabled = false; + this.scanningToolStripMenuItem.Image = System.Windows.Forms.Application.IsDarkModeEnabled ? Properties.Resources.import_16x16_dark : Properties.Resources.import_16x16; this.scanningToolStripMenuItem.Visible = true; this.scanningToolStripMenuItem.Text = (accountsLength == 1) diff --git a/Source/LibationWinForms/Form1._NonUI.cs b/Source/LibationWinForms/Form1._NonUI.cs index 314758eb..783a18ce 100644 --- a/Source/LibationWinForms/Form1._NonUI.cs +++ b/Source/LibationWinForms/Form1._NonUI.cs @@ -22,7 +22,7 @@ namespace LibationWinForms PictureStorage.SetDefaultImage(PictureSize.Native, Properties.Resources.default_cover_500x500.ToBytes(format)); BaseUtil.SetLoadImageDelegate(WinFormsUtil.TryLoadImageOrDefault); - BaseUtil.SetLoadResourceImageDelegate(Properties.Resources.ResourceManager.GetObject); + BaseUtil.SetLoadResourceImageDelegate(LoadResourceImage); // wire-up event to automatically download after scan. // winforms only. this should NOT be allowed in cli @@ -36,6 +36,13 @@ namespace LibationWinForms }; } + private static object LoadResourceImage(string resourceName) + { + if (Application.IsDarkModeEnabled) + resourceName += "_dark"; + return Properties.Resources.ResourceManager.GetObject(resourceName); + } + private void AudibleApiStorage_LoadError(object sender, AccountSettingsLoadErrorEventArgs e) { try diff --git a/Source/LibationWinForms/GridView/EditTagsDataGridViewImageButtonColumn.cs b/Source/LibationWinForms/GridView/EditTagsDataGridViewImageButtonColumn.cs index 5387c08e..422de6de 100644 --- a/Source/LibationWinForms/GridView/EditTagsDataGridViewImageButtonColumn.cs +++ b/Source/LibationWinForms/GridView/EditTagsDataGridViewImageButtonColumn.cs @@ -23,7 +23,7 @@ namespace LibationWinForms.GridView { public EditTagsDataGridViewImageButtonCell() : base("Edit Tags button") { } - private static Image ButtonImage { get; } = Properties.Resources.edit_25x25; + private static Image ButtonImage => Application.IsDarkModeEnabled ? Properties.Resources.edit_25x25_dark : Properties.Resources.edit_25x25; protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { diff --git a/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs b/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs index 13d3abd1..05b12a75 100644 --- a/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs +++ b/Source/LibationWinForms/GridView/LiberateDataGridViewImageButtonColumn.cs @@ -23,6 +23,8 @@ namespace LibationWinForms.GridView private static readonly Brush DISABLED_GRAY = new SolidBrush(Color.FromArgb(0x60, Color.LightGray)); private static readonly Color HiddenForeColor = Color.LightGray; private static readonly Color SERIES_BG_COLOR = Color.FromArgb(230, 255, 230); + private static readonly Color SERIES_BG_COLOR_DARK = Color.FromArgb(76, 82, 93); + private static Color SeriesBgColor => Application.IsDarkModeEnabled ? SERIES_BG_COLOR_DARK:SERIES_BG_COLOR; protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { @@ -32,7 +34,7 @@ namespace LibationWinForms.GridView //Don't paint the button graphic paintParts ^= DataGridViewPaintParts.ContentBackground | DataGridViewPaintParts.ContentForeground | DataGridViewPaintParts.SelectionBackground; - row.DefaultCellStyle.BackColor = status.IsEpisode ? SERIES_BG_COLOR : grid.DefaultCellStyle.BackColor; + row.DefaultCellStyle.BackColor = status.IsEpisode ? SeriesBgColor : grid.DefaultCellStyle.BackColor; row.DefaultCellStyle.ForeColor = status.Opacity == 1 ? grid.DefaultCellStyle.ForeColor : HiddenForeColor; base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, null, null, null, cellStyle, advancedBorderStyle, paintParts); diff --git a/Source/LibationWinForms/GridView/ProductsGrid.cs b/Source/LibationWinForms/GridView/ProductsGrid.cs index 2f8f1941..0d754e2a 100644 --- a/Source/LibationWinForms/GridView/ProductsGrid.cs +++ b/Source/LibationWinForms/GridView/ProductsGrid.cs @@ -53,6 +53,7 @@ namespace LibationWinForms.GridView setGridScale(Configuration.Instance.GridScaleFactor); Configuration.Instance.PropertyChanged += Configuration_ScaleChanged; Configuration.Instance.PropertyChanged += Configuration_FontScaleChanged; + gridEntryDataGridView.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; gridEntryDataGridView.Disposed += (_, _) => { diff --git a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.Designer.cs b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.Designer.cs index 3f1e9fa2..c198cf1b 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.Designer.cs +++ b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.Designer.cs @@ -29,184 +29,177 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProcessBookControl)); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.remainingTimeLbl = new System.Windows.Forms.Label(); - this.etaLbl = new System.Windows.Forms.Label(); - this.cancelBtn = new System.Windows.Forms.Button(); - this.statusLbl = new System.Windows.Forms.Label(); - this.bookInfoLbl = new System.Windows.Forms.Label(); - this.moveUpBtn = new System.Windows.Forms.Button(); - this.moveDownBtn = new System.Windows.Forms.Button(); - this.moveFirstBtn = new System.Windows.Forms.Button(); - this.moveLastBtn = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.SuspendLayout(); + pictureBox1 = new System.Windows.Forms.PictureBox(); + progressBar1 = new System.Windows.Forms.ProgressBar(); + remainingTimeLbl = new System.Windows.Forms.Label(); + etaLbl = new System.Windows.Forms.Label(); + cancelBtn = new System.Windows.Forms.Button(); + statusLbl = new System.Windows.Forms.Label(); + bookInfoLbl = new System.Windows.Forms.Label(); + moveUpBtn = new System.Windows.Forms.Button(); + moveDownBtn = new System.Windows.Forms.Button(); + moveFirstBtn = new System.Windows.Forms.Button(); + moveLastBtn = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + SuspendLayout(); // // pictureBox1 // - this.pictureBox1.Location = new System.Drawing.Point(2, 2); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(80, 80); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; + pictureBox1.Location = new System.Drawing.Point(2, 2); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new System.Drawing.Size(80, 80); + pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; // // progressBar1 // - this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.progressBar1.Location = new System.Drawing.Point(88, 65); - this.progressBar1.MarqueeAnimationSpeed = 0; - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(212, 17); - this.progressBar1.TabIndex = 2; + progressBar1.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + progressBar1.Location = new System.Drawing.Point(88, 65); + progressBar1.MarqueeAnimationSpeed = 0; + progressBar1.Name = "progressBar1"; + progressBar1.Size = new System.Drawing.Size(212, 17); + progressBar1.TabIndex = 2; // // remainingTimeLbl // - this.remainingTimeLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.remainingTimeLbl.AutoSize = true; - this.remainingTimeLbl.Location = new System.Drawing.Point(338, 65); - this.remainingTimeLbl.Name = "remainingTimeLbl"; - this.remainingTimeLbl.Size = new System.Drawing.Size(30, 15); - this.remainingTimeLbl.TabIndex = 3; - this.remainingTimeLbl.Text = "--:--"; - this.remainingTimeLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; + remainingTimeLbl.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + remainingTimeLbl.AutoSize = true; + remainingTimeLbl.Location = new System.Drawing.Point(338, 65); + remainingTimeLbl.Name = "remainingTimeLbl"; + remainingTimeLbl.Size = new System.Drawing.Size(30, 15); + remainingTimeLbl.TabIndex = 3; + remainingTimeLbl.Text = "--:--"; + remainingTimeLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; // // etaLbl // - this.etaLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.etaLbl.AutoSize = true; - this.etaLbl.Font = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.etaLbl.Location = new System.Drawing.Point(304, 66); - this.etaLbl.Name = "etaLbl"; - this.etaLbl.Size = new System.Drawing.Size(28, 13); - this.etaLbl.TabIndex = 3; - this.etaLbl.Text = "ETA:"; - this.etaLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; + etaLbl.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + etaLbl.AutoSize = true; + etaLbl.Font = new System.Drawing.Font("Segoe UI", 8F); + etaLbl.Location = new System.Drawing.Point(304, 66); + etaLbl.Name = "etaLbl"; + etaLbl.Size = new System.Drawing.Size(27, 13); + etaLbl.TabIndex = 3; + etaLbl.Text = "ETA:"; + etaLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; // // cancelBtn // - this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.cancelBtn.BackColor = System.Drawing.Color.Transparent; - this.cancelBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("cancelBtn.BackgroundImage"))); - this.cancelBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.cancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.cancelBtn.ForeColor = System.Drawing.SystemColors.Control; - this.cancelBtn.Location = new System.Drawing.Point(348, 6); - this.cancelBtn.Margin = new System.Windows.Forms.Padding(0); - this.cancelBtn.Name = "cancelBtn"; - this.cancelBtn.Size = new System.Drawing.Size(20, 20); - this.cancelBtn.TabIndex = 4; - this.cancelBtn.UseVisualStyleBackColor = false; + cancelBtn.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + cancelBtn.BackColor = System.Drawing.Color.Transparent; + cancelBtn.BackgroundImage = (System.Drawing.Image)resources.GetObject("cancelBtn.BackgroundImage"); + cancelBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + cancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + cancelBtn.ForeColor = System.Drawing.SystemColors.Control; + cancelBtn.Location = new System.Drawing.Point(348, 6); + cancelBtn.Margin = new System.Windows.Forms.Padding(0); + cancelBtn.Name = "cancelBtn"; + cancelBtn.Size = new System.Drawing.Size(20, 20); + cancelBtn.TabIndex = 4; + cancelBtn.UseVisualStyleBackColor = false; // // statusLbl // - this.statusLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.statusLbl.AutoSize = true; - this.statusLbl.Font = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.statusLbl.Location = new System.Drawing.Point(89, 66); - this.statusLbl.Name = "statusLbl"; - this.statusLbl.Size = new System.Drawing.Size(50, 13); - this.statusLbl.TabIndex = 3; - this.statusLbl.Text = "[STATUS]"; - this.statusLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; + statusLbl.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + statusLbl.AutoSize = true; + statusLbl.Font = new System.Drawing.Font("Segoe UI", 8F); + statusLbl.Location = new System.Drawing.Point(89, 66); + statusLbl.Name = "statusLbl"; + statusLbl.Size = new System.Drawing.Size(48, 13); + statusLbl.TabIndex = 3; + statusLbl.Text = "[STATUS]"; + statusLbl.TextAlign = System.Drawing.ContentAlignment.TopRight; // // bookInfoLbl // - this.bookInfoLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.bookInfoLbl.Font = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.bookInfoLbl.Location = new System.Drawing.Point(89, 6); - this.bookInfoLbl.Name = "bookInfoLbl"; - this.bookInfoLbl.Size = new System.Drawing.Size(219, 56); - this.bookInfoLbl.TabIndex = 1; - this.bookInfoLbl.Text = "[multi-\r\nline\r\nbook\r\n info]"; + bookInfoLbl.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + bookInfoLbl.Font = new System.Drawing.Font("Segoe UI", 8F); + bookInfoLbl.Location = new System.Drawing.Point(89, 6); + bookInfoLbl.Name = "bookInfoLbl"; + bookInfoLbl.Size = new System.Drawing.Size(219, 56); + bookInfoLbl.TabIndex = 1; + bookInfoLbl.Text = "[multi-\r\nline\r\nbook\r\n info]"; // // moveUpBtn // - this.moveUpBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.moveUpBtn.BackColor = System.Drawing.Color.Transparent; - this.moveUpBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveUpBtn.BackgroundImage"))); - this.moveUpBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.moveUpBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.moveUpBtn.ForeColor = System.Drawing.SystemColors.Control; - this.moveUpBtn.Location = new System.Drawing.Point(314, 24); - this.moveUpBtn.Name = "moveUpBtn"; - this.moveUpBtn.Size = new System.Drawing.Size(30, 17); - this.moveUpBtn.TabIndex = 5; - this.moveUpBtn.UseVisualStyleBackColor = false; + moveUpBtn.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + moveUpBtn.BackColor = System.Drawing.Color.Transparent; + moveUpBtn.BackgroundImage = Properties.Resources.move_up; + moveUpBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + moveUpBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + moveUpBtn.ForeColor = System.Drawing.SystemColors.Control; + moveUpBtn.Location = new System.Drawing.Point(314, 24); + moveUpBtn.Name = "moveUpBtn"; + moveUpBtn.Size = new System.Drawing.Size(30, 17); + moveUpBtn.TabIndex = 5; + moveUpBtn.UseVisualStyleBackColor = false; // // moveDownBtn // - this.moveDownBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.moveDownBtn.BackColor = System.Drawing.Color.Transparent; - this.moveDownBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveDownBtn.BackgroundImage"))); - this.moveDownBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.moveDownBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.moveDownBtn.ForeColor = System.Drawing.SystemColors.Control; - this.moveDownBtn.Location = new System.Drawing.Point(314, 40); - this.moveDownBtn.Name = "moveDownBtn"; - this.moveDownBtn.Size = new System.Drawing.Size(30, 17); - this.moveDownBtn.TabIndex = 5; - this.moveDownBtn.UseVisualStyleBackColor = false; + moveDownBtn.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + moveDownBtn.BackColor = System.Drawing.Color.Transparent; + moveDownBtn.BackgroundImage = Properties.Resources.move_down; + moveDownBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + moveDownBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + moveDownBtn.ForeColor = System.Drawing.SystemColors.Control; + moveDownBtn.Location = new System.Drawing.Point(314, 40); + moveDownBtn.Name = "moveDownBtn"; + moveDownBtn.Size = new System.Drawing.Size(30, 17); + moveDownBtn.TabIndex = 5; + moveDownBtn.UseVisualStyleBackColor = false; // // moveFirstBtn // - this.moveFirstBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.moveFirstBtn.BackColor = System.Drawing.Color.Transparent; - this.moveFirstBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveFirstBtn.BackgroundImage"))); - this.moveFirstBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.moveFirstBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.moveFirstBtn.ForeColor = System.Drawing.SystemColors.Control; - this.moveFirstBtn.Location = new System.Drawing.Point(314, 3); - this.moveFirstBtn.Name = "moveFirstBtn"; - this.moveFirstBtn.Size = new System.Drawing.Size(30, 17); - this.moveFirstBtn.TabIndex = 5; - this.moveFirstBtn.UseVisualStyleBackColor = false; + moveFirstBtn.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + moveFirstBtn.BackColor = System.Drawing.Color.Transparent; + moveFirstBtn.BackgroundImage = Properties.Resources.move_first; + moveFirstBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + moveFirstBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + moveFirstBtn.ForeColor = System.Drawing.SystemColors.Control; + moveFirstBtn.Location = new System.Drawing.Point(314, 3); + moveFirstBtn.Name = "moveFirstBtn"; + moveFirstBtn.Size = new System.Drawing.Size(30, 17); + moveFirstBtn.TabIndex = 5; + moveFirstBtn.UseVisualStyleBackColor = false; // // moveLastBtn // - this.moveLastBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.moveLastBtn.BackColor = System.Drawing.Color.Transparent; - this.moveLastBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("moveLastBtn.BackgroundImage"))); - this.moveLastBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.moveLastBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.moveLastBtn.ForeColor = System.Drawing.SystemColors.Control; - this.moveLastBtn.Location = new System.Drawing.Point(314, 63); - this.moveLastBtn.Name = "moveLastBtn"; - this.moveLastBtn.Size = new System.Drawing.Size(30, 17); - this.moveLastBtn.TabIndex = 5; - this.moveLastBtn.UseVisualStyleBackColor = false; + moveLastBtn.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + moveLastBtn.BackColor = System.Drawing.Color.Transparent; + moveLastBtn.BackgroundImage = Properties.Resources.move_last; + moveLastBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + moveLastBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + moveLastBtn.ForeColor = System.Drawing.SystemColors.Control; + moveLastBtn.Location = new System.Drawing.Point(314, 63); + moveLastBtn.Name = "moveLastBtn"; + moveLastBtn.Size = new System.Drawing.Size(30, 17); + moveLastBtn.TabIndex = 5; + moveLastBtn.UseVisualStyleBackColor = false; // // ProcessBookControl // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.SystemColors.ControlLight; - this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.Controls.Add(this.moveLastBtn); - this.Controls.Add(this.moveDownBtn); - this.Controls.Add(this.moveFirstBtn); - this.Controls.Add(this.moveUpBtn); - this.Controls.Add(this.cancelBtn); - this.Controls.Add(this.statusLbl); - this.Controls.Add(this.etaLbl); - this.Controls.Add(this.remainingTimeLbl); - this.Controls.Add(this.progressBar1); - this.Controls.Add(this.bookInfoLbl); - this.Controls.Add(this.pictureBox1); - this.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.Name = "ProcessBookControl"; - this.Size = new System.Drawing.Size(375, 86); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + BackColor = System.Drawing.SystemColors.ControlLight; + BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + Controls.Add(moveLastBtn); + Controls.Add(moveDownBtn); + Controls.Add(moveFirstBtn); + Controls.Add(moveUpBtn); + Controls.Add(cancelBtn); + Controls.Add(statusLbl); + Controls.Add(etaLbl); + Controls.Add(remainingTimeLbl); + Controls.Add(progressBar1); + Controls.Add(bookInfoLbl); + Controls.Add(pictureBox1); + Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); + Name = "ProcessBookControl"; + Size = new System.Drawing.Size(375, 86); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ResumeLayout(false); + PerformLayout(); } diff --git a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.cs b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.cs index 35718afa..83524efc 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.cs +++ b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.cs @@ -12,10 +12,10 @@ namespace LibationWinForms.ProcessQueue private readonly int ProgressBarDistanceFromEdge; private object? m_OldContext; - private static Color FailedColor { get; } = Color.LightCoral; - private static Color CancelledColor { get; } = Color.Khaki; + private static Color FailedColor => Application.IsDarkModeEnabled ? Color.FromArgb(0x50, 0x27, 0x27) : Color.LightCoral; + private static Color CancelledColor => Application.IsDarkModeEnabled ? Color.FromArgb(0x4e, 0x4b, 0x15) : Color.Khaki; private static Color QueuedColor { get; } = SystemColors.Control; - private static Color SuccessColor { get; } = Color.PaleGreen; + private static Color SuccessColor => Application.IsDarkModeEnabled ? Color.FromArgb(0x1c, 0x3e, 0x20) : Color.PaleGreen; public ProcessBookControl() { @@ -23,6 +23,10 @@ namespace LibationWinForms.ProcessQueue remainingTimeLbl.Visible = false; progressBar1.Visible = false; etaLbl.Visible = false; + moveDownBtn.BackgroundImage = Application.IsDarkModeEnabled ? Properties.Resources.move_down_dark : Properties.Resources.move_down; + moveUpBtn.BackgroundImage = Application.IsDarkModeEnabled ? Properties.Resources.move_up_dark : Properties.Resources.move_up; + moveFirstBtn.BackgroundImage = Application.IsDarkModeEnabled ? Properties.Resources.move_first_dark : Properties.Resources.move_first; + moveLastBtn.BackgroundImage = Application.IsDarkModeEnabled ? Properties.Resources.move_last_dark : Properties.Resources.move_last; CancelBtnDistanceFromEdge = Width - cancelBtn.Location.X; ProgressBarDistanceFromEdge = Width - progressBar1.Location.X - progressBar1.Width; diff --git a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.resx b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.resx index 83921ba7..218b7826 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessBookControl.resx +++ b/Source/LibationWinForms/ProcessQueue/ProcessBookControl.resx @@ -1,4 +1,64 @@ - + + + @@ -76,662 +136,638 @@ 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 - /x9W31o+WFcHNAAAAABJRU5ErkJggg== + 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 @@ -743,125 +779,15 @@ True - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAABNCAYAAADjJSv1AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAATRSURBVHhe7Zlfp6ZVHIaHISIi - Oo2I6ANEDDFERx3FMERERN8gIoaIoc8QERERnQ5DREQfICKio4iOYs/vmndmrNlz79nPs55nrWf9uS8u - xn0y27vf2/rd9pWzszNr7QXK0Fp7UobW2pMytNaelKG19qQMrbUnZWitPSlDa+1JGaI5jHfCZ07/NDWR - PVAhmuq8GP4Y8uH/Fr4amorIHqgQTVXeDv8O+eAf+l/4UWgqIXugQjRVeDb8MkyLcd7vQ14XUxjZAxWi - Kc5rIadUWoaL/CvklTEFkT1QIZqifBxyQqUlWOLt0AO+ELIHKkRTBE6lH8L0S79WD/hCyB6oEM3ucCJx - KqVf9lw94Asge6BCNLvBScRplH7B99IDfkdkD1SIZhc4hZYO8Vz/DN8KzUZkD1SIZjOcQDlDPNcvQg/4 - DcgeqBBNNpw8nD7pl7eWv4Ye8JnIHqgQTRacOpw86Ze2trxaH4ZmJbIHKkSzipJDPFcP+JXIHqgQzWJq - DPFcPeBXIHugQjSLqD3Ec/WAX4DsgQrRPJUjh3iuHvCXIHugQjQX0sIQz9UD/inIHqgQzRNwonCqpF+4 - Xv0ufCE0CbIHKkTzGJwmnCjpl6x3eQWvh+YBsgcqRPMITpIehniun4ce8IHsgQrR3D9BOEXSL9Oo/hJO - P+BlD1SIk8Pp0esQz3X6AS97oEKcFE4NTo70izOb0w542QMV4oRwYnBqpF+WWZ1ywMseqBAn44Pw3zD9 - ktjJBrzsgQpxEmYa4rlOM+BlD1SIEzDjEM+V15VXdmhkD1SIA+Mhni+v7fPhkMgeqBAHxUN8u7y6b4bD - IXugQhwQD/F9vRUONeBlD1SIA8FJ4CFexp/DYQa87IEKcRA4BTzEyzrMgJc9UCF2Dk8/J0D6i7Rl7X7A - yx6oEDvmlZCnP/3l2Tp2PeBlD1SInfJ+6CF+vF0OeNkDFWJn8LR/G6a/JHusvOK85t0ge6BC7Aie9D/C - 9Jdj25DXnFe9C2QPVIgdcDXkKf8/TH8ptj153Zsf8LIHKsTG8RDvT175pge87IEKsWE8xPuV177ZAS97 - oEJsEA/xcWxywMseqBAbw0N8PJsb8LIHKsRG8BAf32YGvOyBCrEBXg49xOewiQEve6BCPJj3Qg/xuXw4 - 4LkaDkH2QIV4EDy134TpB2fnkquB66E6sgcqxAO4Fv4eph+WnVOuB66IqsgeqBArwpP6Weghbs/LNVFt - wMseqBArwVP6U5h+KNamclVUGfCyByrECtwMPcTtEqsMeNkDFWJBngu/DtMPwNolFh3wsgcqxEK8EXqI - 2y0WG/CyByrEnfEQt3u7+4CXPVAh7oiHuC0l1wh/HtgF2QMV4k54iNvScpVwnWwe8LIHKsSNeIjb2nKl - bBrwsgcqxA14iNuj5FrhaslC9kCFmAFP3Kehh7g9Wq6X1QNe9kCFuBKetrth+kNae6SrB7zsgQpxBTfC - f8L0h7O2BVcNeNkDFeICGOJfhekPZG2LLhrwsgcqxEt4PfQQtz156YCXPVAhXgBP1Sehh7jtVQY8188T - yB6oEAUvhXfC9D+ztke5fvhzxGPIHqgQz/Fu6CFuR5IriD9LPBrwsgcqxAd4iNvR5c8T9we87IEKMfAQ - t7PIdXRT9kCF1lo8u3IPfFOKqVljg2IAAAAASUVORK5CYII= - - True - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAABNCAYAAADjJSv1AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAATWSURBVHhe7Zlfh+1lGIaHiIiI - 6DQiog8QERHRUacRERHRN4hNRET0GSIiIvoAERERnUZEdBTRUUzP1dLe7559zTtr1vr9/90XF3Uf7D17 - Zt3e5zYXl5eXMcZr9PDi4o3yr5L/iXHL/lI+bz1ADw88VX5Xtn9YjFvys/LRUnuAHt7jofJO+U/Z/sEx - rtk/y9fLu1gP0MMHeaHkKWr/khjX6Lcl19F9WA/QQ+ex8vOy/ctiXItcQe+XXEUPYD1AD/tkwMe1+d8Q - L6/FeoAe3gxP1Pdl+0XEuETvDvEe1gP08Dh4qj4oM+DjEuXKuW+I97AeoIe348Xy17L94mKcU3498cAQ - 72E9QA9vDwP+i7L9ImOcWq4Zfi2hQ7yH9QA9PJ0M+DiXDHF+HXES1gP08Dwy4OPU8usHrpiTsR6gh+eT - AR+nkGuFq+VsrAfo4XBkwMex5Eq51RDvYT1AD4clAz4OKVcJ18mth3gP6wF6OA5vlhnw8Ry5RrhKBsd6 - gB6Ox9NlBnw8xbOHeA/rAXo4Lg+XPJHtPz7G6xxsiPewHqCH08BT+VvZfjNibB10iPewHqCH08GT+WXZ - flNiHGWI97AeoIfTkwEf/3e0Id7DeoAezkMGfOTXAaMN8R7WA/RwPjLg9ynXA1fEbFgP0MP5yYDfj1wN - XA+zYj1AD5dBBvz25Vrgapgd6wF6uCzeKjPgtyXXweRDvIf1AD1cHs+UP5TtNzmuU66CWYZ4D+sBerhM - eIo/LNtvdlyPXAFcA4vEeoAeLpuXygz4dcnrzxWwWKwH6OHyebzMgF+HixniPawH6OF6yIBfrosb4j2s - B+jhusiAX56LHOI9rAfo4frIgF+Gix7iPawH6OF6yYCfz8UP8R7WA/Rw3WTATy+v9+KHeA/rAXq4Dd4u - /y7bH2QcVl5rXu3VYz1AD7cDT/6PZftDjcPIK81rvQmsB+jhtuDp/6hsf7jxdHmVeZ03hfUAPdwmL5cZ - 8OfJa7zaId7DeoAebpcM+NPlFV71EO9hPUAPt08G/PHy6vL6bhrrAXq4DzLgb/ar8oly81gP0MP9kAHv - bnKI97AeoIf7IwP+npsd4j2sB+jhPuGU4KRoPyx7c9NDvIf1AD3cN++UexvwuxjiPawH6GHgxPipbD9E - W3U3Q7yH9QA9DMCp8XHZfpi2JK8kr2UorAfoYWh5pdzagOd13N0Q72E9QA/DVbY04HkVdznEe1gP0MNw - HWse8L+XvIZBsB6gh6HHGgf81+Xuh3gP6wF6GG5iLQOe1+7dMtyA9QA9DMfCycLp0n4olyKv3LNlOALr - AXoYbgOnCydM++Gc20/KR8pwJNYD9DCcAqfM3AM+Q/xErAfoYTgVTpq5BnyG+BlYD9DDcA6cNlMO+Azx - AbAeoIdhCKYY8BniA2E9QA/DUIw54DPEB8R6gB6GoRlywP9RZogPjPUAPQxjMMSA/6bMEB8B6wF6GMaC - k4jTqP3QHyOvz3tlGAnrAXoYxoYTiVOpLcF1/lw+V4YRsR6gh2EKOJU4mdoyXPXTMkN8AqwH6GGYEk6n - qwOe1+XVMkyE9QA9DFPDCcUpxTefV+XJMkyI9QA9DHPAKfXa4T/D1FgPUMMY40ENY4wHNYwxHtQwxnhQ - wxjjQQ1jjAc1jDEe1DDGiJcX/wKcO4zm90rrbQAAAABJRU5ErkJggg== - - True - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAABZCAYAAAB7Ymt4AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAT8SURBVHhe7dlvp+ZVFMbxIWKI - iJ4OEdELiIiIIeZpRERERO8ghoiI6DUMERHRC4iIiOgFRERPI3oUp3WNWWPfa52z53fv+/dv//b34kNn - KR3n3Je9lnPr6urqWpZ7Rv8AjOTeSQ/KL0r6F4v/CBgFBQEqKAhQQUGACgoCVFAQoIKCABUUBKigIEAF - BQEqKAhQQUGACgoCVFAQoIKCABUUBKigIEAFBQEqKAhQQUGACgoCVFAQoIKCABWTC0KWz23zpSl/QdF3 - 5nlDVspJD8ovSmTxvGx+M2UZbvKXedOQFXLSg/KLElk0H5l/TVmCKb4wTxuyUFIP4sCRRaJV6XtTfujP - pVfnJUMWSOpBHDgye7QiaVUqP+yt9Pp8aMjMST2IA0dmi1YirUblB3wuHPAzJ/UgDhyZJVqFph7irf40 - dw2ZIakHceDIxdEK1HKIt/rccMBfmNSDOHCkOVp5tPqUH961/Go44C9I6kEcONIUrTpaecoP7dr0an1g - SENSD+LAkbOy5CHeigO+IakHceDI5KxxiLfigD8zqQdx4MikrH2It+KAn5jUgzhwpJotD/FWHPATknoQ - B47cmD0c4q044J+Q1IM4cCRFK4pWlfID16tvzXOGhKQexIEjJ9FqohWl/JD1Tq/gG4YUST2IA0ceRytJ - D4d4q88MB/yjpB7EgSMPVxCtIuWH6ah+MRzwltSDOHCDR6tHr4d4Kw54S+pBHLhBo1VDK0f5wRnN0Ad8 - 6kEcuAGjFUOrRvlhGdWwB3zqQRy4wfK++ceUHxIMeMCnHsSBGyQjHeKthjrgUw/iwA2QEQ/xVnpd9coe - PqkHceAOHA7xdnptnzWHTepBHLiDhkP8cnp1XzeHTOpBHLgDhkN8Xp+awx3wqQdx4A4UrQQc4sv42Rzq - gE89iAN3kGgV4BBf1qEO+NSDOHCdR0+/VoDyF4llHeKATz2IA9dxXjR6+stfHtbR/QGfehAHrtO8ZzjE - t9ftAZ96EAeus+hp/8aUvyRsS6+4XvOuknoQB66j6En/w5S/HOyDXnO96t0k9SAOXAd5yugp/8+UvxTs - j173Lg741IM4cDsPh3h/9Mrv/oBPPYgDt+NwiPdLr/2uD/jUgzhwOwyH+HHs9oBPPYgDt7NwiB/PLg/4 - 1IM4cDsJh/jx7eqATz2IA7eDvGA4xMewmwM+9SAO3MZ513CIj8UPeG0NmyX1IA7cRtFT+7Upf3AYi7YG - bQ+bJPUgDtwGec38bsofFsak7UFbxOpJPYgDt2L0pH5iOMQRaZtY9YBPPYgDt1L0lP5kyh8KUNJWsdoB - n3oQB26FvGM4xDHFagd86kEcuAXzjPnKlD8AYIrFD/jUgzhwC+VVwyGOSyx6wKcexIGbORzimNsiB3zq - QRy4GcMhjqVoG9GfB2ZL6kEcuJnCIY6laSvRdjLLAZ96EAfuwnCIY23aUi4+4FMP4sBdEA5xbEXbiraW - 5qQexIFriJ64+4ZDHFvT9tJ0wKcexIE7M3rafjTlNwlsqemATz2IA3dG3jZ/m/KbA/bg7AM+9SAO3ITo - EH9gym8I2KPJB3zqQRy4J+QVwyGOnkw64FMP4sDdED1VHxsOcfRKB7y2n2uTehAH7prcMT+Y8n8G9Ejb - j/4ckZJ6EAcu5C3DIY4j0RakP0ucHPCpB3HgHoVDHEenP088PuBTD+LAWTjEMQptRw8P+NMeXN36HzdL - jfkqyMbMAAAAAElFTkSuQmCC - - True - - - iVBORw0KGgoAAAANSUhEUgAAAMgAAABZCAYAAAB7Ymt4AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAUASURBVHhe7Zntpq1lFIYXERER - +wAiIjqAiIiIfQYRERHRGURERMQ+hoiIiA4gIiKivxER/YroV6zGncbezxxjrrHmmvP9eJ73vS6uH+uW - vVdrz9szbuvq+vr6wP95w/zLVIC4ZX8xX4w9cHPwiGfM78z2D0Pckp+ZT5qpB24ODnnM/MD8x2z/YMSR - /dN83XxI7IGbg+O8ZOopav8SxBH91tR1dEDsgZuDm3nK/Nxs/zLEUdQV9L6pqygRe+Dm4HYY8Dia/w1x - 80ZiD9wcnIaeqO/N9ptA7NGHQ7wi9sDNwenoqfrQZMBjj+rKORjiFbEHbg7uzsvmr2b7zSGuqX49kYZ4 - ReyBm4Pz0ID/wmy/ScSl1TWjX0scHeIVsQduDi6DAY9rqSGuX0ecReyBm4PLYcDj0urXD7pizib2wM3B - NDDgcQl1rehquZjYAzcH08KAx7nUlXKnIV4Re+DmYHoY8Dilukp0ndx5iFfEHrg5mI83TQY8XqKuEV0l - kxN74OZgXp41GfB4jhcP8YrYAzcH8/O4qSey/Z9HvMnJhnhF7IGbg+XQU/mb2f4wEFsnHeIVsQduDpZF - T+aXZvtDQZxliFfEHrg5WAcGPLqzDfGK2AM3B+vBgEf9OmC2IV4Re+DmYF0Y8PtU14OuiNWIPXBz0AcM - +P2oq0HXw6rEHrg56AcG/PbVtaCrYXViD9wc9MdbJgN+W+o6WHyIV8QeuDnok+fMH8z2h4xjqqtglSFe - EXvg5qBf9BR/ZLY/bBxHXQG6Brok9sDNQf+8YjLgx1Kvv66Abok9cHMwBk+bDPgx7GaIV8QeuDkYCwZ8 - v3Y3xCtiD9wcjAcDvj+7HOIVsQduDsaEAd+HXQ/xitgDNwdjw4Bfz+6HeEXsgZuD8WHAL69e7+6HeEXs - gZuD7fC2+bfZ/kPitOq11qs9PLEHbg62hZ78H832HxWnUa+0XutNEHvg5mB76On/2Gz/cfF89Srrdd4U - sQduDrbLqyYD/jL1Gg87xCtiD9wcbBsG/PnqFR56iFfEHrg52AcM+NPVq6vXd9PEHrg52A8M+Nv9yrxn - bp7YAzcH+4IBf9xNDvGK2AM3B/uEAf/IzQ7xitgDNwf7RaeETor2w7I3Nz3EK2IP3BzAO+beBvwuhnhF - 7IGbAxA6MX4y2w/RVt3NEK+IPXBzAI5OjU/M9sO0JfVK6rUEI/bAzQFEXjO3NuD1Ou5uiFfEHrg5gGNs - acDrVdzlEK+IPXBzABUjD/jfTb2GcITYAzcHcBsjDvivzd0P8YrYAzcHcAqjDHi9du+acAuxB24O4C7o - ZNHp0n4oe1Gv3PMmnEDsgZsDuCs6XXTCtB/Otf3UfMKEE4k9cHMA56JTZu0BzxA/k9gDNwdwCTpp1hrw - DPELiD1wcwCXotNmyQHPEJ+A2AM3BzAVSwx4hvhExB64OYApmXPAM8QnJPbAzQHMwZQD/g+TIT4xsQdu - DmAuphjw35gM8RmIPXBzAHOik0inUfuhP0W9Pu+ZMBOxB+7hF7AUOpF0KrUluMmfzRdMmJG2B62HX8CS - 6FTSydSWIfrAZIgvQNuD1sMvrq7u679F3Jn32x60Hn5BQXCfUhDEQgqCWEhBEAspCGIhBUEspCCIhRQE - sZCCIBZSEMRCCoJYSEEQCykIYiEFQSykIIiFFASxkIIgFlIQxEIKglhIQRALKQhiIQVBLKQgiIU3FOT6 - 6l8KOJAbKVKmPQAAAABJRU5ErkJggg== - - True diff --git a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs index 15bcc5d6..5a14901e 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs +++ b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs @@ -31,7 +31,11 @@ internal partial class ProcessQueueControl : UserControl virtualFlowControl2.ButtonClicked += VirtualFlowControl2_ButtonClicked; virtualFlowControl2.DataContext = ViewModel.Queue; + queueNumberLbl.Image = Application.IsDarkModeEnabled ? Properties.Resources.queue_queued_dark : Properties.Resources.queue_queued; + errorNumberLbl.Image = Application.IsDarkModeEnabled ? Properties.Resources.queue_error_dark : Properties.Resources.queue_error; + completedNumberLbl.Image = Application.IsDarkModeEnabled ? Properties.Resources.queue_completed_dark : Properties.Resources.queue_completed; + logDGV.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; ViewModel.PropertyChanged += ProcessQueue_PropertyChanged; ViewModel.LogEntries.CollectionChanged += LogEntries_CollectionChanged; ProcessQueue_PropertyChanged(this, new PropertyChangedEventArgs(null)); diff --git a/Source/LibationWinForms/Program.cs b/Source/LibationWinForms/Program.cs index 8862a63e..7cd67d18 100644 --- a/Source/LibationWinForms/Program.cs +++ b/Source/LibationWinForms/Program.cs @@ -46,10 +46,11 @@ namespace LibationWinForms LibationUiBase.Forms.MessageBoxBase.ShowAsyncImpl = ShowMessageBox; // do this as soon as possible (post-config) - RunSetupIfNeededAsync(config).Wait(); + RunSetupIfNeededAsync(config); // most migrations go in here LibationScaffolding.RunPostConfigMigrations(config); + SetThemeColor(config); // migrations which require Forms or are long-running RunWindowsOnlyMigrations(config); @@ -117,7 +118,19 @@ namespace LibationWinForms } #endregion; - private static async Task RunSetupIfNeededAsync(Configuration config) + private static void SetThemeColor(Configuration config) + { + var theme = config.ThemeVariant switch + { + Configuration.Theme.Light => SystemColorMode.Classic, + Configuration.Theme.Dark => SystemColorMode.Dark, + _ => SystemColorMode.System, + }; + + Application.SetColorMode(theme); + } + + private static void RunSetupIfNeededAsync(Configuration config) { var setup = new LibationSetup(config.LibationFiles) { @@ -125,7 +138,7 @@ namespace LibationWinForms SelectFolderPrompt = SelectInstallLocation }; - if (!await setup.RunSetupIfNeededAsync()) + if (!setup.RunSetupIfNeededAsync().GetAwaiter().GetResult()) { MessageBox.Show("Initial set up cancelled.", "Cancelled", MessageBoxButtons.OK, MessageBoxIcon.Warning); Application.Exit(); diff --git a/Source/LibationWinForms/Properties/Resources.Designer.cs b/Source/LibationWinForms/Properties/Resources.Designer.cs index 197f945a..d0d9cb7f 100644 --- a/Source/LibationWinForms/Properties/Resources.Designer.cs +++ b/Source/LibationWinForms/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace LibationWinForms.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -70,6 +70,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cheers_dark { + get { + object obj = ResourceManager.GetObject("cheers_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -110,6 +120,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dolby_Atmos_Vertical_80_dark { + get { + object obj = ResourceManager.GetObject("Dolby_Atmos_Vertical_80_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -123,29 +143,9 @@ namespace LibationWinForms.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap edit_64x64 { + internal static System.Drawing.Bitmap edit_25x25_dark { get { - object obj = ResourceManager.GetObject("edit_64x64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap edit_tags_25x25 { - get { - object obj = ResourceManager.GetObject("edit_tags_25x25", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap edit_tags_50x50 { - get { - object obj = ResourceManager.GetObject("edit_tags_50x50", resourceCulture); + object obj = ResourceManager.GetObject("edit_25x25_dark", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -160,6 +160,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap error_dark { + get { + object obj = ResourceManager.GetObject("error_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -170,6 +180,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap import_16x16_dark { + get { + object obj = ResourceManager.GetObject("import_16x16_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -180,6 +200,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_green_dark { + get { + object obj = ResourceManager.GetObject("liberate_green_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -190,6 +220,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_green_pdf_no_dark { + get { + object obj = ResourceManager.GetObject("liberate_green_pdf_no_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -200,6 +240,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_green_pdf_yes_dark { + get { + object obj = ResourceManager.GetObject("liberate_green_pdf_yes_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -210,6 +260,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_red_dark { + get { + object obj = ResourceManager.GetObject("liberate_red_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -220,6 +280,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_red_pdf_no_dark { + get { + object obj = ResourceManager.GetObject("liberate_red_pdf_no_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -230,6 +300,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_red_pdf_yes_dark { + get { + object obj = ResourceManager.GetObject("liberate_red_pdf_yes_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -240,6 +320,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_yellow_dark { + get { + object obj = ResourceManager.GetObject("liberate_yellow_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -250,6 +340,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_yellow_pdf_no_dark { + get { + object obj = ResourceManager.GetObject("liberate_yellow_pdf_no_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -260,6 +360,16 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap liberate_yellow_pdf_yes_dark { + get { + object obj = ResourceManager.GetObject("liberate_yellow_pdf_yes_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -270,6 +380,96 @@ namespace LibationWinForms.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap minus_dark { + get { + object obj = ResourceManager.GetObject("minus_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_down { + get { + object obj = ResourceManager.GetObject("move_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_down_dark { + get { + object obj = ResourceManager.GetObject("move_down_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_first { + get { + object obj = ResourceManager.GetObject("move_first", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_first_dark { + get { + object obj = ResourceManager.GetObject("move_first_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_last { + get { + object obj = ResourceManager.GetObject("move_last", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_last_dark { + get { + object obj = ResourceManager.GetObject("move_last_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_up { + get { + object obj = ResourceManager.GetObject("move_up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap move_up_dark { + get { + object obj = ResourceManager.GetObject("move_up_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -279,5 +479,75 @@ namespace LibationWinForms.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plus_dark { + get { + object obj = ResourceManager.GetObject("plus_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_completed { + get { + object obj = ResourceManager.GetObject("queue_completed", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_completed_dark { + get { + object obj = ResourceManager.GetObject("queue_completed_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_error { + get { + object obj = ResourceManager.GetObject("queue_error", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_error_dark { + get { + object obj = ResourceManager.GetObject("queue_error_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_queued { + get { + object obj = ResourceManager.GetObject("queue_queued", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap queue_queued_dark { + get { + object obj = ResourceManager.GetObject("queue_queued_dark", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Source/LibationWinForms/Properties/Resources.resx b/Source/LibationWinForms/Properties/Resources.resx index 1c7458d0..98cf3e0e 100644 --- a/Source/LibationWinForms/Properties/Resources.resx +++ b/Source/LibationWinForms/Properties/Resources.resx @@ -130,8 +130,8 @@ ..\Resources\liberate_yellow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\edit_64x64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\edit_25x25.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\img-coverart-prod-unavailable_300x300.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -142,15 +142,9 @@ ..\Resources\liberate_red.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\edit-tags-50x50.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\liberate_green_pdf_yes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\edit_25x25.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -178,10 +172,97 @@ ..\Resources\liberate_yellow_pdf_no.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\edit-tags-25x25.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\Dolby_Atmos_Vertical_80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\liberate_green_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_green_pdf_no_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_green_pdf_yes_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_red_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_red_pdf_no_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_red_pdf_yes_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\plus_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\minus_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_yellow_pdf_yes_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_yellow_pdf_no_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\liberate_yellow_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Dolby_Atmos_Vertical_80_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cheers_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\edit_25x25_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\error_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\import_16x16_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_first.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_first_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_up_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_down_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_last.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\move_last_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_completed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_completed_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_error_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_queued.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\queue_queued_dark.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Source/LibationWinForms/Resources/Dolby_Atmos_Vertical_80_dark.png b/Source/LibationWinForms/Resources/Dolby_Atmos_Vertical_80_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..de176eee0952b8449fd6136a772a59ec2d5c50f4 GIT binary patch literal 1645 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 M07*qoM6N<$g3hFa#{d8T diff --git a/Source/LibationWinForms/Resources/edit-tags-50x50.png b/Source/LibationWinForms/Resources/edit-tags-50x50.png deleted file mode 100644 index 7b0043acf8fa41d944487958350668b267305edb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)?J-gVN#l1WB-(p`E&ekd-nGv=D=Lt;9h$MttH+%>k4=}AG*pGD&%H8gF zh~Y*73jq5aNg=S@=bE{UkBDv)Bh|+D81C?K$D?^f4#Mw=;fL86t7e+3X_>Q?iT*^A z7pqb=vjn7>n?#f{GW?NTHPZxQnUh6GA*pI+2}m=yh>$}1HM3iqH34bnj3R0vb74e? zTFBHGF+u~G3R8v9LZUI%2n!?%qe56A-WWB)1LB1-A-o_~j2Ynx(PCT>-jG_18zKTC z#keA(AY&MJL?k4K2|+|ddJJEeF99_Fe|Al4?mkEIs_Xuv5hwfw8y2lIKDe7m00000 LNkvXXu0mjf;sEFZ diff --git a/Source/LibationWinForms/Resources/edit_25x25.png b/Source/LibationWinForms/Resources/edit_25x25.png index 12e70d0f1edeab1507607513178535e4a578dda6..2f287651b54783d912af73371bc4cc0bde6a60d5 100644 GIT binary patch delta 563 zcmV-30?hsE1004R=004l4008;_ z004mL004C`008P>0026e000+nl3&F}0005fNklJmm1VKSWP_VKPE!IlGRYcZqn}}A5f|Z~sHh;d`TkV7y5N&MSMhxz< zHa9ZF+2kgh2SR2z_n!Yf=R7l0s!vs|MM;+ayKYo#yKxH#u#8JdmfkBHt>$qsci(JO zYo(Du8r9k~uHp%HU^*9`E3LI%A>j)&uz>5BK|RD5*HtDaMg@Rv*oSM_kF8klRI)cR zX$gz?h8kYxPJf)&0%ma;cT4rD>V2FV;Pl7v8LzRk$GWdLlw@hEjN=0UF5o@hu2Ml> zvq_e=pp0MG5CT7gzl$`3NB9r{IG1GUeCH-_;T0T4t6)8LaPnq&x+i-jh=F{^ryTG~Fv5>e z;r4zBVjxe$uiJ4QE%i$W3)MDuH~*_J|D2( zrI_}Yu`IFA##k+d&qg8SHqMV=z7LWtO^X752LL_yXmtd?){+1K002ovPDHLkV1lh2 B`04-v delta 723 zcmV;^0xbQ^1nUKmB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pHfJsC_R7gwRmCI`rQ543{xtXCLKDra}F=?VA5d=YTAqay1KpKM3 zWf8Q3iXw)x%nQ8$7vq~O}E#)v55Mi3-zGXbeqUD!&o&41(`zmrLD5;A$TUHOGC z_tl)=J@?$1GHsyJBO?x3xrFWn{Fy~2N)_MVP)N%2#+djKx=uJlA4u$IqA^&P_N7v0 zcaCxR&t|{aXCWh)u-SriF$g(l-k--g& z6%cpa^Kc$16=!{)6w=)N3j7U@X4BMfOrKA&jDmtTfM97zQ7 ziUa3l=}ReSj9Y{nB#?m?c@mDxKsPxG!0T`r$~4-pY5+927P=eYbUQ%R7euT*iUzkO z_K3dYII;k|XpCFb6Ov9Qheh}of+%D)oNW;<1m&x?_QvzPaHdT?A-Km|m}#1Yo&$6h zQ&G@QIDZ$^f`V(zm=W0&PPeMB;xbp`U|)M@P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkOAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-%t=H+RCwB~*1c;KK^(^M&&i5G6d_<2*){9y{~(A6`UhADf{KWsAQl#)pcdK~ zMMS$a7qn6otOP}|@!j6athqz9u`!K!m=K#eS=PPW+~povc4z11JM;TJGrNu1)|{0n zPqTl|MZ2{fH?RwfIG3l{Ok%W}#_m$NS+rY?kwA)eYZ9072%9ijs=mEyM1W^FiZi%^ zqSRz@rI0RQODJ!}MO?*~@GfbD#P5t8w1Ihi!)823UeoR~rf?p28ndmryErny><{20 zUWS?X(pT)s)2v8vZ~(w*yv6GtD=2F!PqP9N{KA@0@iX|lPM7ci?;-#v^E8|87RnZ0 z!rqEAy6RvY@B4)4KR^}IUCDe+$8C60a#1v(4wCe6)Zqxg@jT6%brmuD_ zF3h|ccK5_`1H?eS<3kB}AsFFDSmDNg1H?cchpXzit`_=I8?}&|I5mR&-pkXh_9yP|05s=j UC@=9yOaK4?07*qoM6N<$g4-_z0{{R3 literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/error.png b/Source/LibationWinForms/Resources/error.png index 700ce41ee911f05d1968ea0c3ffdda1d245b688f..2b08236cd29f37365d4313d18afffe13903f50b9 100644 GIT binary patch delta 1535 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 N002ovPDHLkV1kByJ+}Y= delta 1275 zcmVD?VMhf!zR_fL{bkY|`*AFa%r# z!qO4)TM0DE_^7hz!w0+ud;`z{T(fw}B=EiDzZNK#QLd!@`hi=4M}bd)1&jW4pan^~ z)u-tNZg){eA%Ea48PR6_z69{0#UH+qw{#oDz+qs?q~9ZITAnlGPvAY^Y7XE9;0W-G zS+3QzL6RBY0{!G3Vc>H~S7xNlq;MIy02p|S3&8bk7gUSVxr+Cgl8SK*UXna{jf6DE z;9I0Fy+)aomt$}MXvhP&4ybSgR)9y$ZgLntV27C$TYpXPUBDg>;4a{Cvx`>X0B}I2 zOSf?^aL7va>?}=Ag69B7fb$kH95hI$eci$fCCVk9 z1a_HRTU2dy{AGc=oqcx7>fcPSb-NC$#5+~Uy7!9B|0~6#9T3~(X?CiRr{4|y1dPgp zEZzE4$aY2-@SsUvbDEDe;C^ZGEaLAMn6jP@Bp~hPS|7DQMJv+Qyql3QFcL=o!HQ3z z>VK{(YCCHQHHHXQ2iJfTvk9V?qJ;axO#V8_a(vl4*dOxK`a&x$&$JL~v^FC1;d#cs z9HakOKd~z@+lAF0;O?x+tPIfpdOK~ev=OMZPitXGAvF)wP})$+La!4)=_YO00X2Mc3+c7zwiHt-@B~w(lRpTr4Ib#|rMm`y#@9jP- z$^6%*@b?-HPjXRt`;8t!xs9$2f{l zNvWE;+HiLSv_JDnUS<8yolcs4hC}NJ{mRaL?qcN>G+)3`*^*qdA~Cb0o5V*q$*!J~ lgNDol6To-CaOTDT1^|h65R@vD(DMKQ002ovPDHLkV1m-xZB76H diff --git a/Source/LibationWinForms/Resources/liberate_green_dark.png b/Source/LibationWinForms/Resources/liberate_green_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..74ead89c0d4fa31881ee890c14bb870940988320 GIT binary patch literal 1294 zcmV+p1@ZccP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=lu1NERCwClnOkfWRT#&AGu_gzE0h+u7S?8_j7VFQs89@vO1#8MOfM#0h@yZ- z`eHOZNQ_3J6){GFG5VkhY9UH1CL&6epwR@~3W=c<4PxxtnYM@|tu2H$E#2Mv(6eS; zXJ&UUt%?6+9(KPo=XWmOIp25ANZoo57Fq?|3{>DwXMw1us0Yl90h9kKfhOP)U=H4t zh#7ht@Rp{i-=!O*j2_9bArhdq2hSk#u1!#^L`tzARjsX44jA}JSJ(QZ` zr*nMi81NHt8j!>j2f{!#uoB42QpXP9YN=cASq^jn`8I{4z{|ilz-YQbQ&a$Ah8_S` z0Goub*y*YOaCa8yUSJ(CW>=G@sBzJOj+mi01JBtMZ;*inHU$m=YqCL28nFd<-KI#n zEau5f!@x#h(xnq^0*+hQCS@RLVcZQEZe3SX)Jfn?3v*JodAGxdrE?S*H#1m)<3O(u z;4@bHgB|#S58%J)sh4`9nW?7%kxYuyrKhJG!u z!3`MT4d50R&6$0J|?gKsnPKkU<7N7)B3@id_ z#q{K7t2E$X1nb2!1`MVW39;oC0kfS7uX%2dz}yw>KFk*n5Oji?=XX_kXmwuGQjoV!fZ-fTP93*s)sDfC95#iq!3 zE_?Mmz%wEf$p!il&@Pe#D@nOVr;Iqn^bQ*w?K^@o+{@tT0FopjNfL=SJgmMO%nxyLT}*LqB}Tn>eHNhk(^Aj|KvW5A)V&iw-TBaayQ2< z$KJ~sny%w#I(g;rHh0ct4C}OZec;-8qDGW&^~27=Uv+;;JQ?@oxd(s!!a4Z2KVzPk zj6S4WI;1IhA~C_h=zwSNxv^meMh0>ROA_Qsd7i>>6S!WrKWvgD7U0TM*6-}<84ONXSkJMP1 z^W?N^g@388vYz$VZ*UB~RlAMHSK1!C2BmJjrxrM9SL*X$+S&VK8-3^cY=I@g66&hz zdHA~Z+1hqP>MP90OnoA-z77~a&yn5^dWL!!932ECBncA91Vx2KD05Y6uBc)D>;>7N ze`tz2KLuV2bj?r>@R+8kJ5!Ez0@yqQ&<{05-I=+LUj?>JBXqx}sB5e?kY|B9;Cml| z-C}qf|FMuQKI4Xg`+%n@#{d8T07*qoM6N<$ Eg7XATmjD0& literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_green_pdf_no.png b/Source/LibationWinForms/Resources/liberate_green_pdf_no.png index a128c08837b8dba3b8cdb0829c40020d8b8e40b6..3819ea15981f5a6cd5faff2694dd775de527c0e4 100644 GIT binary patch delta 2219 zcmV;c2vqm-9rqECWPb>KNkl(o3-riBY0S zP!W&F2NT5*l1hj+5rW~;$Lck zA>a+*Ny9SVqe?|70YD4zJ>Vu_L=1Cm2JR9d^3@K&mB61XG}i`TmSLIMY676f_Wr60 zDi3fG@OrgbKoNk^z*8q-zH@a|TV0JV&<)(`!!oxUmbnP{G;q}8)JuR1s=)#hfbQ}8M&L8$6fXh9v%0E%*(0uKKnL(QS07Qe zTY%XzcaZd1Cu6#SfB6BxP4d7kL6x_G@U*UK4*&~;j(^ov?GoTu5jVF1xHbv^D}bJe zi+C8g&Szk>%WOH0l^w13IW7zI0qcP|!0&+T!vgSf3@-K-@DE^C(BLdqwBLudl=?a? z$FBify{xIm0UVizdN2P7Vi@(aM{fX0XmnGH-m1-qSb`F=F;^B@-R z^$5FP2iz9p4hE5Vz6X*F&g8;vjY_K-OA|7>4b`o9SfV`a22Q>S&04Pvf zj{`Rc*!ebH)&2y0F@ge>VvcHn!5|g@1zPMrV1KTF@g}gp*beKemX!cAL7JQ|QJ~er zxXmPSn=9n=6Sg&GO1Md_D3zDrb2j%Ww(G^;2Y|DIq*S?o0A5T4Slp8|K-?(pSG$b5M%NrV`j09q@ssA)FkcTpf^4+EAoHgkZV2-wGg8vw)R>*oO9 za(@&&&j5>My@Rr0`+(JQ{+S7?N9<&&X;|j7Vi}5*)OYKu_K3J&yG(-#R=586;&B?$^ zcBV;JHN}?6rUJ_(ST7dy^^q%>{B&fW#q&&-3~v;wOOdx~k0uCWoz*;u|>Lif75d#1nKHa5H%GSkF@qJYa7B5=7##Tg?>mavNxY08Tn1A9Y3w%UM z%P0-b7#B*cUaB{*ejdXz_xhM4$dXd_8lW5i^MMB=M)5h6zV%iwZD}Y*NLRJ#z$c|1 z$UAcXHjj;~b?WQ|fC}6Jd?)1Yx5;?7f+ZaW0A1BaOTF*4_K$kFZ$3yVyb!oOgz`;7 zI85*ej6)%<>P#OMY@v06520j7>5uvmdzB#ec;*D1YO29)(-v zk$kOMMTzO0U>1-Zlce?Xu{3ryk!(q#C<^&}9;HShlg^OtP4n)?L-cJpNIsW8)c_DH z0BzS!pzHRjjQF7Ule7AQP7ba=z*|52H!16Ar2xnT&~@7s^lwb^y}B_Mw{X#u zXRz`59{S(xkF2c}K7TXi>bp%rWf1OlQ9n*h(KCjGM z&#`^SqGE7A!EduIb$s69(v!Fc!DLGkeL-jFRVQ0VGVzAaI86TUF7}pT#8ir-wFDy@3`7Q9xzyLH)J3TV&$uUV9yMLnJ9uP|W<`6?y0}BGz z0ZOgH$g>*aFkc$l;<=7k!W{vItnw2(TrD7<&Be0td^WzCz_83;0E>K_x>ERzaFt*_ zn{e1+D<> zUb~Bw8LgV@U4Pfh;DO5gCBU%EZU+dz2RrFHH)-D<+d*}4raE?9edU?Bh3qyxIDZieWD!k~erGNZss%-G68Bt5i%odtIe7dy5 zkk5gVP{^h-q;{t0d-Wg#TYUw+8HQ!{R1*MGq+vK2vfi-FnbpFs6ocSa2_}`6Bfw{? ziC(Hbqq({Gegg&4@zM$^f39JfyQ>KRXBxbV0-wJr=6RL@;|$9*s4`Jp{yyJC;m=N; toOsYEA0!ai4DcTCqG6fOQ>F6X0RWwwXmPFOMIHbE002ovPDHLkV1j0uDgXcg delta 3762 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 diff --git a/Source/LibationWinForms/Resources/liberate_green_pdf_no_dark.png b/Source/LibationWinForms/Resources/liberate_green_pdf_no_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f3480a81c1e7bdd6ea6ccc2738b677f6753fc032 GIT binary patch literal 2298 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 UrmniLr~m)}07*qoM6N<$g46&rdH?_b literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_green_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_green_pdf_yes.png index baac01519393e500723255f63dbdb77091cb5402..9dc4cdc4123d13c676a91afb5925a9184736e836 100644 GIT binary patch delta 2014 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 Hu0mjfaHdnF literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_no.png b/Source/LibationWinForms/Resources/liberate_red_pdf_no.png index 6506603c2dfb10323ef8165f9aa1b99599b0ae46..a7c83d7d30f061b579266ab2db3fe6f2e4d82345 100644 GIT binary patch delta 2230 zcmV;n2ub(a9fA^&WPb>VNklla3%0mndW*CSZP>hrjh_iIR3u6 zjLHMN5BOW9SwJ3uMquyTFy9hg)pl2+3$y_@mAbg4ww6UR>S#V~8Yp1fkW>^#GihEM z9pm3`zR8Jn+JDcyx?!2GRtf;ifhU0(UW#9@wyENYWU*P9&~8)HvT55MZ_rbM*c z0&FrYbG#B_*iHFKGfXI1@-ljo?y*cXR)uh&u?IK z%4#{jOIEbn=eP{e54-@Z0e%5|E))Pu8yX_}SL^iYESyot{^NszgEN3(nY})&rP#km z<@j0PkbjpoCEQNTt(g`*#Q-fewPA+ZF-)D8HsBM10H{hNn4U_-5@qYc-A9Qz*gpb% zz&8L>*(|S5OvEztvGI32)#v56z&zhBaQMWD$TJS7)4Vz|@=m)zUZw;8D6Dy00r=zV z{fq>U-fxlifq}39L>0FOZv=km+X5axdMx}C*nc)Vk95Vkf!CyJ?&|hG^TY%< zbae1!Utbgj%EcTdfN|dz05F-&a<^gdOn*PCXP?P}x;h%Gt5JX~Ir48To27Sroc)7? z{C~c;kAca_P*10;+5+Gkz!mcSF~>8ei?~Trl(OY~*5N+3oXejd0?q@b0Xu<5foFXu z=>tPU92goRsVFp5Rgq8>Y}+QGD2!z?3`Y!@x~i=w#~rp5_;NX9y?kyDT%}}en>RwP za0xlzq5KhYr0gJINn^7H_@1P*N#OH<;eYV;3xO{c6g*D=n}B99eFZoM?3U}BQdEvO z$x_p>%za`Rim=Id>ZmbtT_7w7~Y2i^lbFH!$6@XuoPnE;Rt0>G5q_+?q4 zypN@UnZP-~`+Kc~m^y6vLer^WpW3Y;p09-A=J_np|%%?aq*}H+Qz*=C3 z0MOtlfDl*kR|-4iL0~05C~d3{CyTEc5AtoZE` zn-WEKN#F@9N#K)G7}b^FH1;~I^*eGb*^7Gt&>q!+4a@9wNkhe?x*+3VSbye(ixL?} z45$@7*2=jJz!wTq>y(@RZZ43O0wfMGd|r24B7O>(tE<{tpjCYN6rxF2wHtvR;HaeG z3(2v-&TelRa5*PQ)>DFP%A+WmiU|O}_t_y<@O@EyPYG+e$HzUFOCT;vc>uq01E5L* z$^IAsnD5hF`lW2$Bo*IvQh%^`(c%e55ml;#JPiC*QscRPvcN@BT1IJb&J;4D*b3H^ z=;tvk^QezGf;`fQvj!*yz)9{ya9=w}Dg0I7<`Bx)3xDA-&m%B~<=vZn zRIoEWvYQgL7uX_IRD)0DFD17h=)DoCE3f__NNZgPKr#>|Ch`@j$@hq9b?4h*UDeVO zS?7yiULD}RZqg-SjutUrKa2LXfS?qNt(9~e7yy8?fsGD+&N)F9@xIR534Byoq7jGR zX2@;bn^R)^pae*#et)$R(C-NgK;gKuu}Owy9tT#rxY&H4)c&G%Nz?4J$@b7k< z0NeunIDr2?rK{R9a$D~r?*x;=XN7!y16br^*rk##o2BG#7k@@5FaY-jQQjHEq@8V- z>=8w_0oMi`v$^2=L6@Gy(^q?>2nrj?yMeo6F!{g7aF0KS$pX8G&g|}uN~{=`xlLG} zu<~=@i(vqWjJ&k72V%I-{lM2l4BZV}AEpjSy9JF9(iu~6w9TWtEGCcmi5&@#TpL%V z7hA<>Smuv_8-IOVx=Z+s(3N1)FO}sdlf_&nZm&B06Tcn|hyI0um z!c#m(z&!Ew27gkAlMq6FkO&Kakre(8F7Ih}226zk=NRgi^BHu*~*K0^nR}7~T$f!LZB~ zmBOy%gWw?vCgql4i7OQ&$umy=GUP>JcUF~A`6Y&Bc2yDpg=z2(a(w>FG0(FVm}6L` zL4}Fp@-OrGdf-#!Xs!H4BRe3lX@~ delta 3738 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 Ef^&--`~Uy| diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_no_dark.png b/Source/LibationWinForms/Resources/liberate_red_pdf_no_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..818b5cb363d66757db9e9a0f7498af1714ec6311 GIT binary patch literal 2328 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 QYybcN07*qoM6N<$f-|$KR{#J2 diff --git a/Source/LibationWinForms/Resources/liberate_red_pdf_yes_dark.png b/Source/LibationWinForms/Resources/liberate_red_pdf_yes_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..26502f04e4c108d5bb4c18d61cdff6714462c5f0 GIT binary patch literal 2121 zcmV-P2)6f$P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ@&q+iuRcb3(u_{x+{^N88$7$87*ouzTh9Zd*kOCF}w~nOv!EH~{ws$Y-Q>XHd8#j3}GnX%C){5&uQ3~DiR>Lya>#Eit z2Nzffd@A37j;1DFUUeIXUw^%z@&G5>+u65e3k~bmG1%8vXy_u~;<&_sY56`pcIZ8J z-E%LedwYG|w7v07{<86bLPMqkb#coA|0%Z3zO7qFT=jfn?cU9MFT6n9B`*NRYp?Oq zJMV_xZFw;thL>#7ve`7=8_q z0sbX@%~qfbcsdXO0P|L@qUT5lAMV-XTZ08_?_%Q289@P<0HCYdeIBeO*V|VDX92$j zJ^=RnuLJ=lk>Jwx_cH7H6`r5GqNawgYA%W?0fB>AG$LJ{!ma0FosoT)1Wp z>cT~|HZ;)H(n4QX7uYsRB7vRBkSZ&qqPB*!&!0=(6_+!%x;k#L?nR&;==BXiR%+(V zre@A;?4cq0ySuS785Bjqwrx^nWt3J{M)|-|bB8m4KLZy92H<12NG2IOVM5${oLpqY zg}@FR>d#vYh?xRW$k%Wf??4ui26jnA{ZPy_0Sp4;fa$=cz_~F1a5HcSIOclqpTGto zV>bB(U>9%~Iapm?)!ZqmOmg@Jpz41Z1AZs3TG=06afHXD4`)yeh_#z z%hkACY{;<8jBETQ^7p93iELN4LqO`l*#&#pOB$RDgxc9KEVD*d=)c%9V62B2l6IHH zhGk~=G1CPsCM&01F7S7GW#y+57z+aMbzxPGhQQ!ja&NtrNUP$aP_Ci_jAcW0VRf));q~_R7YY!mi*`g?vd+T zT(u0qXTRmcol_t%4isQ%<2EaS6*z}H4vMurG%T|W zfcG`7h#}2bv#(2Ftp~q+!5(>_UcRPINUs&*L2KdK7rq_5CbMQx%vJ z6IlaXBa<~r1!e;Y!!ifOyy_(1E(=(@Zg9zxVD-;q}?ISw53 z^Pp2)Rn?%ZnBq#Cp-2o})%F>dc^&XAX~60w@1GP`Ra~8-A|^k^Cum0 z6-MW;A*rj;ko54hI+6uE2K+ogFgsyb<_h5yrUZDm+sd_59ZVwnXt@X5x)XenQ>tJ+6#PJ{R3@cH{Ao@X;KNmsQNVkSzS zpU+p}Y)4P$liw8DK7kz+5~4v@wLiwS4*2%~y#qhoBP0i(00000NkvXXu0mjfsB+SF literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_yellow.png b/Source/LibationWinForms/Resources/liberate_yellow.png index 8b3e8aab5b933e8d179e81265a9605cfafbfec04..d2548401ac8bceab3d9ca3ab0c737ca6ced889ec 100644 GIT binary patch delta 1228 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 O0000{Bp literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_no.png index 2bddcffddbb2aa1205498f09482b9582f7ceb9a9..7c005335b7d62abf87f40e1e4be78ea458e1a3ea 100644 GIT binary patch delta 2264 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 FV1n!|Ob!45 literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png b/Source/LibationWinForms/Resources/liberate_yellow_pdf_yes.png index b51a28ada192a0693006ab2a7292a07fb6cfb1ea..212a50ea6b0630d90047118649399baa2e9ab07c 100644 GIT binary patch delta 2069 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 delta 3481 zcmV;K4QBG<5ZfD&WPc4|Nklg9Tlh_#7Zk!jl)7q|aQWBGnr?iCzFeHu4%a|A2 z0)gT50zyK7-cNV8d%OGe5AA9Wq0^mSY>VH_GdkVwJ-g3$e}Avv=eL4^MF4jKUjRx0 z4Ul9m0*C-7fd2)W20BT~p-lP7$qe8*;JUNukqjF+4m<>84FtfaJ^D)}&@~DRA87m< zC>YBCR07t=w0L(M0Rm$YfDq93F)!X7KO0K`2VH^hLmz(>GkM_YumsBFhs z&I6{UnI{1(0DsPn6(_hHxR%C|9RW50p8Rsc z!0aIa>IEJIY6qF~IB?Hc06=q|YAQJZd<(cZ1ON=+-<{myAArIE&Ix5;DxZibfSTgi zHQ@OnEx9{`u#7Z%ETyq*_<)Yq*4CFwOG{A{<(ArA z2+{YQ3yzeMuC6YG5D!Wzr@isU8~;*XULIb)e1G|ouq?~Bb?er>r%s*vtl#g)vaDN% zmcflo2L2xSqQmdiIMtr3Q_`WkraES`b~p~yeTqT|gb)%yQ4}JP2n`JlxSG&km7Vix zZ+~wm7K@>(H)r;?ZRfuD;)}0s*|KHLf&~kj6NyB|CeS~e-RF>`oj^wt0B+P6@7TK- zO)u?&P*+z+C=^0blv{Yko}M1!@%SyrT&b(8TexG#j<;TU<&{-|Kp>F}qBe}EQP7{; z8x3*o(e3H=zqJB zNF+gBLpSeNw{q^I4s^pBmIfq&+NS}!t}}DyOg3-cjK||a*Y!TTcYm{P-8$m&IGU#6 z^?EsY@ZdjobaWimG|h0$NC=@HK79DAH8nMh=gysruIqh-$e`lU6uz)B#9wTl!{UX7 zWRLRDy*=9Vb`{p(Bo(`z-<)_->mQL9v>ls7psUDv6osNms;AI9VH^r?P-;4I6+ z>-F~ejF~fM{<5g3=$FpIQ51!}d-r0RW~r*G*{Z7ceLpAwnx?Sfp;(}x5d^R8#E?mfl4IA+Je1DjxiKb~c z#eVm*ny0Xk5=>w0-C7Ms#XPkX(!iA3Tg;87ICeGH~;+xK*Kc23^6Z{Gqfl|3(- zUx3f6jtGEhQ?n^6&B+LWXf&$XwygjJ0)Y?b&Yin96beyYUCo3E6DTPup}D#FkM{51 z|5iL6?1(UVrrR<;z%>ML|IUwr%@sYHGfH@#4j;Qc8-8i}x6Y@pvMUpuN2v zAq2K0ZGTz0a;5#m6Hjcr@4owf z>YD$I88ZllLSM2h>whfE+AXErC4~5#>l>6*PD4{ip3w?G)rMaWb#!!Su~@9My}kXe z0|yS=f8xXmR8_qI2vt>OXJ@CUtE+2XBodi(^5n@M96EGpM}B@jvuDr#z7rV~%d#*G zqa0WxrMzEC`G0_vvZ!yJ16?>4Gr4kgV#y z3|3cHZ#7NRpE46nm^L-%+p#Q(Is#2-Zi!Oc(3PsD7=JXp7=}S>SX~(z}N^XlB^i+35`igDX#;K3yD%L{{Ip zabvYZZ4Gj(71G*a<8#UXu zbJA9W)irIr{`2!Z{p4Z-fuYw-ADn4p=Py3ONZ6_9@>n_(xO(+!R#jEizeS_boD_~z zxOIcy?{B{M-h027m6gSX3l|>LbzM;u#d0#hiGRQ>;FffH(3S1nb%99}v-q=3v+?^f z4~Z9RyZG+*6P&4OPj!k#?VJ3(Fa7jGs*YYAlE!3bXPX@z9kyjzcsw58k|j&V3n7Z6l*$0wq0XHyzhBI}ihPPE1#!t2Ap|`=3Fd$I3rp^znwDi4hNr(z@Or&{RisP0x>8V3 z(0KRVcR!PnaZ3p`=i8|{-;U3#5(ua_6(Oc+6OEZz*6>M@JMOsSh~Mx3(;GK#Jb&8L z)AQxl*48`xe*g2qV9-o$9ptQd$Y2#@>k22Ejv48@1`5pun3O~QeiYr>sY^j{R_xlH3Tq*$EW4f-p6q%YxB-BtSL^K-Z+O=yL10Wqb{I|~ECMT4+ zU1H;a>A+Ipt_=4O`Y}otZkS4DZFOD8=kt-3l{Ku^TGKS??(V*cc6aBuZGSr>03!6Z zyZjh9lV-0j2UzWFq}(~eG6E?jIXOAx=jUfcf()b~LI^C&qO-H}mc4|O#ZZ!T)7#Sa zIPgIR8ePIt}<&dYdTY zLwthgfG6qQU7nxm21pWvYkxXs^jvFet917XM!3PEJA0MK6h-N~-e3TnaR7)9^P2Ai zuRD8-X-%!WyBmObJWgI--f>k`TUuLNzroPj^wXJ@J%9fEw(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ@=1D|BRCwCtn|p8-XBozS=aNIhIUxk5gdv1ox}+53n)F7Q+KYnJVrwn7&Qz_P zVy6S+pyH@?)Lv|BhZf6-)=@j-sI_=Qyf92Vog%hloR+2*qzDOHcH5FBkc2`SZb{DZ zk9`+*&YV5jTj*wdXU?2W_B;FS`|NvtzHbu;jDxtyCBP>D1xNrxc$XA#8h91>qo%06 z#8eU`0H_1L4y*>oL@>v0;2{B`5O)AR20S}LbG-yyt10SGoB&8Vj+c+1@&H!>uf)v) zYyc(#o6p01O}c436Gs<#99ZjNd>haTyaf~lz(JrIxCpocsPS-}8JeQ%aR49pyLHpJPgB%Wad3gFx4QzB=4fF9X7# zfQ`gl$^r0epe5w>f9}_M;sn5s2(G^ecx|)-5IRjs>Dx9M0XPF3k7$lj=>i#GYD9A= zqtylGg}u0L8smXEaRwk==G<+-k3zb_GT=i2fU5)k0n7|B_iEtDFaXSx68Z6fPrm~A zTELsXOO(G~tTZikNkYCUaSV``3Un>-W1tuKZBPIJ9+hmcC4dsY0Ga~=FhR1&10H}b z_3w`Z7XX`pc4^>z#{jUXtxdp}eLVRF-88lVw}&v_u%t=Kar`PUE2ss4MTEzWX|@JAX>|k^hzty{Qb1GjCvF z^GY(A><1YG{ve-H>2Z=T3utfKM$1dDg|5!se01rfjLlvUmmuhL`IDXj zc>Apu&&oUHXs^zW?f0|v`t_vKm417N>kz(BH;ua_r>7%OzC#+kN~uv=fqkwQ9vC>m zYde1yc(x;l-(b(~O)O}-)2s5A0N<1T!Iq~+$P%6gjso9w1we0qj`!X(Le28#f#;by z>n5tICU_ZsvqSlQU^~zwMOO{hn!^G|53n70M*>|1a51n@O5n4%fJN(N9o1z&7HeG# z%yk9e@Zmk7Veaeeptq-;`l+56aOb`JTT|2X2?4dB^xG z?9xTzM6LY2RY2;%S_NA_Y#N*}u@TdFF_iL^RkhUCPA_#T15^$7dreUXoMo|Y8umKo zKpBg%<&47x{v#h-9+bf74#0&omauQ{7EYcFzPn|bauwC%>fHeFR3PZ4aU~Y9dK=c3 z9e@)q!|jMzDPY))^sSOo+eGK=u+2~|H<`H$J{ws1Y<3d!=DTttr^_heRK8Nu-7~;V z#rG>Qz$QOV0^gD2m3AVM?>e&(w1!M3=SlfVb#qy^d?SzPGOVpMXQaX_>0v;(3nA*1FUqHs^Z>ik zetdfNoLeQg50NkANhHpt&9EGXrl>o0)3^or0v0XaBzgb1xN5@DDJI0^$2eT-7;s9? z+4~yD%G2+Yf@-Z~pABL)`vY}ZiDZftDWVolQBMF*>ZZ{EG--;u#zUa=GsP#xsvh}& zrNmN2wSuocyF;3bUBDrU#7Qx=oK$GnU~RTc#uR{HK@j*Q@C~4=gxNa(T&J7HGV$HU z(O_L(p47b(n7Tar@w39{yd09c8VMOFPOHONz(%a~LBGN5sBRi7gp6niaHGd0!2Lv? zSQHVr7x)O)UPn&=9Kt~#2LRz6-83E(cknAO01p87jDQvV$}0d*3*{6>HVY%8`ULM^ z5k2)#zP2-hyxt*MBevoOz#w2oG{>8x5r72IaPdTVo%0Gnis<(8&KQjVfVG?)N_5ju zh+wzb2L-?#SQ`t%$nDb8k4gY)vEKFy`t%n{`Apma=qPjk(^z{2{VLxmOwBl#AzfJ1 zbu0k*=P+YdWAW`vB<>pAuno*dUf1_;9lU{=V87+i7TlbxTXfUq z%^?OxCJ~2*$qtNS_5V0NOn5RQ<;IWa75lD-t_o+-d8%;fN#nxk-UE~Pl-_Q$XkFXL z6k(DOf8qVR?HoU5JqcmB_p)aF?CPGMF|RKkkm3jc8pfj005Ot*kqhib0U*i5A@IOH z^V`Xmo$n`UtNjQvhX4PW8EUwF Uc5;0@A;JIzp00i_>zopr01xVq|vvKA$r!^OjJ`tEQyPWryMr6hO zC&C;L)n`96C|bSh#lJWK1{My11q}Z}L$_9|SgKm8uT-}^=jms=_}Xvz8&SV~K7D&~ z{l?N&_sVit`LraG0KYYZCK-!JvLyzIl`R4!?t92d|c23DX&Q0ox3sh9k?87b#tS$1D^ zhvF;g9)|EpiC=5mx;@S|@8A^#x`RvMfaz~028RFtnHetFIdm;?4-sJi0#8>zmvv4F FO#n4Neir}$ diff --git a/Source/LibationWinForms/Resources/minus_dark.png b/Source/LibationWinForms/Resources/minus_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..485899cb9d544286e520c58b8fa522c125799fba GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)oCO|{#S9GMLLkhTKK~L(l|r&d zkS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H89>GPlj4uMF)%Qid%8G=RNQ)V=WJ$k z0>kl#^nU!kg-2OsEcHwoo%d%W=9Z!gTo0J{WlUpOg^7xE!p>&ahtugjo#ct zTRpAv0?zLBy1r#M_vJkqbJu0+>&9>Xx9FzJn?nqYOd?>T6o4eF0FY$j0FsO>90Cje zaeSEYWJb!3AI~fHT@PIq#-j67;nI`Fh0(nSCh;j-OYP^cH z7~YrcyMEU8*q*gtGZJ`NG=OfzW&DTvCcje--6{8+dTs0bf3u_-_Zphz8L&p2YFv0f t>yyHzbKN^~l_1(vzcDi~{Qu9)(D)-zJ4|8IIbd)zc)I$ztaD0e0stowqT&Dm literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_down.png b/Source/LibationWinForms/Resources/move_down.png new file mode 100644 index 0000000000000000000000000000000000000000..40760aff28e39eee88017da5cb28cbadcc9cbe4b GIT binary patch literal 1253 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=Ye_^wRCwC#od1U$cNoWC`;i~}H`FcnTR4uR8m$~5T0#k>L_-K6ln_EWN;pCY zAsRxcMoS2xgb+$Nju1i!$Fe7c5Xx~JM{IwXXSu{~vbW#nGc&K(Pv>@TcINrad!Oeu zGp^O^^$?N492xY>#fA3I!0*5pmPl$&7dX?|?rsixu{ErNEH1R$z+b@E)=+B7-@t{= zc6WE!8`7{BI@{eY@GWo^cyBGGM(hA*qI2wi>W!^Y9At5!{SELZ(6+WxaW;UnFrXv?je#xVX?h9s>WRYa*Gj8Nv9hYfOE_ z8o<+NVGmpv$w0)fQrw>CPGf^MEor9Q%o^bAt3!(a1A&CymlRB20V*t<=!kmB+d9B6nL4%m+yK^ zDcxCrSenBD^#%T%0xuKtI;N7fd5!OBjtBQgh?D{^5FJ+5(ZUH$c@JE4%o(EE`0jwO@VI)>oGNSa^1m{aq;>Be_nyF9dBYv zSc|Cv12R5$ffeAn=T$9u7}LSiD(q~kNKv;au8Cjs{HnBwpO2|vrz$(0DpcTo;8%)k z^fC z@kIP&bm9G`9eir&qAT#D@lVw0NmC1u8oc-l{O3jd2jE?k3y~UrA}H{RxB(ea;Fn{h zP{bQ1;s#_i-o;39v4H~LXc0FchvRm1lb4FP7?9xtzXIH-xrkp>#0|(K0)H9!zJ>z- zGP=fXm)U?!%Hx^|{Eg_2insw$;1BRNy5VI-+<++XAM%LeIkd+vp#f3gKNRs_fK!UN z0Vzx1-)1c0E5I$6%Yc+A@Jlhm z$`W`*+<;`ys~BzODe#K80jU&wa};<*+<++Xinsw$;19P=McjZW@I$)NQAON<)LGzf zj_Ea*qH`$X2Bg*kf7la!l3H&3m~7{CciwX9r=F%gw8$Xc5%Po P00000NkvXXu0mjfMQlo( literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_down_dark.png b/Source/LibationWinForms/Resources/move_down_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..838c25154e8ccb607f4bc3ccf1c35c1f2c43d51b GIT binary patch literal 1256 zcmVP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=Zb?KzRCwC#od1Vac^JoE_oE;8Z`iq+A7dDXwb|?t*(H`(mTW{sED^B`OAHYa z*@#%1T_Pfuh$V(0A|i&y%tS;i!!QiF`@?xIQ|_%h_uKiLb6&5X#@svSp7VUp`##U> zoMT#@P6rX`&7oeuT;JOK8TcLe!V*c%*#J(@&a_v1z1Zs4LDsi64+DPzUt2?|DSrd! zXJ^_w{oauJy)Zk|-T;mPSAh4{QfkCDa5_52&Zpkk8pJ`?w>G~4{sazNTd6oJz?m4W zn4M{V^37?GEzZugSAcoop7oWA@*emNSnP&l5LySlilx9yRYe?F?eXP5dI$MvgLi>B z;Hh<&iir4JuW$@P8s?8e;Ew{!3cO^>PFKX^=b>ngdZTcCYxCO>_%B@($%NGi#%En) z>?2kWo#1|>9RE=%yPh;Lm1zyVF z9>r~lm2q!4O(@9OQ?x`Qd>;&lc7oC04v z-o%u!6jK8RWO(iX3&1nat6K0Nrh_L{*x6K(qOMU~6Tj;DRcR4F7gND@Rdza6sK9%` zuN2qF75HlLET(`vRon4Y!D9bQajjf|ua1ZxjVS;FG9CU?;1zKLqQEQS21J2Z#0`i7 zuZSBE1-`Ldt+I$WDIog={yebjxjS(YKOWtCuZ{ z=VPQ$#2Y5!24pba#Yl0Xfdb!X5jP+Q<5qN&7mBzTkp2R{09>!Rh+j~|4ag`0e+l@$ zh64X0y2dS+*?^47qnZi)_2`a@xB*e%_whEm;Uz`ffGF@E@(;yxXpdY%1ERoxDB`~W zClzr6QkKBK%~-@2fSWFt0Vz}9=VFA(i5nDm#9z8Z1|$c8KN+J;*#h4c@r(F4zX8dN zn=#UqCGd*40m+`1G1^R1;1zKLQYm()DDaB70a4%;aRZ{jA8eb7xB*e%`*fuvinsx( zv%udN(rYe8=TO8ANUa6_peOn$!4d;fS%Dv9R4V)4iUF|%r3!pM+0N6ZF(4uaM8trI7!Z*<^8Wxg>@vtb Sx}ppK0000F!Z|2-@ zk13aNIDc+~&S3$s$Rxe#0n-GWIJ`L&x3&lbt-ZvxGRR3YkyEwBZmNJ6$Jzj=RiaK2 zLD7mWOY;w(sh&m*eljy&JLAOE|jy;d}mWfcq*5X45{5M~twtDg9ClhNDajcKayQ`bHE7|HyO z`M%62H<$N;Y{6~S&m5G_&aD(y$4;3a!oFyPe#=nQsq^oWuvNpy>kja>^HO zG39@cKBg}%4HSvgJHB$`)+M*?rMK6gZg+BACGki<`AMW&_5o$)IL9E)LLkWlCO$q* zJfQ7iq?iXJQ=R`fx;p(?!uX%Z;;Hj0h0i=6%?($XG-mg#=idFqd9{N2)36@3bm_AF z*BZln?r%s1>PhrFs_|)snqpndKISss3RcZSOC=oFsTS3rm;AtGl-+T^|6;Q3#@|5W zPfS$YC#~#$3h3fba`6WHVxG+L2HJh%x8gtH3m3V8F1p0~aWc!F+ZL&!M+ByGmOPqL z%T@wnzGVDwzG0<8+YTT8AF>aAi!j--I__$#(7eMMXKwpow%&=f9+tKW%Q^W~2h2k! zT$Nxf1N-gUlJ=G{|SGvQ88|1!+FsqQi}W7W6I;h z^d8(lx^kU@_X1h>pV|+${NA{U@xO)N_jOG=W=F~&Yvk|d*FOK%;;A{vIVb1zUEUYQ z7_aWg^YPc^boYdrXO>iW7G@vaiKI$6aHT3!1oE&z0|?{sZBJf)CPv zA13@$_qcajtJHIoMgS$NrHoQL*J7LfC&~LdDl~|eUp8emGcUHqa z*Iv>;#p}R+wrxP;?8=r%Kbpi)&ouvQd$XgWqtcQ2x1=U9{AY>>^5gmH9`9#l_?CC$ VrPjeWz!HUl!PC{xWt~$(69AjY`_}*f literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_first_dark.png b/Source/LibationWinForms/Resources/move_first_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..823404dac2528e823970201e1ee26b7fb35fdb85 GIT binary patch literal 1195 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGTgAGVlCuLUvDb50q$YKTtZXOV3w0BSfsZdDv z2=ZlMs8VHMXlQ0&`1v15zhq!2HDF+PmB7GYHG_dcJbzOBQ8xw#7DG=L$B>F!Z|2-@ zkFJz)IIqIv%#j+|rl!1f%EBo@rvkiQN_lCl< zNk#=PosuZO_~d81xA7BdPb}v*_Dw5FFPdEa{=3XCgJ9UeAjw~KGT z>oL_UP7;eRje5J^zBaJf*5%k@1tl(}MOX+N!a${9)kd*m$7=PiEh+hJ8~*Wu4&(R6 z+tq*0%s;UGz<#~!UtVsxHBW){Da(gEc}s?Cjkyn+yq|SU<+{)OzVRw&{Xg#qtRIXw zy!fQ)5&E;~;qjgSgdT^6y=#d$9_z)rQc652WLL$B{hPUJ81i;5;R<3EOE#$zTzqNE zqkoDYZ2VLMCj=GQxGl1_{QLK-h3~oDSGa=A@{T@>J^Qn4TI2Ks%*=6)r-UAzPiBdl z_3-V#10Pb8fg)U|e_EJcdtUNe{qeW_UjZ5(g3faCRIP%}hoyb2Gn`-%tQ%Sxv45g_)qm8n8vtXA<{xz`NUF}ckeZU?oi|X_}j2bN4@Mm z(D<9?N46(D@sI?H+dY*E)rRm1a~1!wf4Cu_A96rGctTRk53_=s zwUIj-{tGPM)pVw@O6KYMhQ;rWA7cCS*y8SNE~DE5_q!JFd1t3%GyUZvPSdpi^;P z&Vl@+Ulu6rwvc{Uc69HgngjXAMHVW2JX6^J&^1r{9e?M`hn_ydXQ!}6CjOZ9qfJpy zd52K&(WtJbnBK)-dVV{6s}!0Wec-(F1hx;+e~gbTy})Rn?Rf6U%EGJ1V@?Tt*eYqq ze5d=K!I7mVjP~3>*PJwdaDG}O(8ZtXKHcqkxg<^vC^$3qK>iccea{s;6!ktUOs@^s z?mnp`sXjezBFo8IF_Duu_62kP$mB4Z94_qg?BkNX1`<4cU%Kzst!K1Zq7WY2_2yvo zgX{;7-{qG?y?r@f0VokLU8Vbp=!dO6Nmq9NjeB_Siqa&*2hzdfOK!gx{gyjXNs_tl z(f>W`d^OxN?IrzFd=BhqGu!ny?(cz#c^%$Ndl=W1N4@Qz$bP0l+XkKyFL`+ literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_last.png b/Source/LibationWinForms/Resources/move_last.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a5628dc4a345a0ad229d2588bb0109cb67b240 GIT binary patch literal 1262 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGTgAGVlCuLUvDb50q$YKTtZXOV3w0BSfsZdDv z2=ZlMs8VHMXlQ0&`1v15zhq!2HDF+PmB7GYHG_dcJbzOBQ8xw#mJ&}F$B>F!Z)Ux1 zk4cwkUteqYJ%5GHPqDVtm2TSJ99NgN1T9i*5%A(zsH3U_Wbi76ELLp^;8mQm0mPm5 zut&g2ZnfCnYp1AAFV~wky&3Rr|SAGAw<>m|TzgwQTsN8MOw4Z6d z;-ws;2R_@U=kiq-CPp|YsdOKZKQMjWLX#=>jof$Rwi&xrg1)0YNVeEkqmU1fbQdL22> zWPe1&S(eFY2J7{P$p^AuYZO0-^wIwQ?5ASpIq`)DPTTzZx$gLsNoRi_4q_BH5%^Ke zwa4e=>lt3xx}@$0H;R9c?wG=)Ke?+yec7Z#9<1>x)BnhQ-Su_as*Z}OOiUZZb&FUl zlK(Ev5nLbT@QwSA;e&<09ZrdST*a26@L@U71;IyF%LuT>efzwCM{vEfgGhzzADN$z z8{TTojaYTVN%O;7k&jDfC~3K`da($|Nw8hkmKW-85L)q(jj2AaF<&M>$t$9JB_p$u zWqD)jgPp%u3EK3$e2^*YXLdCuaQlh(o$SEG)cKOV9ncKT#L)2Iiw57IwXKjEs` zTOk*G;O?%u6{{X5{dcZgAJe$LzeB!XlYu#i=fBp6t{sel4@3)@7ah=k#OBf%euTG! z>3-C@tC2@;i%j^-RL^*$^!>TmBmQpR?`1z?UB)KRBz89`HZg{o+*lt)hb~U60l-I^ciw>x*O2xw~Fm z*`%cXVRGk>l`jre=kES-<jM?DsHZ1*|Bd!k}b_rym@+^qYqD&;xw9e?{mO<%OoP+>7^o#c*-1%mrmbVyIg zWcg?G!Izo!UusG3?P)g~d`>@ZWqHfg}`vI z7x_59ArvS)MfF3zw$7u|2Xs%T0^{+AUyniPBekExAH%1eXb5q95S~0mGx`C$QXS|1 zbNLQh$JR<@o)W46Y7ChdZg@*X6BMi~MR&7u?E$(F7}+3;+O3y?I6nkqU(NtBX6bw| zSN}50`=X^tA@ik-M*BBz^VK4f9I}96(c_hBADwB-{kQJ_|M)(+$UkB~Zl_M1w(-{6 z)c!XLN_`PZY%WI{IwS-HnU#_pTzEP<7zL4-h6FVdQ&MBb@0N7SO$N&HU literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_last_dark.png b/Source/LibationWinForms/Resources/move_last_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..78f67a23c6bd7a037031d3e0cb65c1c34d7131b5 GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGTgAGVlCuLUvDb50q$YKTtZXOV3w0BSfsZdDv z2=ZlMs8VHMXlQ0&`1v15zhq!2HDF+PmB7GYHG_dcJbzOBQ8xw#mI_Z7$B>F!Z)W{( zk4YD4pI=-5?*4_DGvp6%(7BpX%DHgYlmIW276B*Dg;SQcsI~|!Qf$fE(ju@*u|;Sa zkb7v-4V4ywQ=4?Wed>3lXKhZKeDi17{p$Ch|7^)ldw=KmyziTz+k8J4v;KOr{`vTQ zKNx?A{$QC{wV83wi!HaZo8#t4i%j4+srZ2ZLGkr~tW)z3%=BBmck6xWOLh7sQEz!4 zct2qJaBk}qsg0a-I?iqUy3qXHZO3mVll2?!H#)Cd8!{*KK}t^;P$mC9OWxumK)qaN zn77Bouhe+o5Z`dL&Y~@G1>d3r-m)$-5z-&d*Z<+$^t{2mQSZZr(&=3t73BdIZHm30 z+!a5#H;A&v8Kth)fAsOQhfKv0DTAU~QKtVZO(*(9bSKnYF;%lm;(g$_Wy9@ju0{eM zxkdWb&D07Hm@E{&&9ZOtj@oUhbC;+H#xL0sY`Sryz3&ed(F)DxXpw%!F!kC8CQDVc zKNx8X+H=;(2lIq-c+`u~+pQ zX!^xe@6|Znuu?SmqzMCBG{;lf*6bW?QBOQG5jEC{Q6X_z~SA?(G{zU1KB`ZsU zdejr854V1K-&C3x?NG-3C-FhwZ--MNA7hv=iT`-awP%XvBTIId#_4zO=s6!*Eg--e zCur~b(IUZkxv=+4-6>4>eFW$CYbsd>E$d!(z`S|t45@iftC}<)AAQaJCzEww*`7Yl zM9XDtJSSeu-h@~?VPWEtgPhu5co1 z7G0myeQqJpz9{ZLj^@8C4hk^`MK;Q(g=qc0>GgQ#>#tS+|9|@Pv^&3Hf2>%hg!kOA z-|J*ujtF`mY3Ps;5M)+La&Y14=wK8yR6u63xuD7;lzOcEW6mJ;UN=8>{=0L)@`}OJ L)z4*}Q$iB}%xfyo literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/move_up.png b/Source/LibationWinForms/Resources/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..613c8747844aa214357b9dd179cbc1fb3b2a41ad GIT binary patch literal 1152 zcmV-`1b_R9P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=21!IgRCwC#obgATaU93r-A%-CM2yHi95EsyB94eLA|jg27}1OoV?@M=7-K|? z7@HUoqlt*-CL)f0JMR94{kmUnKiubsRaf0}chBAPeZH?3*$=fl_r34y`F>uvr}fop zH32|lQY--gf&d^00D=G@2mpcrAP9iVJZSd;^0|Oj>@0JVeoFewQbbR=THyq7gds_X zk`5%DOB!WK7_p$vV@a3xrzDL@x{$QO(jbV>3`qKDC&y5O?`_+OGQ?6Lh;KZSbSCLd z6HQY3?{onKNj$HuGsc?y`GtSwNqoRN6$ZQ&%exDfgo`V@go~~ddYyK9ReOfdl&7HENPQ~N03$+v{7Wokq~c{can+(Jc5K_#zv5NPhRf?0goWfhWMt99>bo! zb^;zj?hWyxjT}Bhz$3^FUaEe($OKD4z$3`b5dSPGgBJumg7_Qa?F9U}ow5i*h(iN1 zcFOKc$|49M4z~yVrKAFa5aMuqz@JEZ??b@*AV`)FkAyWzr%4a^qzh88k$@17hRLJ{ zd{PDJw-Mlk5GUXfc+rmXH2X02EZ8YuKoCM48Z%<2 zy;A}2k|2b*`=nh9cvl1=#0hu=A;bxI1Zkdt5GUXfq%qHI(Fk$>0zQo(cZc|%q%VZH zw*gb8mF>T?t$X@Y2;7c||Ac$Q#HdMdKEnt6uO%Gpen#lSrNTB*>;_HMsG+@!D zih_@VEZI>y#Xf+0E}}gP_+AK-k@VHR2yuvYz;|1aDLXZmc+bIwfKPSt3b0|lL5PDh z0pATl2yuuq;HO;{gb;_QFTN)>oupk7gb;^r2K;(d<9if>5aQ4aBH4E-S4;*7Ik{xx zBuM15AVA3W?MT3PLXfU}ngGy?i*{eFR%_`m=5s+t(zar9*CoIm{Fd}oQsw$L%GFBe zPmp{rh}A9008s^eDx?_cd@hLHFSP)K4ERjP1TF>W#bjy)Wh=T|GlJvY>tyDq@Vj;dqYk&v*k@Tuut$Yi0f&lo=zX1Rvn%dXA S+G!vF0000(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=2uVaiRCwC#oZ&~@aU93r-A%-CM2x7*MU04uh$CW*h=^u0Ml@r@7!ffd#uyP} z#3n|>XdzW06ozMt3a*Sac| ziU6QC36=l=K>!d006_o{1OPz*5Cp(w9yI#^#d3*NY%Q~reoFewQiM--FvAJr2z`5=r&PL94B-`lbirH`dT5Z`zt=~U92 zI+~>L-{}Gf5_?`-XN=bQ^AGKm`5>vA2 zXfhVF*VQlSNYVxYk06cEYoo}vBO%@>?dJ^DR+ z?F2l6+#BL~8##Q2fJcxUyj1mek#UxSfJcy-iLtqL69^d9tx|HPU0T$aTg?KBLN{E4ij+? z__zwvZ6m-jAx^*}$W?~z=wD^;67UFel^3esbT`3%CEyX{YKVWA^o0CSJDn4 z?rp&5ZF)eEYfM?VEwER-5BP#j5eQ;ej&)UUavNfQfK3lOHcg~`7Gy}(&&1aVaj3z9 zO%*vG1zEJCbdr4l_gq9f7Vw=ABqiyqeG%di>40yyAd_}#Eb^X%3jv>K;}u}tdV>%L zX9B(*f)L^mX24ImEC?YEVPAZYZ8}N1BnTl6?F{&}u*UZ=1R=zs6NIww60VpG5O8uy zM@f*-XF-5~?c0)oZ-pRj`7{Bb6Bq5SN~O}!Uo4hODM?$3$X%BJcko-%Q%RTCzmXlx zwEhGsmP?VkB^e;BfKLPzBUvn$BKJ!z009F&)p9|K literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/plus.png b/Source/LibationWinForms/Resources/plus.png index 41b056db1526c0b405b78053a4f33f9907e54be3..54edd0a9be8f7c7b2e26745193ac9004f43be1c5 100644 GIT binary patch delta 393 zcmcb{{DgTzYJHZci(^Q|tv7e}W*!cZV7;*Vf#MXs#xoDDola@vndoWcbZg2v9=6?r z72Hb$MJJ@5){oG)6A$5Rsjb*Ae<}OdzWy`knVA|G7@0&G%ul_#a(4Ri=f0D^tGu@U z`qS^zHtRS0(-_r$dR)3!$Q;ej)?d84VD;pAW)X9LPq~|Tzo+DL{i@Qk_P;kilwK1% ztCA$f#v!nPfrVp3gqi0y&tLJ^%XWmHkNe>!dE3q}Z}pY~FV_aI=9Xq=Rd8rvKoE?l zlo*a{otz#Qyz|>nSMA%X+LyNO=?K}fDRvXyz z^nq;q{arg!&(xoV(unjr1_p-z c|Ct#|-Gg2i6eN5Aav3~b{an^LF(ots0L+i7`v3p{ delta 378 zcmaFDe2sZRYJH5Si(^Q|tv7cZ^9~sZuwIzCsy)Mh^64*|EImT<9_n@NS|MVsz-+ch zKUK8l(eeW~gta5RICt9Rb1*Qma0D>eX)T>{S6OLVM}+dCJuf!89SJf%b<4)Uc)#+a z$4B394Ay*Fe0>FD#lTn-KO47<Gx5K< zTUOTQZR+(n%j-P7XK%D~DTsaU+gf&%{VBh3x@-Elq!1@l0vjL6g zuisLg$Gy7v5J(DSEE3UwrtGO@!}B+#+jf^ts!rX}_r<^fVg^v*f#>HQmZw(=-YhMD z(6%D)0@Iw-!xz?Gim_WJUZ}0az{n)h!0`MGKLZ29|NqPkD%zDS_qY8k2XYxaUHx3v IIVCg!02|t;ZU6uP diff --git a/Source/LibationWinForms/Resources/plus_dark.png b/Source/LibationWinForms/Resources/plus_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ba07ebc17917d6a8748a2d968a479dc7a211a3f4 GIT binary patch literal 484 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 D=nTh% literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/queue_completed_dark.png b/Source/LibationWinForms/Resources/queue_completed_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8b036061f9971ab566615d806746f72b7f1a8e GIT binary patch literal 10314 zcmd^l_ghohw|9_1zTyBnMpPm&$_PQJgVF?SfKmi0N$5oc1nC$`XpTxiKpaIWA_PHN zLJ1)iR{|A58c9j};NMWIM1 zP^dfiP^i^y@P7h@BFdvsussT;mV`nb@_J&|tb;;He$>^vU>4XnH4yOm713dPbD5lN z-#9pM=GOJk-W(k{i+0nh8eg1Qgwj;qk_sTCkjk_{*4Wz-J z0ye$ap8J{Y((1_b(Ca_y5(dUR6&FaUBMOh5W|Ns`mfKzGy36x>=?<4rsFIm(Effk1 zE~6)iy3@&xN?-gRU;p=C{=M)2u;;&V{C}JUy|nBgSHo?!k$lAn`uvQYhh1&JVA{%B z>Eu&URMG*#!a<9Iyu#eL{qNxMB_Wi1FIICKUGR&9??D>PuNF}ar_a`qt}>3MDV)WN6^7Ya1Em^dvI&>n$0@aj zL|-DISPHO``C=wV+j85xT|0@F#08*V0;6_a3$!)X2tBpEiNRCyJ>~SWcu{zo2UQto zRQEib`4Hnt9ME|M_~o}WEhNBn?X`7Ji&V>kg9TtSt$7Jrr$)-m4+T%cPhscdcpzQY z^hfWfZ@Ck`&u%}2O`)q=1wcT(-eR@7wXPFes^v6Iyp7!`;3!?5DiPtrbXp7A&RM%j z^!Rj214Xy?_e{D~vi|4x*K;>}TG^Jee}QxKr%C*6@3wD7gl<T5;XpQb2j;CzbOI zX)|R_j~pMtv%(U_nc$p^Dhr0;y8z1*k6eo2TBuC+A=n<{Vy0B^SED@J(RrX)y6V;|hi6~-vlr*im6PJya>2&zDU(!l8<+Q#))<;g z z?R@E@wxUIpyjU8pws2MbwZppZTrbpieuB%sOvF}1m3?H&JoVbZK-&edqEwsfFe~hq zqdT{%VGLB$9(RVH*GH3p-fkme{3%-=JBvE3AR@=iSo%8|lBD*>Tm&0Q9;UUWqztUm zL<=MZ74598xf5#3)y&W-V?t04m6&mjgh~?aC$yRgqML;(iHs=b2kn=ODEiv8xrp7g zTy%kNKO7Grf~=9I%|a{s^wEU2X=*%ea)%$Ma%S`%Nzhn2`Yb`Ls8Es*+#MPrL9Ntt zLd_X#sjxUyia;SqxzMm+>pWV2_z|_9R+tA2@V?TO(LxFkYJSpJt5(H(;O8FCwfH z=y@#qAcqb=B01i?AFpWCh8;K-1F33Qga;S_+B&g_`~?7A}Jb zh`#J)TG1{?T`wHSRa=cM>99uN7gJUgmnV9Xk7{K`LE>LGaFzBaBGhHV@*$r3Q9LB& z@`5=20qDWG(Ga?f5!e@Ts@j7i0c`9VP(XHiUmbII{}44zgG?IF`eKx@*&aUX8ds!S(IE zCoa`?Ko=dm;$FHAf^V3*hoChOJhK$wbZ8%sxTejt>887|SWPGQdB_V-$@>Bhm&64V z&QZQdf-L5}PTrqp6@7QVSe`(x?2Bw1C>8x>xhm+|5ZLg#&r=w5mcu&jZ5 zOE!KHQQ?zc7bqMY*P!gjP;&@HNgPSHSG@LR8rh`CCWZtbGk*N#kI_VweYVC+($!KO zwDh-m*qA@_j$h*y!3KA=8d5*5+Qbh2xZ-%;yQh>VT&qlDvAX8w11==R2!zx7|$h){+O7?pqaDYd=gSJ$#6_$1h zgo5mTB`AeK~Il2yho=kpK1Se zCnBW2uVgL2SQLS|d*=hmx4H=-5T`k9=0B1{5=CVR`xFQb?Z51@)i z_;s`TeLIrOe3Xx53jv+YL7TLgp8^jRXxa=Ipko7PfvKf;whk0HSgi4bt(mk-)V7~w zHdG_CZU8S^I}uA8*&VX!0eaVbDUc))Z?SWSg(K zUVQd`^Ogz3Xn)>s7~SzfVtczl!Ye8O&ENi_p8%>bDM0g)eqcEQoag+ZfM!Zfv6~1V zQmOn@8eA$DuII$v6ET7I!3^Lmh z(TO2b&~M#L>8}WH9njisIw=}2Cy$_OtBiD$n2ddzX5kkPk1B;f`@)e3A8c`w5B2v@ zu^d(dx0$52;t0TrlFulog^W~h3T*|0giPDIa$o+;Qh{N9;R#?CBIm8!y&X0TT~==& z&Z65RX|W~+>j3o^sg+fcv4?$b5GxLYbKdwd>h=->&U`WCZ#%NQPb%M1Fb$n10>EFN zpC+?A%SFhh+`+KJ=Fr4!fAN}kY0gatNc9!TrL+KR-av-)pcq7X8Iz~mn=Pgw!dZN) z@~_PA+H@+^->B4eIKs zzxF4Z@hZi>S9JW^D$4iIy44nh>o@aCK{Ep?ex;9oIUPHrZi9}kNN0Wf82|IA)$>Hk z!L?OD1&mZ4q}udED2zpaL{46%y=!4D zdr%31u1!!`C?_rd>5Z?d{3$J4DcEsFO~IgL7hSHkk+w2dTSJOVl(3dLdpiGbv%td( zn{ELSE_Ll)SD2va|1K4nFXwr9F6d<<*1cGSHsU+AccjD9ym;L%BS~)I&(0E`j&{eK z?+W$52R~>?=nHHpYGNcQVwP^029AHMiCsKuq2a(Mw#!1}-%S zJZ~r?$!I~o(@%@jE)}-Hq}mQ=@ul3ZCG(G=MO#9$9PVFc8Izp9Yg=Z;1o>Yd46JfP#V<58S+hZijil z+nF&_8rhsAm_J(3th7w6whAOq9};MrC{cGUWHgL!m9ZPtsU(+eshLK-=i!%r70PhMG)@hPE$WvlT5-1q# z*)W``oqe@p&1g$LvLwk*d*caWUQM3bt11I@yW4~+o#cmCoVE(ht;$Y3t@u5S|E!GN zWspij848yOJE92Y4?^DZlBLU|_gI!0_Pg!6yFs+F?W8|SZep}2q;U&N%vshh(uShW z!Q6L`_zcC`zjnQ>bQI!Nv?48eCgnRrolP^3t+)*8xfKZyuddVJ-s|=W`b^t+uQ2>6 zk3NbSCAUzHFZ<&qVNaX&>x_#^W=2J}SU%^<#jmurvqKw7{j<278>M@@#uR!3X+GR5@peAe57F|uMjb2pPulxdcV=@e%$-v-Q4HsoylX|uc zjpf_2*a5FMND7;HMqF9>J|5aXF;pa3#jI0C{Oz6fnKr`X8P?1bmS&(CH674F=hM$X zr>JZsQJtQG79Dn2bi_9~R&qMcyS-_X-P(5K_VKMN=!FRzc=I)8IP@)0jLL>ceF|%N^?c+OIt#V-7)1vV$SB2y9E8?-{ z$3e^^tRwZYr;75AwhY8N1yoavME7f7PwUh#-nV(Avr~ofLsK9!zkopQ!tBt5zx7ymAWMM|{C^#=LcY+XZ3Uwoih z$vS+*{2u~FC$LU@N1$8>fp^o*^=|d46qD(bd}Wv682XlzISq zlj>gp-**czrbl?Ht%}r_0H25;hX#i2z-8*IcVI5=VwXb>`JnRhZ#*fkBZEd|=k42F zB-cCUwjNCJT`hJg3$?CI>1A4u<>7Y?lPn;<$%fJ{umj|@V}K?8c-vX=zGOK~ zuRMVR&0l*0_X{A3)5OEDH`iMc#kTG>)ywcf>mbYf1Cj|Eix_)ngh2Iy10^ zO^l1Ox6Gdu{*YJBVt4i4j*ieMTDzrSP{6P`r^I>!H}Wsk*lX%BK_eFTZfV$^^y-@v z|3YYzs9f$&$5ALi)x`3RQx^@QnRD^Oevh#h4PBV=P$^B?P|LgTOwd-y-t38-Rxy@O z%yJnP=a>9`Qd4@=hu^9*1@pRUFO&9q8a2{EL8pPXq$V+q8cz+S+C@F(QLiFp4wsw+ z_E9~1OL69_8xxMtI6tu}mZRiuTC_s{n;~pyQ#RBFpH%lM5Iu(E)T#iEAVPwpfE>75 zdDEid-a!h^aUD*AUxL`J%Fo-r6_33}Y6;Em3!UfZDx7M7HB>w8PfTB{t*@#F#@~Fm zzEb~SR~DNZTE`Oo@kqOUmuM2>6ybdwv_du00DQ&oj(@&ninR4_*abjV0q>%yO;2 zI!icPrF~gzg%uVJwU{#XiUe#z`$MV`E*#W@AfpN}!((=3x%kvwSc$maE(<+?O0|o> zdzyr1RKYpI zYD4X!rhwny54%Di00&2j2=;N~^hN1#y}2cPYhLuI#IK3-IWPZ2f-NanMx6 z+U6us-7`PK(#wo6O>d|2w&~|I-(~WiZ{rsf#vek*fN!3kun0Qmo-{IY+D>Rbg${B` z;FB6Swvu$_25%yn=W7)U-|eCODU4qdI$IvAa2e11jXQs^)0ClO5p1aW_1k-;nLk5X zRXe_=gHf)4tw3y`EyrD<0hR+y2+JNlG@in#Y<{-xhmkoxUczNUf6x*79e${bdg#Hf z?3_h2n`;9_YQ0X^xiEsAH48^I*sb{4+%n?o5h-<}Lfd0}Np;|?xR>iVG5rNPuQ5&X)v4BI8mEzDRq2+nBrM5=x^Vo=q!!)B7|E$xXv~r8tdc>`gdu^!Uhj_3Wm`x|nuEeK2?p<`Bez$7ko32+srY3$<7;Yzf z9IiXYca2mywW?~7G&c+e>HBG;b5mdGMIUEm`NivO2Qt^PvF9g__}$=0Cnh`|UKoe> zoZ3(+?4FwW{lhRASnLbGj80#)ewJv)yqPr1UGILCp^7)Md`Sr(Azv~HAIh?SnG@~Ugil~2aNA@mXr>fYv{~5yp5r;W#*U_SCIxXI%R(jejR`A0Jt!r zI|Z}kTG@WWg-h<{grVYg!8_%Z{;1^rVg(>MBNrBG3#Q&XD5i6CkUsCFFz^xtADOpp zQ6m`tU+b>`Nu|pispn|2#0iUr5^ADs=Mb?Q?t(tNeIK=K$j5BXKxMh)g`}%BVEDz; zj71>%PeHdfbwQZpfBP;f)2~hBX`0jgW8FE0SM3)?yTK8+!p`~Ufp%0}N2lhc+M6nC z2Jz^uE6W|hbO$sm08}|DKW;d6tV*|qkE`gTynM$n# ztfS{a03w1RL(kA7?Z#a*XQec|ZzjdA?XJHRTT$a+*hACiqD6Y;*2DTBALDiHhenPc#V9ALxJ`O=VZXM!A|@hU7&rk?v&>>U~y%+P(w;Vxmk$4 z^TFGPp;zaq&85dYy|(shCFC-?LBjglG+{FpfFjv>+X4VF0egq%#gP2FO*8<3;@*yY z|ALNvJU{e1Jj_>qNFi(b9i9~s$1Vd!rQm~c+gM;}=TGI}QPE~3*1m8vy~>5dMDCmr zTHlumCU*_iYqpG;X*(eRnuU28uSf8Z7MI^xKKavNQPi%dX+ge*j8SJszr2`I;pm%m zuBU00Z+woAu(h}pr*HA^JyItFP8jd4L}o$zc-miuyQ(C#%uJ;(UP~oRC)cXke+hZ% zAeJT;z3ZvyR%?rm#W@iA_E0>`vp9}GUPe(>dX-&SW~6I?WvLNI5n0NPVTM7G+FYg+ zuRxht32x7#+E{Dksu`l?afZ2I#)}5Ry4UGb?@@uiOj$pNEvT%>f>WBj_{%Z7@TCC+ zUP2;rX4&8v#GnO4?ZRi(7l>NgNC0uoUkv-1bCir5sPk2@4|EXdBeGdev*-X%K3}+v zMseTo2vG=zdalS;hR@viGCnef>#1l$-HLh^DFSP+z2StUf{kAMFQ@P!X`rHS_Iu0K zwidjshsZx4?8&gEupjJ7s6oaZ1z7vAf?j&#(Yj~IP+rtlglCNE+0R*9YTN*ER%{bAQSB+Lq1&E?c&M zTG6JNeGKX^DMh)*0iYDwRnJg%s4YSSsB!oZ`}mH$B}70_9UUI|^6q4L*mTu0PSDky zw0DC#O9;lQH{cXH6;E`iOtynZWx4);@7~z%0HdPq-*~)nv5N)|IJdgNldSrxE5g^H zWXO|GFnzJzd2aP4@jUV6=_Eh9qM16t(<^!xKxp~O3o|g}zbM?ES7cU=+m_)2kl!5k zvn=)E__@lv)R_;ItfgTAZo{IP6Cj_Qi{I@xOrdGe#2$eC<3%eWWdP0(PAB=~1Q&4Y z2~sE_>zl>cB;%ZMf7$d!`MGA;_Q;aUQpg_%mbtPbPpu}pB^vy=;a^kl5VJejluJ*r zewYT$Kmpo~PlLVU?0~roo4Q{|?&+Go3N?Zv1O*n}hvNf^>Q3-ww@=bq@q{RFa*wr( zQtV1kHpO+W6P`ovNI%o@94*HC=j%QZ3k}m>0UjV9f8rzZLbUyvHKbbyoP-$57(8*a z8f&io@AmxsgoDCnx&vlgF6J)IBrwgS)*4ueVWN`5x(_pB?jF1y#Q6t?5HS)ujW8WB zm?qIdJFp+J(gsGBjs#k0yj0wZ20Zy!)Um>Ywa1x~RJL7_CG z=({IwH;xjQ9Cp?wHr(prkqrAiF{Ryyzy+vv4=BI$34N;MFTZx~1h9m|naT>%c}_rv z{r-(V;>UpgaPA}UbHN99X)Io-5IPqFG+{p7%)S6sYc=9m{23Nr{#(1Bie@*BK`(oa zB4qsVrB)n%hQNUR^BCr&R-;5nDJU$@BBE#al3^yTJL)b^ zNFHln|15%$q-VnmqwuqgZ;Ag2C}6D=DGs&|@<1-s0h$;hMiP#hXZr`a(*I{T0VkHs z1VJUu@`;8oka-Y7a_I6&O+WU1F#WlRh_nFe2Ptypk2-jZ-{lR^W_uQx;NML8-tJB! z5U&vP0PZ4#0?aroFrRVz3lK)|AdH-!_^S~^ZI#kg94jr9N?&Yf0x9_oYlSbn|1tkr zpK6aiSPl8%0se(^Uj>q9njD=(<^90>2KwJ>`OCH9K+D(qx#uHYcosm*`SD}Xg!c*% z_v^Po&-s|92Sow%0>2F~Y5F4?HysTdLo~!W=^V{YdQ8!9iJFbA2)I@ z5q;2S>(!4J(g>Wy!Xl6%d zn47T8s`1-@Aau_biXd6wKE;334SAoM14#tPJ71@?YQN=WEKU7)9|aT%jZ8wGP=Ho3 zwhozn)N648$gPEBRt0me8e7ZQ-8#%#O~8U{;EPItgdO{u@vC~C2X|pL3?7z9HnTAq zJ;&|blh9il#^4PYgGXLQnhjT*2Gl7YU}G_|F`L;k_Qg)9S;9lTYf62Gs>qM3A-uG} zBBXxyPDs9F4cyzgK@c;((qp_5zJ3J>Nytv;RwG(4fpS0_*9sn4YGd8g}I)KAWXh1AnWztG=L z>^HUSi}OFiB}D1BYR@=Dy^JqP&1enLW!!g<-~|SgdHs@P!l8l*@*#p?zUJs_E@_eS z@+1!MDDq=UPGM(jU|4DRLV5M+hS!Rn40SXm2PbD6@o2inO>T!l^I{^j7yoHQwVd^K zr9QwFL7qF)i#X*OVpw{Mqnh{&0;$)XZ1bH`gOIoj`M&f7mcxHzr`b%KY*y=o7nd4* zgDf~JH;g%{>MQn-;_gXe0P%`TQ6_iEbI1 zu9nW)_p!jo4Wt-FV`Qx_^oB`@Y+qCOY-W7Z!ruL0OBGiCD`9!)?m0o= zaDYNApfGER12WifOeCILLO9w@Pyw2}j zF#h<#ieE!VdTj_%yY1E7Pwnb)x67T;SY>V>)I(t)OA9dY%6}$(C O($zN9D!gca_rCyRj_;NL literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/queue_error.png b/Source/LibationWinForms/Resources/queue_error.png new file mode 100644 index 0000000000000000000000000000000000000000..30b00ba235adfd838fc838b34298b5eac9376d5a GIT binary patch literal 5428 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 literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/Resources/queue_error_dark.png b/Source/LibationWinForms/Resources/queue_error_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b89cf826815f0f6af6b572f5f2805220be1a70bb GIT binary patch literal 5429 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 literal 0 HcmV?d00001 diff --git a/Source/LibationWinForms/SeriesView/SeriesViewDialog.cs b/Source/LibationWinForms/SeriesView/SeriesViewDialog.cs index aac9a704..372420f4 100644 --- a/Source/LibationWinForms/SeriesView/SeriesViewDialog.cs +++ b/Source/LibationWinForms/SeriesView/SeriesViewDialog.cs @@ -44,6 +44,7 @@ namespace LibationWinForms.SeriesView dgv.CellContentClick += Dgv_CellContentClick; dgv.DataSource = new SeriesEntryBindingList(seriesEntries[series]); dgv.BindingContextChanged += (_, _) => dgv.Sort(dgv.Columns["Order"], ListSortDirection.Ascending); + dgv.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled; var tab = new TabPage { Text = series.Title }; tab.Controls.Add(dgv); @@ -171,6 +172,8 @@ namespace LibationWinForms.SeriesView TrackVisitedState = true, SortMode = DataGridViewColumnSortMode.Automatic, Width = 200, + LinkColor = ThemeExtensions.LinkColor, + VisitedLinkColor = ThemeExtensions.VisitedLinkColor, }); dgv.CellToolTipTextNeeded += Dgv_CellToolTipTextNeeded; diff --git a/Source/LibationWinForms/ThemeExtensions.cs b/Source/LibationWinForms/ThemeExtensions.cs new file mode 100644 index 00000000..8b1e7b0d --- /dev/null +++ b/Source/LibationWinForms/ThemeExtensions.cs @@ -0,0 +1,22 @@ +using System.Drawing; +using System.Windows.Forms; + +namespace LibationWinForms; + +internal static class ThemeExtensions +{ + private static readonly Color LinkLabelNew = Color.FromKnownColor(KnownColor.Blue); + private static readonly Color LinkLabelVisited = Color.FromKnownColor(KnownColor.Purple); + private static readonly Color LinkLabelNew_Dark = Color.FromKnownColor(KnownColor.CornflowerBlue); + private static readonly Color LinkLabelVisited_Dark = Color.FromKnownColor(KnownColor.Orchid); + public static Color LinkColor => Application.IsDarkModeEnabled ? LinkLabelNew_Dark : LinkLabelNew; + public static Color VisitedLinkColor => Application.IsDarkModeEnabled ? LinkLabelVisited_Dark : LinkLabelVisited; + extension(LinkLabel ll) + { + public void SetLinkLabelColors() + { + ll.VisitedLinkColor = VisitedLinkColor; + ll.LinkColor = LinkColor; + } + } +} From fa30c10435770dc0a02ab71d821865b9613e345c Mon Sep 17 00:00:00 2001 From: MBucari Date: Mon, 1 Dec 2025 20:39:52 -0700 Subject: [PATCH 2/9] Fix PDF validation error (#1470 ) --- Source/DataLayer/EntityExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/DataLayer/EntityExtensions.cs b/Source/DataLayer/EntityExtensions.cs index 1c53ee83..55d9e1ca 100644 --- a/Source/DataLayer/EntityExtensions.cs +++ b/Source/DataLayer/EntityExtensions.cs @@ -24,7 +24,7 @@ namespace DataLayer /// True if IsLiberated or Error. False if NotLiberated public bool AudioExists => book.UserDefinedItem.BookStatus is LiberatedStatus.Liberated or LiberatedStatus.Error; /// True if exists and IsLiberated. Else false - public bool PdfExists => book.UserDefinedItem.PdfStatus == LiberatedStatus.NotLiberated; + public bool PdfExists => book.UserDefinedItem.PdfStatus is LiberatedStatus.Liberated; /// Whether the book has any supplements public bool HasPdf => book.Supplements.Any(); From c34b1e752e52df26dbb4c117464c5da42ac2d16a Mon Sep 17 00:00:00 2001 From: MBucari Date: Mon, 1 Dec 2025 20:40:34 -0700 Subject: [PATCH 3/9] Update dependencies --- Source/AudibleUtilities/AudibleUtilities.csproj | 2 +- Source/FileManager/FileManager.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/AudibleUtilities/AudibleUtilities.csproj b/Source/AudibleUtilities/AudibleUtilities.csproj index d6738b72..ec6214a4 100644 --- a/Source/AudibleUtilities/AudibleUtilities.csproj +++ b/Source/AudibleUtilities/AudibleUtilities.csproj @@ -5,7 +5,7 @@ - + diff --git a/Source/FileManager/FileManager.csproj b/Source/FileManager/FileManager.csproj index 178ffbd1..7d1acbc0 100644 --- a/Source/FileManager/FileManager.csproj +++ b/Source/FileManager/FileManager.csproj @@ -6,7 +6,7 @@ - + From 4bd491f5b9d277de7516f2e161ac99c535816121 Mon Sep 17 00:00:00 2001 From: MBucari Date: Mon, 1 Dec 2025 20:56:05 -0700 Subject: [PATCH 4/9] Make winforms book details and search syntax dialogs nonmodal Match Chardonnay behavior --- Source/LibationWinForms/ClearableTextBox.cs | 12 ++++++++ .../Dialogs/BookDetailsDialog.cs | 24 +++++++++------ .../Dialogs/EditTemplateDialog.cs | 1 + .../Dialogs/SearchSyntaxDialog.Designer.cs | 10 +++++-- .../Dialogs/SearchSyntaxDialog.cs | 11 ++++++- Source/LibationWinForms/Form1.Filter.cs | 29 ++++++++++++++++++- .../GridView/ProductsDisplay.cs | 27 +++++++++++++---- Source/LibationWinForms/Walkthrough.cs | 18 ++++-------- 8 files changed, 100 insertions(+), 32 deletions(-) diff --git a/Source/LibationWinForms/ClearableTextBox.cs b/Source/LibationWinForms/ClearableTextBox.cs index 8df5fb61..2ab232bd 100644 --- a/Source/LibationWinForms/ClearableTextBox.cs +++ b/Source/LibationWinForms/ClearableTextBox.cs @@ -18,6 +18,18 @@ namespace LibationWinForms } } + public int SelectionStart + { + get => textBox1.SelectionStart; + set => textBox1.SelectionStart = value; + } + + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + textBox1.Focus(); + } + public ClearableTextBox() { InitializeComponent(); diff --git a/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs b/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs index 58dbb32d..12ce9597 100644 --- a/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs +++ b/Source/LibationWinForms/Dialogs/BookDetailsDialog.cs @@ -20,8 +20,7 @@ namespace LibationWinForms.Dialogs public LiberatedStatus BookLiberatedStatus { get; private set; } public LiberatedStatus? PdfLiberatedStatus { get; private set; } - private LibraryBook _libraryBook { get; } - private Book Book => _libraryBook.Book; + private Book Book => LibraryBook.Book; public BookDetailsDialog() { @@ -29,16 +28,23 @@ namespace LibationWinForms.Dialogs this.SetLibationIcon(); audibleLink.SetLinkLabelColors(); } - public BookDetailsDialog(LibraryBook libraryBook) : this() + + public LibraryBook LibraryBook { - _libraryBook = ArgumentValidator.EnsureNotNull(libraryBook, nameof(libraryBook)); - initDetails(); - initTags(); - initLiberated(); + get => field; + set + { + field = value; + initDetails(); + initTags(); + initLiberated(); + } } + // 1st draft: lazily cribbed from GridEntry.ctor() private void initDetails() { + audibleLink.LinkVisited = false; this.Text = Book.TitleWithSubtitle; dolbyAtmosPb.Visible = Book.IsSpatial; dolbyAtmosPb.Image = Application.IsDarkModeEnabled ? Properties.Resources.Dolby_Atmos_Vertical_80_dark : Properties.Resources.Dolby_Atmos_Vertical_80; @@ -53,7 +59,7 @@ namespace LibationWinForms.Dialogs Narrator(s): {Book.NarratorNames} Length: {(Book.LengthInMinutes == 0 ? "" : $"{Book.LengthInMinutes / 60} hr {Book.LengthInMinutes % 60} min")} Category: {string.Join(", ", Book.LowestCategoryNames())} - Purchase Date: {_libraryBook.DateAdded:d} + Purchase Date: {LibraryBook.DateAdded:d} Language: {Book.Language} Audible ID: {Book.AudibleProductId} """; @@ -137,7 +143,7 @@ namespace LibationWinForms.Dialogs private void audibleLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - var locale = AudibleApi.Localization.Get(_libraryBook.Book.Locale); + var locale = AudibleApi.Localization.Get(Book.Locale); var link = $"https://www.audible.{locale.TopDomain}/pd/{Book.AudibleProductId}"; Go.To.Url(link); e.Link.Visited = true; diff --git a/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs b/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs index b03930a8..c7a50db2 100644 --- a/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs +++ b/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs @@ -149,6 +149,7 @@ namespace LibationWinForms.Dialogs templateTb.Text = text.Insert(selStart, itemText); templateTb.SelectionStart = selStart + itemText.Length; + templateTb.Focus(); } private void llblGoToWiki_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) diff --git a/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.Designer.cs b/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.Designer.cs index 3c62f74d..91acbd53 100644 --- a/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.Designer.cs +++ b/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.Designer.cs @@ -84,7 +84,7 @@ label3.Location = new System.Drawing.Point(4, 18); label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); label3.Name = "label3"; - label3.Size = new System.Drawing.Size(218, 120); + label3.Size = new System.Drawing.Size(218, 150); label3.TabIndex = 2; label3.Text = resources.GetString("label3.Text"); // @@ -155,6 +155,7 @@ lboxIdFields.Name = "lboxIdFields"; lboxIdFields.Size = new System.Drawing.Size(220, 305); lboxIdFields.TabIndex = 0; + lboxIdFields.DoubleClick += lboxFields_DoubleClick; // // label9 // @@ -194,6 +195,7 @@ lboxBoolFields.Name = "lboxBoolFields"; lboxBoolFields.Size = new System.Drawing.Size(220, 365); lboxBoolFields.TabIndex = 0; + lboxBoolFields.DoubleClick += lboxFields_DoubleClick; // // label8 // @@ -229,10 +231,11 @@ // lboxNumberFields.Dock = System.Windows.Forms.DockStyle.Fill; lboxNumberFields.FormattingEnabled = true; - lboxNumberFields.Location = new System.Drawing.Point(3, 141); + lboxNumberFields.Location = new System.Drawing.Point(3, 171); lboxNumberFields.Name = "lboxNumberFields"; - lboxNumberFields.Size = new System.Drawing.Size(220, 275); + lboxNumberFields.Size = new System.Drawing.Size(220, 245); lboxNumberFields.TabIndex = 0; + lboxNumberFields.DoubleClick += lboxFields_DoubleClick; // // label7 // @@ -272,6 +275,7 @@ lboxStringFields.Name = "lboxStringFields"; lboxStringFields.Size = new System.Drawing.Size(220, 350); lboxStringFields.TabIndex = 0; + lboxStringFields.DoubleClick += lboxFields_DoubleClick; // // label6 // diff --git a/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.cs b/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.cs index 956e2436..82479014 100644 --- a/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.cs +++ b/Source/LibationWinForms/Dialogs/SearchSyntaxDialog.cs @@ -1,5 +1,5 @@ using LibationSearchEngine; -using System.ComponentModel; +using System; using System.Linq; using System.Windows.Forms; @@ -7,6 +7,7 @@ namespace LibationWinForms.Dialogs { public partial class SearchSyntaxDialog : Form { + public event EventHandler TagDoubleClicked; public SearchSyntaxDialog() { InitializeComponent(); @@ -23,5 +24,13 @@ namespace LibationWinForms.Dialogs base.OnFormClosing(e); this.SaveSizeAndLocation(LibationFileManager.Configuration.Instance); } + + private void lboxFields_DoubleClick(object sender, EventArgs e) + { + if (sender is ListBox { SelectedItem: string tagName }) + { + TagDoubleClicked?.Invoke(this, tagName); + } + } } } diff --git a/Source/LibationWinForms/Form1.Filter.cs b/Source/LibationWinForms/Form1.Filter.cs index a199e574..a3186a2f 100644 --- a/Source/LibationWinForms/Form1.Filter.cs +++ b/Source/LibationWinForms/Form1.Filter.cs @@ -8,7 +8,7 @@ namespace LibationWinForms { protected void Configure_Filter() { } - private void filterHelpBtn_Click(object sender, EventArgs e) => new SearchSyntaxDialog().ShowDialog(); + private void filterHelpBtn_Click(object sender, EventArgs e) => ShowSearchSyntaxDialog(); private void filterSearchTb_TextCleared(object sender, EventArgs e) { @@ -45,5 +45,32 @@ namespace LibationWinForms performFilter(lastGoodFilter); } } + + public SearchSyntaxDialog ShowSearchSyntaxDialog() + { + var dialog = new SearchSyntaxDialog(); + dialog.TagDoubleClicked += Dialog_TagDoubleClicked; + dialog.FormClosed += Dialog_Closed; + filterHelpBtn.Enabled = false; + dialog.Show(this); + return dialog; + + void Dialog_Closed(object sender, FormClosedEventArgs e) + { + dialog.TagDoubleClicked -= Dialog_TagDoubleClicked; + filterHelpBtn.Enabled = true; + } + void Dialog_TagDoubleClicked(object sender, string tag) + { + if (string.IsNullOrEmpty(tag)) return; + + var text = filterSearchTb.Text; + var selStart = Math.Min(Math.Max(0, filterSearchTb.SelectionStart), text.Length); + + filterSearchTb.Text = text.Insert(selStart, tag); + filterSearchTb.SelectionStart = selStart + tag.Length; + filterSearchTb.Focus(); + } + } } } diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index c39bcaa9..3af0f71d 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -14,6 +14,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; + namespace LibationWinForms.GridView { public partial class ProductsDisplay : UserControl @@ -68,7 +69,7 @@ namespace LibationWinForms.GridView PictureStorage.PictureCached -= PictureCached; if (!imageDisplay.Visible) - imageDisplay.Show(null); + imageDisplay.Show(this); } private void productsGrid_DescriptionClicked(GridEntry liveGridEntry, Rectangle cellRectangle) @@ -90,11 +91,27 @@ namespace LibationWinForms.GridView displayWindow.Show(this); } - private async void productsGrid_DetailsClicked(LibraryBookEntry liveGridEntry) + private BookDetailsDialog bookDetailsForm; + private void productsGrid_DetailsClicked(LibraryBookEntry liveGridEntry) { - var bookDetailsForm = new BookDetailsDialog(liveGridEntry.LibraryBook); - if (bookDetailsForm.ShowDialog() == DialogResult.OK) - await liveGridEntry.LibraryBook.UpdateUserDefinedItemAsync(bookDetailsForm.NewTags, bookDetailsForm.BookLiberatedStatus, bookDetailsForm.PdfLiberatedStatus); + if (bookDetailsForm is null || bookDetailsForm.IsDisposed || !bookDetailsForm.Visible) + { + bookDetailsForm = new(); + bookDetailsForm.RestoreSizeAndLocation(Configuration.Instance); + bookDetailsForm.FormClosed += bookDetailsForm_FormClosed; + } + + bookDetailsForm.LibraryBook = liveGridEntry.LibraryBook; + if (!bookDetailsForm.Visible) + bookDetailsForm.Show(this); + + async void bookDetailsForm_FormClosed(object sender, FormClosedEventArgs e) + { + bookDetailsForm.FormClosed -= bookDetailsForm_FormClosed; + bookDetailsForm.SaveSizeAndLocation(Configuration.Instance); + if (e.CloseReason is CloseReason.UserClosing && bookDetailsForm.DialogResult is DialogResult.OK) + await liveGridEntry.LibraryBook.UpdateUserDefinedItemAsync(bookDetailsForm.NewTags, bookDetailsForm.BookLiberatedStatus, bookDetailsForm.PdfLiberatedStatus); + } } #endregion diff --git a/Source/LibationWinForms/Walkthrough.cs b/Source/LibationWinForms/Walkthrough.cs index 56083f75..a9fb5c51 100644 --- a/Source/LibationWinForms/Walkthrough.cs +++ b/Source/LibationWinForms/Walkthrough.cs @@ -144,19 +144,10 @@ namespace LibationWinForms LibraryCommands.ScanEnd += LibraryCommands_ScanEnd; await tcs.Task; LibraryCommands.ScanEnd -= LibraryCommands_ScanEnd; - MainForm.productsDisplay.VisibleCountChanged -= productsDisplay_VisibleCountChanged; return true; - void LibraryCommands_ScanEnd(object sender, int newCount) - { - //if we imported new books, wait for the grid to update before proceeding. - if (newCount > 0) - MainForm.productsDisplay.VisibleCountChanged += productsDisplay_VisibleCountChanged; - else - tcs.SetResult(); - } - void productsDisplay_VisibleCountChanged(object sender, int e) => tcs.SetResult(); + void LibraryCommands_ScanEnd(object _, int __) => tcs.SetResult(); } private async Task ShowSearching() @@ -189,9 +180,10 @@ namespace LibationWinForms await displayControlAsync(MainForm.filterHelpBtn); - using var filterHelp = MainForm.Invoke(() => new SearchSyntaxDialog()); - MainForm.Invoke(filterHelp.ShowDialog); - + using var filterHelp = MainForm.Invoke(MainForm.ShowSearchSyntaxDialog); + var tcs = new TaskCompletionSource(); + filterHelp.FormClosed += (_, _) => tcs.SetResult(); + await tcs.Task; return true; } From 4c5fdf05f54fc6b535cce0aec230aaf46a3bcea4 Mon Sep 17 00:00:00 2001 From: MBucari Date: Mon, 1 Dec 2025 23:23:47 -0700 Subject: [PATCH 5/9] Add "Download split by chapters" context menu item (#1436) All processables are now created with an instance of Configuration, and they use that instance's settings. Added Configuration.CreateEphemeralCopy() to clone Configuration without persistence. --- Source/FileLiberator/AudioFileStorageExt.cs | 5 +- Source/FileLiberator/ConvertToMp3.cs | 15 ++--- Source/FileLiberator/DownloadDecryptBook.cs | 29 +++++---- Source/FileLiberator/DownloadPdf.cs | 5 +- Source/FileLiberator/Processable.cs | 46 ++++++++------ Source/FileManager/IJsonBackedDictionary.cs | 1 + Source/FileManager/PersistentDictionary.cs | 4 +- .../Controls/ThemePreviewControl.axaml.cs | 11 ++-- .../ViewModels/MainVM.ProcessQueue.cs | 6 +- .../Views/MainWindow.axaml.cs | 2 +- .../Views/ProcessBookControl.axaml.cs | 2 +- .../Views/ProcessQueueControl.axaml.cs | 16 ++--- .../Views/ProductsDisplay.axaml.cs | 27 ++++++-- .../Options/_ProcessableOptionsBase.cs | 4 +- Source/LibationFileManager/Configuration.cs | 7 +++ .../EphemeralDictionary.cs | 1 + .../GridView/GridContextMenu.cs | 3 + .../ProcessQueue/ProcessBookViewModel.cs | 12 ++-- .../ProcessQueue/ProcessQueueViewModel.cs | 61 ++++++++++--------- Source/LibationWinForms/Form1.ProcessQueue.cs | 6 +- .../GridView/ProductsDisplay.cs | 30 +++++++-- 21 files changed, 187 insertions(+), 106 deletions(-) diff --git a/Source/FileLiberator/AudioFileStorageExt.cs b/Source/FileLiberator/AudioFileStorageExt.cs index c180fe85..e66b49e0 100644 --- a/Source/FileLiberator/AudioFileStorageExt.cs +++ b/Source/FileLiberator/AudioFileStorageExt.cs @@ -16,9 +16,10 @@ namespace FileLiberator /// Path: directory nested inside of Books directory /// File name: n/a /// - public static string GetDestinationDirectory(this AudioFileStorage _, LibraryBook libraryBook) + public static string GetDestinationDirectory(this AudioFileStorage _, LibraryBook libraryBook, Configuration config = null) { - if (libraryBook.Book.IsEpisodeChild() && Configuration.Instance.SavePodcastsToParentFolder) + config ??= Configuration.Instance; + if (libraryBook.Book.IsEpisodeChild() && config.SavePodcastsToParentFolder) { var series = libraryBook.Book.SeriesLink.SingleOrDefault(); if (series is not null) diff --git a/Source/FileLiberator/ConvertToMp3.cs b/Source/FileLiberator/ConvertToMp3.cs index 6fc97d7c..7a4b12a2 100644 --- a/Source/FileLiberator/ConvertToMp3.cs +++ b/Source/FileLiberator/ConvertToMp3.cs @@ -13,7 +13,7 @@ using LibationFileManager; namespace FileLiberator { - public class ConvertToMp3 : AudioDecodable + public class ConvertToMp3 : AudioDecodable, IProcessable { public override string Name => "Convert to Mp3"; private Mp4Operation Mp4Operation; @@ -72,15 +72,14 @@ namespace FileLiberator OnNarratorsDiscovered(m4bBook.AppleTags.Narrator); OnCoverImageDiscovered(m4bBook.AppleTags.Cover); - var config = Configuration.Instance; - var lameConfig = DownloadOptions.GetLameOptions(config); + var lameConfig = DownloadOptions.GetLameOptions(Configuration); var chapters = m4bBook.GetChaptersFromMetadata(); //Finishing configuring lame encoder. AaxDecrypter.MpegUtil.ConfigureLameOptions( m4bBook, lameConfig, - config.LameDownsampleMono, - config.LameMatchSourceBR, + Configuration.LameDownsampleMono, + Configuration.LameMatchSourceBR, chapters); if (m4bBook.AppleTags.Tracks is (int trackNum, int trackCount)) @@ -108,9 +107,9 @@ namespace FileLiberator = FileUtility.SaferMoveToValidPath( tempPath, entry.proposedMp3Path, - Configuration.Instance.ReplacementCharacters, + Configuration.ReplacementCharacters, extension: "mp3", - Configuration.Instance.OverwriteExisting); + Configuration.OverwriteExisting); SetFileTime(libraryBook, realMp3Path); SetDirectoryTime(libraryBook, Path.GetDirectoryName(realMp3Path)); @@ -169,5 +168,7 @@ namespace FileLiberator TotalBytesToReceive = totalInputSize }); } + public static ConvertToMp3 Create(Configuration config) => new() { Configuration = config }; + private ConvertToMp3() { } } } diff --git a/Source/FileLiberator/DownloadDecryptBook.cs b/Source/FileLiberator/DownloadDecryptBook.cs index a00369b3..128c3200 100644 --- a/Source/FileLiberator/DownloadDecryptBook.cs +++ b/Source/FileLiberator/DownloadDecryptBook.cs @@ -17,7 +17,7 @@ using System.Threading.Tasks; #nullable enable namespace FileLiberator { - public class DownloadDecryptBook : AudioDecodable + public class DownloadDecryptBook : AudioDecodable, IProcessable { public override string Name => "Download & Decrypt"; private CancellationTokenSource? cancellationTokenSource; @@ -50,8 +50,8 @@ namespace FileLiberator var api = await libraryBook.GetApiAsync(); - LicenseInfo ??= await DownloadOptions.GetDownloadLicenseAsync(api, libraryBook, Configuration.Instance, cancellationToken); - using var downloadOptions = DownloadOptions.BuildDownloadOptions(libraryBook, Configuration.Instance, LicenseInfo); + LicenseInfo ??= await DownloadOptions.GetDownloadLicenseAsync(api, libraryBook, Configuration, cancellationToken); + using var downloadOptions = DownloadOptions.BuildDownloadOptions(libraryBook, Configuration, LicenseInfo); var result = await DownloadAudiobookAsync(api, downloadOptions, cancellationToken); if (!result.Success || getFirstAudioFile(result.ResultFiles) is not TempFile audioFile) @@ -62,7 +62,7 @@ namespace FileLiberator return new StatusHandler { "Decrypt failed" }; } - if (Configuration.Instance.RetainAaxFile) + if (Configuration.RetainAaxFile) { //Add the cached aaxc and key files to the entries list to be moved to the Books directory. result.ResultFiles.AddRange(getAaxcFiles(result.CacheFiles)); @@ -256,7 +256,7 @@ namespace FileLiberator private void AaxcDownloader_RetrievedCoverArt(object? sender, byte[]? e) { - if (Configuration.Instance.AllowLibationFixup && sender is AaxcDownloadConvertBase downloader) + if (Configuration.AllowLibationFixup && sender is AaxcDownloadConvertBase downloader) { try { @@ -345,15 +345,15 @@ namespace FileLiberator destinationDir, entry.Extension, entry.PartProperties, - Configuration.Instance.OverwriteExisting); + Configuration.OverwriteExisting); var realDest = FileUtility.SaferMoveToValidPath( entry.FilePath, destFileName, - Configuration.Instance.ReplacementCharacters, + Configuration.ReplacementCharacters, entry.Extension, - Configuration.Instance.OverwriteExisting); + Configuration.OverwriteExisting); #region File Move Progress totalBytesMoved += new FileInfo(realDest).Length; @@ -403,7 +403,7 @@ namespace FileLiberator options.LibraryBook, destinationDir, extension: ".jpg", - returnFirstExisting: Configuration.Instance.OverwriteExisting); + returnFirstExisting: Configuration.OverwriteExisting); if (File.Exists(coverPath)) FileUtility.SaferDelete(coverPath); @@ -440,7 +440,7 @@ namespace FileLiberator options.LibraryBook, destinationDir, extension: formatExtension, - returnFirstExisting: Configuration.Instance.OverwriteExisting); + returnFirstExisting: Configuration.OverwriteExisting); if (File.Exists(recordsPath)) FileUtility.SaferDelete(recordsPath); @@ -487,7 +487,7 @@ namespace FileLiberator options.LibraryBook, destinationDir, extension: ".metadata.json", - returnFirstExisting: Configuration.Instance.OverwriteExisting); + returnFirstExisting: Configuration.OverwriteExisting); if (File.Exists(metadataPath)) FileUtility.SaferDelete(metadataPath); @@ -512,10 +512,10 @@ namespace FileLiberator #endregion #region Macros - private static string getDestinationDirectory(LibraryBook libraryBook) + private string getDestinationDirectory(LibraryBook libraryBook) { Serilog.Log.Verbose("Getting destination directory for {@Book}", libraryBook.LogFriendly()); - var destinationDir = AudibleFileStorage.Audio.GetDestinationDirectory(libraryBook); + var destinationDir = AudibleFileStorage.Audio.GetDestinationDirectory(libraryBook, Configuration); Serilog.Log.Verbose("Got destination directory for {@Book}. {@Directory}", libraryBook.LogFriendly(), destinationDir); if (!Directory.Exists(destinationDir)) { @@ -533,5 +533,8 @@ namespace FileLiberator private static IEnumerable getAaxcFiles(IEnumerable entries) => entries.Where(f => File.Exists(f.FilePath) && (getFileType(f) is FileType.AAXC || f.Extension.Equals(".key", StringComparison.OrdinalIgnoreCase))); #endregion + + public static DownloadDecryptBook Create(Configuration config) => new() { Configuration = config }; + private DownloadDecryptBook() { } } } diff --git a/Source/FileLiberator/DownloadPdf.cs b/Source/FileLiberator/DownloadPdf.cs index 4e5cb20a..500087e1 100644 --- a/Source/FileLiberator/DownloadPdf.cs +++ b/Source/FileLiberator/DownloadPdf.cs @@ -13,7 +13,7 @@ using LibationFileManager; namespace FileLiberator { - public class DownloadPdf : Processable + public class DownloadPdf : Processable, IProcessable { public override string Name => "Download Pdf"; public override bool Validate(LibraryBook libraryBook) @@ -89,5 +89,8 @@ namespace FileLiberator => !File.Exists(actualDownloadedFilePath) ? new StatusHandler { "Downloaded PDF cannot be found" } : new StatusHandler(); + + public static DownloadPdf Create(Configuration config) => new() { Configuration = config }; + private DownloadPdf() { } } } diff --git a/Source/FileLiberator/Processable.cs b/Source/FileLiberator/Processable.cs index 54d360bf..23208a38 100644 --- a/Source/FileLiberator/Processable.cs +++ b/Source/FileLiberator/Processable.cs @@ -9,24 +9,36 @@ using Dinah.Core.ErrorHandling; using Dinah.Core.Net.Http; using LibationFileManager; +#nullable enable namespace FileLiberator { - public abstract class Processable + public interface IProcessable where T : IProcessable + { + /// + /// Create a new instance of the Processable which uses a specific Configuration + /// + /// The this will use + static abstract T Create(Configuration config); + } + public abstract class Processable { public abstract string Name { get; } - public event EventHandler Begin; + public event EventHandler? Begin; /// General string message to display. DON'T rely on this for success, failure, or control logic - public event EventHandler StatusUpdate; + public event EventHandler? StatusUpdate; /// Fired when a file is successfully saved to disk - public event EventHandler<(string id, string path)> FileCreated; - public event EventHandler StreamingProgressChanged; - public event EventHandler StreamingTimeRemaining; + public event EventHandler<(string id, string path)>? FileCreated; + public event EventHandler? StreamingProgressChanged; + public event EventHandler? StreamingTimeRemaining; - public event EventHandler Completed; + public event EventHandler? Completed; - /// True == Valid - public abstract bool Validate(LibraryBook libraryBook); + public required Configuration Configuration{ get; init; } + protected Processable() { } + + /// True == Valid + public abstract bool Validate(LibraryBook libraryBook); /// True == success public abstract Task ProcessAsync(LibraryBook libraryBook); @@ -35,7 +47,7 @@ namespace FileLiberator public IEnumerable GetValidLibraryBooks(IEnumerable library) => library.Where(libraryBook => Validate(libraryBook) - && (!libraryBook.Book.IsEpisodeChild() || Configuration.Instance.DownloadEpisodes) + && (!libraryBook.Book.IsEpisodeChild() || Configuration.DownloadEpisodes) ); public async Task ProcessSingleAsync(LibraryBook libraryBook, bool validate) @@ -86,12 +98,12 @@ namespace FileLiberator protected void OnStreamingProgressChanged(DownloadProgress progress) => OnStreamingProgressChanged(null, progress); - protected void OnStreamingProgressChanged(object _, DownloadProgress progress) + protected void OnStreamingProgressChanged(object? _, DownloadProgress progress) => StreamingProgressChanged?.Invoke(this, progress); protected void OnStreamingTimeRemaining(TimeSpan timeRemaining) => OnStreamingTimeRemaining(null, timeRemaining); - protected void OnStreamingTimeRemaining(object _, TimeSpan timeRemaining) + protected void OnStreamingTimeRemaining(object? _, TimeSpan timeRemaining) => StreamingTimeRemaining?.Invoke(this, timeRemaining); protected void OnCompleted(LibraryBook libraryBook) @@ -100,17 +112,17 @@ namespace FileLiberator Completed?.Invoke(this, libraryBook); } - protected static void SetFileTime(LibraryBook libraryBook, string file) + protected void SetFileTime(LibraryBook libraryBook, string file) => setFileSystemTime(libraryBook, new FileInfo(file)); - protected static void SetDirectoryTime(LibraryBook libraryBook, string file) + protected void SetDirectoryTime(LibraryBook libraryBook, string file) => setFileSystemTime(libraryBook, new DirectoryInfo(file)); - private static void setFileSystemTime(LibraryBook libraryBook, FileSystemInfo fileInfo) + private void setFileSystemTime(LibraryBook libraryBook, FileSystemInfo fileInfo) { if (!fileInfo.Exists) return; - fileInfo.CreationTimeUtc = getTimeValue(Configuration.Instance.CreationTime) ?? fileInfo.CreationTimeUtc; - fileInfo.LastWriteTimeUtc = getTimeValue(Configuration.Instance.LastWriteTime) ?? fileInfo.LastWriteTimeUtc; + fileInfo.CreationTimeUtc = getTimeValue(Configuration.CreationTime) ?? fileInfo.CreationTimeUtc; + fileInfo.LastWriteTimeUtc = getTimeValue(Configuration.LastWriteTime) ?? fileInfo.LastWriteTimeUtc; DateTime? getTimeValue(Configuration.DateTimeSource source) => source switch { diff --git a/Source/FileManager/IJsonBackedDictionary.cs b/Source/FileManager/IJsonBackedDictionary.cs index ad508588..512dbd89 100644 --- a/Source/FileManager/IJsonBackedDictionary.cs +++ b/Source/FileManager/IJsonBackedDictionary.cs @@ -7,6 +7,7 @@ namespace FileManager; public interface IJsonBackedDictionary { + JObject GetJObject(); bool Exists(string propertyName); string? GetString(string propertyName, string? defaultValue = null); T? GetNonString(string propertyName, T? defaultValue = default); diff --git a/Source/FileManager/PersistentDictionary.cs b/Source/FileManager/PersistentDictionary.cs index 94f8012b..62aaee61 100644 --- a/Source/FileManager/PersistentDictionary.cs +++ b/Source/FileManager/PersistentDictionary.cs @@ -273,5 +273,7 @@ namespace FileManager { File.WriteAllText(Filepath, "{}"); } - } + + public JObject GetJObject() => readFile(); + } } diff --git a/Source/LibationAvalonia/Controls/ThemePreviewControl.axaml.cs b/Source/LibationAvalonia/Controls/ThemePreviewControl.axaml.cs index 5966103f..ca326e65 100644 --- a/Source/LibationAvalonia/Controls/ThemePreviewControl.axaml.cs +++ b/Source/LibationAvalonia/Controls/ThemePreviewControl.axaml.cs @@ -2,6 +2,7 @@ using Avalonia.Controls; using DataLayer; using Dinah.Core.ErrorHandling; using LibationAvalonia.ViewModels; +using LibationFileManager; using LibationUiBase.ProcessQueue; using System.Collections.Generic; using System.Linq; @@ -32,11 +33,11 @@ public partial class ThemePreviewControl : UserControl MainVM.Configure_NonUI(); } - QueuedBook = new ProcessBookViewModel(sampleEntries[0]) { Status = ProcessBookStatus.Queued }; - WorkingBook = new ProcessBookViewModel(sampleEntries[0]) { Status = ProcessBookStatus.Working }; - CompletedBook = new ProcessBookViewModel(sampleEntries[0]) { Status = ProcessBookStatus.Completed }; - CancelledBook = new ProcessBookViewModel(sampleEntries[0]) { Status = ProcessBookStatus.Cancelled }; - FailedBook = new ProcessBookViewModel(sampleEntries[0]) { Status = ProcessBookStatus.Failed }; + QueuedBook = new ProcessBookViewModel(sampleEntries[0], Configuration.Instance) { Status = ProcessBookStatus.Queued }; + WorkingBook = new ProcessBookViewModel(sampleEntries[0], Configuration.Instance) { Status = ProcessBookStatus.Working }; + CompletedBook = new ProcessBookViewModel(sampleEntries[0], Configuration.Instance) { Status = ProcessBookStatus.Completed }; + CancelledBook = new ProcessBookViewModel(sampleEntries[0], Configuration.Instance) { Status = ProcessBookStatus.Cancelled }; + FailedBook = new ProcessBookViewModel(sampleEntries[0], Configuration.Instance) { Status = ProcessBookStatus.Failed }; //Set the current processable so that the empty queue doesn't try to advance. QueuedBook.AddDownloadPdf(); diff --git a/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs b/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs index 1a45f6e8..6910f298 100644 --- a/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs +++ b/Source/LibationAvalonia/ViewModels/MainVM.ProcessQueue.cs @@ -32,13 +32,13 @@ namespace LibationAvalonia.ViewModels setQueueCollapseState(collapseState); } - public async void LiberateClicked(LibraryBook[] libraryBooks) + public async void LiberateClicked(System.Collections.Generic.IList libraryBooks, Configuration config) { try { - if (ProcessQueue.QueueDownloadDecrypt(libraryBooks)) + if (ProcessQueue.QueueDownloadDecrypt(libraryBooks, config)) setQueueCollapseState(false); - else if (libraryBooks.Length == 1 && libraryBooks[0].Book.AudioExists) + else if (libraryBooks.Count == 1 && libraryBooks[0].Book.AudioExists) { // liberated: open explorer to file var filePath = AudibleFileStorage.Audio.GetPath(libraryBooks[0].Book.AudibleProductId); diff --git a/Source/LibationAvalonia/Views/MainWindow.axaml.cs b/Source/LibationAvalonia/Views/MainWindow.axaml.cs index 53e0bf1f..8b6299a7 100644 --- a/Source/LibationAvalonia/Views/MainWindow.axaml.cs +++ b/Source/LibationAvalonia/Views/MainWindow.axaml.cs @@ -173,7 +173,7 @@ namespace LibationAvalonia.Views await ViewModel.BindToGridTask; } - public void ProductsDisplay_LiberateClicked(object _, LibraryBook[] libraryBook) => ViewModel.LiberateClicked(libraryBook); + public void ProductsDisplay_LiberateClicked(object _, IList libraryBook, Configuration config) => ViewModel.LiberateClicked(libraryBook, config); public void ProductsDisplay_LiberateSeriesClicked(object _, SeriesEntry series) => ViewModel.LiberateSeriesClicked(series); public void ProductsDisplay_ConvertToMp3Clicked(object _, LibraryBook[] libraryBook) => ViewModel.ConvertToMp3Clicked(libraryBook); diff --git a/Source/LibationAvalonia/Views/ProcessBookControl.axaml.cs b/Source/LibationAvalonia/Views/ProcessBookControl.axaml.cs index 8dacf91a..5bb43034 100644 --- a/Source/LibationAvalonia/Views/ProcessBookControl.axaml.cs +++ b/Source/LibationAvalonia/Views/ProcessBookControl.axaml.cs @@ -31,7 +31,7 @@ namespace LibationAvalonia.Views if (Design.IsDesignMode) { ViewModels.MainVM.Configure_NonUI(); - DataContext = new ProcessBookViewModel(MockLibraryBook.CreateBook()); + DataContext = new ProcessBookViewModel(MockLibraryBook.CreateBook(), LibationFileManager.Configuration.Instance); return; } } diff --git a/Source/LibationAvalonia/Views/ProcessQueueControl.axaml.cs b/Source/LibationAvalonia/Views/ProcessQueueControl.axaml.cs index 621eb092..ef6cd82a 100644 --- a/Source/LibationAvalonia/Views/ProcessQueueControl.axaml.cs +++ b/Source/LibationAvalonia/Views/ProcessQueueControl.axaml.cs @@ -38,42 +38,42 @@ namespace LibationAvalonia.Views var trialBook = MockLibraryBook.CreateBook(); List testList = new() { - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.FailedAbort, Status = ProcessBookStatus.Failed, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.FailedSkip, Status = ProcessBookStatus.Failed, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.FailedRetry, Status = ProcessBookStatus.Failed, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.ValidationFail, Status = ProcessBookStatus.Failed, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.Cancelled, Status = ProcessBookStatus.Cancelled, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.Success, Status = ProcessBookStatus.Completed, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.None, Status = ProcessBookStatus.Working, }, - new ProcessBookViewModel(trialBook) + new ProcessBookViewModel(trialBook, Configuration.Instance) { Result = ProcessBookResult.None, Status = ProcessBookStatus.Queued, diff --git a/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs b/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs index 6c25f5f6..48aa4b0c 100644 --- a/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs +++ b/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs @@ -26,7 +26,7 @@ namespace LibationAvalonia.Views { public partial class ProductsDisplay : UserControl { - public event EventHandler? LiberateClicked; + public event LiberateClickedHandler? LiberateClicked; public event EventHandler? LiberateSeriesClicked; public event EventHandler? ConvertToMp3Clicked; public event EventHandler? TagsButtonClicked; @@ -298,10 +298,29 @@ namespace LibationAvalonia.Views args.ContextMenuItems.Add(new MenuItem { Header = ctx.DownloadSelectedText, - Command = ReactiveCommand.Create(() => LiberateClicked?.Invoke(this, ctx.LibraryBookEntries.Select(e => e.LibraryBook).ToArray())) + Command = ReactiveCommand.Create(() => LiberateClicked?.Invoke(this, ctx.LibraryBookEntries.Select(e => e.LibraryBook).ToArray(), Configuration.Instance)) }); } + #endregion + #region Download split by chapters + if (entries.Length == 1 && entries[0] is LibraryBookEntry entry3_a) + { + args.ContextMenuItems.Add(new MenuItem() + { + Header = ctx.DownloadAsChapters, + IsEnabled = ctx.DownloadAsChaptersEnabled, + Command = ReactiveCommand.Create(() => + { + var config = Configuration.Instance.CreateEphemeralCopy(); + config.AllowLibationFixup = config.SplitFilesByChapter = true; + var books = ctx.LibraryBookEntries.Select(e => e.LibraryBook).Where(lb => lb.Book.UserDefinedItem.BookStatus is not LiberatedStatus.Error).ToList(); + //No need to persist BookStatus changes. They only needs to last long for the files to start downloading + books.ForEach(b => b.Book.UserDefinedItem.BookStatus = LiberatedStatus.NotLiberated); + LiberateClicked?.Invoke(this, [entry3_a.LibraryBook], config); + }) + }); + } #endregion #region Convert to Mp3 @@ -329,7 +348,7 @@ namespace LibationAvalonia.Views entry4.Book.UserDefinedItem.BookStatus = LiberatedStatus.NotLiberated; if (entry4.Book.HasPdf) entry4.Book.UserDefinedItem.SetPdfStatus(LiberatedStatus.NotLiberated); - LiberateClicked?.Invoke(this, [entry4.LibraryBook]); + LiberateClicked?.Invoke(this, [entry4.LibraryBook], Configuration.Instance); }) }); } @@ -512,7 +531,7 @@ namespace LibationAvalonia.Views } else if (button.DataContext is LibraryBookEntry lbEntry) { - LiberateClicked?.Invoke(this, [lbEntry.LibraryBook]); + LiberateClicked?.Invoke(this, [lbEntry.LibraryBook], Configuration.Instance); } } diff --git a/Source/LibationCli/Options/_ProcessableOptionsBase.cs b/Source/LibationCli/Options/_ProcessableOptionsBase.cs index bb719300..1b1f30f9 100644 --- a/Source/LibationCli/Options/_ProcessableOptionsBase.cs +++ b/Source/LibationCli/Options/_ProcessableOptionsBase.cs @@ -18,10 +18,10 @@ namespace LibationCli public IEnumerable? Asins { get; set; } protected static TProcessable CreateProcessable(EventHandler? completedAction = null) - where TProcessable : Processable, new() + where TProcessable : Processable, IProcessable { var progressBar = new ConsoleProgressBar(Console.Out); - var strProc = new TProcessable(); + var strProc = TProcessable.Create(Configuration.Instance); LibraryBook? currentLibraryBook = null; strProc.Begin += (o, e) => diff --git a/Source/LibationFileManager/Configuration.cs b/Source/LibationFileManager/Configuration.cs index e0f879b8..b4d36b9c 100644 --- a/Source/LibationFileManager/Configuration.cs +++ b/Source/LibationFileManager/Configuration.cs @@ -32,7 +32,14 @@ namespace LibationFileManager } private static readonly Configuration s_SingletonInstance = new(); public static Configuration Instance { get; private set; } = s_SingletonInstance; + public bool IsEphemeralInstance => JsonBackedDictionary is EphemeralDictionary; + public Configuration CreateEphemeralCopy() + { + var copy = new Configuration(); + copy.LoadEphemeralSettings(Settings.GetJObject()); + return copy; + } private Configuration() { } #endregion diff --git a/Source/LibationFileManager/EphemeralDictionary.cs b/Source/LibationFileManager/EphemeralDictionary.cs index 8e7fbb69..7ed2a686 100644 --- a/Source/LibationFileManager/EphemeralDictionary.cs +++ b/Source/LibationFileManager/EphemeralDictionary.cs @@ -17,6 +17,7 @@ internal class EphemeralDictionary : IJsonBackedDictionary JsonObject = dataStore; } + public JObject GetJObject() => (JObject)JsonObject.DeepClone(); public bool Exists(string propertyName) => JsonObject.ContainsKey(propertyName); public string? GetString(string propertyName, string? defaultValue = null) diff --git a/Source/LibationUiBase/GridView/GridContextMenu.cs b/Source/LibationUiBase/GridView/GridContextMenu.cs index 43e9733c..e0ff4d91 100644 --- a/Source/LibationUiBase/GridView/GridContextMenu.cs +++ b/Source/LibationUiBase/GridView/GridContextMenu.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; namespace LibationUiBase.GridView; +public delegate void LiberateClickedHandler(object sender, System.Collections.Generic.IList libraryBooks, Configuration config); public class GridContextMenu { public string CopyCellText => $"{Accelerator}Copy Cell Contents"; @@ -20,6 +21,7 @@ public class GridContextMenu public string LocateFileDialogTitle => $"Locate the audio file for '{GridEntries[0].Book.TitleWithSubtitle}'"; public string LocateFileErrorMessage => "Error saving book's location"; public string ConvertToMp3Text => $"{Accelerator}Convert to Mp3"; + public string DownloadAsChapters => $"Download {Accelerator}split by chapters"; public string ReDownloadText => "Re-download this audiobook"; public string DownloadSelectedText => "Download selected audiobooks"; public string EditTemplatesText => "Edit Templates"; @@ -33,6 +35,7 @@ public class GridContextMenu public bool SetDownloadedEnabled => LibraryBookEntries.Any(ge => ge.Book.UserDefinedItem.BookStatus != LiberatedStatus.Liberated || ge.Liberate.IsSeries); public bool SetNotDownloadedEnabled => LibraryBookEntries.Any(ge => ge.Book.UserDefinedItem.BookStatus != LiberatedStatus.NotLiberated || ge.Liberate.IsSeries); public bool ConvertToMp3Enabled => LibraryBookEntries.Any(ge => ge.Book.UserDefinedItem.BookStatus is LiberatedStatus.Liberated); + public bool DownloadAsChaptersEnabled => LibraryBookEntries.Any(ge => ge.Book.UserDefinedItem.BookStatus is not LiberatedStatus.Error); public bool ReDownloadEnabled => LibraryBookEntries.Any(ge => ge.Book.UserDefinedItem.BookStatus is LiberatedStatus.Liberated); private GridEntry[] GridEntries { get; } diff --git a/Source/LibationUiBase/ProcessQueue/ProcessBookViewModel.cs b/Source/LibationUiBase/ProcessQueue/ProcessBookViewModel.cs index a6d1413c..5d8dd692 100644 --- a/Source/LibationUiBase/ProcessQueue/ProcessBookViewModel.cs +++ b/Source/LibationUiBase/ProcessQueue/ProcessBookViewModel.cs @@ -43,6 +43,7 @@ public enum ProcessBookStatus public class ProcessBookViewModel : ReactiveObject { public LibraryBook LibraryBook { get; protected set; } + public Configuration Configuration { get; } #region Properties exposed to the view public ProcessBookResult Result { get => field; set { RaiseAndSetIfChanged(ref field, value); RaisePropertyChanged(nameof(StatusText)); } } @@ -95,9 +96,10 @@ public class ProcessBookViewModel : ReactiveObject /// A series of Processable actions to perform on this book protected Queue> Processes { get; } = new(); - public ProcessBookViewModel(LibraryBook libraryBook) + public ProcessBookViewModel(LibraryBook libraryBook, Configuration configuration) { LibraryBook = libraryBook; + Configuration = configuration; Title = LibraryBook.Book.TitleWithSubtitle; Author = LibraryBook.Book.AuthorNames; @@ -203,9 +205,9 @@ public class ProcessBookViewModel : ReactiveObject public ProcessBookViewModel AddDownloadDecryptBook() => AddProcessable(); public ProcessBookViewModel AddConvertToMp3() => AddProcessable(); - private ProcessBookViewModel AddProcessable() where T : Processable, new() + private ProcessBookViewModel AddProcessable() where T : Processable, IProcessable { - Processes.Enqueue(() => new T()); + Processes.Enqueue(() => T.Create(Configuration)); return this; } @@ -260,7 +262,7 @@ public class ProcessBookViewModel : ReactiveObject private byte[] AudioDecodable_RequestCoverArt(object? sender, EventArgs e) { var quality - = Configuration.Instance.FileDownloadQuality == Configuration.DownloadQuality.High && LibraryBook.Book.PictureLarge is not null + = Configuration.FileDownloadQuality == Configuration.DownloadQuality.High && LibraryBook.Book.PictureLarge is not null ? new PictureDefinition(LibraryBook.Book.PictureLarge, PictureSize.Native) : new PictureDefinition(LibraryBook.Book.PictureId, PictureSize._500x500); @@ -345,7 +347,7 @@ public class ProcessBookViewModel : ReactiveObject const DialogResult SkipResult = DialogResult.Ignore; LogError($"ERROR. All books have not been processed. Book failed: {libraryBook.Book}"); - DialogResult? dialogResult = Configuration.Instance.BadBook switch + DialogResult? dialogResult = Configuration.BadBook switch { Configuration.BadBookAction.Abort => DialogResult.Abort, Configuration.BadBookAction.Retry => DialogResult.Retry, diff --git a/Source/LibationUiBase/ProcessQueue/ProcessQueueViewModel.cs b/Source/LibationUiBase/ProcessQueue/ProcessQueueViewModel.cs index ba1ca98b..e6030ac4 100644 --- a/Source/LibationUiBase/ProcessQueue/ProcessQueueViewModel.cs +++ b/Source/LibationUiBase/ProcessQueue/ProcessQueueViewModel.cs @@ -27,7 +27,7 @@ public class ProcessQueueViewModel : ReactiveObject { Queue.QueuedCountChanged += Queue_QueuedCountChanged; Queue.CompletedCountChanged += Queue_CompletedCountChanged; - SpeedLimit = LibationFileManager.Configuration.Instance.DownloadSpeedLimit / 1024m / 1024; + SpeedLimit = Configuration.Instance.DownloadSpeedLimit / 1024m / 1024; } public int CompletedCount { get => field; private set { RaiseAndSetIfChanged(ref field, value); RaisePropertyChanged(nameof(AnyCompleted)); } } @@ -48,7 +48,7 @@ public class ProcessQueueViewModel : ReactiveObject set { var newValue = Math.Min(999 * 1024 * 1024, (long)Math.Ceiling(value * 1024 * 1024)); - var config = LibationFileManager.Configuration.Instance; + var config = Configuration.Instance; config.DownloadSpeedLimit = newValue; _speedLimit @@ -57,6 +57,8 @@ public class ProcessQueueViewModel : ReactiveObject : 0; config.DownloadSpeedLimit = (long)(_speedLimit * 1024 * 1024); + if (Queue.Current is ProcessBookViewModel currentBook) + currentBook.Configuration.DownloadSpeedLimit = config.DownloadSpeedLimit; SpeedLimitIncrement = _speedLimit > 100 ? 10 : _speedLimit > 10 ? 1 @@ -89,24 +91,26 @@ public class ProcessQueueViewModel : ReactiveObject #region Add Books to Queue - public bool QueueDownloadPdf(IList libraryBooks) + public bool QueueDownloadPdf(IList libraryBooks, Configuration? config = null) { - if (!IsBooksDirectoryValid()) + config ??= Configuration.Instance; + if (!IsBooksDirectoryValid(config)) return false; var needsPdf = libraryBooks.Where(lb => lb.NeedsPdfDownload()).ToArray(); if (needsPdf.Length > 0) { Serilog.Log.Logger.Information("Begin download {count} pdfs", needsPdf.Length); - AddDownloadPdf(needsPdf); + AddDownloadPdf(needsPdf, config); return true; } return false; } - public bool QueueConvertToMp3(IList libraryBooks) + public bool QueueConvertToMp3(IList libraryBooks, Configuration? config = null) { - if (!IsBooksDirectoryValid()) + config ??= Configuration.Instance; + if (!IsBooksDirectoryValid(config)) return false; //Only Queue Liberated books for conversion. This isn't a perfect filter, but it's better than nothing. @@ -116,15 +120,16 @@ public class ProcessQueueViewModel : ReactiveObject if (preLiberated.Length == 1) RemoveCompleted(preLiberated[0]); Serilog.Log.Logger.Information("Begin convert {count} books to mp3", preLiberated.Length); - AddConvertMp3(preLiberated); + AddConvertMp3(preLiberated, config); return true; } return false; } - public bool QueueDownloadDecrypt(IList libraryBooks) + public bool QueueDownloadDecrypt(IList libraryBooks, Configuration? config = null) { - if (!IsBooksDirectoryValid()) + config ??= Configuration.Instance; + if (!IsBooksDirectoryValid(config)) return false; if (libraryBooks.Count == 1) @@ -137,14 +142,14 @@ public class ProcessQueueViewModel : ReactiveObject { RemoveCompleted(item); Serilog.Log.Logger.Information("Begin single library book backup of {libraryBook}", item); - AddDownloadDecrypt([item]); + AddDownloadDecrypt([item], config); return true; } else if (item.NeedsPdfDownload()) { RemoveCompleted(item); Serilog.Log.Logger.Information("Begin single pdf backup of {libraryBook}", item); - AddDownloadPdf([item]); + AddDownloadPdf([item], config); return true; } } @@ -155,16 +160,16 @@ public class ProcessQueueViewModel : ReactiveObject if (toLiberate.Length > 0) { Serilog.Log.Logger.Information("Begin backup of {count} library books", toLiberate.Length); - AddDownloadDecrypt(toLiberate); + AddDownloadDecrypt(toLiberate, config); return true; } } return false; } - private bool IsBooksDirectoryValid() + private bool IsBooksDirectoryValid(Configuration config) { - if (string.IsNullOrWhiteSpace(Configuration.Instance.Books)) + if (string.IsNullOrWhiteSpace(config.Books)) { Serilog.Log.Logger.Error("Books location is not set in configuration."); MessageBoxBase.Show( @@ -176,9 +181,9 @@ public class ProcessQueueViewModel : ReactiveObject } else if (AudibleFileStorage.BooksDirectory is null) { - Serilog.Log.Logger.Error("Failed to create books directory: {@booksDir}", Configuration.Instance.Books); + Serilog.Log.Logger.Error("Failed to create books directory: {@booksDir}", config.Books); MessageBoxBase.Show( - $"Libation was unable to create the \"Books location\" folder at:\n{Configuration.Instance.Books}\n\nPlease change the Books location in the settings menu.", + $"Libation was unable to create the \"Books location\" folder at:\n{config.Books}\n\nPlease change the Books location in the settings menu.", "Failed to Create Books Directory", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -186,9 +191,9 @@ public class ProcessQueueViewModel : ReactiveObject } else if (AudibleFileStorage.DownloadsInProgressDirectory is null) { - Serilog.Log.Logger.Error("Failed to create DownloadsInProgressDirectory in {@InProgress}", Configuration.Instance.InProgress); + Serilog.Log.Logger.Error("Failed to create DownloadsInProgressDirectory in {@InProgress}", config.InProgress); MessageBoxBase.Show( - $"Libation was unable to create the \"Downloads In Progress\" folder in:\n{Configuration.Instance.InProgress}\n\nPlease change the In Progress location in the settings menu.", + $"Libation was unable to create the \"Downloads In Progress\" folder in:\n{config.InProgress}\n\nPlease change the In Progress location in the settings menu.", "Failed to Create Downloads In Progress Directory", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -196,9 +201,9 @@ public class ProcessQueueViewModel : ReactiveObject } else if (AudibleFileStorage.DecryptInProgressDirectory is null) { - Serilog.Log.Logger.Error("Failed to create DecryptInProgressDirectory in {@InProgress}", Configuration.Instance.InProgress); + Serilog.Log.Logger.Error("Failed to create DecryptInProgressDirectory in {@InProgress}", config.InProgress); MessageBoxBase.Show( - $"Libation was unable to create the \"Decrypt In Progress\" folder in:\n{Configuration.Instance.InProgress}\n\nPlease change the In Progress location in the settings menu.", + $"Libation was unable to create the \"Decrypt In Progress\" folder in:\n{config.InProgress}\n\nPlease change the In Progress location in the settings menu.", "Failed to Create Decrypt In Progress Directory", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -218,34 +223,34 @@ public class ProcessQueueViewModel : ReactiveObject && entry.Status is ProcessBookStatus.Completed && Queue.RemoveCompleted(entry); - private void AddDownloadPdf(IList entries) + private void AddDownloadPdf(IList entries, Configuration config) { var procs = entries.Where(e => !IsBookInQueue(e)).Select(Create).ToArray(); Serilog.Log.Logger.Information("Queueing {count} books for PDF-only download", procs.Length); AddToQueue(procs); ProcessBookViewModel Create(LibraryBook entry) - => new ProcessBookViewModel(entry).AddDownloadPdf(); + => new ProcessBookViewModel(entry, config).AddDownloadPdf(); } - private void AddDownloadDecrypt(IList entries) + private void AddDownloadDecrypt(IList entries, Configuration config) { var procs = entries.Where(e => !IsBookInQueue(e)).Select(Create).ToArray(); Serilog.Log.Logger.Information("Queueing {count} books ofr download/decrypt", procs.Length); AddToQueue(procs); ProcessBookViewModel Create(LibraryBook entry) - => new ProcessBookViewModel(entry).AddDownloadDecryptBook().AddDownloadPdf(); + => new ProcessBookViewModel(entry, config).AddDownloadDecryptBook().AddDownloadPdf(); } - private void AddConvertMp3(IList entries) + private void AddConvertMp3(IList entries, Configuration config) { var procs = entries.Where(e => !IsBookInQueue(e)).Select(Create).ToArray(); Serilog.Log.Logger.Information("Queueing {count} books for mp3 conversion", procs.Length); AddToQueue(procs); ProcessBookViewModel Create(LibraryBook entry) - => new ProcessBookViewModel(entry).AddConvertToMp3(); + => new ProcessBookViewModel(entry, config).AddConvertToMp3(); } private void AddToQueue(IList pbook) @@ -282,7 +287,7 @@ public class ProcessQueueViewModel : ReactiveObject } Serilog.Log.Logger.Information("Begin processing queued item: '{item_LibraryBook}'", nextBook.LibraryBook); - + SpeedLimit = nextBook.Configuration.DownloadSpeedLimit / 1024m / 1024; var result = await nextBook.ProcessOneAsync(); Serilog.Log.Logger.Information("Completed processing queued item: '{item_LibraryBook}' with result: {result}", nextBook.LibraryBook, result); diff --git a/Source/LibationWinForms/Form1.ProcessQueue.cs b/Source/LibationWinForms/Form1.ProcessQueue.cs index ab5ca9c9..01625fd5 100644 --- a/Source/LibationWinForms/Form1.ProcessQueue.cs +++ b/Source/LibationWinForms/Form1.ProcessQueue.cs @@ -25,13 +25,13 @@ namespace LibationWinForms this.Width = width; } - private void ProductsDisplay_LiberateClicked(object sender, LibraryBook[] libraryBooks) + private void ProductsDisplay_LiberateClicked(object sender, System.Collections.Generic.IList libraryBooks, Configuration config) { try { - if (processBookQueue1.ViewModel.QueueDownloadDecrypt(libraryBooks)) + if (processBookQueue1.ViewModel.QueueDownloadDecrypt(libraryBooks, config)) SetQueueCollapseState(false); - else if (libraryBooks.Length == 1 && libraryBooks[0].Book.AudioExists) + else if (libraryBooks.Count == 1 && libraryBooks[0].Book.AudioExists) { // liberated: open explorer to file var filePath = AudibleFileStorage.Audio.GetPath(libraryBooks[0].Book.AudibleProductId); diff --git a/Source/LibationWinForms/GridView/ProductsDisplay.cs b/Source/LibationWinForms/GridView/ProductsDisplay.cs index 3af0f71d..71e1e367 100644 --- a/Source/LibationWinForms/GridView/ProductsDisplay.cs +++ b/Source/LibationWinForms/GridView/ProductsDisplay.cs @@ -22,7 +22,7 @@ namespace LibationWinForms.GridView /// Number of visible rows has changed public event EventHandler VisibleCountChanged; public event EventHandler RemovableCountChanged; - public event EventHandler LiberateClicked; + public event LiberateClickedHandler LiberateClicked; public event EventHandler LiberateSeriesClicked; public event EventHandler ConvertToMp3Clicked; public event EventHandler InitialLoaded; @@ -202,10 +202,31 @@ namespace LibationWinForms.GridView ctxMenu.Items.Add(downloadSelectedMenuItem); downloadSelectedMenuItem.Click += (s, _) => { - LiberateClicked?.Invoke(s, ctx.LibraryBookEntries.Select(e => e.LibraryBook).ToArray()); + LiberateClicked?.Invoke(s, ctx.LibraryBookEntries.Select(e => e.LibraryBook).ToArray(), Configuration.Instance); }; } + #endregion + #region Download split by chapters + + if (ctx.LibraryBookEntries.Length > 0) + { + var downloadChaptersMenuItem = new ToolStripMenuItem + { + Text = ctx.DownloadAsChapters, + Enabled = ctx.DownloadAsChaptersEnabled + }; + downloadChaptersMenuItem.Click += (_, e) => + { + var config = Configuration.Instance.CreateEphemeralCopy(); + config.AllowLibationFixup = config.SplitFilesByChapter = true; + var books = ctx.LibraryBookEntries.Select(e => e.LibraryBook).Where(lb => lb.Book.UserDefinedItem.BookStatus is not LiberatedStatus.Error).ToList(); + books.ForEach(b => b.Book.UserDefinedItem.BookStatus = LiberatedStatus.NotLiberated); + LiberateClicked?.Invoke(this, books, config); + }; + ctxMenu.Items.Add(downloadChaptersMenuItem); + } + #endregion #region Convert to Mp3 @@ -218,7 +239,6 @@ namespace LibationWinForms.GridView }; convertToMp3MenuItem.Click += (_, e) => ConvertToMp3Clicked?.Invoke(this, ctx.LibraryBookEntries.Select(e => e.LibraryBook).ToArray()); ctxMenu.Items.Add(convertToMp3MenuItem); - } #endregion @@ -239,7 +259,7 @@ namespace LibationWinForms.GridView if (entry4.Book.HasPdf) entry4.Book.UserDefinedItem.SetPdfStatus(LiberatedStatus.NotLiberated); - LiberateClicked?.Invoke(s, [entry4.LibraryBook]); + LiberateClicked?.Invoke(s, [entry4.LibraryBook], Configuration.Instance); }; } @@ -415,7 +435,7 @@ namespace LibationWinForms.GridView { if (liveGridEntry.LibraryBook.Book.UserDefinedItem.BookStatus is not LiberatedStatus.Error && !liveGridEntry.Liberate.IsUnavailable) - LiberateClicked?.Invoke(this, [liveGridEntry.LibraryBook]); + LiberateClicked?.Invoke(this, [liveGridEntry.LibraryBook], Configuration.Instance); } private void productsGrid_RemovableCountChanged(object sender, EventArgs e) From 9c3881c67d4bc8e32112482b69af5043512886ba Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 2 Dec 2025 11:00:04 -0700 Subject: [PATCH 6/9] Fix LibationCli reusing content licenses (#1473) --- Source/FileLiberator/DownloadDecryptBook.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/FileLiberator/DownloadDecryptBook.cs b/Source/FileLiberator/DownloadDecryptBook.cs index 128c3200..97a279bd 100644 --- a/Source/FileLiberator/DownloadDecryptBook.cs +++ b/Source/FileLiberator/DownloadDecryptBook.cs @@ -50,8 +50,10 @@ namespace FileLiberator var api = await libraryBook.GetApiAsync(); - LicenseInfo ??= await DownloadOptions.GetDownloadLicenseAsync(api, libraryBook, Configuration, cancellationToken); - using var downloadOptions = DownloadOptions.BuildDownloadOptions(libraryBook, Configuration, LicenseInfo); + //Processable instances are reusable, so don't set LicenseInfo + //override from within a DownloadDecryptBook instance. + var license = LicenseInfo ?? await DownloadOptions.GetDownloadLicenseAsync(api, libraryBook, Configuration, cancellationToken); + using var downloadOptions = DownloadOptions.BuildDownloadOptions(libraryBook, Configuration, license); var result = await DownloadAudiobookAsync(api, downloadOptions, cancellationToken); if (!result.Success || getFirstAudioFile(result.ResultFiles) is not TempFile audioFile) From 368e6952148c5cc81c408e3e95facc471ee1fde3 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 2 Dec 2025 12:20:18 -0700 Subject: [PATCH 7/9] Allow users to shoose whether Libation imports Audible Plus titles. --- Source/ApplicationServices/LibraryCommands.cs | 2 +- Source/AudibleUtilities/ApiExtended.cs | 21 +++++---- .../Controls/Settings/Import.axaml | 4 ++ .../ViewModels/Settings/ImportSettingsVM.cs | 4 ++ .../Configuration.PersistentSettings.cs | 3 ++ .../Dialogs/SettingsDialog.Designer.cs | 43 ++++++++++++------- .../Dialogs/SettingsDialog.ImportLibrary.cs | 3 ++ 7 files changed, 56 insertions(+), 24 deletions(-) diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index 59d959b6..aff6c629 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -299,7 +299,7 @@ namespace ApplicationServices try { - var dtoItems = await apiExtended.GetLibraryValidatedAsync(libraryOptions, Configuration.Instance.ImportEpisodes); + var dtoItems = await apiExtended.GetLibraryValidatedAsync(libraryOptions); logTime($"post scanAccountAsync {account.AccountName} qty: {dtoItems.Count}"); diff --git a/Source/AudibleUtilities/ApiExtended.cs b/Source/AudibleUtilities/ApiExtended.cs index 50f036a9..7e3d4df9 100644 --- a/Source/AudibleUtilities/ApiExtended.cs +++ b/Source/AudibleUtilities/ApiExtended.cs @@ -10,6 +10,7 @@ using Dinah.Core; using Polly; using Polly.Retry; using System.Threading; +using LibationFileManager; #nullable enable namespace AudibleUtilities @@ -72,16 +73,16 @@ namespace AudibleUtilities // 2 retries == 3 total .RetryAsync(2); - public Task> GetLibraryValidatedAsync(LibraryOptions libraryOptions, bool importEpisodes = true) + public Task> GetLibraryValidatedAsync(LibraryOptions libraryOptions) { // bug on audible's side. the 1st time after a long absence, a query to get library will return without titles or authors. a subsequent identical query will be successful. this is true whether or not tokens are refreshed // worse, this 1st dummy call doesn't seem to help: // var page = await api.GetLibraryAsync(new AudibleApi.LibraryOptions { NumberOfResultPerPage = 1, PageNumber = 1, PurchasedAfter = DateTime.Now.AddYears(-20), ResponseGroups = AudibleApi.LibraryOptions.ResponseGroupOptions.ALL_OPTIONS }); // i don't want to incur the cost of making a full dummy call every time because it fails sometimes - return policy.ExecuteAsync(() => getItemsAsync(libraryOptions, importEpisodes)); + return policy.ExecuteAsync(() => getItemsAsync(libraryOptions)); } - private async Task> getItemsAsync(LibraryOptions libraryOptions, bool importEpisodes) + private async Task> getItemsAsync(LibraryOptions libraryOptions) { Serilog.Log.Logger.Debug("Beginning library scan."); @@ -95,12 +96,12 @@ namespace AudibleUtilities //Scan the library for all added books. //Get relationship asins from episode-type items and write them to episodeChannel where they will be batched and queried. - await foreach (var item in Api.GetLibraryItemsPagesAsync(libraryOptions, BatchSize, semaphore)) + await foreach (var itemsBatch in Api.GetLibraryItemsPagesAsync(libraryOptions, BatchSize, semaphore)) { - if (importEpisodes) + if (Configuration.Instance.ImportEpisodes) { - var episodes = item.Where(i => i.IsEpisodes).ToList(); - var series = item.Where(i => i.IsSeriesParent).ToList(); + var episodes = itemsBatch.Where(i => i.IsEpisodes).ToList(); + var series = itemsBatch.Where(i => i.IsSeriesParent).ToList(); var parentAsins = episodes .SelectMany(i => i.Relationships) @@ -119,7 +120,11 @@ namespace AudibleUtilities items.AddRange(series); } - items.AddRange(item.Where(i => !i.IsSeriesParent && !i.IsEpisodes)); + var booksInBatch + = itemsBatch + .Where(i => !i.IsSeriesParent && !i.IsEpisodes) + .Where(i => i.IsAyce is not true || Configuration.Instance.ImportPlusTitles); + items.AddRange(booksInBatch); } sw.Stop(); diff --git a/Source/LibationAvalonia/Controls/Settings/Import.axaml b/Source/LibationAvalonia/Controls/Settings/Import.axaml index a78daaee..affb6cda 100644 --- a/Source/LibationAvalonia/Controls/Settings/Import.axaml +++ b/Source/LibationAvalonia/Controls/Settings/Import.axaml @@ -30,6 +30,10 @@ + + + + diff --git a/Source/LibationAvalonia/ViewModels/Settings/ImportSettingsVM.cs b/Source/LibationAvalonia/ViewModels/Settings/ImportSettingsVM.cs index 0df3dc6a..f9417ca9 100644 --- a/Source/LibationAvalonia/ViewModels/Settings/ImportSettingsVM.cs +++ b/Source/LibationAvalonia/ViewModels/Settings/ImportSettingsVM.cs @@ -10,6 +10,7 @@ namespace LibationAvalonia.ViewModels.Settings AutoScan = config.AutoScan; ShowImportedStats = config.ShowImportedStats; ImportEpisodes = config.ImportEpisodes; + ImportPlusTitles = config.ImportPlusTitles; DownloadEpisodes = config.DownloadEpisodes; AutoDownloadEpisodes = config.AutoDownloadEpisodes; } @@ -19,6 +20,7 @@ namespace LibationAvalonia.ViewModels.Settings config.AutoScan = AutoScan; config.ShowImportedStats = ShowImportedStats; config.ImportEpisodes = ImportEpisodes; + config.ImportPlusTitles = ImportPlusTitles; config.DownloadEpisodes = DownloadEpisodes; config.AutoDownloadEpisodes = AutoDownloadEpisodes; } @@ -26,12 +28,14 @@ namespace LibationAvalonia.ViewModels.Settings public string AutoScanText { get; } = Configuration.GetDescription(nameof(Configuration.AutoScan)); public string ShowImportedStatsText { get; } = Configuration.GetDescription(nameof(Configuration.ShowImportedStats)); public string ImportEpisodesText { get; } = Configuration.GetDescription(nameof(Configuration.ImportEpisodes)); + public string ImportPlusTitlesText { get; } = Configuration.GetDescription(nameof(Configuration.ImportPlusTitles)); public string DownloadEpisodesText { get; } = Configuration.GetDescription(nameof(Configuration.DownloadEpisodes)); public string AutoDownloadEpisodesText { get; } = Configuration.GetDescription(nameof(Configuration.AutoDownloadEpisodes)); public bool AutoScan { get; set; } public bool ShowImportedStats { get; set; } public bool ImportEpisodes { get; set; } + public bool ImportPlusTitles { get; set; } public bool DownloadEpisodes { get; set; } public bool AutoDownloadEpisodes { get; set; } } diff --git a/Source/LibationFileManager/Configuration.PersistentSettings.cs b/Source/LibationFileManager/Configuration.PersistentSettings.cs index 30c8dbc2..45aaa63a 100644 --- a/Source/LibationFileManager/Configuration.PersistentSettings.cs +++ b/Source/LibationFileManager/Configuration.PersistentSettings.cs @@ -330,6 +330,9 @@ namespace LibationFileManager [Description("Import episodes? (eg: podcasts) When unchecked, episodes will not be imported into Libation.")] public bool ImportEpisodes { get => GetNonString(defaultValue: true); set => SetNonString(value); } + [Description("Import Audible Plus books (books you do not own)? When unchecked, Audible Plus books will not be imported into Libation.")] + public bool ImportPlusTitles { get => GetNonString(defaultValue: true); set => SetNonString(value); } + [Description("Download episodes? (eg: podcasts). When unchecked, episodes already in Libation will not be downloaded.")] public bool DownloadEpisodes { get => GetNonString(defaultValue: true); set => SetNonString(value); } diff --git a/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs b/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs index d00ceaef..069ce7c9 100644 --- a/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs +++ b/Source/LibationWinForms/Dialogs/SettingsDialog.Designer.cs @@ -49,6 +49,7 @@ loggingLevelCb = new System.Windows.Forms.ComboBox(); tabControl = new System.Windows.Forms.TabControl(); tab1ImportantSettings = new System.Windows.Forms.TabPage(); + themeLbl = new System.Windows.Forms.Label(); themeCb = new System.Windows.Forms.ComboBox(); label22 = new System.Windows.Forms.Label(); groupBox1 = new System.Windows.Forms.GroupBox(); @@ -66,6 +67,7 @@ overwriteExistingCbox = new System.Windows.Forms.CheckBox(); saveEpisodesToSeriesFolderCbox = new System.Windows.Forms.CheckBox(); tab2ImportLibrary = new System.Windows.Forms.TabPage(); + importPlusTitlesCb = new System.Windows.Forms.CheckBox(); autoDownloadEpisodesCb = new System.Windows.Forms.CheckBox(); autoScanCb = new System.Windows.Forms.CheckBox(); showImportedStatsCb = new System.Windows.Forms.CheckBox(); @@ -139,7 +141,6 @@ retainAaxFileCbox = new System.Windows.Forms.CheckBox(); downloadCoverArtCbox = new System.Windows.Forms.CheckBox(); createCueSheetCbox = new System.Windows.Forms.CheckBox(); - themeLbl = new System.Windows.Forms.Label(); badBookGb.SuspendLayout(); tabControl.SuspendLayout(); tab1ImportantSettings.SuspendLayout(); @@ -220,10 +221,10 @@ // downloadEpisodesCb // downloadEpisodesCb.AutoSize = true; - downloadEpisodesCb.Location = new System.Drawing.Point(6, 81); + downloadEpisodesCb.Location = new System.Drawing.Point(6, 106); downloadEpisodesCb.Name = "downloadEpisodesCb"; downloadEpisodesCb.Size = new System.Drawing.Size(163, 19); - downloadEpisodesCb.TabIndex = 4; + downloadEpisodesCb.TabIndex = 5; downloadEpisodesCb.Text = "[download episodes desc]"; downloadEpisodesCb.UseVisualStyleBackColor = true; // @@ -404,10 +405,19 @@ tab1ImportantSettings.TabIndex = 0; tab1ImportantSettings.Text = "Important settings"; // + // themeLbl + // + themeLbl.AutoSize = true; + themeLbl.Location = new System.Drawing.Point(190, 393); + themeLbl.Name = "themeLbl"; + themeLbl.Size = new System.Drawing.Size(296, 15); + themeLbl.TabIndex = 12; + themeLbl.Text = "You must restart Libation for this change to take effect."; + // // themeCb // - themeCb.FormattingEnabled = true; themeCb.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + themeCb.FormattingEnabled = true; themeCb.Location = new System.Drawing.Point(63, 390); themeCb.Name = "themeCb"; themeCb.Size = new System.Drawing.Size(121, 23); @@ -579,6 +589,7 @@ // tab2ImportLibrary.AutoScroll = true; tab2ImportLibrary.BackColor = System.Drawing.SystemColors.Window; + tab2ImportLibrary.Controls.Add(importPlusTitlesCb); tab2ImportLibrary.Controls.Add(autoDownloadEpisodesCb); tab2ImportLibrary.Controls.Add(autoScanCb); tab2ImportLibrary.Controls.Add(showImportedStatsCb); @@ -591,13 +602,23 @@ tab2ImportLibrary.TabIndex = 1; tab2ImportLibrary.Text = "Import library"; // + // importPlusTitlesCb + // + importPlusTitlesCb.AutoSize = true; + importPlusTitlesCb.Location = new System.Drawing.Point(6, 81); + importPlusTitlesCb.Name = "importPlusTitlesCb"; + importPlusTitlesCb.Size = new System.Drawing.Size(199, 19); + importPlusTitlesCb.TabIndex = 4; + importPlusTitlesCb.Text = "[import audible plus books desc]"; + importPlusTitlesCb.UseVisualStyleBackColor = true; + // // autoDownloadEpisodesCb // autoDownloadEpisodesCb.AutoSize = true; - autoDownloadEpisodesCb.Location = new System.Drawing.Point(6, 106); + autoDownloadEpisodesCb.Location = new System.Drawing.Point(6, 131); autoDownloadEpisodesCb.Name = "autoDownloadEpisodesCb"; autoDownloadEpisodesCb.Size = new System.Drawing.Size(190, 19); - autoDownloadEpisodesCb.TabIndex = 5; + autoDownloadEpisodesCb.TabIndex = 6; autoDownloadEpisodesCb.Text = "[auto download episodes desc]"; autoDownloadEpisodesCb.UseVisualStyleBackColor = true; // @@ -1438,15 +1459,6 @@ createCueSheetCbox.UseVisualStyleBackColor = true; createCueSheetCbox.CheckedChanged += allowLibationFixupCbox_CheckedChanged; // - // themeLbl - // - themeLbl.AutoSize = true; - themeLbl.Location = new System.Drawing.Point(190, 393); - themeLbl.Name = "themeLbl"; - themeLbl.Size = new System.Drawing.Size(296, 15); - themeLbl.TabIndex = 12; - themeLbl.Text = "You must restart Libation for this change to take effect."; - // // SettingsDialog // AcceptButton = saveBtn; @@ -1615,5 +1627,6 @@ private System.Windows.Forms.Label label22; private System.Windows.Forms.ComboBox themeCb; private System.Windows.Forms.Label themeLbl; + private System.Windows.Forms.CheckBox importPlusTitlesCb; } } \ No newline at end of file diff --git a/Source/LibationWinForms/Dialogs/SettingsDialog.ImportLibrary.cs b/Source/LibationWinForms/Dialogs/SettingsDialog.ImportLibrary.cs index c381b7b8..8376d890 100644 --- a/Source/LibationWinForms/Dialogs/SettingsDialog.ImportLibrary.cs +++ b/Source/LibationWinForms/Dialogs/SettingsDialog.ImportLibrary.cs @@ -12,12 +12,14 @@ namespace LibationWinForms.Dialogs this.autoScanCb.Text = desc(nameof(config.AutoScan)); this.showImportedStatsCb.Text = desc(nameof(config.ShowImportedStats)); this.importEpisodesCb.Text = desc(nameof(config.ImportEpisodes)); + this.importPlusTitlesCb.Text = desc(nameof(config.ImportPlusTitles)); this.downloadEpisodesCb.Text = desc(nameof(config.DownloadEpisodes)); this.autoDownloadEpisodesCb.Text = desc(nameof(config.AutoDownloadEpisodes)); autoScanCb.Checked = config.AutoScan; showImportedStatsCb.Checked = config.ShowImportedStats; importEpisodesCb.Checked = config.ImportEpisodes; + importPlusTitlesCb.Checked = config.ImportPlusTitles; downloadEpisodesCb.Checked = config.DownloadEpisodes; autoDownloadEpisodesCb.Checked = config.AutoDownloadEpisodes; } @@ -26,6 +28,7 @@ namespace LibationWinForms.Dialogs config.AutoScan = autoScanCb.Checked; config.ShowImportedStats = showImportedStatsCb.Checked; config.ImportEpisodes = importEpisodesCb.Checked; + config.ImportPlusTitles = importPlusTitlesCb.Checked; config.DownloadEpisodes = downloadEpisodesCb.Checked; config.AutoDownloadEpisodes = autoDownloadEpisodesCb.Checked; } From d48ce397738ef40f0db04e659a5477f59916baad Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 2 Dec 2025 12:30:05 -0700 Subject: [PATCH 8/9] Move LibraryCommands.GetCounts() to background thread. --- .../ViewModels/MainVM.VisibleBooks.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Source/LibationAvalonia/ViewModels/MainVM.VisibleBooks.cs b/Source/LibationAvalonia/ViewModels/MainVM.VisibleBooks.cs index bc40f7d5..84a979bc 100644 --- a/Source/LibationAvalonia/ViewModels/MainVM.VisibleBooks.cs +++ b/Source/LibationAvalonia/ViewModels/MainVM.VisibleBooks.cs @@ -63,11 +63,11 @@ namespace LibationAvalonia.ViewModels public async void ProductsDisplay_VisibleCountChanged(object? sender, int qty) { setVisibleCount(qty); - await Dispatcher.UIThread.InvokeAsync(setLiberatedVisibleMenuItem); + await setLiberatedVisibleMenuItemAsync(); } private async void setLiberatedVisibleMenuItemAsync(object? _, object __) - => await Dispatcher.UIThread.InvokeAsync(setLiberatedVisibleMenuItem); + => await setLiberatedVisibleMenuItemAsync(); public void LiberateVisible() @@ -191,10 +191,11 @@ namespace LibationAvalonia.ViewModels await visibleLibraryBooks.RemoveBooksAsync(); } - private void setLiberatedVisibleMenuItem() + private async Task setLiberatedVisibleMenuItemAsync() { - var libraryStats = LibraryCommands.GetCounts(ProductsDisplay.GetVisibleBookEntries()); - setVisibleNotLiberatedCount(libraryStats.PendingBooks); + var visible = ProductsDisplay.GetVisibleBookEntries(); + var libraryStats = await Task.Run(() => LibraryCommands.GetCounts(visible)); + await Dispatcher.UIThread.InvokeAsync(() => setVisibleNotLiberatedCount(libraryStats.PendingBooks)); } } } From a230605ed55af6051c3c02bcec2cba73ffc9100e Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 2 Dec 2025 12:43:12 -0700 Subject: [PATCH 9/9] Improve GetCounts performance. --- .../LibationFileManager/AudibleFileStorage.cs | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/Source/LibationFileManager/AudibleFileStorage.cs b/Source/LibationFileManager/AudibleFileStorage.cs index 4ab1afb9..c97e0ecb 100644 --- a/Source/LibationFileManager/AudibleFileStorage.cs +++ b/Source/LibationFileManager/AudibleFileStorage.cs @@ -138,15 +138,35 @@ namespace LibationFileManager protected override LongPath? GetFilePathCustom(string productId) => GetFilePathsCustom(productId).FirstOrDefault(); + //GetFilePathsCustom gets called for every book during LibraryCommands.GetCounts(). + //Cache the results for a short time to avoid excessive file system hits. + private DateTime lastDlInProgressEnumeration; + private static TimeSpan dlInProgressCacheTime = TimeSpan.FromSeconds(10); + private IEnumerable? dlInProgressFilesCache; + protected override List GetFilePathsCustom(string productId) { if (DownloadsInProgressDirectory is not LongPath dlFolder) return []; var regex = GetBookSearchRegex(productId); - return FileUtility - .SaferEnumerateFiles(dlFolder, "*.*", SearchOption.AllDirectories) - .Where(s => regex.IsMatch(s)).ToList(); + + if (DateTime.UtcNow - lastDlInProgressEnumeration > dlInProgressCacheTime) + { + dlInProgressFilesCache = null; + } + + if (dlInProgressFilesCache is null) + { + dlInProgressFilesCache + = FileUtility + .SaferEnumerateFiles(dlFolder, "*.*", SearchOption.AllDirectories) + .ToArray(); + + lastDlInProgressEnumeration = DateTime.UtcNow; + } + + return dlInProgressFilesCache.Where(s => regex.IsMatch(s)).ToList(); } public bool Exists(string productId) => GetFilePath(productId) is not null;