From f950ba5bd70f93242897080aa3f62ec559588d68 Mon Sep 17 00:00:00 2001 From: Mavridis Philippe Date: Mon, 11 Mar 2024 01:15:03 +0200 Subject: [PATCH] Add support for different icon themes (Crystal, Classic, System) Signed-off-by: Mavridis Philippe --- kmix/appearanceconfig.ui | 130 +++++++++++------- kmix/kmix.kcfg | 17 +++ kmix/kmixdockwidget.cpp | 66 +++++++-- kmix/kmixdockwidget.h | 1 + kmix/pics/CMakeLists.txt | 6 +- kmix/pics/crystal/CMakeLists.txt | 13 ++ .../audio-volume-error.png} | Bin kmix/pics/{ => crystal}/audio-volume-high.png | Bin kmix/pics/{ => crystal}/audio-volume-low.png | Bin .../{ => crystal}/audio-volume-medium.png | Bin .../pics/{ => crystal}/audio-volume-muted.png | Bin kmix/pics/oldcrystal/CMakeLists.txt | 13 ++ kmix/pics/oldcrystal/audio-volume-error.png | Bin 0 -> 1176 bytes kmix/pics/oldcrystal/audio-volume-high.png | 1 + kmix/pics/oldcrystal/audio-volume-low.png | Bin 0 -> 1215 bytes kmix/pics/oldcrystal/audio-volume-medium.png | 1 + kmix/pics/oldcrystal/audio-volume-muted.png | Bin 0 -> 607 bytes 17 files changed, 185 insertions(+), 63 deletions(-) create mode 100644 kmix/pics/crystal/CMakeLists.txt rename kmix/pics/{kmixdocked_error.png => crystal/audio-volume-error.png} (100%) rename kmix/pics/{ => crystal}/audio-volume-high.png (100%) rename kmix/pics/{ => crystal}/audio-volume-low.png (100%) rename kmix/pics/{ => crystal}/audio-volume-medium.png (100%) rename kmix/pics/{ => crystal}/audio-volume-muted.png (100%) create mode 100644 kmix/pics/oldcrystal/CMakeLists.txt create mode 100644 kmix/pics/oldcrystal/audio-volume-error.png create mode 120000 kmix/pics/oldcrystal/audio-volume-high.png create mode 100644 kmix/pics/oldcrystal/audio-volume-low.png create mode 120000 kmix/pics/oldcrystal/audio-volume-medium.png create mode 100644 kmix/pics/oldcrystal/audio-volume-muted.png diff --git a/kmix/appearanceconfig.ui b/kmix/appearanceconfig.ui index a55f5a11..294b00fb 100644 --- a/kmix/appearanceconfig.ui +++ b/kmix/appearanceconfig.ui @@ -8,8 +8,8 @@ 0 0 - 464 - 280 + 487 + 278 @@ -19,30 +19,18 @@ unnamed - - - - Horizontal - - - - - Vertical - - + - kcfg_Orientation + kcfg_Menubar - - - 3 - 0 - 0 - 0 - + + Show &menu bar + + + true - + lblValueStyle @@ -50,20 +38,12 @@ Volume values: - + - lblOrientation - - - Sliders orientation: - - - - - kcfg_Tickmarks + kcfg_Labels - Show &tickmarks + Show &labels true @@ -71,27 +51,44 @@ - kcfg_Labels + kcfg_Tickmarks - Show &labels + Show &tickmarks true - + + + + None + + + + + Absolute + + + + + Relative + + - kcfg_Menubar - - - Show &menu bar + kcfg_ValueStyle - - true + + + 3 + 0 + 0 + 0 + - + spacer5 @@ -108,24 +105,63 @@ + + + lblOrientation + + + Sliders orientation: + + - None + Horizontal - Absolute + Vertical + + kcfg_Orientation + + + + 3 + 0 + 0 + 0 + + + + + + lblOrientation_2 + + + Icon theme: + + + - Relative + Crystal + + + + + Classic (Old Crystal) + + + + + System - kcfg_ValueStyle + kcfg_IconTheme diff --git a/kmix/kmix.kcfg b/kmix/kmix.kcfg index b6d595bd..d4ca0956 100644 --- a/kmix/kmix.kcfg +++ b/kmix/kmix.kcfg @@ -99,4 +99,21 @@ + + + + + + + + + + + + + + Crystal + + + \ No newline at end of file diff --git a/kmix/kmixdockwidget.cpp b/kmix/kmixdockwidget.cpp index fbc28d50..e2338f7f 100644 --- a/kmix/kmixdockwidget.cpp +++ b/kmix/kmixdockwidget.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,7 @@ #include "mixer.h" #include "mixdevicewidget.h" #include "kmixdockwidget.h" +#include "kmixsettings.h" #include "viewdockareapopup.h" KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name, bool volumePopup, bool dockIconMuting ) @@ -72,6 +74,9 @@ KMixDockWidget::KMixDockWidget( Mixer *mixer, TQWidget *parent, const char *name createActions(); createMasterVolWidget(); connect(this, TQ_SIGNAL(quitSelected()), kapp, TQ_SLOT(quitExtended())); + + TDEGlobal::dirs()->addResourceDir("icons_crystal", locate("appdata", "pics/crystal/")); + TDEGlobal::dirs()->addResourceDir("icons_oldcrystal", locate("appdata", "pics/oldcrystal/")); } KMixDockWidget::~KMixDockWidget() @@ -352,20 +357,10 @@ KMixDockWidget::updatePixmap(bool force) case 'H': fallback << "audio-volume-high" << "kmixdocked"; break; } - TQString icon = TQString::null; - for(TQStringList::iterator it = fallback.begin(); it != fallback.end(); ++it) - { - /* Check if icon exists */ - if(!kapp->iconLoader()->iconPath((*it), TDEIcon::User, true).isNull()) - { - icon = (*it); - break; - } - } - - if(icon.isNull()) + TQString icon = getIconPath(fallback); + if (icon.isNull()) { - icon = "kmixdocked_error"; + icon = getIconPath("audio-volume-error"); } origpixmap = isShown() ? loadSizedIcon(icon, width()) : loadIcon(icon); @@ -380,6 +375,51 @@ KMixDockWidget::updatePixmap(bool force) } } +TQString KMixDockWidget::getIconPath(TQStringList fallback) +{ + auto iconTheme = KMixSettings::iconTheme(); + + TQCString iconThemeName; + if (iconTheme != KMixSettings::EnumIconTheme::System) + { + switch (iconTheme) + { + case KMixSettings::EnumIconTheme::OldCrystal: + iconThemeName = "oldcrystal"; + break; + + default: + case KMixSettings::EnumIconTheme::Crystal: + iconThemeName = "crystal"; + break; + } + } + + for (TQStringList::iterator it = fallback.begin(); it != fallback.end(); ++it) + { + if (iconTheme == KMixSettings::EnumIconTheme::System) + { + TQString iconPath = kapp->iconLoader()->iconPath((*it), TDEIcon::Panel, true); + if (!iconPath.isNull()) + { + return iconPath; + } + } + + else + { + TQCString type = "icons_" + iconThemeName; + + TQString iconPath = TDEGlobal::dirs()->findResource(type, TQString("%1.png").arg(*it)); + if (!iconPath.isNull()) return iconPath; + + iconPath = TDEGlobal::dirs()->findResource(type, TQString("%1.svg").arg(*it)); + if (!iconPath.isNull()) return iconPath; + } + } + return TQString::null; +} + void KMixDockWidget::resizeEvent ( TQResizeEvent * ) { updatePixmap(true); diff --git a/kmix/kmixdockwidget.h b/kmix/kmixdockwidget.h index 266fa48f..8f119ace 100644 --- a/kmix/kmixdockwidget.h +++ b/kmix/kmixdockwidget.h @@ -71,6 +71,7 @@ class KMixDockWidget : public KSystemTray { void resizeEvent(TQResizeEvent *); void showEvent(TQShowEvent *); long getAvgVolume(); + TQString getIconPath(TQStringList fallback); private: bool _playBeepOnVolumeChange; diff --git a/kmix/pics/CMakeLists.txt b/kmix/pics/CMakeLists.txt index a2b88dc9..92af67f8 100644 --- a/kmix/pics/CMakeLists.txt +++ b/kmix/pics/CMakeLists.txt @@ -17,9 +17,9 @@ install( FILES mix_treble.png mix_unknown.png mix_volume.png mix_surround.png mix_video.png mix_headphone.png mix_digital.png mix_ac97.png mix_record.png - kmixdocked_error.png audio-volume-muted.png - audio-volume-low.png audio-volume-medium.png - audio-volume-high.png SpeakerFrontLeft.png SpeakerRearLeft.png SpeakerFrontRight.png SpeakerRearRight.png Listener.png DESTINATION ${DATA_INSTALL_DIR}/kmix/pics ) + +add_subdirectory(oldcrystal) +add_subdirectory(crystal) \ No newline at end of file diff --git a/kmix/pics/crystal/CMakeLists.txt b/kmix/pics/crystal/CMakeLists.txt new file mode 100644 index 00000000..71f61d26 --- /dev/null +++ b/kmix/pics/crystal/CMakeLists.txt @@ -0,0 +1,13 @@ +################################################################################ +# Copyright © 2024 Mavridis Philippe # +# # +# This file is released under the GNU GPL version 3 or later. # +# Improvements and feedback are welcome! # +################################################################################ + +set(theme "crystal") + +install(FILES audio-volume-error.png audio-volume-muted.png + audio-volume-low.png audio-volume-medium.png + audio-volume-high.png + DESTINATION ${DATA_INSTALL_DIR}/kmix/pics/${theme}) \ No newline at end of file diff --git a/kmix/pics/kmixdocked_error.png b/kmix/pics/crystal/audio-volume-error.png similarity index 100% rename from kmix/pics/kmixdocked_error.png rename to kmix/pics/crystal/audio-volume-error.png diff --git a/kmix/pics/audio-volume-high.png b/kmix/pics/crystal/audio-volume-high.png similarity index 100% rename from kmix/pics/audio-volume-high.png rename to kmix/pics/crystal/audio-volume-high.png diff --git a/kmix/pics/audio-volume-low.png b/kmix/pics/crystal/audio-volume-low.png similarity index 100% rename from kmix/pics/audio-volume-low.png rename to kmix/pics/crystal/audio-volume-low.png diff --git a/kmix/pics/audio-volume-medium.png b/kmix/pics/crystal/audio-volume-medium.png similarity index 100% rename from kmix/pics/audio-volume-medium.png rename to kmix/pics/crystal/audio-volume-medium.png diff --git a/kmix/pics/audio-volume-muted.png b/kmix/pics/crystal/audio-volume-muted.png similarity index 100% rename from kmix/pics/audio-volume-muted.png rename to kmix/pics/crystal/audio-volume-muted.png diff --git a/kmix/pics/oldcrystal/CMakeLists.txt b/kmix/pics/oldcrystal/CMakeLists.txt new file mode 100644 index 00000000..47b37e11 --- /dev/null +++ b/kmix/pics/oldcrystal/CMakeLists.txt @@ -0,0 +1,13 @@ +################################################################################ +# Copyright © 2024 Mavridis Philippe # +# # +# This file is released under the GNU GPL version 3 or later. # +# Improvements and feedback are welcome! # +################################################################################ + +set(theme "oldcrystal") + +install(FILES audio-volume-error.png audio-volume-muted.png + audio-volume-low.png audio-volume-medium.png + audio-volume-high.png + DESTINATION ${DATA_INSTALL_DIR}/kmix/pics/${theme}) \ No newline at end of file diff --git a/kmix/pics/oldcrystal/audio-volume-error.png b/kmix/pics/oldcrystal/audio-volume-error.png new file mode 100644 index 0000000000000000000000000000000000000000..b0497662696bfa8bcaf9e1274361daf9faf1ddd6 GIT binary patch literal 1176 zcmV;J1ZVq+P)Lyu# z()i5KgIRh0iFKctYP)X|92!ngP!N%kk?7A}pz>NT2MSAnekO2a)~Nyg*S)Os@ng-J zH3S3%ux;Bm_U+q8MPoY$>kY&m)5XjPx=0mg%>UNNyGM1ny1L@&>4~48AK~HQ#Ky*= z%{XkIjSRU`0zS;JtG{hYP3Xf`}S=nCMGberKN@a`}d>OYRS`= zv9szDJJR!~?~>=#Nk+T0k9np32D!ahtp90*t??SFtE(9v9%gK8j0Y+yDIqg6lf1k< z-l;aAO3Ck@7W`_)c~kP`zsdOp%6^B^-yr+S5bNKLps%lwk@|W}Cr)50EW}h)#CU!_ ze`RNLN342BdLeHd)(<@aRj2D>0#6z!`W24!jG?(Yiss6FGP(ze*cHp2bLXJ35n5ZJ zqXW9Spsfv>nxM9pPgP-fM8?W(?LN2dl*@rhuKJ;x%^a6joHWv!U)g{LWowOT&+R5q(Gk zW@SNQBAht`85xkC4hac}0ZZekDA>N8rd6x%zaR*qll`jR9b>gojq+Fx&zD@p@%_(O zQQe8y4pNokfXEdw_@ZuI{hKHou z;zGgN+H!tT1bYiY+kb+^)(NbW+n64L{sla4ljtrnhEOZ{4Y?rfd8(amp}k{ly_I}g z-~&H^3KG=qsrTiD?yHM+idi%%=Ws#%+(&(J)@;J8m;=C3t9#}nZ q@wn%Fhf%M&^ZU&muu;l%3iKbjob#4qQ)65J00002|me_oO3?>&U5*n=h)b6!}$66%(Q}n_H?CkiLX%1rb;A*Hg9U&d?}Gq zt1^=hMo@hJcPMp_K=$;3OWrc=7#c4SxhLFiF<1Bf32#4tczSvwFfb5g?Ol{U9!Ko2 zvZp%&2MUU3$=-3Cc6Eb`iwitFJP;5NfavIGDDHJ3{*Dgp94WCaD8rX+5*tj2%9g^( z$qCNR&Tw;cgTKE&A|oTg&&>AR)*!} zWo&G0;9n~&EJS8zCPX3;!pn5HLS0%!(cE#AP_(*l_H_82j3);OIx61lB;l~YZ{^2 zDTH>K5cYD->7GMya4`D&`!PB?iiwE{DtgN$larH>NF-1w6u7Qv!YQ_7E13Cn9M6H3 zjN_$UID7jc+!~DVQV%0c`#077j*brW_V!|6U;slyLl_<&hS6w5QBe^pDk>0H+=P#> z3b%q8tT4j%D;DTEmDpd{jDtn3I9{d)>;5!ixI8p9H9@1%P-^Jx?1WaUrS?jt61BCp zh)`&7s?3`zlFv6xbU#jC2Ss7zX0 zTX8sDg%5+%tjq0y>v?zDdxy+6`woJ3=p^0_N`RyC51cF4AulfvAt50M4-ZFFR1}0l zAr+|w+R&lLyH^$XfJpuSG3t2k2d3RepRL-3WPx7&1f;T@iZ(GZ5hO{XrKN?cw@#-+ zlx6@lpKLh390RXCgzTMNO?Ih`xLmD;N~J<`b2AmCrGeeu-Ow5yVsB<6?ESdgpUbz&7m- d;QXfw{sDBb-6;uSHe>(*002ovPDHLkV1lP8DKh{7 literal 0 HcmV?d00001 diff --git a/kmix/pics/oldcrystal/audio-volume-medium.png b/kmix/pics/oldcrystal/audio-volume-medium.png new file mode 120000 index 00000000..b2a8355e --- /dev/null +++ b/kmix/pics/oldcrystal/audio-volume-medium.png @@ -0,0 +1 @@ +/home/src/tdemultimedia/kmix/pics/oldcrystal/audio-volume-low.png \ No newline at end of file diff --git a/kmix/pics/oldcrystal/audio-volume-muted.png b/kmix/pics/oldcrystal/audio-volume-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..70764025ed69febf77b2ca716445228df64d2dc1 GIT binary patch literal 607 zcmV-l0-*hgP)t|&N0bS90(Id5WEVG-NYb*5eU(FchMJjWLuxhhu6jPd>$c6=9v;q4d;h)fylv# z(o*!QqsBaO7MLffOIjLt*oeSVVg=C8O2MBq)+iGCT6o&846Yg_)G)~-}wWQ4ict4V#d0QellcO#lstZ z@mtbv1{mbQx(VMmlB}^wmL)E-#}7#}_|b^cmOr46R6px{B1MV?T2@Pr^5Bg7=lvc)zVyx<*St`)FNJ;rSw;-y>C zITlH?#2l}gB*f*s>A(uZNh=;nUoyrN(@ZnTd*TFem~o|koCZnz=)zA34UKVTNzg`< zxjKvei1Cm5=%b&TxVcM!I0+IoGne{`~{J!q@NoMNt*xw002ovPDHLkV1kXg2o3-M literal 0 HcmV?d00001